Преглед изворни кода

增加0200附加信息分析器

tags/v1.0.1
smallchi(Koike) пре 5 година
родитељ
комит
c0b9f02dc2
8 измењених фајлова са 534 додато и 55 уклоњено
  1. +6
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs
  2. +7
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x66_Test.cs
  3. +5
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x67_Test.cs
  4. +1
    -1
      src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml
  5. +19
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs
  6. +166
    -19
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs
  7. +171
    -19
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs
  8. +159
    -16
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs

+ 6
- 0
src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs Прегледај датотеку

@@ -84,5 +84,11 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test
Assert.Equal(18, jT808_0X0200_0X65.Fatigue); Assert.Equal(18, jT808_0X0200_0X65.Fatigue);
Assert.Equal(19, jT808_0X0200_0X65.VehicleState); Assert.Equal(19, jT808_0X0200_0X65.VehicleState);
} }

[Fact]
public void Json()
{
var json = JT808Serializer.Analyze<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C00001807151010106520000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes());
}
} }
} }

+ 7
- 0
src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x66_Test.cs Прегледај датотеку

@@ -72,6 +72,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007", hex); Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007", hex);
} }

[Fact] [Fact]
public void Deserialize() public void Deserialize()
{ {
@@ -103,5 +104,11 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test
Assert.Equal(17, jT808_0X0200_0X66.Speed); Assert.Equal(17, jT808_0X0200_0X66.Speed);
Assert.Equal(19, jT808_0X0200_0X66.VehicleState); Assert.Equal(19, jT808_0X0200_0X66.VehicleState);
} }

[Fact]
public void Json()
{
var json = JT808Serializer.Analyze<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007".ToHexBytes());
}
} }
} }

+ 5
- 0
src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x67_Test.cs Прегледај датотеку

@@ -80,5 +80,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test
Assert.Equal(17, jT808_0X0200_0X67.Speed); Assert.Equal(17, jT808_0X0200_0X67.Speed);
Assert.Equal(19, jT808_0X0200_0X67.VehicleState); Assert.Equal(19, jT808_0X0200_0X67.VehicleState);
} }
[Fact]
public void Json()
{
var json = JT808Serializer.Analyze<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C0000180715101010671A000000010C09081100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes());
}
} }
} }

+ 1
- 1
src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml Прегледај датотеку

@@ -195,7 +195,7 @@
</member> </member>
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.MessageBody.JT808_0x0200_0x65.AlarmLevel"> <member name="P:JT808.Protocol.Extensions.JTActiveSafety.MessageBody.JT808_0x0200_0x65.AlarmLevel">
<summary> <summary>
报警/事件类型
报警级别
</summary> </summary>
</member> </member>
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.MessageBody.JT808_0x0200_0x65.Fatigue"> <member name="P:JT808.Protocol.Extensions.JTActiveSafety.MessageBody.JT808_0x0200_0x65.Fatigue">


+ 19
- 0
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs Прегледај датотеку

