From 5d2f528ec7e187c3842dd84815d3071632d3b1c9 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sat, 19 Apr 2025 16:36:00 +0100 Subject: [PATCH] Fix some naming issues around NULL and a D-Star bug with frame counts. --- DStarControl.cpp | 34 +++++++++++++++++++--------------- DStarDefines.h | 14 +++++++------- M17Defines.h | 2 +- P25Control.cpp | 2 +- P25Defines.h | 2 +- Version.h | 2 +- 6 files changed, 30 insertions(+), 26 deletions(-) diff --git a/DStarControl.cpp b/DStarControl.cpp index d2a3d37..4682a41 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -409,7 +409,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) m_display->writeDStarRSSI(m_rssi); unsigned int errors = 0U; - if (::memcmp(data + 1U, DSTAR_nullptr_AMBE_DATA_BYTES_SCRAMBLED, DSTAR_VOICE_FRAME_LENGTH_BYTES) == 0) { + if (::memcmp(data + 1U, DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED, DSTAR_VOICE_FRAME_LENGTH_BYTES) == 0) { LogDebug("D-Star, audio sequence no. %u, null audio", m_rfN); } else { errors = m_fec.regenerateDStar(data + 1U); @@ -543,7 +543,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) } unsigned int errors = 0U; - if (::memcmp(data + 1U, DSTAR_nullptr_AMBE_DATA_BYTES_SCRAMBLED, DSTAR_VOICE_FRAME_LENGTH_BYTES) == 0) { + if (::memcmp(data + 1U, DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED, DSTAR_VOICE_FRAME_LENGTH_BYTES) == 0) { LogDebug("D-Star, audio sequence no. %u, null audio", m_rfN); } else { errors = m_fec.regenerateDStar(data + 1U); @@ -735,8 +735,6 @@ void CDStarControl::writeNetwork() writeEndNet(); } else if (type == TAG_DATA) { if ((m_netState == RPT_NET_STATE::AUDIO) || (m_netState == RPT_NET_STATE::DATA)) { - m_netN = data[1U]; - if (m_netN == 0U) { CSync::addDStarSync(data + 2U); m_netSlowData.start(); @@ -754,8 +752,10 @@ void CDStarControl::writeNetwork() } if (m_netState == RPT_NET_STATE::AUDIO) { + unsigned char n = data[1U]; + unsigned int errors = 0U; - if (::memcmp(data + 2U, DSTAR_nullptr_AMBE_DATA_BYTES_SCRAMBLED, DSTAR_VOICE_FRAME_LENGTH_BYTES) != 0) { + if (::memcmp(data + 2U, DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED, DSTAR_VOICE_FRAME_LENGTH_BYTES) != 0) { errors = m_fec.regenerateDStar(data + 2U); blankDTMF(data + 2U); } @@ -763,13 +763,15 @@ void CDStarControl::writeNetwork() data[1U] = TAG_DATA; // Insert silence and reject if in the past - bool ret = insertSilence(data + 1U, m_netN); + bool ret = insertSilence(data + 1U, n); if (!ret) return; m_netErrs += errors; m_netBits += 48U; + m_netN = n; + if (m_netN != 0U) { const unsigned char* text = m_netSlowData.getText(); if (text != nullptr) @@ -786,6 +788,8 @@ void CDStarControl::writeNetwork() } if (m_netState == RPT_NET_STATE::DATA) { + m_netN = data[1U]; + data[1U] = TAG_DATA; m_netBits += 48U; @@ -1104,19 +1108,19 @@ void CDStarControl::insertSilence(unsigned int count) for (unsigned int i = 0U; i < count; i++) { if (i < 3U && m_lastFrameValid) { if (n == 0U) { - ::memcpy(m_lastFrame + DSTAR_VOICE_FRAME_LENGTH_BYTES + 1U, DSTAR_nullptr_SLOW_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES); + ::memcpy(m_lastFrame + DSTAR_VOICE_FRAME_LENGTH_BYTES + 1U, DSTAR_NULL_SLOW_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES); writeQueueDataNet(m_lastFrame); } else { - ::memcpy(m_lastFrame + DSTAR_VOICE_FRAME_LENGTH_BYTES + 1U, DSTAR_nullptr_SLOW_DATA_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES); + ::memcpy(m_lastFrame + DSTAR_VOICE_FRAME_LENGTH_BYTES + 1U, DSTAR_NULL_SLOW_DATA_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES); writeQueueDataNet(m_lastFrame); } } else { m_lastFrameValid = false; if (n == 0U) - writeQueueDataNet(DSTAR_nullptr_FRAME_SYNC_BYTES); + writeQueueDataNet(DSTAR_NULL_FRAME_SYNC_BYTES); else - writeQueueDataNet(DSTAR_nullptr_FRAME_DATA_BYTES); + writeQueueDataNet(DSTAR_NULL_FRAME_DATA_BYTES); } m_netN = n; @@ -1138,7 +1142,7 @@ void CDStarControl::blankDTMF(unsigned char* data) const (data[4] & DSTAR_DTMF_MASK[4]) == DSTAR_DTMF_SIG[4] && (data[5] & DSTAR_DTMF_MASK[5]) == DSTAR_DTMF_SIG[5] && (data[6] & DSTAR_DTMF_MASK[6]) == DSTAR_DTMF_SIG[6] && (data[7] & DSTAR_DTMF_MASK[7]) == DSTAR_DTMF_SIG[7] && (data[8] & DSTAR_DTMF_MASK[8]) == DSTAR_DTMF_SIG[8]) - ::memcpy(data, DSTAR_nullptr_AMBE_DATA_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES); + ::memcpy(data, DSTAR_NULL_AMBE_DATA_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES); } void CDStarControl::sendAck() @@ -1164,7 +1168,7 @@ void CDStarControl::sendAck() writeQueueHeaderRF(data); - writeQueueDataRF(DSTAR_nullptr_FRAME_SYNC_BYTES); + writeQueueDataRF(DSTAR_NULL_FRAME_SYNC_BYTES); LINK_STATUS status = LINK_STATUS::NONE; unsigned char reflector[DSTAR_LONG_CALLSIGN_LENGTH]; @@ -1201,7 +1205,7 @@ void CDStarControl::sendAck() m_rfSlowData.setText(text); - ::memcpy(data, DSTAR_nullptr_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U); + ::memcpy(data, DSTAR_NULL_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U); for (unsigned int i = 0U; i < 19U; i++) { m_rfSlowData.getSlowData(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES); @@ -1229,7 +1233,7 @@ void CDStarControl::sendError() writeQueueHeaderRF(data); - writeQueueDataRF(DSTAR_nullptr_FRAME_SYNC_BYTES); + writeQueueDataRF(DSTAR_NULL_FRAME_SYNC_BYTES); LINK_STATUS status = LINK_STATUS::NONE; unsigned char reflector[DSTAR_LONG_CALLSIGN_LENGTH]; @@ -1266,7 +1270,7 @@ void CDStarControl::sendError() m_rfSlowData.setText(text); - ::memcpy(data, DSTAR_nullptr_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U); + ::memcpy(data, DSTAR_NULL_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U); for (unsigned int i = 0U; i < 19U; i++) { m_rfSlowData.getSlowData(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES); diff --git a/DStarDefines.h b/DStarDefines.h index 83b9d70..0098f9e 100644 --- a/DStarDefines.h +++ b/DStarDefines.h @@ -27,16 +27,16 @@ const unsigned int DSTAR_FRAME_LENGTH_BYTES = 12U; const unsigned char DSTAR_END_PATTERN_BYTES[] = { TAG_EOT, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xC8, 0x7A }; const unsigned int DSTAR_END_PATTERN_LENGTH_BYTES = 6U; -const unsigned char DSTAR_nullptr_AMBE_DATA_BYTES[] = { 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8 }; -// DSTAR_nullptr_AMBE_DATA_BYTES_SCRAMBLED is DSTAR_nullptr_AMBE_DATA_BYTES XORed with DSTAR_SCRAMBLER_BYTES. -const unsigned char DSTAR_nullptr_AMBE_DATA_BYTES_SCRAMBLED[] = { 0xEEU, 0xC2U, 0xA1U, 0xC8U, 0x42U, 0x6EU, 0x52U, 0x51U, 0xC3U }; +const unsigned char DSTAR_NULL_AMBE_DATA_BYTES[] = { 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8 }; +// DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED is DSTAR_NULL_AMBE_DATA_BYTES XORed with DSTAR_SCRAMBLER_BYTES. +const unsigned char DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED[] = { 0xEEU, 0xC2U, 0xA1U, 0xC8U, 0x42U, 0x6EU, 0x52U, 0x51U, 0xC3U }; -const unsigned char DSTAR_nullptr_SLOW_SYNC_BYTES[] = { 0x55, 0x2D, 0x16 }; +const unsigned char DSTAR_NULL_SLOW_SYNC_BYTES[] = { 0x55, 0x2D, 0x16 }; // Note that these are already scrambled, 0x66 0x66 0x66 otherwise -const unsigned char DSTAR_nullptr_SLOW_DATA_BYTES[] = { 0x16, 0x29, 0xF5 }; +const unsigned char DSTAR_NULL_SLOW_DATA_BYTES[] = { 0x16, 0x29, 0xF5 }; -const unsigned char DSTAR_nullptr_FRAME_SYNC_BYTES[] = { TAG_DATA, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x55, 0x2D, 0x16 }; -const unsigned char DSTAR_nullptr_FRAME_DATA_BYTES[] = { TAG_DATA, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x16, 0x29, 0xF5 }; +const unsigned char DSTAR_NULL_FRAME_SYNC_BYTES[] = { TAG_DATA, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x55, 0x2D, 0x16 }; +const unsigned char DSTAR_NULL_FRAME_DATA_BYTES[] = { TAG_DATA, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x16, 0x29, 0xF5 }; const unsigned int DSTAR_VOICE_FRAME_LENGTH_BYTES = 9U; const unsigned int DSTAR_DATA_FRAME_LENGTH_BYTES = 3U; diff --git a/M17Defines.h b/M17Defines.h index e96bd36..5db7f7c 100644 --- a/M17Defines.h +++ b/M17Defines.h @@ -49,7 +49,7 @@ const unsigned int M17_LICH_FRAGMENT_FEC_LENGTH_BYTES = M17_LICH_FRAGMENT_FEC_LE const unsigned int M17_PAYLOAD_LENGTH_BITS = 128U; const unsigned int M17_PAYLOAD_LENGTH_BYTES = M17_PAYLOAD_LENGTH_BITS / 8U; -const unsigned char M17_nullptr_NONCE[] = {0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U}; +const unsigned char M17_NULL_NONCE[] = {0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U}; const unsigned int M17_META_LENGTH_BITS = 112U; const unsigned int M17_META_LENGTH_BYTES = M17_META_LENGTH_BITS / 8U; diff --git a/P25Control.cpp b/P25Control.cpp index 986333b..a65ba70 100644 --- a/P25Control.cpp +++ b/P25Control.cpp @@ -97,7 +97,7 @@ m_fp(nullptr) ::memset(m_netLDU2, 0x00U, 9U * 25U); m_lastIMBE = new unsigned char[11U]; - ::memcpy(m_lastIMBE, P25_nullptr_IMBE, 11U); + ::memcpy(m_lastIMBE, P25_NULL_IMBE, 11U); m_rfLDU = new unsigned char[P25_LDU_FRAME_LENGTH_BYTES]; ::memset(m_rfLDU, 0x00U, P25_LDU_FRAME_LENGTH_BYTES); diff --git a/P25Defines.h b/P25Defines.h index b4377b9..7824751 100644 --- a/P25Defines.h +++ b/P25Defines.h @@ -75,6 +75,6 @@ const unsigned char P25_DUID_LDU2 = 0x0AU; const unsigned char P25_DUID_PDU = 0x0CU; const unsigned char P25_DUID_TERM_LC = 0x0FU; -const unsigned char P25_nullptr_IMBE[] = {0x04U, 0x0CU, 0xFDU, 0x7BU, 0xFBU, 0x7DU, 0xF2U, 0x7BU, 0x3DU, 0x9EU, 0x45U}; +const unsigned char P25_NULL_IMBE[] = {0x04U, 0x0CU, 0xFDU, 0x7BU, 0xFBU, 0x7DU, 0xF2U, 0x7BU, 0x3DU, 0x9EU, 0x45U}; #endif diff --git a/Version.h b/Version.h index b3f7c59..fd86863 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20250417"; +const char* VERSION = "20250419"; #endif