aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/protocol/H02ProtocolEncoder.java10
-rw-r--r--test/org/traccar/protocol/H02ProtocolEncoderTest.java31
2 files changed, 40 insertions, 1 deletions
diff --git a/src/org/traccar/protocol/H02ProtocolEncoder.java b/src/org/traccar/protocol/H02ProtocolEncoder.java
index 0b41b9c93..ba362f88e 100644
--- a/src/org/traccar/protocol/H02ProtocolEncoder.java
+++ b/src/org/traccar/protocol/H02ProtocolEncoder.java
@@ -22,11 +22,13 @@ import org.traccar.helper.Log;
import org.traccar.model.Command;
public class H02ProtocolEncoder extends StringProtocolEncoder {
+ private static final String MARKER = "HQ";
private Object formatCommand(DateTime dt, String uniqueId, String cmd, String... params) {
String result = String.format(
- "*HQ,%s,%s,%02d%02d%02d",
+ "*%s,%s,%s,%02d%02d%02d",
+ MARKER,
uniqueId,
cmd,
dt.getHourOfDay(),
@@ -51,6 +53,12 @@ public class H02ProtocolEncoder extends StringProtocolEncoder {
return formatCommand(dt, uniqueId, "SCF", "0", "0");
case Command.TYPE_ALARM_DISARM:
return formatCommand(dt, uniqueId, "SCF", "1", "1");
+ case Command.TYPE_ENGINE_STOP:
+ return formatCommand(dt, uniqueId, "S20", "1", "3", "10", "3", "5", "5", "3", "5", "3", "5", "3", "5");
+ case Command.TYPE_ENGINE_RESUME:
+ return formatCommand(dt, uniqueId, "S20", "0", "0");
+ case Command.TYPE_POSITION_PERIODIC:
+ return formatCommand(dt, uniqueId, "S71", "22", command.getAttributes().get(Command.KEY_FREQUENCY).toString());
default:
Log.warning(new UnsupportedOperationException(command.getType()));
break;
diff --git a/test/org/traccar/protocol/H02ProtocolEncoderTest.java b/test/org/traccar/protocol/H02ProtocolEncoderTest.java
index 50f36c12d..620793595 100644
--- a/test/org/traccar/protocol/H02ProtocolEncoderTest.java
+++ b/test/org/traccar/protocol/H02ProtocolEncoderTest.java
@@ -30,4 +30,35 @@ public class H02ProtocolEncoderTest extends ProtocolTest {
Assert.assertEquals("*HQ,123456789012345,SCF,010203,1,1#", encoder.encodeCommand(command, dt));
}
+
+ @Test
+ public void testEngineStopEncode() throws Exception {
+
+ Command command = new Command();
+ command.setDeviceId(1);
+ command.setType(Command.TYPE_ENGINE_STOP);
+
+ Assert.assertEquals("*HQ,123456789012345,S20,010203,1,3,10,3,5,5,3,5,3,5,3,5#", encoder.encodeCommand(command, dt));
+ }
+
+ @Test
+ public void testEngineResumeEncode() throws Exception {
+
+ Command command = new Command();
+ command.setDeviceId(1);
+ command.setType(Command.TYPE_ENGINE_RESUME);
+
+ Assert.assertEquals("*HQ,123456789012345,S20,010203,0,0#", encoder.encodeCommand(command, dt));
+ }
+
+ @Test
+ public void testPositionPeriodicEncode() throws Exception {
+
+ Command command = new Command();
+ command.setDeviceId(1);
+ command.set(Command.KEY_FREQUENCY, 10);
+ command.setType(Command.TYPE_POSITION_PERIODIC);
+
+ Assert.assertEquals("*HQ,123456789012345,S71,010203,22,10#", encoder.encodeCommand(command, dt));
+ }
}