Display and log the DG-ID in the Fusion mode.

This commit is contained in:
Jonathan Naylor
2020-08-09 15:09:08 +01:00
parent b0d828123b
commit f070410f7e
19 changed files with 68 additions and 66 deletions

View File

@@ -198,7 +198,9 @@ bool CYSFControl::writeModem(unsigned char *data, unsigned int len)
bool CYSFControl::processVWData(bool valid, unsigned char *data)
{
unsigned char fi = m_lastFICH.getFI();
unsigned char fi = m_lastFICH.getFI();
unsigned char dgid = m_lastFICH.getDGId();
if (valid && fi == YSF_FI_HEADER) {
if (m_rfState == RS_RF_LISTENING) {
bool valid = m_rfPayload.processHeaderData(data + 2U);
@@ -210,7 +212,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
if (m_selfOnly) {
bool ret = checkCallsign(m_rfSource);
if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s", m_rfSource);
LogMessage("YSF, invalid access attempt from %10.10s (DG-ID: %u)", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED;
return false;
}
@@ -235,9 +237,8 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
#if defined(DUMP_YSF)
openFile();
#endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " ");
LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest);
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
LogMessage("YSF, received RF header from %10.10s to %10.10s (DG-ID: %u)", m_rfSource, m_rfDest, dgid);
CSync::addYSFSync(data + 2U);
@@ -285,7 +286,6 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
#if defined(DUMP_YSF)
writeFile(data + 2U);
#endif
@@ -299,9 +299,9 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
m_rfFrames++;
if (m_rssi != 0U)
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s (DG-ID: %u), %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
else
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s (DG-ID: %u), %.1f seconds, BER: %.1f%%", m_rfSource, m_rfDest, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeEndRF();
}
@@ -360,7 +360,9 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
bool CYSFControl::processDNData(bool valid, unsigned char *data)
{
unsigned char fi = m_lastFICH.getFI();
unsigned char fi = m_lastFICH.getFI();
unsigned char dgid = m_lastFICH.getDGId();
if (valid && fi == YSF_FI_HEADER) {
if (m_rfState == RS_RF_LISTENING) {
bool valid = m_rfPayload.processHeaderData(data + 2U);
@@ -372,7 +374,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
if (m_selfOnly) {
bool ret = checkCallsign(m_rfSource);
if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s", m_rfSource);
LogMessage("YSF, invalid access attempt from %10.10s (DG-ID: %u)", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED;
return false;
}
@@ -397,9 +399,8 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
#if defined(DUMP_YSF)
openFile();
#endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " ");
LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest);
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
LogMessage("YSF, received RF header from %10.10s to %10.10s (DG-ID: %u)", m_rfSource, m_rfDest, dgid);
CSync::addYSFSync(data + 2U);
@@ -447,7 +448,6 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
#if defined(DUMP_YSF)
writeFile(data + 2U);
#endif
@@ -461,9 +461,9 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
m_rfFrames++;
if (m_rssi != 0U)
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s (DG-ID: %u), %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
else
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s (DG-ID: %u), %.1f seconds, BER: %.1f%%", m_rfSource, m_rfDest, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeEndRF();
}
@@ -570,7 +570,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
if (m_selfOnly) {
bool ret = checkCallsign(m_rfSource);
if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s", m_rfSource);
LogMessage("YSF, invalid access attempt from %10.10s (DG-ID: %u)", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED;
return false;
}
@@ -589,7 +589,6 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
#if defined(DUMP_YSF)
openFile();
#endif
// Build a new header and transmit it
unsigned char buffer[YSF_FRAME_LENGTH_BYTES + 2U];
@@ -626,8 +625,8 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
#if defined(DUMP_YSF)
writeFile(buffer + 2U);
#endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " ");
LogMessage("YSF, received RF late entry from %10.10s to %10.10s", m_rfSource, m_rfDest);
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
LogMessage("YSF, received RF late entry from %10.10s to %10.10s (DG-ID: %u)", m_rfSource, m_rfDest, dgid);
CSync::addYSFSync(data + 2U);
@@ -663,7 +662,9 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
bool CYSFControl::processFRData(bool valid, unsigned char *data)
{
unsigned char fi = m_lastFICH.getFI();
unsigned char fi = m_lastFICH.getFI();
unsigned char dgid = m_lastFICH.getDGId();
if (valid && fi == YSF_FI_HEADER) {
if (m_rfState == RS_RF_LISTENING) {
valid = m_rfPayload.processHeaderData(data + 2U);
@@ -675,7 +676,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
if (m_selfOnly) {
bool ret = checkCallsign(m_rfSource);
if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s", m_rfSource);
LogMessage("YSF, invalid access attempt from %10.10s (DG-ID: %u)", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED;
return false;
}
@@ -697,9 +698,8 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
#if defined(DUMP_YSF)
openFile();
#endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " ");
LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest);
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
LogMessage("YSF, received RF header from %10.10s to %10.10s (DG-ID: %u)", m_rfSource, m_rfDest, dgid);
CSync::addYSFSync(data + 2U);
@@ -711,7 +711,6 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
#if defined(DUMP_YSF)
writeFile(data + 2U);
#endif
@@ -747,7 +746,6 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
#if defined(DUMP_YSF)
writeFile(data + 2U);
#endif
@@ -761,9 +759,9 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
m_rfFrames++;
if (m_rssi != 0U)
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s, %.1f seconds, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s (DG-ID: %u), %.1f seconds, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, dgid, float(m_rfFrames) / 10.0F, m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
else
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s, %.1f seconds", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F);
LogMessage("YSF, received RF end of transmission from %10.10s to %10.10s (DG-ID: %u), %.1f seconds", m_rfSource, m_rfDest, dgid, float(m_rfFrames) / 10.0F);
writeEndRF();
}
@@ -805,7 +803,6 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
#if defined(DUMP_YSF)
writeFile(data + 2U);
#endif
m_rfFrames++;
m_display->writeFusionRSSI(m_rssi);
@@ -891,6 +888,13 @@ void CYSFControl::writeNetwork()
unsigned char n = (data[34U] & 0xFEU) >> 1;
bool end = (data[34U] & 0x01U) == 0x01U;
CYSFFICH fich;
bool valid = fich.decode(data + 35U);
unsigned char dgid = 0U;
if (valid)
dgid = fich.getDGId();
if (!m_netTimeoutTimer.isRunning()) {
if (end)
return;
@@ -899,8 +903,8 @@ void CYSFControl::writeNetwork()
::memcpy(m_netDest, data + 24U, YSF_CALLSIGN_LENGTH);
if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) {
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);
m_display->writeFusion((char*)m_netSource, (char*)m_netDest, dgid, "N", (char*)(data + 4U));
LogMessage("YSF, received network data from %10.10s to %10.10s (DG-ID: %u) at %10.10s", m_netSource, m_netDest, dgid, data + 4U);
}
m_netTimeoutTimer.start();
@@ -922,8 +926,6 @@ void CYSFControl::writeNetwork()
data[33U] = end ? TAG_EOT : TAG_DATA;
data[34U] = 0x00U;
CYSFFICH fich;
bool valid = fich.decode(data + 35U);
if (valid) {
unsigned char dt = fich.getDT();
unsigned char fn = fich.getFN();
@@ -952,7 +954,7 @@ void CYSFControl::writeNetwork()
case YSF_FI_HEADER: {
bool ok = m_netPayload.processHeaderData(data + 35U);
if (ok)
processNetCallsigns(data);
processNetCallsigns(data, dgid);
}
break;
@@ -965,7 +967,7 @@ void CYSFControl::writeNetwork()
case YSF_DT_VD_MODE1: {
bool ok = m_netPayload.processVDMode1Data(data + 35U, fn, gateway);
if (ok)
processNetCallsigns(data);
processNetCallsigns(data, dgid);
unsigned int errors = m_netPayload.processVDMode1Audio(data + 35U);
m_netErrs += errors;
@@ -976,7 +978,7 @@ void CYSFControl::writeNetwork()
case YSF_DT_VD_MODE2: {
bool ok = m_netPayload.processVDMode2Data(data + 35U, fn, gateway);
if (ok)
processNetCallsigns(data);
processNetCallsigns(data, dgid);
unsigned int errors = m_netPayload.processVDMode2Audio(data + 35U);
m_netErrs += errors;
@@ -1014,7 +1016,7 @@ void CYSFControl::writeNetwork()
m_netN = n;
if (end) {
LogMessage("YSF, received network end of transmission from %10.10s to %10.10s, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_netSource, m_netDest, float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits));
LogMessage("YSF, received network end of transmission from %10.10s to %10.10s (DG-ID: %u), %.1f seconds, %u%% packet loss, BER: %.1f%%", m_netSource, m_netDest, dgid, float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits));
writeEndNet();
}
}
@@ -1138,7 +1140,7 @@ bool CYSFControl::checkCallsign(const unsigned char* callsign) const
return ::memcmp(callsign, m_selfCallsign, ::strlen((char*)m_selfCallsign)) == 0;
}
void CYSFControl::processNetCallsigns(const unsigned char* data)
void CYSFControl::processNetCallsigns(const unsigned char* data, unsigned char dgid)
{
assert(data != NULL);
@@ -1156,8 +1158,8 @@ void CYSFControl::processNetCallsigns(const unsigned char* data)
}
if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) {
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);
m_display->writeFusion((char*)m_netSource, (char*)m_netDest, dgid, "N", (char*)(data + 4U));
LogMessage("YSF, received network data from %10.10s to %10.10s (DG-ID: %u) at %10.10s", m_netSource, m_netDest, dgid, data + 4U);
}
}
}