aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/protocol/LaipacProtocolDecoder.java29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/main/java/org/traccar/protocol/LaipacProtocolDecoder.java b/src/main/java/org/traccar/protocol/LaipacProtocolDecoder.java
index e9570ee11..ede4650b8 100644
--- a/src/main/java/org/traccar/protocol/LaipacProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/LaipacProtocolDecoder.java
@@ -110,17 +110,25 @@ public class LaipacProtocolDecoder extends BaseProtocolDecoder {
private String decodeEvent(String event, Position position) {
- if (event.length() == 1) {
- char inputStatus = event.charAt(0);
- if (inputStatus >= 'A' && inputStatus <= 'D') {
- int inputStatusInt = inputStatus - 'A';
- position.set(Position.PREFIX_IN + 1, inputStatusInt & 1);
- position.set(Position.PREFIX_IN + 2, inputStatusInt & 2);
- return null;
- }
+ if (event.length() != 1)
+ return event;
+
+ int inputStatusInt = 0;
+ char inputStatus = event.charAt(0);
+
+ if (inputStatus >= 'A' && inputStatus <= 'D') {
+ inputStatusInt = inputStatus - 'A';
+ } else if(inputStatus >= 'O' && inputStatus <= 'R') {
+ inputStatusInt = inputStatus - 'O' + 4;
+ } else {
+ return event;
}
- return event;
+ position.set(Position.PREFIX_IN + 1, inputStatusInt & 1);
+ position.set(Position.PREFIX_IN + 2, inputStatusInt & 2);
+ position.set(Position.PREFIX_IN + 3, inputStatusInt & 4);
+
+ return null;
}
private void sendEventResponse(
@@ -132,6 +140,9 @@ public class LaipacProtocolDecoder extends BaseProtocolDecoder {
case "3":
responseCode = "d";
break;
+ case "M":
+ responseCode = "m";
+ break;
case "S":
case "T":
responseCode = "t";