aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/protocol/SuntechProtocolEncoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/traccar/protocol/SuntechProtocolEncoder.java')
-rw-r--r--src/main/java/org/traccar/protocol/SuntechProtocolEncoder.java92
1 files changed, 69 insertions, 23 deletions
diff --git a/src/main/java/org/traccar/protocol/SuntechProtocolEncoder.java b/src/main/java/org/traccar/protocol/SuntechProtocolEncoder.java
index 3b4995110..597acaae8 100644
--- a/src/main/java/org/traccar/protocol/SuntechProtocolEncoder.java
+++ b/src/main/java/org/traccar/protocol/SuntechProtocolEncoder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 - 2019 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2022 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,49 +27,95 @@ public class SuntechProtocolEncoder extends StringProtocolEncoder {
super(protocol);
}
- private String getPrefix(Channel channel) {
- String prefix = "SA200CMD";
+ @Override
+ protected Object encodeCommand(Channel channel, Command command) {
+
+ boolean universal = false;
+ String prefix = "SA200";
if (channel != null) {
SuntechProtocolDecoder protocolDecoder =
BasePipelineFactory.getHandler(channel.pipeline(), SuntechProtocolDecoder.class);
if (protocolDecoder != null) {
+ universal = protocolDecoder.getUniversal();
String decoderPrefix = protocolDecoder.getPrefix();
if (decoderPrefix != null && decoderPrefix.length() > 5) {
- prefix = decoderPrefix.substring(0, decoderPrefix.length() - 3) + "CMD";
+ prefix = decoderPrefix.substring(0, decoderPrefix.length() - 3);
}
}
}
- return prefix;
- }
-
- @Override
- protected Object encodeCommand(Channel channel, Command command) {
- String prefix = getPrefix(channel);
+ if (universal) {
+ return encodeUniversalCommand(channel, command);
+ } else {
+ return encodeLegacyCommand(channel, prefix, command);
+ }
+ }
+ protected Object encodeUniversalCommand(Channel channel, Command command) {
switch (command.getType()) {
case Command.TYPE_REBOOT_DEVICE:
- return formatCommand(command, prefix + ";%s;02;Reboot\r", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, "CMD;%s;03;03\r", Command.KEY_UNIQUE_ID);
case Command.TYPE_POSITION_SINGLE:
- return formatCommand(command, prefix + ";%s;02;\r", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, "CMD;%s;03;01\r", Command.KEY_UNIQUE_ID);
case Command.TYPE_OUTPUT_CONTROL:
- if (command.getAttributes().containsKey(Command.KEY_DATA)) {
- if (command.getAttributes().get(Command.KEY_DATA).equals("1")) {
- return formatCommand(command, prefix + ";%s;02;Enable%s\r",
- Command.KEY_UNIQUE_ID, Command.KEY_INDEX);
- } else {
- return formatCommand(command, prefix + ";%s;02;Disable%s\r",
- Command.KEY_UNIQUE_ID, Command.KEY_INDEX);
+ if (command.getAttributes().get(Command.KEY_DATA).equals("1")) {
+ switch (command.getString(Command.KEY_INDEX)) {
+ case "1":
+ return formatCommand(command, "CMD;%s;04;01\r", Command.KEY_UNIQUE_ID);
+ case "2":
+ return formatCommand(command, "CMD;%s;04;03\r", Command.KEY_UNIQUE_ID);
+ case "3":
+ return formatCommand(command, "CMD;%s;04;09\r", Command.KEY_UNIQUE_ID);
+ default:
+ return null;
}
+ } else {
+ switch (command.getString(Command.KEY_INDEX)) {
+ case "1":
+ return formatCommand(command, "CMD;%s;04;02\r", Command.KEY_UNIQUE_ID);
+ case "2":
+ return formatCommand(command, "CMD;%s;04;04\r", Command.KEY_UNIQUE_ID);
+ case "3":
+ return formatCommand(command, "CMD;%s;04;10\r", Command.KEY_UNIQUE_ID);
+ default:
+ return null;
+ }
+ }
+ case Command.TYPE_ENGINE_STOP:
+ return formatCommand(command, "CMD;%s;04;01\r", Command.KEY_UNIQUE_ID);
+ case Command.TYPE_ENGINE_RESUME:
+ return formatCommand(command, "CMD;%s;02;02\r", Command.KEY_UNIQUE_ID);
+ case Command.TYPE_ALARM_ARM:
+ return formatCommand(command, "CMD;%s;04;03\r", Command.KEY_UNIQUE_ID);
+ case Command.TYPE_ALARM_DISARM:
+ return formatCommand(command, "CMD;%s;04;04\r", Command.KEY_UNIQUE_ID);
+ default:
+ return null;
+ }
+ }
+
+ protected Object encodeLegacyCommand(Channel channel, String prefix, Command command) {
+ switch (command.getType()) {
+ case Command.TYPE_REBOOT_DEVICE:
+ return formatCommand(command, prefix + "CMD;%s;02;Reboot\r", Command.KEY_UNIQUE_ID);
+ case Command.TYPE_POSITION_SINGLE:
+ return formatCommand(command, prefix + "CMD;%s;02;\r", Command.KEY_UNIQUE_ID);
+ case Command.TYPE_OUTPUT_CONTROL:
+ if (command.getAttributes().get(Command.KEY_DATA).equals("1")) {
+ return formatCommand(command, prefix + "CMD;%s;02;Enable%s\r",
+ Command.KEY_UNIQUE_ID, Command.KEY_INDEX);
+ } else {
+ return formatCommand(command, prefix + "CMD;%s;02;Disable%s\r",
+ Command.KEY_UNIQUE_ID, Command.KEY_INDEX);
}
case Command.TYPE_ENGINE_STOP:
- return formatCommand(command, prefix + ";%s;02;Enable1\r", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, prefix + "CMD;%s;02;Enable1\r", Command.KEY_UNIQUE_ID);
case Command.TYPE_ENGINE_RESUME:
- return formatCommand(command, prefix + ";%s;02;Disable1\r", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, prefix + "CMD;%s;02;Disable1\r", Command.KEY_UNIQUE_ID);
case Command.TYPE_ALARM_ARM:
- return formatCommand(command, prefix + ";%s;02;Enable2\r", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, prefix + "CMD;%s;02;Enable2\r", Command.KEY_UNIQUE_ID);
case Command.TYPE_ALARM_DISARM:
- return formatCommand(command, prefix + ";%s;02;Disable2\r", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, prefix + "CMD;%s;02;Disable2\r", Command.KEY_UNIQUE_ID);
default:
return null;
}