diff options
Diffstat (limited to 'src/org/traccar/protocol/Tk103ProtocolDecoder.java')
-rw-r--r-- | src/org/traccar/protocol/Tk103ProtocolDecoder.java | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/src/org/traccar/protocol/Tk103ProtocolDecoder.java b/src/org/traccar/protocol/Tk103ProtocolDecoder.java index 2bcd62407..3b1ab9655 100644 --- a/src/org/traccar/protocol/Tk103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tk103ProtocolDecoder.java @@ -54,22 +54,20 @@ public class Tk103ProtocolDecoder extends BaseProtocolDecoder { .expression("([EW]),?") .number("(d+.d)(?:d*,)?") // speed .number("(dd)(dd)(dd),?") // time (hhmmss) - .number("(d+.?d{1,4}),?") // course .groupBegin() + .number("(?:([d.]{6})|(dd)),?") // course .number("([01])") // charge .number("([01])") // ignition .number("(x)") // io .number("(x)") // io .number("(x)") // io - .number("(xxx),?") // fuel - .groupEnd("?") - .number("(?:L(x+))?") // odometer + .number("(xxx)") // fuel + .number("L(x+)") // odometer + .or() + .number("(d+.d+)") // course + .groupEnd() .any() .number("([+-]ddd.d)?") // temperature - .groupBegin() - .number("([+-]?d+.d{1,2}),") // altitude - .number("(d+)$") // number of visible satellites - .groupEnd("?") .text(")").optional() .compile(); @@ -400,9 +398,14 @@ public class Tk103ProtocolDecoder extends BaseProtocolDecoder { dateBuilder.setTime(parser.nextInt(0), parser.nextInt(0), parser.nextInt(0)); position.setTime(dateBuilder.getDate()); - position.setCourse(parser.nextDouble(0)); + if (parser.hasNext()) { + position.setCourse(parser.nextDouble()); + } + if (parser.hasNext()) { + position.setCourse(parser.nextDouble()); + } - if (parser.hasNext(6)) { + if (parser.hasNext(7)) { position.set(Position.KEY_CHARGE, parser.nextInt() == 0); position.set(Position.KEY_IGNITION, parser.nextInt() == 1); @@ -432,22 +435,15 @@ public class Tk103ProtocolDecoder extends BaseProtocolDecoder { } position.set(Position.KEY_FUEL_LEVEL, parser.nextHexInt()); - } - - if (parser.hasNext()) { position.set(Position.KEY_ODOMETER, parser.nextLong(16, 0)); } if (parser.hasNext()) { - position.set(Position.PREFIX_TEMP + 1, parser.nextDouble(0)); - } - - if (parser.hasNext()) { - position.setAltitude(parser.nextDouble(0)); + position.setCourse(parser.nextDouble()); } if (parser.hasNext()) { - position.set(Position.KEY_SATELLITES_VISIBLE, parser.nextInt(0)); + position.set(Position.PREFIX_TEMP + 1, parser.nextDouble(0)); } return position; |