Start converting YSF to NXDN.

This commit is contained in:
Jonathan Naylor
2018-01-15 21:29:59 +00:00
parent 10b0d3c14c
commit a487abdb43
4 changed files with 8 additions and 74 deletions

View File

@@ -46,14 +46,8 @@ m_rfErrs(0U),
m_rfBits(1U), m_rfBits(1U),
m_netErrs(0U), m_netErrs(0U),
m_netBits(1U), m_netBits(1U),
m_rfSource(NULL),
m_rfDest(NULL),
m_netSource(NULL),
m_netDest(NULL),
m_lastFICH(), m_lastFICH(),
m_netN(0U), m_netN(0U),
m_rfPayload(),
m_netPayload(),
m_rssiMapper(rssiMapper), m_rssiMapper(rssiMapper),
m_rssi(0U), m_rssi(0U),
m_maxRSSI(0U), m_maxRSSI(0U),
@@ -65,35 +59,10 @@ m_fp(NULL)
assert(display != NULL); assert(display != NULL);
assert(rssiMapper != NULL); assert(rssiMapper != NULL);
m_rfPayload.setUplink(callsign);
m_rfPayload.setDownlink(callsign);
m_netPayload.setDownlink(callsign);
m_netSource = new unsigned char[YSF_CALLSIGN_LENGTH];
m_netDest = new unsigned char[YSF_CALLSIGN_LENGTH];
m_callsign = new unsigned char[YSF_CALLSIGN_LENGTH];
std::string node = callsign;
node.resize(YSF_CALLSIGN_LENGTH, ' ');
for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++)
m_callsign[i] = node.at(i);
m_selfCallsign = new unsigned char[YSF_CALLSIGN_LENGTH];
::memset(m_selfCallsign, 0x00U, YSF_CALLSIGN_LENGTH);
for (unsigned int i = 0U; i < callsign.length(); i++)
m_selfCallsign[i] = callsign.at(i);
} }
CNXDNControl::~CNXDNControl() CNXDNControl::~CNXDNControl()
{ {
delete[] m_netSource;
delete[] m_netDest;
delete[] m_callsign;
delete[] m_selfCallsign;
} }
bool CNXDNControl::writeModem(unsigned char *data, unsigned int len) bool CNXDNControl::writeModem(unsigned char *data, unsigned int len)
@@ -112,15 +81,11 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len)
} }
if (type == TAG_LOST && m_rfState == RS_RF_REJECTED) { if (type == TAG_LOST && m_rfState == RS_RF_REJECTED) {
m_rfPayload.reset();
m_rfSource = NULL;
m_rfDest = NULL;
m_rfState = RS_RF_LISTENING; m_rfState = RS_RF_LISTENING;
return false; return false;
} }
if (type == TAG_LOST) { if (type == TAG_LOST) {
m_rfPayload.reset();
m_rfState = RS_RF_LISTENING; m_rfState = RS_RF_LISTENING;
return false; return false;
} }
@@ -128,8 +93,8 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len)
// Have we got RSSI bytes on the end? // Have we got RSSI bytes on the end?
if (len == (NXDN_FRAME_LENGTH_BYTES + 4U)) { if (len == (NXDN_FRAME_LENGTH_BYTES + 4U)) {
uint16_t raw = 0U; uint16_t raw = 0U;
raw |= (data[122U] << 8) & 0xFF00U; raw |= (data[50U] << 8) & 0xFF00U;
raw |= (data[123U] << 0) & 0x00FFU; raw |= (data[51U] << 0) & 0x00FFU;
// Convert the raw RSSI to dBm // Convert the raw RSSI to dBm
int rssi = m_rssiMapper->interpolate(raw); int rssi = m_rssiMapper->interpolate(raw);
@@ -860,11 +825,6 @@ void CNXDNControl::writeEndRF()
m_rfState = RS_RF_LISTENING; m_rfState = RS_RF_LISTENING;
m_rfTimeoutTimer.stop(); m_rfTimeoutTimer.stop();
m_rfPayload.reset();
// These variables are free'd by YSFPayload
m_rfSource = NULL;
m_rfDest = NULL;
if (m_netState == RS_NET_IDLE) { if (m_netState == RS_NET_IDLE) {
m_display->clearFusion(); m_display->clearFusion();
@@ -886,8 +846,6 @@ void CNXDNControl::writeEndNet()
m_networkWatchdog.stop(); m_networkWatchdog.stop();
m_packetTimer.stop(); m_packetTimer.stop();
m_netPayload.reset();
m_display->clearFusion(); m_display->clearFusion();
if (m_network != NULL) if (m_network != NULL)
@@ -906,30 +864,17 @@ void CNXDNControl::writeNetwork()
m_networkWatchdog.start(); m_networkWatchdog.start();
bool gateway = ::memcmp(data + 4U, m_callsign, YSF_CALLSIGN_LENGTH) == 0; unsigned char n = (data[5U] & 0xFEU) >> 1;
bool end = (data[5U] & 0x01U) == 0x01U;
unsigned char n = (data[34U] & 0xFEU) >> 1;
bool end = (data[34U] & 0x01U) == 0x01U;
if (!m_netTimeoutTimer.isRunning()) { if (!m_netTimeoutTimer.isRunning()) {
if (end) if (end)
return; return;
if (::memcmp(data + 14U, " ", YSF_CALLSIGN_LENGTH) != 0)
::memcpy(m_netSource, data + 14U, YSF_CALLSIGN_LENGTH);
else
::memcpy(m_netSource, "??????????", YSF_CALLSIGN_LENGTH);
if (::memcmp(data + 24U, " ", YSF_CALLSIGN_LENGTH) != 0)
::memcpy(m_netDest, data + 24U, YSF_CALLSIGN_LENGTH);
else
::memcpy(m_netDest, "??????????", YSF_CALLSIGN_LENGTH);
m_display->writeFusion((char*)m_netSource, (char*)m_netDest, "N", (char*)(data + 4U)); m_display->writeFusion((char*)m_netSource, (char*)m_netDest, "N", (char*)(data + 4U));
LogMessage("YSF, received network data from %10.10s to %10.10s at %10.10s", m_netSource, m_netDest, data + 4U); LogMessage("NXDN, received network data from %10.10s to %10.10s at %10.10s", m_netSource, m_netDest, data + 4U);
m_netTimeoutTimer.start(); m_netTimeoutTimer.start();
m_netPayload.reset();
m_packetTimer.start(); m_packetTimer.start();
m_elapsed.start(); m_elapsed.start();
m_netState = RS_NET_AUDIO; m_netState = RS_NET_AUDIO;
@@ -972,13 +917,8 @@ void CNXDNControl::writeNetwork()
unsigned char ft = fich.getFT(); unsigned char ft = fich.getFT();
unsigned char fi = fich.getFI(); unsigned char fi = fich.getFI();
// Add any DSQ information
fich.setSQL(m_sqlEnabled);
fich.setSQ(m_sqlValue);
fich.setVoIP(true); fich.setVoIP(true);
fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY);
fich.setDev(m_lowDeviation);
fich.encode(data + 35U); fich.encode(data + 35U);
// Set the downlink callsign // Set the downlink callsign
@@ -1112,7 +1052,7 @@ void CNXDNControl::writeNetwork(const unsigned char *data, unsigned int count)
if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired())
return; return;
m_network->write(m_rfSource, m_rfDest, data + 2U, count, data[0U] == TAG_EOT); m_network->write(data + 2U, count, data[0U] == TAG_EOT);
} }
bool CNXDNControl::openFile() bool CNXDNControl::openFile()

View File

@@ -67,14 +67,8 @@ 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;
unsigned char* m_rfSource;
unsigned char* m_rfDest;
unsigned char* m_netSource;
unsigned char* m_netDest;
CYSFFICH m_lastFICH; CYSFFICH m_lastFICH;
unsigned char m_netN; unsigned char m_netN;
CYSFPayload m_rfPayload;
CYSFPayload m_netPayload;
CRSSIInterpolator* m_rssiMapper; CRSSIInterpolator* m_rssiMapper;
unsigned char m_rssi; unsigned char m_rssi;
unsigned char m_maxRSSI; unsigned char m_maxRSSI;

View File

@@ -56,7 +56,7 @@ bool CNXDNNetwork::open()
return m_socket.open(); return m_socket.open();
} }
bool CNXDNNetwork::write(const unsigned char* src, const unsigned char* dest, const unsigned char* data, unsigned int count, bool end) bool CNXDNNetwork::write(const unsigned char* data, unsigned int count, bool end)
{ {
assert(data != NULL); assert(data != NULL);

View File

@@ -36,7 +36,7 @@ public:
void enable(bool enabled); void enable(bool enabled);
bool write(const unsigned char* src, const unsigned char* dest, const unsigned char* data, unsigned int count, bool end); bool write(const unsigned char* data, unsigned int count, bool end);
unsigned int read(unsigned char* data); unsigned int read(unsigned char* data);