From 7ad26a18f286108c450ed22c16949067c2329981 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 17 May 2016 06:30:59 +0100 Subject: [PATCH] Set the FICH on received network data. --- DStarControl.cpp | 4 +++- YSFControl.cpp | 13 ++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/DStarControl.cpp b/DStarControl.cpp index 74f2da2..f9760e6 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -171,7 +171,9 @@ bool CDStarControl::writeModem(unsigned char *data) m_rfHeader = header; - m_holdoffTimer.stop(); + if (m_netState == RS_NET_IDLE) + m_holdoffTimer.stop(); + m_ackTimer.stop(); m_rfBits = 1U; diff --git a/YSFControl.cpp b/YSFControl.cpp index 29f8cc3..a15dfba 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -77,11 +77,13 @@ bool CYSFControl::writeModem(unsigned char *data) if (fi == YSF_FI_TERMINATOR) return false; + if (m_netState == RS_NET_IDLE) + m_holdoffTimer.stop(); + m_rfFrames = 0U; m_rfErrs = 0U; m_rfBits = 1U; m_rfTimeoutTimer.start(); - m_holdoffTimer.stop(); m_payload.reset(); m_rfState = RS_RF_AUDIO; #if defined(DUMP_YSF) @@ -352,6 +354,15 @@ void CYSFControl::writeNetwork() m_netFrames++; + CYSFFICH fich; + bool valid = fich.decode(data + 2U); + if (valid) { + // XXX Should set the downlink callsign + fich.setVoIP(true); + fich.setMR(YSF_MR_NOT_BUSY); + fich.encode(data + 2U); + } + writeQueueNet(data); if (data[0U] == TAG_EOT) {