diff options
Diffstat (limited to 'src/org/traccar/protocol/H02ProtocolDecoder.java')
-rw-r--r-- | src/org/traccar/protocol/H02ProtocolDecoder.java | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/org/traccar/protocol/H02ProtocolDecoder.java b/src/org/traccar/protocol/H02ProtocolDecoder.java index 6ab997b86..b11a1e0e6 100644 --- a/src/org/traccar/protocol/H02ProtocolDecoder.java +++ b/src/org/traccar/protocol/H02ProtocolDecoder.java @@ -142,6 +142,7 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { position.setCourse((buf.readUnsignedByte() & 0x0f) * 100.0 + BcdUtil.readInteger(buf, 2)); processStatus(position, buf.readUnsignedInt()); + return position; } @@ -151,7 +152,7 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { .number("(d+),") // imei .expression("[^,]+,") .any() - .number("(?:(dd)(dd)(dd))?,") // time + .number("(?:(dd)(dd)(dd))?,") // time (hhmmss) .expression("([AV])?,") // validity .groupBegin() .number("-(d+)-(d+.d+),") // latitude @@ -170,7 +171,18 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { .number("(?:(dd)(dd)(dd))?") // date (ddmmyy) .any() .number(",(x{8})") // status - .expression("(?:#|,.*)") + .groupBegin() + .number(",(d+),") // odometer + .number("(-?d+),") // temperature + .number("(d+.d+),") // fuel + .number("(-?d+),") // altitude + .number("(x+),") // lac + .number("(x+)#") // cid + .or() + .expression(",.*") + .or() + .text("#") + .groupEnd() .compile(); private static final Pattern PATTERN_NBR = new PatternBuilder() @@ -178,7 +190,7 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { .expression("..,") // manufacturer .number("(d+),") // imei .text("NBR,") - .number("(dd)(dd)(dd),") // time + .number("(dd)(dd)(dd),") // time (hhmmss) .number("(d+),") // mcc .number("(d+),") // mnc .number("d+,") // gsm delay time @@ -240,6 +252,16 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { processStatus(position, parser.nextLong(16)); + if (parser.hasNext(6)) { + position.set(Position.KEY_ODOMETER, parser.nextInt()); + position.set(Position.PREFIX_TEMP + 1, parser.nextInt()); + position.set(Position.KEY_FUEL_LEVEL, parser.nextDouble()); + + position.setAltitude(parser.nextInt()); + + position.setNetwork(new Network(CellTower.fromLacCid(parser.nextInt(16), parser.nextInt(16)))); + } + return position; } |