diff options
Diffstat (limited to 'src/org/traccar')
-rw-r--r-- | src/org/traccar/protocol/TytanProtocolDecoder.java | 124 |
1 files changed, 120 insertions, 4 deletions
diff --git a/src/org/traccar/protocol/TytanProtocolDecoder.java b/src/org/traccar/protocol/TytanProtocolDecoder.java index e0dc7f68e..8df8f6a25 100644 --- a/src/org/traccar/protocol/TytanProtocolDecoder.java +++ b/src/org/traccar/protocol/TytanProtocolDecoder.java @@ -20,15 +20,13 @@ import java.nio.charset.Charset; import java.util.Date; import java.util.LinkedList; import java.util.List; -import java.util.Properties; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; -import org.traccar.database.DataManager; -import org.traccar.helper.Log; +import org.traccar.helper.ChannelBufferTools; import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; @@ -102,7 +100,125 @@ public class TytanProtocolDecoder extends BaseProtocolDecoder { position.setSpeed(speed * 0.539957); } - buf.skipBytes(end - buf.readerIndex()); + while (buf.readerIndex() < end) { + switch (buf.readUnsignedByte()) { + case 2: + extendedInfo.set("milage", buf.readUnsignedMedium()); + break; + case 4: + buf.readUnsignedShort(); // device start + break; + case 5: + extendedInfo.set("input", buf.readUnsignedByte()); + break; + case 6: + buf.readUnsignedShort(); + extendedInfo.set("adc", buf.readFloat()); + break; + case 7: + extendedInfo.set("alarm", buf.readUnsignedShort()); + break; + case 8: + extendedInfo.set("antihijack", buf.readUnsignedByte()); + break; + case 9: + extendedInfo.set("authorized", ChannelBufferTools.readHexString(buf, 16)); + break; + case 10: + extendedInfo.set("unauthorized", ChannelBufferTools.readHexString(buf, 16)); + break; + case 24: + buf.readUnsignedByte(); + extendedInfo.set("temperature", buf.readUnsignedByte()); + break; + case 25: + buf.readUnsignedByte(); + buf.readUnsignedShort(); // fuel + break; + case 26: + buf.skipBytes(buf.readUnsignedByte() * 2); // flowmeter + break; + case 28: + extendedInfo.set("weight", buf.readUnsignedShort()); + buf.readUnsignedByte(); + break; + case 29: + buf.readUnsignedByte(); // diagnostics + break; + case 30: + buf.readUnsignedByte(); // vending machine + buf.readUnsignedInt(); + buf.readUnsignedInt(); + buf.readUnsignedInt(); + break; + case 31: + buf.readUnsignedByte(); // antihijack + break; + case 32: + buf.readUnsignedByte(); // audio + break; + case 33: + buf.readUnsignedByte(); // antihijack and authorization + break; + case 80: + case 81: + case 82: + case 83: + buf.readUnsignedInt(); // diagnostic + break; + case 99: + buf.readUnsignedInt(); // tachograph + break; + case 101: + buf.readUnsignedByte(); // speed + break; + case 102: + buf.readUnsignedByte(); // engine rpm + break; + case 103: + buf.readUnsignedByte(); // engine temperature + break; + case 104: + buf.readUnsignedByte(); // pedal position + break; + case 105: + buf.readUnsignedByte(); // engine load + break; + case 107: + extendedInfo.set("fuel", buf.readUnsignedShort() & 0x3fff); + break; + case 108: + buf.readUnsignedInt(); // total distance + break; + case 109: + buf.readUnsignedByte(); // ambient temperature + break; + case 122: + buf.readUnsignedByte(); // power take-off state + break; + case 127: + buf.readUnsignedInt(); // total fuel used + break; + case 129: + buf.readUnsignedInt(); // engine total hours + break; + case 130: + buf.readUnsignedShort(); // distance to service + break; + case 131: + buf.readUnsignedShort(); // axle weight + buf.readUnsignedShort(); + buf.readUnsignedShort(); + buf.readUnsignedShort(); + break; + case 136: + buf.readUnsignedShort(); // fuel rate + break; + case 150: + extendedInfo.set("door", buf.readUnsignedByte()); + break; + } + } position.setExtendedInfo(extendedInfo.toString()); positions.add(position); |