From 2e81d1f5b7565ce69823123ad7de29f77030c498 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 8 Dec 2015 16:04:48 -0800 Subject: [PATCH] Separate ERT packet and UI code. --- firmware/application/Makefile | 1 + firmware/application/ert_app.cpp | 72 ---------------------- firmware/application/ert_app.hpp | 58 +---------------- firmware/application/ert_packet.cpp | 96 +++++++++++++++++++++++++++++ firmware/application/ert_packet.hpp | 87 ++++++++++++++++++++++++++ 5 files changed, 185 insertions(+), 129 deletions(-) create mode 100644 firmware/application/ert_packet.cpp create mode 100644 firmware/application/ert_packet.hpp diff --git a/firmware/application/Makefile b/firmware/application/Makefile index 4642a7d0..cf6ab3dc 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -174,6 +174,7 @@ CPPSRC = main.cpp \ ais_app.cpp \ tpms_app.cpp \ ert_app.cpp \ + ert_packet.cpp \ spectrum_analysis_app.cpp \ sd_card.cpp \ log_file.cpp \ diff --git a/firmware/application/ert_app.cpp b/firmware/application/ert_app.cpp index 8fb1e992..cf91c9bd 100644 --- a/firmware/application/ert_app.cpp +++ b/firmware/application/ert_app.cpp @@ -32,78 +32,6 @@ using namespace lpc43xx; #include "crc.hpp" #include "string_format.hpp" -namespace ert { - -size_t Packet::length() const { - return decoder_.symbols_count(); -} - -bool Packet::is_valid() const { - return true; -} - -rtc::RTC Packet::received_at() const { - return received_at_; -} - -ERTPacketMessage::Type Packet::type() const { - return type_; -} - -ID Packet::id() const { - if( type() == ERTPacketMessage::Type::SCM ) { - const auto msb = reader_.read(0, 2); - const auto lsb = reader_.read(35, 24); - return (msb << 24) | lsb; - } - if( type() == ERTPacketMessage::Type::IDM ) { - return reader_.read(5 * 8, 32); - } - return invalid_id; -} - -Consumption Packet::consumption() const { - if( type() == ERTPacketMessage::Type::SCM ) { - return reader_.read(11, 24); - } - if( type() == ERTPacketMessage::Type::IDM ) { - return reader_.read(25 * 8, 32); - } - return invalid_consumption; -} - -ManchesterFormatted Packet::symbols_formatted() const { - return format_manchester(decoder_); -} - -bool Packet::crc_ok() const { - switch(type()) { - case ERTPacketMessage::Type::SCM: return crc_ok_scm(); - case ERTPacketMessage::Type::IDM: return crc_ok_idm(); - default: return false; - } -} - -bool Packet::crc_ok_scm() const { - CRC ert_bch { 0x6f63 }; - size_t start_bit = 5; - ert_bch.process_byte(reader_.read(0, start_bit)); - for(size_t i=start_bit; i ert_crc_ccitt { 0x1021, 0xffff, 0x1d0f }; - for(size_t i=0; i #include #include -namespace ert { - -using ID = uint32_t; -using Consumption = uint32_t; - -class Packet { -public: - Packet( - const rtc::RTC& received_at, - const ERTPacketMessage::Type type, - const baseband::Packet& packet - ) : packet_ { packet }, - received_at_ { received_at }, - decoder_ { packet_ }, - reader_ { decoder_ }, - type_ { type } - { - } - - size_t length() const; - - bool is_valid() const; - - rtc::RTC received_at() const; - - ERTPacketMessage::Type type() const; - ID id() const; - Consumption consumption() const; - - ManchesterFormatted symbols_formatted() const; - - bool crc_ok() const; - -private: - using Reader = FieldReader; - - const baseband::Packet packet_; - const rtc::RTC received_at_; - const ManchesterDecoder decoder_; - const Reader reader_; - const ERTPacketMessage::Type type_; - - const ID invalid_id = 0; - const Consumption invalid_consumption = 0; - - bool crc_ok_idm() const; - bool crc_ok_scm() const; -}; - -} /* namespace ert */ - class ERTModel { public: ERTModel(); diff --git a/firmware/application/ert_packet.cpp b/firmware/application/ert_packet.cpp new file mode 100644 index 00000000..7cec5fa7 --- /dev/null +++ b/firmware/application/ert_packet.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ert_packet.hpp" + +#include "crc.hpp" + +namespace ert { + +size_t Packet::length() const { + return decoder_.symbols_count(); +} + +bool Packet::is_valid() const { + return true; +} + +rtc::RTC Packet::received_at() const { + return received_at_; +} + +ERTPacketMessage::Type Packet::type() const { + return type_; +} + +ID Packet::id() const { + if( type() == ERTPacketMessage::Type::SCM ) { + const auto msb = reader_.read(0, 2); + const auto lsb = reader_.read(35, 24); + return (msb << 24) | lsb; + } + if( type() == ERTPacketMessage::Type::IDM ) { + return reader_.read(5 * 8, 32); + } + return invalid_id; +} + +Consumption Packet::consumption() const { + if( type() == ERTPacketMessage::Type::SCM ) { + return reader_.read(11, 24); + } + if( type() == ERTPacketMessage::Type::IDM ) { + return reader_.read(25 * 8, 32); + } + return invalid_consumption; +} + +ManchesterFormatted Packet::symbols_formatted() const { + return format_manchester(decoder_); +} + +bool Packet::crc_ok() const { + switch(type()) { + case ERTPacketMessage::Type::SCM: return crc_ok_scm(); + case ERTPacketMessage::Type::IDM: return crc_ok_idm(); + default: return false; + } +} + +bool Packet::crc_ok_scm() const { + CRC ert_bch { 0x6f63 }; + size_t start_bit = 5; + ert_bch.process_byte(reader_.read(0, start_bit)); + for(size_t i=start_bit; i ert_crc_ccitt { 0x1021, 0xffff, 0x1d0f }; + for(size_t i=0; i +#include + +#include "field_reader.hpp" +#include "baseband_packet.hpp" +#include "manchester.hpp" +#include "message.hpp" + +#include "lpc43xx_cpp.hpp" +using namespace lpc43xx; + +namespace ert { + +using ID = uint32_t; +using Consumption = uint32_t; + +class Packet { +public: + Packet( + const rtc::RTC& received_at, + const ERTPacketMessage::Type type, + const baseband::Packet& packet + ) : packet_ { packet }, + received_at_ { received_at }, + decoder_ { packet_ }, + reader_ { decoder_ }, + type_ { type } + { + } + + size_t length() const; + + bool is_valid() const; + + rtc::RTC received_at() const; + + ERTPacketMessage::Type type() const; + ID id() const; + Consumption consumption() const; + + ManchesterFormatted symbols_formatted() const; + + bool crc_ok() const; + +private: + using Reader = FieldReader; + + const baseband::Packet packet_; + const rtc::RTC received_at_; + const ManchesterDecoder decoder_; + const Reader reader_; + const ERTPacketMessage::Type type_; + + const ID invalid_id = 0; + const Consumption invalid_consumption = 0; + + bool crc_ok_idm() const; + bool crc_ok_scm() const; +}; + +} /* namespace ert */ + +#endif/*__ERT_PACKET_H__*/