aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/protocol/PiligrimProtocolDecoder.java22
-rw-r--r--test/org/traccar/protocol/PiligrimProtocolDecoderTest.java10
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&timestamp=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));
}