using JT808.Protocol.Extensions; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System; using System.Linq; using System.Text.Json; namespace JT808.Protocol.MessageBody { /// /// 人工确认报警消息 /// 0x8203 /// public class JT808_0x8203 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze { /// /// 0x8203 /// public override ushort MsgId { get; } = 0x8203; /// /// 人工确认报警消息 /// public override string Description => "人工确认报警消息"; /// /// 报警消息流水号 /// 需人工确认的报警消息流水号,0 表示该报警类型所有消息 /// public ushort AlarmMsgNum { get; set; } /// /// 人工确认报警类型 /// public uint ManualConfirmAlarmType { get; set; } /// /// /// /// /// /// public JT808_0x8203 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8203 jT808_0X8203 = new JT808_0x8203(); jT808_0X8203.AlarmMsgNum = reader.ReadUInt16(); jT808_0X8203.ManualConfirmAlarmType = reader.ReadUInt32(); return jT808_0X8203; } /// /// /// /// /// /// public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8203 value, IJT808Config config) { writer.WriteUInt16(value.AlarmMsgNum); writer.WriteUInt32(value.ManualConfirmAlarmType); } /// /// /// /// /// /// public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8203 value = new JT808_0x8203(); value.AlarmMsgNum = reader.ReadUInt16(); writer.WriteNumber($"[{ value.AlarmMsgNum.ReadNumber()}]报警消息流水号", value.AlarmMsgNum); value.ManualConfirmAlarmType = reader.ReadUInt32(); writer.WriteNumber($"[{ value.ManualConfirmAlarmType.ReadNumber()}]人工确认报警类型", value.ManualConfirmAlarmType); ReadOnlySpan manualConfirmAlarmTypeBits =string.Join("", Convert.ToString(value.ManualConfirmAlarmType, 2).PadLeft(32, '0').Reverse()).AsSpan(); writer.WriteStartObject($"人工确认报警对象[{manualConfirmAlarmTypeBits.ToString()}]"); writer.WriteString("[bit29~bit31]保留", manualConfirmAlarmTypeBits.Slice(29,3).ToString()); writer.WriteString($"[bit28]{manualConfirmAlarmTypeBits[28]}","确认车辆非法位移报警"); writer.WriteString($"[bit27]{manualConfirmAlarmTypeBits[27]}", "确认车辆非法点火报警"); writer.WriteString($"[bit23~bit26]保留", manualConfirmAlarmTypeBits.Slice(23, 4).ToString()); writer.WriteString($"[bit22]{manualConfirmAlarmTypeBits[22]}", "确认路段行驶时间不足/过长报警"); writer.WriteString($"[bit21]{manualConfirmAlarmTypeBits[21]}", "确认进出路线报警"); writer.WriteString($"[bit20]{manualConfirmAlarmTypeBits[20]}", "确认进出区域报警"); writer.WriteString($"[bit4~bit19]保留", manualConfirmAlarmTypeBits.Slice(4, 16).ToString()); writer.WriteString($"[bit3]{manualConfirmAlarmTypeBits[3]}", "确认危险预警"); writer.WriteString($"[bit1~bit2]保留", manualConfirmAlarmTypeBits.Slice(1, 2).ToString()); writer.WriteString($"[bit0]{manualConfirmAlarmTypeBits[0]}", "确认紧急报警"); writer.WriteEndObject(); } } }