From a9ac26b4f81348f58067083c241c587083cdfcb6 Mon Sep 17 00:00:00 2001 From: "dennis.sheirer" Date: Sun, 11 Jan 2015 19:03:51 +0000 Subject: [PATCH] Added speed parsing to GPS message. Updated message b to become the ANI message. --- src/decode/p25/P25Interleave.java | 8 ++-- ...ALMessage.java => Tait1200ANIMessage.java} | 10 ++-- ....java => Tait1200ANIMessageProcessor.java} | 8 ++-- src/decode/tait/Tait1200Decoder.java | 4 +- src/decode/tait/Tait1200GPSMessage.java | 46 ++++++++++++++++--- 5 files changed, 54 insertions(+), 22 deletions(-) rename src/decode/tait/{Tait1200SELCALMessage.java => Tait1200ANIMessage.java} (97%) rename src/decode/tait/{Tait1200SELCALLMessageProcessor.java => Tait1200ANIMessageProcessor.java} (85%) diff --git a/src/decode/p25/P25Interleave.java b/src/decode/p25/P25Interleave.java index 5190ddbe..07968594 100644 --- a/src/decode/p25/P25Interleave.java +++ b/src/decode/p25/P25Interleave.java @@ -144,7 +144,7 @@ public class P25Interleave int start = 0; int end = 196; - String interleaved = "1000100100100011001000100010110010001000100010010000100010011100100101001000001000100010001011000110010001111011110010001000100010001000100010000011011100101011001000101000100010001000100010110101"; + String interleaved = "0010110111100011001010101100001000011110101110000110001000010010111100101101100100100101011101100011000101110010111100101110111100100111101010111011011001010111001011100001011100101000000010100100"; BitSetBuffer b = new BitSetBuffer( end ); @@ -163,8 +163,8 @@ public class P25Interleave mLog.debug( "Deinterleav:" + b.toString() ); - halfrate.decode( b, start, end ); - - mLog.debug( "Trellis Off:" + b.toString() ); +// halfrate.decode( b, start, end ); +// +// mLog.debug( "Trellis Off:" + b.toString() ); } } diff --git a/src/decode/tait/Tait1200SELCALMessage.java b/src/decode/tait/Tait1200ANIMessage.java similarity index 97% rename from src/decode/tait/Tait1200SELCALMessage.java rename to src/decode/tait/Tait1200ANIMessage.java index 4a902f8a..e4264819 100644 --- a/src/decode/tait/Tait1200SELCALMessage.java +++ b/src/decode/tait/Tait1200ANIMessage.java @@ -30,9 +30,9 @@ import alias.AliasList; import bits.BitSetBuffer; import edac.CRC; -public class Tait1200SELCALMessage extends Message +public class Tait1200ANIMessage extends Message { - private final static Logger mLog = LoggerFactory.getLogger( Tait1200SELCALMessage.class ); + private final static Logger mLog = LoggerFactory.getLogger( Tait1200ANIMessage.class ); public static int[] REVS_1 = { 0,1,2,3 }; public static int[] SYNC = { 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 }; @@ -70,7 +70,7 @@ public class Tait1200SELCALMessage extends Message private AliasList mAliasList; private CRC mCRC; - public Tait1200SELCALMessage( BitSetBuffer message, AliasList list ) + public Tait1200ANIMessage( BitSetBuffer message, AliasList list ) { mMessage = message; mAliasList = list; @@ -170,7 +170,7 @@ public class Tait1200SELCALMessage extends Message { StringBuilder sb = new StringBuilder(); - sb.append( "SELCAL FROM:" ); + sb.append( "ANI FROM:" ); sb.append( getFromID() ); sb.append( " TO:" ); sb.append( getToID() ); @@ -229,7 +229,7 @@ public class Tait1200SELCALMessage extends Message @Override public String getEventType() { - return "SELCAL"; + return "ANI"; } @Override diff --git a/src/decode/tait/Tait1200SELCALLMessageProcessor.java b/src/decode/tait/Tait1200ANIMessageProcessor.java similarity index 85% rename from src/decode/tait/Tait1200SELCALLMessageProcessor.java rename to src/decode/tait/Tait1200ANIMessageProcessor.java index 81d52877..531938be 100644 --- a/src/decode/tait/Tait1200SELCALLMessageProcessor.java +++ b/src/decode/tait/Tait1200ANIMessageProcessor.java @@ -27,16 +27,16 @@ import sample.Listener; import alias.AliasList; import bits.BitSetBuffer; -public class Tait1200SELCALLMessageProcessor implements Listener +public class Tait1200ANIMessageProcessor implements Listener { private final static Logger mLog = - LoggerFactory.getLogger( Tait1200SELCALLMessageProcessor.class ); + LoggerFactory.getLogger( Tait1200ANIMessageProcessor.class ); private Broadcaster mBroadcaster = new Broadcaster(); private AliasList mAliasList; - public Tait1200SELCALLMessageProcessor( AliasList list ) + public Tait1200ANIMessageProcessor( AliasList list ) { mAliasList = list; } @@ -49,7 +49,7 @@ public class Tait1200SELCALLMessageProcessor implements Listener @Override public void receive( BitSetBuffer buffer ) { - mBroadcaster.receive( new Tait1200SELCALMessage( buffer, mAliasList ) ); + mBroadcaster.receive( new Tait1200ANIMessage( buffer, mAliasList ) ); } public void addMessageListener( Listener listener ) diff --git a/src/decode/tait/Tait1200Decoder.java b/src/decode/tait/Tait1200Decoder.java index 39a459f2..22dd87b1 100644 --- a/src/decode/tait/Tait1200Decoder.java +++ b/src/decode/tait/Tait1200Decoder.java @@ -70,7 +70,7 @@ public class Tait1200Decoder extends Decoder implements Instrumentable private MessageFramer mMessageFramerSELCALL; private Broadcaster mFSKBroadcaster = new Broadcaster(); private Tait1200GPSMessageProcessor mMessageAProcessor; - private Tait1200SELCALLMessageProcessor mMessageBProcessor; + private Tait1200ANIMessageProcessor mMessageBProcessor; public Tait1200Decoder( AliasList aliasList ) { @@ -100,7 +100,7 @@ public class Tait1200Decoder extends Decoder implements Instrumentable mFSKBroadcaster.addListener( mMessageFramerSELCALL ); mMessageAProcessor = new Tait1200GPSMessageProcessor( aliasList ); - mMessageBProcessor = new Tait1200SELCALLMessageProcessor( aliasList ); + mMessageBProcessor = new Tait1200ANIMessageProcessor( aliasList ); mMessageFramerGPS.addMessageListener( mMessageAProcessor ); mMessageFramerSELCALL.addMessageListener( mMessageBProcessor ); diff --git a/src/decode/tait/Tait1200GPSMessage.java b/src/decode/tait/Tait1200GPSMessage.java index 56527326..1aa5f56e 100644 --- a/src/decode/tait/Tait1200GPSMessage.java +++ b/src/decode/tait/Tait1200GPSMessage.java @@ -18,7 +18,6 @@ package decode.tait; import java.text.SimpleDateFormat; -import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -101,11 +100,16 @@ public class Tait1200GPSMessage extends Message public static int[] LONGITUDE_SECONDS_TENS = { 372,373,374,375 }; public static int[] LONGITUDE_SECONDS_ONES = { 376,377,378,379 }; public static int DIVIDER_10 = 380; - public static int[] UNKNOWN_2 = { 381,382 }; - public static int[] DATE_DAY = { 383,384,385,386,387 }; + public static int[] DATE_DAY_TENS = { 381,382,383 }; + public static int[] DATE_DAY_ONES = { 384,385,386,387 }; + + //TODO: not sure if this field is the month field or the speed field public static int[] DATE_MONTH = { 388,389,390,391 }; - public static int[] HEADING = { 392,393,394,395,396,397,398,399,400 }; - public static int[] SPEED = { 401,402,403,404,405,406,407,408,409 }; + public static int[] SPEED_HUNDREDS = { 388,389,390,391 }; + + public static int[] SPEED_TENS = { 392,393,394,395 }; + public static int[] SPEED_ONES = { 396,397,398,399 }; + public static int[] SPEED_TENTHS = { 400,401,402,403 }; private static SimpleDateFormat mSDF = new SimpleDateFormat( "yyyyMMdd HHmmss" ); @@ -154,6 +158,10 @@ public class Tait1200GPSMessage extends Message sb.append( " " ); sb.append( location.getLongitude() ); + sb.append( " SPEED:" ); + sb.append( getSpeed() ); + sb.append( "KPH" ); + sb.append( " GPS TIME:" ); sb.append( mSDF.format( new Date( getGPSTime() ) ) ); @@ -204,9 +212,14 @@ public class Tait1200GPSMessage extends Message /* Use current time to get current year */ cal.setTimeInMillis( System.currentTimeMillis() ); - + + //TODO: this field is either the month field, or the speed hundredths field cal.set( Calendar.MONTH, mMessage.getInt( DATE_MONTH ) ); - cal.set( Calendar.DAY_OF_MONTH, mMessage.getInt( DATE_DAY ) ); + + int day = mMessage.getInt( DATE_DAY_TENS ) * 10 + + mMessage.getInt( DATE_DAY_ONES ); + cal.set( Calendar.DAY_OF_MONTH, day ); + cal.set( Calendar.HOUR_OF_DAY, ( mMessage.getInt( HOUR_TENS ) * 10 ) + mMessage.getInt( HOUR_ONES ) ); cal.set( Calendar.MINUTE, ( mMessage.getInt( MINUTES_TENS ) * 10 ) + @@ -218,6 +231,25 @@ public class Tait1200GPSMessage extends Message return cal.getTimeInMillis(); } + public String getSpeed() + { + StringBuilder sb = new StringBuilder(); + + sb.append( getDigit( SPEED_HUNDREDS ) ); + sb.append( getDigit( SPEED_TENS ) ); + sb.append( getDigit( SPEED_ONES ) ); + sb.append( "." ); + sb.append( getDigit( SPEED_TENTHS ) ); + + return sb.toString(); + } + + private String getDigit( int[] field ) + { + int value = mMessage.getInt( field ); + return ( 0 <= value && value <= 9 ) ? String.valueOf( value ) : "?"; + } + @Override public String getFromID() {