Skip to content

Commit d8086e4

Browse files
committed
Remove FACCH2 processing and add voice body processing.
1 parent ba31b6d commit d8086e4

19 files changed

+131
-254
lines changed

MMDVMHost.vcxproj

-2
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@
198198
<ClInclude Include="NXDNCRC.h" />
199199
<ClInclude Include="NXDNDefines.h" />
200200
<ClInclude Include="NXDNFACCH1.h" />
201-
<ClInclude Include="NXDNFACCH2.h" />
202201
<ClInclude Include="NXDNLayer3.h" />
203202
<ClInclude Include="NXDNLICH.h" />
204203
<ClInclude Include="NXDNLookup.h" />
@@ -281,7 +280,6 @@
281280
<ClCompile Include="NXDNConvolution.cpp" />
282281
<ClCompile Include="NXDNCRC.cpp" />
283282
<ClCompile Include="NXDNFACCH1.cpp" />
284-
<ClCompile Include="NXDNFACCH2.cpp" />
285283
<ClCompile Include="NXDNLayer3.cpp" />
286284
<ClCompile Include="NXDNLICH.cpp" />
287285
<ClCompile Include="NXDNLookup.cpp" />

MMDVMHost.vcxproj.filters

-6
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,6 @@
257257
<ClInclude Include="NXDNFACCH1.h">
258258
<Filter>Header Files</Filter>
259259
</ClInclude>
260-
<ClInclude Include="NXDNFACCH2.h">
261-
<Filter>Header Files</Filter>
262-
</ClInclude>
263260
<ClInclude Include="NXDNUDCH.h">
264261
<Filter>Header Files</Filter>
265262
</ClInclude>
@@ -490,9 +487,6 @@
490487
<ClCompile Include="NXDNFACCH1.cpp">
491488
<Filter>Source Files</Filter>
492489
</ClCompile>
493-
<ClCompile Include="NXDNFACCH2.cpp">
494-
<Filter>Source Files</Filter>
495-
</ClCompile>
496490
<ClCompile Include="NXDNUDCH.cpp">
497491
<Filter>Source Files</Filter>
498492
</ClCompile>

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ OBJECTS = \
1010
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
1111
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
1212
Golay24128.o Hamming.o JitterBuffer.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o NXDNControl.o \
13-
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
13+
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
1414
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o \
1515
SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
1616

Makefile.Pi

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ OBJECTS = \
1010
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
1111
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
1212
Golay24128.o Hamming.o JitterBuffer.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o NXDNControl.o \
13-
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
13+
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
1414
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o \
1515
SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
1616

Makefile.Pi.Adafruit

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ OBJECTS = \
1010
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
1111
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
1212
Golay24128.o Hamming.o HD44780.o JitterBuffer.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o NXDNControl.o \
13-
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
13+
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
1414
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
1515
StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
1616

Makefile.Pi.HD44780

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ OBJECTS = \
1010
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
1111
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
1212
Golay24128.o Hamming.o HD44780.o JitterBuffer.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o NXDNControl.o \
13-
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
13+
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
1414
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
1515
StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
1616

Makefile.Pi.OLED

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ OBJECTS = \
1010
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
1111
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
1212
Golay24128.o Hamming.o JitterBuffer.o OLED.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o NXDNControl.o \
13-
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
13+
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
1414
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o \
1515
SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
1616

Makefile.Pi.PCF8574

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ OBJECTS = \
1010
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
1111
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
1212
Golay24128.o Hamming.o HD44780.o JitterBuffer.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o NXDNControl.o \
13-
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
13+
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
1414
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
1515
StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
1616

Makefile.Solaris

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ OBJECTS = \
1010
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
1111
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
1212
Golay24128.o Hamming.o JitterBuffer.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o NXDNControl.o \
13-
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
13+
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
1414
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o \
1515
SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
1616

NXDNControl.cpp

+88-61
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
#include "NXDNControl.h"
1515
#include "NXDNFACCH1.h"
16-
#include "NXDNFACCH2.h"
1716
#include "NXDNSACCH.h"
1817
#include "NXDNUDCH.h"
1918
#include "AMBEFEC.h"
@@ -209,7 +208,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
209208
return false;
210209

211210
unsigned char messageType = m_rfSACCHMessage.getMessageType();
212-
if (messageType == NXDN_MESSAGE_TYPE_IDLE)
211+
if (messageType != NXDN_MESSAGE_TYPE_VCALL)
213212
return false;
214213

215214
unsigned short srcId = m_rfSACCHMessage.getSourceUnitId();
@@ -247,17 +246,74 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
247246
if (m_rfState != RS_RF_AUDIO)
248247
return false;
249248

