diff options
-rw-r--r-- | src/org/traccar/model/Event.java | 1 | ||||
-rw-r--r-- | src/org/traccar/protocol/H02ProtocolDecoder.java | 19 | ||||
-rw-r--r-- | test/org/traccar/protocol/H02ProtocolDecoderTest.java | 3 |
3 files changed, 17 insertions, 6 deletions
diff --git a/src/org/traccar/model/Event.java b/src/org/traccar/model/Event.java index 831ae31b3..40ea38e26 100644 --- a/src/org/traccar/model/Event.java +++ b/src/org/traccar/model/Event.java @@ -79,6 +79,7 @@ public abstract class Event { public static final String KEY_IP = "ip"; public static final String KEY_ARCHIVE = "archive"; public static final String KEY_DISTANCE = "distance"; + public static final String KEY_DOOR = "door"; // Starts with 1 not 0 public static final String PREFIX_TEMP = "temp"; diff --git a/src/org/traccar/protocol/H02ProtocolDecoder.java b/src/org/traccar/protocol/H02ProtocolDecoder.java index 9b58af854..666d868f7 100644 --- a/src/org/traccar/protocol/H02ProtocolDecoder.java +++ b/src/org/traccar/protocol/H02ProtocolDecoder.java @@ -27,6 +27,7 @@ import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; +import org.traccar.helper.BitUtil; import org.traccar.helper.ChannelBufferTools; import org.traccar.model.Event; import org.traccar.model.Position; @@ -55,6 +56,14 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { return result; } + + private void processStatus(Position position, long status) { + if (!BitUtil.check(status, 0) || !BitUtil.check(status, 1) || !BitUtil.check(status, 3) || !BitUtil.check(status, 4)) { + position.set(Event.KEY_ALARM, true); + } + position.set(Event.KEY_IGNITION, !BitUtil.check(status, 10)); + position.set(Event.KEY_STATUS, status); + } private Position decodeBinary(ChannelBuffer buf, Channel channel) { @@ -95,9 +104,8 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { // Speed and course position.setSpeed(ChannelBufferTools.readHexInteger(buf, 3)); position.setCourse((buf.readUnsignedByte() & 0x0f) * 100.0 + ChannelBufferTools.readHexInteger(buf, 2)); - - // Status - position.set(Event.KEY_STATUS, ChannelBufferTools.readHexString(buf, 8)); + + processStatus(position, buf.readUnsignedInt()); return position; } @@ -174,9 +182,8 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { time.set(Calendar.MONTH, Integer.valueOf(parser.group(index++)) - 1); time.set(Calendar.YEAR, 2000 + Integer.valueOf(parser.group(index++))); position.setTime(time.getTime()); - - // Status - position.set(Event.KEY_STATUS, parser.group(index++)); + + processStatus(position, Long.parseLong(parser.group(index++), 16)); return position; } diff --git a/test/org/traccar/protocol/H02ProtocolDecoderTest.java b/test/org/traccar/protocol/H02ProtocolDecoderTest.java index b7d356ff0..5be78d643 100644 --- a/test/org/traccar/protocol/H02ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/H02ProtocolDecoderTest.java @@ -82,6 +82,9 @@ public class H02ProtocolDecoderTest extends ProtocolDecoderTest { "*HQ,8401016597,BASE,152609,0,0,0,0,211014,FFFFFFFF#", Charset.defaultCharset()))); verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertHexString( + "24410600082621532131081504419390060740418306000000fffffbfdff0015060000002c02dc0c000000001f")))); + + verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertHexString( "2427051711092133391406135002584900014337822e000000ffffffffff0000")))); verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertHexString( |