mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 06:55:52 +08:00
Add decoding of the Layer 3 messages.
This commit is contained in:
@@ -199,6 +199,7 @@
|
|||||||
<ClInclude Include="NXDNDefines.h" />
|
<ClInclude Include="NXDNDefines.h" />
|
||||||
<ClInclude Include="NXDNFACCH1.h" />
|
<ClInclude Include="NXDNFACCH1.h" />
|
||||||
<ClInclude Include="NXDNFACCH2.h" />
|
<ClInclude Include="NXDNFACCH2.h" />
|
||||||
|
<ClInclude Include="NXDNLayer3.h" />
|
||||||
<ClInclude Include="NXDNLICH.h" />
|
<ClInclude Include="NXDNLICH.h" />
|
||||||
<ClInclude Include="NXDNLookup.h" />
|
<ClInclude Include="NXDNLookup.h" />
|
||||||
<ClInclude Include="NXDNNetwork.h" />
|
<ClInclude Include="NXDNNetwork.h" />
|
||||||
@@ -281,6 +282,7 @@
|
|||||||
<ClCompile Include="NXDNCRC.cpp" />
|
<ClCompile Include="NXDNCRC.cpp" />
|
||||||
<ClCompile Include="NXDNFACCH1.cpp" />
|
<ClCompile Include="NXDNFACCH1.cpp" />
|
||||||
<ClCompile Include="NXDNFACCH2.cpp" />
|
<ClCompile Include="NXDNFACCH2.cpp" />
|
||||||
|
<ClCompile Include="NXDNLayer3.cpp" />
|
||||||
<ClCompile Include="NXDNLICH.cpp" />
|
<ClCompile Include="NXDNLICH.cpp" />
|
||||||
<ClCompile Include="NXDNLookup.cpp" />
|
<ClCompile Include="NXDNLookup.cpp" />
|
||||||
<ClCompile Include="NXDNNetwork.cpp" />
|
<ClCompile Include="NXDNNetwork.cpp" />
|
||||||
|
|||||||
@@ -263,6 +263,9 @@
|
|||||||
<ClInclude Include="NXDNUDCH.h">
|
<ClInclude Include="NXDNUDCH.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="NXDNLayer3.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="BPTC19696.cpp">
|
<ClCompile Include="BPTC19696.cpp">
|
||||||
@@ -493,5 +496,8 @@
|
|||||||
<ClCompile Include="NXDNUDCH.cpp">
|
<ClCompile Include="NXDNUDCH.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="NXDNLayer3.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
6
Makefile
6
Makefile
@@ -10,9 +10,9 @@ OBJECTS = \
|
|||||||
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 \
|
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 \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
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 \
|
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 \
|
||||||
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
|
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
|
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.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
|
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
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ OBJECTS = \
|
|||||||
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 \
|
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 \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
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 \
|
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 \
|
||||||
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
|
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
|
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.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
|
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
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ OBJECTS = \
|
|||||||
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 \
|
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 \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
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 \
|
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 \
|
||||||
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
|
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 \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o \
|
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.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
|
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
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ OBJECTS = \
|
|||||||
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 \
|
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 \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
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 \
|
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 \
|
||||||
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
|
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 \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
|
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o 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
|
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
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ OBJECTS = \
|
|||||||
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 \
|
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 \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
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 \
|
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 \
|
||||||
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
|
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
|
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.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
|
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
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ OBJECTS = \
|
|||||||
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 \
|
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 \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
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 \
|
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 \
|
||||||
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
|
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 \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
|
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o 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
|
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
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ OBJECTS = \
|
|||||||
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 \
|
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 \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
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 \
|
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 \
|
||||||
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o \
|
NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNFACCH2.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o \
|
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.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
|
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
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,9 @@ m_rfErrs(0U),
|
|||||||
m_rfBits(1U),
|
m_rfBits(1U),
|
||||||
m_netErrs(0U),
|
m_netErrs(0U),
|
||||||
m_netBits(1U),
|
m_netBits(1U),
|
||||||
m_lastLICH(),
|
m_rfLastLICH(),
|
||||||
|
m_rfSACCHMessage(),
|
||||||
|
m_rfMask(0x00U),
|
||||||
m_netN(0U),
|
m_netN(0U),
|
||||||
m_rssiMapper(rssiMapper),
|
m_rssiMapper(rssiMapper),
|
||||||
m_rssi(0U),
|
m_rssi(0U),
|
||||||
@@ -139,21 +141,21 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len)
|
|||||||
bool valid = lich.decode(data + 2U);
|
bool valid = lich.decode(data + 2U);
|
||||||
|
|
||||||
if (valid)
|
if (valid)
|
||||||
m_lastLICH = lich;
|
m_rfLastLICH = lich;
|
||||||
|
|
||||||
// Stop repeater packets coming through, unless we're acting as a remote gateway
|
// Stop repeater packets coming through, unless we're acting as a remote gateway
|
||||||
if (m_remoteGateway) {
|
if (m_remoteGateway) {
|
||||||
unsigned char direction = m_lastLICH.getDirection();
|
unsigned char direction = m_rfLastLICH.getDirection();
|
||||||
if (direction == NXDN_LICH_DIRECTION_INBOUND)
|
if (direction == NXDN_LICH_DIRECTION_INBOUND)
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
unsigned char direction = m_lastLICH.getDirection();
|
unsigned char direction = m_rfLastLICH.getDirection();
|
||||||
if (direction == NXDN_LICH_DIRECTION_OUTBOUND)
|
if (direction == NXDN_LICH_DIRECTION_OUTBOUND)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char usc = m_lastLICH.getFCT();
|
unsigned char usc = m_rfLastLICH.getFCT();
|
||||||
unsigned char option = m_lastLICH.getOption();
|
unsigned char option = m_rfLastLICH.getOption();
|
||||||
|
|
||||||
bool ret;
|
bool ret;
|
||||||
if (usc == NXDN_LICH_USC_UDCH)
|
if (usc == NXDN_LICH_USC_UDCH)
|
||||||
@@ -174,6 +176,77 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_rfState == RS_RF_LISTENING && !valid)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (m_rfState == RS_RF_LISTENING) {
|
||||||
|
unsigned char message[3U];
|
||||||
|
sacch.getData(message);
|
||||||
|
|
||||||
|
unsigned char structure = sacch.getStructure();
|
||||||
|
switch (structure) {
|
||||||
|
case NXDN_SR_1_4:
|
||||||
|
m_rfMask |= 0x01U;
|
||||||
|
m_rfSACCHMessage.decode(message, 18U, 0U);
|
||||||
|
break;
|
||||||
|
case NXDN_SR_2_4:
|
||||||
|
m_rfMask |= 0x02U;
|
||||||
|
m_rfSACCHMessage.decode(message, 18U, 18U);
|
||||||
|
break;
|
||||||
|
case NXDN_SR_3_4:
|
||||||
|
m_rfMask |= 0x04U;
|
||||||
|
m_rfSACCHMessage.decode(message, 18U, 36U);
|
||||||
|
break;
|
||||||
|
case NXDN_SR_4_4:
|
||||||
|
m_rfMask |= 0x08U;
|
||||||
|
m_rfSACCHMessage.decode(message, 18U, 54U);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_rfMask != 0x0FU)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
unsigned char messageType = m_rfSACCHMessage.getMessageType();
|
||||||
|
if (messageType == NXDN_MESSAGE_TYPE_IDLE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
unsigned short srcId = m_rfSACCHMessage.getSourceUnitId();
|
||||||
|
unsigned short dstId = m_rfSACCHMessage.getDestinationGroupId();
|
||||||
|
bool grp = m_rfSACCHMessage.getIsGroup();
|
||||||
|
|
||||||
|
if (m_selfOnly) {
|
||||||
|
if (srcId != m_id) {
|
||||||
|
m_rfState = RS_RF_REJECTED;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_rfFrames = 0U;
|
||||||
|
m_rfErrs = 0U;
|
||||||
|
m_rfBits = 1U;
|
||||||
|
m_rfTimeoutTimer.start();
|
||||||
|
m_rfState = RS_RF_AUDIO;
|
||||||
|
|
||||||
|
m_minRSSI = m_rssi;
|
||||||
|
m_maxRSSI = m_rssi;
|
||||||
|
m_aveRSSI = m_rssi;
|
||||||
|
m_rssiCount = 1U;
|
||||||
|
#if defined(DUMP_NXDN)
|
||||||
|
openFile();
|
||||||
|
#endif
|
||||||
|
std::string source = m_lookup->find(srcId);
|
||||||
|
LogMessage("NXDN, received RF voice transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId);
|
||||||
|
m_display->writeNXDN(source.c_str(), grp, dstId, "R");
|
||||||
|
|
||||||
|
m_rfState = RS_RF_AUDIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX What about rejected?
|
||||||
|
if (m_rfState != RS_RF_AUDIO)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (option == NXDN_LICH_STEAL_NONE) {
|
if (option == NXDN_LICH_STEAL_NONE) {
|
||||||
CAMBEFEC ambe;
|
CAMBEFEC ambe;
|
||||||
unsigned int errors = 0U;
|
unsigned int errors = 0U;
|
||||||
@@ -749,6 +822,8 @@ void CNXDNControl::writeEndRF()
|
|||||||
{
|
{
|
||||||
m_rfState = RS_RF_LISTENING;
|
m_rfState = RS_RF_LISTENING;
|
||||||
|
|
||||||
|
m_rfMask = 0x00U;
|
||||||
|
|
||||||
m_rfTimeoutTimer.stop();
|
m_rfTimeoutTimer.stop();
|
||||||
|
|
||||||
if (m_netState == RS_NET_IDLE) {
|
if (m_netState == RS_NET_IDLE) {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "RSSIInterpolator.h"
|
#include "RSSIInterpolator.h"
|
||||||
#include "NXDNNetwork.h"
|
#include "NXDNNetwork.h"
|
||||||
#include "NXDNDefines.h"
|
#include "NXDNDefines.h"
|
||||||
|
#include "NXDNLayer3.h"
|
||||||
#include "NXDNLookup.h"
|
#include "NXDNLookup.h"
|
||||||
#include "RingBuffer.h"
|
#include "RingBuffer.h"
|
||||||
#include "StopWatch.h"
|
#include "StopWatch.h"
|
||||||
@@ -68,7 +69,9 @@ private:
|
|||||||
unsigned int m_rfBits;
|
unsigned int m_rfBits;
|
||||||
unsigned int m_netErrs;
|
unsigned int m_netErrs;
|
||||||
unsigned int m_netBits;
|
unsigned int m_netBits;
|
||||||
CNXDNLICH m_lastLICH;
|
CNXDNLICH m_rfLastLICH;
|
||||||
|
CNXDNLayer3 m_rfSACCHMessage;
|
||||||
|
unsigned char m_rfMask;
|
||||||
unsigned char m_netN;
|
unsigned char m_netN;
|
||||||
CRSSIInterpolator* m_rssiMapper;
|
CRSSIInterpolator* m_rssiMapper;
|
||||||
unsigned char m_rssi;
|
unsigned char m_rssi;
|
||||||
|
|||||||
@@ -66,4 +66,26 @@ const unsigned char NXDN_SR_3_4 = 1U;
|
|||||||
const unsigned char NXDN_SR_2_4 = 2U;
|
const unsigned char NXDN_SR_2_4 = 2U;
|
||||||
const unsigned char NXDN_SR_1_4 = 3U;
|
const unsigned char NXDN_SR_1_4 = 3U;
|
||||||
|
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_VCALL = 0x01U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_VCALL_IV = 0x03U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_DCALL_HDR = 0x09U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_DCALL_DATA = 0x0BU;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_DCALL_ACK = 0x0CU;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_TX_REL = 0x08U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_HEAD_DLY = 0x0FU;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_SDCALL_REQ_HDR = 0x38U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_SDCALL_REQ_DATA = 0x39U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_SDCALL_RESP = 0x3BU;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_SDCALL_IV = 0x3AU;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_STAT_INQ_REQ = 0x30U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_STAT_INQ_RESP = 0x31U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_STAT_REQ = 0x32U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_STAT_RESP = 0x33U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_REM_CON_REQ = 0x34U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_REM_CON_RESP = 0x35U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_IDLE = 0x10U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_AUTH_INQ_REQ = 0x28U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_AUTH_INQ_RESP = 0x29U;
|
||||||
|
const unsigned char NXDN_MESSAGE_TYPE_PROP_FORM = 0x3FU;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
97
NXDNLayer3.cpp
Normal file
97
NXDNLayer3.cpp
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 by Jonathan Naylor G4KLX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "NXDNDefines.h"
|
||||||
|
#include "NXDNLayer3.h"
|
||||||
|
#include "Log.h"
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U };
|
||||||
|
|
||||||
|
#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7])
|
||||||
|
#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7])
|
||||||
|
|
||||||
|
CNXDNLayer3::CNXDNLayer3(const CNXDNLayer3& layer3) :
|
||||||
|
m_data(NULL)
|
||||||
|
{
|
||||||
|
m_data = new unsigned char[22U];
|
||||||
|
::memcpy(m_data, layer3.m_data, 22U);
|
||||||
|
}
|
||||||
|
|
||||||
|
CNXDNLayer3::CNXDNLayer3() :
|
||||||
|
m_data(NULL)
|
||||||
|
{
|
||||||
|
m_data = new unsigned char[22U];
|
||||||
|
::memset(m_data, 0x00U, 22U);
|
||||||
|
}
|
||||||
|
|
||||||
|
CNXDNLayer3::~CNXDNLayer3()
|
||||||
|
{
|
||||||
|
delete[] m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNXDNLayer3::decode(const unsigned char* bytes, unsigned int length, unsigned int offset)
|
||||||
|
{
|
||||||
|
assert(bytes != NULL);
|
||||||
|
|
||||||
|
for (unsigned int i = 0U; i < length; i++, offset++) {
|
||||||
|
bool b = READ_BIT1(bytes, offset);
|
||||||
|
WRITE_BIT1(m_data, i, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNXDNLayer3::encode(unsigned char* bytes, unsigned int length, unsigned int offset)
|
||||||
|
{
|
||||||
|
assert(bytes != NULL);
|
||||||
|
|
||||||
|
for (unsigned int i = 0U; i < length; i++, offset++) {
|
||||||
|
bool b = READ_BIT1(m_data, i);
|
||||||
|
WRITE_BIT1(bytes, offset, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char CNXDNLayer3::getMessageType() const
|
||||||
|
{
|
||||||
|
return m_data[0U] & 0x3FU;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned short CNXDNLayer3::getSourceUnitId() const
|
||||||
|
{
|
||||||
|
return (m_data[3U] << 8) | m_data[4U];
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned short CNXDNLayer3::getDestinationGroupId() const
|
||||||
|
{
|
||||||
|
return (m_data[5U] << 8) | m_data[6U];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CNXDNLayer3::getIsGroup() const
|
||||||
|
{
|
||||||
|
return (m_data[2U] & 0x80U) != 0x80U;
|
||||||
|
}
|
||||||
|
|
||||||
|
CNXDNLayer3& CNXDNLayer3::operator=(const CNXDNLayer3& layer3)
|
||||||
|
{
|
||||||
|
if (&layer3 != this)
|
||||||
|
::memcpy(m_data, layer3.m_data, 22U);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
43
NXDNLayer3.h
Normal file
43
NXDNLayer3.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 by Jonathan Naylor G4KLX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(NXDNLayer3_H)
|
||||||
|
#define NXDNLayer3_H
|
||||||
|
|
||||||
|
class CNXDNLayer3 {
|
||||||
|
public:
|
||||||
|
CNXDNLayer3(const CNXDNLayer3& layer3);
|
||||||
|
CNXDNLayer3();
|
||||||
|
~CNXDNLayer3();
|
||||||
|
|
||||||
|
void decode(const unsigned char* bytes, unsigned int length, unsigned int offset = 0U);
|
||||||
|
|
||||||
|
void encode(unsigned char* bytes, unsigned int length, unsigned int offset = 0U);
|
||||||
|
|
||||||
|
unsigned char getMessageType() const;
|
||||||
|
unsigned short getSourceUnitId() const;
|
||||||
|
unsigned short getDestinationGroupId() const;
|
||||||
|
bool getIsGroup() const;
|
||||||
|
|
||||||
|
CNXDNLayer3& operator=(const CNXDNLayer3& layer3);
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned char* m_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user