249+
unsigned char voiceMode = m_rfSACCHMessage.getCallOptions() & 0x07U;
250+
250251
if (option == NXDN_LICH_STEAL_NONE) {
251252
CAMBEFEC ambe;
252253
unsigned int errors = 0U;
253-
//errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES);
254-
//errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U);
255-
//errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U);
256-
//errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U);
257-
//LogDebug("NXDN, EHR, AMBE FEC %u/188 (%.1f%%)", errors, float(errors) / 1.88F);
258-
//errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES);
259-
//errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U);
260-
//LogDebug("NXDN, EFR, AMBE FEC %u/288 (%.1f%%)", errors, float(errors) / 2.88F);
254+
if (voiceMode == NXDN_VOICE_CALL_OPTION_9600_EFR) {
255+
errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES);
256+
errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U);
257+
m_rfErrs += errors;
258+
m_rfBits += 288U;
259+
m_display->writeNXDNBER(float(errors) / 2.88F);
260+
LogDebug("NXDN, EFR, AMBE FEC %u/288 (%.1f%%)", errors, float(errors) / 2.88F);
261+
} else {
262+
errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES);
263+
errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U);
264+
errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U);
265+
errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U);
266+
m_rfErrs += errors;
267+
m_rfBits += 188U;
268+
m_display->writeNXDNBER(float(errors) / 1.88F);
269+
LogDebug("NXDN, EHR, AMBE FEC %u/188 (%.1f%%)", errors, float(errors) / 1.88F);
270+
}
271+
} else if (option == NXDN_LICH_STEAL_FACCH1_1) {
272+
CNXDNFACCH1 facch1;
273+
facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
274+
275+
CAMBEFEC ambe;
276+
unsigned int errors = 0U;
277+
if (voiceMode == NXDN_VOICE_CALL_OPTION_9600_EFR) {
278+
errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U);
279+
m_rfErrs += errors;
280+
m_rfBits += 144U;
281+
m_display->writeNXDNBER(float(errors) / 1.44F);
282+
LogDebug("NXDN, EFR, AMBE FEC %u/144 (%.1f%%)", errors, float(errors) / 1.44F);
283+
} else {
284+
errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 18U);
285+
errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U);
286+
m_rfErrs += errors;
287+
m_rfBits += 94U;
288+
m_display->writeNXDNBER(float(errors) / 0.94F);
289+
LogDebug("NXDN, EHR, AMBE FEC %u/94 (%.1f%%)", errors, float(errors) / 0.94F);
290+
}
291+
} else if (option == NXDN_LICH_STEAL_FACCH1_2) {
292+
CAMBEFEC ambe;
293+
unsigned int errors = 0U;
294+
if (voiceMode == NXDN_VOICE_CALL_OPTION_9600_EFR) {
295+
errors += ambe.regenerateIMBE(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES);
296+
m_rfErrs += errors;
297+
m_rfBits += 144U;
298+
m_display->writeNXDNBER(float(errors) / 1.44F);
299+
LogDebug("NXDN, EFR, AMBE FEC %u/144 (%.1f%%)", errors, float(errors) / 1.44F);
300+
} else {
301+
errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES);
302+
errors += ambe.regenerateDMR(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U);
303+
m_rfErrs += errors;
304+
m_rfBits += 94U;
305+
m_display->writeNXDNBER(float(errors) / 0.94F);
306+
LogDebug("NXDN, EHR, AMBE FEC %u/94 (%.1f%%)", errors, float(errors) / 0.94F);
307+
}
308+
309+
CNXDNFACCH1 facch1;
310+
facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
311+
} else {
312+
CNXDNFACCH1 facch11;
313+
facch11.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
314+
315+
CNXDNFACCH1 facch12;
316+
facch12.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
261317
}
262318

263319
#ifdef notdef
@@ -579,65 +635,36 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
579635

