From bb27d5cb42f45f7452433d9a938eb7098ea98ce6 Mon Sep 17 00:00:00 2001 From: "dennis.sheirer" Date: Sat, 3 Jan 2015 00:42:04 +0000 Subject: [PATCH] Adds Low Speed Data parsing to both LDU1 and LDU2 --- src/decode/p25/message/ldu/LDU1Message.java | 49 +-------------------- src/decode/p25/message/ldu/LDU2Message.java | 5 +-- src/decode/p25/message/ldu/LDUMessage.java | 49 ++++++++++++++++++--- 3 files changed, 46 insertions(+), 57 deletions(-) diff --git a/src/decode/p25/message/ldu/LDU1Message.java b/src/decode/p25/message/ldu/LDU1Message.java index 31d0b7e5..d50ab67f 100644 --- a/src/decode/p25/message/ldu/LDU1Message.java +++ b/src/decode/p25/message/ldu/LDU1Message.java @@ -11,24 +11,11 @@ import edac.CRC; 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 IMPLICIT_VENDOR_FLAG = 353; 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[] 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_2 = { 376,377,382,383,384,385,386,387 }; // 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 ); - deinterleaveVoiceFrames(); /* NID CRC is checked in the message framer, thus a constructed message * means it passed the CRC */ @@ -63,19 +49,6 @@ public class LDU1Message extends LDUMessage 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() { @@ -96,14 +69,8 @@ public class LDU1Message extends LDUMessage public String getMessageStub() { StringBuilder sb = new StringBuilder(); - - sb.append( "NAC:" ); - sb.append( getNAC() ); - sb.append( " " ); - sb.append( getDUID().getLabel() ); - sb.append( " LSD:" ); - sb.append( getLowSpeedData() ); - sb.append( " " ); + + sb.append( super.getMessageStub() ); if( isEncrypted() ) { @@ -154,16 +121,4 @@ public class LDU1Message extends LDUMessage return Vendor.fromValue( mMessage.getInt( VENDOR ) ); } - - public String getLowSpeedData() - { - return mMessage.getHex( LOW_SPEED_DATA, 4 ); - } - - /* Temporary override */ - public boolean isValid() - { - return true; - } - } diff --git a/src/decode/p25/message/ldu/LDU2Message.java b/src/decode/p25/message/ldu/LDU2Message.java index d609824d..dccf186a 100644 --- a/src/decode/p25/message/ldu/LDU2Message.java +++ b/src/decode/p25/message/ldu/LDU2Message.java @@ -24,10 +24,7 @@ public class LDU2Message extends LDUMessage { StringBuilder sb = new StringBuilder(); - sb.append( "NAC:" ); - sb.append( getNAC() ); - sb.append( " " ); - sb.append( getDUID().getLabel() ); + sb.append( super.getMessageStub() ); sb.append( " " ); sb.append( mMessage.toString() ); diff --git a/src/decode/p25/message/ldu/LDUMessage.java b/src/decode/p25/message/ldu/LDUMessage.java index aa0892f8..88501d89 100644 --- a/src/decode/p25/message/ldu/LDUMessage.java +++ b/src/decode/p25/message/ldu/LDUMessage.java @@ -2,17 +2,33 @@ package decode.p25.message.ldu; import alias.AliasList; import bits.BitSetBuffer; +import decode.p25.P25Interleave; import decode.p25.message.P25Message; import decode.p25.reference.DataUnitID; import edac.CRC; 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, AliasList aliasList ) { super( message, duid, aliasList ); + deinterleaveVoiceFrames(); + /* NID CRC is checked in the message framer, thus a constructed message * means it passed the CRC */ mCRC = new CRC[ 2 ]; @@ -21,24 +37,45 @@ public class LDUMessage extends P25Message @Override public String getMessage() + { + return getMessageStub(); + } + + public String getMessageStub() { StringBuilder sb = new StringBuilder(); - + sb.append( "NAC:" ); sb.append( getNAC() ); sb.append( " " ); 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 */ public boolean isValid() { return true; } - }