diff options
Diffstat (limited to 'src/org/traccar/protocol/Mta6ProtocolDecoder.java')
-rw-r--r-- | src/org/traccar/protocol/Mta6ProtocolDecoder.java | 83 |
1 files changed, 32 insertions, 51 deletions
diff --git a/src/org/traccar/protocol/Mta6ProtocolDecoder.java b/src/org/traccar/protocol/Mta6ProtocolDecoder.java index 749c01393..108e74963 100644 --- a/src/org/traccar/protocol/Mta6ProtocolDecoder.java +++ b/src/org/traccar/protocol/Mta6ProtocolDecoder.java @@ -34,6 +34,7 @@ import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.ChannelBufferTools; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Mta6ProtocolDecoder extends BaseProtocolDecoder { @@ -128,7 +129,7 @@ public class Mta6ProtocolDecoder extends BaseProtocolDecoder { while (buf.readable()) { Position position = new Position(); position.setDeviceId(deviceId); - StringBuilder extendedInfo = new StringBuilder("<protocol>mta6</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("mta6"); short flags = buf.readUnsignedByte(); @@ -162,50 +163,40 @@ public class Mta6ProtocolDecoder extends BaseProtocolDecoder { } if (checkBit(flags, 3)) { - extendedInfo.append("<milage>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", buf.readUnsignedShort()); } if (checkBit(flags, 4)) { - extendedInfo.append("<fuel1>").append(buf.readUnsignedInt()).append("</fuel1>"); - extendedInfo.append("<fuel2>").append(buf.readUnsignedInt()).append("</fuel2>"); - extendedInfo.append("<hours1>").append(buf.readUnsignedShort()).append("</hours1>"); - extendedInfo.append("<hours2>").append(buf.readUnsignedShort()).append("</hours2>"); + extendedInfo.set("fuel1", buf.readUnsignedInt()); + extendedInfo.set("fuel2", buf.readUnsignedInt()); + extendedInfo.set("hours1", buf.readUnsignedShort()); + extendedInfo.set("hours2", buf.readUnsignedShort()); } if (checkBit(flags, 5)) { - extendedInfo.append("<adc1>").append(buf.readUnsignedShort() & 0x03ff).append("</adc1>"); - extendedInfo.append("<adc2>").append(buf.readUnsignedShort() & 0x03ff).append("</adc2>"); - extendedInfo.append("<adc3>").append(buf.readUnsignedShort() & 0x03ff).append("</adc3>"); - extendedInfo.append("<adc4>").append(buf.readUnsignedShort() & 0x03ff).append("</adc4>"); + extendedInfo.set("adc1", buf.readUnsignedShort() & 0x03ff); + extendedInfo.set("adc2", buf.readUnsignedShort() & 0x03ff); + extendedInfo.set("adc3", buf.readUnsignedShort() & 0x03ff); + extendedInfo.set("adc4", buf.readUnsignedShort() & 0x03ff); } if (checkBit(flags, 6)) { - extendedInfo.append("<temperature>"); - extendedInfo.append(buf.readByte()); - extendedInfo.append("</temperature>"); + extendedInfo.set("temperature", buf.readByte()); buf.getUnsignedByte(buf.readerIndex()); // control (>> 4) - extendedInfo.append("<sensor>"); - extendedInfo.append(buf.readUnsignedShort() & 0x0fff); - extendedInfo.append("</sensor>"); + extendedInfo.set("sensor", buf.readUnsignedShort() & 0x0fff); buf.readUnsignedShort(); // old sensor state (& 0x0fff) } if (checkBit(flags, 7)) { - extendedInfo.append("<battery>"); - extendedInfo.append(buf.getUnsignedByte(buf.readerIndex()) >> 2); - extendedInfo.append("</battery>"); + extendedInfo.set("battery", buf.getUnsignedByte(buf.readerIndex()) >> 2); position.setPower((double) (buf.readUnsignedShort() & 0x03ff)); buf.readByte(); // microcontroller temperature - extendedInfo.append("<gsm>"); - extendedInfo.append((buf.getUnsignedByte(buf.readerIndex()) >> 4) & 0x07); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", (buf.getUnsignedByte(buf.readerIndex()) >> 4) & 0x07); int satellites = buf.readUnsignedByte() & 0x0f; position.setValid(satellites >= 3); - extendedInfo.append("<satellites>").append(satellites).append("</satellites>"); + extendedInfo.set("satellites", satellites); } position.setExtendedInfo(extendedInfo.toString()); @@ -220,7 +211,7 @@ public class Mta6ProtocolDecoder extends BaseProtocolDecoder { private Position parseFormatA1(ChannelBuffer buf, long deviceId) { Position position = new Position(); position.setDeviceId(deviceId); - StringBuilder extendedInfo = new StringBuilder("<protocol>mta6can</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("mta6"); short flags = buf.readUnsignedByte(); @@ -246,56 +237,46 @@ public class Mta6ProtocolDecoder extends BaseProtocolDecoder { position.setAltitude((double) buf.readUnsignedShort()); position.setSpeed((double) buf.readUnsignedByte()); position.setCourse((double) buf.readByte()); - extendedInfo.append("<milage>"); - extendedInfo.append(new FloatReader().readFloat(buf)); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", new FloatReader().readFloat(buf)); } if (checkBit(flags, 1)) { new FloatReader().readFloat(buf); // fuel consumtion - extendedInfo.append("<hours>").append(new FloatReader().readFloat(buf)).append("</hours>"); - extendedInfo.append("<tank>").append(buf.readUnsignedByte() * 0.4).append("</tank>"); + extendedInfo.set("hours", new FloatReader().readFloat(buf)); + extendedInfo.set("tank", buf.readUnsignedByte() * 0.4); } if (checkBit(flags, 2)) { - extendedInfo.append("<engine>").append(buf.readUnsignedShort() * 0.125).append("</engine>"); - extendedInfo.append("<pedals>").append(buf.readUnsignedByte()).append("</pedals>"); - extendedInfo.append("<temperature>").append(buf.readUnsignedByte() - 40).append("</temperature>"); + extendedInfo.set("engine", buf.readUnsignedShort() * 0.125); + extendedInfo.set("pedals", buf.readUnsignedByte()); + extendedInfo.set("temperature", buf.readUnsignedByte() - 40); buf.readUnsignedShort(); // service milage } if (checkBit(flags, 3)) { - extendedInfo.append("<fuel>").append(buf.readUnsignedShort()).append("</fuel>"); - extendedInfo.append("<adc2>").append(buf.readUnsignedShort()).append("</adc2>"); - extendedInfo.append("<adc3>").append(buf.readUnsignedShort()).append("</adc3>"); - extendedInfo.append("<adc4>").append(buf.readUnsignedShort()).append("</adc4>"); + extendedInfo.set("fuel", buf.readUnsignedShort()); + extendedInfo.set("adc2", buf.readUnsignedShort()); + extendedInfo.set("adc3", buf.readUnsignedShort()); + extendedInfo.set("adc4", buf.readUnsignedShort()); } if (checkBit(flags, 4)) { - extendedInfo.append("<temperature>"); - extendedInfo.append(buf.readByte()); - extendedInfo.append("</temperature>"); + extendedInfo.set("temperature", buf.readByte()); buf.getUnsignedByte(buf.readerIndex()); // control (>> 4) - extendedInfo.append("<sensor>"); - extendedInfo.append(buf.readUnsignedShort() & 0x0fff); - extendedInfo.append("</sensor>"); + extendedInfo.set("sensor", buf.readUnsignedShort() & 0x0fff); buf.readUnsignedShort(); // old sensor state (& 0x0fff) } if (checkBit(flags, 5)) { - extendedInfo.append("<battery>"); - extendedInfo.append(buf.getUnsignedByte(buf.readerIndex()) >> 2); - extendedInfo.append("</battery>"); + extendedInfo.set("battery", buf.getUnsignedByte(buf.readerIndex()) >> 2); position.setPower((double) (buf.readUnsignedShort() & 0x03ff)); buf.readByte(); // microcontroller temperature - extendedInfo.append("<gsm>"); - extendedInfo.append(buf.getUnsignedByte(buf.readerIndex()) >> 5); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", buf.getUnsignedByte(buf.readerIndex()) >> 5); int satellites = buf.readUnsignedByte() & 0x1f; position.setValid(satellites >= 3); - extendedInfo.append("<satellites>").append(satellites).append("</satellites>"); + extendedInfo.set("satellites", satellites); } // TODO: process other data |