// -------------------------------------------------------------- #ifndef _RADIO_DEFORMATTER_HPP_ #define _RADIO_DEFORMATTER_HPP_ #include #include #include "FrameDefs.hpp" #include "Scrambler.hpp" class IData { public: IData() {} virtual ~IData() {} virtual void onData(data_t data) = 0; virtual void onReset() = 0; }; class IDeFormatter { public: IDeFormatter() {} virtual ~IDeFormatter() {} virtual void onData(void *pData, uint32_t size) = 0; }; class DeFormatter : public IData { enum State { Idle, Header, Data }; public: DeFormatter(IDeFormatter *pDataHandler); ~DeFormatter(); void process(uint8_t data); frame_statistics_t getStats(); void resetStats(); private: IDeFormatter *m_pDataHandler; Scrambler m_scrambler; uint32_t m_dataCount; frame_hdr_t m_Hdr; uint8_t m_data[FRAME_NUM_BYTES_PER_FRAME]; frame_statistics_t m_frameStats; State m_state; void onData(data_t data) override; void onReset() override; }; // -------------------------------------------------------------- #endif // _RADIO_DEFORMATTER_HPP_