aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/traccar')
-rw-r--r--src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java11
1 files changed, 7 insertions, 4 deletions
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);
}
}
}