aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java34
-rw-r--r--src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java3
2 files changed, 23 insertions, 14 deletions
diff --git a/src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java b/src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java
index ba4d9cfae..b4593d843 100644
--- a/src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/FleetGuideProtocolDecoder.java
@@ -82,13 +82,15 @@ public class FleetGuideProtocolDecoder extends BaseProtocolDecoder {
index = null;
}
- Integer responseType;
- if (type == MSG_SYNC_REQ) {
- responseType = MSG_SYNC_ACK;
- } else {
- responseType = null;
+ if (type != MSG_DATA_N_ACK && type != MSG_REP_N_ACK) {
+ Integer responseType;
+ if (type == MSG_SYNC_REQ) {
+ responseType = MSG_SYNC_ACK;
+ } else {
+ responseType = null;
+ }
+ sendResponse(channel, remoteAddress, deviceId, responseType, index);
}
- sendResponse(channel, remoteAddress, deviceId, responseType, index);
if (BitUtil.check(options, 13)) {
buf.readUnsignedShortLE(); // acknowledgement
@@ -116,7 +118,7 @@ public class FleetGuideProtocolDecoder extends BaseProtocolDecoder {
int recordEndIndex = data.readerIndex() + recordLength;
if (recordTypes.contains(recordType)) {
- positions.add(processPosition(position));
+ processPosition(positions, position);
position = new Position(getProtocolName());
position.setDeviceId(deviceSession.getDeviceId());
recordTypes.clear();
@@ -159,19 +161,23 @@ public class FleetGuideProtocolDecoder extends BaseProtocolDecoder {
}
+ processPosition(positions, position);
+
data.release();
return positions.isEmpty() ? null : positions;
}
- private Position processPosition(Position position) {
- if (position.getFixTime() == null) {
- position.setTime(new Date());
- }
- if (!position.getAttributes().containsKey(Position.KEY_SATELLITES)) {
- getLastLocation(position, null);
+ private void processPosition(List<Position> positions, Position position) {
+ if (!position.getAttributes().isEmpty()) {
+ if (position.getFixTime() == null) {
+ position.setTime(new Date());
+ }
+ if (!position.getAttributes().containsKey(Position.KEY_SATELLITES)) {
+ getLastLocation(position, null);
+ }
+ positions.add(position);
}
- return position;
}
diff --git a/src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java b/src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java
index 363f33c5b..8146f6a3e 100644
--- a/src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java
+++ b/src/test/java/org/traccar/protocol/FleetGuideProtocolDecoderTest.java
@@ -13,6 +13,9 @@ public class FleetGuideProtocolDecoderTest extends ProtocolTest {
verifyNull(decoder, binary(
"5300188f8a020001f36a"));
+ verifyNull(decoder, binary(
+ "5322188f8a0200140700f355831a83ec06030c008065052c06ffffffff033006808001180003200100005ec0"));
+
verifyPositions(decoder, binary(
"539e598f8a020003020700e378351ac39f040c04ffa92e806a28a13b1f00b638030c000067052c06ffffffff033006808001180003200100000700e478351ac40204303dab2e80cb27a13b1c00ac40021b30e778351ac502043082a72e8054020530bf30021b30e978351ac69f0d0c0433a72e80c123a13b2000df3807002579351ac79f06020a170000df28021b476179351ac8020f30021c81279d79351ac9020f30021c8207d979351aca020f30021c8157157a351acb022b8140517a351acc022b608d7a351acd022b60c97a351ace022b30057b351acf022b30417b351ad0022b307d7b351ad1020f3048021b30b97b351ad2020f3070030c004066021630f57b351ad30213841080021730317c351ad4021330c00217306d7c351ad5020f3050021b30a97c351ad602138170021830e57c351ad7020f3058021b30217d351ad8021385500218305d7d351ad9022b8110997d351ada022b8170d57d351adb022b30117e351adc020f3068030ce184680216304d7e351add020f3060030ce34469021630897e351ade021260e4021830c57e351adf021230e5021830017f351ae002293022f2"));