diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs index 09f86db..446b33f 100644 --- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs +++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs @@ -104,5 +104,12 @@ namespace JT808.Protocol.Test.MessageBody Assert.Equal("CHI123".PadLeft(30, '0'), JT808Bodies.TerminalId); Assert.Equal("smallchi123".PadLeft(30, '0'), JT808Bodies.TerminalModel); } + + [Fact] + public void Test2019_3() + { + byte[] bytes = "7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E".ToHexBytes(); + string json = JT808Serializer.Analyze(bytes); + } } } diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs index 56b3a13..a11d8eb 100644 --- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs +++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs @@ -27,6 +27,13 @@ namespace JT808.Protocol.Test.MessageBody Assert.Equal("45612", jT808LoginRequest.Code); } + [Fact] + public void Test5() + { + byte[] bodys = "34 35 36 31 32".ToHexBytes(); + string json = JT808Serializer.Analyze(bodys); + } + [Fact] public void Test2019_1() { @@ -51,6 +58,13 @@ namespace JT808.Protocol.Test.MessageBody Assert.Equal("v2.0.0".PadRight(20,'0'), jT808LoginRequest.SoftwareVersion); } + [Fact] + public void Test2019_3() + { + byte[] bodys = "05343536313231323334353637383930616263646576322E302E303030303030303030303030303030".ToHexBytes(); + string json = JT808Serializer.Analyze(bodys, JT808Version.JTT2019); + } + [Fact] public void Test3() { diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0100.cs b/src/JT808.Protocol/MessageBody/JT808_0x0100.cs index 5d33c1c..6a69c26 100644 --- a/src/JT808.Protocol/MessageBody/JT808_0x0100.cs +++ b/src/JT808.Protocol/MessageBody/JT808_0x0100.cs @@ -1,14 +1,18 @@ using JT808.Protocol.Enums; +using JT808.Protocol.Extensions; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; +using System.Text.Json; +using System.Buffers; +using System; namespace JT808.Protocol.MessageBody { /// /// 终端注册 /// - public class JT808_0x0100 : JT808Bodies, IJT808MessagePackFormatter, IJT808_2019_Version + public class JT808_0x0100 : JT808Bodies, IJT808MessagePackFormatter, IJT808_2019_Version,IJT808Analyze { public override ushort MsgId { get; } = 0x0100; public override string Description => "终端注册"; @@ -104,5 +108,42 @@ namespace JT808.Protocol.MessageBody writer.WriteByte(value.PlateColor); writer.WriteString(value.PlateNo); } + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x0100 jT808_0X0100 = new JT808_0x0100(); + jT808_0X0100.AreaID = reader.ReadUInt16(); + writer.WriteNumber($"[{jT808_0X0100.AreaID.ReadNumber()}]省域ID", jT808_0X0100.AreaID); + jT808_0X0100.CityOrCountyId = reader.ReadUInt16(); + writer.WriteNumber($"[{jT808_0X0100.CityOrCountyId.ReadNumber()}]市县域ID", jT808_0X0100.CityOrCountyId); + if (reader.Version == JT808Version.JTT2019) + { + ReadOnlySpan midSpan = reader.ReadVirtualArray(11); + jT808_0X0100.MakerId = reader.ReadString(11); + writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(11)", jT808_0X0100.MakerId); + ReadOnlySpan tmSpan = reader.ReadVirtualArray(30); + jT808_0X0100.TerminalModel = reader.ReadString(30); + writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(30)", jT808_0X0100.TerminalModel); + ReadOnlySpan tidSpan = reader.ReadVirtualArray(30); + jT808_0X0100.TerminalId = reader.ReadString(30); + writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端型号(30)", jT808_0X0100.TerminalId); + } + else + { + ReadOnlySpan midSpan = reader.ReadVirtualArray(5); + jT808_0X0100.MakerId = reader.ReadString(5); + writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(5)", jT808_0X0100.MakerId); + ReadOnlySpan tmSpan = reader.ReadVirtualArray(20); + jT808_0X0100.TerminalModel = reader.ReadString(20); + writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(20)", jT808_0X0100.TerminalModel); + ReadOnlySpan tidSpan = reader.ReadVirtualArray(7); + jT808_0X0100.TerminalId = reader.ReadString(7); + writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端型号(7)", jT808_0X0100.TerminalId); + } + jT808_0X0100.PlateColor = reader.ReadByte(); + writer.WriteNumber($"[{jT808_0X0100.PlateColor.ReadNumber()}]车牌颜色", jT808_0X0100.PlateColor); + ReadOnlySpan vnoSpan = reader.ReadVirtualArray(reader.ReadCurrentRemainContentLength()); + jT808_0X0100.PlateNo = reader.ReadRemainStringContent(); + writer.WriteString($"[{vnoSpan.ToArray().ToHexString()}]车牌颜色", jT808_0X0100.PlateNo); + } } } diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0102.cs b/src/JT808.Protocol/MessageBody/JT808_0x0102.cs index a203772..15bf90e 100644 --- a/src/JT808.Protocol/MessageBody/JT808_0x0102.cs +++ b/src/JT808.Protocol/MessageBody/JT808_0x0102.cs @@ -1,14 +1,17 @@ using JT808.Protocol.Enums; +using JT808.Protocol.Extensions; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; +using System; +using System.Text.Json; namespace JT808.Protocol.MessageBody { /// /// 终端鉴权 /// - public class JT808_0x0102 : JT808Bodies, IJT808MessagePackFormatter, IJT808_2019_Version + public class JT808_0x0102 : JT808Bodies, IJT808MessagePackFormatter, IJT808_2019_Version, IJT808Analyze { public override ushort MsgId { get; } = 0x0102; public override string Description => "终端鉴权"; @@ -63,5 +66,30 @@ namespace JT808.Protocol.MessageBody writer.WriteString(value.Code); } } + + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x0102 jT808_0X0102 = new JT808_0x0102(); + if (reader.Version == JT808Version.JTT2019) + { + jT808_0X0102.CodeLength = reader.ReadByte(); + writer.WriteNumber($"[{ jT808_0X0102.CodeLength.ReadNumber()}]鉴权码长度", jT808_0X0102.CodeLength); + ReadOnlySpan codeSpan = reader.ReadVirtualArray(jT808_0X0102.CodeLength); + jT808_0X0102.Code = reader.ReadString(jT808_0X0102.CodeLength); + writer.WriteString($"[{codeSpan.ToArray().ToHexString()}]鉴权码", jT808_0X0102.Code); + ReadOnlySpan imeiSpan = reader.ReadVirtualArray(15); + jT808_0X0102.IMEI = reader.ReadString(15); + writer.WriteString($"[{imeiSpan.ToArray().ToHexString()}]IMEI", jT808_0X0102.IMEI); + ReadOnlySpan svSpan = reader.ReadVirtualArray(20); + jT808_0X0102.SoftwareVersion = reader.ReadString(20); + writer.WriteString($"[{svSpan.ToArray().ToHexString()}]软件版本号", jT808_0X0102.SoftwareVersion); + } + else + { + ReadOnlySpan codeSpan = reader.ReadVirtualArray(reader.ReadCurrentRemainContentLength()); + jT808_0X0102.Code = reader.ReadRemainStringContent(); + writer.WriteString($"[{codeSpan.ToArray().ToHexString()}]鉴权码", jT808_0X0102.Code); + } + } } }