From 6f48563430ddc7707891c7f65550c78b89b67e00 Mon Sep 17 00:00:00 2001 From: "smallchi(Koike)" <564952747@qq.com> Date: Tue, 11 Feb 2020 13:07:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=86=E6=9E=90=E5=99=A8?= =?UTF-8?q?=E5=8F=8A=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JT808_0x1210_Test.cs | 9 ++- .../JT808_0x1211_Test.cs | 6 ++ .../JT808_0x8103_0xF366_Test.cs | 5 ++ .../JT808_0x8103_0xF367_Test.cs | 5 ++ .../JT808_0x8900_Test.cs | 5 ++ .../JT808_0x9208_Test.cs | 6 ++ .../JT808_0x9212_Test.cs | 5 ++ ...808.Protocol.Extensions.JTActiveSafety.xml | 4 +- .../MessageBody/JT808_0x0200_0x64.cs | 17 ++-- .../MessageBody/JT808_0x0200_0x65.cs | 17 ++-- .../MessageBody/JT808_0x0200_0x66.cs | 17 ++-- .../MessageBody/JT808_0x0200_0x67.cs | 17 ++-- .../MessageBody/JT808_0x0900_0xF8.cs | 2 +- .../MessageBody/JT808_0x1210.cs | 77 +++++++++++++++---- .../MessageBody/JT808_0x1211.cs | 30 ++++++-- .../MessageBody/JT808_0x1212.cs | 30 ++++++-- .../MessageBody/JT808_0x8103_0xF366.cs | 66 ++++++++++++---- .../MessageBody/JT808_0x8103_0xF367.cs | 29 +++++-- .../MessageBody/JT808_0x8900_0xF7.cs | 23 +++++- .../MessageBody/JT808_0x8900_0xF8.cs | 23 +++++- .../MessageBody/JT808_0x9208.cs | 53 ++++++++++--- .../MessageBody/JT808_0x9212.cs | 57 +++++++++++--- 22 files changed, 386 insertions(+), 117 deletions(-) diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1210_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1210_Test.cs index 7076d48..f250bf5 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1210_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1210_Test.cs @@ -43,7 +43,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test FileSize=10 } }, - TerminalID = "4444444", + MakerID = "4444444", InfoType = 0 }; var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); @@ -68,9 +68,14 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test Assert.Equal(9, jT808UploadLocationRequest.AttachInfos[1].FileNameLength); Assert.Equal(10u, jT808UploadLocationRequest.AttachInfos[1].FileSize); - Assert.Equal("4444444", jT808UploadLocationRequest.TerminalID); + Assert.Equal("4444444", jT808UploadLocationRequest.MakerID); Assert.Equal(0, jT808UploadLocationRequest.InfoType); } + [Fact] + public void Json() + { + var json = JT808Serializer.Analyze("3434343434343434343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100020866696C656E616D65000000090966696C656E616D65310000000A".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1211_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1211_Test.cs index 21e06b3..96f24a0 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1211_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1211_Test.cs @@ -40,5 +40,11 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test Assert.Equal(2, jT808UploadLocationRequest.FileType); Assert.Equal("FileName".Length, jT808UploadLocationRequest.FileNameLength); } + + [Fact] + public void Json() + { + var json = JT808Serializer.Analyze("0846696C654E616D650200000001".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF366_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF366_Test.cs index 6edad20..68047b3 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF366_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF366_Test.cs @@ -60,5 +60,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test Assert.Equal("999999999999", jT808_0x8103_0xF366.TyreSpecificationType); Assert.Equal(10, jT808_0x8103_0xF366.VoltageThreshold); } + [Fact] + public void Json() + { + var json = JT808Serializer.Analyze("010000F366243939393939393939393939390008000400060005000300020001000A0007010203040506".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF367_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF367_Test.cs index 1bd0ab8..4f0867e 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF367_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF367_Test.cs @@ -42,5 +42,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test Assert.Equal(1, jT808_0x8103_0xF367.LateralRearApproachAlarmTimeThreshold); Assert.Equal(2, jT808_0x8103_0xF367.RearApproachAlarmTimeThreshold); } + [Fact] + public void Json() + { + var json = JT808Serializer.Analyze("010000F367020201".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8900_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8900_Test.cs index 4e1e396..4061b7d 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8900_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8900_Test.cs @@ -37,5 +37,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test Assert.Equal(2, jT808UploadLocationRequest.USBCount); Assert.Equal(new List { 1, 2 }.ToArray().ToHexString(), jT808UploadLocationRequest.MultipleUSB.ToArray().ToHexString()); } + [Fact] + public void Json() + { + var json = JT808Serializer.Analyze("020102".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9208_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9208_Test.cs index 8a68d4c..f5bbd0a 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9208_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9208_Test.cs @@ -54,5 +54,11 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test Assert.Equal(5000, jT808UploadLocationRequest.AttachmentServerIPTcpPort); Assert.Equal(5001, jT808UploadLocationRequest.AttachmentServerIPUdpPort); } + + [Fact] + public void Json() + { + var json = JT808Serializer.Analyze("0B3139322E3136382E312E311388138934343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100000000000000000000000000000000".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9212_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9212_Test.cs index a77be8d..dc9a03a 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9212_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9212_Test.cs @@ -57,5 +57,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test Assert.Equal(30u, jT808UploadLocationRequest.DataPackages[1].Length); Assert.Equal(40u, jT808UploadLocationRequest.DataPackages[1].Offset); } + [Fact] + public void Json() + { + var json = JT808Serializer.Analyze("0846696C654E616D65010202000000140000000A000000280000001E".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml b/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml index 1a13e08..652d462 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml @@ -389,9 +389,9 @@ 报警附件信息消息 - + - 终端ID + 制造商Id 7 个字节,由大写字母和数字组成,此终端ID 由制造商自行定义,位数不足时,后补“0x00” diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs index f3c8e1d..b83ad42 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs @@ -246,15 +246,14 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString()); writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString()); writer.WriteEndObject(); - value.AlarmIdentification = new AlarmIdentificationProperty - { - TerminalID = reader.ReadString(7), - Time = reader.ReadDateTime6(), - SN = reader.ReadByte(), - AttachCount = reader.ReadByte(), - Retain = reader.ReadByte() - }; - writer.WriteString($"[{value.AlarmIdentification.TerminalID}]终端ID", value.AlarmIdentification.TerminalID); + value.AlarmIdentification = new AlarmIdentificationProperty(); + string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); + value.AlarmIdentification.TerminalID = reader.ReadString(7); + value.AlarmIdentification.Time = reader.ReadDateTime6(); + 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); diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs index 7690bb9..ffddc3a 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs @@ -202,15 +202,14 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString()); writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString()); writer.WriteEndObject(); - value.AlarmIdentification = new AlarmIdentificationProperty - { - TerminalID = reader.ReadString(7), - Time = reader.ReadDateTime6(), - SN = reader.ReadByte(), - AttachCount = reader.ReadByte(), - Retain = reader.ReadByte() - }; - writer.WriteString($"[{value.AlarmIdentification.TerminalID}]终端ID", value.AlarmIdentification.TerminalID); + value.AlarmIdentification = new AlarmIdentificationProperty(); + string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); + value.AlarmIdentification.TerminalID = reader.ReadString(7); + value.AlarmIdentification.Time = reader.ReadDateTime6(); + 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); diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs index dcbd9fb..2b29d89 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs @@ -119,15 +119,14 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString()); writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString()); writer.WriteEndObject(); - value.AlarmIdentification = new AlarmIdentificationProperty - { - TerminalID = reader.ReadString(7), - Time = reader.ReadDateTime6(), - SN = reader.ReadByte(), - AttachCount = reader.ReadByte(), - Retain = reader.ReadByte() - }; - writer.WriteString($"[{value.AlarmIdentification.TerminalID}]终端ID", value.AlarmIdentification.TerminalID); + value.AlarmIdentification = new AlarmIdentificationProperty(); + string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); + value.AlarmIdentification.TerminalID = reader.ReadString(7); + value.AlarmIdentification.Time = reader.ReadDateTime6(); + 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); diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs index b52dafc..212583d 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs @@ -190,15 +190,14 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString()); writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString()); writer.WriteEndObject(); - value.AlarmIdentification = new AlarmIdentificationProperty - { - TerminalID = reader.ReadString(7), - Time = reader.ReadDateTime6(), - SN = reader.ReadByte(), - AttachCount = reader.ReadByte(), - Retain = reader.ReadByte() - }; - writer.WriteString($"[{value.AlarmIdentification.TerminalID}]终端ID", value.AlarmIdentification.TerminalID); + value.AlarmIdentification = new AlarmIdentificationProperty(); + string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); + value.AlarmIdentification.TerminalID = reader.ReadString(7); + value.AlarmIdentification.Time = reader.ReadDateTime6(); + 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); diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0900_0xF8.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0900_0xF8.cs index 3b3b5ed..6917cc2 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0900_0xF8.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0900_0xF8.cs @@ -71,7 +71,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody writer.WriteNumber($"[{item.CustomerCodeLength.ReadNumber()}]客户代码长度", item.CustomerCodeLength); string customerCodeHex = reader.ReadVirtualArray(item.CustomerCodeLength).ToArray().ToHexString(); item.CustomerCode = reader.ReadString(item.CustomerCodeLength); - writer.WriteString($"[{customerCodeHex}]设备ID", item.CustomerCode); + writer.WriteString($"[{customerCodeHex}]客户代码", item.CustomerCode); writer.WriteEndObject(); } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1210.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1210.cs index 0b6f154..d3d4708 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1210.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1210.cs @@ -1,22 +1,24 @@ using JT808.Protocol.Extensions.JTActiveSafety.Metadata; using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System; using System.Collections.Generic; using System.Text; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 报警附件信息消息 /// - public class JT808_0x1210:JT808Bodies, IJT808MessagePackFormatter + public class JT808_0x1210: JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze { /// - /// 终端ID + /// 制造商Id /// 7 个字节,由大写字母和数字组成,此终端ID 由制造商自行定义,位数不足时,后补“0x00” /// - public string TerminalID { get; set; } + public string MakerID { get; set; } /// /// 报警标识号 /// @@ -45,11 +47,56 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody public override string Description => "报警附件信息消息"; + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x1210 value = new JT808_0x1210(); + string makerIdHex=reader.ReadVirtualArray(7).ToArray().ToHexString(); + value.MakerID = reader.ReadString(7); + writer.WriteString($"[{makerIdHex}]制造商Id", value.MakerID); + value.AlarmIdentification = new AlarmIdentificationProperty(); + string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); + value.AlarmIdentification.TerminalID = reader.ReadString(7); + value.AlarmIdentification.Time = reader.ReadDateTime6(); + 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); + string alarmIdHex = reader.ReadVirtualArray(32).ToArray().ToHexString(); + value.AlarmId = reader.ReadString(32); + writer.WriteString($"[{alarmIdHex}]平台给报警分配的唯一编号", value.AlarmId); + value.InfoType = reader.ReadByte(); + writer.WriteNumber($"[{value.InfoType.ReadNumber()}]信息类型", value.InfoType); + value.AttachCount = reader.ReadByte(); + writer.WriteNumber($"[{value.AttachCount.ReadNumber()}]附件数量", value.AttachCount); + if (value.AttachCount > 0) + { + writer.WriteStartArray("附件信息列表"); + for (int i = 0; i < value.AttachCount; i++) + { + writer.WriteStartObject(); + AttachProperty attachProperty = new AttachProperty(); + attachProperty.FileNameLength = reader.ReadByte(); + writer.WriteNumber($"[{attachProperty.FileNameLength.ReadNumber()}]文件名称长度", attachProperty.FileNameLength); + string fileNameHex = reader.ReadVirtualArray(attachProperty.FileNameLength).ToArray().ToHexString(); + attachProperty.FileName = reader.ReadString(attachProperty.FileNameLength); + writer.WriteString($"[{fileNameHex}]文件名称", attachProperty.FileName); + attachProperty.FileSize = reader.ReadUInt32(); + writer.WriteNumber($"[{ attachProperty.FileSize.ReadNumber()}]文件大小", attachProperty.FileSize); + writer.WriteEndObject(); + } + writer.WriteEndArray(); + } + } + public JT808_0x1210 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_0x1210 jT808_0X1210 = new JT808_0x1210(); - jT808_0X1210.TerminalID = reader.ReadString(7); - jT808_0X1210.AlarmIdentification = new AlarmIdentificationProperty + JT808_0x1210 value = new JT808_0x1210(); + value.MakerID = reader.ReadString(7); + value.AlarmIdentification = new AlarmIdentificationProperty { TerminalID = reader.ReadString(7), Time = reader.ReadDateTime6(), @@ -57,27 +104,27 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody AttachCount = reader.ReadByte(), Retain = reader.ReadByte() }; - jT808_0X1210.AlarmId = reader.ReadString(32); - jT808_0X1210.InfoType = reader.ReadByte(); - jT808_0X1210.AttachCount = reader.ReadByte(); - if (jT808_0X1210.AttachCount > 0) + value.AlarmId = reader.ReadString(32); + value.InfoType = reader.ReadByte(); + value.AttachCount = reader.ReadByte(); + if (value.AttachCount > 0) { - jT808_0X1210.AttachInfos = new List(); - for (int i = 0; i < jT808_0X1210.AttachCount; i++) + value.AttachInfos = new List(); + for (int i = 0; i < value.AttachCount; i++) { AttachProperty attachProperty = new AttachProperty(); attachProperty.FileNameLength = reader.ReadByte(); attachProperty.FileName = reader.ReadString(attachProperty.FileNameLength); attachProperty.FileSize = reader.ReadUInt32(); - jT808_0X1210.AttachInfos.Add(attachProperty); + value.AttachInfos.Add(attachProperty); } } - return jT808_0X1210; + return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1210 value, IJT808Config config) { - writer.WriteString(value.TerminalID.PadRight(7, '0')); + writer.WriteString(value.MakerID.PadRight(7, '0')); if (value.AlarmIdentification == null) { throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1211.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1211.cs index 41c348f..b7fab50 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1211.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1211.cs @@ -1,12 +1,14 @@ using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 文件信息上传 /// - public class JT808_0x1211 : JT808Bodies, IJT808MessagePackFormatter + public class JT808_0x1211 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze { public override string Description => "文件信息上传"; /// @@ -29,14 +31,28 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody public override ushort MsgId => 0x1211; + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x1211 value = new JT808_0x1211(); + value.FileNameLength = reader.ReadByte(); + writer.WriteNumber($"[{value.FileNameLength.ReadNumber()}]文件名称长度", value.FileNameLength); + string fileNameHex = reader.ReadVirtualArray(value.FileNameLength).ToArray().ToHexString(); + value.FileName = reader.ReadString(value.FileNameLength); + writer.WriteString($"[{fileNameHex}]文件名称", value.FileName); + value.FileType = reader.ReadByte(); + writer.WriteNumber($"[{value.FileType.ReadNumber()}]文件类型", value.FileType); + value.FileSize = reader.ReadUInt32(); + writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小", value.FileSize); + } + public JT808_0x1211 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_0x1211 jT808_0X1211 = new JT808_0x1211(); - jT808_0X1211.FileNameLength = reader.ReadByte(); - jT808_0X1211.FileName = reader.ReadString(jT808_0X1211.FileNameLength); - jT808_0X1211.FileType = reader.ReadByte(); - jT808_0X1211.FileSize = reader.ReadUInt32(); - return jT808_0X1211; + JT808_0x1211 value = new JT808_0x1211(); + value.FileNameLength = reader.ReadByte(); + value.FileName = reader.ReadString(value.FileNameLength); + value.FileType = reader.ReadByte(); + value.FileSize = reader.ReadUInt32(); + return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1211 value, IJT808Config config) diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1212.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1212.cs index 4d62cb9..de734ba 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1212.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1212.cs @@ -1,12 +1,14 @@ using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 文件上传完成消息 /// - public class JT808_0x1212 : JT808Bodies, IJT808MessagePackFormatter + public class JT808_0x1212 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze { public override string Description => "文件上传完成消息"; /// @@ -28,14 +30,28 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody public uint FileSize { get; set; } public override ushort MsgId => 0x1212; + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x1212 value = new JT808_0x1212(); + value.FileNameLength = reader.ReadByte(); + writer.WriteNumber($"[{value.FileNameLength.ReadNumber()}]文件名称长度", value.FileNameLength); + string fileNameHex = reader.ReadVirtualArray(value.FileNameLength).ToArray().ToHexString(); + value.FileName = reader.ReadString(value.FileNameLength); + writer.WriteString($"[{fileNameHex}]文件名称", value.FileName); + value.FileType = reader.ReadByte(); + writer.WriteNumber($"[{value.FileType.ReadNumber()}]文件类型", value.FileType); + value.FileSize = reader.ReadUInt32(); + writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小", value.FileSize); + } + public JT808_0x1212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_0x1212 jT808_0X1212 = new JT808_0x1212(); - jT808_0X1212.FileNameLength = reader.ReadByte(); - jT808_0X1212.FileName = reader.ReadString(jT808_0X1212.FileNameLength); - jT808_0X1212.FileType = reader.ReadByte(); - jT808_0X1212.FileSize = reader.ReadUInt32(); - return jT808_0X1212; + JT808_0x1212 value = new JT808_0x1212(); + value.FileNameLength = reader.ReadByte(); + value.FileName = reader.ReadString(value.FileNameLength); + value.FileType = reader.ReadByte(); + value.FileSize = reader.ReadUInt32(); + return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1212 value, IJT808Config config) diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF366.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF366.cs index 6aadee0..b8fb336 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF366.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF366.cs @@ -1,13 +1,15 @@ using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessageBody; using JT808.Protocol.MessagePack; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 胎压监测系统参数 /// - public class JT808_0x8103_0xF366 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter + public class JT808_0x8103_0xF366 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter, IJT808Analyze { public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF366; public override byte ParamLength { get; set; } = 46; @@ -56,23 +58,55 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody /// public byte[] Retain { get; set; } = new byte[6]; + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366(); + value.ParamId = reader.ReadUInt32(); + value.ParamLength = reader.ReadByte(); + writer.WriteNumber($"[{value.ParamId.ReadNumber()}]参数ID", value.ParamId); + writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength); + string tyreSpecificationTypeHex = reader.ReadVirtualArray(12).ToArray().ToHexString(); + value.TyreSpecificationType = reader.ReadString(12); + writer.WriteString($"[{tyreSpecificationTypeHex}]轮胎规格型号", value.TyreSpecificationType); + value.TyrePressureUnit = reader.ReadUInt16(); + writer.WriteNumber($"[{value.TyrePressureUnit.ReadNumber()}]胎压单位", value.TyrePressureUnit); + value.NormalFetalPressure = reader.ReadUInt16(); + writer.WriteNumber($"[{value.NormalFetalPressure.ReadNumber()}]正常胎压值", value.NormalFetalPressure); + value.ThresholdUnbalancedTirePressure = reader.ReadUInt16(); + writer.WriteNumber($"[{value.ThresholdUnbalancedTirePressure.ReadNumber()}]胎压不平衡门限", value.ThresholdUnbalancedTirePressure); + value.SlowLeakageThreshold = reader.ReadUInt16(); + writer.WriteNumber($"[{value.SlowLeakageThreshold.ReadNumber()}]慢漏气门限", value.SlowLeakageThreshold); + value.LowVoltageThreshold = reader.ReadUInt16(); + writer.WriteNumber($"[{value.LowVoltageThreshold.ReadNumber()}]低压阈值", value.LowVoltageThreshold); + value.HighVoltageThreshold = reader.ReadUInt16(); + writer.WriteNumber($"[{value.HighVoltageThreshold.ReadNumber()}]高压阈值", value.HighVoltageThreshold); + value.HighTemperatureThreshold = reader.ReadUInt16(); + writer.WriteNumber($"[{value.HighTemperatureThreshold.ReadNumber()}]高温阈值", value.HighTemperatureThreshold); + value.VoltageThreshold = reader.ReadUInt16(); + writer.WriteNumber($"[{value.VoltageThreshold.ReadNumber()}]电压阈值", value.VoltageThreshold); + value.TimedReportingInterval = reader.ReadUInt16(); + writer.WriteNumber($"[{value.TimedReportingInterval.ReadNumber()}]定时上报时间间隔", value.TimedReportingInterval); + value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); + writer.WriteString("保留项", value.Retain.ToHexString()); + } + public JT808_0x8103_0xF366 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_0x8103_0xF366 jT808_0X8103_0XF366 = new JT808_0x8103_0xF366(); - jT808_0X8103_0XF366.ParamId = reader.ReadUInt32(); - jT808_0X8103_0XF366.ParamLength = reader.ReadByte(); - jT808_0X8103_0XF366.TyreSpecificationType = reader.ReadString(12); - jT808_0X8103_0XF366.TyrePressureUnit = reader.ReadUInt16(); - jT808_0X8103_0XF366.NormalFetalPressure = reader.ReadUInt16(); - jT808_0X8103_0XF366.ThresholdUnbalancedTirePressure = reader.ReadUInt16(); - jT808_0X8103_0XF366.SlowLeakageThreshold = reader.ReadUInt16(); - jT808_0X8103_0XF366.LowVoltageThreshold = reader.ReadUInt16(); - jT808_0X8103_0XF366.HighVoltageThreshold = reader.ReadUInt16(); - jT808_0X8103_0XF366.HighTemperatureThreshold = reader.ReadUInt16(); - jT808_0X8103_0XF366.VoltageThreshold = reader.ReadUInt16(); - jT808_0X8103_0XF366.TimedReportingInterval = reader.ReadUInt16(); - jT808_0X8103_0XF366.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); - return jT808_0X8103_0XF366; + JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366(); + value.ParamId = reader.ReadUInt32(); + value.ParamLength = reader.ReadByte(); + value.TyreSpecificationType = reader.ReadString(12); + value.TyrePressureUnit = reader.ReadUInt16(); + value.NormalFetalPressure = reader.ReadUInt16(); + value.ThresholdUnbalancedTirePressure = reader.ReadUInt16(); + value.SlowLeakageThreshold = reader.ReadUInt16(); + value.LowVoltageThreshold = reader.ReadUInt16(); + value.HighVoltageThreshold = reader.ReadUInt16(); + value.HighTemperatureThreshold = reader.ReadUInt16(); + value.VoltageThreshold = reader.ReadUInt16(); + value.TimedReportingInterval = reader.ReadUInt16(); + value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); + return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF366 value, IJT808Config config) diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF367.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF367.cs index 910ff91..71266ec 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF367.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF367.cs @@ -1,13 +1,15 @@ using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessageBody; using JT808.Protocol.MessagePack; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 盲区监测系统参数 /// - public class JT808_0x8103_0xF367 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter + public class JT808_0x8103_0xF367 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter, IJT808Analyze { public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF367; public override byte ParamLength { get; set; } = 2; @@ -20,14 +22,27 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody /// public byte LateralRearApproachAlarmTimeThreshold { get; set; } + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x8103_0xF367 value = new JT808_0x8103_0xF367(); + value.ParamId = reader.ReadUInt32(); + value.ParamLength = reader.ReadByte(); + writer.WriteNumber($"[{ value.ParamId.ReadNumber()}]参数ID", value.ParamId); + writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength); + value.RearApproachAlarmTimeThreshold = reader.ReadByte(); + writer.WriteNumber($"[{value.RearApproachAlarmTimeThreshold.ReadNumber()}]后方接近报警时间阈值", value.RearApproachAlarmTimeThreshold); + value.LateralRearApproachAlarmTimeThreshold = reader.ReadByte(); + writer.WriteNumber($"[{value.LateralRearApproachAlarmTimeThreshold.ReadNumber()}]侧后方接近报警时间阈值", value.LateralRearApproachAlarmTimeThreshold); + } + public JT808_0x8103_0xF367 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_0x8103_0xF367 jT808_0X8103_0XF367 = new JT808_0x8103_0xF367(); - jT808_0X8103_0XF367.ParamId = reader.ReadUInt32(); - jT808_0X8103_0XF367.ParamLength = reader.ReadByte(); - jT808_0X8103_0XF367.RearApproachAlarmTimeThreshold = reader.ReadByte(); - jT808_0X8103_0XF367.LateralRearApproachAlarmTimeThreshold = reader.ReadByte(); - return jT808_0X8103_0XF367; + JT808_0x8103_0xF367 value = new JT808_0x8103_0xF367(); + value.ParamId = reader.ReadUInt32(); + value.ParamLength = reader.ReadByte(); + value.RearApproachAlarmTimeThreshold = reader.ReadByte(); + value.LateralRearApproachAlarmTimeThreshold = reader.ReadByte(); + return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF367 value, IJT808Config config) diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8900_0xF7.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8900_0xF7.cs index 2385c34..2fc77b5 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8900_0xF7.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8900_0xF7.cs @@ -1,14 +1,16 @@ using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessageBody; using JT808.Protocol.MessagePack; using System.Collections.Generic; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 查询基本信息 /// - public class JT808_0x8900_0xF7 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter + public class JT808_0x8900_0xF7 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter, IJT808Analyze { public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF7; /// @@ -20,6 +22,25 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody /// public List MultipleUSB { get; set; } + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x8900_0xF7 value = new JT808_0x8900_0xF7(); + value.USBCount = reader.ReadByte(); + writer.WriteNumber($"[{value.USBCount.ReadNumber()}]外设ID列表总数", value.USBCount); + if (value.USBCount > 0) + { + writer.WriteStartArray("外设ID列表"); + for (int i = 0; i < value.USBCount; i++) + { + writer.WriteStartObject(); + byte usbId = reader.ReadByte(); + writer.WriteNumber($"[{usbId.ReadNumber()}]外设ID", usbId); + writer.WriteEndObject(); + } + writer.WriteEndArray(); + } + } + public JT808_0x8900_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8900_0xF7 value = new JT808_0x8900_0xF7(); diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8900_0xF8.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8900_0xF8.cs index 177b2c0..eab3c9c 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8900_0xF8.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8900_0xF8.cs @@ -1,14 +1,16 @@ using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessageBody; using JT808.Protocol.MessagePack; using System.Collections.Generic; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 查询基本信息 /// - public class JT808_0x8900_0xF8 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter + public class JT808_0x8900_0xF8 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter, IJT808Analyze { public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF8; /// @@ -20,6 +22,25 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody /// public List MultipleUSB { get; set; } + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x8900_0xF8 value = new JT808_0x8900_0xF8(); + value.USBCount = reader.ReadByte(); + writer.WriteNumber($"[{value.USBCount.ReadNumber()}]外设ID列表总数", value.USBCount); + if (value.USBCount > 0) + { + writer.WriteStartArray("外设ID列表"); + for (int i = 0; i < value.USBCount; i++) + { + writer.WriteStartObject(); + byte usbId = reader.ReadByte(); + writer.WriteNumber($"[{usbId.ReadNumber()}]外设ID", usbId); + writer.WriteEndObject(); + } + writer.WriteEndArray(); + } + } + public JT808_0x8900_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8900_0xF8 value = new JT808_0x8900_0xF8(); diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9208.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9208.cs index 8bb9f19..aaf1c78 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9208.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9208.cs @@ -1,14 +1,16 @@ using JT808.Protocol.Extensions.JTActiveSafety.Metadata; using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 报警附件上传指令 /// - public class JT808_0x9208:JT808Bodies, IJT808MessagePackFormatter + public class JT808_0x9208: JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze { public override string Description => "报警附件上传指令"; public byte AttachmentServerIPLength { get; set; } @@ -31,14 +33,45 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody public override ushort MsgId => 0x9208; + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x9208 value = new JT808_0x9208(); + value.AttachmentServerIPLength = reader.ReadByte(); + writer.WriteNumber($"[{value.AttachmentServerIPLength.ReadNumber()}]服务IP地址长度", value.AttachmentServerIPLength); + string attachmentServerIPHex = reader.ReadVirtualArray(value.AttachmentServerIPLength).ToArray().ToHexString(); + value.AttachmentServerIP = reader.ReadString(value.AttachmentServerIPLength); + writer.WriteString($"[{AttachmentServerIP}]服务IP地址", value.AttachmentServerIP); + value.AttachmentServerIPTcpPort = reader.ReadUInt16(); + writer.WriteNumber($"[{value.AttachmentServerIPTcpPort.ReadNumber()}]TCP端口", value.AttachmentServerIPTcpPort); + value.AttachmentServerIPUdpPort = reader.ReadUInt16(); + writer.WriteNumber($"[{value.AttachmentServerIPUdpPort.ReadNumber()}]UDP端口", value.AttachmentServerIPUdpPort); + value.AlarmIdentification = new AlarmIdentificationProperty(); + string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); + value.AlarmIdentification.TerminalID = reader.ReadString(7); + value.AlarmIdentification.Time = reader.ReadDateTime6(); + 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); + string alarmIdHex = reader.ReadVirtualArray(32).ToArray().ToHexString(); + value.AlarmId = reader.ReadString(32); + writer.WriteString($"[{alarmIdHex}]平台给报警分配的唯一编号", value.AlarmId); + string retainHex = reader.ReadVirtualArray(16).ToArray().ToHexString(); + writer.WriteString($"预留", retainHex); + } + public JT808_0x9208 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_0x9208 jT808_0X9208 = new JT808_0x9208(); - jT808_0X9208.AttachmentServerIPLength = reader.ReadByte(); - jT808_0X9208.AttachmentServerIP = reader.ReadString(jT808_0X9208.AttachmentServerIPLength); - jT808_0X9208.AttachmentServerIPTcpPort = reader.ReadUInt16(); - jT808_0X9208.AttachmentServerIPUdpPort = reader.ReadUInt16(); - jT808_0X9208.AlarmIdentification = new AlarmIdentificationProperty + JT808_0x9208 value = new JT808_0x9208(); + value.AttachmentServerIPLength = reader.ReadByte(); + value.AttachmentServerIP = reader.ReadString(value.AttachmentServerIPLength); + value.AttachmentServerIPTcpPort = reader.ReadUInt16(); + value.AttachmentServerIPUdpPort = reader.ReadUInt16(); + value.AlarmIdentification = new AlarmIdentificationProperty { TerminalID = reader.ReadString(7), Time = reader.ReadDateTime6(), @@ -46,9 +79,9 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody AttachCount = reader.ReadByte(), Retain = reader.ReadByte() }; - jT808_0X9208.AlarmId = reader.ReadString(32); - jT808_0X9208.Retain = reader.ReadArray(16).ToArray(); - return jT808_0X9208; + value.AlarmId = reader.ReadString(32); + value.Retain = reader.ReadArray(16).ToArray(); + return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9208 value, IJT808Config config) diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9212.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9212.cs index 9415d41..d70740d 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9212.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9212.cs @@ -1,14 +1,16 @@ using JT808.Protocol.Extensions.JTActiveSafety.Metadata; using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System.Collections.Generic; +using System.Text.Json; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 文件上传完成消息应答 /// - public class JT808_0x9212:JT808Bodies, IJT808MessagePackFormatter + public class JT808_0x9212: JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze { public override string Description => "文件上传完成消息应答"; /// @@ -39,26 +41,57 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody public override ushort MsgId => 0x9212; + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x9212 value = new JT808_0x9212(); + value.FileNameLength = reader.ReadByte(); + writer.WriteNumber($"[{value.FileNameLength.ReadNumber()}]文件名称长度", value.FileNameLength); + string fileNameHex = reader.ReadVirtualArray(value.FileNameLength).ToArray().ToHexString(); + value.FileName = reader.ReadString(value.FileNameLength); + writer.WriteString($"[{fileNameHex}]文件名称", value.FileName); + value.FileType = reader.ReadByte(); + writer.WriteNumber($"[{value.FileType.ReadNumber()}]文件类型", value.FileType); + value.UploadResult = reader.ReadByte(); + writer.WriteNumber($"[{value.UploadResult.ReadNumber()}]上传结果", value.UploadResult); + value.DataPackageCount = reader.ReadByte(); + writer.WriteNumber($"[{value.DataPackageCount.ReadNumber()}]补传数据包数量", value.DataPackageCount); + if (value.DataPackageCount > 0) + { + writer.WriteStartArray("补传数据包列表"); + for (int i = 0; i < value.DataPackageCount; i++) + { + writer.WriteStartObject(); + DataPackageProperty dataPackageProperty = new DataPackageProperty(); + dataPackageProperty.Offset = reader.ReadUInt32(); + writer.WriteNumber($"[{dataPackageProperty.Offset.ReadNumber()}]数据偏移量", dataPackageProperty.Offset); + dataPackageProperty.Length = reader.ReadUInt32(); + writer.WriteNumber($"[{dataPackageProperty.Length.ReadNumber()}]数据长度", dataPackageProperty.Length); + writer.WriteEndObject(); + } + writer.WriteEndArray(); + } + } + public JT808_0x9212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_0x9212 jT808_0X9212 = new JT808_0x9212(); - jT808_0X9212.FileNameLength = reader.ReadByte(); - jT808_0X9212.FileName = reader.ReadString(jT808_0X9212.FileNameLength); - jT808_0X9212.FileType = reader.ReadByte(); - jT808_0X9212.UploadResult = reader.ReadByte(); - jT808_0X9212.DataPackageCount = reader.ReadByte(); - if (jT808_0X9212.DataPackageCount > 0) + JT808_0x9212 value = new JT808_0x9212(); + value.FileNameLength = reader.ReadByte(); + value.FileName = reader.ReadString(value.FileNameLength); + value.FileType = reader.ReadByte(); + value.UploadResult = reader.ReadByte(); + value.DataPackageCount = reader.ReadByte(); + if (value.DataPackageCount > 0) { - jT808_0X9212.DataPackages = new List(); - for (int i = 0; i < jT808_0X9212.DataPackageCount; i++) + value.DataPackages = new List(); + for (int i = 0; i < value.DataPackageCount; i++) { DataPackageProperty dataPackageProperty = new DataPackageProperty(); dataPackageProperty.Offset = reader.ReadUInt32(); dataPackageProperty.Length = reader.ReadUInt32(); - jT808_0X9212.DataPackages.Add(dataPackageProperty); + value.DataPackages.Add(dataPackageProperty); } } - return jT808_0X9212; + return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9212 value, IJT808Config config)