mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
Adds CRC checksum validation to LJ1200 messages (using Eric Cottrell's CRC polynomial)
This commit is contained in:
@@ -18,18 +18,23 @@
|
||||
package decode.lj1200;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.BitSet;
|
||||
|
||||
import map.Plottable;
|
||||
import message.Message;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import alias.Alias;
|
||||
import alias.AliasList;
|
||||
import bits.BitSetBuffer;
|
||||
import crc.CRC;
|
||||
import crc.CRCFleetsync;
|
||||
import crc.CRCLJ;
|
||||
|
||||
public class LJ1200Message extends Message
|
||||
{
|
||||
private final static Logger mLog = LoggerFactory.getLogger( LJ1200Message.class );
|
||||
|
||||
public static int[] SYNC = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
|
||||
|
||||
public static int[] VRC = { 23,22,21,20,19,18,17,16 };
|
||||
@@ -41,7 +46,7 @@ public class LJ1200Message extends Message
|
||||
public static int[] ADDRESS = { 63,62,61,60,59,58,57,56,55,54,53,52,51,50,
|
||||
49,48,47,46,45,44,43,42,41,40,39,38,37,36 };
|
||||
|
||||
public static int[] CRC = { 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 };
|
||||
public static int[] MESSAGE_CRC = { 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 };
|
||||
|
||||
private static SimpleDateFormat mSDF = new SimpleDateFormat( "yyyyMMdd HHmmss" );
|
||||
|
||||
@@ -51,42 +56,33 @@ public class LJ1200Message extends Message
|
||||
|
||||
public LJ1200Message( BitSetBuffer message, AliasList list )
|
||||
{
|
||||
mMessage = message;
|
||||
mMessage = message;
|
||||
mAliasList = list;
|
||||
checkParity();
|
||||
|
||||
checkCRC();
|
||||
|
||||
switch( mCRC )
|
||||
{
|
||||
case CORRECTED:
|
||||
mLog.debug( "CORR:" + message.toString() );
|
||||
break;
|
||||
case FAILED_CRC:
|
||||
mLog.debug( "FAIL:" + message.toString() );
|
||||
break;
|
||||
case PASSED:
|
||||
mLog.debug( "PASS:" + message.toString() );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void checkParity()
|
||||
private void checkCRC()
|
||||
{
|
||||
mCRC = detectAndCorrect( 16, 79 );
|
||||
}
|
||||
|
||||
private CRC detectAndCorrect( int start, int end )
|
||||
{
|
||||
BitSet original = mMessage.get( start, end );
|
||||
|
||||
CRC crc = CRCFleetsync.check( original );
|
||||
|
||||
if( crc == crc.FAILED_PARITY )
|
||||
{
|
||||
int[] errorBitPositions = CRCFleetsync.findBitErrors( original );
|
||||
|
||||
if( errorBitPositions != null )
|
||||
{
|
||||
for( int errorBitPosition: errorBitPositions )
|
||||
{
|
||||
mMessage.flip( start + errorBitPosition );
|
||||
}
|
||||
|
||||
crc = crc.CORRECTED;
|
||||
}
|
||||
}
|
||||
|
||||
return crc;
|
||||
mCRC = CRCLJ.checkAndCorrect( mMessage );
|
||||
}
|
||||
|
||||
public boolean isValid()
|
||||
{
|
||||
// return mCRC == CRC.PASSED || mCRC == CRC.CORRECTED;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -102,7 +98,7 @@ public class LJ1200Message extends Message
|
||||
|
||||
public String getCRC()
|
||||
{
|
||||
return mMessage.getHex( CRC, 4 );
|
||||
return mMessage.getHex( MESSAGE_CRC, 4 );
|
||||
}
|
||||
|
||||
public String getFunction()
|
||||
@@ -217,7 +213,7 @@ public class LJ1200Message extends Message
|
||||
@Override
|
||||
public String getErrorStatus()
|
||||
{
|
||||
return "UNKNOWN";
|
||||
return mCRC.getDisplayText();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user