@@ -227,6 +227,25 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss")); writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.VehicleState = reader.ReadUInt16(); value.VehicleState = reader.ReadUInt16();
writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState); writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState);
var vehicleStateBits = Convert.ToString(value.VehicleState, 2).PadLeft(16, '0');
writer.WriteStartObject($"车辆状态对象[{vehicleStateBits}]");
writer.WriteString($"[{vehicleStateBits[15]}]Bit0ACC状态", vehicleStateBits[15] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[14]}]Bit1左转向状态", vehicleStateBits[14] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[13]}]Bit2右转向状态", vehicleStateBits[13] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[12]}]Bit3雨刮器状态", vehicleStateBits[12] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[11]}]Bit4制动状态", vehicleStateBits[11] == '0' ? "未制动" : "制动");
writer.WriteString($"[{vehicleStateBits[10]}]Bit5插卡状态", vehicleStateBits[10] == '0' ? "未插卡" : "已插卡");
writer.WriteString($"[{vehicleStateBits[9]}]Bit6自定义", vehicleStateBits[9].ToString());
writer.WriteString($"[{vehicleStateBits[8]}]Bit7自定义", vehicleStateBits[8].ToString());
writer.WriteString($"[{vehicleStateBits[7]}]Bit8自定义", vehicleStateBits[7].ToString());
writer.WriteString($"[{vehicleStateBits[6]}]Bit9自定义", vehicleStateBits[6].ToString());
writer.WriteString($"[{vehicleStateBits[5]}]Bit10定位状态", vehicleStateBits[5] == '0' ? "未定位" : "已定位");
writer.WriteString($"[{vehicleStateBits[4]}]Bit11自定义", vehicleStateBits[4].ToString());
writer.WriteString($"[{vehicleStateBits[3]}]Bit12自定义", vehicleStateBits[3].ToString());
writer.WriteString($"[{vehicleStateBits[2]}]Bit13自定义", vehicleStateBits[2].ToString());
writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString());
writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString());
writer.WriteEndObject();
value.AlarmIdentification = new AlarmIdentificationProperty value.AlarmIdentification = new AlarmIdentificationProperty
{ {
TerminalID = reader.ReadString(7), TerminalID = reader.ReadString(7),


+ 166
- 19
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs Прегледај датотеку

@@ -1,17 +1,19 @@
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
{ {
/// <summary> /// <summary>
/// 驾驶员状态监测系统报警信息 /// 驾驶员状态监测系统报警信息
/// </summary> /// </summary>
public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x65>
public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x65>, IJT808Analyze
{ {
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x65; public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x65;
public override byte AttachInfoLength { get; set; } = 32; public override byte AttachInfoLength { get; set; } = 32;
@@ -28,7 +30,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// </summary> /// </summary>
public byte AlarmOrEventType{ get; set; } public byte AlarmOrEventType{ get; set; }
/// <summary> /// <summary>
/// 报警/事件类型
/// 报警级别
/// </summary> /// </summary>
public byte AlarmLevel { get; set; } public byte AlarmLevel { get; set; }
/// <summary> /// <summary>
@@ -70,24 +72,169 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// </summary> /// </summary>
public AlarmIdentificationProperty AlarmIdentification { get; set; } public AlarmIdentificationProperty AlarmIdentification { get; set; }


public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x0200_0x65 value = new JT808_0x0200_0x65();
value.AttachInfoId = reader.ReadByte();
writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId);
value.AttachInfoLength = reader.ReadByte();
writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength);
value.AlarmId = reader.ReadUInt32();
writer.WriteNumber($"[{value.AlarmId.ReadNumber()}]报警ID", value.AlarmId);
value.FlagState = reader.ReadByte();
string flagStateString = "未知";
switch (value.FlagState)
{
case 0:
flagStateString = "不可用";
break;
case 1:
flagStateString = "开始标志";
break;
case 2:
flagStateString = "结束标志";
break;
}
writer.WriteNumber($"[{value.FlagState.ReadNumber()}]标志状态-{flagStateString}", value.FlagState);
value.AlarmOrEventType = reader.ReadByte();
string alarmOrEventTypeString = "";
switch (value.AlarmOrEventType)
{
case 0x01:
alarmOrEventTypeString = "前向碰撞报警";
break;
case 0x02:
alarmOrEventTypeString = "车道偏离报警";
break;
case 0x03:
alarmOrEventTypeString = "车距过近报警";
break;
case 0x04:
alarmOrEventTypeString = "行人碰撞报警";
break;
case 0x05:
alarmOrEventTypeString = "频繁变道报警";
break;
case 0x06:
alarmOrEventTypeString = "道路标识超限报警";
break;
case 0x07:
alarmOrEventTypeString = "障碍物报警";
break;
case 0x08:
case 0x09:
case 0x0A:
case 0x0B:
case 0x0C:
case 0x0D:
case 0x0E:
case 0x0F:
alarmOrEventTypeString = "用户自定义";
break;
case 0x10:
alarmOrEventTypeString = "道路标志识别事件";
break;
case 0x11:
alarmOrEventTypeString = "主动抓拍事件";
break;
case 0x12:
case 0x13:
case 0x14:
case 0x15:
case 0x16:
case 0x17:
case 0x18:
case 0x19:
case 0x1A:
case 0x1B:
case 0x1C:
case 0x1D:
case 0x1E:
case 0x1F:
alarmOrEventTypeString = "用户自定义";
break;
}
writer.WriteNumber($"[{value.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", value.AlarmOrEventType);
value.AlarmLevel = reader.ReadByte();
string alarmLevelString = "未知";
switch (value.AlarmLevel)
{
case 0x01:
alarmLevelString = "一级报警";
break;
case 0x02:
alarmLevelString = "二级报警";
break;
}
writer.WriteNumber($"[{value.AlarmLevel.ReadNumber()}]报警级别-{alarmLevelString}", value.AlarmLevel);
value.Fatigue = reader.ReadByte();
writer.WriteNumber($"[{value.Fatigue.ReadNumber()}]疲劳程度", value.Fatigue);
value.Retain = reader.ReadArray(4).ToArray();
writer.WriteString("预留", value.Retain.ToHexString());
value.Speed = reader.ReadByte();
writer.WriteNumber($"[{value.Speed.ReadNumber()}]车速", value.Speed);
value.Altitude = reader.ReadUInt16();
writer.WriteNumber($"[{value.Altitude.ReadNumber()}]高程", value.Altitude);
value.Latitude = (int)reader.ReadUInt32();
writer.WriteNumber($"[{value.Latitude.ReadNumber()}]纬度", value.Latitude);
value.Longitude = (int)reader.ReadUInt32();
writer.WriteNumber($"[{value.Longitude.ReadNumber()}]经度", value.Longitude);
value.AlarmTime = reader.ReadDateTime6();
writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.VehicleState = reader.ReadUInt16();
writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState);
var vehicleStateBits = Convert.ToString(value.VehicleState, 2).PadLeft(16, '0');
writer.WriteStartObject($"车辆状态对象[{vehicleStateBits}]");
writer.WriteString($"[{vehicleStateBits[15]}]Bit0ACC状态", vehicleStateBits[15] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[14]}]Bit1左转向状态", vehicleStateBits[14] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[13]}]Bit2右转向状态", vehicleStateBits[13] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[12]}]Bit3雨刮器状态", vehicleStateBits[12] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[11]}]Bit4制动状态", vehicleStateBits[11] == '0' ? "未制动" : "制动");
writer.WriteString($"[{vehicleStateBits[10]}]Bit5插卡状态", vehicleStateBits[10] == '0' ? "未插卡" : "已插卡");
writer.WriteString($"[{vehicleStateBits[9]}]Bit6自定义", vehicleStateBits[9].ToString());
writer.WriteString($"[{vehicleStateBits[8]}]Bit7自定义", vehicleStateBits[8].ToString());
writer.WriteString($"[{vehicleStateBits[7]}]Bit8自定义", vehicleStateBits[7].ToString());
writer.WriteString($"[{vehicleStateBits[6]}]Bit9自定义", vehicleStateBits[6].ToString());
writer.WriteString($"[{vehicleStateBits[5]}]Bit10定位状态", vehicleStateBits[5] == '0' ? "未定位" : "已定位");
writer.WriteString($"[{vehicleStateBits[4]}]Bit11自定义", vehicleStateBits[4].ToString());
writer.WriteString($"[{vehicleStateBits[3]}]Bit12自定义", vehicleStateBits[3].ToString());
writer.WriteString($"[{vehicleStateBits[2]}]Bit13自定义", vehicleStateBits[2].ToString());
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);
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);
}

