aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2020-01-09 16:13:24 -0800
committerAnton Tananaev <anton.tananaev@gmail.com>2020-01-09 16:13:24 -0800
commit42a0fef17757082442e3dea4d1fc0f57750c0f90 (patch)
tree574cc6454979c1eef4551b19c032d1e7f6bdb2f7 /src/main
parent73228519ae738f20e1d6d601007f0afc4a9ed3ac (diff)
downloadtraccar-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.java15
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));