From 8e69216a16915b5d9ac968928bb01d895e6993dc Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 16 Nov 2018 11:47:57 +1300 Subject: Support XRB 28 command responses --- src/org/traccar/protocol/Xrb28ProtocolDecoder.java | 49 ++++++++++++++-------- 1 file changed, 32 insertions(+), 17 deletions(-) (limited to 'src/org/traccar/protocol') diff --git a/src/org/traccar/protocol/Xrb28ProtocolDecoder.java b/src/org/traccar/protocol/Xrb28ProtocolDecoder.java index eb72dcd1b..9c5bc741a 100644 --- a/src/org/traccar/protocol/Xrb28ProtocolDecoder.java +++ b/src/org/traccar/protocol/Xrb28ProtocolDecoder.java @@ -88,30 +88,45 @@ public class Xrb28ProtocolDecoder extends BaseProtocolDecoder { } } - Parser parser = new Parser(PATTERN, sentence); - if (!parser.matches()) { - return null; - } + if (type.matches("R0|L0|L1|S4|S5|S6|S7|V0|G0|K0|I0|M0")) { + + Position position = new Position(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); - Position position = new Position(getProtocolName()); - position.setDeviceId(deviceSession.getDeviceId()); + getLastLocation(position, null); - DateBuilder dateBuilder = new DateBuilder() - .setTime(parser.nextInt(), parser.nextInt(), parser.nextInt()); + position.set(Position.KEY_RESULT, sentence.substring(25, sentence.length() - 1)); - position.setValid(parser.next().equals("A")); - position.setLatitude(parser.nextCoordinate()); - position.setLongitude(parser.nextCoordinate()); + return position; + + } else { + + Parser parser = new Parser(PATTERN, sentence); + if (!parser.matches()) { + return null; + } - position.set(Position.KEY_SATELLITES, parser.nextInt()); - position.set(Position.KEY_HDOP, parser.nextDouble()); + Position position = new Position(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); - dateBuilder.setDateReverse(parser.nextInt(), parser.nextInt(), parser.nextInt()); - position.setTime(dateBuilder.getDate()); + DateBuilder dateBuilder = new DateBuilder() + .setTime(parser.nextInt(), parser.nextInt(), parser.nextInt()); - position.setAltitude(parser.nextDouble()); + position.setValid(parser.next().equals("A")); + position.setLatitude(parser.nextCoordinate()); + position.setLongitude(parser.nextCoordinate()); - return position; + position.set(Position.KEY_SATELLITES, parser.nextInt()); + position.set(Position.KEY_HDOP, parser.nextDouble()); + + dateBuilder.setDateReverse(parser.nextInt(), parser.nextInt(), parser.nextInt()); + position.setTime(dateBuilder.getDate()); + + position.setAltitude(parser.nextDouble()); + + return position; + + } } } -- cgit v1.2.3