diff options
Diffstat (limited to 'src/org/traccar/protocol')
9 files changed, 83 insertions, 35 deletions
diff --git a/src/org/traccar/protocol/AplicomProtocolDecoder.java b/src/org/traccar/protocol/AplicomProtocolDecoder.java index 154451b5b..c1d7ab087 100644 --- a/src/org/traccar/protocol/AplicomProtocolDecoder.java +++ b/src/org/traccar/protocol/AplicomProtocolDecoder.java @@ -486,7 +486,7 @@ public class AplicomProtocolDecoder extends BaseProtocolDecoder { position.set("vehicleSpeed", buf.readUnsignedShort() / 256.0); break; case 0x03: - position.set("axleLoadSum", buf.readUnsignedShort() * 2); + position.set(Position.KEY_AXLE_WEIGHT, buf.readUnsignedShort() * 2); break; case 0x04: position.set("tyrePressure", buf.readUnsignedByte() * 10); diff --git a/src/org/traccar/protocol/EskyProtocolDecoder.java b/src/org/traccar/protocol/EskyProtocolDecoder.java index d524224af..b509d821f 100644 --- a/src/org/traccar/protocol/EskyProtocolDecoder.java +++ b/src/org/traccar/protocol/EskyProtocolDecoder.java @@ -33,7 +33,7 @@ public class EskyProtocolDecoder extends BaseProtocolDecoder { } private static final Pattern PATTERN = new PatternBuilder() - .text("EO;") // header + .expression("..;") // header .number("d+;") // index .number("(d+);") // imei .text("R;") // data type diff --git a/src/org/traccar/protocol/Gl200TextProtocolDecoder.java b/src/org/traccar/protocol/Gl200TextProtocolDecoder.java index d7468e71d..9429cff2f 100644 --- a/src/org/traccar/protocol/Gl200TextProtocolDecoder.java +++ b/src/org/traccar/protocol/Gl200TextProtocolDecoder.java @@ -552,7 +552,7 @@ public class Gl200TextProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_IGNITION, Integer.parseInt(values[index++]) > 0); } if (BitUtil.check(reportMask, 2)) { - index += 1; // total distance + position.set("totalVehicleDistance", values[index++]); } if (BitUtil.check(reportMask, 3)) { position.set("totalFuelConsumption", Double.parseDouble(values[index++])); @@ -566,14 +566,14 @@ public class Gl200TextProtocolDecoder extends BaseProtocolDecoder { if (BitUtil.check(reportMask, 6)) { position.set(Position.KEY_COOLANT_TEMP, Integer.parseInt(values[index++])); } - if (BitUtil.check(reportMask, 7)) { - index += 1; // fuel consumption + if (BitUtil.check(reportMask, 7) && !values[index++].isEmpty()) { + position.set(Position.KEY_FUEL_CONSUMPTION, Double.parseDouble(values[index - 1].substring(1))); } - if (BitUtil.check(reportMask, 8)) { - index += 1; // fuel level + if (BitUtil.check(reportMask, 8) && !values[index++].isEmpty()) { + position.set(Position.KEY_FUEL_LEVEL, Double.parseDouble(values[index - 1].substring(1))); } - if (BitUtil.check(reportMask, 9)) { - index += 1; // range + if (BitUtil.check(reportMask, 9) && !values[index++].isEmpty()) { + position.set("range", Long.parseLong(values[index - 1]) * 100); } if (BitUtil.check(reportMask, 10) && !values[index++].isEmpty()) { position.set(Position.KEY_THROTTLE, Integer.parseInt(values[index - 1])); @@ -582,34 +582,34 @@ public class Gl200TextProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_HOURS, Double.parseDouble(values[index++])); } if (BitUtil.check(reportMask, 12)) { - index += 1; // driving time + position.set("drivingHours", Double.parseDouble(values[index++])); } if (BitUtil.check(reportMask, 13)) { - index += 1; // idle time + position.set("idleHours", Double.parseDouble(values[index++])); } - if (BitUtil.check(reportMask, 14)) { - index += 1; // idle fuel + if (BitUtil.check(reportMask, 14) && !values[index++].isEmpty()) { + position.set("idleFuelConsumption", Double.parseDouble(values[index - 1])); } - if (BitUtil.check(reportMask, 15)) { - index += 1; // axle weight + if (BitUtil.check(reportMask, 15) && !values[index++].isEmpty()) { + position.set(Position.KEY_AXLE_WEIGHT, Integer.parseInt(values[index - 1])); } - if (BitUtil.check(reportMask, 16)) { - index += 1; // tachograph info + if (BitUtil.check(reportMask, 16) && !values[index++].isEmpty()) { + position.set("tachographInfo", Integer.parseInt(values[index - 1])); } - if (BitUtil.check(reportMask, 17)) { - index += 1; // indicators + if (BitUtil.check(reportMask, 17) && !values[index++].isEmpty()) { + position.set("indicators", Integer.parseInt(values[index - 1])); } - if (BitUtil.check(reportMask, 18)) { - index += 1; // lights + if (BitUtil.check(reportMask, 18) && !values[index++].isEmpty()) { + position.set("lights", Integer.parseInt(values[index - 1])); } - if (BitUtil.check(reportMask, 19)) { - index += 1; // doors + if (BitUtil.check(reportMask, 19) && !values[index++].isEmpty()) { + position.set("doors", Integer.parseInt(values[index - 1])); } - if (BitUtil.check(reportMask, 20)) { - index += 1; // total vehicle overspeed time + if (BitUtil.check(reportMask, 20) && !values[index++].isEmpty()) { + position.set("vehicleOverspeed", Double.parseDouble(values[index - 1])); } - if (BitUtil.check(reportMask, 21)) { - index += 1; // total engine overspeed time + if (BitUtil.check(reportMask, 21) && !values[index++].isEmpty()) { + position.set("engineOverspeed", Double.parseDouble(values[index - 1])); } if (BitUtil.check(reportMask, 29)) { index += 1; // expansion diff --git a/src/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/org/traccar/protocol/Gt06ProtocolDecoder.java index 2c1468250..37f64ee02 100644 --- a/src/org/traccar/protocol/Gt06ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gt06ProtocolDecoder.java @@ -118,6 +118,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { case MSG_GPS_LBS_EXTEND: case MSG_GPS_2: case MSG_FENCE_SINGLE: + case MSG_FENCE_MULTI: return true; default: return false; @@ -135,6 +136,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { case MSG_GPS_LBS_STATUS_3: case MSG_GPS_2: case MSG_FENCE_SINGLE: + case MSG_FENCE_MULTI: case MSG_LBS_ALARM: case MSG_LBS_ADDRESS: return true; @@ -554,14 +556,14 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { getLastLocation(position, dateBuilder.getDate()); int mcc = buf.readUnsignedShort(); - int mnc = buf.readUnsignedByte(); + int mnc = BitUtil.check(mcc, 15) ? buf.readUnsignedShort() : buf.readUnsignedByte(); Network network = new Network(); for (int i = 0; i < 7; i++) { int lac = longFormat ? buf.readInt() : buf.readUnsignedShort(); int cid = longFormat ? (int) buf.readLong() : buf.readUnsignedMedium(); int rssi = -buf.readUnsignedByte(); if (lac > 0) { - network.addCellTower(CellTower.from(mcc, mnc, lac, cid, rssi)); + network.addCellTower(CellTower.from(BitUtil.to(mcc, 15), mnc, lac, cid, rssi)); } } @@ -630,6 +632,10 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { buf.readUnsignedShort(); } + if (type == MSG_GPS_LBS_STATUS_3 || type == MSG_FENCE_MULTI) { + position.set(Position.KEY_GEOFENCE, buf.readUnsignedByte()); + } + sendResponse(channel, false, type, null); return position; diff --git a/src/org/traccar/protocol/IntellitracProtocolDecoder.java b/src/org/traccar/protocol/IntellitracProtocolDecoder.java index 8f4e4c0d6..4a526376e 100644 --- a/src/org/traccar/protocol/IntellitracProtocolDecoder.java +++ b/src/org/traccar/protocol/IntellitracProtocolDecoder.java @@ -109,7 +109,7 @@ public class IntellitracProtocolDecoder extends BaseProtocolDecoder { position.set(Position.PREFIX_TEMP + 1, parser.nextInt(0)); position.set("chargerPressure", parser.nextInt(0)); position.set("tpl", parser.nextInt(0)); - position.set("axle", parser.nextInt(0)); + position.set(Position.KEY_AXLE_WEIGHT, parser.nextInt(0)); position.set(Position.KEY_OBD_ODOMETER, parser.nextInt(0)); return position; diff --git a/src/org/traccar/protocol/TotemFrameDecoder.java b/src/org/traccar/protocol/TotemFrameDecoder.java index 6c9b14559..70dc5db3b 100644 --- a/src/org/traccar/protocol/TotemFrameDecoder.java +++ b/src/org/traccar/protocol/TotemFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton@traccar.org) + * Copyright 2013 - 2017 Anton Tananaev (anton@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,8 +42,7 @@ public class TotemFrameDecoder extends FrameDecoder { int length; - int separatorIndex = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) '|'); - if (separatorIndex > 0 && separatorIndex - beginIndex > 19) { + if (buf.getByte(buf.readerIndex() + 2) == (byte) '0') { length = Integer.parseInt(buf.toString(buf.readerIndex() + 2, 4, StandardCharsets.US_ASCII)); } else { length = Integer.parseInt(buf.toString(buf.readerIndex() + 2, 2, StandardCharsets.US_ASCII), 16); diff --git a/src/org/traccar/protocol/TytanProtocolDecoder.java b/src/org/traccar/protocol/TytanProtocolDecoder.java index 0ae669784..de0330250 100644 --- a/src/org/traccar/protocol/TytanProtocolDecoder.java +++ b/src/org/traccar/protocol/TytanProtocolDecoder.java @@ -84,7 +84,7 @@ public class TytanProtocolDecoder extends BaseProtocolDecoder { } break; case 28: - position.set("weight", buf.readUnsignedShort()); + position.set(Position.KEY_AXLE_WEIGHT, buf.readUnsignedShort()); buf.readUnsignedByte(); break; case 90: diff --git a/src/org/traccar/protocol/XirgoProtocol.java b/src/org/traccar/protocol/XirgoProtocol.java index 9d7475308..13aa8fde1 100644 --- a/src/org/traccar/protocol/XirgoProtocol.java +++ b/src/org/traccar/protocol/XirgoProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import org.jboss.netty.handler.codec.string.StringEncoder; import org.traccar.BaseProtocol; import org.traccar.CharacterDelimiterFrameDecoder; import org.traccar.TrackerServer; +import org.traccar.model.Command; import java.util.List; @@ -30,6 +31,8 @@ public class XirgoProtocol extends BaseProtocol { public XirgoProtocol() { super("xirgo"); + setSupportedDataCommands( + Command.TYPE_OUTPUT_CONTROL); } @Override @@ -40,6 +43,7 @@ public class XirgoProtocol extends BaseProtocol { pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1024, "##")); pipeline.addLast("stringEncoder", new StringEncoder()); pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("objectEncoder", new XirgoProtocolEncoder()); pipeline.addLast("objectDecoder", new XirgoProtocolDecoder(XirgoProtocol.this)); } }); @@ -48,6 +52,7 @@ public class XirgoProtocol extends BaseProtocol { protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("stringEncoder", new StringEncoder()); pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("objectEncoder", new XirgoProtocolEncoder()); pipeline.addLast("objectDecoder", new XirgoProtocolDecoder(XirgoProtocol.this)); } }); diff --git a/src/org/traccar/protocol/XirgoProtocolEncoder.java b/src/org/traccar/protocol/XirgoProtocolEncoder.java new file mode 100644 index 000000000..fde531831 --- /dev/null +++ b/src/org/traccar/protocol/XirgoProtocolEncoder.java @@ -0,0 +1,38 @@ +/* + * Copyright 2017 Anton Tananaev (anton@traccar.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.protocol; + +import org.traccar.StringProtocolEncoder; +import org.traccar.helper.Log; +import org.traccar.model.Command; + +public class XirgoProtocolEncoder extends StringProtocolEncoder { + + @Override + protected Object encodeCommand(Command command) { + + switch (command.getType()) { + case Command.TYPE_OUTPUT_CONTROL: + return String.format("+XT:7005,%d,1", command.getInteger(Command.KEY_DATA) + 1); + default: + Log.warning(new UnsupportedOperationException(command.getType())); + break; + } + + return null; + } + +} |