From 453be4c44ddbc8cd1db3a2cfd7b1fd37cee7a8fc Mon Sep 17 00:00:00 2001 From: michaelloliveira Date: Wed, 30 May 2018 20:54:22 -0300 Subject: Update SviasProtocolDecoder.java As required by the developer. --- src/org/traccar/protocol/SviasProtocolDecoder.java | 87 +++++----------------- 1 file changed, 17 insertions(+), 70 deletions(-) (limited to 'src/org/traccar/protocol') diff --git a/src/org/traccar/protocol/SviasProtocolDecoder.java b/src/org/traccar/protocol/SviasProtocolDecoder.java index 4ec758eb0..caff6339e 100644 --- a/src/org/traccar/protocol/SviasProtocolDecoder.java +++ b/src/org/traccar/protocol/SviasProtocolDecoder.java @@ -25,7 +25,6 @@ import java.net.SocketAddress; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.TimeZone; -import org.traccar.helper.Log; import org.traccar.helper.UnitsConverter; public class SviasProtocolDecoder extends BaseProtocolDecoder { @@ -40,21 +39,7 @@ public class SviasProtocolDecoder extends BaseProtocolDecoder { } } - private String zeros(String texto, Integer valor) { - String aux = ""; - for (int i = 0; i < valor; i++) { - aux += '0'; - } - return aux + texto; - } - - public String decimalToBinary(int valor) { - - String bin = Integer.toString(valor, 2); - return bin; - } - - private double convert2decimal(long v) { + private double convertCoordinates(long v) { float a = (float) v / 1.0E7F; int b = (int) (v / 10000000L); float c = a - b; @@ -81,11 +66,8 @@ public class SviasProtocolDecoder extends BaseProtocolDecoder { position.setProtocol(getProtocolName()); position.setDeviceId(deviceSession.getDeviceId()); - position.set(Position.KEY_VERSION_HW, values[index++].replace("[", "")); - - String swOrAlt = values[index++]; - position.set(Position.KEY_VERSION_HW, swOrAlt); - position.setAltitude(Double.parseDouble(swOrAlt)); + String versionHw = values[index++].replaceAll("[^0-9]", ""); + String versionSw = values[index++]; position.set(Position.KEY_INDEX, Integer.valueOf(values[index++])); @@ -95,51 +77,31 @@ public class SviasProtocolDecoder extends BaseProtocolDecoder { DateFormat dateFormat = new SimpleDateFormat("ddMMyyHHmmss"); dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); - String date = values[index++]; - String time = values[index++]; + String date = String.format("%06d", Integer.parseInt(values[index++])); + String time = String.format("%06d", Integer.parseInt(values[index++])); - position.setTime(dateFormat.parse(zeros(date, 6 - date.trim().length()) - + zeros(time, 6 - time.trim().length()))); + position.setTime(dateFormat.parse(date + time)); - position.setLatitude(convert2decimal(Long.valueOf(values[index++]))); - position.setLongitude(convert2decimal(Long.valueOf(values[index++]))); + position.setLatitude(convertCoordinates(Long.valueOf(values[index++]))); + position.setLongitude(convertCoordinates(Long.valueOf(values[index++]))); position.setSpeed(UnitsConverter.knotsFromKph(Integer.valueOf(values[index++]) / 100)); position.setCourse(Integer.valueOf(values[index++]) / 100); position.set(Position.KEY_ODOMETER, Integer.valueOf(values[index++])); - String input = decimalToBinary(Integer.valueOf(values[index++])); - String output = decimalToBinary(Integer.valueOf(values[index++])); + String input = new StringBuilder(String.format("%08d", + Integer.parseInt(values[index++]))).reverse().toString(); - /** inputs */ - String in = new StringBuilder(zeros(input, 8 - input.length())).reverse().toString(); + String output = new StringBuilder(String.format("%08d", + Integer.parseInt(values[index++]))).reverse().toString(); - /** outputs */ - String out = new StringBuilder(zeros(output, 8 - output.length())).reverse().toString(); - - if (in.substring(0, 1).equals("1")) { + if (input.substring(0).equals("1")) { position.set(Position.KEY_ALARM, Position.ALARM_SOS); } + position.set(Position.KEY_IGNITION, input.substring(4).equals("1")); - position.set(Position.PREFIX_IN + 1, in.substring(1, 2).equals("1")); - position.set(Position.PREFIX_IN + 2, in.substring(2, 3).equals("1")); - position.set(Position.PREFIX_IN + 3, in.substring(3, 4).equals("1")); - position.set(Position.KEY_IGNITION, in.substring(4, 5).equals("1")); - - if (in.substring(7, 8).equals("1")) { - position.set(Position.KEY_ALARM, Position.ALARM_POWER_CUT); - } - - position.setValid(out.substring(0, 1).equals("1")); - - if (out.substring(1, 2).equals("1")) { - position.set(Position.KEY_ALARM, Position.ALARM_JAMMING); - } - - position.set(Position.PREFIX_OUT + 1, out.substring(2, 3).equals("1")); - position.set(Position.PREFIX_OUT + 2, out.substring(3, 4).equals("1")); - position.set(Position.PREFIX_OUT + 3, out.substring(4, 5).equals("1")); + position.setValid(output.substring(0).equals("1")); position.set(Position.KEY_POWER, Integer.valueOf(values[index++]) / 100); @@ -154,16 +116,6 @@ public class SviasProtocolDecoder extends BaseProtocolDecoder { } } - String status = decimalToBinary(Integer.parseInt(values[index++])); - String st = new StringBuilder(zeros(status, 8 - status.length())).reverse().toString(); - - position.set(Position.ALARM_CORNERING, st.substring(0, 1).equals("1")); - position.set(Position.ALARM_GEOFENCE_ENTER, st.substring(1, 2).equals("1")); - position.set(Position.ALARM_FALL_DOWN, st.substring(3, 4).equals("1")); - position.set(Position.ALARM_OVERSPEED, st.substring(4, 5).equals("1")); - position.set("connectedPrimaryServer", st.substring(5, 6).equals("1")); - position.set("connectedSecundaryServer", st.substring(6, 7).equals("1")); - return position; } @@ -175,13 +127,9 @@ public class SviasProtocolDecoder extends BaseProtocolDecoder { if (sentence.contains(":")) { - Log.info(sentence); - String[] values = sentence.substring(1).split(":"); - String imei = values[1]; - - DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, imei); + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, values[1]); if (deviceSession != null) { sendResponse(channel, "@"); @@ -189,8 +137,7 @@ public class SviasProtocolDecoder extends BaseProtocolDecoder { } else { - Position position = decodePosition(channel, remoteAddress, - sentence.substring(sentence.indexOf('[', 1) + 1)); + Position position = decodePosition(channel, remoteAddress, sentence.substring(1)); if (position != null) { sendResponse(channel, "@"); -- cgit v1.2.3