@ -40,8 +40,8 @@ const uint32_t DATA_SYNC_MASK = 0x00FFFFFFU;
const uint8_t DATA_SYNC_ERRS = 3U ;
// D-Star bit order version of 0x55 0x55 0xC8 0x7A
const uint 32_t END_SYNC_DATA = 0x AAAA135EU;
const uint 32_t END_SYNC_MASK = 0x FFFFFFFFU;
const uint 64_t END_SYNC_DATA = 0x0000AAAA AAAA135EU;
const uint 64_t END_SYNC_MASK = 0x0000FFFF FFFFFFFFU;
const uint8_t END_SYNC_ERRS = 1U ;
const uint8_t BIT_MASK_TABLE0 [ ] = { 0x7FU , 0xBFU , 0xDFU , 0xEFU , 0xF7U , 0xFBU , 0xFDU , 0xFEU } ;
@ -239,6 +239,7 @@ const uint16_t CCITT_TABLE[] = {
CDStarRX : : CDStarRX ( ) :
m_rxState ( DSRXS_NONE ) ,
m_patternBuffer ( 0x00U ) ,
m_patternBuffer64 ( 0x00U ) ,
m_rxBuffer ( ) ,
m_rxBufferBits ( 0U ) ,
m_dataBits ( 0U ) ,
@ -256,6 +257,7 @@ void CDStarRX::reset()
{
m_rxState = DSRXS_NONE ;
m_patternBuffer = 0x00U ;
m_patternBuffer64 = 0x00U ;
m_rxBufferBits = 0U ;
m_dataBits = 0U ;
}
@ -283,6 +285,10 @@ void CDStarRX::processNone(bool bit)
if ( bit )
m_patternBuffer | = 0x01U ;
m_patternBuffer64 < < = 1 ;
if ( bit )
m_patternBuffer64 | = 0x01U ;
// Fuzzy matching of the preamble sync sequence
if ( countBits32 ( ( m_patternBuffer & PREAMBLE_MASK ) ^ PREAMBLE_DATA ) < = PREAMBLE_ERRS ) {
@ -329,6 +335,10 @@ void CDStarRX::processHeader(bool bit)
if ( bit )
m_patternBuffer | = 0x01U ;
m_patternBuffer64 < < = 1 ;
if ( bit )
m_patternBuffer64 | = 0x01U ;
WRITE_BIT2 ( m_rxBuffer , m_rxBufferBits , bit ) ;
m_rxBufferBits + + ;
@ -363,6 +373,10 @@ void CDStarRX::processData(bool bit)
if ( bit )
m_patternBuffer | = 0x01U ;
m_patternBuffer64 < < = 1 ;
if ( bit )
m_patternBuffer64 | = 0x01U ;
WRITE_BIT2 ( m_rxBuffer , m_rxBufferBits , bit ) ;
m_rxBufferBits + + ;
@ -370,7 +384,7 @@ void CDStarRX::processData(bool bit)
reset ( ) ;
// Fuzzy matching of the end frame sequences
if ( countBits 32( ( m_patternBuffer & END_SYNC_MASK ) ^ END_SYNC_DATA ) < = END_SYNC_ERRS ) {
if ( countBits 64( ( m_patternBuffer64 & END_SYNC_MASK ) ^ END_SYNC_DATA ) < = END_SYNC_ERRS ) {
DEBUG1 ( " DStarRX: Found end sync in Data " ) ;
io . setDecode ( false ) ;