aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java26
-rw-r--r--src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java20
2 files changed, 43 insertions, 3 deletions
diff --git a/src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java
index b1564abd9..f60f6213d 100644
--- a/src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java
@@ -142,6 +142,32 @@ public class Vt200ProtocolDecoder extends BaseProtocolDecoder {
return position;
+ } else if (type == 0x3089) {
+
+ Position position = new Position(getProtocolName());
+ position.setDeviceId(deviceSession.getDeviceId());
+
+ position.set(Position.KEY_IGNITION, buf.readUnsignedByte() == 1);
+ buf.readUnsignedShort(); // trip id
+
+ position.setTime(decodeDate(buf));
+
+ if (buf.readableBytes() >= 9) {
+ position.setLatitude(decodeCoordinate(BcdUtil.readInteger(buf, 8)));
+ position.setLongitude(decodeCoordinate(BcdUtil.readInteger(buf, 9)));
+
+ int flags = buf.readUnsignedByte();
+ position.setValid(BitUtil.check(flags, 0));
+ if (!BitUtil.check(flags, 1)) {
+ position.setLatitude(-position.getLatitude());
+ }
+ if (!BitUtil.check(flags, 2)) {
+ position.setLongitude(-position.getLongitude());
+ }
+ }
+
+ return position;
+
}
return null;
diff --git a/src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java b/src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java
index 9c224bc8e..47e5cb331 100644
--- a/src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java
+++ b/src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java
@@ -2,6 +2,7 @@ package org.traccar.protocol;
import org.junit.Test;
import org.traccar.ProtocolTest;
+import org.traccar.model.Position;
public class Vt200ProtocolDecoderTest extends ProtocolTest {
@@ -43,9 +44,6 @@ public class Vt200ProtocolDecoderTest extends ProtocolTest {
verifyPosition(decoder, binary(
"28631037309456208200210103302307171805444417097301147188170198090f0000073a002000007e00074429"));
- verifyNull(decoder, binary(
- "286310373094563089001200032f2107171740144417075001147188872c29"));
-
verifyAttributes(decoder, binary(
"2863103730945630880062032f862631037309456f222014604362936f21071717373221071717401400a100000cd700000004020d3c8e0000000000000000000000000000000000000000000000000000000000000000000a000000040000000e009700000cc9000000000000e929"));
@@ -55,6 +53,22 @@ public class Vt200ProtocolDecoderTest extends ProtocolTest {
verifyPosition(decoder, binary(
"28631037309456208400340102dc090617161654441577230114439597368c0a0c0000030500200100417c1baa349d3290510000006a00007000003d15004c11c629"));
+ verifyPosition(decoder, binary(
+ "2830140414000130890009010003280414090004df29"),
+ position("2014-04-28 09:00:04.000", false, 0.0, 0.0));
+
+ verifyPosition(decoder, binary(
+ "2830140414000130890012000003280414090004224388161134912397df29"),
+ position("2014-04-28 09:00:04.000", true, 22.73136, 113.81873166666666));
+
+ verifyAttribute(decoder, binary(
+ "2830140414000130890012000003280414090004224388161134912397df29"),
+ Position.KEY_IGNITION, false);
+
+ verifyAttribute(decoder, binary(
+ "2830140414000130890012010003280414090004224388161134912397df29"),
+ Position.KEY_IGNITION, true);
+
}
}