From d9b1307d3968e891c346bf00fcdf7b087dae5adb Mon Sep 17 00:00:00 2001 From: "SmallChi(Koike)" <564952747@qq.com> Date: Sat, 11 Jan 2020 13:25:58 +0800 Subject: [PATCH] =?UTF-8?q?v2.2.5=201.=E4=BF=AE=E5=A4=8D0x0608=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=202.=E5=A2=9E=E5=8A=A0808=E6=B6=88=E6=81=AF=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE=E7=B1=BB=E5=9E=8B=E5=8F=8A=E6=89=A9=E5=B1=95=E6=96=B9?= =?UTF-8?q?=E6=B3=95=203.=E5=A2=9E=E5=8A=A00x0100=E5=92=8C0x0102=E5=88=86?= =?UTF-8?q?=E6=9E=90=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MessageBody/JT808_0x0100Test.cs | 7 +++ .../MessageBody/JT808_0x0102Test.cs | 14 ++++++ .../MessageBody/JT808_0x0100.cs | 43 ++++++++++++++++++- .../MessageBody/JT808_0x0102.cs | 30 ++++++++++++- 4 files changed, 92 insertions(+), 2 deletions(-) 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); + } + } } }