public JT808_0x0200_0x65 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) public JT808_0x0200_0x65 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{ {
JT808_0x0200_0x65 jT808_0X0200_0X65 = new JT808_0x0200_0x65();
jT808_0X0200_0X65.AttachInfoId = reader.ReadByte();
jT808_0X0200_0X65.AttachInfoLength = reader.ReadByte();
jT808_0X0200_0X65.AlarmId = reader.ReadUInt32();
jT808_0X0200_0X65.FlagState = reader.ReadByte();
jT808_0X0200_0X65.AlarmOrEventType = reader.ReadByte();
jT808_0X0200_0X65.AlarmLevel = reader.ReadByte();
jT808_0X0200_0X65.Fatigue = reader.ReadByte();
jT808_0X0200_0X65.Retain = reader.ReadArray(4).ToArray();
jT808_0X0200_0X65.Speed = reader.ReadByte();
jT808_0X0200_0X65.Altitude = reader.ReadUInt16();
jT808_0X0200_0X65.Latitude = (int)reader.ReadUInt32();
jT808_0X0200_0X65.Longitude = (int)reader.ReadUInt32();
jT808_0X0200_0X65.AlarmTime = reader.ReadDateTime6();
jT808_0X0200_0X65.VehicleState = reader.ReadUInt16();
jT808_0X0200_0X65.AlarmIdentification = new AlarmIdentificationProperty
JT808_0x0200_0x65 value = new JT808_0x0200_0x65();
value.AttachInfoId = reader.ReadByte();
value.AttachInfoLength = reader.ReadByte();
value.AlarmId = reader.ReadUInt32();
value.FlagState = reader.ReadByte();
value.AlarmOrEventType = reader.ReadByte();
value.AlarmLevel = reader.ReadByte();
value.Fatigue = reader.ReadByte();
value.Retain = reader.ReadArray(4).ToArray();
value.Speed = reader.ReadByte();
value.Altitude = reader.ReadUInt16();
value.Latitude = (int)reader.ReadUInt32();
value.Longitude = (int)reader.ReadUInt32();
value.AlarmTime = reader.ReadDateTime6();
value.VehicleState = reader.ReadUInt16();
value.AlarmIdentification = new AlarmIdentificationProperty
{ {
TerminalID = reader.ReadString(7), TerminalID = reader.ReadString(7),
Time = reader.ReadDateTime6(), Time = reader.ReadDateTime6(),
@@ -95,7 +242,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
AttachCount = reader.ReadByte(), AttachCount = reader.ReadByte(),
Retain = reader.ReadByte() Retain = reader.ReadByte()
}; };
return jT808_0X0200_0X65;
return value;
} }


