aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/protocol/TzoneProtocolDecoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/protocol/TzoneProtocolDecoder.java')
-rw-r--r--src/org/traccar/protocol/TzoneProtocolDecoder.java82
1 files changed, 41 insertions, 41 deletions
diff --git a/src/org/traccar/protocol/TzoneProtocolDecoder.java b/src/org/traccar/protocol/TzoneProtocolDecoder.java
index ed463c109..1fe32af7a 100644
--- a/src/org/traccar/protocol/TzoneProtocolDecoder.java
+++ b/src/org/traccar/protocol/TzoneProtocolDecoder.java
@@ -46,32 +46,32 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder {
}
buf.readUnsignedShort(); // model
buf.readUnsignedInt(); // firmware
-
+
String imei = ChannelBufferTools.readHexString(buf, 16).substring(1);
if (!identify(imei, channel)) {
return null;
}
-
+
buf.skipBytes(6); // device time
Position position = new Position();
position.setProtocol(getProtocolName());
position.setDeviceId(getDeviceId());
-
+
// GPS info
int blockLength = buf.readUnsignedShort();
int blockEnd = buf.readerIndex() + blockLength;
-
+
if (blockLength == 0) {
return null;
}
-
+
position.set(Event.KEY_SATELLITES, buf.readUnsignedByte());
-
+
double lat = buf.readUnsignedInt() / 600000.0;
double lon = buf.readUnsignedInt() / 600000.0;
-
+
Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
time.clear();
time.set(Calendar.YEAR, 2000 + buf.readUnsignedByte());
@@ -81,40 +81,40 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder {
time.set(Calendar.MINUTE, buf.readUnsignedByte());
time.set(Calendar.SECOND, buf.readUnsignedByte());
position.setTime(time.getTime());
-
+
position.setSpeed(buf.readUnsignedShort() * 0.01);
-
+
position.set(Event.KEY_ODOMETER, buf.readUnsignedMedium());
-
+
int flags = buf.readUnsignedShort();
position.setCourse(BitUtil.range(flags, 0, 9));
position.setLatitude(BitUtil.check(flags, 10) ? lat : -lat);
position.setLongitude(BitUtil.check(flags, 9) ? -lon : lon);
position.setValid(BitUtil.check(flags, 11));
-
+
buf.readerIndex(blockEnd);
-
+
// LBS info
-
+
blockLength = buf.readUnsignedShort();
blockEnd = buf.readerIndex() + blockLength;
-
+
if (blockLength > 0) {
-
+
position.set(Event.KEY_LAC, buf.readUnsignedShort());
position.set(Event.KEY_CELL, buf.readUnsignedShort());
-
+
}
-
+
buf.readerIndex(blockEnd);
-
+
// Status info
-
+
blockLength = buf.readUnsignedShort();
blockEnd = buf.readerIndex() + blockLength;
-
+
if (blockLength > 0) {
-
+
position.set(Event.KEY_ALARM, buf.readUnsignedByte());
buf.readUnsignedByte(); // terminal info
position.set(Event.PREFIX_IO + 1, buf.readUnsignedShort());
@@ -125,26 +125,26 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder {
position.set(Event.PREFIX_ADC + 1, buf.readUnsignedShort());
position.set(Event.PREFIX_ADC + 2, buf.readUnsignedShort());
position.set(Event.PREFIX_TEMP + 1, buf.readUnsignedShort());
-
+
}
-
+
buf.readerIndex(blockEnd);
-
+
// Cards
-
+
int index = 1;
for (int i = 0; i < 4; i++) {
-
+
blockLength = buf.readUnsignedShort();
blockEnd = buf.readerIndex() + blockLength;
-
+
if (blockLength > 0) {
-
+
int count = buf.readUnsignedByte();
for (int j = 0; j < count; j++) {
int length = buf.readUnsignedByte();
-
+
boolean odd = length % 2 != 0;
String num = ChannelBufferTools.readHexString(buf, odd ? length + 1 : length);
@@ -154,34 +154,34 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder {
}
position.set("card" + index, num);
-
+
}
}
-
+
buf.readerIndex(blockEnd);
-
+
}
-
+
// Temperature
-
+
buf.skipBytes(buf.readUnsignedShort());
-
+
// Lock
-
+
buf.skipBytes(buf.readUnsignedShort());
// Passengers
-
+
blockLength = buf.readUnsignedShort();
blockEnd = buf.readerIndex() + blockLength;
-
+
if (blockLength > 0) {
-
+
position.set("passengers-on", buf.readUnsignedMedium());
position.set("passengers-off", buf.readUnsignedMedium());
-
+
}
-
+
buf.readerIndex(blockEnd);
return position;