diff --git a/DStarControl.cpp b/DStarControl.cpp index e03a936..cab1905 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -422,7 +422,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) writeJSONRSSI(); 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); @@ -561,7 +561,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); @@ -739,9 +739,9 @@ 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]; + unsigned char n = data[1U]; - if (m_netN == 0U) { + if (n == 0U) { CSync::addDStarSync(data + 2U); m_netSlowData.start(); } else { @@ -758,10 +758,10 @@ void CDStarControl::writeNetwork() } if (m_netState == RPT_NET_STATE::AUDIO) { - m_netN = data[1U]; + 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); } @@ -769,12 +769,14 @@ 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_netBits += 48U; + m_netN = n; + if (m_netN != 0U) { const unsigned char* text = m_netSlowData.getText(); if (text != nullptr) @@ -788,6 +790,8 @@ void CDStarControl::writeNetwork() } if (m_netState == RPT_NET_STATE::DATA) { + m_netN = data[1U]; + data[1U] = TAG_DATA; m_netBits += 48U; @@ -836,7 +840,7 @@ void CDStarControl::clock() m_rfTimeoutTimer.clock(ms); m_netTimeoutTimer.clock(ms); - if (m_netState == RPT_NET_STATE::AUDIO) { + if ((m_netState == RPT_NET_STATE::AUDIO) || (m_netState == RPT_NET_STATE::DATA)) { m_networkWatchdog.clock(ms); if (m_networkWatchdog.hasExpired()) { @@ -1068,19 +1072,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; @@ -1102,7 +1106,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() @@ -1128,7 +1132,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]; @@ -1179,7 +1183,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); @@ -1207,7 +1211,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]; @@ -1258,7 +1262,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/DStarSlowData.cpp b/DStarSlowData.cpp index 1e58af7..9b3ae5d 100644 --- a/DStarSlowData.cpp +++ b/DStarSlowData.cpp @@ -69,6 +69,7 @@ void CDStarSlowData::add(const unsigned char* data) m_buffer[5U] = data[11U] ^ DSTAR_SCRAMBLER_BYTES[2U]; m_state = SDD_STATE::FIRST; m_complete = true; + CUtils::dump(1U, "D-Star slow data element", m_buffer, 6U); loadHeader(); loadText(); break; 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 f70bd3e..6da36c9 100644 --- a/P25Control.cpp +++ b/P25Control.cpp @@ -101,7 +101,7 @@ m_enabled(true) ::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..b62c495 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 = "20250422"; #endif