From 99d4a9bc51382baa52bb52ee32d7f40e454843b3 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sun, 27 Jan 2019 20:15:14 +0000 Subject: [PATCH] Simplify the D-Star sequence number processing. --- DStarControl.cpp | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/DStarControl.cpp b/DStarControl.cpp index a4431ad..993c551 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -708,6 +708,8 @@ void CDStarControl::writeNetwork() writeEndNet(); } } else if (type == TAG_DATA) { + unsigned char m_netN = data[1U]; + // Check for the fast data signature if (m_netState == RS_NET_AUDIO && (m_netN % 2U) == 1U) { unsigned char slowDataType = data[DSTAR_VOICE_FRAME_LENGTH_BYTES + 2U] & DSTAR_SLOW_DATA_TYPE_MASK; @@ -720,17 +722,13 @@ void CDStarControl::writeNetwork() } if (m_netState == RS_NET_DATA) { - unsigned char n = data[1U]; - data[1U] = TAG_DATA; m_netBits += 72U; m_netErrs = 0U; - m_netN = n; - // Regenerate the sync - if (n == 0U) + if (m_netN == 0U) CSync::addDStarSync(data + 2U); m_packetTimer.start(); @@ -740,12 +738,9 @@ void CDStarControl::writeNetwork() writeFile(data + 1U, length - 1U); #endif writeQueueDataNet(data + 1U); - - m_netN = (m_netN + 1U) % 21U; } else if (m_netState == RS_NET_AUDIO) { - unsigned char n = data[1U]; - unsigned int errors = 0U; + if (!m_netHeader.isDataPacket()) { if (CUtils::compare(data + 2U, DSTAR_NULL_FRAME_DATA_SRAMBLED_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) { // Fix any scrambled null data frames, typically sent by Kenwood D-Star radios @@ -761,17 +756,15 @@ void CDStarControl::writeNetwork() data[1U] = TAG_DATA; // Insert silence and reject if in the past - bool ret = insertSilence(data + 1U, n); + bool ret = insertSilence(data + 1U, m_netN); if (!ret) return; m_netErrs += errors; m_netBits += 48U; - m_netN = n; - // Regenerate the sync - if (n == 0U) + if (m_netN == 0U) CSync::addDStarSync(data + 2U); m_packetTimer.start(); @@ -781,8 +774,6 @@ void CDStarControl::writeNetwork() writeFile(data + 1U, length - 1U); #endif writeQueueDataNet(data + 1U); - - m_netN = (m_netN + 1U) % 21U; } } else { CUtils::dump("D-Star, unknown data from network", data, DSTAR_FRAME_LENGTH_BYTES + 1U);