public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x65 value, IJT808Config config) public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x65 value, IJT808Config config)


+ 171
- 19
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs Прегледај датотеку

@@ -1,17 +1,19 @@
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
{ {
/// <summary> /// <summary>
/// 胎压监测系统报警信息 /// 胎压监测系统报警信息
/// </summary> /// </summary>
public class JT808_0x0200_0x66 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x66>
public class JT808_0x0200_0x66 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x66>, IJT808Analyze
{ {
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x66; public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x66;
public override byte AttachInfoLength { get; set; } public override byte AttachInfoLength { get; set; }
@@ -62,20 +64,170 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// </summary> /// </summary>
public List<AlarmOrEventProperty> AlarmOrEvents { get; set; } public List<AlarmOrEventProperty> AlarmOrEvents { get; set; }


public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x0200_0x66 value = new JT808_0x0200_0x66();
value.AttachInfoId = reader.ReadByte();
writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId);
value.AttachInfoLength = reader.ReadByte();
writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength);
value.AlarmId = reader.ReadUInt32();
writer.WriteNumber($"[{value.AlarmId.ReadNumber()}]报警ID", value.AlarmId);
value.FlagState = reader.ReadByte();
string flagStateString = "未知";
switch (value.FlagState)
{
case 0:
flagStateString = "不可用";
break;
case 1:
flagStateString = "开始标志";
break;
case 2:
flagStateString = "结束标志";
break;
}
writer.WriteNumber($"[{value.FlagState.ReadNumber()}]标志状态-{flagStateString}", value.FlagState);
value.Speed = reader.ReadByte();
writer.WriteNumber($"[{value.Speed.ReadNumber()}]车速", value.Speed);
value.Altitude = reader.ReadUInt16();
writer.WriteNumber($"[{value.Altitude.ReadNumber()}]高程", value.Altitude);
value.Latitude = (int)reader.ReadUInt32();
writer.WriteNumber($"[{value.Latitude.ReadNumber()}]纬度", value.Latitude);
value.Longitude = (int)reader.ReadUInt32();
writer.WriteNumber($"[{value.Longitude.ReadNumber()}]经度", value.Longitude);
value.AlarmTime = reader.ReadDateTime6();
writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.VehicleState = reader.ReadUInt16();
writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState);
var vehicleStateBits = Convert.ToString(value.VehicleState, 2).PadLeft(16, '0');
writer.WriteStartObject($"车辆状态对象[{vehicleStateBits}]");
writer.WriteString($"[{vehicleStateBits[15]}]Bit0ACC状态", vehicleStateBits[15] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[14]}]Bit1左转向状态", vehicleStateBits[14] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[13]}]Bit2右转向状态", vehicleStateBits[13] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[12]}]Bit3雨刮器状态", vehicleStateBits[12] == '0' ? "关闭" : "打开");
writer.WriteString($"[{vehicleStateBits[11]}]Bit4制动状态", vehicleStateBits[11] == '0' ? "未制动" : "制动");
writer.WriteString($"[{vehicleStateBits[10]}]Bit5插卡状态", vehicleStateBits[10] == '0' ? "未插卡" : "已插卡");
writer.WriteString($"[{vehicleStateBits[9]}]Bit6自定义", vehicleStateBits[9].ToString());
writer.WriteString($"[{vehicleStateBits[8]}]Bit7自定义", vehicleStateBits[8].ToString());
writer.WriteString($"[{vehicleStateBits[7]}]Bit8自定义", vehicleStateBits[7].ToString());
writer.WriteString($"[{vehicleStateBits[6]}]Bit9自定义", vehicleStateBits[6].ToString());
writer.WriteString($"[{vehicleStateBits[5]}]Bit10定位状态", vehicleStateBits[5] == '0' ? "未定位" : "已定位");
writer.WriteString($"[{vehicleStateBits[4]}]Bit11自定义", vehicleStateBits[4].ToString());
writer.WriteString($"[{vehicleStateBits[3]}]Bit12自定义", vehicleStateBits[3].ToString());
writer.WriteString($"[{vehicleStateBits[2]}]Bit13自定义", vehicleStateBits[2].ToString());
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);
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);
value.AlarmOrEventCount = reader.ReadByte();
writer.WriteNumber($"[{value.AlarmOrEventCount.ReadNumber()}]报警_事件列表总数", value.AlarmOrEventCount);
if (value.AlarmOrEventCount > 0)
{
writer.WriteStartArray("报警_事件列表");
for (int i = 0; i < value.AlarmOrEventCount; i++)
{
writer.WriteStartObject();
AlarmOrEventProperty item = new AlarmOrEventProperty();
item.TirePressureAlarmPosition = reader.ReadByte();
writer.WriteNumber($"[{item.TirePressureAlarmPosition.ReadNumber()}]胎压报警位置", item.TirePressureAlarmPosition);
item.AlarmOrEventType = reader.ReadUInt16();
string alarmOrEventTypeString = "";
switch (item.AlarmOrEventType)
{
case 0x01:
alarmOrEventTypeString = "前向碰撞报警";
break;
case 0x02:
alarmOrEventTypeString = "车道偏离报警";
break;
case 0x03:
alarmOrEventTypeString = "车距过近报警";
break;
case 0x04:
alarmOrEventTypeString = "行人碰撞报警";
break;
case 0x05:
alarmOrEventTypeString = "频繁变道报警";
break;
case 0x06:
alarmOrEventTypeString = "道路标识超限报警";
break;
case 0x07:
alarmOrEventTypeString = "障碍物报警";
break;
case 0x08:
case 0x09:
case 0x0A:
case 0x0B:
case 0x0C:
case 0x0D:
case 0x0E:
case 0x0F:
alarmOrEventTypeString = "用户自定义";
break;
case 0x10:
alarmOrEventTypeString = "道路标志识别事件";
break;
case 0x11:
alarmOrEventTypeString = "主动抓拍事件";
break;
case 0x12:
case 0x13:
case 0x14:
case 0x15:
case 0x16:
case 0x17:
case 0x18:
case 0x19:
case 0x1A:
case 0x1B:
case 0x1C:
case 0x1D:
case 0x1E:
case 0x1F:
alarmOrEventTypeString = "用户自定义";
break;
}
writer.WriteNumber($"[{item.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", item.AlarmOrEventType);
item.TirePressure = reader.ReadUInt16();
writer.WriteNumber($"[{item.TirePressure.ReadNumber()}]胎压Kpa", item.TirePressure);
item.TireTemperature = reader.ReadUInt16();
writer.WriteNumber($"[{item.TireTemperature.ReadNumber()}]胎温℃", item.TireTemperature);
item.BatteryLevel = reader.ReadUInt16();
writer.WriteNumber($"[{item.BatteryLevel.ReadNumber()}]电池电量%", item.BatteryLevel);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
}

public JT808_0x0200_0x66 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) public JT808_0x0200_0x66 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{ {
JT808_0x0200_0x66 jT808_0X0200_0X66 = new JT808_0x0200_0x66();
jT808_0X0200_0X66.AttachInfoId = reader.ReadByte();
jT808_0X0200_0X66.AttachInfoLength = reader.ReadByte();
jT808_0X0200_0X66.AlarmId = reader.ReadUInt32();
jT808_0X0200_0X66.FlagState = reader.ReadByte();
jT808_0X0200_0X66.Speed = reader.ReadByte();
jT808_0X0200_0X66.Altitude = reader.ReadUInt16();
jT808_0X0200_0X66.Latitude = (int)reader.ReadUInt32();
jT808_0X0200_0X66.Longitude = (int)reader.ReadUInt32();
jT808_0X0200_0X66.AlarmTime = reader.ReadDateTime6();
jT808_0X0200_0X66.VehicleState = reader.ReadUInt16();
jT808_0X0200_0X66.AlarmIdentification = new AlarmIdentificationProperty
JT808_0x0200_0x66 value = new JT808_0x0200_0x66();
value.AttachInfoId = reader.ReadByte();
value.AttachInfoLength = reader.ReadByte();
value.AlarmId = reader.ReadUInt32();
value.FlagState = reader.ReadByte();
value.Speed = reader.ReadByte();
value.Altitude = reader.ReadUInt16();
value.Latitude = (int)reader.ReadUInt32();
value.Longitude = (int)reader.ReadUInt32();
value.AlarmTime = reader.ReadDateTime6();
value.VehicleState = reader.ReadUInt16();
value.AlarmIdentification = new AlarmIdentificationProperty
{ {
TerminalID = reader.ReadString(7), TerminalID = reader.ReadString(7),
Time = reader.ReadDateTime6(), Time = reader.ReadDateTime6(),
@@ -83,11 +235,11 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
AttachCount = reader.ReadByte(), AttachCount = reader.ReadByte(),
Retain = reader.ReadByte() Retain = reader.ReadByte()
}; };
jT808_0X0200_0X66.AlarmOrEventCount = reader.ReadByte();
if (jT808_0X0200_0X66.AlarmOrEventCount > 0)
value.AlarmOrEventCount = reader.ReadByte();
if (value.AlarmOrEventCount > 0)
{ {
jT808_0X0200_0X66.AlarmOrEvents = new List<AlarmOrEventProperty>();
for (int i = 0; i < jT808_0X0200_0X66.AlarmOrEventCount; i++)
value.AlarmOrEvents = new List<AlarmOrEventProperty>();
for (int i = 0; i < value.AlarmOrEventCount; i++)
{ {
AlarmOrEventProperty alarmOrEventProperty = new AlarmOrEventProperty(); AlarmOrEventProperty alarmOrEventProperty = new AlarmOrEventProperty();
alarmOrEventProperty.TirePressureAlarmPosition = reader.ReadByte(); alarmOrEventProperty.TirePressureAlarmPosition = reader.ReadByte();
@@ -95,10 +247,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
alarmOrEventProperty.TirePressure = reader.ReadUInt16(); alarmOrEventProperty.TirePressure = reader.ReadUInt16();
alarmOrEventProperty.TireTemperature = reader.ReadUInt16(); alarmOrEventProperty.TireTemperature = reader.ReadUInt16();
alarmOrEventProperty.BatteryLevel = reader.ReadUInt16(); alarmOrEventProperty.BatteryLevel = reader.ReadUInt16();
jT808_0X0200_0X66.AlarmOrEvents.Add(alarmOrEventProperty);
value.AlarmOrEvents.Add(alarmOrEventProperty);
} }
} }
return jT808_0X0200_0X66;
return value;
} }


