mirror of
https://github.com/g4klx/MMDVMHost.git
synced 2025-12-06 05:32:00 +01:00
Display and log the DG-ID in the Fusion mode.
This commit is contained in:
parent
b0d828123b
commit
f070410f7e
|
|
@ -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)
|
if (m_modem != NULL)
|
||||||
m_modem->writeYSFInfo(source, dest, type, origin);
|
m_modem->writeYSFInfo(source, dest, type, origin);
|
||||||
|
|
|
||||||
|
|
@ -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 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 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 clearFusionInt();
|
||||||
|
|
||||||
virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type);
|
virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type);
|
||||||
|
|
|
||||||
|
|
@ -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(source != NULL);
|
||||||
assert(dest != NULL);
|
assert(dest != NULL);
|
||||||
|
|
@ -233,7 +233,7 @@ void CDisplay::writeFusion(const char* source, const char* dest, const char* typ
|
||||||
m_timer1.start();
|
m_timer1.start();
|
||||||
m_mode1 = MODE_IDLE;
|
m_mode1 = MODE_IDLE;
|
||||||
|
|
||||||
writeFusionInt(source, dest, type, origin);
|
writeFusionInt(source, dest, dgid, type, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDisplay::writeFusionRSSI(unsigned char rssi)
|
void CDisplay::writeFusionRSSI(unsigned char rssi)
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ public:
|
||||||
void writeDMRTA(unsigned int slotNo, unsigned char* talkerAlias, const char* type);
|
void writeDMRTA(unsigned int slotNo, unsigned char* talkerAlias, const char* type);
|
||||||
void clearDMR(unsigned int slotNo);
|
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 writeFusionRSSI(unsigned char rssi);
|
||||||
void writeFusionBER(float ber);
|
void writeFusionBER(float ber);
|
||||||
void clearFusion();
|
void clearFusion();
|
||||||
|
|
@ -102,7 +102,7 @@ protected:
|
||||||
virtual void writeDMRBERInt(unsigned int slotNo, float ber);
|
virtual void writeDMRBERInt(unsigned int slotNo, float ber);
|
||||||
virtual void clearDMRInt(unsigned int slotNo) = 0;
|
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 writeFusionRSSIInt(unsigned char rssi);
|
||||||
virtual void writeFusionBERInt(float ber);
|
virtual void writeFusionBERInt(float ber);
|
||||||
virtual void clearFusionInt() = 0;
|
virtual void clearFusionInt() = 0;
|
||||||
|
|
|
||||||
|
|
@ -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
|
* 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
|
* 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(source != NULL);
|
||||||
assert(dest != NULL);
|
assert(dest != NULL);
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ protected:
|
||||||
virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi);
|
virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi);
|
||||||
virtual void clearDMRInt(unsigned int slotNo);
|
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 writeFusionRSSIInt(unsigned char rssi);
|
||||||
virtual void clearFusionInt();
|
virtual void clearFusionInt();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -413,7 +413,7 @@ void CLCDproc::clearDMRInt(unsigned int slotNo)
|
||||||
|
|
||||||
// LED 3 Green 4 Red 64 Yellow 68
|
// 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(source != NULL);
|
||||||
assert(dest != NULL);
|
assert(dest != NULL);
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ protected:
|
||||||
virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi);
|
virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi);
|
||||||
virtual void clearDMRInt(unsigned int slotNo);
|
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 writeFusionRSSIInt(unsigned char rssi);
|
||||||
virtual void clearFusionInt();
|
virtual void clearFusionInt();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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(source != NULL);
|
||||||
assert(dest != NULL);
|
assert(dest != NULL);
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ protected:
|
||||||
virtual void writeDMRBERInt(unsigned int slotNo, float ber);
|
virtual void writeDMRBERInt(unsigned int slotNo, float ber);
|
||||||
virtual void clearDMRInt(unsigned int slotNo);
|
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 writeFusionRSSIInt(unsigned char rssi);
|
||||||
virtual void writeFusionBERInt(float ber);
|
virtual void writeFusionBERInt(float ber);
|
||||||
virtual void clearFusionInt();
|
virtual void clearFusionInt();
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ void CNullDisplay::clearDMRInt(unsigned int slotNo)
|
||||||
#endif
|
#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)
|
#if defined(RASPBERRY_PI)
|
||||||
::digitalWrite(LED_STATUS, 1);
|
::digitalWrite(LED_STATUS, 1);
|
||||||
|
|
|
||||||
|
|
@ -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 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 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 clearFusionInt();
|
||||||
|
|
||||||
virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type);
|
virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type);
|
||||||
|
|
|
||||||
|
|
@ -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(source != NULL);
|
||||||
assert(dest != NULL);
|
assert(dest != NULL);
|
||||||
|
|
|
||||||
|
|
@ -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 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 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 clearFusionInt();
|
||||||
|
|
||||||
virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type);
|
virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type);
|
||||||
|
|
|
||||||
|
|
@ -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(source != NULL);
|
||||||
assert(dest != NULL);
|
assert(dest != NULL);
|
||||||
|
|
|
||||||
|
|
@ -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 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 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 clearFusionInt();
|
||||||
|
|
||||||
virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type);
|
virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,6 @@
|
||||||
#if !defined(VERSION_H)
|
#if !defined(VERSION_H)
|
||||||
#define VERSION_H
|
#define VERSION_H
|
||||||
|
|
||||||
const char* VERSION = "20200804";
|
const char* VERSION = "20200809";
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -199,6 +199,8 @@ bool CYSFControl::writeModem(unsigned char *data, unsigned int len)
|
||||||
bool CYSFControl::processVWData(bool valid, unsigned char *data)
|
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 (valid && fi == YSF_FI_HEADER) {
|
||||||
if (m_rfState == RS_RF_LISTENING) {
|
if (m_rfState == RS_RF_LISTENING) {
|
||||||
bool valid = m_rfPayload.processHeaderData(data + 2U);
|
bool valid = m_rfPayload.processHeaderData(data + 2U);
|
||||||
|
|
@ -210,7 +212,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
|
||||||
if (m_selfOnly) {
|
if (m_selfOnly) {
|
||||||
bool ret = checkCallsign(m_rfSource);
|
bool ret = checkCallsign(m_rfSource);
|
||||||
if (!ret) {
|
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;
|
m_rfState = RS_RF_REJECTED;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -235,9 +237,8 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
openFile();
|
openFile();
|
||||||
#endif
|
#endif
|
||||||
|
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
|
||||||
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " ");
|
LogMessage("YSF, received RF header from %10.10s to %10.10s (DG-ID: %u)", m_rfSource, m_rfDest, dgid);
|
||||||
LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest);
|
|
||||||
|
|
||||||
CSync::addYSFSync(data + 2U);
|
CSync::addYSFSync(data + 2U);
|
||||||
|
|
||||||
|
|
@ -285,7 +286,6 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -299,9 +299,9 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
|
||||||
m_rfFrames++;
|
m_rfFrames++;
|
||||||
|
|
||||||
if (m_rssi != 0U)
|
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
|
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();
|
writeEndRF();
|
||||||
}
|
}
|
||||||
|
|
@ -361,6 +361,8 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
|
||||||
bool CYSFControl::processDNData(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 (valid && fi == YSF_FI_HEADER) {
|
||||||
if (m_rfState == RS_RF_LISTENING) {
|
if (m_rfState == RS_RF_LISTENING) {
|
||||||
bool valid = m_rfPayload.processHeaderData(data + 2U);
|
bool valid = m_rfPayload.processHeaderData(data + 2U);
|
||||||
|
|
@ -372,7 +374,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
|
||||||
if (m_selfOnly) {
|
if (m_selfOnly) {
|
||||||
bool ret = checkCallsign(m_rfSource);
|
bool ret = checkCallsign(m_rfSource);
|
||||||
if (!ret) {
|
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;
|
m_rfState = RS_RF_REJECTED;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -397,9 +399,8 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
openFile();
|
openFile();
|
||||||
#endif
|
#endif
|
||||||
|
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
|
||||||
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " ");
|
LogMessage("YSF, received RF header from %10.10s to %10.10s (DG-ID: %u)", m_rfSource, m_rfDest, dgid);
|
||||||
LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest);
|
|
||||||
|
|
||||||
CSync::addYSFSync(data + 2U);
|
CSync::addYSFSync(data + 2U);
|
||||||
|
|
||||||
|
|
@ -447,7 +448,6 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -461,9 +461,9 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
|
||||||
m_rfFrames++;
|
m_rfFrames++;
|
||||||
|
|
||||||
if (m_rssi != 0U)
|
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
|
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();
|
writeEndRF();
|
||||||
}
|
}
|
||||||
|
|
@ -570,7 +570,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
|
||||||
if (m_selfOnly) {
|
if (m_selfOnly) {
|
||||||
bool ret = checkCallsign(m_rfSource);
|
bool ret = checkCallsign(m_rfSource);
|
||||||
if (!ret) {
|
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;
|
m_rfState = RS_RF_REJECTED;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -589,7 +589,6 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
openFile();
|
openFile();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Build a new header and transmit it
|
// Build a new header and transmit it
|
||||||
unsigned char buffer[YSF_FRAME_LENGTH_BYTES + 2U];
|
unsigned char buffer[YSF_FRAME_LENGTH_BYTES + 2U];
|
||||||
|
|
||||||
|
|
@ -626,8 +625,8 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
writeFile(buffer + 2U);
|
writeFile(buffer + 2U);
|
||||||
#endif
|
#endif
|
||||||
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " ");
|
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
|
||||||
LogMessage("YSF, received RF late entry from %10.10s to %10.10s", m_rfSource, m_rfDest);
|
LogMessage("YSF, received RF late entry from %10.10s to %10.10s (DG-ID: %u)", m_rfSource, m_rfDest, dgid);
|
||||||
|
|
||||||
CSync::addYSFSync(data + 2U);
|
CSync::addYSFSync(data + 2U);
|
||||||
|
|
||||||
|
|
@ -664,6 +663,8 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
|
||||||
bool CYSFControl::processFRData(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 (valid && fi == YSF_FI_HEADER) {
|
||||||
if (m_rfState == RS_RF_LISTENING) {
|
if (m_rfState == RS_RF_LISTENING) {
|
||||||
valid = m_rfPayload.processHeaderData(data + 2U);
|
valid = m_rfPayload.processHeaderData(data + 2U);
|
||||||
|
|
@ -675,7 +676,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
|
||||||
if (m_selfOnly) {
|
if (m_selfOnly) {
|
||||||
bool ret = checkCallsign(m_rfSource);
|
bool ret = checkCallsign(m_rfSource);
|
||||||
if (!ret) {
|
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;
|
m_rfState = RS_RF_REJECTED;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -697,9 +698,8 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
openFile();
|
openFile();
|
||||||
#endif
|
#endif
|
||||||
|
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
|
||||||
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " ");
|
LogMessage("YSF, received RF header from %10.10s to %10.10s (DG-ID: %u)", m_rfSource, m_rfDest, dgid);
|
||||||
LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest);
|
|
||||||
|
|
||||||
CSync::addYSFSync(data + 2U);
|
CSync::addYSFSync(data + 2U);
|
||||||
|
|
||||||
|
|
@ -711,7 +711,6 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -747,7 +746,6 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
writeNetwork(data, m_rfFrames % 128U);
|
writeNetwork(data, m_rfFrames % 128U);
|
||||||
|
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -761,9 +759,9 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
|
||||||
m_rfFrames++;
|
m_rfFrames++;
|
||||||
|
|
||||||
if (m_rssi != 0U)
|
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
|
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();
|
writeEndRF();
|
||||||
}
|
}
|
||||||
|
|
@ -805,7 +803,6 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
|
||||||
#if defined(DUMP_YSF)
|
#if defined(DUMP_YSF)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_rfFrames++;
|
m_rfFrames++;
|
||||||
|
|
||||||
m_display->writeFusionRSSI(m_rssi);
|
m_display->writeFusionRSSI(m_rssi);
|
||||||
|
|
@ -891,6 +888,13 @@ void CYSFControl::writeNetwork()
|
||||||
unsigned char n = (data[34U] & 0xFEU) >> 1;
|
unsigned char n = (data[34U] & 0xFEU) >> 1;
|
||||||
bool end = (data[34U] & 0x01U) == 0x01U;
|
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 (!m_netTimeoutTimer.isRunning()) {
|
||||||
if (end)
|
if (end)
|
||||||
return;
|
return;
|
||||||
|
|
@ -899,8 +903,8 @@ void CYSFControl::writeNetwork()
|
||||||
::memcpy(m_netDest, data + 24U, YSF_CALLSIGN_LENGTH);
|
::memcpy(m_netDest, data + 24U, YSF_CALLSIGN_LENGTH);
|
||||||
|
|
||||||
if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) {
|
if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) {
|
||||||
m_display->writeFusion((char*)m_netSource, (char*)m_netDest, "N", (char*)(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 at %10.10s", m_netSource, m_netDest, 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();
|
m_netTimeoutTimer.start();
|
||||||
|
|
@ -922,8 +926,6 @@ void CYSFControl::writeNetwork()
|
||||||
data[33U] = end ? TAG_EOT : TAG_DATA;
|
data[33U] = end ? TAG_EOT : TAG_DATA;
|
||||||
data[34U] = 0x00U;
|
data[34U] = 0x00U;
|
||||||
|
|
||||||
CYSFFICH fich;
|
|
||||||
bool valid = fich.decode(data + 35U);
|
|
||||||
if (valid) {
|
if (valid) {
|
||||||
unsigned char dt = fich.getDT();
|
unsigned char dt = fich.getDT();
|
||||||
unsigned char fn = fich.getFN();
|
unsigned char fn = fich.getFN();
|
||||||
|
|
@ -952,7 +954,7 @@ void CYSFControl::writeNetwork()
|
||||||
case YSF_FI_HEADER: {
|
case YSF_FI_HEADER: {
|
||||||
bool ok = m_netPayload.processHeaderData(data + 35U);
|
bool ok = m_netPayload.processHeaderData(data + 35U);
|
||||||
if (ok)
|
if (ok)
|
||||||
processNetCallsigns(data);
|
processNetCallsigns(data, dgid);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -965,7 +967,7 @@ void CYSFControl::writeNetwork()
|
||||||
case YSF_DT_VD_MODE1: {
|
case YSF_DT_VD_MODE1: {
|
||||||
bool ok = m_netPayload.processVDMode1Data(data + 35U, fn, gateway);
|
bool ok = m_netPayload.processVDMode1Data(data + 35U, fn, gateway);
|
||||||
if (ok)
|
if (ok)
|
||||||
processNetCallsigns(data);
|
processNetCallsigns(data, dgid);
|
||||||
|
|
||||||
unsigned int errors = m_netPayload.processVDMode1Audio(data + 35U);
|
unsigned int errors = m_netPayload.processVDMode1Audio(data + 35U);
|
||||||
m_netErrs += errors;
|
m_netErrs += errors;
|
||||||
|
|
@ -976,7 +978,7 @@ void CYSFControl::writeNetwork()
|
||||||
case YSF_DT_VD_MODE2: {
|
case YSF_DT_VD_MODE2: {
|
||||||
bool ok = m_netPayload.processVDMode2Data(data + 35U, fn, gateway);
|
bool ok = m_netPayload.processVDMode2Data(data + 35U, fn, gateway);
|
||||||
if (ok)
|
if (ok)
|
||||||
processNetCallsigns(data);
|
processNetCallsigns(data, dgid);
|
||||||
|
|
||||||
unsigned int errors = m_netPayload.processVDMode2Audio(data + 35U);
|
unsigned int errors = m_netPayload.processVDMode2Audio(data + 35U);
|
||||||
m_netErrs += errors;
|
m_netErrs += errors;
|
||||||
|
|
@ -1014,7 +1016,7 @@ void CYSFControl::writeNetwork()
|
||||||
m_netN = n;
|
m_netN = n;
|
||||||
|
|
||||||
if (end) {
|
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();
|
writeEndNet();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1138,7 +1140,7 @@ bool CYSFControl::checkCallsign(const unsigned char* callsign) const
|
||||||
return ::memcmp(callsign, m_selfCallsign, ::strlen((char*)m_selfCallsign)) == 0;
|
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);
|
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) {
|
if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) {
|
||||||
m_display->writeFusion((char*)m_netSource, (char*)m_netDest, "N", (char*)(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 at %10.10s", m_netSource, m_netDest, 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -106,7 +106,7 @@ private:
|
||||||
void closeFile();
|
void closeFile();
|
||||||
|
|
||||||
bool checkCallsign(const unsigned char* callsign) const;
|
bool checkCallsign(const unsigned char* callsign) const;
|
||||||
void processNetCallsigns(const unsigned char* data);
|
void processNetCallsigns(const unsigned char* data, unsigned char dgid);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue