@@ -9,10 +9,25 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
/// </summary> | |||
public enum ActivePhotographyStrategyType:byte | |||
{ | |||
不开启=0x00, | |||
定时拍照=0x01, | |||
定距拍照=0x02, | |||
保留=0x03, | |||
不修改参数=0xFF | |||
/// <summary> | |||
/// 不开启 | |||
/// </summary> | |||
不开启 = 0x00, | |||
/// <summary> | |||
/// 定时拍照 | |||
/// </summary> | |||
定时拍照 = 0x01, | |||
/// <summary> | |||
/// 定距拍照 | |||
/// </summary> | |||
定距拍照 = 0x02, | |||
/// <summary> | |||
/// 保留 | |||
/// </summary> | |||
保留 = 0x03, | |||
/// <summary> | |||
/// 不修改参数 | |||
/// </summary> | |||
不修改参数 = 0xFF | |||
} | |||
} |
@@ -4,12 +4,30 @@ using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
{ | |||
/// <summary> | |||
/// 主动安全消息Id | |||
/// </summary> | |||
public enum JT808_JTActiveSafety_MsgId : ushort | |||
{ | |||
报警附件信息消息= 0x1210, | |||
文件信息上传= 0x1211, | |||
/// <summary> | |||
/// 报警附件信息消息 | |||
/// </summary> | |||
报警附件信息消息 = 0x1210, | |||
/// <summary> | |||
/// 文件信息上传 | |||
/// </summary> | |||
文件信息上传 = 0x1211, | |||
/// <summary> | |||
/// 文件上传完成消息 | |||
/// </summary> | |||
文件上传完成消息 = 0x1212, | |||
/// <summary> | |||
/// 报警附件上传指令 | |||
/// </summary> | |||
报警附件上传指令 = 0x9208, | |||
/// <summary> | |||
/// 文件上传完成消息应答 | |||
/// </summary> | |||
文件上传完成消息应答 = 0x9212, | |||
} | |||
} |
@@ -9,12 +9,33 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
/// </summary> | |||
public enum PhotoResolutionType:byte | |||
{ | |||
x352_288=0x01, | |||
x704_288=0x02, | |||
x704_576=0x03, | |||
x640_480=0x04, | |||
x1280_720=0x05, | |||
x1920_1080=0x06, | |||
不修改参数=0xFF | |||
/// <summary> | |||
/// 352x288 | |||
/// </summary> | |||
x352_288 = 0x01, | |||
/// <summary> | |||
/// 704x288 | |||
/// </summary> | |||
x704_288 = 0x02, | |||
/// <summary> | |||
/// 704x576 | |||
/// </summary> | |||
x704_576 = 0x03, | |||
/// <summary> | |||
/// 640x480 | |||
/// </summary> | |||
x640_480 = 0x04, | |||
/// <summary> | |||
/// 1280x720 | |||
/// </summary> | |||
x1280_720 = 0x05, | |||
/// <summary> | |||
/// 1920x1080 | |||
/// </summary> | |||
x1920_1080 = 0x06, | |||
/// <summary> | |||
/// 不修改参数 | |||
/// </summary> | |||
不修改参数 = 0xFF | |||
} | |||
} |
@@ -4,6 +4,9 @@ using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
{ | |||
/// <summary> | |||
/// USB编号类型 | |||
/// </summary> | |||
public enum USBIDType:byte | |||
{ | |||
/// <summary> | |||
@@ -9,13 +9,37 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
/// </summary> | |||
public enum VideoRecordingResolutionType:byte | |||
{ | |||
CIF=0x01, | |||
HD1=0x02, | |||
D1=0x03, | |||
WD1=0x04, | |||
VGA=0x05, | |||
_720P=0x06, | |||
_1080P=0x07, | |||
不修改参数=0xFF | |||
/// <summary> | |||
/// CIF | |||
/// </summary> | |||
CIF = 0x01, | |||
/// <summary> | |||
/// HD1 | |||
/// </summary> | |||
HD1 = 0x02, | |||
/// <summary> | |||
/// D1 | |||
/// </summary> | |||
D1 = 0x03, | |||
/// <summary> | |||
/// WD1 | |||
/// </summary> | |||
WD1 = 0x04, | |||
/// <summary> | |||
/// VGA | |||
/// </summary> | |||
VGA = 0x05, | |||
/// <summary> | |||
/// 720P | |||
/// </summary> | |||
_720P = 0x06, | |||
/// <summary> | |||
/// 1080P | |||
/// </summary> | |||
_1080P = 0x07, | |||
/// <summary> | |||
/// 不修改参数 | |||
/// </summary> | |||
不修改参数 = 0xFF | |||
} | |||
} |
@@ -9,10 +9,25 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
/// </summary> | |||
public enum WorkingConditionType:byte | |||
{ | |||
正常工作=0x01, | |||
待机状态=0x02, | |||
升级维护=0x03, | |||
/// <summary> | |||
/// 正常工作 | |||
/// </summary> | |||
正常工作 = 0x01, | |||
/// <summary> | |||
/// 待机状态 | |||
/// </summary> | |||
待机状态 = 0x02, | |||
/// <summary> | |||
/// 升级维护 | |||
/// </summary> | |||
升级维护 = 0x03, | |||
/// <summary> | |||
/// 设备异常 | |||
/// </summary> | |||
设备异常 = 0x04, | |||
/// <summary> | |||
/// 断开连接 | |||
/// </summary> | |||
断开连接 = 0x10, | |||
} | |||
} |
@@ -28,7 +28,7 @@ | |||
</ItemGroup> | |||
<ItemGroup> | |||
<PackageReference Include="JT808" Version="2.3.7" /> | |||
<PackageReference Include="JT808" Version="2.3.9" /> | |||
</ItemGroup> | |||
@@ -4,6 +4,9 @@ using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety | |||
{ | |||
/// <summary> | |||
/// 主动安全常量 | |||
/// </summary> | |||
public static class JT808_JTActiveSafety_Constants | |||
{ | |||
/// <summary> | |||
@@ -9,8 +9,16 @@ using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety | |||
{ | |||
/// <summary> | |||
/// 主动安全扩展 | |||
/// </summary> | |||
public static class JTActiveSafetyDependencyInjectionExtensions | |||
{ | |||
/// <summary> | |||
/// 添加主动安全 | |||
/// </summary> | |||
/// <param name="jT808Builder"></param> | |||
/// <returns></returns> | |||
public static IJT808Builder AddJTActiveSafetyConfigure(this IJT808Builder jT808Builder) | |||
{ | |||
jT808Builder.Config.Register(Assembly.GetExecutingAssembly()); | |||
@@ -15,7 +15,13 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x0200_0x64 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x64>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 高级驾驶辅助系统报警信息Id | |||
/// </summary> | |||
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x64; | |||
/// <summary> | |||
/// 高级驾驶辅助系统报警信息附加长度 | |||
/// </summary> | |||
public override byte AttachInfoLength { get; set; } = 32; | |||
/// <summary> | |||
/// 报警ID | |||
@@ -83,7 +89,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x64 value = new JT808_0x0200_0x64(); | |||
@@ -259,7 +270,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0200_0x64 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x64 value = new JT808_0x0200_0x64(); | |||
@@ -290,7 +306,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
}; | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x64 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.AttachInfoId); | |||
@@ -15,7 +15,13 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x65>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 驾驶员状态监测系统报警信息Id | |||
/// </summary> | |||
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x65; | |||
/// <summary> | |||
/// 驾驶员状态监测系统报警信息长度 | |||
/// </summary> | |||
public override byte AttachInfoLength { get; set; } = 47; | |||
/// <summary> | |||
/// 报警ID | |||
@@ -71,7 +77,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x65 value = new JT808_0x0200_0x65(); | |||
@@ -211,7 +222,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0200_0x65 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x65 value = new JT808_0x0200_0x65(); | |||
@@ -239,7 +255,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
}; | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x65 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.AttachInfoId); | |||
@@ -15,7 +15,13 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x0200_0x66 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x66>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 胎压监测系统报警信息Id | |||
/// </summary> | |||
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x66; | |||
/// <summary> | |||
/// 胎压监测系统报警信息长度 | |||
/// </summary> | |||
public override byte AttachInfoLength { get; set; } | |||
/// <summary> | |||
/// 报警ID | |||
@@ -63,7 +69,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 报警/事件信息列表 | |||
/// </summary> | |||
public List<AlarmOrEventProperty> AlarmOrEvents { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x66 value = new JT808_0x0200_0x66(); | |||
@@ -212,7 +223,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0200_0x66 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x66 value = new JT808_0x0200_0x66(); | |||
@@ -251,7 +267,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x66 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.AttachInfoId); | |||
@@ -15,7 +15,13 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x67>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 盲区监测系统报警信息Id | |||
/// </summary> | |||
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x67; | |||
/// <summary> | |||
/// 盲区监测系统报警信息长度 | |||
/// </summary> | |||
public override byte AttachInfoLength { get; set; } = 26; | |||
/// <summary> | |||
/// 报警ID | |||
@@ -63,7 +69,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x67 value = new JT808_0x0200_0x67(); | |||
@@ -203,7 +214,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0200_0x67 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x67 value = new JT808_0x0200_0x67(); | |||
@@ -229,7 +245,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
}; | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x67 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.AttachInfoId); | |||
@@ -11,16 +11,29 @@ using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 透传数据 | |||
/// </summary> | |||
public class JT808_0x0900_0xF7 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter<JT808_0x0900_0xF7>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 透传类型 | |||
/// </summary> | |||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF7; | |||
/// <summary> | |||
/// 消息列表总数 | |||
/// </summary> | |||
public byte USBMessageCount { get; set; } | |||
/// <summary> | |||
/// 消息列表数据 | |||
/// </summary> | |||
public List<JT808_0x0900_0xF7_USB> USBMessages { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); | |||
@@ -60,7 +73,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0900_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); | |||
@@ -80,7 +98,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0900_0xF7 value, IJT808Config config) | |||
{ | |||
if (value.USBMessages != null && value.USBMessages.Count > 0) | |||
@@ -10,15 +10,29 @@ using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 透传数据 | |||
/// </summary> | |||
public class JT808_0x0900_0xF8 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter<JT808_0x0900_0xF8>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 透传类型 | |||
/// </summary> | |||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF8; | |||
/// <summary> | |||
/// 消息列表总数 | |||
/// </summary> | |||
public byte USBMessageCount { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public List<JT808_0x0900_0xF8_USB> USBMessages { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0900_0xF8 value = new JT808_0x0900_0xF8(); | |||
@@ -78,7 +92,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0900_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0900_0xF8 value = new JT808_0x0900_0xF8(); | |||
@@ -108,7 +127,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0900_0xF8 value, IJT808Config config) | |||
{ | |||
if (value.USBMessages != null && value.USBMessages.Count > 0) | |||
@@ -42,11 +42,20 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 附件信息列表 | |||
/// </summary> | |||
public List<AttachProperty> AttachInfos { get; set; } | |||
/// <summary> | |||
/// 报警附件信息消息Id | |||
/// </summary> | |||
public override ushort MsgId => 0x1210; | |||
/// <summary> | |||
/// 报警附件信息消息 | |||
/// </summary> | |||
public override string Description => "报警附件信息消息"; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x1210 value = new JT808_0x1210(); | |||
@@ -91,7 +100,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x1210 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x1210 value = new JT808_0x1210(); | |||
@@ -121,10 +135,15 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1210 value, IJT808Config config) | |||
{ | |||
writer.WriteString(value.MakerID.PadRight(7, '0')); | |||
writer.WriteString(value.MakerID.PadRight(7, '\0')); | |||
if (value.AlarmIdentification == null) | |||
{ | |||
throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); | |||
@@ -10,6 +10,9 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x1211 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x1211>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 文件信息上传 | |||
/// </summary> | |||
public override string Description => "文件信息上传"; | |||
/// <summary> | |||
/// 文件名称长度 | |||
@@ -17,7 +20,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
public byte FileNameLength { get; set; } | |||
/// <summary> | |||
/// 文件名称 | |||
/// <文件类型>_<通道号>_<报警类型>_<序号>_<报警编号>.<后缀名> | |||
/// 形如:文件类型_通道号_报警类型_序号_报警编号.后缀名 | |||
/// </summary> | |||
public string FileName { get; set; } | |||
/// <summary> | |||
@@ -28,9 +31,16 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 文件大小 | |||
/// </summary> | |||
public uint FileSize { get; set; } | |||
/// <summary> | |||
/// 文件信息上传Id | |||
/// </summary> | |||
public override ushort MsgId => 0x1211; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x1211 value = new JT808_0x1211(); | |||
@@ -44,7 +54,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.FileSize = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小", value.FileSize); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x1211 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x1211 value = new JT808_0x1211(); | |||
@@ -54,7 +69,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.FileSize = reader.ReadUInt32(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1211 value, IJT808Config config) | |||
{ | |||
writer.Skip(1, out int FileNameLengthPosition); | |||
@@ -10,6 +10,9 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x1212 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x1212>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 文件上传完成消息 | |||
/// </summary> | |||
public override string Description => "文件上传完成消息"; | |||
/// <summary> | |||
/// 文件名称长度 | |||
@@ -17,7 +20,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
public byte FileNameLength { get; set; } | |||
/// <summary> | |||
/// 文件名称 | |||
/// <文件类型>_<通道号>_<报警类型>_<序号>_<报警编号>.<后缀名> | |||
/// 形如:文件类型_通道号_报警类型_序号_报警编号.后缀名 | |||
/// </summary> | |||
public string FileName { get; set; } | |||
/// <summary> | |||
@@ -28,8 +31,16 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 文件大小 | |||
/// </summary> | |||
public uint FileSize { get; set; } | |||
/// <summary> | |||
/// 文件上传完成消息 | |||
/// </summary> | |||
public override ushort MsgId => 0x1212; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x1212 value = new JT808_0x1212(); | |||
@@ -43,7 +54,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.FileSize = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小", value.FileSize); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x1212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x1212 value = new JT808_0x1212(); | |||
@@ -53,7 +69,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.FileSize = reader.ReadUInt32(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1212 value, IJT808Config config) | |||
{ | |||
writer.Skip(1, out int FileNameLengthPosition); | |||
@@ -13,7 +13,13 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x8103_0xF364 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF364>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 高级驾驶辅助系统参数 | |||
/// </summary> | |||
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF364; | |||
/// <summary> | |||
/// 高级驾驶辅助系统参数长度 | |||
/// </summary> | |||
public override byte ParamLength { get; set; } | |||
/// <summary> | |||
/// 报警判断速度阈值 | |||
@@ -198,7 +204,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 保留字段 | |||
/// </summary> | |||
public byte[] Placeholder2 { get; set; } = new byte[4]; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF364 value = new JT808_0x8103_0xF364(); | |||
@@ -326,7 +337,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.Placeholder2 = reader.ReadArray(4).ToArray(); | |||
writer.WriteString("保留字段", value.Placeholder2.ToHexString()); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8103_0xF364 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF364 value = new JT808_0x8103_0xF364(); | |||
@@ -379,7 +395,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.Placeholder2 = reader.ReadArray(4).ToArray(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF364 value, IJT808Config config) | |||
{ | |||
writer.WriteUInt32(value.ParamId); | |||
@@ -13,7 +13,13 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x8103_0xF365 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF365>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 驾驶员状态监测系统参数 | |||
/// </summary> | |||
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF365; | |||
/// <summary> | |||
/// 驾驶员状态监测系统参数长度 | |||
/// </summary> | |||
public override byte ParamLength { get; set; } | |||
/// <summary> | |||
/// 报警判断速度阈值 | |||
@@ -151,7 +157,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 保留字段 | |||
/// </summary> | |||
public byte[] Retain { get; set; } = new byte[2]; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF365 value = new JT808_0x8103_0xF365(); | |||
@@ -257,7 +268,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); | |||
writer.WriteString("保留字段", value.Retain.ToHexString()); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8103_0xF365 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF365 value = new JT808_0x8103_0xF365(); | |||
@@ -299,7 +315,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF365 value, IJT808Config config) | |||
{ | |||
writer.WriteUInt32(value.ParamId); | |||
@@ -11,7 +11,13 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x8103_0xF366 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF366>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 胎压监测系统参数Id | |||
/// </summary> | |||
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF366; | |||
/// <summary> | |||
/// 胎压监测系统参数长度 | |||
/// </summary> | |||
public override byte ParamLength { get; set; } = 46; | |||
/// <summary> | |||
/// 轮胎规格型号 12位 | |||
@@ -57,7 +63,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 保留项 | |||
/// </summary> | |||
public byte[] Retain { get; set; } = new byte[6]; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366(); | |||
@@ -89,7 +100,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); | |||
writer.WriteString("保留项", value.Retain.ToHexString()); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8103_0xF366 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366(); | |||
@@ -108,7 +124,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF366 value, IJT808Config config) | |||
{ | |||
writer.WriteUInt32(value.ParamId); | |||
@@ -11,7 +11,13 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x8103_0xF367 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF367>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 盲区监测系统参数Id | |||
/// </summary> | |||
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF367; | |||
/// <summary> | |||
/// 盲区监测系统参数长度 | |||
/// </summary> | |||
public override byte ParamLength { get; set; } = 2; | |||
/// <summary> | |||
/// 后方接近报警时间阈值 | |||
@@ -21,7 +27,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 侧后方接近报警时间阈值 | |||
/// </summary> | |||
public byte LateralRearApproachAlarmTimeThreshold { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF367 value = new JT808_0x8103_0xF367(); | |||
@@ -34,7 +45,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.LateralRearApproachAlarmTimeThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.LateralRearApproachAlarmTimeThreshold.ReadNumber()}]侧后方接近报警时间阈值", value.LateralRearApproachAlarmTimeThreshold); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8103_0xF367 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF367 value = new JT808_0x8103_0xF367(); | |||
@@ -44,7 +60,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.LateralRearApproachAlarmTimeThreshold = reader.ReadByte(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF367 value, IJT808Config config) | |||
{ | |||
writer.WriteUInt32(value.ParamId); | |||
@@ -12,6 +12,9 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x8900_0xF7 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter<JT808_0x8900_0xF7>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 查询基本信息类型 | |||
/// </summary> | |||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF7; | |||
/// <summary> | |||
/// 外设ID列表总数 | |||
@@ -21,7 +24,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 外设ID | |||
/// </summary> | |||
public List<byte> MultipleUSB { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8900_0xF7 value = new JT808_0x8900_0xF7(); | |||
@@ -40,7 +48,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8900_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8900_0xF7 value = new JT808_0x8900_0xF7(); | |||
@@ -55,7 +68,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8900_0xF7 value, IJT808Config config) | |||
{ | |||
if (value.MultipleUSB != null && value.MultipleUSB.Count > 0) | |||
@@ -12,6 +12,9 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x8900_0xF8 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter<JT808_0x8900_0xF8>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 查询基本信息透传类型 | |||
/// </summary> | |||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF8; | |||
/// <summary> | |||
/// 外设ID列表总数 | |||
@@ -21,7 +24,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 外设ID | |||
/// </summary> | |||
public List<byte> MultipleUSB { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8900_0xF8 value = new JT808_0x8900_0xF8(); | |||
@@ -40,7 +48,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8900_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8900_0xF8 value = new JT808_0x8900_0xF8(); | |||
@@ -55,7 +68,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8900_0xF8 value, IJT808Config config) | |||
{ | |||
if (value.MultipleUSB != null && value.MultipleUSB.Count > 0) | |||
@@ -12,10 +12,25 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x9208: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9208>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// Description | |||
/// </summary> | |||
public override string Description => "报警附件上传指令"; | |||
/// <summary> | |||
/// 服务IP地址长度 | |||
/// </summary> | |||
public byte AttachmentServerIPLength { get; set; } | |||
/// <summary> | |||
/// 服务IP地址 | |||
/// </summary> | |||
public string AttachmentServerIP { get; set; } | |||
/// <summary> | |||
/// TCP端口 | |||
/// </summary> | |||
public ushort AttachmentServerIPTcpPort { get; set; } | |||
/// <summary> | |||
/// UDP端口 | |||
/// </summary> | |||
public ushort AttachmentServerIPUdpPort { get; set; } | |||
/// <summary> | |||
/// 报警标识号 | |||
@@ -30,9 +45,16 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 预留 | |||
/// </summary> | |||
public byte[] Retain { get; set; } = new byte[16]; | |||
/// <summary> | |||
/// 报警附件上传指令Id | |||
/// </summary> | |||
public override ushort MsgId => 0x9208; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x9208 value = new JT808_0x9208(); | |||
@@ -63,7 +85,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
string retainHex = reader.ReadVirtualArray(16).ToArray().ToHexString(); | |||
writer.WriteString($"预留", retainHex); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x9208 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x9208 value = new JT808_0x9208(); | |||
@@ -83,7 +110,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
value.Retain = reader.ReadArray(16).ToArray(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9208 value, IJT808Config config) | |||
{ | |||
writer.Skip(1, out int AttachmentServerIPLengthPosition); | |||
@@ -12,6 +12,9 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// </summary> | |||
public class JT808_0x9212: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9212>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 文件上传完成消息应答 | |||
/// </summary> | |||
public override string Description => "文件上传完成消息应答"; | |||
/// <summary> | |||
/// 文件名称长度 | |||
@@ -38,9 +41,16 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
/// 补传数据包列表 | |||
/// </summary> | |||
public List<DataPackageProperty> DataPackages { get; set; } | |||
/// <summary> | |||
/// 文件上传完成消息应答Id | |||
/// </summary> | |||
public override ushort MsgId => 0x9212; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x9212 value = new JT808_0x9212(); | |||
@@ -71,7 +81,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x9212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x9212 value = new JT808_0x9212(); | |||
@@ -93,7 +108,12 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9212 value, IJT808Config config) | |||
{ | |||
writer.Skip(1, out int FileNameLengthPosition); | |||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
public byte FileNameLength { get; set; } | |||
/// <summary> | |||
/// 文件名称 | |||
/// <文件类型>_<通道号>_<报警类型>_<序号>_<报警编号>.<后缀名> | |||
/// 形如:文件类型_通道号_报警类型_序号_报警编号.后缀名 | |||
/// </summary> | |||
public string FileName{ get; set; } | |||
/// <summary> | |||
@@ -4,6 +4,9 @@ using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public class JT808_0x0900_0xF7_USB | |||
{ | |||
/// <summary> | |||
@@ -4,6 +4,9 @@ using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public class JT808_0x0900_0xF8_USB | |||
{ | |||
/// <summary> | |||
@@ -3,19 +3,37 @@ | |||
namespace JTActiveSafety.Protocol.Buffers | |||
{ | |||
/// <summary> | |||
/// <see cref="System.Buffers.Writer"/> | |||
/// 内存写入器 | |||
/// ref:System.Buffers.Writer | |||
/// </summary> | |||
ref partial struct JTActiveSafetyBufferWriter | |||
{ | |||
private Span<byte> _buffer; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="buffer"></param> | |||
public JTActiveSafetyBufferWriter(Span<byte> buffer) | |||
{ | |||
_buffer = buffer; | |||
WrittenCount = 0; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public Span<byte> Free => _buffer.Slice(WrittenCount); | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public Span<byte> Written => _buffer.Slice(0, WrittenCount); | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public int WrittenCount { get; private set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="count"></param> | |||
public void Advance(int count) | |||
{ | |||
WrittenCount += count; | |||
@@ -9,6 +9,12 @@ namespace JTActiveSafety.Protocol.Extensions | |||
/// </summary> | |||
public static partial class HexExtensions | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="source"></param> | |||
/// <param name="separator"></param> | |||
/// <returns></returns> | |||
public static string ToHexString(this byte[] source, string separator = " ") | |||
{ | |||
var value = source.Select(s => s.ToString("X2")); | |||
@@ -35,51 +41,117 @@ namespace JTActiveSafety.Protocol.Extensions | |||
} | |||
return buf; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <param name="format"></param> | |||
/// <returns></returns> | |||
public static string ReadNumber(this byte value, string format = "X2") | |||
{ | |||
return value.ToString(format); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <param name="format"></param> | |||
/// <returns></returns> | |||
public static string ReadNumber(this int value, string format = "X8") | |||
{ | |||
return value.ToString(format); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <param name="format"></param> | |||
/// <returns></returns> | |||
public static string ReadNumber(this uint value, string format = "X8") | |||
{ | |||
return value.ToString(format); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <param name="format"></param> | |||
/// <returns></returns> | |||
public static string ReadNumber(this long value, string format = "X16") | |||
{ | |||
return value.ToString(format); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <param name="format"></param> | |||
/// <returns></returns> | |||
public static string ReadNumber(this ulong value, string format = "X16") | |||
{ | |||
return value.ToString(format); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <param name="format"></param> | |||
/// <returns></returns> | |||
public static string ReadNumber(this short value, string format = "X4") | |||
{ | |||
return value.ToString(format); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <param name="format"></param> | |||
/// <returns></returns> | |||
public static string ReadNumber(this ushort value, string format = "X4") | |||
{ | |||
return value.ToString(format); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <returns></returns> | |||
public static ReadOnlySpan<char> ReadBinary(this ushort value) | |||
{ | |||
return System.Convert.ToString(value, 2).PadLeft(16, '0').AsSpan(); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <returns></returns> | |||
public static ReadOnlySpan<char> ReadBinary(this short value) | |||
{ | |||
return System.Convert.ToString(value, 2).PadLeft(16, '0').AsSpan(); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <returns></returns> | |||
public static ReadOnlySpan<char> ReadBinary(this uint value) | |||
{ | |||
return System.Convert.ToString(value, 2).PadLeft(32, '0').AsSpan(); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <returns></returns> | |||
public static ReadOnlySpan<char> ReadBinary(this int value) | |||
{ | |||
return System.Convert.ToString(value, 2).PadLeft(32, '0').AsSpan(); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <returns></returns> | |||
public static ReadOnlySpan<char> ReadBinary(this byte value) | |||
{ | |||
return System.Convert.ToString(value, 2).PadLeft(8, '0').AsSpan(); | |||
@@ -6,15 +6,51 @@ | |||
<members> | |||
<member name="T:JTActiveSafety.Protocol.Buffers.JTActiveSafetyBufferWriter"> | |||
<summary> | |||
<see cref="!:System.Buffers.Writer"/> | |||
内存写入器 | |||
ref:System.Buffers.Writer | |||
</summary> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Buffers.JTActiveSafetyBufferWriter.#ctor(System.Span{System.Byte})"> | |||
<summary> | |||
</summary> | |||
<param name="buffer"></param> | |||
</member> | |||
<member name="P:JTActiveSafety.Protocol.Buffers.JTActiveSafetyBufferWriter.Free"> | |||
<summary> | |||
</summary> | |||
</member> | |||
<member name="P:JTActiveSafety.Protocol.Buffers.JTActiveSafetyBufferWriter.Written"> | |||
<summary> | |||
</summary> | |||
</member> | |||
<member name="P:JTActiveSafety.Protocol.Buffers.JTActiveSafetyBufferWriter.WrittenCount"> | |||
<summary> | |||
</summary> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Buffers.JTActiveSafetyBufferWriter.Advance(System.Int32)"> | |||
<summary> | |||
</summary> | |||
<param name="count"></param> | |||
</member> | |||
<member name="T:JTActiveSafety.Protocol.Extensions.HexExtensions"> | |||
<summary> | |||
ref:"www.codeproject.com/tips/447938/high-performance-csharp-byte-array-to-hex-string-t" | |||
</summary> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ToHexString(System.Byte[],System.String)"> | |||
<summary> | |||
</summary> | |||
<param name="source"></param> | |||
<param name="separator"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ToHexBytes(System.String,System.String)"> | |||
<summary> | |||
16进制字符串转16进制数组 | |||
@@ -23,6 +59,97 @@ | |||
<param name="separator"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadNumber(System.Byte,System.String)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<param name="format"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadNumber(System.Int32,System.String)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<param name="format"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadNumber(System.UInt32,System.String)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<param name="format"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadNumber(System.Int64,System.String)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<param name="format"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadNumber(System.UInt64,System.String)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<param name="format"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadNumber(System.Int16,System.String)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<param name="format"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadNumber(System.UInt16,System.String)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<param name="format"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadBinary(System.UInt16)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadBinary(System.Int16)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadBinary(System.UInt32)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadBinary(System.Int32)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ReadBinary(System.Byte)"> | |||
<summary> | |||
</summary> | |||
<param name="value"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="F:JTActiveSafety.Protocol.JTActiveSafetyPackage.FH_Bytes"> | |||
<summary> | |||
帧头标识 | |||
@@ -60,6 +187,47 @@ | |||
默认长度64K,文件小于64K 则为实际长度 | |||
</summary> | |||
</member> | |||
<member name="T:JTActiveSafety.Protocol.JTActiveSafetySerializer"> | |||
<summary> | |||
</summary> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.JTActiveSafetySerializer.Serialize(JTActiveSafety.Protocol.JTActiveSafetyPackage,System.Int32)"> | |||
<summary> | |||
</summary> | |||
<param name="package"></param> | |||
<param name="minBufferSize"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.JTActiveSafetySerializer.Deserialize(System.ReadOnlySpan{System.Byte})"> | |||
<summary> | |||
</summary> | |||
<param name="bytes"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.JTActiveSafetySerializer.AnalyzeJsonBuffer(System.ReadOnlySpan{System.Byte},System.Text.Json.JsonWriterOptions)"> | |||
<summary> | |||
</summary> | |||
<param name="bytes"></param> | |||
<param name="options"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.JTActiveSafetySerializer.Analyze(System.ReadOnlySpan{System.Byte},System.Text.Json.JsonWriterOptions)"> | |||
<summary> | |||
</summary> | |||
<param name="bytes"></param> | |||
<param name="options"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="T:JTActiveSafety.Protocol.MessagePack.JTActiveSafetyMessagePackReader"> | |||
<summary> | |||
</summary> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.MessagePack.JTActiveSafetyMessagePackReader.ReadBigNumber(System.Int32)"> | |||
<summary> | |||
数字编码 大端模式、高位在前 | |||
@@ -10,8 +10,17 @@ using System.Text.Json; | |||
namespace JTActiveSafety.Protocol | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public static class JTActiveSafetySerializer | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="package"></param> | |||
/// <param name="minBufferSize"></param> | |||
/// <returns></returns> | |||
public static byte[] Serialize(JTActiveSafetyPackage package, int minBufferSize = 65 * 1024) | |||
{ | |||
byte[] buffer = JTActiveSafetyArrayPool.Rent(minBufferSize); | |||
@@ -30,7 +39,11 @@ namespace JTActiveSafety.Protocol | |||
JTActiveSafetyArrayPool.Return(buffer); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="bytes"></param> | |||
/// <returns></returns> | |||
public static JTActiveSafetyPackage Deserialize(ReadOnlySpan<byte> bytes) | |||
{ | |||
JTActiveSafetyPackage jTActiveSafetyPackage= new JTActiveSafetyPackage(); | |||
@@ -42,7 +55,12 @@ namespace JTActiveSafety.Protocol | |||
jTActiveSafetyPackage.Bodies = reader.ReadRemainArray().ToArray(); | |||
return jTActiveSafetyPackage; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="bytes"></param> | |||
/// <param name="options"></param> | |||
/// <returns></returns> | |||
public static byte[] AnalyzeJsonBuffer(ReadOnlySpan<byte> bytes, JsonWriterOptions options = default) | |||
{ | |||
JTActiveSafetyMessagePackReader reader = new JTActiveSafetyMessagePackReader(bytes); | |||
@@ -65,6 +83,12 @@ namespace JTActiveSafety.Protocol | |||
return memoryStream.ToArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="bytes"></param> | |||
/// <param name="options"></param> | |||
/// <returns></returns> | |||
public static string Analyze(ReadOnlySpan<byte> bytes, JsonWriterOptions options = default) | |||
{ | |||
string json = Encoding.UTF8.GetString(AnalyzeJsonBuffer(bytes, options)); | |||
@@ -9,6 +9,9 @@ using System.Text; | |||
namespace JTActiveSafety.Protocol.MessagePack | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
ref struct JTActiveSafetyMessagePackReader | |||
{ | |||
public ReadOnlySpan<byte> Reader { get; private set; } | |||