From 19d7c0dd692145fa11dee3fa07099c80052e1be4 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 12 Jun 2016 15:00:08 +1200 Subject: Support J1708 decoding for Ulbotech --- .../traccar/protocol/UlbotechProtocolDecoder.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/UlbotechProtocolDecoder.java b/src/org/traccar/protocol/UlbotechProtocolDecoder.java index 9cbaadfb4..2fd7d8f74 100644 --- a/src/org/traccar/protocol/UlbotechProtocolDecoder.java +++ b/src/org/traccar/protocol/UlbotechProtocolDecoder.java @@ -65,6 +65,25 @@ public class UlbotechProtocolDecoder extends BaseProtocolDecoder { } } + private void decodeJ1708(Position position, ChannelBuffer buf, short length) { + + int end = buf.readerIndex() + length; + + while (buf.readerIndex() < end) { + int mark = buf.readUnsignedByte(); + int len = BitUtil.between(mark, 0, 6); + int type = BitUtil.between(mark, 6, 8); + int id = buf.readUnsignedByte(); + if (type == 3) { + id += 256; + } + String value = ChannelBuffers.hexDump(buf.readBytes(len - 1)); + if (type == 2 || type == 3) { + position.set("pid" + id, value); + } + } + } + private void decodeDriverBehavior(Position position, ChannelBuffer buf) { int value = buf.readUnsignedByte(); @@ -200,7 +219,7 @@ public class UlbotechProtocolDecoder extends BaseProtocolDecoder { break; case DATA_J1708: - position.set("j1708", ChannelBuffers.hexDump(buf.readBytes(length))); + decodeJ1708(position, buf, length); break; case DATA_VIN: -- cgit v1.2.3