aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-10-25 10:24:29 +1300
committerAnton Tananaev <anton.tananaev@gmail.com>2015-10-25 10:24:29 +1300
commit8fe177bd27196a3924e4ef8e835ba9dac14975c3 (patch)
treed8e182e17308f418975dd40cfeeddfc831cb3b60
parent5538a83ac7eda6ad5775e582688dd0199e6c538c (diff)
downloadtrackermap-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.java42
-rw-r--r--test/org/traccar/ProtocolDecoderTest.java2
-rw-r--r--test/org/traccar/protocol/TzoneProtocolDecoderTest.java8
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"));