From c74cded271c4e16c6fe122692de6b253b244d211 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 2 Oct 2016 20:48:20 +1300 Subject: Fix some issues in JT600 decoder --- src/org/traccar/helper/Checksum.java | 9 ++--- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 43 ++++++---------------- 2 files changed, 15 insertions(+), 37 deletions(-) diff --git a/src/org/traccar/helper/Checksum.java b/src/org/traccar/helper/Checksum.java index dde174545..815962be0 100644 --- a/src/org/traccar/helper/Checksum.java +++ b/src/org/traccar/helper/Checksum.java @@ -195,12 +195,11 @@ public final class Checksum { } public static int xor(String string) { - byte[] bytes = string.getBytes(StandardCharsets.US_ASCII); - byte sum = 0; - for (byte b : bytes) { - sum ^= b; + byte checksum = 0; + for (byte b : string.getBytes(StandardCharsets.US_ASCII)) { + checksum ^= b; } - return sum; + return checksum; } public static String nmea(String msg) { diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index 6d066299a..e42ae5e09 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -21,7 +21,6 @@ import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; import org.traccar.helper.BcdUtil; -import org.traccar.helper.Checksum; import org.traccar.helper.DateBuilder; import org.traccar.helper.Parser; import org.traccar.helper.PatternBuilder; @@ -219,8 +218,8 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { .number("(d+),") // lac .number("(d+),") // gsm signal .number("(d+),") // odometer - .number("(d+),?") // serial number - .number("(xx)").optional() // checksum + .number("(d+)") // serial number + .number(",(xx)").optional() // checksum .any() .compile(); @@ -236,7 +235,7 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { return null; } - String messageType = parser.next(); + String type = parser.next(); Position position = new Position(); position.setProtocol(getProtocolName()); @@ -263,30 +262,15 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_ODOMETER, parser.nextLong() * 1000); position.set(Position.KEY_INDEX, parser.nextInt()); - switch (messageType) { - case "U01": - case "U02": - case "U03": - // support protocol with check sum - if (parser.hasNext(2)) { - int checkSum = parser.nextInt(16); - int calculatedCheckSum = Checksum.xor(sentence.substring(1, sentence.length() - 3)); - if (checkSum == calculatedCheckSum) { - sendResponse(channel, "(S39)"); - return position; - } else { - return null; - } - // support protocol without check sum - } else { - return position; - } - case "U06": - sendResponse(channel, "(S20)"); - return position; - default: - return null; + if (channel != null) { + if (type.equals("U01") || type.equals("U02") || type.equals("U03")) { + channel.write("(S39)"); + } else if (type.equals("U06")) { + channel.write("(S20)"); + } } + + return position; } @Override @@ -310,9 +294,4 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { return null; } - private void sendResponse(Channel channel, String response) { - if (channel != null) { - channel.write(ChannelBuffers.copiedBuffer(response, StandardCharsets.US_ASCII)); - } - } } -- cgit v1.2.3