aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-10-31 18:49:49 +1300
committerAnton Tananaev <anton.tananaev@gmail.com>2015-10-31 18:49:49 +1300
commita76e8d71083ef44384b541d33bab92eb096902d2 (patch)
tree98008bd95fc2394bd9c498acc7d9b4097a8eeae9 /src
parent1c488e9f1896d8f4ced142cb303169e45cbd27fb (diff)
downloadtrackermap-server-a76e8d71083ef44384b541d33bab92eb096902d2.tar.gz
trackermap-server-a76e8d71083ef44384b541d33bab92eb096902d2.tar.bz2
trackermap-server-a76e8d71083ef44384b541d33bab92eb096902d2.zip
Support Castel heartbeat messages
Diffstat (limited to 'src')
-rw-r--r--src/org/traccar/protocol/CastelProtocolDecoder.java32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/org/traccar/protocol/CastelProtocolDecoder.java b/src/org/traccar/protocol/CastelProtocolDecoder.java
index 7f8009389..09d314dae 100644
--- a/src/org/traccar/protocol/CastelProtocolDecoder.java
+++ b/src/org/traccar/protocol/CastelProtocolDecoder.java
@@ -49,6 +49,8 @@ public class CastelProtocolDecoder extends BaseProtocolDecoder {
private static final short MSG_CC_LOGIN = 0x4001;
private static final short MSG_CC_LOGIN_RESPONSE = (short) 0x8001;
+ private static final short MSG_CC_HEARTBEAT = 0x4206;
+ private static final short MSG_CC_HEARTBEAT_RESPONSE = (short) 0x8206;
private Position readPosition(ChannelBuffer buf) {
@@ -177,7 +179,35 @@ public class CastelProtocolDecoder extends BaseProtocolDecoder {
} else {
- if (type == MSG_CC_LOGIN) {
+ if (type == MSG_CC_HEARTBEAT) {
+
+ sendResponse(channel, remoteAddress, version, id, MSG_CC_HEARTBEAT_RESPONSE, null);
+
+ if (buf.readUnsignedByte() == 0x01) {
+ int count = buf.readUnsignedByte();
+ List<Position> positions = new LinkedList<>();
+
+ for (int i = 0; i < count; i++) {
+ Position position = readPosition(buf);
+
+ position.set(Event.KEY_STATUS, buf.readUnsignedInt());
+ position.set(Event.KEY_BATTERY, buf.readUnsignedByte());
+ position.set(Event.KEY_ODOMETER, buf.readUnsignedInt());
+
+ buf.readUnsignedByte(); // geo-fencing id
+ buf.readUnsignedByte(); // geo-fencing flags
+ buf.readUnsignedByte(); // additional flags
+
+ position.set(Event.KEY_LAC, buf.readUnsignedShort());
+ position.set(Event.KEY_CELL, buf.readUnsignedShort());
+
+ positions.add(position);
+ }
+
+ return positions;
+ }
+
+ } else if (type == MSG_CC_LOGIN) {
sendResponse(channel, remoteAddress, version, id, MSG_CC_LOGIN_RESPONSE, null);