diff --git a/src/crc/CRCP25.java b/src/crc/CRCP25.java index 901a1602..a88a3ff4 100644 --- a/src/crc/CRCP25.java +++ b/src/crc/CRCP25.java @@ -105,7 +105,7 @@ public class CRCP25 if( errorLocation >= 0 ) { - message.flip( errorLocation ); + message.flip( errorLocation + NID_MESSAGE_START ); return CRC.CORRECTED; } @@ -144,7 +144,7 @@ public class CRCP25 if( errorLocation >= 0 ) { - message.flip( errorLocation ); + message.flip( errorLocation + messageStart ); return CRC.CORRECTED; } @@ -212,7 +212,7 @@ public class CRCP25 public static void main( String[] args ) { - String raw = "0010011000000111100010111111001111100001111010011110000100010010000001011001000000000000000000000000000000000000000000000000000000000000000000001101000111000011"; + String raw = "0010011000000111101010111111001111100001111010011110000100010010000010011001000000101101110000000000000000000000000000000000000000000000000000000001011011001100"; BitSetBuffer message = BitSetBuffer.load( raw ); @@ -220,6 +220,8 @@ public class CRCP25 CRC results = correctCCITT80( message, 64, 144 ); + mLog.debug( "COR:" + message.toString() ); + mLog.debug( "Results: " + results.getDisplayText() ); } } diff --git a/src/decode/p25/P25MessageProcessor.java b/src/decode/p25/P25MessageProcessor.java index 89665319..2a3fda9f 100644 --- a/src/decode/p25/P25MessageProcessor.java +++ b/src/decode/p25/P25MessageProcessor.java @@ -59,15 +59,6 @@ public class P25MessageProcessor implements Listener mIdentifierMap.put( identifierUpdate.getIdentifier(), identifierUpdate ); } -// if( message instanceof TSBKMessage ) -// { -// mLog.debug( message.getMessage() ); -// } -// else -// { -// mLog.debug( message.getMessage() + "\t" + message.getBinaryMessage() ); -// } - mBroadcaster.broadcast( message ); } diff --git a/src/decode/p25/message/pdu/PDUMessage.java b/src/decode/p25/message/pdu/PDUMessage.java index 72c59329..6b34bf2e 100644 --- a/src/decode/p25/message/pdu/PDUMessage.java +++ b/src/decode/p25/message/pdu/PDUMessage.java @@ -2,6 +2,7 @@ package decode.p25.message.pdu; import alias.AliasList; import bits.BitSetBuffer; +import crc.CRC; import decode.p25.message.P25Message; import decode.p25.reference.DataUnitID; import decode.p25.reference.Opcode; @@ -28,6 +29,10 @@ public class PDUMessage extends P25Message public PDUMessage( BitSetBuffer message, DataUnitID duid, AliasList aliasList ) { super( message, duid, aliasList ); + + /* Setup a CRC array to hold the header CRC and the multi-block CRC */ + mCRC = new CRC[ 2 ]; + mCRC[ 0 ] = CRC.PASSED; } protected String getMessageStub() diff --git a/src/decode/p25/message/tdu/TDUMessage.java b/src/decode/p25/message/tdu/TDUMessage.java index d5e53f32..addd3c17 100644 --- a/src/decode/p25/message/tdu/TDUMessage.java +++ b/src/decode/p25/message/tdu/TDUMessage.java @@ -2,6 +2,7 @@ package decode.p25.message.tdu; import alias.AliasList; import bits.BitSetBuffer; +import crc.CRC; import decode.p25.message.P25Message; import decode.p25.reference.DataUnitID; @@ -11,5 +12,10 @@ public class TDUMessage extends P25Message AliasList aliasList ) { super( message, duid, aliasList ); + + /* NID CRC is checked in the message framer, thus a constructed message + * means it passed the CRC */ + mCRC = new CRC[ 1 ]; + mCRC[ 0 ] = CRC.PASSED; } } diff --git a/src/decode/p25/message/tsbk/motorola/MotorolaTSBKMessage.java b/src/decode/p25/message/tsbk/motorola/MotorolaTSBKMessage.java index d73b6394..48e582e3 100644 --- a/src/decode/p25/message/tsbk/motorola/MotorolaTSBKMessage.java +++ b/src/decode/p25/message/tsbk/motorola/MotorolaTSBKMessage.java @@ -17,7 +17,7 @@ public class MotorolaTSBKMessage extends TSBKMessage { StringBuilder sb = new StringBuilder(); - sb.append( "SYS:" ); + sb.append( "NAC:" ); sb.append( getNAC() ); /* NAC is the system id for TSBK messages */ sb.append( " " ); sb.append( getDUID().getLabel() ); diff --git a/src/dsp/fsk/P25MessageFramer.java b/src/dsp/fsk/P25MessageFramer.java index cc294bbc..b76b6124 100644 --- a/src/dsp/fsk/P25MessageFramer.java +++ b/src/dsp/fsk/P25MessageFramer.java @@ -37,6 +37,7 @@ public class P25MessageFramer implements Listener public static final int TSBK_DECODED_END = 160; public static final int PDU0_BEGIN = 64; + public static final int PDU0_CRC_BEGIN = 144; public static final int PDU0_END = 260; public static final int PDU1_BEGIN = 160; public static final int PDU1_END = 356; @@ -262,9 +263,19 @@ public class P25MessageFramer implements Listener * unsuccessful decode due to excessive errors */ if( mHalfRate.decode( mMessage, PDU0_BEGIN, PDU0_END ) ) { - setDUID( DataUnitID.PDU1 ); + CRC pduCRC = CRCP25.correctCCITT80( mMessage, + PDU0_BEGIN, PDU0_CRC_BEGIN ); - mMessage.setPointer( PDU1_BEGIN ); + if( pduCRC != CRC.FAILED_CRC ) + { + setDUID( DataUnitID.PDU1 ); + + mMessage.setPointer( PDU1_BEGIN ); + } + else + { + mComplete = true; + } } else {