diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2015-10-31 18:49:49 +1300 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2015-10-31 18:49:49 +1300 |
commit | a76e8d71083ef44384b541d33bab92eb096902d2 (patch) | |
tree | 98008bd95fc2394bd9c498acc7d9b4097a8eeae9 /src | |
parent | 1c488e9f1896d8f4ced142cb303169e45cbd27fb (diff) | |
download | trackermap-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.java | 32 |
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); |