aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/protocol/XirgoProtocolDecoder.java38
-rw-r--r--test/org/traccar/protocol/XirgoProtocolDecoderTest.java30
2 files changed, 43 insertions, 25 deletions
diff --git a/src/org/traccar/protocol/XirgoProtocolDecoder.java b/src/org/traccar/protocol/XirgoProtocolDecoder.java
index 830caf6d9..edab1af11 100644
--- a/src/org/traccar/protocol/XirgoProtocolDecoder.java
+++ b/src/org/traccar/protocol/XirgoProtocolDecoder.java
@@ -25,7 +25,6 @@ import org.traccar.helper.UnitsConverter;
import org.traccar.model.Position;
import java.net.SocketAddress;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class XirgoProtocolDecoder extends BaseProtocolDecoder {
@@ -34,9 +33,7 @@ public class XirgoProtocolDecoder extends BaseProtocolDecoder {
super(protocol);
}
- private boolean newFormat;
-
- private static final Pattern FIRMWARE = Pattern.compile("\\w{4}-([0-9A-F]{7})");
+ private Boolean newFormat;
private static final Pattern PATTERN_OLD = new PatternBuilder()
.text("$$")
@@ -88,23 +85,28 @@ public class XirgoProtocolDecoder extends BaseProtocolDecoder {
String sentence = (String) msg;
- Matcher matcher = FIRMWARE.matcher(sentence);
- if (matcher.find()) {
- String type = matcher.group(1);
- if (type.equals("1137CD1") || type.equals("1137CC1") || type.equals("1137CA3")) {
- newFormat = true;
- }
- }
-
Parser parser;
- if (newFormat) {
+ if (newFormat == null) {
parser = new Parser(PATTERN_NEW, sentence);
+ if (parser.matches()) {
+ newFormat = true;
+ } else {
+ parser = new Parser(PATTERN_OLD, sentence);
+ if (parser.matches()) {
+ newFormat = false;
+ } else {
+ return null;
+ }
+ }
} else {
- parser = new Parser(PATTERN_OLD, sentence);
- }
-
- if (!parser.matches()) {
- return null;
+ if (newFormat) {
+ parser = new Parser(PATTERN_NEW, sentence);
+ } else {
+ parser = new Parser(PATTERN_OLD, sentence);
+ }
+ if (!parser.matches()) {
+ return null;
+ }
}
Position position = new Position();
diff --git a/test/org/traccar/protocol/XirgoProtocolDecoderTest.java b/test/org/traccar/protocol/XirgoProtocolDecoderTest.java
index 0d7087a93..82076d7eb 100644
--- a/test/org/traccar/protocol/XirgoProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/XirgoProtocolDecoderTest.java
@@ -6,24 +6,20 @@ import org.traccar.ProtocolTest;
public class XirgoProtocolDecoderTest extends ProtocolTest {
@Test
- public void testDecode() throws Exception {
+ public void testDecodeNew() throws Exception {
XirgoProtocolDecoder decoder = new XirgoProtocolDecoder(new XirgoProtocol());
verifyPosition(decoder, text(
- "$$354660046140722,6001,2013/01/22,15:36:18,25.80907,-80.32531,7.1,19,165.2,11,0.8,11.1,17,1,1,3.9,2##"),
- position("2013-01-22 15:36:18.000", true, 25.80907, -80.32531));
+ "$$355922061611345,6001,2016/08/25,20:10:51,51.13042,-114.22752,1197,44.7,0.0,0.0,2622,27,12,0.8,1,0.0,13.9,24,1,0,0.0,-70,-809,688##"));
verifyPosition(decoder, text(
- "$$357207059646786,4003,2015/05/19,15:54:56,-20.21422,-70.14927,37.5,1.8,0.0,11,0.8,12.9,31,297,1,0,0.0,0.0,0,1,1,1##"));
+ "$$355922061611345,6001,2016/08/25,20:10:38,51.12948,-114.22637,1203,34.8,0.0,0.0,1377,215,12,0.8,1,0.0,13.8,28,1,0,0.0,-309,-566,754##"));
verifyPosition(decoder, text(
"$$354898045650537,6031,2015/02/26,15:47:26,33.42552,-112.30308,287.8,0,0,0,0,0.0,7,1.2,2,0.0,12.2,22,1,0,82.3"));
verifyPosition(decoder, text(
- "$$357207059646786,4003,2015/05/19,15:55:27,-20.21421,-70.14920,33.6,0.4,0.0,11,0.8,12.9,31,297,1,0,0.0,0.0,0,1,1,1##"));
-
- verifyPosition(decoder, text(
"$$355922060162167,6015,2016/04/21,17:26:52,39.83267,-76.66139,230,0.0,0.0,0.0,779,0,8,1.2,0,0.0,13.0,19,1,1C4BJWDG4GL191009,X0z1-1137CD1,0402,3GATT,0,83.9,-70,-715,738##"));
verifyPosition(decoder, text(
@@ -31,4 +27,24 @@ public class XirgoProtocolDecoderTest extends ProtocolTest {
}
+ @Test
+ public void testDecodeOld() throws Exception {
+
+ XirgoProtocolDecoder decoder = new XirgoProtocolDecoder(new XirgoProtocol());
+
+ verifyPosition(decoder, text(
+ "$$354660046140722,6001,2013/01/22,15:36:18,25.80907,-80.32531,7.1,19,165.2,11,0.8,11.1,17,1,1,3.9,2##"),
+ position("2013-01-22 15:36:18.000", true, 25.80907, -80.32531));
+
+ verifyPosition(decoder, text(
+ "$$357207059646786,4003,2015/05/19,15:54:56,-20.21422,-70.14927,37.5,1.8,0.0,11,0.8,12.9,31,297,1,0,0.0,0.0,0,1,1,1##"));
+
+ verifyPosition(decoder, text(
+ "$$354898045650537,6031,2015/02/26,15:47:26,33.42552,-112.30308,287.8,0,0,0,0,0.0,7,1.2,2,0.0,12.2,22,1,0,82.3"));
+
+ verifyPosition(decoder, text(
+ "$$357207059646786,4003,2015/05/19,15:55:27,-20.21421,-70.14920,33.6,0.4,0.0,11,0.8,12.9,31,297,1,0,0.0,0.0,0,1,1,1##"));
+
+ }
+
}