@@ -34,9 +34,11 @@ JTActiveSafety协议、道路运输车辆主动安全智能防控系统-主动 | |||
| 12 | 0x8103_0xF366 | √ | √ | 胎压监测系统参数 | | |||
| 13 | 0x8103_0xF367 | √ | √ | 盲区监测系统参数 | | |||
| 14 | 0x0900 | √ | √ | 上传基本信息 | | |||
| 15 | 0x0900_USB_0xF7 | √ | √ | 外设工作状态 | | |||
| 16 | 0x0900_USB_0xF8 | √ | √ | 外设系统信息 | | |||
| 15 | 0x0900_0xF7 | √ | √ | 外设工作状态 | | |||
| 16 | 0x0900_0xF8 | √ | √ | 外设系统信息 | | |||
| 17 | 0x8900 | √ | √ | 查询基本信息 | | |||
| 18 | 0x8900_0xF7 | √ | √ | 外设工作状态 | | |||
| 19 | 0x8900_0xF8 | √ | √ | 外设系统信息 | | |||
### 使用方法 | |||
@@ -9,10 +9,10 @@ using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_JTActiveSafety_0x0900_Test | |||
public class JT808_0x0900_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_JTActiveSafety_0x0900_Test() | |||
public JT808_0x0900_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
@@ -62,6 +62,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
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] | |||
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".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 | |||
{ | |||
public class JT808_JTActiveSafety_0x8900_Test | |||
public class JT808_0x8900_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_JTActiveSafety_0x8900_Test() | |||
public JT808_0x8900_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
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> | |||
</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"> | |||
<summary> | |||
附加信息ID 高级驾驶辅助系统报警信息 | |||
@@ -1133,6 +1138,7 @@ | |||
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.Metadata.JT808_0x0900_0xF7_USB.WorkingCondition"> | |||
<summary> | |||
工作状态 | |||
<see cref="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.WorkingConditionType"/> | |||
</summary> | |||
</member> | |||
<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.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
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_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; | |||
/// <summary> | |||
@@ -18,6 +21,46 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
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) | |||
{ | |||
JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); | |||
@@ -1,14 +1,16 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
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_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; | |||
/// <summary> | |||
@@ -16,6 +18,67 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public byte USBMessageCount { 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) | |||
{ | |||
JT808_0x0900_0xF8 value = new JT808_0x0900_0xF8(); | |||
@@ -17,6 +17,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
public byte MessageLength { get; set; } | |||
/// <summary> | |||
/// 工作状态 | |||
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.WorkingConditionType"/> | |||
/// </summary> | |||
public byte WorkingCondition { get; set; } | |||
/// <summary> | |||