- simplified m_symbolMask calculation

- removed debug prints

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@1083 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-06-26 12:05:44 +00:00
parent 539f35b6e7
commit 553755fd27
2 changed files with 28 additions and 40 deletions
+25 -37
View File
@@ -4,8 +4,6 @@
#include <stdint.h>
#include "DeSymbolizer.hpp"
#define DESYMBOLIZER_DEBUG printf
DeSymbolizer::DeSymbolizer()
: Processor::Block(1, 1)
, m_dataBitCount(0)
@@ -23,12 +21,7 @@ DeSymbolizer::DeSymbolizer()
void DeSymbolizer::setNumBitsPerSymbol(size_t nBitsPerSym)
{
m_nBitsPerSym = nBitsPerSym;
m_symbolMask = 0;
for(size_t k=0; k < nBitsPerSym; k++)
{
m_symbolMask <<= 1;
m_symbolMask |= 1;
}
m_symbolMask = (1 << nBitsPerSym) - 1;
m_dataBitCount = 0;
m_lastSymbol = 0;
}
@@ -48,23 +41,20 @@ void DeSymbolizer::sync(symbol_t symbol)
{
m_sync_counter = 0;
m_sync_dist_last = 0;
DESYMBOLIZER_DEBUG("Idle -> ACQ\n");
m_state = State::Acq;
}
else if (m_state == State::Acq)
{
if (is_preamble(word))
{
DESYMBOLIZER_DEBUG("Acquired bit sync. Last bit sync was %zu symbols ago\n", m_sync_dist);
if (m_sync_dist_last == m_sync_dist)
{
m_sync_counter++;
DESYMBOLIZER_DEBUG("Received sync at %zu %zu times -> OK\n", m_sync_dist, m_sync_counter);
if (m_sync_counter == SYNC_COUNTER_RELOAD)
{
m_sync_counter = 0;
m_dataBitCount = 0;
DESYMBOLIZER_DEBUG("ACQ -> TRK\n");
// Adjust data count phase
m_dataBitCount = m_nBitsPerSym;
m_state = State::Trk;
}
}
@@ -83,54 +73,52 @@ void DeSymbolizer::sync(symbol_t symbol)
{
if (not is_preamble(word))
{
DESYMBOLIZER_DEBUG("Missed sync at %zu. Found %04X instead -> NOK\n", m_sync_dist, word);
DESYMBOLIZER_DEBUG("TRK -> Idle\n");
m_state = State::Idle;
}
else
{
// printf("We tracked sync at %zu -> OK\n", m_sync_dist);
}
m_sync_dist = 0;
}
else
{
if (is_preamble(word))
{
DESYMBOLIZER_DEBUG("Found sync at %zu -> IGN\n", m_sync_dist);
}
}
}
m_sync_dist++;
}
uint8_t DeSymbolizer::sym2byte(symbol_t symbol)
size_t DeSymbolizer::sym2bytes(symbol_t symbol, uint8_t *pBytes)
{
static uint8_t byte;
byte <<= m_nBitsPerSym;
byte |= symbol & m_symbolMask;
return byte;
static uint8_t byte;
size_t num_produced = 0;
// Transmission order MSB first
for (size_t i=0; i < m_nBitsPerSym; i++)
{
byte <<= 1;
byte |= (symbol_t)(symbol >> (m_nBitsPerSym-1) & 1);
symbol <<= 1;
m_dataBitCount--;
if (m_dataBitCount == 0)
{
pBytes[num_produced++] = byte;
m_dataBitCount = 8;
}
}
return num_produced;
}
void DeSymbolizer::process(symbol_t symbol_enc)
{
uint8_t bytes[2];
symbol_t symbol = differentialDecode(symbol_enc);
sync(symbol);
// Create bytes from symbol
uint8_t byte = sym2byte(symbol);
size_t numBytes = sym2bytes(symbol, bytes);
// Commit bytes if in sync
if (m_state == State::Trk)
{
if (m_dataBitCount == 0)
if (numBytes)
{
// printf("Write %02X\n", byte);
m_buf_out->write(&byte, 1);
m_buf_out->write(bytes, numBytes);
}
m_dataBitCount = (m_dataBitCount + m_nBitsPerSym) & 7;
}
}
+3 -3
View File
@@ -30,8 +30,8 @@ public:
private:
uint32_t m_nBitsPerSym;
uint32_t m_dataBitCount;
size_t m_nBitsPerSym;
size_t m_dataBitCount;
symbol_t m_lastSymbol;
symbol_t m_symbolMask;
symbol_t differentialDecode(symbol_t symbol);
@@ -45,7 +45,7 @@ private:
Processor::Buffer<uint8_t> *m_buf_out;
void process(symbol_t symbol);
void sync(symbol_t symbol);
uint8_t sym2byte(symbol_t symbol);
size_t sym2bytes(symbol_t symbol, uint8_t *pBytes);
bool is_preamble(uint16_t data);
};