diff --git a/nxdn/packet/Voice.cpp b/nxdn/packet/Voice.cpp index 268260f9..8cc6bc95 100644 --- a/nxdn/packet/Voice.cpp +++ b/nxdn/packet/Voice.cpp @@ -258,6 +258,10 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len) sacch.setStructure(NXDN_SR_SINGLE); sacch.encode(data + 2U); + uint8_t lcBuffer[NXDN_RTCH_LC_LENGTH_BYTES]; + m_nxdn->m_rfLC.encode(lcBuffer, NXDN_RTCH_LC_LENGTH_BITS); + + facch.setData(lcBuffer); facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); @@ -470,7 +474,7 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len) lich.setOutbound(!m_nxdn->m_duplex ? false : true); lich.encode(data + 2U); - lich.setOutbound(false); + //lich.setOutbound(false); // regenerate SACCH if it's valid channel::SACCH sacch; @@ -480,6 +484,9 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len) sacch.encode(data + 2U); } + uint8_t lcBuffer[NXDN_RTCH_LC_LENGTH_BYTES]; + m_nxdn->m_rfLC.encode(lcBuffer, NXDN_RTCH_LC_LENGTH_BITS); + // regenerate the audio and interpret the FACCH1 data if (option == NXDN_LICH_STEAL_NONE) { edac::AMBEFEC ambe; @@ -511,10 +518,10 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len) LogMessage(LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", audio, errs = %u/141 (%.1f%%)", errors, float(errors) / 1.88F); } } else if (option == NXDN_LICH_STEAL_FACCH1_1) { - channel::FACCH1 facch1; - bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); + channel::FACCH1 facch11; + bool valid = facch11.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); if (valid) - facch1.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); + facch11.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS); edac::AMBEFEC ambe; @@ -566,10 +573,10 @@ bool Voice::process(uint8_t fct, uint8_t option, uint8_t* data, uint32_t len) LogMessage(LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", audio, errs = %u/94 (%.1f%%)", errors, float(errors) / 0.94F); } - channel::FACCH1 facch1; - bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); + channel::FACCH1 facch12; + bool valid = facch12.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); if (valid) - facch1.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); + facch12.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS + NXDN_FACCH1_FEC_LENGTH_BITS); } else { channel::FACCH1 facch11; bool valid1 = facch11.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_FEC_LENGTH_BITS);