Clean up ERT packet type notation.

Still not great, but at least repeated code is reduced.
This commit is contained in:
Jared Boone 2015-12-06 15:47:04 -08:00
parent 9e004d4754
commit b9643dc988
4 changed files with 20 additions and 27 deletions

View File

@ -45,27 +45,27 @@ rtc::RTC Packet::received_at() const {
return received_at_; return received_at_;
} }
Packet::Type Packet::type() const { ERTPacket::Type Packet::type() const {
return type_; return type_;
} }
ID Packet::id() const { ID Packet::id() const {
if( type() == Packet::Type::SCM ) { if( type() == ERTPacket::Type::SCM ) {
const auto msb = reader_.read(0, 2); const auto msb = reader_.read(0, 2);
const auto lsb = reader_.read(35, 24); const auto lsb = reader_.read(35, 24);
return (msb << 24) | lsb; return (msb << 24) | lsb;
} }
if( type() == Packet::Type::IDM ) { if( type() == ERTPacket::Type::IDM ) {
return reader_.read(5 * 8, 32); return reader_.read(5 * 8, 32);
} }
return invalid_id; return invalid_id;
} }
Consumption Packet::consumption() const { Consumption Packet::consumption() const {
if( type() == Packet::Type::SCM ) { if( type() == ERTPacket::Type::SCM ) {
return reader_.read(11, 24); return reader_.read(11, 24);
} }
if( type() == Packet::Type::IDM ) { if( type() == ERTPacket::Type::IDM ) {
return reader_.read(25 * 8, 32); return reader_.read(25 * 8, 32);
} }
return invalid_consumption; return invalid_consumption;
@ -99,14 +99,7 @@ void ERTView::on_show() {
const auto message = static_cast<const ERTPacketMessage*>(p); const auto message = static_cast<const ERTPacketMessage*>(p);
rtc::RTC datetime; rtc::RTC datetime;
rtcGetTime(&RTCD1, &datetime); rtcGetTime(&RTCD1, &datetime);
ert::Packet::Type packet_type = ert::Packet::Type::Unknown; const ert::Packet packet { datetime, message->packet.type, message->packet.payload, message->packet.bits_received };
if( message->packet.preamble == 0x1f2a60 ) {
packet_type = ert::Packet::Type::SCM;
} else if( message->packet.preamble == 0x555516a3 ) {
packet_type = ert::Packet::Type::IDM;
}
const ert::Packet packet { datetime, packet_type, message->packet.payload, message->packet.bits_received };
if( this->model.on_packet(packet) ) { if( this->model.on_packet(packet) ) {
this->on_packet(packet); this->on_packet(packet);
} }
@ -124,14 +117,14 @@ void ERTView::on_hide() {
void ERTView::on_packet(const ert::Packet& packet) { void ERTView::on_packet(const ert::Packet& packet) {
std::string msg; std::string msg;
switch(packet.type()) { switch(packet.type()) {
case ert::Packet::Type::SCM: case ERTPacket::Type::SCM:
msg += "SCM "; msg += "SCM ";
msg += to_string_dec_uint(packet.id(), 10); msg += to_string_dec_uint(packet.id(), 10);
msg += " "; msg += " ";
msg += to_string_dec_uint(packet.consumption(), 10); msg += to_string_dec_uint(packet.consumption(), 10);
break; break;
case ert::Packet::Type::IDM: case ERTPacket::Type::IDM:
msg += "IDM "; msg += "IDM ";
msg += to_string_dec_uint(packet.id(), 10); msg += to_string_dec_uint(packet.id(), 10);
msg += " "; msg += " ";

View File

@ -48,15 +48,9 @@ using Consumption = uint32_t;
class Packet { class Packet {
public: public:
enum Type {
Unknown = 0,
IDM = 1,
SCM = 2,
};
Packet( Packet(
const rtc::RTC& received_at, const rtc::RTC& received_at,
const Type type, const ERTPacket::Type type,
const std::bitset<1024>& payload, const std::bitset<1024>& payload,
const size_t payload_length const size_t payload_length
) : payload_ { payload }, ) : payload_ { payload },
@ -74,7 +68,7 @@ public:
rtc::RTC received_at() const; rtc::RTC received_at() const;
Type type() const; ERTPacket::Type type() const;
ID id() const; ID id() const;
Consumption consumption() const; Consumption consumption() const;
@ -86,7 +80,7 @@ private:
const rtc::RTC received_at_; const rtc::RTC received_at_;
const ManchesterDecoder decoder_; const ManchesterDecoder decoder_;
const Reader reader_; const Reader reader_;
const Type type_; const ERTPacket::Type type_;
const ID invalid_id = 0; const ID invalid_id = 0;
const Consumption invalid_consumption = 0; const Consumption invalid_consumption = 0;

View File

@ -99,7 +99,7 @@ void ERTProcessor::scm_handler(
const size_t bits_received const size_t bits_received
) { ) {
ERTPacketMessage message; ERTPacketMessage message;
message.packet.preamble = 0x1f2a60; message.packet.type = ERTPacket::Type::SCM;
message.packet.payload = payload; message.packet.payload = payload;
message.packet.bits_received = bits_received; message.packet.bits_received = bits_received;
shared_memory.application_queue.push(message); shared_memory.application_queue.push(message);
@ -110,7 +110,7 @@ void ERTProcessor::idm_handler(
const size_t bits_received const size_t bits_received
) { ) {
ERTPacketMessage message; ERTPacketMessage message;
message.packet.preamble = 0x555516a3; message.packet.type = ERTPacket::Type::IDM;
message.packet.payload = payload; message.packet.payload = payload;
message.packet.bits_received = bits_received; message.packet.bits_received = bits_received;
shared_memory.application_queue.push(message); shared_memory.application_queue.push(message);

View File

@ -242,7 +242,13 @@ public:
}; };
struct ERTPacket { struct ERTPacket {
uint64_t preamble { 0 }; enum class Type : uint32_t {
Unknown = 0,
IDM = 1,
SCM = 2,
};
Type type { Type::Unknown };
std::bitset<1024> payload; std::bitset<1024> payload;
size_t bits_received { 0 }; size_t bits_received { 0 };
}; };