diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2015-10-25 10:24:29 +1300 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2015-10-25 10:24:29 +1300 |
commit | 8fe177bd27196a3924e4ef8e835ba9dac14975c3 (patch) | |
tree | d8e182e17308f418975dd40cfeeddfc831cb3b60 | |
parent | 5538a83ac7eda6ad5775e582688dd0199e6c538c (diff) | |
download | trackermap-server-8fe177bd27196a3924e4ef8e835ba9dac14975c3.tar.gz trackermap-server-8fe177bd27196a3924e4ef8e835ba9dac14975c3.tar.bz2 trackermap-server-8fe177bd27196a3924e4ef8e835ba9dac14975c3.zip |
Refactor Tzone protocol decoder
-rw-r--r-- | src/org/traccar/protocol/TzoneProtocolDecoder.java | 42 | ||||
-rw-r--r-- | test/org/traccar/ProtocolDecoderTest.java | 2 | ||||
-rw-r--r-- | test/org/traccar/protocol/TzoneProtocolDecoderTest.java | 8 |
3 files changed, 24 insertions, 28 deletions
diff --git a/src/org/traccar/protocol/TzoneProtocolDecoder.java b/src/org/traccar/protocol/TzoneProtocolDecoder.java index 8125f33cb..c76766fb7 100644 --- a/src/org/traccar/protocol/TzoneProtocolDecoder.java +++ b/src/org/traccar/protocol/TzoneProtocolDecoder.java @@ -16,13 +16,12 @@ package org.traccar.protocol; import java.net.SocketAddress; -import java.util.Calendar; -import java.util.TimeZone; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.helper.BitUtil; import org.traccar.helper.ChannelBufferTools; +import org.traccar.helper.DateBuilder; import org.traccar.model.Event; import org.traccar.model.Position; @@ -71,15 +70,10 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder { 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()); - time.set(Calendar.MONTH, buf.readUnsignedByte() - 1); - time.set(Calendar.DAY_OF_MONTH, buf.readUnsignedByte()); - time.set(Calendar.HOUR_OF_DAY, buf.readUnsignedByte()); - time.set(Calendar.MINUTE, buf.readUnsignedByte()); - time.set(Calendar.SECOND, buf.readUnsignedByte()); - position.setTime(time.getTime()); + DateBuilder dateBuilder = new DateBuilder() + .setDate(buf.readUnsignedByte(), buf.readUnsignedByte(), buf.readUnsignedByte()) + .setTime(buf.readUnsignedByte(), buf.readUnsignedByte(), buf.readUnsignedByte()); + position.setTime(dateBuilder.getDate()); position.setSpeed(buf.readUnsignedShort() * 0.01); @@ -87,8 +81,14 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder { int flags = buf.readUnsignedShort(); position.setCourse(BitUtil.to(flags, 9)); - position.setLatitude(BitUtil.check(flags, 10) ? lat : -lat); - position.setLongitude(BitUtil.check(flags, 9) ? -lon : lon); + if (!BitUtil.check(flags, 10)) { + lat = -lat; + } + position.setLatitude(lat); + if (BitUtil.check(flags, 9)) { + lon = -lon; + } + position.setLongitude(lon); position.setValid(BitUtil.check(flags, 11)); buf.readerIndex(blockEnd); @@ -145,29 +145,25 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder { int length = buf.readUnsignedByte(); boolean odd = length % 2 != 0; + if (odd) { + length += 1; + } - String num = ChannelBufferTools.readHexString(buf, odd ? length + 1 : length); + String num = ChannelBufferTools.readHexString(buf, length); if (odd) { num = num.substring(1); } position.set("card" + index, num); - } } buf.readerIndex(blockEnd); - } - // Temperature - - buf.skipBytes(buf.readUnsignedShort()); - - // Lock - - buf.skipBytes(buf.readUnsignedShort()); + buf.skipBytes(buf.readUnsignedShort()); // temperature + buf.skipBytes(buf.readUnsignedShort()); // lock // Passengers diff --git a/test/org/traccar/ProtocolDecoderTest.java b/test/org/traccar/ProtocolDecoderTest.java index 03e8314d6..3eb42a0f6 100644 --- a/test/org/traccar/ProtocolDecoderTest.java +++ b/test/org/traccar/ProtocolDecoderTest.java @@ -143,8 +143,6 @@ public class ProtocolDecoderTest { Assert.assertEquals("latitude", expected.getLatitude(), position.getLatitude(), 0.00001); Assert.assertEquals("longitude", expected.getLongitude(), position.getLongitude(), 0.00001); - verifyDecodedPosition(decodedObject); - } private void verifyDecodedPosition(Object decodedObject) { diff --git a/test/org/traccar/protocol/TzoneProtocolDecoderTest.java b/test/org/traccar/protocol/TzoneProtocolDecoderTest.java index 470e366cb..23a36172b 100644 --- a/test/org/traccar/protocol/TzoneProtocolDecoderTest.java +++ b/test/org/traccar/protocol/TzoneProtocolDecoderTest.java @@ -14,11 +14,13 @@ public class TzoneProtocolDecoderTest extends ProtocolDecoderTest { TzoneProtocolDecoder decoder = new TzoneProtocolDecoder(new TzoneProtocol()); - verifyAttributes(decoder, binary( - "545a00582424010b021e000008637710239476270f080b0a3228001600000000000000000000000000000000000000000000000401a00822001088c00020183701a6053800000000800000000000000000000000000000000077c9860d0a")); + verifyPosition(decoder, binary( + "545a00582424010b021e000008637710239476270f080b0a3228001600000000000000000000000000000000000000000000000401a00822001088c00020183701a6053800000000800000000000000000000000000000000077c9860d0a"), + position("1999-11-30 00:00:00.000", false, 0.0, 0.0)); verifyPosition(decoder, binary( - "545A00912424010B021E000008661040203754350F061807083800160400CE5ADC041447620F0618070838000A0000060C7C0004253378370010AAC000000C37018504E500000000800000000000000000390B0A0014061113000000051200140610600014061220001000133800140610070010001473001000151100101500640010000920001000148400000000000000F2EF570D0A")); + "545A00912424010B021E000008661040203754350F061807083800160400CE5ADC041447620F0618070838000A0000060C7C0004253378370010AAC000000C37018504E500000000800000000000000000390B0A0014061113000000051200140610600014061220001000133800140610070010001473001000151100101500640010000920001000148400000000000000F2EF570D0A"), + position("2015-06-24 07:08:56.000", true, 22.53946, 114.06310)); verifyNothing(decoder, binary( "545A009E2424010A0205000008637710225481290F010F081E33000000000010A0C000310E35000005840000000000000000000000000066140A00140612200010001511001406101000140612490014061308001015006400051400170014061012000000050200140612470000000504001406100700140612510014061260001015012000000005080014061252001406130900101501410000000506000853A40D0A")); |