diff options
-rw-r--r-- | src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java | 26 | ||||
-rw-r--r-- | src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java | 20 |
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); + } } |