From 0cf2dcf20a75fcd2050da636105de2d655a763a3 Mon Sep 17 00:00:00 2001 From: "SmallChi(Koike)" <564952747@qq.com> Date: Tue, 28 Jul 2020 14:44:28 +0800 Subject: [PATCH] =?UTF-8?q?1.=E9=80=9A=E8=BF=87=E5=A4=A7=E5=85=84=E5=BC=9F?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E7=9A=84809=E7=9A=842019=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=9A=841200=E4=B8=8B=E7=9A=841205=E5=92=8C1206=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E6=95=B0=E6=8D=AE=E8=BF=9B=E8=A1=8C=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=202.=E5=AE=8C=E5=96=84=E4=B8=80=E4=B8=8B9200?= =?UTF-8?q?=5F9201=E7=9A=84=E5=8D=8F=E8=AE=AE=203.=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E5=8D=8F=E8=AE=AE=E7=9A=84=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JT809_0x1200_0x1205Test.cs | 45 ++++++++++++++++++ .../JT809_0x1200_0x1206Test.cs | 45 ++++++++++++++++++ .../JT809_0x9200_0x9201Test.cs | 8 ++++ src/JT809.Protocol/Enums/JT809ErrorCode.cs | 1 + src/JT809.Protocol/JT809SubBodies.cs | 5 ++ .../MessageBody/JT809_0x1200.cs | 47 ++++++++++++++----- .../MessageBody/JT809_0x9200.cs | 37 +++++++++++++-- .../MessagePack/JT809MessagePackReader.cs | 8 +++- .../SubMessageBody/JT809_0x1200_0x1205.cs | 21 ++++++--- .../SubMessageBody/JT809_0x1200_0x1206.cs | 14 +++--- .../SubMessageBody/JT809_0x9200_0x9201.cs | 9 ++++ 11 files changed, 207 insertions(+), 33 deletions(-) create mode 100644 src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs create mode 100644 src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs new file mode 100644 index 0000000..d670ec4 --- /dev/null +++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; +using JT809.Protocol; +using JT809.Protocol.Extensions; +using JT809.Protocol.MessageBody; +using JT809.Protocol.Exceptions; +using JT809.Protocol.SubMessageBody; +using JT809.Protocol.Enums; +using JT809.Protocol.Internal; + +namespace JT809.Protocol.Test.JT809SubMessageBody +{ + public class JT809_0x1200_0x1205Test + { + private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 }); + + /// + /// 1078qq群808432702:大兄弟提供的 + /// + [Fact] + public void Test1() + { + var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD43131313100000000000000000000000000041205040000000400000000001B735D".ToHexBytes(); + JT809Package jT809Package = JT809_2019_Serializer.Deserialize(bytes); + var body = jT809Package.Bodies as JT809_0x1200; + var subBody = body.SubBodies as JT809_0x1200_0x1205; + Assert.NotNull(body); + Assert.NotNull(subBody); + Assert.Equal("测试1111", body.VehicleNo); + Assert.Equal(JT809VehicleColorType.白色, body.VehicleColor); + Assert.Equal(1024u, subBody.SourceDataType); + Assert.Equal(1024u, subBody.SourceMsgSN); + Assert.Equal(0u, subBody.DataLength); + } + + [Fact] + public void Test2() + { + var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD43131313100000000000000000000000000041205040000000400000000001B735D".ToHexBytes(); + string json = JT809_2019_Serializer.Analyze(bytes); + } + } +} diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs new file mode 100644 index 0000000..f7aeb3a --- /dev/null +++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; +using JT809.Protocol; +using JT809.Protocol.Extensions; +using JT809.Protocol.MessageBody; +using JT809.Protocol.Exceptions; +using JT809.Protocol.SubMessageBody; +using JT809.Protocol.Enums; +using JT809.Protocol.Internal; + +namespace JT809.Protocol.Test.JT809SubMessageBody +{ + public class JT809_0x1200_0x1206Test + { + private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 }); + + /// + /// 1078qq群808432702:大兄弟提供的 + /// + [Fact] + public void Test1() + { + var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD431313131000000000000000000000000000412060400000004000000000063895D".ToHexBytes(); + JT809Package jT809Package = JT809_2019_Serializer.Deserialize(bytes); + var body = jT809Package.Bodies as JT809_0x1200; + var subBody = body.SubBodies as JT809_0x1200_0x1206; + Assert.NotNull(body); + Assert.NotNull(subBody); + Assert.Equal("测试1111", body.VehicleNo); + Assert.Equal(JT809VehicleColorType.白色, body.VehicleColor); + Assert.Equal(1024u, subBody.SourceDataType); + Assert.Equal(1024u, subBody.SourceMsgSN); + Assert.Equal(0u, subBody.DataLength); + } + + [Fact] + public void Test2() + { + var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD431313131000000000000000000000000000412060400000004000000000063895D".ToHexBytes(); + string json = JT809_2019_Serializer.Analyze(bytes); + } + } +} diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs index 38c13dd..1128e49 100644 --- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs +++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs @@ -25,6 +25,14 @@ namespace JT809.Protocol.Test.JT809SubMessageBody { var bytes = "5B0000002F000004579200000004570101010000000000000000004EBC924F9201000000070400000004000189DA5D".ToHexBytes(); JT809Package jT809_0X9200_0X9201 = JT809_2019_Serializer.Deserialize(bytes); + var body = jT809_0X9200_0X9201.Bodies as JT809_0x9200; + var subBody = body.SubBodies as JT809_0x9200_0x9201; + Assert.NotNull(body); + Assert.NotNull(subBody); + Assert.Equal(JT809VehicleColorType.其他, body.VehicleColor); + Assert.Equal(JT809_0x9201_Result.审核通过_完成注册, subBody.Result); + Assert.Equal(1024u, subBody.MsgSn); + Assert.Equal(1024u, subBody.DataType); } /// diff --git a/src/JT809.Protocol/Enums/JT809ErrorCode.cs b/src/JT809.Protocol/Enums/JT809ErrorCode.cs index f4f0685..54272fa 100644 --- a/src/JT809.Protocol/Enums/JT809ErrorCode.cs +++ b/src/JT809.Protocol/Enums/JT809ErrorCode.cs @@ -15,6 +15,7 @@ namespace JT809.Protocol.Enums BodiesParseError=1007, SubBodiesParseError = 1008, GetAttributeError=1009, + ReaderRemainContentLengthError = 1010, NotGlobalRegisterFormatterAssembly=1011, } } diff --git a/src/JT809.Protocol/JT809SubBodies.cs b/src/JT809.Protocol/JT809SubBodies.cs index 6b284b8..f975b31 100644 --- a/src/JT809.Protocol/JT809SubBodies.cs +++ b/src/JT809.Protocol/JT809SubBodies.cs @@ -13,6 +13,11 @@ namespace JT809.Protocol /// 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。 /// public virtual bool SkipSerialization { get; set; } = false; + /// + /// 2019文档导致需要兼容 + /// 是否跳过后续的长度 + /// + public virtual bool SkipDataLength { get; set; } = false; public abstract ushort SubMsgId { get; } diff --git a/src/JT809.Protocol/MessageBody/JT809_0x1200.cs b/src/JT809.Protocol/MessageBody/JT809_0x1200.cs index 9a10597..1ac0b2c 100644 --- a/src/JT809.Protocol/MessageBody/JT809_0x1200.cs +++ b/src/JT809.Protocol/MessageBody/JT809_0x1200.cs @@ -5,6 +5,7 @@ using JT809.Protocol.Formatters; using JT809.Protocol.Interfaces; using JT809.Protocol.MessagePack; using System; +using System.Collections.Generic; using System.Text.Json; namespace JT809.Protocol.MessageBody @@ -32,14 +33,17 @@ namespace JT809.Protocol.MessageBody writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString()); value.SubBusinessType = reader.ReadUInt16(); writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); - value.DataLength = reader.ReadUInt32(); - writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); try { if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) { if (instance is JT809SubBodies subBodies) { + if (!subBodies.SkipDataLength) + { + value.DataLength = reader.ReadUInt32(); + writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); + } if (!subBodies.SkipSerialization) { writer.WriteStartObject("子业务类型"); @@ -61,13 +65,16 @@ namespace JT809.Protocol.MessageBody value.VehicleNo = reader.ReadString(21); value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); value.SubBusinessType = reader.ReadUInt16(); - value.DataLength = reader.ReadUInt32(); try { if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) { if (instance is JT809SubBodies subBodies) { + if (!subBodies.SkipDataLength) + { + value.DataLength = reader.ReadUInt32(); + } if (!subBodies.SkipSerialization) { value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( @@ -91,19 +98,35 @@ namespace JT809.Protocol.MessageBody writer.WriteUInt16(value.SubBusinessType); try { - // 先写入内容,然后在根据内容反写内容长度 - writer.Skip(4, out int subContentLengthPosition); - if (value.SubBodies != null) + if (value.SubBodies.SkipDataLength) + { + if (value.SubBodies != null) + { + if (!value.SubBodies.SkipSerialization) + { + JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( + value.SubBodies, + ref writer, value.SubBodies, + config); + } + } + } + else { - if (!value.SubBodies.SkipSerialization) + // 先写入内容,然后在根据内容反写内容长度 + writer.Skip(4, out int subContentLengthPosition); + if (value.SubBodies != null) { - JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( - value.SubBodies, - ref writer, value.SubBodies, - config); + if (!value.SubBodies.SkipSerialization) + { + JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( + value.SubBodies, + ref writer, value.SubBodies, + config); + } } + writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); } - writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); } catch(Exception ex) { diff --git a/src/JT809.Protocol/MessageBody/JT809_0x9200.cs b/src/JT809.Protocol/MessageBody/JT809_0x9200.cs index 3163447..48a00f9 100644 --- a/src/JT809.Protocol/MessageBody/JT809_0x9200.cs +++ b/src/JT809.Protocol/MessageBody/JT809_0x9200.cs @@ -26,8 +26,19 @@ namespace JT809.Protocol.MessageBody JT809_0x9200 value = new JT809_0x9200(); //1078qq群808432702:大兄弟提供的 //由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过 - var subBusinessType = reader.ReadVirtualUInt16(); - if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value()) + if (config.Version == JT809Version.JTT2019) + { + var subBusinessType = reader.ReadVirtualUInt16(); + if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value()) + { + var virtualHex = reader.ReadVirtualArray(21); + value.VehicleNo = reader.ReadString(21); + writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); + value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); + writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString()); + } + } + else { var virtualHex = reader.ReadVirtualArray(21); value.VehicleNo = reader.ReadString(21); @@ -63,10 +74,18 @@ namespace JT809.Protocol.MessageBody public JT809_0x9200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) { JT809_0x9200 value = new JT809_0x9200(); - var subBusinessType = reader.ReadVirtualUInt16(); //1078qq群808432702:大兄弟提供的 //由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过 - if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value()) + if(config.Version== JT809Version.JTT2019) + { + var subBusinessType = reader.ReadVirtualUInt16(); + if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value()) + { + value.VehicleNo = reader.ReadString(21); + value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); + } + } + else { value.VehicleNo = reader.ReadString(21); value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); @@ -99,7 +118,15 @@ namespace JT809.Protocol.MessageBody { //1078qq群808432702:大兄弟提供的 //由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过 - if (value.SubBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value()) + if (config.Version == JT809Version.JTT2019) + { + if (value.SubBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value()) + { + writer.WriteStringPadRight(value.VehicleNo, 21); + writer.WriteByte((byte)value.VehicleColor); + } + } + else { writer.WriteStringPadRight(value.VehicleNo, 21); writer.WriteByte((byte)value.VehicleColor); diff --git a/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs b/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs index 3c28c81..f65ec22 100644 --- a/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs +++ b/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs @@ -1,4 +1,5 @@ using JT809.Protocol.Buffers; +using JT809.Protocol.Exceptions; using JT809.Protocol.Extensions; using System; using System.Buffers; @@ -445,15 +446,18 @@ namespace JT809.Protocol.MessagePack } public int ReadCurrentRemainContentLength() { + int len = 0; if (_decoded) { + len = Reader.Length - ReaderCount - 3; //内容长度=总长度-读取的长度-3(校验码2位+终止符1位) - return Reader.Length - ReaderCount - 3; } else { - return Reader.Length - ReaderCount; + len= Reader.Length - ReaderCount; } + if (len < 0) throw new JT809Exception(Enums.JT809ErrorCode.ReaderRemainContentLengthError); + return len; } public void Skip(int count=1) { diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs index fa98ae5..8ca6ce9 100644 --- a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs +++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs @@ -22,6 +22,11 @@ namespace JT809.Protocol.SubMessageBody public override string Description => "启动车辆定位信息交换应答消息"; public override bool SkipSerialization => false; + public override bool SkipDataLength => true; + /// + /// 子业务类型标识 + /// + public ushort DataType { get; set; } /// /// 对应启动车辆定位信息交换请求消息源子业务类型标识 /// @@ -29,7 +34,7 @@ namespace JT809.Protocol.SubMessageBody /// /// 对应启动车辆定位信息交换请求消息源报文序列号 /// - public uint SourceMsgSn { get; set; } + public uint SourceMsgSN { get; set; } /// /// 后续数据长度 值为0x00 /// @@ -42,8 +47,8 @@ namespace JT809.Protocol.SubMessageBody { value.SourceDataType = reader.ReadUInt16(); writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString()); - value.SourceMsgSn = reader.ReadUInt32(); - writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn); + value.SourceMsgSN = reader.ReadUInt32(); + writer.WriteNumber($"[{value.SourceMsgSN.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSN); value.DataLength = reader.ReadUInt32(); writer.WriteNumber($"[{value.DataLength.ReadNumber()}后续数据长度]", value.DataLength); } @@ -52,9 +57,10 @@ namespace JT809.Protocol.SubMessageBody public JT809_0x1200_0x1205 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) { var value = new JT809_0x1200_0x1205(); - if (config.Version == JT809Version.JTT2019) { + if (config.Version == JT809Version.JTT2019) + { value.SourceDataType = reader.ReadUInt16(); - value.SourceMsgSn = reader.ReadUInt32(); + value.SourceMsgSN = reader.ReadUInt32(); value.DataLength = reader.ReadUInt32(); } return value; @@ -62,9 +68,10 @@ namespace JT809.Protocol.SubMessageBody public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1200_0x1205 value, IJT809Config config) { - if (config.Version == JT809Version.JTT2019) { + if (config.Version == JT809Version.JTT2019) + { writer.WriteUInt16(value.SourceDataType); - writer.WriteUInt32(value.SourceMsgSn); + writer.WriteUInt32(value.SourceMsgSN); writer.WriteUInt32(value.DataLength); } } diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs index e6a8c36..a690c24 100644 --- a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs +++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs @@ -20,7 +20,7 @@ namespace JT809.Protocol.SubMessageBody public override ushort SubMsgId => JT809SubBusinessType.结束车辆定位信息交换应答消息.ToUInt16Value(); public override string Description => "结束车辆定位信息交换应答消息"; - + public override bool SkipDataLength => true; public override bool SkipSerialization => false; /// /// 对应结束车辆定位信息交换请求消息源子业务类型标识 @@ -29,7 +29,7 @@ namespace JT809.Protocol.SubMessageBody /// /// 对应结束车辆定位信息交换请求消息源报文序列号 /// - public uint SourceMsgSn { get; set; } + public uint SourceMsgSN { get; set; } /// /// 后续数据长度 值为0x00 /// @@ -41,9 +41,9 @@ namespace JT809.Protocol.SubMessageBody if (config.Version == JT809Version.JTT2019) { value.SourceDataType = reader.ReadUInt16(); - writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString()); - value.SourceMsgSn = reader.ReadUInt32(); - writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn); + writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应结束车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString()); + value.SourceMsgSN = reader.ReadUInt32(); + writer.WriteNumber($"[{value.SourceMsgSN.ReadNumber()}对应结束车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSN); value.DataLength = reader.ReadUInt32(); writer.WriteNumber($"[{value.DataLength.ReadNumber()}后续数据长度]", value.DataLength); } @@ -55,7 +55,7 @@ namespace JT809.Protocol.SubMessageBody if (config.Version == JT809Version.JTT2019) { value.SourceDataType = reader.ReadUInt16(); - value.SourceMsgSn = reader.ReadUInt32(); + value.SourceMsgSN = reader.ReadUInt32(); value.DataLength = reader.ReadUInt32(); } return value; @@ -66,7 +66,7 @@ namespace JT809.Protocol.SubMessageBody if (config.Version == JT809Version.JTT2019) { writer.WriteUInt16(value.SourceDataType); - writer.WriteUInt32(value.SourceMsgSn); + writer.WriteUInt32(value.SourceMsgSN); writer.WriteUInt32(value.DataLength); } } diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs index c4b17d0..e877f54 100644 --- a/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs +++ b/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs @@ -18,6 +18,10 @@ namespace JT809.Protocol.SubMessageBody public override string Description => "车辆注册信息应答消息"; /// + /// 车辆注册醒醒消息源子业务类型标识 + /// + public ushort DataType { get; set; } + /// /// 车辆注册信息消息源报文序号 /// public uint MsgSn { get; set; } @@ -26,9 +30,12 @@ namespace JT809.Protocol.SubMessageBody /// public JT809_0x9201_Result Result { get; set; } + public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) { var value = new JT809_0x9200_0x9201(); + value.DataType = reader.ReadUInt16(); + writer.WriteNumber($"[{value.DataType.ReadNumber()}]车辆注册醒醒消息源子业务类型标识", value.DataType); value.MsgSn = reader.ReadUInt32(); writer.WriteNumber($"[{value.MsgSn.ReadNumber()}]车辆注册信息消息源报文序号", value.MsgSn); value.Result = (JT809_0x9201_Result)reader.ReadByte(); @@ -38,6 +45,7 @@ namespace JT809.Protocol.SubMessageBody public JT809_0x9200_0x9201 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) { var value = new JT809_0x9200_0x9201(); + value.DataType = reader.ReadUInt16(); value.MsgSn = reader.ReadUInt32(); value.Result = (JT809_0x9201_Result)reader.ReadByte(); return value; @@ -45,6 +53,7 @@ namespace JT809.Protocol.SubMessageBody public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9200_0x9201 value, IJT809Config config) { + writer.WriteUInt16(value.DataType); writer.WriteUInt32(value.MsgSn); writer.WriteByte((byte)value.Result); }