From 98162399456d9386797f7b2cce48e4d93299ad82 Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Thu, 29 Oct 2015 00:19:36 +0300 Subject: For #1484 - updated GlobalSat alternative decoder to support EusPro SF-400 device, fixed validity detection which was broken during refactoring --- src/org/traccar/protocol/GlobalSatProtocolDecoder.java | 11 ++++++----- test/org/traccar/protocol/GlobalSatProtocolDecoderTest.java | 10 ++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/org/traccar/protocol/GlobalSatProtocolDecoder.java b/src/org/traccar/protocol/GlobalSatProtocolDecoder.java index 049bb2f7f..918f17348 100644 --- a/src/org/traccar/protocol/GlobalSatProtocolDecoder.java +++ b/src/org/traccar/protocol/GlobalSatProtocolDecoder.java @@ -180,7 +180,7 @@ public class GlobalSatProtocolDecoder extends BaseProtocolDecoder { .text("$") .number("(d+),") // imei .number("d+,") // mode - .number("(d),") // fix + .number("(d+),") // fix .number("(dd)(dd)(dd),") // date (ddmmyy) .number("(dd)(dd)(dd),") // time (hhmmss) .expression("([EW])") @@ -189,8 +189,8 @@ public class GlobalSatProtocolDecoder extends BaseProtocolDecoder { .number("(dd)(dd.d+),") // latitude (ddmm.mmmm) .number("(d+.?d*),") // altitude .number("(d+.?d*),") // speed - .number("(d+.?d*),") // course - .number("(d+),") // satellites + .number("(d*.?d*),") // course + .number("(d+)[,\\\\*]") // satellites .number("(d+.?d*)") // hdop .compile(); @@ -209,7 +209,7 @@ public class GlobalSatProtocolDecoder extends BaseProtocolDecoder { } position.setDeviceId(getDeviceId()); - position.setValid(parser.next().equals("1")); + position.setValid(!parser.next().equals("1")); DateBuilder dateBuilder = new DateBuilder() .setDateReverse(parser.nextInt(), parser.nextInt(), parser.nextInt()) @@ -220,7 +220,8 @@ public class GlobalSatProtocolDecoder extends BaseProtocolDecoder { position.setLatitude(parser.nextCoordinate(Parser.CoordinateFormat.HEM_DEG_MIN)); position.setAltitude(parser.nextDouble()); position.setSpeed(parser.nextDouble()); - position.setCourse(parser.nextDouble()); + String course = parser.next(); + position.setCourse(course.isEmpty() ? 0d : Double.parseDouble(course)); position.set(Event.KEY_SATELLITES, parser.nextInt()); position.set(Event.KEY_HDOP, parser.next()); diff --git a/test/org/traccar/protocol/GlobalSatProtocolDecoderTest.java b/test/org/traccar/protocol/GlobalSatProtocolDecoderTest.java index 97b9f4aaa..d286b0b2f 100644 --- a/test/org/traccar/protocol/GlobalSatProtocolDecoderTest.java +++ b/test/org/traccar/protocol/GlobalSatProtocolDecoderTest.java @@ -2,6 +2,9 @@ package org.traccar.protocol; import org.junit.Test; import org.traccar.ProtocolDecoderTest; +import org.traccar.helper.PatternBuilder; + +import java.util.regex.Pattern; public class GlobalSatProtocolDecoderTest extends ProtocolDecoderTest { @@ -46,6 +49,13 @@ public class GlobalSatProtocolDecoderTest extends ProtocolDecoderTest { verifyPosition(decoder, text( "GSr,GTR-128,013227006963064,0080,1,a080,3,190615,163816,W07407.7134,N0440.8601,2579,0.01,130,12,0.7,11540mV,0,77,14,\"732,123,0744,2fc1,41,23\",\"732,123,0744,2dfe,05,28\",\"732,123,0744,272a,15,21\",\"732,123,0744,2f02,27,23\"*3b!")); + verifyPosition(decoder, text( + "$80050377796567,0,13,281015,173437,E08513.28616,N5232.85432,222.3,0.526,,07*37" + ), position("2015-10-28 17:34:37.000", true, 52.54757, 85.22144)); + + verifyPosition(decoder, text( + "$80050377796567,0,18,281015,191919,E08513.93290,N5232.42141,193.4,37.647,305.40,07*37" + ), position("2015-10-28 19:19:19.000", true, 52.54036, 85.23222)); } } -- cgit v1.2.3