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