public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x66 value, IJT808Config config) public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x66 value, IJT808Config config)


+ 159
- 16
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs Прегледај датотеку

@@ -1,17 +1,19 @@
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
{ {
/// <summary> /// <summary>
/// 盲区监测系统报警信息 /// 盲区监测系统报警信息
/// </summary> /// </summary>
public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x67>
public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x67>, IJT808Analyze
{ {
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x67; public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x67;
public override byte AttachInfoLength { get; set; } = 26; public override byte AttachInfoLength { get; set; } = 26;
@@ -62,22 +64,163 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// </summary> /// </summary>
public AlarmIdentificationProperty AlarmIdentification { get; set; } public AlarmIdentificationProperty AlarmIdentification { get; set; }


public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x0200_0x67 value = new JT808_0x0200_0x67();
value.AttachInfoId = reader.ReadByte();
writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId);
value.AttachInfoLength = reader.ReadByte();
writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength);
value.AlarmId = reader.ReadUInt32();
writer.WriteNumber($"[{value.AlarmId.ReadNumber()}]报警ID", value.AlarmId);
value.FlagState = reader.ReadByte();
string flagStateString = "未知";
switch (value.FlagState)
{
case 0:
flagStateString = "不可用";
break;
case 1:
flagStateString = "开始标志";
break;
case 2:
flagStateString = "结束标志";
break;
}
writer.WriteNumber($"[{value.FlagState.ReadNumber()}]标志状态-{flagStateString}", value.FlagState);
value.AlarmOrEventType = reader.ReadByte();
string alarmOrEventTypeString = "";
switch (value.AlarmOrEventType)
{
case 0x01:
alarmOrEventTypeString = "前向碰撞报警";
break;
case 0x02:
alarmOrEventTypeString = "车道偏离报警";
break;
case 0x03:
alarmOrEventTypeString = "车距过近报警";
break;
case 0x04:
alarmOrEventTypeString = "行人碰撞报警";
break;
case 0x05:
alarmOrEventTypeString = "频繁变道报警";
break;
case 0x06:
alarmOrEventTypeString = "道路标识超限报警";
break;
case 0x07:
alarmOrEventTypeString = "障碍物报警";
break;
case 0x08:
case 0x09:
case 0x0A:
case 0x0B:
case 0x0C:
case 0x0D:
case 0x0E:
case 0x0F:
alarmOrEventTypeString = "用户自定义";
break;
case 0x10:
alarmOrEventTypeString = "道路标志识别事件";
break;
case 0x11:
alarmOrEventTypeString = "主动抓拍事件";
break;
case 0x12:
case 0x13:
case 0x14:
case 0x15:
case 0x16:
case 0x17:
case 0x18:
case 0x19:
case 0x1A:
case 0x1B:
case 0x1C:
case 0x1D:
case 0x1E:
case 0x1F:
alarmOrEventTypeString = "用户自定义";
break;
}
writer.WriteNumber($"[{value.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", value.AlarmOrEventType);
value.AlarmLevel = reader.ReadByte();
string alarmLevelString = "未知";
switch (value.AlarmLevel)
{
case 0x01:
alarmLevelString = "一级报警";
break;
case 0x02:
alarmLevelString = "二级报警";
break;
}
writer.WriteNumber($"[{value.AlarmLevel.ReadNumber()}]报警级别-{alarmLevelString}", value.AlarmLevel);
value.Speed = reader.ReadByte();
writer.WriteNumber($"[{value.Speed.ReadNumber()}]车速", value.Speed);
value.Altitude = reader.ReadUInt16();
writer.WriteNumber($"[{value.Altitude.ReadNumber()}]高程", value.Altitude);
value.Latitude = (int)reader.ReadUInt32();
writer.WriteNumber($"[{value.Latitude.ReadNumber()}]纬度", value.Latitude);
value.Longitude = (int)reader.ReadUInt32();
writer.WriteNumber($"[{value.Longitude.ReadNumber()}]经度", value.Longitude);
value.AlarmTime = reader.ReadDateTime6();
writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.VehicleState = reader.ReadUInt16();
writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState);
var vehicleStateBits=Convert.ToString(value.VehicleState, 2).PadLeft(16, '0');
writer.WriteStartObject($"车辆状态对象[{vehicleStateBits}]");
writer.WriteString($"[{vehicleStateBits[15]}]Bit0ACC状态", vehicleStateBits[15]=='0'?"关闭":"打开");
writer.WriteString($"[{vehicleStateBits[14]}]Bit1左转向状态", vehicleStateBits[14]=='0'?"关闭":"打开");
writer.WriteString($"[{vehicleStateBits[13]}]Bit2右转向状态", vehicleStateBits[13]=='0'?"关闭":"打开");
writer.WriteString($"[{vehicleStateBits[12]}]Bit3雨刮器状态", vehicleStateBits[12]=='0'?"关闭":"打开");
writer.WriteString($"[{vehicleStateBits[11]}]Bit4制动状态", vehicleStateBits[11] == '0' ? "未制动" : "制动");
writer.WriteString($"[{vehicleStateBits[10]}]Bit5插卡状态", vehicleStateBits[10] == '0' ? "未插卡" : "已插卡");
writer.WriteString($"[{vehicleStateBits[9]}]Bit6自定义", vehicleStateBits[9].ToString());
writer.WriteString($"[{vehicleStateBits[8]}]Bit7自定义", vehicleStateBits[8].ToString());
writer.WriteString($"[{vehicleStateBits[7]}]Bit8自定义", vehicleStateBits[7].ToString());
writer.WriteString($"[{vehicleStateBits[6]}]Bit9自定义", vehicleStateBits[6].ToString());
writer.WriteString($"[{vehicleStateBits[5]}]Bit10定位状态", vehicleStateBits[5] == '0' ? "未定位" : "已定位");
writer.WriteString($"[{vehicleStateBits[4]}]Bit11自定义", vehicleStateBits[4].ToString());
writer.WriteString($"[{vehicleStateBits[3]}]Bit12自定义", vehicleStateBits[3].ToString());
writer.WriteString($"[{vehicleStateBits[2]}]Bit13自定义", vehicleStateBits[2].ToString());
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);
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);
}

