aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/protocol/WialonProtocolDecoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/protocol/WialonProtocolDecoder.java')
-rw-r--r--src/org/traccar/protocol/WialonProtocolDecoder.java42
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());