From 04bbc2fe82b5e80f52335604f1d97f955fdedb72 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 23 Jan 2014 21:54:55 +1300 Subject: Another Piligrim decoder fix --- .../traccar/protocol/PiligrimProtocolDecoder.java | 22 +++++++++++++--------- .../protocol/PiligrimProtocolDecoderTest.java | 10 ++++++++-- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/org/traccar/protocol/PiligrimProtocolDecoder.java b/src/org/traccar/protocol/PiligrimProtocolDecoder.java index 4991dd923..76fe33d92 100644 --- a/src/org/traccar/protocol/PiligrimProtocolDecoder.java +++ b/src/org/traccar/protocol/PiligrimProtocolDecoder.java @@ -44,11 +44,13 @@ public class PiligrimProtocolDecoder extends BaseProtocolDecoder { } private void sendResponse(Channel channel, String message) { - HttpResponse response = new DefaultHttpResponse( - HttpVersion.HTTP_1_1, HttpResponseStatus.OK); - response.setContent(ChannelBuffers.copiedBuffer( - ByteOrder.BIG_ENDIAN, message, Charset.defaultCharset())); - channel.write(response); + if (channel != null) { + HttpResponse response = new DefaultHttpResponse( + HttpVersion.HTTP_1_1, HttpResponseStatus.OK); + response.setContent(ChannelBuffers.copiedBuffer( + ByteOrder.BIG_ENDIAN, message, Charset.defaultCharset())); + channel.write(response); + } } private static final int MSG_GPS = 0xF1; @@ -97,7 +99,7 @@ public class PiligrimProtocolDecoder extends BaseProtocolDecoder { buf.readUnsignedByte(); // header int type = buf.readUnsignedByte(); - buf.readUnsignedShort(); // length + buf.readUnsignedByte(); // length if (type == MSG_GPS || type == MSG_GPS_SENSORS) { @@ -109,8 +111,8 @@ public class PiligrimProtocolDecoder extends BaseProtocolDecoder { Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC")); time.clear(); time.set(Calendar.DAY_OF_MONTH, buf.readUnsignedByte()); - time.set(Calendar.MONTH, buf.getByte(buf.readerIndex()) & 0x0f); - time.set(Calendar.YEAR, 2000 + (buf.readUnsignedByte() >> 4)); + time.set(Calendar.MONTH, (buf.getByte(buf.readerIndex()) & 0x0f) - 1); + time.set(Calendar.YEAR, 2010 + (buf.readUnsignedByte() >> 4)); time.set(Calendar.HOUR, buf.readUnsignedByte()); time.set(Calendar.MINUTE, buf.readUnsignedByte()); time.set(Calendar.SECOND, buf.readUnsignedByte()); @@ -137,7 +139,9 @@ public class PiligrimProtocolDecoder extends BaseProtocolDecoder { position.setAltitude(0.0); // Satellites - extendedInfo.set("satellites", buf.readUnsignedByte()); + int satellites = buf.readUnsignedByte(); + extendedInfo.set("satellites", satellites); + position.setValid(satellites >= 3); // Speed position.setSpeed((double) buf.readUnsignedByte()); diff --git a/test/org/traccar/protocol/PiligrimProtocolDecoderTest.java b/test/org/traccar/protocol/PiligrimProtocolDecoderTest.java index 507499543..1051b0d4d 100644 --- a/test/org/traccar/protocol/PiligrimProtocolDecoderTest.java +++ b/test/org/traccar/protocol/PiligrimProtocolDecoderTest.java @@ -1,11 +1,15 @@ package org.traccar.protocol; +import org.jboss.netty.buffer.ChannelBuffers; import org.traccar.helper.TestDataManager; import org.jboss.netty.handler.codec.http.DefaultHttpRequest; import org.jboss.netty.handler.codec.http.HttpMethod; +import org.jboss.netty.handler.codec.http.HttpRequest; import org.jboss.netty.handler.codec.http.HttpVersion; +import static org.junit.Assert.assertNull; import static org.traccar.helper.DecoderVerifier.verify; import org.junit.Test; +import org.traccar.helper.ChannelBufferTools; public class PiligrimProtocolDecoderTest { @@ -15,8 +19,10 @@ public class PiligrimProtocolDecoderTest { PiligrimProtocolDecoder decoder = new PiligrimProtocolDecoder(null); decoder.setDataManager(new TestDataManager()); - /*verify(decoder.decode(null, null, new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, - "/?id=123456×tamp=1377177267&lat=60.0&lon=30.0&speed=0.0&bearing=0.0&altitude=0&hdop=0.0")));*/ + HttpRequest msg1 = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "/bingps?imei=868204005544720&csq=18&vout=00&vin=4050&dataid=00000000"); + int[] buf1 = {0xff,0xf2,0x20,0x0d,0x41,0x10,0x06,0x1a,0x32,0x35,0x4f,0x34,0x22,0x31,0x00,0x62,0x00,0x0a,0x00,0x05,0x17,0x3b,0x00,0x00,0xa1,0x01,0x00,0x03,0x00,0x00,0x5e,0x00,0xff,0xf2,0x20,0x0d,0x41,0x10,0x10,0x09,0x32,0x35,0x4f,0x2b,0x22,0x31,0x00,0x42,0x00,0x0b,0x00,0x0e,0x17,0x3b,0x00,0x00,0x9f,0x01,0x00,0x07,0x00,0x00,0x60,0x00}; + msg1.setContent(ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf1))); + verify(decoder.decode(null, null, msg1)); } -- cgit v1.2.3