diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/edi/ETIDecoder.cpp | 14 | ||||
-rw-r--r-- | lib/edi/ETIDecoder.hpp | 4 | ||||
-rw-r--r-- | lib/edi/common.cpp | 27 | ||||
-rw-r--r-- | lib/edi/common.hpp | 10 |
4 files changed, 29 insertions, 26 deletions
diff --git a/lib/edi/ETIDecoder.cpp b/lib/edi/ETIDecoder.cpp index 0a4da54..1a726cf 100644 --- a/lib/edi/ETIDecoder.cpp +++ b/lib/edi/ETIDecoder.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2020 + Copyright (C) 2024 Matthias P. Braendli, matthias.braendli@mpb.li http://opendigitalradio.org @@ -44,7 +44,7 @@ ETIDecoder::ETIDecoder(ETIDataCollector& data_collector) : std::bind(&ETIDecoder::decode_estn, this, _1, _2)); m_dispatcher.register_tag("*dmy", std::bind(&ETIDecoder::decode_stardmy, this, _1, _2)); - m_dispatcher.register_tagpacket_handler(std::bind(&ETIDecoder::decode_tagpacket, this, _1)); + m_dispatcher.register_afpacket_handler(std::bind(&ETIDecoder::decode_afpacket, this, _1)); } void ETIDecoder::set_verbose(bool verbose) @@ -174,7 +174,7 @@ bool ETIDecoder::decode_deti(const std::vector<uint8_t>& value, const tag_name_t fic.begin()); i += fic_length; - m_data_collector.update_fic(move(fic)); + m_data_collector.update_fic(std::move(fic)); } if (rfudf) { @@ -215,7 +215,7 @@ bool ETIDecoder::decode_estn(const std::vector<uint8_t>& value, const tag_name_t value.end(), back_inserter(stc.mst)); - m_data_collector.add_subchannel(move(stc)); + m_data_collector.add_subchannel(std::move(stc)); return true; } @@ -225,9 +225,9 @@ bool ETIDecoder::decode_stardmy(const std::vector<uint8_t>&, const tag_name_t&) return true; } -bool ETIDecoder::decode_tagpacket(const std::vector<uint8_t>& value) +bool ETIDecoder::decode_afpacket(std::vector<uint8_t>&& value) { - m_received_tagpacket.tagpacket = value; + m_received_tagpacket.afpacket = std::move(value); return true; } @@ -237,7 +237,7 @@ void ETIDecoder::packet_completed() ReceivedTagPacket tp; swap(tp, m_received_tagpacket); - m_data_collector.assemble(move(tp)); + m_data_collector.assemble(std::move(tp)); } } diff --git a/lib/edi/ETIDecoder.hpp b/lib/edi/ETIDecoder.hpp index 3949a14..1ad6c64 100644 --- a/lib/edi/ETIDecoder.hpp +++ b/lib/edi/ETIDecoder.hpp @@ -58,7 +58,7 @@ struct eti_stc_data { }; struct ReceivedTagPacket { - std::vector<uint8_t> tagpacket; + std::vector<uint8_t> afpacket; frame_timestamp_t timestamp; seq_info_t seq; }; @@ -133,7 +133,7 @@ class ETIDecoder { bool decode_estn(const std::vector<uint8_t>& value, const tag_name_t& n); bool decode_stardmy(const std::vector<uint8_t>& value, const tag_name_t& n); - bool decode_tagpacket(const std::vector<uint8_t>& value); + bool decode_afpacket(std::vector<uint8_t>&& value); void packet_completed(); diff --git a/lib/edi/common.cpp b/lib/edi/common.cpp index c99997a..b314737 100644 --- a/lib/edi/common.cpp +++ b/lib/edi/common.cpp @@ -129,10 +129,9 @@ std::string tag_name_to_human_readable(const tag_name_t& name) return s; } -TagDispatcher::TagDispatcher( - std::function<void()>&& af_packet_completed) : - m_af_packet_completed(move(af_packet_completed)), - m_tagpacket_handler([](const std::vector<uint8_t>& /*ignore*/){}) +TagDispatcher::TagDispatcher(std::function<void()>&& af_packet_completed) : + m_af_packet_completed(std::move(af_packet_completed)), + m_afpacket_handler([](std::vector<uint8_t>&& /*ignore*/){}) { } @@ -278,7 +277,6 @@ void TagDispatcher::setMaxDelay(int num_af_packets) } -#define AFPACKET_HEADER_LEN 10 // includes SYNC TagDispatcher::decode_result_t TagDispatcher::decode_afpacket( const std::vector<uint8_t> &input_data) { @@ -341,25 +339,30 @@ TagDispatcher::decode_result_t TagDispatcher::decode_afpacket( return {decode_state_e::Error, AFPACKET_HEADER_LEN + taglength + crclen}; } else { + vector<uint8_t> afpacket(AFPACKET_HEADER_LEN + taglength + crclen); + copy(input_data.begin(), + input_data.begin() + AFPACKET_HEADER_LEN + taglength + crclen, + afpacket.begin()); + m_afpacket_handler(std::move(afpacket)); + vector<uint8_t> payload(taglength); copy(input_data.begin() + AFPACKET_HEADER_LEN, input_data.begin() + AFPACKET_HEADER_LEN + taglength, payload.begin()); - return { - decode_tagpacket(payload) ? decode_state_e::Ok : decode_state_e::Error, - AFPACKET_HEADER_LEN + taglength + crclen}; + auto result = decode_tagpacket(payload) ? decode_state_e::Ok : decode_state_e::Error; + return {result, AFPACKET_HEADER_LEN + taglength + crclen}; } } void TagDispatcher::register_tag(const std::string& tag, tag_handler&& h) { - m_handlers[tag] = move(h); + m_handlers[tag] = std::move(h); } -void TagDispatcher::register_tagpacket_handler(tagpacket_handler&& h) +void TagDispatcher::register_afpacket_handler(afpacket_handler&& h) { - m_tagpacket_handler = move(h); + m_afpacket_handler = std::move(h); } @@ -428,8 +431,6 @@ bool TagDispatcher::decode_tagpacket(const vector<uint8_t> &payload) } } - m_tagpacket_handler(payload); - return success; } diff --git a/lib/edi/common.hpp b/lib/edi/common.hpp index c3e6c40..f273ecf 100644 --- a/lib/edi/common.hpp +++ b/lib/edi/common.hpp @@ -32,6 +32,8 @@ namespace EdiDecoder { +constexpr size_t AFPACKET_HEADER_LEN = 10; // includes SYNC + struct frame_timestamp_t { uint32_t seconds = 0; uint32_t utco = 0; @@ -133,9 +135,9 @@ class TagDispatcher { */ void register_tag(const std::string& tag, tag_handler&& h); - /* The complete tagpacket can also be retrieved */ - using tagpacket_handler = std::function<void(const std::vector<uint8_t>&)>; - void register_tagpacket_handler(tagpacket_handler&& h); + /* The complete AF packet can also be retrieved */ + using afpacket_handler = std::function<void(std::vector<uint8_t>&&)>; + void register_afpacket_handler(afpacket_handler&& h); seq_info_t get_seq_info() const { return m_last_sequences; @@ -160,7 +162,7 @@ class TagDispatcher { std::vector<uint8_t> m_input_data; std::map<std::string, tag_handler> m_handlers; std::function<void()> m_af_packet_completed; - tagpacket_handler m_tagpacket_handler; + afpacket_handler m_afpacket_handler; std::vector<std::string> m_ignored_tags; }; |