From ae5fe50416df190f5374d084526518a22096871e Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 28 Aug 2016 11:18:05 +1200 Subject: Add more MiniFinder commands --- .../protocol/MiniFinderProtocolEncoder.java | 47 ++++++++++++++++------ 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'src/org/traccar/protocol/MiniFinderProtocolEncoder.java') diff --git a/src/org/traccar/protocol/MiniFinderProtocolEncoder.java b/src/org/traccar/protocol/MiniFinderProtocolEncoder.java index 4d1d5b576..c5210aa0b 100644 --- a/src/org/traccar/protocol/MiniFinderProtocolEncoder.java +++ b/src/org/traccar/protocol/MiniFinderProtocolEncoder.java @@ -19,33 +19,56 @@ import org.traccar.StringProtocolEncoder; import org.traccar.helper.Log; import org.traccar.model.Command; -public class MiniFinderProtocolEncoder extends StringProtocolEncoder { +public class MiniFinderProtocolEncoder extends StringProtocolEncoder implements StringProtocolEncoder.ValueFormatter { - private int getEnabledFlag(Command command) { - return (Boolean) command.getAttributes().get(Command.KEY_ENABLE) ? 1 : 0; + @Override + public String formatValue(String key, Object value) { + + if (key.equals(Command.KEY_ENABLE)) { + return (Boolean) value ? "1" : "0"; + } else if (key.equals(Command.KEY_TIMEZONE)) { + return String.format("%+03d", ((Number) value).longValue() / 3600); + } else if (key.equals(Command.KEY_INDEX)) { + switch (((Number) value).intValue()) { + case 0: + return "A"; + case 1: + return "B"; + case 2: + return "C"; + default: + return null; + } + } + + return null; } @Override protected Object encodeCommand(Command command) { + initDevicePassword(command, "123456"); + switch (command.getType()) { case Command.TYPE_SET_TIMEZONE: - return String.format("123456L%+03d", - ((Number) command.getAttributes().get(Command.KEY_TIMEZONE)).longValue() / 3600); + return formatCommand(command, "{%s}L{%s}", this, Command.KEY_DEVICE_PASSWORD, Command.KEY_TIMEZONE); case Command.TYPE_VOICE_MONITORING: - return String.format("123456L%d", getEnabledFlag(command)); + return formatCommand(command, "{%s}P{%s}", this, Command.KEY_DEVICE_PASSWORD, Command.KEY_ENABLE); case Command.TYPE_ALARM_SPEED: - return formatCommand(command, "123456J1{%s}", Command.KEY_DATA); + return formatCommand(command, "{%s}J1{%s}", Command.KEY_DEVICE_PASSWORD, Command.KEY_DATA); case Command.TYPE_ALARM_GEOFENCE: - return formatCommand(command, "123456R1{%s}", Command.KEY_RADIUS); + return formatCommand(command, "{%s}R1{%s}", Command.KEY_DEVICE_PASSWORD, Command.KEY_RADIUS); case Command.TYPE_SET_AGPS: - return String.format("123456AGPS%d", getEnabledFlag(command)); + return formatCommand(command, "{%s}AGPS{%s}", this, Command.KEY_DEVICE_PASSWORD, Command.KEY_ENABLE); case Command.TYPE_ALARM_FALL: - return String.format("123456F%d", getEnabledFlag(command)); + return formatCommand(command, "{%s}F{%s}", this, Command.KEY_DEVICE_PASSWORD, Command.KEY_ENABLE); case Command.TYPE_MODE_POWER_SAVING: - return String.format("123456SP%d", getEnabledFlag(command)); + return formatCommand(command, "{%s}SP{%s}", this, Command.KEY_DEVICE_PASSWORD, Command.KEY_ENABLE); case Command.TYPE_MODE_DEEP_SLEEP: - return String.format("123456DS%d", getEnabledFlag(command)); + return formatCommand(command, "{%s}DS{%s}", this, Command.KEY_DEVICE_PASSWORD, Command.KEY_ENABLE); + case Command.TYPE_SOS_NUMBER: + return formatCommand(command, "{%s}{%s}1,{%s}", this, + Command.KEY_DEVICE_PASSWORD, Command.KEY_INDEX, Command.KEY_PHONE); default: Log.warning(new UnsupportedOperationException(command.getType())); return null; -- cgit v1.2.3