From bf4ec5383e97bb17edf458200183415ce278a6aa Mon Sep 17 00:00:00 2001 From: yedajiang44 <602830483@qq.com> Date: Fri, 24 Sep 2021 16:44:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D0x1504=E8=BD=A6=E8=BE=86?= =?UTF-8?q?=E8=A1=8C=E9=A9=B6=E8=AE=B0=E5=BD=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JT809_0x1500_0x1504Test.cs | 24 +++++++++---------- src/JT809.Protocol/JT809.Protocol.xml | 1 + .../SubMessageBody/JT809_0x1500_0x1504.cs | 21 ++++++++-------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1500_0x1504Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1500_0x1504Test.cs index 7b70c5f..a5ad64d 100644 --- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1500_0x1504Test.cs +++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1500_0x1504Test.cs @@ -12,7 +12,7 @@ using JT809.Protocol.Internal; namespace JT809.Protocol.Test.JT809SubMessageBody { - public class JT809_0x1500_0x1504Test + public class JT809_0x1500_0x1504Test { private JT809Serializer JT809Serializer = new JT809Serializer(); private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 }); @@ -21,21 +21,19 @@ namespace JT809.Protocol.Test.JT809SubMessageBody { JT809_0x1500_0x1504 jT809_0x1500_0x1504 = new JT809_0x1500_0x1504 { - CommandType= JT809CommandType.记录仪唯一性编号, - TraveldataInfo="123456", + TraveldataInfo = "557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), }; var hex = JT809Serializer.Serialize(jT809_0x1500_0x1504).ToHexString(); - Assert.Equal("0700000006313233343536", hex); + Assert.Equal("0000001B557AC40014002003251026012003251026010000123400123456A9", hex); } [Fact] public void Test2() { - var bytes = "0700000006313233343536".ToHexBytes(); + var bytes = "0000001B557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(); JT809_0x1500_0x1504 jT809_0x1500_0x1504 = JT809Serializer.Deserialize(bytes); - Assert.Equal(JT809CommandType.记录仪唯一性编号, jT809_0x1500_0x1504.CommandType); - Assert.Equal("123456", jT809_0x1500_0x1504.TraveldataInfo); - Assert.Equal(6u, jT809_0x1500_0x1504.TraveldataLength); + Assert.Equal("557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), jT809_0x1500_0x1504.TraveldataInfo); + Assert.Equal(0x1bu, jT809_0x1500_0x1504.TraveldataLength); } [Fact] @@ -44,22 +42,22 @@ namespace JT809.Protocol.Test.JT809SubMessageBody JT809_0x1500_0x1504 jT809_0x1500_0x1504 = new JT809_0x1500_0x1504 { CommandType = JT809CommandType.记录仪唯一性编号, - TraveldataInfo = "123456", + TraveldataInfo = "557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), SourceMsgSn = 1, SourceDataType = 12, }; var hex = JT809_2019_Serializer.Serialize(jT809_0x1500_0x1504).ToHexString(); - Assert.Equal("000C000000010700000006313233343536", hex); + Assert.Equal("000C00000001070000001B557AC40014002003251026012003251026010000123400123456A9", hex); } [Fact] public void Test_2019_2() { - var bytes = "000C000000010700000006313233343536".ToHexBytes(); + var bytes = "000C00000001070000001B557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(); JT809_0x1500_0x1504 jT809_0x1500_0x1504 = JT809_2019_Serializer.Deserialize(bytes); Assert.Equal(JT809CommandType.记录仪唯一性编号, jT809_0x1500_0x1504.CommandType); - Assert.Equal("123456", jT809_0x1500_0x1504.TraveldataInfo); - Assert.Equal(6u, jT809_0x1500_0x1504.TraveldataLength); + Assert.Equal("557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), jT809_0x1500_0x1504.TraveldataInfo); + Assert.Equal(0x1bu, jT809_0x1500_0x1504.TraveldataLength); Assert.Equal(1u, jT809_0x1500_0x1504.SourceMsgSn); Assert.Equal(12, jT809_0x1500_0x1504.SourceDataType); } diff --git a/src/JT809.Protocol/JT809.Protocol.xml b/src/JT809.Protocol/JT809.Protocol.xml index fbd8510..cdcd9c9 100644 --- a/src/JT809.Protocol/JT809.Protocol.xml +++ b/src/JT809.Protocol/JT809.Protocol.xml @@ -2912,6 +2912,7 @@ 车辆行驶记录信息 + 19056应答帧元数据 diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1500_0x1504.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1500_0x1504.cs index 5dd74bc..caf7946 100644 --- a/src/JT809.Protocol/SubMessageBody/JT809_0x1500_0x1504.cs +++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1500_0x1504.cs @@ -12,7 +12,7 @@ namespace JT809.Protocol.SubMessageBody /// 子业务类型标识:UP_CTRL_MSG_TAKE_TRAVEL_ACK /// 描述:下级平台应答上级平台下发的"上报车辆行驶记录请求"消息,将车辆行驶记录数据上传至上级平台 /// - public class JT809_0x1500_0x1504:JT809SubBodies, IJT809MessagePackFormatter, IJT809Analyze, IJT809_2019_Version + public class JT809_0x1500_0x1504 : JT809SubBodies, IJT809MessagePackFormatter, IJT809Analyze, IJT809_2019_Version { public override ushort SubMsgId => JT809SubBusinessType.上报车辆行驶记录应答消息.ToUInt16Value(); @@ -35,8 +35,9 @@ namespace JT809.Protocol.SubMessageBody public uint TraveldataLength { get; set; } /// /// 车辆行驶记录信息 + /// 19056应答帧元数据 /// - public string TraveldataInfo { get; set; } + public byte[] TraveldataInfo { get; set; } public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) { @@ -47,14 +48,14 @@ namespace JT809.Protocol.SubMessageBody writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString()); value.SourceMsgSn = reader.ReadUInt32(); writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn); + value.CommandType = (JT809CommandType)reader.ReadByte(); + writer.WriteString($"[{value.CommandType.ToByteValue()}]命令字", value.CommandType.ToString()); } - value.CommandType = (JT809CommandType)reader.ReadByte(); - writer.WriteString($"[{value.CommandType.ToByteValue()}]命令字", value.CommandType.ToString()) ; value.TraveldataLength = reader.ReadUInt32(); writer.WriteNumber($"[{value.TraveldataLength.ReadNumber()}]车辆行驶记录数据体长度", value.TraveldataLength); var virtualHex = reader.ReadVirtualArray((int)value.TraveldataLength); - value.TraveldataInfo = reader.ReadString((int)value.TraveldataLength); - writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆行驶记录信息", value.TraveldataInfo); + value.TraveldataInfo = reader.ReadArray((int)value.TraveldataLength).ToArray(); + writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆行驶记录信息", value.TraveldataInfo.ToHexString()); } public JT809_0x1500_0x1504 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) @@ -64,10 +65,10 @@ namespace JT809.Protocol.SubMessageBody { value.SourceDataType = reader.ReadUInt16(); value.SourceMsgSn = reader.ReadUInt32(); + value.CommandType = (JT809CommandType)reader.ReadByte(); } - value.CommandType = (JT809CommandType)reader.ReadByte(); value.TraveldataLength = reader.ReadUInt32(); - value.TraveldataInfo = reader.ReadString((int)value.TraveldataLength); + value.TraveldataInfo = reader.ReadArray((int)value.TraveldataLength).ToArray(); return value; } @@ -77,11 +78,11 @@ namespace JT809.Protocol.SubMessageBody { writer.WriteUInt16(value.SourceDataType); writer.WriteUInt32(value.SourceMsgSn); + writer.WriteByte((byte)value.CommandType); } - writer.WriteByte((byte)value.CommandType); // 先计算内容长度(汉字为两个字节) writer.Skip(4, out int lengthPosition); - writer.WriteString(value.TraveldataInfo); + writer.WriteArray(value.TraveldataInfo); writer.WriteInt32Return(writer.GetCurrentPosition() - lengthPosition - 4, lengthPosition); } }