diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/org/traccar/protocol/WialonProtocolDecoder.java | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/src/org/traccar/protocol/WialonProtocolDecoder.java b/src/org/traccar/protocol/WialonProtocolDecoder.java index 5b8d9a24e..6c4c0e8db 100644 --- a/src/org/traccar/protocol/WialonProtocolDecoder.java +++ b/src/org/traccar/protocol/WialonProtocolDecoder.java @@ -49,9 +49,16 @@ public class WialonProtocolDecoder extends BaseProtocolDecoder { "([EW]);" + "(\\d+\\.?\\d*)?;" + // Speed "(\\d+\\.?\\d*)?;" + // Course - "(?:(\\d+\\.?\\d*)|NA);" + // Altitude - "(?:(\\d+)|NA)" + // Satellites - ".*"); // Full format + "(?:NA|(\\d+\\.?\\d*));" + // Altitude + "(?:NA|(\\d+))" + // Satellites + "(?:;" + + "(?:NA|(\\d+\\.?\\d*));" + // hdop + "(?:NA|(\\d+));" + // inputs + "(?:NA|(\\d+));" + // outputs + "(?:NA|([^;]*));" + // adc + "(?:NA|([^;]*));" + // ibutton + "(?:NA|(.*))" + // params + ")?"); private void sendResponse(Channel channel, String prefix, Integer number) { if (channel != null) { @@ -135,6 +142,35 @@ public class WialonProtocolDecoder extends BaseProtocolDecoder { position.setValid(false); } + // Other + extendedInfo.set("hdop", parser.group(index++)); + extendedInfo.set("inputs", parser.group(index++)); + extendedInfo.set("outputs", parser.group(index++)); + + // ADC + String adc = parser.group(index++); + if (adc != null) { + String[] values = adc.split(","); + for (int i = 0; i < values.length; i++) { + extendedInfo.set("adc" + (i + 1), values[i]); + } + } + + // iButton + extendedInfo.set("ibutton", parser.group(index++)); + + // Params + String params = parser.group(index); + if (params != null) { + String[] values = params.split(","); + for (String param : values) { + Matcher paramParser = Pattern.compile( "(.*):[1-3]:(.*)").matcher(param); + if (paramParser.matches()) { + extendedInfo.set(paramParser.group(1).toLowerCase(), paramParser.group(2)); + } + } + } + // Extended info position.setExtendedInfo(extendedInfo.toString()); |