580636
bool CNXDNControl::processData(unsigned char option, unsigned char *data)
581637
{
582-
if (option == NXDN_LICH_STEAL_FACCH) {
583-
CNXDNFACCH2 facch2;
584-
bool valid = facch2.decode(data + 2U);
585-
if (valid) {
586-
unsigned char ran = facch2.getRAN();
587-
if (ran != m_ran && ran != 0U)
588-
return false;
589-
590-
data[0U] = TAG_DATA;
591-
data[1U] = 0x00U;
592-
593-
CSync::addNXDNSync(data + 2U);
594-
595-
CNXDNLICH lich;
596-
lich.setRFCT(NXDN_LICH_RFCT_RDCH);
597-
lich.setFCT(NXDN_LICH_USC_UDCH);
598-
lich.setOption(NXDN_LICH_STEAL_FACCH);
599-
lich.setDirection(m_remoteGateway ? NXDN_LICH_DIRECTION_INBOUND : NXDN_LICH_DIRECTION_OUTBOUND);
600-
lich.encode(data + 2U);
601-
602-
facch2.setRAN(m_ran);
603-
facch2.encode(data + 2U);
638+
CNXDNUDCH udch;
639+
bool valid = udch.decode(data + 2U);
640+
if (valid) {
641+
unsigned char ran = udch.getRAN();
642+
if (ran != m_ran && ran != 0U)
643+
return false;
604644

605-
writeQueueNet(data);
645+
data[0U] = TAG_DATA;
646+
data[1U] = 0x00U;
606647

607-
if (m_duplex)
608-
writeQueueRF(data);
609-
#if defined(DUMP_NXDN)
610-
writeFile(data + 2U);
611-
#endif
612-
return true;
613-
}
614-
} else {
615-
CNXDNUDCH udch;
616-
bool valid = udch.decode(data + 2U);
617-
if (valid) {
618-
data[0U] = TAG_DATA;
619-
data[1U] = 0x00U;
648+
CSync::addNXDNSync(data + 2U);
620649

621-
CSync::addNXDNSync(data + 2U);
650+
CNXDNLICH lich;
651+
lich.setRFCT(NXDN_LICH_RFCT_RDCH);
652+
lich.setFCT(NXDN_LICH_USC_UDCH);
653+
lich.setOption(option);
654+
lich.setDirection(m_remoteGateway ? NXDN_LICH_DIRECTION_INBOUND : NXDN_LICH_DIRECTION_OUTBOUND);
655+
lich.encode(data + 2U);
622656

623-
CNXDNLICH lich;
624-
lich.setRFCT(NXDN_LICH_RFCT_RDCH);
625-
lich.setFCT(NXDN_LICH_USC_UDCH);
626-
lich.setOption(NXDN_LICH_STEAL_NONE);
627-
lich.setDirection(m_remoteGateway ? NXDN_LICH_DIRECTION_INBOUND : NXDN_LICH_DIRECTION_OUTBOUND);
628-
lich.encode(data + 2U);
657+
udch.setRAN(m_ran);
658+
udch.encode(data + 2U);
629659

630-
udch.encode(data + 2U);
660+
writeQueueNet(data);
631661

632-
writeQueueNet(data);
633-
634-
if (m_duplex)
635-
writeQueueRF(data);
662+
if (m_duplex)
663+
writeQueueRF(data);
636664
#if defined(DUMP_NXDN)
637-
writeFile(data + 2U);
665+
writeFile(data + 2U);
638666
#endif
639-
return true;
640-
}
667+
return true;
641668
}
642669

643670
#ifdef notdef

NXDNDefines.h

+13
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,17 @@ const unsigned char NXDN_MESSAGE_TYPE_AUTH_INQ_REQ = 0x28U;
8888
const unsigned char NXDN_MESSAGE_TYPE_AUTH_INQ_RESP = 0x29U;
8989
const unsigned char NXDN_MESSAGE_TYPE_PROP_FORM = 0x3FU;
9090

91+
const unsigned char NXDN_VOICE_CALL_OPTION_HALF_DUPLEX = 0x00U;
92+
const unsigned char NXDN_VOICE_CALL_OPTION_DUPLEX = 0x10U;
93+
94+
const unsigned char NXDN_VOICE_CALL_OPTION_4800_EHR = 0x00U;
95+
const unsigned char NXDN_VOICE_CALL_OPTION_9600_EHR = 0x02U;
96+
const unsigned char NXDN_VOICE_CALL_OPTION_9600_EFR = 0x03U;
97+
98+
const unsigned char NXDN_DATA_CALL_OPTION_HALF_DUPLEX = 0x00U;
99+
const unsigned char NXDN_DATA_CALL_OPTION_DUPLEX = 0x10U;
100+
101+
const unsigned char NXDN_DATA_CALL_OPTION_4800 = 0x00U;
102+
const unsigned char NXDN_DATA_CALL_OPTION_9600 = 0x02U;
103+
91104
#endif

NXDNFACCH1.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -85,25 +85,18 @@ bool CNXDNFACCH1::decode(const unsigned char* data, unsigned int offset)
8585

8686
uint8_t temp2[192U];
8787

88-
char text[500U];
89-
::strcpy(text, "NXDN, FACCH1 de-punctured: ");
90-
9188
unsigned int n = 0U;
9289
unsigned int index = 0U;
9390
for (unsigned int i = 0U; i < NXDN_FACCH1_LENGTH_BITS; i++) {
9491
if (n == PUNCTURE_LIST[index]) {
95-
::strcat(text, "X, ");
9692
temp2[n++] = 99U;
9793
index++;
9894
}
9995

10096
bool b = READ_BIT1(temp1, i);
10197
temp2[n++] = b ? 1U : 0U;
102-
::strcat(text, b ? "1, " : "0, ");
10398
}
10499

105-
LogMessage(text);
106-
107100
CNXDNConvolution conv;
108101
conv.start();
109102

0 commit comments

Comments
 (0)