diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2020-01-09 16:13:24 -0800 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2020-01-09 16:13:24 -0800 |
commit | 42a0fef17757082442e3dea4d1fc0f57750c0f90 (patch) | |
tree | 574cc6454979c1eef4551b19c032d1e7f6bdb2f7 /src/main | |
parent | 73228519ae738f20e1d6d601007f0afc4a9ed3ac (diff) | |
download | traccar-server-42a0fef17757082442e3dea4d1fc0f57750c0f90.tar.gz traccar-server-42a0fef17757082442e3dea4d1fc0f57750c0f90.tar.bz2 traccar-server-42a0fef17757082442e3dea4d1fc0f57750c0f90.zip |
Fix PST protocol issues
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/org/traccar/protocol/PstProtocolDecoder.java | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/main/java/org/traccar/protocol/PstProtocolDecoder.java b/src/main/java/org/traccar/protocol/PstProtocolDecoder.java index a93dd251f..23e2afbbd 100644 --- a/src/main/java/org/traccar/protocol/PstProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/PstProtocolDecoder.java @@ -41,14 +41,16 @@ public class PstProtocolDecoder extends BaseProtocolDecoder { .setYear((int) BitUtil.between(value, 26, 32)) .setMonth((int) BitUtil.between(value, 22, 26)) .setDay((int) BitUtil.between(value, 17, 22)) - .setMonth((int) BitUtil.between(value, 12, 17)) - .setMonth((int) BitUtil.between(value, 6, 12)) - .setMonth((int) BitUtil.between(value, 0, 6)).getDate(); + .setHour((int) BitUtil.between(value, 12, 17)) + .setMinute((int) BitUtil.between(value, 6, 12)) + .setSecond((int) BitUtil.between(value, 0, 6)).getDate(); } private double readCoordinate(ByteBuf buf) { long value = buf.readUnsignedInt(); - return (BitUtil.from(value, 16) + BitUtil.to(value, 16) * 0.00001) / 60; + int sign = BitUtil.check(value, 31) ? -1 : 1; + value = BitUtil.to(value, 31); + return sign * (BitUtil.from(value, 16) + BitUtil.to(value, 16) * 0.00001) / 60; } @Override @@ -85,7 +87,10 @@ public class PstProtocolDecoder extends BaseProtocolDecoder { switch (tag) { case 0x0D: - position.set(Position.KEY_BATTERY_LEVEL, buf.readUnsignedByte() * 5); + int battery = buf.readUnsignedByte(); + if (battery <= 20) { + position.set(Position.KEY_BATTERY_LEVEL, buf.readUnsignedByte() * 5); + } break; case 0x10: position.setFixTime(readDate(buf)); |