From f5da1e4cdc02a801fda0036c6687fa1c4b971548 Mon Sep 17 00:00:00 2001 From: "SmallChi(Koike)" <564952747@qq.com> Date: Tue, 1 Apr 2025 20:19:55 +0800 Subject: [PATCH] =?UTF-8?q?v2.7.2=201.=E4=BF=AE=E5=A4=8D0x0107=E5=88=B6?= =?UTF-8?q?=E9=80=A0=E5=95=86ID=E4=B8=BA=E6=A0=87=E5=87=862019=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E8=A7=A3=E6=9E=90=E8=A7=84=E5=88=99=202.?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BB=E5=8A=A8=E5=AE=89=E5=85=A8=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E8=BE=93=E5=87=BA=E6=8F=90=E7=A4=BA=203.=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=B5=B7=E5=A7=8B=E5=B9=B4=E4=BB=BD=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dotnetcore.yml | 2 +- global.json | 2 +- src/Info.props | 4 +-- .../JT808.Protocol.Benchmark.csproj | 4 +-- ...T808.Protocol.Extensions.GPS51.Test.csproj | 10 +++--- ...808.Protocol.Extensions.JT1078.Test.csproj | 10 +++--- ...808.Protocol.Extensions.SuBiao.Test.csproj | 8 ++--- .../MessageBody/JT808_0x0200_0x67.cs | 10 +++--- ...08.Protocol.Extensions.YueBiao.Test.csproj | 10 +++--- .../MessageBody/JT808_0x0200_0x67.cs | 12 +++---- .../JT808.Protocol.Test.csproj | 12 +++---- .../MessageBody/JT808_0x0107Test.cs | 14 +++++++- src/JT808.Protocol/JT808.Protocol.csproj | 19 ++++++---- src/JT808.Protocol/JT808.Protocol.xml | 3 +- .../MessageBody/JT808_0x0107.cs | 36 +++++++++++-------- 15 files changed, 90 insertions(+), 66 deletions(-) diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index ed9197b..e8cb906 100755 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -12,7 +12,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@master with: - dotnet-version: 9.0.100 + dotnet-version: 9.0.201 - name: dotnet info run: dotnet --info - name: dotnet restore diff --git a/global.json b/global.json index 20f482a..31f23b6 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.201" } } \ No newline at end of file diff --git a/src/Info.props b/src/Info.props index 2b9bd74..fb0865d 100644 --- a/src/Info.props +++ b/src/Info.props @@ -1,6 +1,6 @@  - net9.0;net8.0;netstandard2.0; + net9.0;net8.0;net7.0;netstandard2.0; latest Copyright 2018. SmallChi(Koike) @@ -8,7 +8,7 @@ https://github.com/SmallChi/JT808 https://github.com/SmallChi/JT808/blob/master/LICENSE https://github.com/SmallChi/JT808/blob/master/LICENSE - 2.7.1 + 2.7.2 enable LICENSE true diff --git a/src/JT808.Protocol.Benchmark/JT808.Protocol.Benchmark.csproj b/src/JT808.Protocol.Benchmark/JT808.Protocol.Benchmark.csproj index 55e6409..5510e97 100644 --- a/src/JT808.Protocol.Benchmark/JT808.Protocol.Benchmark.csproj +++ b/src/JT808.Protocol.Benchmark/JT808.Protocol.Benchmark.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808.Protocol.Extensions.GPS51.Test.csproj b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808.Protocol.Extensions.GPS51.Test.csproj index 0dc15b7..7878383 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808.Protocol.Extensions.GPS51.Test.csproj +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808.Protocol.Extensions.GPS51.Test.csproj @@ -5,11 +5,11 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808.Protocol.Extensions.JT1078.Test.csproj b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808.Protocol.Extensions.JT1078.Test.csproj index 5b18304..264f5ec 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808.Protocol.Extensions.JT1078.Test.csproj +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808.Protocol.Extensions.JT1078.Test.csproj @@ -5,11 +5,11 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808.Protocol.Extensions.SuBiao.Test.csproj b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808.Protocol.Extensions.SuBiao.Test.csproj index 06eca9b..e65bb0a 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808.Protocol.Extensions.SuBiao.Test.csproj +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808.Protocol.Extensions.SuBiao.Test.csproj @@ -7,10 +7,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x67.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x67.cs index 0651335..7107fa7 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x67.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x67.cs @@ -192,11 +192,11 @@ namespace JT808.Protocol.Extensions.SuBiao.MessageBody value.AlarmIdentification.SN = reader.ReadByte(); value.AlarmIdentification.AttachCount = reader.ReadByte(); value.AlarmIdentification.Retain = reader.ReadByte(); - writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalID); - writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); - writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); - writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); - writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); + writer.WriteString($"[{terminalIDHex}]报警标识号_终端ID", value.AlarmIdentification.TerminalID); + writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]报警标识号_日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); + writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]报警标识号_序号", value.AlarmIdentification.SN); + writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]报警标识号_附件数量", value.AlarmIdentification.AttachCount); + writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]报警标识号_预留", value.AlarmIdentification.Retain); } /// /// diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808.Protocol.Extensions.YueBiao.Test.csproj b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808.Protocol.Extensions.YueBiao.Test.csproj index eb2a8bf..3037508 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808.Protocol.Extensions.YueBiao.Test.csproj +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808.Protocol.Extensions.YueBiao.Test.csproj @@ -7,14 +7,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x67.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x67.cs index 68dda1f..fdaaf77 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x67.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x67.cs @@ -149,12 +149,12 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody value.AlarmIdentification.AttachCount = reader.ReadByte(); value.AlarmIdentification.Retain1 = reader.ReadByte(); value.AlarmIdentification.Retain2 = reader.ReadByte(); - writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalId); - writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); - writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); - writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); - writer.WriteNumber($"[{value.AlarmIdentification.Retain1.ReadNumber()}]预留1", value.AlarmIdentification.Retain1); - writer.WriteNumber($"[{value.AlarmIdentification.Retain2.ReadNumber()}]预留2", value.AlarmIdentification.Retain2); + writer.WriteString($"[{terminalIDHex}]报警标识号_终端ID", value.AlarmIdentification.TerminalId); + writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]报警标识号_日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); + writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]报警标识号_序号", value.AlarmIdentification.SN); + writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]报警标识号_附件数量", value.AlarmIdentification.AttachCount); + writer.WriteNumber($"[{value.AlarmIdentification.Retain1.ReadNumber()}]报警标识号_预留1", value.AlarmIdentification.Retain1); + writer.WriteNumber($"[{value.AlarmIdentification.Retain2.ReadNumber()}]报警标识号_预留2", value.AlarmIdentification.Retain2); } /// /// diff --git a/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj b/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj index f43fc03..ebf0ea3 100644 --- a/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj +++ b/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj @@ -108,17 +108,17 @@ - + - - + + - - + + all runtime; build; native; contentfiles; analyzers - + all runtime; build; native; contentfiles; analyzers diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs index 4234698..a5b764e 100644 --- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs +++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs @@ -68,9 +68,21 @@ namespace JT808.Protocol.Test.MessageBody [Fact] public void Test4() { - //2019版本JT808_0x0107解析制造商有误 #43 + // 2013版本JT808_0x0107解析制造商有误 #43 + // 属于2019版本 非标准的JT808协议,不支持解析 + // 制造商ID byte[] bytes = "7E010740660100000000010941000493000700FF3838383838434B31303043000000000000000000000000000000000000000000000000313030303439330000000000000000000000000000000000000000000000898603249475600329000748572D56322E350E434B313030432D4A542D5630323402209B7E".ToHexBytes(); string json = JT808Serializer.Analyze(bytes); + } + + [Fact] + public void Test5() + { + //2019版本JT808_0x0107解析制造商ID #52 + byte[] bytes = "7E0107407F01000008686280748662930096000F00000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000008986083319233076050122454332303041455548415230314132364D31365F363936303939323035323131303606362E322E383403FFE97E".ToHexBytes(); + string json = JT808Serializer.Analyze(bytes); } + + } } diff --git a/src/JT808.Protocol/JT808.Protocol.csproj b/src/JT808.Protocol/JT808.Protocol.csproj index b06fba1..65c6b6a 100644 --- a/src/JT808.Protocol/JT808.Protocol.csproj +++ b/src/JT808.Protocol/JT808.Protocol.csproj @@ -42,13 +42,18 @@ - + - + - - - + + + + + + + + @@ -57,8 +62,8 @@ - - + + diff --git a/src/JT808.Protocol/JT808.Protocol.xml b/src/JT808.Protocol/JT808.Protocol.xml index fb3ae97..7f99bd4 100644 --- a/src/JT808.Protocol/JT808.Protocol.xml +++ b/src/JT808.Protocol/JT808.Protocol.xml @@ -9443,7 +9443,8 @@ 制造商 ID - 2013版本 5 个字节,终端制造商编码 + 2013版本 5 个字节,终端制造商编码 + 2019版本 11 个字节,终端制造商编码 diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0107.cs b/src/JT808.Protocol/MessageBody/JT808_0x0107.cs index c07b370..28635ef 100644 --- a/src/JT808.Protocol/MessageBody/JT808_0x0107.cs +++ b/src/JT808.Protocol/MessageBody/JT808_0x0107.cs @@ -39,7 +39,8 @@ namespace JT808.Protocol.MessageBody public ushort TerminalType { get; set; } /// /// 制造商 ID - /// 2013版本 5 个字节,终端制造商编码 + /// 2013版本 5 个字节,终端制造商编码 + /// 2019版本 11 个字节,终端制造商编码 /// public string MakerId { get; set; } /// @@ -106,14 +107,15 @@ namespace JT808.Protocol.MessageBody { JT808_0x0107 jT808_0X0107 = new JT808_0x0107(); jT808_0X0107.TerminalType = reader.ReadUInt16(); - jT808_0X0107.MakerId = reader.ReadString(5); if (reader.Version == JT808Version.JTT2019) - { + { + jT808_0X0107.MakerId = reader.ReadString(11); jT808_0X0107.TerminalModel = reader.ReadString(30); jT808_0X0107.TerminalId = reader.ReadString(30); } else - { + { + jT808_0X0107.MakerId = reader.ReadString(5); jT808_0X0107.TerminalModel = reader.ReadString(20); jT808_0X0107.TerminalId = reader.ReadString(7); } @@ -135,14 +137,15 @@ namespace JT808.Protocol.MessageBody public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x0107 value, IJT808Config config) { writer.WriteUInt16(value.TerminalType); - writer.WriteString(value.MakerId.PadRight(5, '\0').ValiString(nameof(value.MakerId), 5)); if (writer.Version == JT808Version.JTT2019) - { + { + writer.WriteString(value.MakerId.PadRight(11, '\0').ValiString(nameof(value.MakerId), 11)); writer.WriteString(value.TerminalModel.PadRight(30, '\0').ValiString(nameof(value.TerminalModel), 30)); writer.WriteString(value.TerminalId.PadRight(30, '\0').ValiString(nameof(value.TerminalId), 30)); } else - { + { + writer.WriteString(value.MakerId.PadRight(5, '\0').ValiString(nameof(value.MakerId), 5)); writer.WriteString(value.TerminalModel.PadRight(20, '\0').ValiString(nameof(value.TerminalModel), 20)); writer.WriteString(value.TerminalId.PadRight(7, '\0').ValiString(nameof(value.TerminalId), 7)); } @@ -160,12 +163,12 @@ namespace JT808.Protocol.MessageBody /// /// /// - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x0107 jT808_0X0107 = new JT808_0x0107(); jT808_0X0107.TerminalType = reader.ReadUInt16(); writer.WriteNumber($"[{jT808_0X0107.TerminalType.ReadNumber()}]终端类型", jT808_0X0107.TerminalType); - ReadOnlySpan terminalTypeBits =string.Join("", Convert.ToString(jT808_0X0107.TerminalType, 2).PadLeft(16, '0').Reverse()).AsSpan(); + ReadOnlySpan terminalTypeBits = string.Join("", Convert.ToString(jT808_0X0107.TerminalType, 2).PadLeft(16, '0').Reverse()).AsSpan(); writer.WriteStartObject("终端类型"); writer.WriteString("bit0", terminalTypeBits[0] == '0' ? "不适用客运车辆" : "适用客运车辆"); writer.WriteString("bit1", terminalTypeBits[1] == '0' ? "不适用危险品车辆" : "适用危险品车辆"); @@ -178,11 +181,11 @@ namespace JT808.Protocol.MessageBody writer.WriteString("bit8", terminalTypeBits[8] == '0' ? "不适用挂车" : "适用挂车"); } writer.WriteEndObject(); - ReadOnlySpan makerIdSpan = reader.ReadVirtualArray(5); - jT808_0X0107.MakerId = reader.ReadString(5); - writer.WriteString($"[{makerIdSpan.ToArray().ToHexString()}]制造商ID", jT808_0X0107.MakerId); if (reader.Version == JT808Version.JTT2019) { + ReadOnlySpan makerIdSpan = reader.ReadVirtualArray(11); + jT808_0X0107.MakerId = reader.ReadString(11); + writer.WriteString($"[{makerIdSpan.ToArray().ToHexString()}]制造商ID", jT808_0X0107.MakerId); ReadOnlySpan terminalModelSpan = reader.ReadVirtualArray(30); jT808_0X0107.TerminalModel = reader.ReadString(30); writer.WriteString($"[{terminalModelSpan.ToArray().ToHexString()}]终端型号", jT808_0X0107.TerminalModel); @@ -191,7 +194,10 @@ namespace JT808.Protocol.MessageBody writer.WriteString($"[{terminalIdSpan.ToArray().ToHexString()}]终端ID", jT808_0X0107.TerminalId); } else - { + { + ReadOnlySpan makerIdSpan = reader.ReadVirtualArray(5); + jT808_0X0107.MakerId = reader.ReadString(5); + writer.WriteString($"[{makerIdSpan.ToArray().ToHexString()}]制造商ID", jT808_0X0107.MakerId); ReadOnlySpan terminalModelSpan = reader.ReadVirtualArray(20); jT808_0X0107.TerminalModel = reader.ReadString(20); writer.WriteString($"[{terminalModelSpan.ToArray().ToHexString()}]终端型号", jT808_0X0107.TerminalModel); @@ -213,7 +219,7 @@ namespace JT808.Protocol.MessageBody jT808_0X0107.Terminal_Firmware_Version_Num = reader.ReadString(jT808_0X0107.Terminal_Firmware_Version_Length); writer.WriteString($"[{firmwareVersionNumSpan.ToArray().ToHexString()}]终端固件版本号", jT808_0X0107.Terminal_Firmware_Version_Num); jT808_0X0107.GNSSModule = reader.ReadByte(); - ReadOnlySpan gNSSModuleBits =string.Join("", Convert.ToString(jT808_0X0107.GNSSModule, 2).PadLeft(8,'0').Reverse()).AsSpan(); + ReadOnlySpan gNSSModuleBits = string.Join("", Convert.ToString(jT808_0X0107.GNSSModule, 2).PadLeft(8, '0').Reverse()).AsSpan(); writer.WriteNumber($"[{jT808_0X0107.GNSSModule.ReadNumber()}]GNSS模块属性", jT808_0X0107.GNSSModule); writer.WriteStartObject("GNSS模块属性"); writer.WriteString("bit0", gNSSModuleBits[0] == '0' ? "不支持GPS定位" : "支持GPS定位"); @@ -222,7 +228,7 @@ namespace JT808.Protocol.MessageBody writer.WriteString("bit3", gNSSModuleBits[3] == '0' ? "不支持Galileo定位" : "支持Galileo定位"); writer.WriteEndObject(); jT808_0X0107.CommunicationModule = reader.ReadByte(); - ReadOnlySpan communicationModuleBits=string.Join("",Convert.ToString(jT808_0X0107.CommunicationModule, 2).PadLeft(8, '0').Reverse()).AsSpan(); + ReadOnlySpan communicationModuleBits = string.Join("", Convert.ToString(jT808_0X0107.CommunicationModule, 2).PadLeft(8, '0').Reverse()).AsSpan(); writer.WriteNumber($"[{jT808_0X0107.CommunicationModule.ReadNumber()}]通信模块属性", jT808_0X0107.CommunicationModule); writer.WriteStartObject("通信模块属性"); writer.WriteString("bit0", communicationModuleBits[0] == '0' ? "不支持GPRS通信" : "支持GPRS通信");