From f070410f7e19d32a5cb140d63bf18f50ff8498f3 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sun, 9 Aug 2020 15:09:08 +0100 Subject: [PATCH] Display and log the DG-ID in the Fusion mode. --- CASTInfo.cpp | 2 +- CASTInfo.h | 2 +- Display.cpp | 4 +-- Display.h | 10 +++--- HD44780.cpp | 4 +-- HD44780.h | 2 +- LCDproc.cpp | 2 +- LCDproc.h | 2 +- Nextion.cpp | 2 +- Nextion.h | 2 +- NullDisplay.cpp | 2 +- NullDisplay.h | 2 +- TFTSerial.cpp | 2 +- TFTSerial.h | 2 +- TFTSurenoo.cpp | 2 +- TFTSurenoo.h | 2 +- Version.h | 2 +- YSFControl.cpp | 84 +++++++++++++++++++++++++------------------------ YSFControl.h | 4 +-- 19 files changed, 68 insertions(+), 66 deletions(-) diff --git a/CASTInfo.cpp b/CASTInfo.cpp index cce34d8..030c8e6 100644 --- a/CASTInfo.cpp +++ b/CASTInfo.cpp @@ -100,7 +100,7 @@ void CCASTInfo::clearDMRInt(unsigned int slotNo) { } -void CCASTInfo::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CCASTInfo::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { if (m_modem != NULL) m_modem->writeYSFInfo(source, dest, type, origin); diff --git a/CASTInfo.h b/CASTInfo.h index 9254995..8945dcd 100644 --- a/CASTInfo.h +++ b/CASTInfo.h @@ -48,7 +48,7 @@ protected: virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void clearFusionInt(); virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); diff --git a/Display.cpp b/Display.cpp index d0e6fd0..03f0a4f 100644 --- a/Display.cpp +++ b/Display.cpp @@ -223,7 +223,7 @@ void CDisplay::clearDMR(unsigned int slotNo) } } -void CDisplay::writeFusion(const char* source, const char* dest, const char* type, const char* origin) +void CDisplay::writeFusion(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); @@ -233,7 +233,7 @@ void CDisplay::writeFusion(const char* source, const char* dest, const char* typ m_timer1.start(); m_mode1 = MODE_IDLE; - writeFusionInt(source, dest, type, origin); + writeFusionInt(source, dest, dgid, type, origin); } void CDisplay::writeFusionRSSI(unsigned char rssi) diff --git a/Display.h b/Display.h index 17caa41..e23b3ec 100644 --- a/Display.h +++ b/Display.h @@ -56,7 +56,7 @@ public: void writeDMRTA(unsigned int slotNo, unsigned char* talkerAlias, const char* type); void clearDMR(unsigned int slotNo); - void writeFusion(const char* source, const char* dest, const char* type, const char* origin); + void writeFusion(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); void writeFusionRSSI(unsigned char rssi); void writeFusionBER(float ber); void clearFusion(); @@ -96,13 +96,13 @@ protected: virtual void clearDStarInt() = 0; virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type) = 0; - virtual int writeDMRIntEx(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type); + virtual int writeDMRIntEx(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type); virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); virtual void writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type); virtual void writeDMRBERInt(unsigned int slotNo, float ber); virtual void clearDMRInt(unsigned int slotNo) = 0; - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) = 0; + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) = 0; virtual void writeFusionRSSIInt(unsigned char rssi); virtual void writeFusionBERInt(float ber); virtual void clearFusionInt() = 0; @@ -112,8 +112,8 @@ protected: virtual void writeP25BERInt(float ber); virtual void clearP25Int() = 0; - virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type) = 0; - virtual int writeNXDNIntEx(const class CUserDBentry& source, bool group, unsigned int dest, const char* type); + virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type) = 0; + virtual int writeNXDNIntEx(const class CUserDBentry& source, bool group, unsigned int dest, const char* type); virtual void writeNXDNRSSIInt(unsigned char rssi); virtual void writeNXDNBERInt(float ber); virtual void clearNXDNInt() = 0; diff --git a/HD44780.cpp b/HD44780.cpp index 32f15fb..7a02d41 100644 --- a/HD44780.cpp +++ b/HD44780.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX & Tony Corbett G0WFV + * Copyright (C) 2016,2017,2018,2020 by Jonathan Naylor G4KLX & Tony Corbett G0WFV * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -737,7 +737,7 @@ void CHD44780::clearDMRInt(unsigned int slotNo) } } -void CHD44780::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CHD44780::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); diff --git a/HD44780.h b/HD44780.h index 18c036e..89335a9 100644 --- a/HD44780.h +++ b/HD44780.h @@ -111,7 +111,7 @@ protected: virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void writeFusionRSSIInt(unsigned char rssi); virtual void clearFusionInt(); diff --git a/LCDproc.cpp b/LCDproc.cpp index 6e5d142..84c2712 100644 --- a/LCDproc.cpp +++ b/LCDproc.cpp @@ -413,7 +413,7 @@ void CLCDproc::clearDMRInt(unsigned int slotNo) // LED 3 Green 4 Red 64 Yellow 68 -void CLCDproc::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CLCDproc::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); diff --git a/LCDproc.h b/LCDproc.h index 0352251..896e8a6 100644 --- a/LCDproc.h +++ b/LCDproc.h @@ -50,7 +50,7 @@ protected: virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void writeFusionRSSIInt(unsigned char rssi); virtual void clearFusionInt(); diff --git a/Nextion.cpp b/Nextion.cpp index adb8e76..649d64b 100644 --- a/Nextion.cpp +++ b/Nextion.cpp @@ -602,7 +602,7 @@ void CNextion::clearDMRInt(unsigned int slotNo) } } -void CNextion::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CNextion::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); diff --git a/Nextion.h b/Nextion.h index d9896e0..0e6675d 100644 --- a/Nextion.h +++ b/Nextion.h @@ -55,7 +55,7 @@ protected: virtual void writeDMRBERInt(unsigned int slotNo, float ber); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void writeFusionRSSIInt(unsigned char rssi); virtual void writeFusionBERInt(float ber); virtual void clearFusionInt(); diff --git a/NullDisplay.cpp b/NullDisplay.cpp index d08cf00..2471e93 100644 --- a/NullDisplay.cpp +++ b/NullDisplay.cpp @@ -92,7 +92,7 @@ void CNullDisplay::clearDMRInt(unsigned int slotNo) #endif } -void CNullDisplay::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CNullDisplay::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { #if defined(RASPBERRY_PI) ::digitalWrite(LED_STATUS, 1); diff --git a/NullDisplay.h b/NullDisplay.h index ac99dd8..a222959 100644 --- a/NullDisplay.h +++ b/NullDisplay.h @@ -46,7 +46,7 @@ protected: virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void clearFusionInt(); virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); diff --git a/TFTSerial.cpp b/TFTSerial.cpp index 59867b9..a59051c 100644 --- a/TFTSerial.cpp +++ b/TFTSerial.cpp @@ -293,7 +293,7 @@ void CTFTSerial::clearDMRInt(unsigned int slotNo) } } -void CTFTSerial::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CTFTSerial::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); diff --git a/TFTSerial.h b/TFTSerial.h index 314e555..d34e9da 100644 --- a/TFTSerial.h +++ b/TFTSerial.h @@ -48,7 +48,7 @@ protected: virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void clearFusionInt(); virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); diff --git a/TFTSurenoo.cpp b/TFTSurenoo.cpp index 5f0ddbd..62c0fac 100644 --- a/TFTSurenoo.cpp +++ b/TFTSurenoo.cpp @@ -271,7 +271,7 @@ void CTFTSurenoo::clearDMRInt(unsigned int slotNo) } } -void CTFTSurenoo::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CTFTSurenoo::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); diff --git a/TFTSurenoo.h b/TFTSurenoo.h index 0c54c24..e21a17e 100644 --- a/TFTSurenoo.h +++ b/TFTSurenoo.h @@ -51,7 +51,7 @@ protected: virtual int writeDMRIntEx(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void clearFusionInt(); virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); diff --git a/Version.h b/Version.h index 92d5669..4d2faa4 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20200804"; +const char* VERSION = "20200809"; #endif diff --git a/YSFControl.cpp b/YSFControl.cpp index ba2a75c..a296aca 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -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); } } } diff --git a/YSFControl.h b/YSFControl.h index ff2d4af..a18222d 100644 --- a/YSFControl.h +++ b/YSFControl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2019 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -106,7 +106,7 @@ private: void closeFile(); bool checkCallsign(const unsigned char* callsign) const; - void processNetCallsigns(const unsigned char* data); + void processNetCallsigns(const unsigned char* data, unsigned char dgid); }; #endif