diff --git a/NXDNControl.cpp b/NXDNControl.cpp index 4c33741..3209663 100644 --- a/NXDNControl.cpp +++ b/NXDNControl.cpp @@ -432,28 +432,17 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne } // Regenerate the audio and interpret the FACCH1 data - unsigned char voiceMode = m_rfLayer3.getVoiceMode(); - if (option == NXDN_LICH_STEAL_NONE) { CAMBEFEC ambe; unsigned int errors = 0U; - if (voiceMode == NXDN_VOICE_CALL_OPTION_9600_EFR) { - errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); - errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); - m_rfErrs += errors; - m_rfBits += 288U; - m_display->writeNXDNBER(float(errors) / 2.88F); - LogDebug("NXDN, EFR, AMBE FEC %u/288 (%.1f%%)", errors, float(errors) / 2.88F); - } else { - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U); - m_rfErrs += errors; - m_rfBits += 188U; - m_display->writeNXDNBER(float(errors) / 1.88F); - LogDebug("NXDN, EHR, AMBE FEC %u/188 (%.1f%%)", errors, float(errors) / 1.88F); - } + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U); + m_rfErrs += errors; + m_rfBits += 188U; + m_display->writeNXDNBER(float(errors) / 1.88F); + LogDebug("NXDN, AMBE FEC %u/188 (%.1f%%)", errors, float(errors) / 1.88F); } else if (option == NXDN_LICH_STEAL_FACCH1_1) { CNXDNFACCH1 facch1; bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS); @@ -462,37 +451,21 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne CAMBEFEC ambe; unsigned int errors = 0U; - if (voiceMode == NXDN_VOICE_CALL_OPTION_9600_EFR) { - errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); - m_rfErrs += errors; - m_rfBits += 144U; - m_display->writeNXDNBER(float(errors) / 1.44F); - LogDebug("NXDN, EFR, AMBE FEC %u/144 (%.1f%%)", errors, float(errors) / 1.44F); - } else { - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U); - m_rfErrs += errors; - m_rfBits += 94U; - m_display->writeNXDNBER(float(errors) / 0.94F); - LogDebug("NXDN, EHR, AMBE FEC %u/94 (%.1f%%)", errors, float(errors) / 0.94F); - } + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U); + m_rfErrs += errors; + m_rfBits += 94U; + m_display->writeNXDNBER(float(errors) / 0.94F); + LogDebug("NXDN, AMBE FEC %u/94 (%.1f%%)", errors, float(errors) / 0.94F); } else if (option == NXDN_LICH_STEAL_FACCH1_2) { CAMBEFEC ambe; unsigned int errors = 0U; - if (voiceMode == NXDN_VOICE_CALL_OPTION_9600_EFR) { - errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); - m_rfErrs += errors; - m_rfBits += 144U; - m_display->writeNXDNBER(float(errors) / 1.44F); - LogDebug("NXDN, EFR, AMBE FEC %u/144 (%.1f%%)", errors, float(errors) / 1.44F); - } else { - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U); - m_rfErrs += errors; - m_rfBits += 94U; - m_display->writeNXDNBER(float(errors) / 0.94F); - LogDebug("NXDN, EHR, AMBE FEC %u/94 (%.1f%%)", errors, float(errors) / 0.94F); - } + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U); + m_rfErrs += errors; + m_rfBits += 94U; + m_display->writeNXDNBER(float(errors) / 0.94F); + LogDebug("NXDN, AMBE FEC %u/94 (%.1f%%)", errors, float(errors) / 0.94F); CNXDNFACCH1 facch1; bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS); @@ -686,10 +659,9 @@ void CNXDNControl::writeNetwork() unsigned char count = 0U; bool grp = false; bool dat = false; - bool efr = false; bool end = false; unsigned char data[200U]; - unsigned int length = m_network->read(data + 2U, srcId, grp, dstId, dat, efr, count, end); + unsigned int length = m_network->read(data + 2U, srcId, grp, dstId, dat, count, end); if (length == 0U) return; @@ -794,19 +766,12 @@ void CNXDNControl::writeNetwork() if (option == NXDN_LICH_STEAL_NONE) { CAMBEFEC ambe; unsigned int errors = 0U; - if (efr) { - errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); - errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); - m_netErrs += errors; - m_netBits += 288U; - } else { - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U); - m_netErrs += errors; - m_netBits += 188U; - } + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U); + m_netErrs += errors; + m_netBits += 188U; } else if (option == NXDN_LICH_STEAL_FACCH1_1) { CNXDNFACCH1 facch1; bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS); @@ -815,29 +780,17 @@ void CNXDNControl::writeNetwork() CAMBEFEC ambe; unsigned int errors = 0U; - if (efr) { - errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); - m_netErrs += errors; - m_netBits += 144U; - } else { - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U); - m_netErrs += errors; - m_netBits += 94U; - } + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U); + m_netErrs += errors; + m_netBits += 94U; } else if (option == NXDN_LICH_STEAL_FACCH1_2) { CAMBEFEC ambe; unsigned int errors = 0U; - if (efr) { - errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); - m_netErrs += errors; - m_netBits += 144U; - } else { - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); - errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U); - m_netErrs += errors; - m_netBits += 94U; - } + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES); + errors += ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U); + m_netErrs += errors; + m_netBits += 94U; CNXDNFACCH1 facch1; bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS); @@ -940,11 +893,10 @@ void CNXDNControl::writeNetwork(const unsigned char *data, bool dat) unsigned short srcId = m_rfLayer3.getSourceUnitId(); unsigned short dstId = m_rfLayer3.getDestinationGroupId(); bool grp = m_rfLayer3.getIsGroup(); - bool efr = m_rfLayer3.getVoiceMode() == NXDN_VOICE_CALL_OPTION_9600_EFR; bool end = data[0U] == TAG_EOT; - m_network->write(data + 2U, srcId, grp, dstId, dat, efr, m_rfFrames, end); + m_network->write(data + 2U, srcId, grp, dstId, dat, m_rfFrames, end); } void CNXDNControl::scrambler(unsigned char* data) const diff --git a/NXDNDefines.h b/NXDNDefines.h index 463ca61..31291c4 100644 --- a/NXDNDefines.h +++ b/NXDNDefines.h @@ -91,10 +91,6 @@ const unsigned char NXDN_MESSAGE_TYPE_PROP_FORM = 0x3FU; const unsigned char NXDN_VOICE_CALL_OPTION_HALF_DUPLEX = 0x00U; const unsigned char NXDN_VOICE_CALL_OPTION_DUPLEX = 0x10U; -const unsigned char NXDN_VOICE_CALL_OPTION_4800_EHR = 0x00U; -const unsigned char NXDN_VOICE_CALL_OPTION_9600_EHR = 0x02U; -const unsigned char NXDN_VOICE_CALL_OPTION_9600_EFR = 0x03U; - const unsigned char NXDN_DATA_CALL_OPTION_HALF_DUPLEX = 0x00U; const unsigned char NXDN_DATA_CALL_OPTION_DUPLEX = 0x10U; diff --git a/NXDNLayer3.cpp b/NXDNLayer3.cpp index 72b938a..51c9dd6 100644 --- a/NXDNLayer3.cpp +++ b/NXDNLayer3.cpp @@ -87,11 +87,6 @@ bool CNXDNLayer3::getIsGroup() const return (m_data[2U] & 0x80U) != 0x80U; } -unsigned char CNXDNLayer3::getVoiceMode() const -{ - return m_data[2U] & 0x07U; -} - unsigned char CNXDNLayer3::getDataBlocks() const { return m_data[8U] & 0x0FU; diff --git a/NXDNLayer3.h b/NXDNLayer3.h index b0749a2..9facb70 100644 --- a/NXDNLayer3.h +++ b/NXDNLayer3.h @@ -33,7 +33,6 @@ public: unsigned short getSourceUnitId() const; unsigned short getDestinationGroupId() const; bool getIsGroup() const; - unsigned char getVoiceMode() const; unsigned char getDataBlocks() const; void getData(unsigned char* data) const; diff --git a/NXDNNetwork.cpp b/NXDNNetwork.cpp index 8e90987..53cfb05 100644 --- a/NXDNNetwork.cpp +++ b/NXDNNetwork.cpp @@ -59,7 +59,7 @@ bool CNXDNNetwork::open() return m_socket.open(); } -bool CNXDNNetwork::write(const unsigned char* data, unsigned short src, bool grp, unsigned short dst, bool dat, bool efr, unsigned char cnt, bool end) +bool CNXDNNetwork::write(const unsigned char* data, unsigned short src, bool grp, unsigned short dst, bool dat, unsigned char cnt, bool end) { assert(data != NULL); @@ -77,7 +77,6 @@ bool CNXDNNetwork::write(const unsigned char* data, unsigned short src, bool grp buffer[7U] = grp ? 0x01U : 0x00U; buffer[7U] |= dat ? 0x02U : 0x00U; buffer[7U] |= end ? 0x04U : 0x00U; - buffer[7U] |= efr ? 0x08U : 0x00U; buffer[8U] = (dst >> 8) & 0xFFU; buffer[9U] = (dst >> 8) & 0xFFU; @@ -150,7 +149,7 @@ void CNXDNNetwork::clock(unsigned int ms) m_buffer.addData(buffer, 59U); } -unsigned int CNXDNNetwork::read(unsigned char* data, unsigned short& src, bool& grp, unsigned short& dst, bool& dat, bool& efr, unsigned char& cnt, bool& end) +unsigned int CNXDNNetwork::read(unsigned char* data, unsigned short& src, bool& grp, unsigned short& dst, bool& dat, unsigned char& cnt, bool& end) { assert(data != NULL); @@ -164,7 +163,6 @@ unsigned int CNXDNNetwork::read(unsigned char* data, unsigned short& src, bool& grp = (buffer[7U] & 0x01U) == 0x01U; dat = (buffer[7U] & 0x02U) == 0x02U; end = (buffer[7U] & 0x04U) == 0x04U; - efr = (buffer[7U] & 0x08U) == 0x08U; dst = (buffer[8U] << 8) + buffer[9U]; cnt = buffer[10U]; diff --git a/NXDNNetwork.h b/NXDNNetwork.h index 4febcc1..3ef9fda 100644 --- a/NXDNNetwork.h +++ b/NXDNNetwork.h @@ -36,9 +36,9 @@ public: void enable(bool enabled); - bool write(const unsigned char* data, unsigned short src, bool grp, unsigned short dst, bool dat, bool efr, unsigned char cnt, bool end); + bool write(const unsigned char* data, unsigned short src, bool grp, unsigned short dst, bool dat, unsigned char cnt, bool end); - unsigned int read(unsigned char* data, unsigned short& src, bool& grp, unsigned short& dst, bool& dat, bool& efr, unsigned char& cnt, bool& end); + unsigned int read(unsigned char* data, unsigned short& src, bool& grp, unsigned short& dst, bool& dat, unsigned char& cnt, bool& end); void reset();