From bf9b8c9562587476a919e095a4adc6c00bb2cba8 Mon Sep 17 00:00:00 2001 From: stefanclark Date: Thu, 21 Jul 2022 21:21:13 +0100 Subject: Update Xexun2ProtocolDecoder.java --- .../java/org/traccar/protocol/Xexun2ProtocolDecoder.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java index a572f8622..42fa7d8f2 100644 --- a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java @@ -176,7 +176,19 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); position.setLongitude(convertCoordinate(buf.readDouble())); position.setLatitude(convertCoordinate(buf.readDouble())); - + } + if (BitUtil.check(positionMask, 7)) { + buf.skipBytes(2); // length = 30 + buf.skipBytes(1); // marker = 'G' + buf.skipBytes(2); // length = 27 + position.setLongitude(convertCoordinate(buf.readDouble())); + position.setLatitude(convertCoordinate(buf.readDouble())); + position.setValid(buf.readUnsignedByte()>0); // 0=invalid,1=normal,2=sub-meter,3=differential + position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); + buf.skipBytes(1); // SNR + position.setSpeed(UnitsConverter.knotsFromKph(buf.readUnsignedShort() * 0.1)); + position.setCourse(buf.readUnsignedShort() * 0.1); + position.setAltitude(buf.readFloat()); } } if (BitUtil.check(mask, 3)) { -- cgit v1.2.3 From df974772a6cab1f1bdbad4c6b19e150c2ca3ccf6 Mon Sep 17 00:00:00 2001 From: stefanclark Date: Thu, 21 Jul 2022 21:56:49 +0100 Subject: Update Xexun2ProtocolDecoder.java --- src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java index 42fa7d8f2..47d86aeb1 100644 --- a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java @@ -183,7 +183,7 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { buf.skipBytes(2); // length = 27 position.setLongitude(convertCoordinate(buf.readDouble())); position.setLatitude(convertCoordinate(buf.readDouble())); - position.setValid(buf.readUnsignedByte()>0); // 0=invalid,1=normal,2=sub-meter,3=differential + position.setValid(buf.readUnsignedByte() > 0); // 0=invalid,1=normal,2=sub-meter,3=differential position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); buf.skipBytes(1); // SNR position.setSpeed(UnitsConverter.knotsFromKph(buf.readUnsignedShort() * 0.1)); -- cgit v1.2.3 From c85bcf1966e690d8af56d0eff51dbae5c025340e Mon Sep 17 00:00:00 2001 From: stefanclark Date: Thu, 21 Jul 2022 22:30:46 +0100 Subject: Update Xexun2ProtocolDecoder.java --- .../traccar/protocol/Xexun2ProtocolDecoder.java | 30 ++++++++++++++-------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java index 47d86aeb1..3f37d7cac 100644 --- a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java @@ -178,17 +178,25 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { position.setLatitude(convertCoordinate(buf.readDouble())); } if (BitUtil.check(positionMask, 7)) { - buf.skipBytes(2); // length = 30 - buf.skipBytes(1); // marker = 'G' - buf.skipBytes(2); // length = 27 - position.setLongitude(convertCoordinate(buf.readDouble())); - position.setLatitude(convertCoordinate(buf.readDouble())); - position.setValid(buf.readUnsignedByte() > 0); // 0=invalid,1=normal,2=sub-meter,3=differential - position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); - buf.skipBytes(1); // SNR - position.setSpeed(UnitsConverter.knotsFromKph(buf.readUnsignedShort() * 0.1)); - position.setCourse(buf.readUnsignedShort() * 0.1); - position.setAltitude(buf.readFloat()); + if (buf.readUnsignedShort() > 0) { + if (buf.readByte() != 'G') { + buf.skipBytes(buf.readUnsignedShort()); + } else { + int gpsDataLen = buf.readUnsignedShort(); + if (gpsDataLen != 27) { + buf.skipBytes(gpsDataLen); + } else { + position.setLongitude(convertCoordinate(buf.readDouble())); + position.setLatitude(convertCoordinate(buf.readDouble())); + position.setValid(buf.readUnsignedByte() > 0); + position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); + buf.readUnsignedByte(1); // satellite signal to noise ratio + position.setSpeed(UnitsConverter.knotsFromKph(buf.readUnsignedShort() * 0.1)); + position.setCourse(buf.readUnsignedShort() * 0.1); + position.setAltitude(buf.readFloat()); + } + } + } } } if (BitUtil.check(mask, 3)) { -- cgit v1.2.3 From 0242c8c9a2983ed2e082bb64d7941b4d345aa734 Mon Sep 17 00:00:00 2001 From: Stefan Clark Date: Sat, 23 Jul 2022 08:28:00 +0000 Subject: Added test csse & updated code for Xexun2ProtocolDecoder --- src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java | 11 +++++++---- .../java/org/traccar/protocol/Xexun2ProtocolDecoderTest.java | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java index 3f37d7cac..402095391 100644 --- a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java @@ -178,22 +178,25 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { position.setLatitude(convertCoordinate(buf.readDouble())); } if (BitUtil.check(positionMask, 7)) { - if (buf.readUnsignedShort() > 0) { + int dataLength = buf.readUnsignedShort(); + if (dataLength > 0) { if (buf.readByte() != 'G') { - buf.skipBytes(buf.readUnsignedShort()); + buf.skipBytes(dataLength - 1); } else { int gpsDataLen = buf.readUnsignedShort(); if (gpsDataLen != 27) { - buf.skipBytes(gpsDataLen); + buf.skipBytes(dataLength - 3); } else { + position.setFixTime(position.getDeviceTime()); position.setLongitude(convertCoordinate(buf.readDouble())); position.setLatitude(convertCoordinate(buf.readDouble())); position.setValid(buf.readUnsignedByte() > 0); position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); - buf.readUnsignedByte(1); // satellite signal to noise ratio + buf.readUnsignedByte(); // satellite signal to noise ratio position.setSpeed(UnitsConverter.knotsFromKph(buf.readUnsignedShort() * 0.1)); position.setCourse(buf.readUnsignedShort() * 0.1); position.setAltitude(buf.readFloat()); + buf.skipBytes(dataLength - 30); } } } diff --git a/src/test/java/org/traccar/protocol/Xexun2ProtocolDecoderTest.java b/src/test/java/org/traccar/protocol/Xexun2ProtocolDecoderTest.java index 840c38b52..215b90c66 100644 --- a/src/test/java/org/traccar/protocol/Xexun2ProtocolDecoderTest.java +++ b/src/test/java/org/traccar/protocol/Xexun2ProtocolDecoderTest.java @@ -25,6 +25,9 @@ public class Xexun2ProtocolDecoderTest extends ProtocolTest { verifyPositions(decoder, binary( "FAAF00140CF18626490454584530002BF2DD0200130013D360EFD7F514006402010D46322C4A450BA026D460EFD7FA14006402010D46322C4A450BA026FAAF")); + verifyPositions(decoder, binary( + "FAAF0014000C8622050512345670002DF3A001002A0062D9047400005E0280001E47001B400D4BA732DF505E40B4153AAF78FEF00109000000000042B36666FAAF")); + } } -- cgit v1.2.3