diff options
-rw-r--r-- | src/org/traccar/protocol/VisiontekProtocolDecoder.java | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/src/org/traccar/protocol/VisiontekProtocolDecoder.java b/src/org/traccar/protocol/VisiontekProtocolDecoder.java index bfd4a78fa..e2c9b86ba 100644 --- a/src/org/traccar/protocol/VisiontekProtocolDecoder.java +++ b/src/org/traccar/protocol/VisiontekProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 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. @@ -49,19 +49,23 @@ public class VisiontekProtocolDecoder extends BaseProtocolDecoder { .number("(d+.?d+),") // speed .number("(d+),") // course .groupBegin() - .groupBegin() .number("(d+),") // altitude .number("(d+),") // satellites - .groupEnd("?") .number("(d+),") // odometer - .groupBegin() - .number("(d),") // ignition - .number("(d),") // input 1 - .number("(d),") // input 2 - .number("(d),") // immobilizer - .number("(d),") // external battery status + .number("([01]),") // ignition + .number("([01]),") // input 1 + .number("([01]),") // input 2 + .number("([01]),") // immobilizer + .number("([01]),") // external battery status .number("(d+),") // gsm - .groupEnd("?") + .or() + .number("(d+.d),") // hdop + .number("(d+),") // altitude + .number("(d+),") // odometer + .number("([01],[01],[01],[01]),") // input + .number("([01],[01],[01],[01]),") // output + .number("(d+.?d*),") // adc 1 + .number("(d+.?d*),") // adc 2 .groupEnd("?") .any() .expression("([AV])") // validity @@ -105,16 +109,28 @@ public class VisiontekProtocolDecoder extends BaseProtocolDecoder { parser.next().replace(".", "")) / 10)); position.setCourse(parser.nextDouble()); - position.setAltitude(parser.nextDouble()); - - position.set(Position.KEY_SATELLITES, parser.next()); - position.set(Position.KEY_ODOMETER, parser.next()); - position.set(Position.KEY_IGNITION, parser.next()); - position.set(Position.PREFIX_IO + 1, parser.next()); - position.set(Position.PREFIX_IO + 2, parser.next()); - position.set("immobilizer", parser.next()); - position.set(Position.KEY_POWER, parser.next()); - position.set(Position.KEY_GSM, parser.next()); + + if (parser.hasNext(9)) { + position.setAltitude(parser.nextDouble()); + position.set(Position.KEY_SATELLITES, parser.next()); + position.set(Position.KEY_ODOMETER, parser.next()); + position.set(Position.KEY_IGNITION, parser.next().equals("1")); + position.set(Position.PREFIX_IO + 1, parser.next()); + position.set(Position.PREFIX_IO + 2, parser.next()); + position.set("immobilizer", parser.next()); + position.set(Position.KEY_POWER, parser.next()); + position.set(Position.KEY_GSM, parser.next()); + } + + if (parser.hasNext(7)) { + position.set(Position.KEY_HDOP, parser.next()); + position.setAltitude(parser.nextDouble()); + position.set(Position.KEY_ODOMETER, parser.next()); + position.set(Position.KEY_INPUT, parser.next()); + position.set(Position.KEY_OUTPUT, parser.next()); + position.set(Position.PREFIX_ADC + 1, parser.next()); + position.set(Position.PREFIX_ADC + 2, parser.next()); + } position.setValid(parser.next().equals("A")); |