mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-14 17:47:32 -05:00
Adds Low Speed Data parsing to both LDU1 and LDU2
This commit is contained in:
@@ -11,24 +11,11 @@ import edac.CRC;
|
|||||||
|
|
||||||
public class LDU1Message extends LDUMessage
|
public class LDU1Message extends LDUMessage
|
||||||
{
|
{
|
||||||
public static final int IMBE_1 = 64;
|
|
||||||
public static final int IMBE_2 = 208;
|
|
||||||
public static final int IMBE_3 = 392;
|
|
||||||
public static final int IMBE_4 = 576;
|
|
||||||
public static final int IMBE_5 = 760;
|
|
||||||
public static final int IMBE_6 = 944;
|
|
||||||
public static final int IMBE_7 = 1128;
|
|
||||||
public static final int IMBE_8 = 1312;
|
|
||||||
public static final int IMBE_9 = 1488;
|
|
||||||
|
|
||||||
public static final int ENCRYPTION_FLAG = 352;
|
public static final int ENCRYPTION_FLAG = 352;
|
||||||
public static final int IMPLICIT_VENDOR_FLAG = 353;
|
public static final int IMPLICIT_VENDOR_FLAG = 353;
|
||||||
public static final int[] OPCODE = { 354,355,356,357,362,363 };
|
public static final int[] OPCODE = { 354,355,356,357,362,363 };
|
||||||
public static final int[] VENDOR = { 364,365,366,367,372,373,374,375 };
|
public static final int[] VENDOR = { 364,365,366,367,372,373,374,375 };
|
||||||
|
|
||||||
public static final int[] LOW_SPEED_DATA = { 1456,1457,1458,1459,1460,1461,
|
|
||||||
1462,1463,1472,1473,1474,1475,1476,1477,1478,1479 };
|
|
||||||
|
|
||||||
// public static final int[] OCTET_1 = { 364,365,366,367,372,373,374,375 };
|
// public static final int[] OCTET_1 = { 364,365,366,367,372,373,374,375 };
|
||||||
// public static final int[] OCTET_2 = { 376,377,382,383,384,385,386,387 };
|
// public static final int[] OCTET_2 = { 376,377,382,383,384,385,386,387 };
|
||||||
// public static final int[] OCTET_3 = { 536,537,538,539,540,541,546,547 };
|
// public static final int[] OCTET_3 = { 536,537,538,539,540,541,546,547 };
|
||||||
@@ -43,7 +30,6 @@ public class LDU1Message extends LDUMessage
|
|||||||
{
|
{
|
||||||
super( message, duid, aliasList );
|
super( message, duid, aliasList );
|
||||||
|
|
||||||
deinterleaveVoiceFrames();
|
|
||||||
|
|
||||||
/* NID CRC is checked in the message framer, thus a constructed message
|
/* NID CRC is checked in the message framer, thus a constructed message
|
||||||
* means it passed the CRC */
|
* means it passed the CRC */
|
||||||
@@ -63,19 +49,6 @@ public class LDU1Message extends LDUMessage
|
|||||||
mCRC = message.mCRC;
|
mCRC = message.mCRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deinterleaveVoiceFrames()
|
|
||||||
{
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_1, IMBE_1 + 144 );
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_2, IMBE_2 + 144 );
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_3, IMBE_3 + 144 );
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_4, IMBE_4 + 144 );
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_5, IMBE_5 + 144 );
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_6, IMBE_6 + 144 );
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_7, IMBE_7 + 144 );
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_8, IMBE_8 + 144 );
|
|
||||||
P25Interleave.deinterleaveVoice( mMessage, IMBE_9, IMBE_9 + 144 );
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkCRC()
|
private void checkCRC()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -97,13 +70,7 @@ public class LDU1Message extends LDUMessage
|
|||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
sb.append( "NAC:" );
|
sb.append( super.getMessageStub() );
|
||||||
sb.append( getNAC() );
|
|
||||||
sb.append( " " );
|
|
||||||
sb.append( getDUID().getLabel() );
|
|
||||||
sb.append( " LSD:" );
|
|
||||||
sb.append( getLowSpeedData() );
|
|
||||||
sb.append( " " );
|
|
||||||
|
|
||||||
if( isEncrypted() )
|
if( isEncrypted() )
|
||||||
{
|
{
|
||||||
@@ -154,16 +121,4 @@ public class LDU1Message extends LDUMessage
|
|||||||
|
|
||||||
return Vendor.fromValue( mMessage.getInt( VENDOR ) );
|
return Vendor.fromValue( mMessage.getInt( VENDOR ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLowSpeedData()
|
|
||||||
{
|
|
||||||
return mMessage.getHex( LOW_SPEED_DATA, 4 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Temporary override */
|
|
||||||
public boolean isValid()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,10 +24,7 @@ public class LDU2Message extends LDUMessage
|
|||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
sb.append( "NAC:" );
|
sb.append( super.getMessageStub() );
|
||||||
sb.append( getNAC() );
|
|
||||||
sb.append( " " );
|
|
||||||
sb.append( getDUID().getLabel() );
|
|
||||||
sb.append( " " );
|
sb.append( " " );
|
||||||
|
|
||||||
sb.append( mMessage.toString() );
|
sb.append( mMessage.toString() );
|
||||||
|
|||||||
@@ -2,17 +2,33 @@ package decode.p25.message.ldu;
|
|||||||
|
|
||||||
import alias.AliasList;
|
import alias.AliasList;
|
||||||
import bits.BitSetBuffer;
|
import bits.BitSetBuffer;
|
||||||
|
import decode.p25.P25Interleave;
|
||||||
import decode.p25.message.P25Message;
|
import decode.p25.message.P25Message;
|
||||||
import decode.p25.reference.DataUnitID;
|
import decode.p25.reference.DataUnitID;
|
||||||
import edac.CRC;
|
import edac.CRC;
|
||||||
|
|
||||||
public class LDUMessage extends P25Message
|
public class LDUMessage extends P25Message
|
||||||
{
|
{
|
||||||
|
public static final int IMBE_1 = 64;
|
||||||
|
public static final int IMBE_2 = 208;
|
||||||
|
public static final int IMBE_3 = 392;
|
||||||
|
public static final int IMBE_4 = 576;
|
||||||
|
public static final int IMBE_5 = 760;
|
||||||
|
public static final int IMBE_6 = 944;
|
||||||
|
public static final int IMBE_7 = 1128;
|
||||||
|
public static final int IMBE_8 = 1312;
|
||||||
|
public static final int IMBE_9 = 1488;
|
||||||
|
|
||||||
|
public static final int[] LOW_SPEED_DATA = { 1456,1457,1458,1459,1460,1461,
|
||||||
|
1462,1463,1472,1473,1474,1475,1476,1477,1478,1479 };
|
||||||
|
|
||||||
public LDUMessage( BitSetBuffer message, DataUnitID duid,
|
public LDUMessage( BitSetBuffer message, DataUnitID duid,
|
||||||
AliasList aliasList )
|
AliasList aliasList )
|
||||||
{
|
{
|
||||||
super( message, duid, aliasList );
|
super( message, duid, aliasList );
|
||||||
|
|
||||||
|
deinterleaveVoiceFrames();
|
||||||
|
|
||||||
/* NID CRC is checked in the message framer, thus a constructed message
|
/* NID CRC is checked in the message framer, thus a constructed message
|
||||||
* means it passed the CRC */
|
* means it passed the CRC */
|
||||||
mCRC = new CRC[ 2 ];
|
mCRC = new CRC[ 2 ];
|
||||||
@@ -21,6 +37,11 @@ public class LDUMessage extends P25Message
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMessage()
|
public String getMessage()
|
||||||
|
{
|
||||||
|
return getMessageStub();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessageStub()
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
@@ -28,17 +49,33 @@ public class LDUMessage extends P25Message
|
|||||||
sb.append( getNAC() );
|
sb.append( getNAC() );
|
||||||
sb.append( " " );
|
sb.append( " " );
|
||||||
sb.append( getDUID().getLabel() );
|
sb.append( getDUID().getLabel() );
|
||||||
sb.append( " " );
|
sb.append( " LSD:" );
|
||||||
|
sb.append( getLowSpeedData() );
|
||||||
|
|
||||||
sb.append( mMessage.toString() );
|
return sb.toString();
|
||||||
|
|
||||||
return sb.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLowSpeedData()
|
||||||
|
{
|
||||||
|
return mMessage.getHex( LOW_SPEED_DATA, 4 );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deinterleaveVoiceFrames()
|
||||||
|
{
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_1, IMBE_1 + 144 );
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_2, IMBE_2 + 144 );
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_3, IMBE_3 + 144 );
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_4, IMBE_4 + 144 );
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_5, IMBE_5 + 144 );
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_6, IMBE_6 + 144 );
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_7, IMBE_7 + 144 );
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_8, IMBE_8 + 144 );
|
||||||
|
P25Interleave.deinterleaveVoice( mMessage, IMBE_9, IMBE_9 + 144 );
|
||||||
|
}
|
||||||
|
|
||||||
/* Temporary override */
|
/* Temporary override */
|
||||||
public boolean isValid()
|
public boolean isValid()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user