diff --git a/src/common/nxdn/lc/RTCH.cpp b/src/common/nxdn/lc/RTCH.cpp index 14486cc2..fa81800d 100644 --- a/src/common/nxdn/lc/RTCH.cpp +++ b/src/common/nxdn/lc/RTCH.cpp @@ -362,7 +362,7 @@ void RTCH::encodeLC(uint8_t* data) break; case MessageType::RTCH_DCALL_DATA: case MessageType::RTCH_SDCALL_REQ_DATA: - data[1U] = (m_dataFrameNumber & 0x0FU << 4) + // Frame Number + data[1U] = ((m_dataFrameNumber & 0x0FU) << 4) + // Frame Number (m_dataBlockNumber & 0x0FU); // Block Number break; case MessageType::RTCH_DCALL_ACK: diff --git a/src/fne/network/callhandler/TagNXDNData.cpp b/src/fne/network/callhandler/TagNXDNData.cpp index ed131469..7cc22ceb 100644 --- a/src/fne/network/callhandler/TagNXDNData.cpp +++ b/src/fne/network/callhandler/TagNXDNData.cpp @@ -127,7 +127,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI case FuncChannelType::USC_UDCH: { channel::UDCH udch; - bool validUDCH = udch.decode(data + 2U); + bool validUDCH = udch.decode(frame.get() + 2U); if (validUDCH) { // The layer3 data will only be correct if valid is true uint8_t buffer[NXDN_RTCH_LC_LENGTH_BYTES]; diff --git a/src/host/nxdn/packet/Voice.cpp b/src/host/nxdn/packet/Voice.cpp index 86736fd4..d7affa82 100644 --- a/src/host/nxdn/packet/Voice.cpp +++ b/src/host/nxdn/packet/Voice.cpp @@ -946,7 +946,7 @@ bool Voice::processNetwork(FuncChannelType::E fct, ChOption::E option, lc::RTCH& sacch.encode(start + 2U); uint8_t buffer[NXDN_RTCH_LC_LENGTH_BYTES]; - m_nxdn->m_rfLC.encode(buffer, NXDN_RTCH_LC_LENGTH_BITS); + m_nxdn->m_netLC.encode(buffer, NXDN_RTCH_LC_LENGTH_BITS); facch.setData(buffer); facch.encode(start + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); @@ -963,7 +963,7 @@ bool Voice::processNetwork(FuncChannelType::E fct, ChOption::E option, lc::RTCH& } } - if (m_nxdn->m_rfState == RS_RF_AUDIO) { + if (m_nxdn->m_netState == RS_NET_AUDIO) { // regenerate the sync Sync::addNXDNSync(data + 2U); diff --git a/tests/nxdn/RTCH_Tests.cpp b/tests/nxdn/RTCH_Tests.cpp index 3b933406..741a17a8 100644 --- a/tests/nxdn/RTCH_Tests.cpp +++ b/tests/nxdn/RTCH_Tests.cpp @@ -194,3 +194,23 @@ TEST_CASE("RTCH assignment operator preserves all fields", "[nxdn][rtch]") { REQUIRE(assigned.getEmergency() == original.getEmergency()); REQUIRE(assigned.getEncrypted() == original.getEncrypted()); } + +TEST_CASE("RTCH encodes and decodes data frame and block numbers", "[nxdn][rtch]") { + uint8_t data[NXDN_RTCH_LC_LENGTH_BYTES]; + ::memset(data, 0x00U, sizeof(data)); + + RTCH rtch; + rtch.setMessageType(MessageType::RTCH_DCALL_DATA); + rtch.setDataFrameNumber(0x0AU); + rtch.setDataBlockNumber(0x05U); + + rtch.encode(data, NXDN_RTCH_LC_LENGTH_BITS); + + REQUIRE(data[1U] == 0xA5U); + + RTCH decoded; + decoded.decode(data, NXDN_RTCH_LC_LENGTH_BITS); + REQUIRE(decoded.getMessageType() == MessageType::RTCH_DCALL_DATA); + REQUIRE(decoded.getDataFrameNumber() == 0x0AU); + REQUIRE(decoded.getDataBlockNumber() == 0x05U); +}