From b3169cbd4e373d8aea4f2deca283a525991bd5f7 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 15 Jan 2018 23:10:54 +0000 Subject: [PATCH] Add the NXDN scrambler. --- NXDNControl.cpp | 49 +++++++++++++++++++++++++++++++------------------ NXDNControl.h | 3 ++- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/NXDNControl.cpp b/NXDNControl.cpp index 4bb9576..4865f94 100644 --- a/NXDNControl.cpp +++ b/NXDNControl.cpp @@ -21,6 +21,11 @@ #include #include +const unsigned char SCRAMBLER[] = { + 0x00U, 0x00U, 0x02U, 0x72U, 0xACU, 0x37U, 0xA6U, 0xE4U, 0x50U, 0xADU, 0x3FU, 0x64U, 0x96U, 0xFCU, 0x9AU, 0x99U, + 0x80U, 0xC6U, 0x51U, 0xA5U, 0xFDU, 0x16U, 0x3AU, 0xCBU, 0x3CU, 0x7DU, 0xD0U, 0x6BU, 0x6EU, 0xC1U, 0x6BU, 0xEAU, + 0xA0U, 0x52U, 0xBCU, 0xBBU, 0x81U, 0xCEU, 0x93U, 0xD7U, 0x51U, 0x21U, 0x9CU, 0x2FU, 0x6CU, 0xD0U, 0xEFU, 0x0FU}; + // #define DUMP_NXDN CNXDNControl::CNXDNControl(unsigned int ran, unsigned int id, bool selfOnly, CNXDNNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper) : @@ -46,7 +51,6 @@ m_rfErrs(0U), m_rfBits(1U), m_netErrs(0U), m_netBits(1U), -m_lastFICH(), m_netN(0U), m_rssiMapper(rssiMapper), m_rssi(0U), @@ -58,7 +62,6 @@ m_fp(NULL) { assert(display != NULL); assert(rssiMapper != NULL); - } CNXDNControl::~CNXDNControl() @@ -112,6 +115,8 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len) m_rssiCount++; } + scrambler(data + 2U); + CYSFFICH fich; bool valid = fich.decode(data + 2U); @@ -189,7 +194,7 @@ bool CNXDNControl::processVWData(bool valid, unsigned char *data) m_maxRSSI = m_rssi; m_aveRSSI = m_rssi; m_rssiCount = 1U; -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) openFile(); #endif @@ -210,7 +215,7 @@ bool CNXDNControl::processVWData(bool valid, unsigned char *data) writeNetwork(data, m_rfFrames % 128U); -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -249,7 +254,7 @@ bool CNXDNControl::processVWData(bool valid, unsigned char *data) writeNetwork(data, m_rfFrames % 128U); -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -309,7 +314,7 @@ bool CNXDNControl::processVWData(bool valid, unsigned char *data) writeQueueRF(data); } -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -360,7 +365,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data) m_maxRSSI = m_rssi; m_aveRSSI = m_rssi; m_rssiCount = 1U; -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) openFile(); #endif @@ -381,7 +386,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data) writeNetwork(data, m_rfFrames % 128U); -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -420,7 +425,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data) writeNetwork(data, m_rfFrames % 128U); -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -500,7 +505,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data) writeQueueRF(data); } -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -561,7 +566,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data) m_maxRSSI = m_rssi; m_aveRSSI = m_rssi; m_rssiCount = 1U; -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) openFile(); #endif @@ -599,7 +604,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data) writeQueueRF(buffer); } -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(buffer + 2U); #endif @@ -626,7 +631,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data) writeQueueRF(data); } -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -674,7 +679,7 @@ bool CNXDNControl::processFRData(bool valid, unsigned char *data) m_maxRSSI = m_rssi; m_aveRSSI = m_rssi; m_rssiCount = 1U; -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) openFile(); #endif @@ -695,7 +700,7 @@ bool CNXDNControl::processFRData(bool valid, unsigned char *data) writeNetwork(data, m_rfFrames % 128U); -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -734,7 +739,7 @@ bool CNXDNControl::processFRData(bool valid, unsigned char *data) writeNetwork(data, m_rfFrames % 128U); -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -790,7 +795,7 @@ bool CNXDNControl::processFRData(bool valid, unsigned char *data) writeQueueRF(data); } -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) writeFile(data + 2U); #endif @@ -833,7 +838,7 @@ void CNXDNControl::writeEndRF() m_network->reset(); } -#if defined(DUMP_YSF) +#if defined(DUMP_NXDN) closeFile(); #endif } @@ -1055,6 +1060,14 @@ void CNXDNControl::writeNetwork(const unsigned char *data, unsigned int count) m_network->write(data + 2U, count, data[0U] == TAG_EOT); } +void CNXDNControl::scrambler(unsigned char* data) const +{ + assert(data != NULL); + + for (unsigned int i = 0U; i < NXDN_FRAME_LENGTH_BYTES; i++) + data[i] ^= SCRAMBLER[i]; +} + bool CNXDNControl::openFile() { if (m_fp != NULL) diff --git a/NXDNControl.h b/NXDNControl.h index 566ad3d..a86b3d4 100644 --- a/NXDNControl.h +++ b/NXDNControl.h @@ -67,7 +67,6 @@ private: unsigned int m_rfBits; unsigned int m_netErrs; unsigned int m_netBits; - CYSFFICH m_lastFICH; unsigned char m_netN; CRSSIInterpolator* m_rssiMapper; unsigned char m_rssi; @@ -86,6 +85,8 @@ private: void writeNetwork(const unsigned char* data, unsigned int count); void writeNetwork(); + void scrambler(unsigned char* data) const; + void writeEndRF(); void writeEndNet();