// -------------------------------------------------------------- #ifndef _RADIO_DESYMBOLIZER_HPP_ #define _RADIO_DESYMBOLIZER_HPP_ #include #include #include "DeFormatter.hpp" class DeSymbolizer : public Processor::Block { enum State { Idle, Acq, Trk }; static const size_t SYNC_COUNTER_RELOAD = 3; public: DeSymbolizer(); virtual ~DeSymbolizer() = default; void setNumBitsPerSymbol(size_t nBitsPerSym); // Processor::Block void prepare() override; void process() override; private: uint32_t m_nBitsPerSym; uint32_t m_dataBitCount; symbol_t m_lastSymbol; symbol_t m_symbolMask; symbol_t differentialDecode(symbol_t symbol); State m_state; size_t m_sync_dist; size_t m_sync_dist_last; size_t m_sync_counter; uint8_t m_delay[2]; Processor::Buffer *m_buf_in; Processor::Buffer *m_buf_out; void process(symbol_t symbol); void sync(symbol_t symbol); uint8_t sym2byte(symbol_t symbol); bool is_preamble(uint16_t data); }; // -------------------------------------------------------------- #endif // _RADIO_DESYMBOLIZER_HPP_