瀏覽代碼

增加0900透传分析器

tags/v1.0.1
smallchi(Koike) 5 年之前
父節點
當前提交
7d52862524
共有 8 個文件被更改,包括 154 次插入9 次删除
  1. +4
    -2
      README.md
  2. +14
    -2
      src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0900_Test.cs
  3. +2
    -2
      src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8900_Test.cs
  4. +18
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety/Enums/WorkingConditionType.cs
  5. +6
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml
  6. +45
    -2
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0900_0xF7.cs
  7. +64
    -1
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0900_0xF8.cs
  8. +1
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety/Metadata/JT808_0x0900_0xF7_USB.cs

+ 4
- 2
README.md 查看文件

@@ -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 | √ | √ | 外设系统信息 |

### 使用方法



src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_JTActiveSafety_0x0900_Test.cs → src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0900_Test.cs 查看文件

@@ -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());
}
}
}

src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_JTActiveSafety_0x8900_Test.cs → src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8900_Test.cs 查看文件

@@ -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()

+ 18
- 0
src/JT808.Protocol.Extensions.JTActiveSafety/Enums/WorkingConditionType.cs 查看文件

@@ -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,
}
}

+ 6
- 0
src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml 查看文件

@@ -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">


+ 45
- 2
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0900_0xF7.cs 查看文件

@@ -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();


+ 64
- 1
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0900_0xF8.cs 查看文件

@@ -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();


+ 1
- 0
src/JT808.Protocol.Extensions.JTActiveSafety/Metadata/JT808_0x0900_0xF7_USB.cs 查看文件

@@ -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>


Loading…
取消
儲存