diff --git a/radio/Symbolizer.cpp b/radio/Symbolizer.cpp index 1a6fa73..68e51f1 100644 --- a/radio/Symbolizer.cpp +++ b/radio/Symbolizer.cpp @@ -5,11 +5,11 @@ #include "Symbolizer.hpp" -Symbolizer::Symbolizer(ISymbolizer *pSymbolHandler) - : m_pSymbolHandler(pSymbolHandler) - , m_symbolBitCount(0) - , m_lastSymbol(0) - , m_symbolMask(0) +Symbolizer::Symbolizer() +: Processor::Block(1, 1) +, m_symbolBitCount(0) +, m_lastSymbol(0) +, m_symbolMask(0) { setNumBitsPerSymbol(8); } @@ -35,7 +35,8 @@ void Symbolizer::process(uint8_t src) // Speed up if (m_nBitsPerSym == SIZEOF_DATA_BITS) { - m_pSymbolHandler->onSymbol(differentialEncode((uint32_t)src)); + symbol_t symbol_encoded = differentialEncode((uint32_t)src); + m_buf_out->write(&symbol_encoded, 1); return; } @@ -48,7 +49,8 @@ void Symbolizer::process(uint8_t src) m_symbolBitCount++; if (m_symbolBitCount == m_nBitsPerSym) { - m_pSymbolHandler->onSymbol(differentialEncode(dst)); + symbol_t symbol_encoded = differentialEncode(dst); + m_buf_out->write(&symbol_encoded, 1); m_symbolBitCount = 0; dst = 0; } @@ -67,6 +69,24 @@ void Symbolizer::process(void *pSrc, uint32_t len) } } +void Symbolizer::prepare() +{ + // Get buffers + m_buf_in = buffer_in(); + m_buf_out = buffer_out(); +} + +void Symbolizer::process() +{ + // Process input + while(m_buf_in->len()) + { + uint8_t data; + m_buf_in->read(&data, 1); + process(data); + } +} + uint32_t Symbolizer::differentialEncode(uint32_t symbol) { // Differential encode @@ -75,15 +95,4 @@ uint32_t Symbolizer::differentialEncode(uint32_t symbol) return m_lastSymbol; } -void Symbolizer::onFrame(void *pFrame, uint32_t size) -{ - data_t *pData = (data_t*)pFrame; - - while(size) - { - process(*(pData++)); - size -= sizeof(data_t); - } -} - // -------------------------------------------------------------- diff --git a/radio/Symbolizer.hpp b/radio/Symbolizer.hpp index c09ed78..cc3faf2 100644 --- a/radio/Symbolizer.hpp +++ b/radio/Symbolizer.hpp @@ -7,31 +7,27 @@ #include "Formatter.hpp" -class ISymbolizer +class Symbolizer : public Processor::Block { public: - ISymbolizer() {} - virtual ~ISymbolizer() = default; - virtual void onSymbol(symbol_t symbol) = 0; -}; - -class Symbolizer : public IFormatter -{ -public: - Symbolizer(ISymbolizer *pSymbolHandler); + Symbolizer(); virtual ~Symbolizer() = default; void process(data_t src); void process(void *pSrc, uint32_t len); void setNumBitsPerSymbol(uint32_t nBitsPerSym); + // Processor::Block + void prepare() override; + void process(); + private: uint32_t m_nBitsPerSym; - ISymbolizer *m_pSymbolHandler; uint32_t m_symbolBitCount; symbol_t m_lastSymbol; symbol_t m_symbolMask; + Processor::Buffer *m_buf_in; + Processor::Buffer *m_buf_out; symbol_t differentialEncode(symbol_t symbol); - void onFrame(void *pFrame, uint32_t size) override; }; // --------------------------------------------------------------