diff --git a/src/main/java/org/traccar/protocol/Jt808ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Jt808ProtocolDecoder.java index 72362a3c1..99db8c4c2 100644 --- a/src/main/java/org/traccar/protocol/Jt808ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Jt808ProtocolDecoder.java @@ -83,6 +83,7 @@ public class Jt808ProtocolDecoder extends BaseProtocolDecoder { public static final int MSG_REPORT_TEXT_MESSAGE = 0x6006; public static final int MSG_CONFIGURATION_PARAMETERS = 0x8103; public static final int MSG_COMMAND_RESPONSE = 0x0701; + public static final int MSG_TEXT_MESSAGE_RESPONSE = 0x1300; public static final int MSG_DRIVER_IDENTITY = 0x0702; public static final int MSG_VIDEO_REQUEST = 0x9101; public static final int MSG_VIDEO_CONTROL = 0x9102; @@ -364,6 +365,22 @@ public class Jt808ProtocolDecoder extends BaseProtocolDecoder { return position; + } else if (type == MSG_TEXT_MESSAGE_RESPONSE) { + + Position position = new Position(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); + + getLastLocation(position, null); + + int bodyLength = BitUtil.to(attribute, 10); + + buf.readUnsignedShort(); // response serial number + + String result = buf.readCharSequence(bodyLength - 2, StandardCharsets.UTF_16BE).toString().trim(); + position.set(Position.KEY_RESULT, result); + + return position; + } else if (type == MSG_HEARTBEAT) { sendGeneralResponse(channel, remoteAddress, id, type, index); diff --git a/src/test/java/org/traccar/protocol/Jt808ProtocolDecoderTest.java b/src/test/java/org/traccar/protocol/Jt808ProtocolDecoderTest.java index a0db92482..9e47aaea4 100644 --- a/src/test/java/org/traccar/protocol/Jt808ProtocolDecoderTest.java +++ b/src/test/java/org/traccar/protocol/Jt808ProtocolDecoderTest.java @@ -252,6 +252,10 @@ public class Jt808ProtocolDecoderTest extends ProtocolTest { "283734303139303331313138352c312c3030312c454c4f434b2c332c35323934333929"), Position.KEY_RESULT, "(740190311185,1,001,ELOCK,3,529439)"); + verifyAttribute(decoder, binary( + "7e13000012045450091546010900000053006500740020004f004b0021000d197e"), + Position.KEY_RESULT, "Set OK!"); + verifyPosition(decoder, binary( "7e55028436740190311185091607200239270613212607536108630000170a000000014600005ded05e203000000000b010d0c06005b003e00ab0a0302dc65100100a37e"));