Extend preamble length for network CSBK preamble

This commit is contained in:
Andy CA6JAU
2018-09-23 11:11:44 -03:00
parent 9d2d4c804e
commit 3e81d1eb64
3 changed files with 38 additions and 1 deletions

View File

@@ -127,6 +127,14 @@ void CDMRCSBK::get(unsigned char* bytes) const
{
assert(bytes != NULL);
m_data[10U] ^= CSBK_CRC_MASK[0U];
m_data[11U] ^= CSBK_CRC_MASK[1U];
CCRC::addCCITT162(m_data, 12U);
m_data[10U] ^= CSBK_CRC_MASK[0U];
m_data[11U] ^= CSBK_CRC_MASK[1U];
CBPTC19696 bptc;
bptc.encode(m_data, bytes);
}
@@ -170,3 +178,8 @@ unsigned char CDMRCSBK::getCBF() const
{
return m_CBF;
}
void CDMRCSBK::setCBF(unsigned char cbf)
{
m_CBF = m_data[3U] = cbf;
}

View File

@@ -57,6 +57,8 @@ public:
bool getDataContent() const;
unsigned char getCBF() const;
void setCBF(unsigned char cbf);
private:
unsigned char* m_data;
CSBKO m_CSBKO;

View File

@@ -66,6 +66,7 @@ const unsigned char TALKER_ID_BLOCK3 = 0x08U;
const unsigned int NO_HEADERS_SIMPLEX = 8U;
const unsigned int NO_HEADERS_DUPLEX = 3U;
const unsigned int NO_PREAMBLE_CSBK = 15U;
// #define DUMP_DMR
@@ -1565,6 +1566,27 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
data[0U] = TAG_DATA;
data[1U] = 0x00U;
if (csbko == CSBKO_PRECCSBK && csbk.getDataContent()) {
unsigned int cbf = NO_PREAMBLE_CSBK + csbk.getCBF() - 1U;
for (unsigned int i = 0U; i < NO_PREAMBLE_CSBK; i++, cbf--) {
// Change blocks to follow
csbk.setCBF(cbf);
// Regenerate the CSBK data
csbk.get(data + 2U);
// Regenerate the Slot Type
CDMRSlotType slotType;
slotType.putData(data + 2U);
slotType.setColorCode(m_colorCode);
slotType.getData(data + 2U);
// Convert the Data Sync to be from the BS or MS as needed
CSync::addDMRDataSync(data + 2U, m_duplex);
writeQueueNet(data);
}
} else
writeQueueNet(data);
#if defined(DUMP_DMR)