diff --git a/YSFControl.cpp b/YSFControl.cpp index 4a79fae..dcfc50e 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -428,19 +428,19 @@ void CYSFControl::writeNetwork() case YSF_FI_COMMUNICATIONS: switch (dt) { case YSF_DT_VD_MODE1: - m_netPayload.processVDMode1Data(data + 35U, fn); + m_netPayload.processVDMode1Data(data + 35U, fn, gateway); m_netErrs += m_netPayload.processVDMode1Audio(data + 35U); m_netBits += 235U; break; case YSF_DT_VD_MODE2: - m_netPayload.processVDMode2Data(data + 35U, fn); + m_netPayload.processVDMode2Data(data + 35U, fn, gateway); m_netErrs += m_netPayload.processVDMode2Audio(data + 35U); m_netBits += 135U; break; case YSF_DT_DATA_FR_MODE: - m_netPayload.processDataFRModeData(data + 35U, fn); + m_netPayload.processDataFRModeData(data + 35U, fn, gateway); break; case YSF_DT_VOICE_FR_MODE: diff --git a/YSFPayload.cpp b/YSFPayload.cpp index 200d7f5..5bfa706 100644 --- a/YSFPayload.cpp +++ b/YSFPayload.cpp @@ -268,7 +268,7 @@ unsigned int CYSFPayload::processVDMode1Audio(unsigned char* data) return errors; } -bool CYSFPayload::processVDMode1Data(unsigned char* data, unsigned char fn) +bool CYSFPayload::processVDMode1Data(unsigned char* data, unsigned char fn, bool gateway) { assert(data != NULL); @@ -319,10 +319,10 @@ bool CYSFPayload::processVDMode1Data(unsigned char* data, unsigned char fn) break; case 1U: - if (m_downlink != NULL) + if (m_downlink != NULL && !gateway) ::memcpy(output + 0U, m_downlink, YSF_CALLSIGN_LENGTH); - if (m_uplink != NULL) + if (m_uplink != NULL && !gateway) ::memcpy(output + YSF_CALLSIGN_LENGTH, m_uplink, YSF_CALLSIGN_LENGTH); break; @@ -450,7 +450,7 @@ unsigned int CYSFPayload::processVDMode2Audio(unsigned char* data) return errors; } -bool CYSFPayload::processVDMode2Data(unsigned char* data, unsigned char fn) +bool CYSFPayload::processVDMode2Data(unsigned char* data, unsigned char fn, bool gateway) { assert(data != NULL); @@ -502,12 +502,12 @@ bool CYSFPayload::processVDMode2Data(unsigned char* data, unsigned char fn) break; case 2U: - if (m_downlink != NULL) + if (m_downlink != NULL && !gateway) ::memcpy(output, m_downlink, YSF_CALLSIGN_LENGTH); break; case 3U: - if (m_uplink != NULL) + if (m_uplink != NULL && !gateway) ::memcpy(output, m_uplink, YSF_CALLSIGN_LENGTH); break; @@ -560,7 +560,7 @@ bool CYSFPayload::processVDMode2Data(unsigned char* data, unsigned char fn) return ret && (fn == 0U || fn == 1U); } -bool CYSFPayload::processDataFRModeData(unsigned char* data, unsigned char fn) +bool CYSFPayload::processDataFRModeData(unsigned char* data, unsigned char fn, bool gateway) { assert(data != NULL); @@ -708,10 +708,10 @@ bool CYSFPayload::processDataFRModeData(unsigned char* data, unsigned char fn) case 0U: CUtils::dump(1U, "FR Mode Data, CSD2", output, 20U); - if (m_downlink != NULL) + if (m_downlink != NULL && !gateway) ::memcpy(output + 0U, m_downlink, YSF_CALLSIGN_LENGTH); - if (m_uplink != NULL) + if (m_uplink != NULL && !gateway) ::memcpy(output + YSF_CALLSIGN_LENGTH, m_uplink, YSF_CALLSIGN_LENGTH); break; diff --git a/YSFPayload.h b/YSFPayload.h index 14967fa..8fc5061 100644 --- a/YSFPayload.h +++ b/YSFPayload.h @@ -30,13 +30,13 @@ public: bool processHeaderData(unsigned char* bytes); - bool processVDMode1Data(unsigned char* bytes, unsigned char fn); + bool processVDMode1Data(unsigned char* bytes, unsigned char fn, bool gateway = false); unsigned int processVDMode1Audio(unsigned char* bytes); - bool processVDMode2Data(unsigned char* bytes, unsigned char fn); + bool processVDMode2Data(unsigned char* bytes, unsigned char fn, bool gateway = false); unsigned int processVDMode2Audio(unsigned char* bytes); - bool processDataFRModeData(unsigned char* bytes, unsigned char fn); + bool processDataFRModeData(unsigned char* bytes, unsigned char fn, bool gateway = false); unsigned int processVoiceFRModeAudio(unsigned char* bytes);