aboutsummaryrefslogtreecommitdiff
path: root/src/org
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-04-27 11:13:42 +1200
committerAnton Tananaev <anton.tananaev@gmail.com>2015-04-27 11:13:42 +1200
commit8e24c10cdc42fdece70d420b206bb6062edb589c (patch)
tree70a400433fad85a15751800ef8ec2300c46324e8 /src/org
parent6919dc98ea4d546aea56e815c22fecc3a6c164c8 (diff)
downloadtrackermap-server-8e24c10cdc42fdece70d420b206bb6062edb589c.tar.gz
trackermap-server-8e24c10cdc42fdece70d420b206bb6062edb589c.tar.bz2
trackermap-server-8e24c10cdc42fdece70d420b206bb6062edb589c.zip
Decode Tytan extra data
Diffstat (limited to 'src/org')
-rw-r--r--src/org/traccar/protocol/TytanProtocolDecoder.java124
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);