@@ -34,9 +34,11 @@ JTActiveSafety协议、道路运输车辆主动安全智能防控系统-主动 | |||||
| 12 | 0x8103_0xF366 | √ | √ | 胎压监测系统参数 | | | 12 | 0x8103_0xF366 | √ | √ | 胎压监测系统参数 | | ||||
| 13 | 0x8103_0xF367 | √ | √ | 盲区监测系统参数 | | | 13 | 0x8103_0xF367 | √ | √ | 盲区监测系统参数 | | ||||
| 14 | 0x0900 | √ | √ | 上传基本信息 | | | 14 | 0x0900 | √ | √ | 上传基本信息 | | ||||
| 15 | 0x0900_USB_0xF7 | √ | √ | 外设工作状态 | | |||||
| 16 | 0x0900_USB_0xF8 | √ | √ | 外设系统信息 | | |||||
| 15 | 0x0900_0xF7 | √ | √ | 外设工作状态 | | |||||
| 16 | 0x0900_0xF8 | √ | √ | 外设系统信息 | | |||||
| 17 | 0x8900 | √ | √ | 查询基本信息 | | | 17 | 0x8900 | √ | √ | 查询基本信息 | | ||||
| 18 | 0x8900_0xF7 | √ | √ | 外设工作状态 | | |||||
| 19 | 0x8900_0xF8 | √ | √ | 外设系统信息 | | |||||
### 使用方法 | ### 使用方法 | ||||
@@ -9,10 +9,10 @@ using Xunit; | |||||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | namespace JT808.Protocol.Extensions.JTActiveSafety.Test | ||||
{ | { | ||||
public class JT808_JTActiveSafety_0x0900_Test | |||||
public class JT808_0x0900_Test | |||||
{ | { | ||||
JT808Serializer JT808Serializer; | JT808Serializer JT808Serializer; | ||||
public JT808_JTActiveSafety_0x0900_Test() | |||||
public JT808_0x0900_Test() | |||||
{ | { | ||||
ServiceCollection serviceDescriptors = new ServiceCollection(); | ServiceCollection serviceDescriptors = new ServiceCollection(); | ||||
serviceDescriptors.AddJT808Configure() | serviceDescriptors.AddJT808Configure() | ||||
@@ -62,6 +62,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||||
Assert.Equal(1u, jT808_0x0900_0xF7.USBMessages[1].AlarmStatus); | Assert.Equal(1u, jT808_0x0900_0xF7.USBMessages[1].AlarmStatus); | ||||
} | } | ||||
[Fact] | |||||
public void Test_0xF7_3() | |||||
{ | |||||
var json = JT808Serializer.Analyze<JT808_0x0900_0xF7>("020105020000000102050200000001".ToHexBytes()); | |||||
} | |||||
[Fact] | [Fact] | ||||
public void Test_0xF8_1() | public void Test_0xF8_1() | ||||
{ | { | ||||
@@ -104,5 +110,11 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||||
Assert.Equal("SoftwareVersionNumber", jT808_0x0900_0xF8.USBMessages[0].SoftwareVersionNumber); | Assert.Equal("SoftwareVersionNumber", jT808_0x0900_0xF8.USBMessages[0].SoftwareVersionNumber); | ||||
Assert.Equal("SoftwareVersionNumber".Length, jT808_0x0900_0xF8.USBMessages[0].SoftwareVersionNumberLength); | Assert.Equal("SoftwareVersionNumber".Length, jT808_0x0900_0xF8.USBMessages[0].SoftwareVersionNumberLength); | ||||
} | } | ||||
[Fact] | |||||
public void Test_0xF8_3() | |||||
{ | |||||
var json = JT808Serializer.Analyze<JT808_0x0900_0xF8>("01015C0B436F6D70616E744E616D650C50726F647563744D6F64656C15486172647761726556657273696F6E4E756D62657215536F66747761726556657273696F6E4E756D626572094465766963657349440C437573746F6D6572436F6465".ToHexBytes()); | |||||
} | |||||
} | } | ||||
} | } |
@@ -8,10 +8,10 @@ using Xunit; | |||||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | namespace JT808.Protocol.Extensions.JTActiveSafety.Test | ||||
{ | { | ||||
public class JT808_JTActiveSafety_0x8900_Test | |||||
public class JT808_0x8900_Test | |||||
{ | { | ||||
JT808Serializer JT808Serializer; | JT808Serializer JT808Serializer; | ||||
public JT808_JTActiveSafety_0x8900_Test() | |||||
public JT808_0x8900_Test() | |||||
{ | { | ||||
ServiceCollection serviceDescriptors = new ServiceCollection(); | ServiceCollection serviceDescriptors = new ServiceCollection(); | ||||
serviceDescriptors.AddJT808Configure() | serviceDescriptors.AddJT808Configure() |
@@ -0,0 +1,18 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 工作状态 | |||||
/// </summary> | |||||
public enum WorkingConditionType:byte | |||||
{ | |||||
正常工作=0x01, | |||||
待机状态=0x02, | |||||
升级维护=0x03, | |||||
设备异常 = 0x04, | |||||
断开连接 = 0x10, | |||||
} | |||||
} |
@@ -36,6 +36,11 @@ | |||||
盲点监测系统 | 盲点监测系统 | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.WorkingConditionType"> | |||||
<summary> | |||||
工作状态 | |||||
</summary> | |||||
</member> | |||||
<member name="F:JT808.Protocol.Extensions.JTActiveSafety.JT808_JTActiveSafety_Constants.JT808_0X0200_0x64"> | <member name="F:JT808.Protocol.Extensions.JTActiveSafety.JT808_JTActiveSafety_Constants.JT808_0X0200_0x64"> | ||||
<summary> | <summary> | ||||
附加信息ID 高级驾驶辅助系统报警信息 | 附加信息ID 高级驾驶辅助系统报警信息 | ||||
@@ -1133,6 +1138,7 @@ | |||||
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.Metadata.JT808_0x0900_0xF7_USB.WorkingCondition"> | <member name="P:JT808.Protocol.Extensions.JTActiveSafety.Metadata.JT808_0x0900_0xF7_USB.WorkingCondition"> | ||||
<summary> | <summary> | ||||
工作状态 | 工作状态 | ||||
<see cref="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.WorkingConditionType"/> | |||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.Metadata.JT808_0x0900_0xF7_USB.AlarmStatus"> | <member name="P:JT808.Protocol.Extensions.JTActiveSafety.Metadata.JT808_0x0900_0xF7_USB.AlarmStatus"> | ||||
@@ -1,14 +1,17 @@ | |||||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||||
using JT808.Protocol.Extensions.JTActiveSafety.Enums; | |||||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||||
using JT808.Protocol.Formatters; | using JT808.Protocol.Formatters; | ||||
using JT808.Protocol.Interfaces; | |||||
using JT808.Protocol.MessageBody; | using JT808.Protocol.MessageBody; | ||||
using JT808.Protocol.MessagePack; | using JT808.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | ||||
{ | { | ||||
public class JT808_0x0900_0xF7 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter<JT808_0x0900_0xF7> | |||||
public class JT808_0x0900_0xF7 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter<JT808_0x0900_0xF7>, IJT808Analyze | |||||
{ | { | ||||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF7; | public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF7; | ||||
/// <summary> | /// <summary> | ||||
@@ -18,6 +21,46 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||||
public List<JT808_0x0900_0xF7_USB> USBMessages { get; set; } | public List<JT808_0x0900_0xF7_USB> USBMessages { get; set; } | ||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||||
{ | |||||
JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); | |||||
value.USBMessageCount = reader.ReadByte(); | |||||
writer.WriteNumber($"[{value.USBMessageCount.ReadNumber()}]消息列表总数", value.USBMessageCount); | |||||
if (value.USBMessageCount > 0) | |||||
{ | |||||
writer.WriteStartArray("消息列表"); | |||||
for (int i = 0; i < value.USBMessageCount; i++) | |||||
{ | |||||
writer.WriteStartObject(); | |||||
JT808_0x0900_0xF7_USB item = new JT808_0x0900_0xF7_USB(); | |||||
item.USBID = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.USBID.ReadNumber()}]外设ID", item.USBID); | |||||
item.MessageLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.MessageLength.ReadNumber()}]消息长度", item.MessageLength); | |||||
item.WorkingCondition = reader.ReadByte(); | |||||
var workingCondition = (WorkingConditionType)item.WorkingCondition; | |||||
writer.WriteNumber($"[{item.WorkingCondition.ReadNumber()}]工作状态-{workingCondition.ToString()}", item.WorkingCondition); | |||||
item.AlarmStatus = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{item.AlarmStatus.ReadNumber()}]报警状态", item.AlarmStatus); | |||||
var alarmStatusBits = Convert.ToString(item.AlarmStatus, 2).PadLeft(32, '0').AsSpan(); | |||||
writer.WriteStartObject($"报警状态对象[{alarmStatusBits.ToString()}]"); | |||||
writer.WriteString($"[bit12~bit31]预留", alarmStatusBits.Slice(12).ToString()); | |||||
writer.WriteString($"]bit11]定位模块异常", alarmStatusBits[11].ToString()); | |||||
writer.WriteString($"[bit10]通讯模块异常", alarmStatusBits[10].ToString()); | |||||
writer.WriteString($"[bit6~bit9]预留", alarmStatusBits.Slice(6,4).ToString()); | |||||
writer.WriteString($"[bit5]电池异常", alarmStatusBits[5].ToString()); | |||||
writer.WriteString($"[bit4]扬声器异常", alarmStatusBits[4].ToString()); | |||||
writer.WriteString($"[bit3]红外补光异常", alarmStatusBits[3].ToString()); | |||||
writer.WriteString($"[bit2]辅存储器异常", alarmStatusBits[2].ToString()); | |||||
writer.WriteString($"[bit1]主存储器异常", alarmStatusBits[1].ToString()); | |||||
writer.WriteString($"[bit0]摄像头异常", alarmStatusBits[0].ToString()); | |||||
writer.WriteEndObject(); | |||||
writer.WriteEndObject(); | |||||
} | |||||
writer.WriteEndArray(); | |||||
} | |||||
} | |||||
public JT808_0x0900_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x0900_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); | JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); | ||||
@@ -1,14 +1,16 @@ | |||||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | ||||
using JT808.Protocol.Formatters; | using JT808.Protocol.Formatters; | ||||
using JT808.Protocol.Interfaces; | |||||
using JT808.Protocol.MessageBody; | using JT808.Protocol.MessageBody; | ||||
using JT808.Protocol.MessagePack; | using JT808.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | ||||
{ | { | ||||
public class JT808_0x0900_0xF8 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter<JT808_0x0900_0xF8> | |||||
public class JT808_0x0900_0xF8 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter<JT808_0x0900_0xF8>, IJT808Analyze | |||||
{ | { | ||||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF8; | public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF8; | ||||
/// <summary> | /// <summary> | ||||
@@ -16,6 +18,67 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public byte USBMessageCount { get; set; } | public byte USBMessageCount { get; set; } | ||||
public List<JT808_0x0900_0xF8_USB> USBMessages { get; set; } | public List<JT808_0x0900_0xF8_USB> USBMessages { get; set; } | ||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||||
{ | |||||
JT808_0x0900_0xF8 value = new JT808_0x0900_0xF8(); | |||||
value.USBMessageCount = reader.ReadByte(); | |||||
writer.WriteNumber($"[{value.USBMessageCount.ReadNumber()}]消息列表总数", value.USBMessageCount); | |||||
if (value.USBMessageCount > 0) | |||||
{ | |||||
writer.WriteStartArray("消息列表"); | |||||
for (int i = 0; i < value.USBMessageCount; i++) | |||||
{ | |||||
writer.WriteStartObject(); | |||||
JT808_0x0900_0xF8_USB item = new JT808_0x0900_0xF8_USB(); | |||||
item.USBID = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.USBID.ReadNumber()}]外设ID", item.USBID); | |||||
item.MessageLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.MessageLength.ReadNumber()}]消息长度", item.MessageLength); | |||||
item.CompantNameLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.CompantNameLength.ReadNumber()}]公司名称长度", item.CompantNameLength); | |||||
string compantNameHex = reader.ReadVirtualArray(item.CompantNameLength).ToArray().ToHexString(); | |||||
item.CompantName = reader.ReadString(item.CompantNameLength); | |||||
writer.WriteString($"[{compantNameHex}]公司名称", item.CompantName); | |||||
item.ProductModelLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.ProductModelLength.ReadNumber()}]产品型号长度", item.ProductModelLength); | |||||
string productModelHex = reader.ReadVirtualArray(item.ProductModelLength).ToArray().ToHexString(); | |||||
item.ProductModel = reader.ReadString(item.ProductModelLength); | |||||
writer.WriteString($"[{productModelHex}]产品型号", item.ProductModel); | |||||
item.HardwareVersionNumberLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.HardwareVersionNumberLength.ReadNumber()}]硬件版本号长度", item.HardwareVersionNumberLength); | |||||
string hardwareVersionNumberHex = reader.ReadVirtualArray(item.HardwareVersionNumberLength).ToArray().ToHexString(); | |||||
item.HardwareVersionNumber = reader.ReadString(item.HardwareVersionNumberLength); | |||||
writer.WriteString($"[{hardwareVersionNumberHex}]硬件版本号", item.HardwareVersionNumber); | |||||
item.SoftwareVersionNumberLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.SoftwareVersionNumberLength.ReadNumber()}]软件版本号长度", item.SoftwareVersionNumberLength); | |||||
string softwareVersionNumberHex = reader.ReadVirtualArray(item.SoftwareVersionNumberLength).ToArray().ToHexString(); | |||||
item.SoftwareVersionNumber = reader.ReadString(item.SoftwareVersionNumberLength); | |||||
writer.WriteString($"[{softwareVersionNumberHex}]软件版本号", item.SoftwareVersionNumber); | |||||
item.DevicesIDLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{item.DevicesIDLength.ReadNumber()}]设备ID长度", item.DevicesIDLength); | |||||
string devicesIDHex = reader.ReadVirtualArray(item.DevicesIDLength).ToArray().ToHexString(); | |||||
item.DevicesID = reader.ReadString(item.DevicesIDLength); | |||||
writer.WriteString($"[{devicesIDHex}]设备ID", item.DevicesID); | |||||
item.CustomerCodeLength = reader.ReadByte(); | |||||
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.WriteEndObject(); | |||||
} | |||||
writer.WriteEndArray(); | |||||
} | |||||
} | |||||
public JT808_0x0900_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x0900_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x0900_0xF8 value = new JT808_0x0900_0xF8(); | JT808_0x0900_0xF8 value = new JT808_0x0900_0xF8(); | ||||
@@ -17,6 +17,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||||
public byte MessageLength { get; set; } | public byte MessageLength { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 工作状态 | /// 工作状态 | ||||
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.WorkingConditionType"/> | |||||
/// </summary> | /// </summary> | ||||
public byte WorkingCondition { get; set; } | public byte WorkingCondition { get; set; } | ||||
/// <summary> | /// <summary> | ||||