Add the NXDN scrambler.
This commit is contained in:
parent
a487abdb43
commit
b3169cbd4e
2 changed files with 33 additions and 19 deletions
|
@ -21,6 +21,11 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
|
||||||
|
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
|
// #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) :
|
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_rfBits(1U),
|
||||||
m_netErrs(0U),
|
m_netErrs(0U),
|
||||||
m_netBits(1U),
|
m_netBits(1U),
|
||||||
m_lastFICH(),
|
|
||||||
m_netN(0U),
|
m_netN(0U),
|
||||||
m_rssiMapper(rssiMapper),
|
m_rssiMapper(rssiMapper),
|
||||||
m_rssi(0U),
|
m_rssi(0U),
|
||||||
|
@ -58,7 +62,6 @@ m_fp(NULL)
|
||||||
{
|
{
|
||||||
assert(display != NULL);
|
assert(display != NULL);
|
||||||
assert(rssiMapper != NULL);
|
assert(rssiMapper != NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CNXDNControl::~CNXDNControl()
|
CNXDNControl::~CNXDNControl()
|
||||||
|
@ -112,6 +115,8 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len)
|
||||||
m_rssiCount++;
|
m_rssiCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scrambler(data + 2U);
|
||||||
|
|
||||||
CYSFFICH fich;
|
CYSFFICH fich;
|
||||||
bool valid = fich.decode(data + 2U);
|
bool valid = fich.decode(data + 2U);
|
||||||
|
|
||||||
|
@ -189,7 +194,7 @@ bool CNXDNControl::processVWData(bool valid, unsigned char *data)
|
||||||
m_maxRSSI = m_rssi;
|
m_maxRSSI = m_rssi;
|
||||||
m_aveRSSI = m_rssi;
|
m_aveRSSI = m_rssi;
|
||||||
m_rssiCount = 1U;
|
m_rssiCount = 1U;
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
openFile();
|
openFile();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -210,7 +215,7 @@ bool CNXDNControl::processVWData(bool valid, unsigned char *data)
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -249,7 +254,7 @@ bool CNXDNControl::processVWData(bool valid, unsigned char *data)
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -309,7 +314,7 @@ bool CNXDNControl::processVWData(bool valid, unsigned char *data)
|
||||||
writeQueueRF(data);
|
writeQueueRF(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -360,7 +365,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data)
|
||||||
m_maxRSSI = m_rssi;
|
m_maxRSSI = m_rssi;
|
||||||
m_aveRSSI = m_rssi;
|
m_aveRSSI = m_rssi;
|
||||||
m_rssiCount = 1U;
|
m_rssiCount = 1U;
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
openFile();
|
openFile();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -381,7 +386,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data)
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -420,7 +425,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data)
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -500,7 +505,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data)
|
||||||
writeQueueRF(data);
|
writeQueueRF(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -561,7 +566,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data)
|
||||||
m_maxRSSI = m_rssi;
|
m_maxRSSI = m_rssi;
|
||||||
m_aveRSSI = m_rssi;
|
m_aveRSSI = m_rssi;
|
||||||
m_rssiCount = 1U;
|
m_rssiCount = 1U;
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
openFile();
|
openFile();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -599,7 +604,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data)
|
||||||
writeQueueRF(buffer);
|
writeQueueRF(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(buffer + 2U);
|
writeFile(buffer + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -626,7 +631,7 @@ bool CNXDNControl::processDNData(bool valid, unsigned char *data)
|
||||||
writeQueueRF(data);
|
writeQueueRF(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -674,7 +679,7 @@ bool CNXDNControl::processFRData(bool valid, unsigned char *data)
|
||||||
m_maxRSSI = m_rssi;
|
m_maxRSSI = m_rssi;
|
||||||
m_aveRSSI = m_rssi;
|
m_aveRSSI = m_rssi;
|
||||||
m_rssiCount = 1U;
|
m_rssiCount = 1U;
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
openFile();
|
openFile();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -695,7 +700,7 @@ bool CNXDNControl::processFRData(bool valid, unsigned char *data)
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -734,7 +739,7 @@ bool CNXDNControl::processFRData(bool valid, unsigned char *data)
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -790,7 +795,7 @@ bool CNXDNControl::processFRData(bool valid, unsigned char *data)
|
||||||
writeQueueRF(data);
|
writeQueueRF(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -833,7 +838,7 @@ void CNXDNControl::writeEndRF()
|
||||||
m_network->reset();
|
m_network->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_NXDN)
|
||||||
closeFile();
|
closeFile();
|
||||||
#endif
|
#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);
|
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()
|
bool CNXDNControl::openFile()
|
||||||
{
|
{
|
||||||
if (m_fp != NULL)
|
if (m_fp != NULL)
|
||||||
|
|
|
@ -67,7 +67,6 @@ private:
|
||||||
unsigned int m_rfBits;
|
unsigned int m_rfBits;
|
||||||
unsigned int m_netErrs;
|
unsigned int m_netErrs;
|
||||||
unsigned int m_netBits;
|
unsigned int m_netBits;
|
||||||
CYSFFICH m_lastFICH;
|
|
||||||
unsigned char m_netN;
|
unsigned char m_netN;
|
||||||
CRSSIInterpolator* m_rssiMapper;
|
CRSSIInterpolator* m_rssiMapper;
|
||||||
unsigned char m_rssi;
|
unsigned char m_rssi;
|
||||||
|
@ -86,6 +85,8 @@ private:
|
||||||
void writeNetwork(const unsigned char* data, unsigned int count);
|
void writeNetwork(const unsigned char* data, unsigned int count);
|
||||||
void writeNetwork();
|
void writeNetwork();
|
||||||
|
|
||||||
|
void scrambler(unsigned char* data) const;
|
||||||
|
|
||||||
void writeEndRF();
|
void writeEndRF();
|
||||||
void writeEndNet();
|
void writeEndNet();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue