aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2016-08-23 12:12:42 +1000
committerAnton Tananaev <anton.tananaev@gmail.com>2016-08-23 17:18:10 +1000
commit5536fbe00c022c151007ad077d911b5162201cd4 (patch)
tree63d42882d44668f9120ffb43a4fa9e2ab9a3c554
parent083dc5075b005e42022eb995e4dce303fbfb38c6 (diff)
downloadtraccar-server-5536fbe00c022c151007ad077d911b5162201cd4.tar.gz
traccar-server-5536fbe00c022c151007ad077d911b5162201cd4.tar.bz2
traccar-server-5536fbe00c022c151007ad077d911b5162201cd4.zip
Add commands to Mini Finder protocol
-rw-r--r--src/org/traccar/model/Command.java6
-rw-r--r--src/org/traccar/protocol/MiniFinderProtocol.java12
-rw-r--r--src/org/traccar/protocol/MiniFinderProtocolEncoder.java55
-rw-r--r--test/org/traccar/protocol/MiniFinderProtocolEncoderTest.java24
4 files changed, 97 insertions, 0 deletions
diff --git a/src/org/traccar/model/Command.java b/src/org/traccar/model/Command.java
index 7ec9b414e..730f47842 100644
--- a/src/org/traccar/model/Command.java
+++ b/src/org/traccar/model/Command.java
@@ -39,6 +39,11 @@ public class Command extends Message {
public static final String TYPE_SET_PHONEBOOK = "setPhonebook";
public static final String TYPE_VOICE_MESSAGE = "voiceMessage";
public static final String TYPE_OUTPUT_CONTROL = "outputControl";
+ public static final String TYPE_VOICE_MONITORING = "voiceMonitoring";
+ public static final String TYPE_SET_AGPS = "setAgps";
+
+ public static final String TYPE_MODE_POWER_SAVING = "modePowerSaving";
+ public static final String TYPE_MODE_DEEP_SLEEP = "modeDeepSleep";
public static final String TYPE_ALARM_GEOFENCE = "movementAlarm";
public static final String TYPE_ALARM_BATTERY = "alarmBattery";
@@ -46,6 +51,7 @@ public class Command extends Message {
public static final String TYPE_ALARM_REMOVE = "alarmRemove";
public static final String TYPE_ALARM_CLOCK = "alarmClock";
public static final String TYPE_ALARM_SPEED = "alarmSpeed";
+ public static final String TYPE_ALARM_FALL = "alarmFall";
public static final String KEY_UNIQUE_ID = "uniqueId";
public static final String KEY_FREQUENCY = "frequency";
diff --git a/src/org/traccar/protocol/MiniFinderProtocol.java b/src/org/traccar/protocol/MiniFinderProtocol.java
index d237fe0aa..bdd3337ed 100644
--- a/src/org/traccar/protocol/MiniFinderProtocol.java
+++ b/src/org/traccar/protocol/MiniFinderProtocol.java
@@ -22,12 +22,23 @@ import org.jboss.netty.handler.codec.string.StringEncoder;
import org.traccar.BaseProtocol;
import org.traccar.CharacterDelimiterFrameDecoder;
import org.traccar.TrackerServer;
+import org.traccar.model.Command;
+
import java.util.List;
public class MiniFinderProtocol extends BaseProtocol {
public MiniFinderProtocol() {
super("minifinder");
+ setSupportedCommands(
+ Command.TYPE_SET_TIMEZONE,
+ Command.TYPE_VOICE_MONITORING,
+ Command.TYPE_ALARM_SPEED,
+ Command.TYPE_ALARM_GEOFENCE,
+ Command.TYPE_SET_AGPS,
+ Command.TYPE_ALARM_FALL,
+ Command.TYPE_MODE_POWER_SAVING,
+ Command.TYPE_MODE_DEEP_SLEEP);
}
@Override
@@ -38,6 +49,7 @@ public class MiniFinderProtocol extends BaseProtocol {
pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1024, ';'));
pipeline.addLast("stringEncoder", new StringEncoder());
pipeline.addLast("stringDecoder", new StringDecoder());
+ pipeline.addLast("objectEncoder", new MiniFinderProtocolEncoder());
pipeline.addLast("objectDecoder", new MiniFinderProtocolDecoder(MiniFinderProtocol.this));
}
});
diff --git a/src/org/traccar/protocol/MiniFinderProtocolEncoder.java b/src/org/traccar/protocol/MiniFinderProtocolEncoder.java
new file mode 100644
index 000000000..4d1d5b576
--- /dev/null
+++ b/src/org/traccar/protocol/MiniFinderProtocolEncoder.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.traccar.protocol;
+
+import org.traccar.StringProtocolEncoder;
+import org.traccar.helper.Log;
+import org.traccar.model.Command;
+
+public class MiniFinderProtocolEncoder extends StringProtocolEncoder {
+
+ private int getEnabledFlag(Command command) {
+ return (Boolean) command.getAttributes().get(Command.KEY_ENABLE) ? 1 : 0;
+ }
+
+ @Override
+ protected Object encodeCommand(Command command) {
+
+ switch (command.getType()) {
+ case Command.TYPE_SET_TIMEZONE:
+ return String.format("123456L%+03d",
+ ((Number) command.getAttributes().get(Command.KEY_TIMEZONE)).longValue() / 3600);
+ case Command.TYPE_VOICE_MONITORING:
+ return String.format("123456L%d", getEnabledFlag(command));
+ case Command.TYPE_ALARM_SPEED:
+ return formatCommand(command, "123456J1{%s}", Command.KEY_DATA);
+ case Command.TYPE_ALARM_GEOFENCE:
+ return formatCommand(command, "123456R1{%s}", Command.KEY_RADIUS);
+ case Command.TYPE_SET_AGPS:
+ return String.format("123456AGPS%d", getEnabledFlag(command));
+ case Command.TYPE_ALARM_FALL:
+ return String.format("123456F%d", getEnabledFlag(command));
+ case Command.TYPE_MODE_POWER_SAVING:
+ return String.format("123456SP%d", getEnabledFlag(command));
+ case Command.TYPE_MODE_DEEP_SLEEP:
+ return String.format("123456DS%d", getEnabledFlag(command));
+ default:
+ Log.warning(new UnsupportedOperationException(command.getType()));
+ return null;
+ }
+ }
+
+}
diff --git a/test/org/traccar/protocol/MiniFinderProtocolEncoderTest.java b/test/org/traccar/protocol/MiniFinderProtocolEncoderTest.java
new file mode 100644
index 000000000..875bfa13e
--- /dev/null
+++ b/test/org/traccar/protocol/MiniFinderProtocolEncoderTest.java
@@ -0,0 +1,24 @@
+package org.traccar.protocol;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.traccar.ProtocolTest;
+import org.traccar.model.Command;
+
+public class MiniFinderProtocolEncoderTest extends ProtocolTest {
+
+ @Test
+ public void testEncode() throws Exception {
+
+ MiniFinderProtocolEncoder encoder = new MiniFinderProtocolEncoder();
+
+ Command command = new Command();
+ command.setDeviceId(1);
+ command.setType(Command.TYPE_SET_TIMEZONE);
+ command.set(Command.KEY_TIMEZONE, 3600);
+
+ Assert.assertEquals("123456L+01", encoder.encodeCommand(command));
+
+ }
+
+}