diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java | 71 | ||||
-rw-r--r-- | src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java | 3 |
2 files changed, 30 insertions, 44 deletions
diff --git a/src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java index f60f6213d..22fc2cf18 100644 --- a/src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Vt200ProtocolDecoder.java @@ -67,37 +67,46 @@ public class Vt200ProtocolDecoder extends BaseProtocolDecoder { int type = buf.readUnsignedShort(); buf.readUnsignedShort(); // length - if (type == 0x2086 || type == 0x2084 || type == 0x2082) { + if (type == 0x2086 || type == 0x2084 || type == 0x2082 || type == 0x3089) { Position position = new Position(getProtocolName()); position.setDeviceId(deviceSession.getDeviceId()); - buf.readUnsignedByte(); // data type + if (type == 0x3089) { + position.set(Position.KEY_IGNITION, buf.readUnsignedByte() == 1); + } else { + buf.readUnsignedByte(); // data type + } + buf.readUnsignedShort(); // trip id position.setTime(decodeDate(buf)); - position.setLatitude(decodeCoordinate(BcdUtil.readInteger(buf, 8))); - position.setLongitude(decodeCoordinate(BcdUtil.readInteger(buf, 9))); + 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()); + 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()); + } } - position.setSpeed(UnitsConverter.knotsFromKph(buf.readUnsignedByte())); - position.setCourse(buf.readUnsignedByte() * 2); + if (type != 0x3089) { + position.setSpeed(UnitsConverter.knotsFromKph(buf.readUnsignedByte())); + position.setCourse(buf.readUnsignedByte() * 2); - position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); - position.set(Position.KEY_RSSI, buf.readUnsignedByte()); - position.set(Position.KEY_ODOMETER, buf.readUnsignedInt() * 1000); - position.set(Position.KEY_STATUS, buf.readUnsignedInt()); + position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); + position.set(Position.KEY_RSSI, buf.readUnsignedByte()); + position.set(Position.KEY_ODOMETER, buf.readUnsignedInt() * 1000); + position.set(Position.KEY_STATUS, buf.readUnsignedInt()); - // additional data + // additional data + } return position; @@ -142,32 +151,6 @@ 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 47e5cb331..1b492b40a 100644 --- a/src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java +++ b/src/test/java/org/traccar/protocol/Vt200ProtocolDecoderTest.java @@ -44,6 +44,9 @@ public class Vt200ProtocolDecoderTest extends ProtocolTest { verifyPosition(decoder, binary( "28631037309456208200210103302307171805444417097301147188170198090f0000073a002000007e00074429")); + verifyPosition(decoder, binary( + "286310373094563089001200032f2107171740144417075001147188872c29")); + verifyAttributes(decoder, binary( "2863103730945630880062032f862631037309456f222014604362936f21071717373221071717401400a100000cd700000004020d3c8e0000000000000000000000000000000000000000000000000000000000000000000a000000040000000e009700000cc9000000000000e929")); |