public JT808_0x0200_0x67 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) public JT808_0x0200_0x67 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{ {
JT808_0x0200_0x67 jT808_0X0200_0X67 = new JT808_0x0200_0x67();
jT808_0X0200_0X67.AttachInfoId = reader.ReadByte();
jT808_0X0200_0X67.AttachInfoLength = reader.ReadByte();
jT808_0X0200_0X67.AlarmId = reader.ReadUInt32();
jT808_0X0200_0X67.FlagState = reader.ReadByte();
jT808_0X0200_0X67.AlarmOrEventType = reader.ReadByte();
jT808_0X0200_0X67.AlarmLevel = reader.ReadByte();
jT808_0X0200_0X67.Speed = reader.ReadByte();
jT808_0X0200_0X67.Altitude = reader.ReadUInt16();
jT808_0X0200_0X67.Latitude = (int)reader.ReadUInt32();
jT808_0X0200_0X67.Longitude = (int)reader.ReadUInt32();
jT808_0X0200_0X67.AlarmTime = reader.ReadDateTime6();
jT808_0X0200_0X67.VehicleState = reader.ReadUInt16();
jT808_0X0200_0X67.AlarmIdentification = new AlarmIdentificationProperty
JT808_0x0200_0x67 value = new JT808_0x0200_0x67();
value.AttachInfoId = reader.ReadByte();
value.AttachInfoLength = reader.ReadByte();
value.AlarmId = reader.ReadUInt32();
value.FlagState = reader.ReadByte();
value.AlarmOrEventType = reader.ReadByte();
value.AlarmLevel = reader.ReadByte();
value.Speed = reader.ReadByte();
value.Altitude = reader.ReadUInt16();
value.Latitude = (int)reader.ReadUInt32();
value.Longitude = (int)reader.ReadUInt32();
value.AlarmTime = reader.ReadDateTime6();
value.VehicleState = reader.ReadUInt16();
value.AlarmIdentification = new AlarmIdentificationProperty
{ {
TerminalID = reader.ReadString(7), TerminalID = reader.ReadString(7),
Time = reader.ReadDateTime6(), Time = reader.ReadDateTime6(),
@@ -85,7 +228,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
AttachCount = reader.ReadByte(), AttachCount = reader.ReadByte(),
Retain = reader.ReadByte() Retain = reader.ReadByte()
}; };
return jT808_0X0200_0X67;
return value;
} }


public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x67 value, IJT808Config config) public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x67 value, IJT808Config config)


Loading…
Откажи
Сачувај