From 495714f9322db11971d0349bc9c2b4a5ce7348e9 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 5 Aug 2018 10:41:07 +1200 Subject: TK103 regex refactoring --- src/org/traccar/protocol/Tk103ProtocolDecoder.java | 34 ++++++++++------------ 1 file changed, 15 insertions(+), 19 deletions(-) (limited to 'src/org/traccar') 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; -- cgit v1.2.3