using JT808.Protocol.Extensions.JTActiveSafety.Metadata; using JT808.Protocol.Formatters; using JT808.Protocol.MessageBody; using JT808.Protocol.MessagePack; using System; using System.Collections.Generic; using System.Text; namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody { /// /// 盲区监测系统报警信息 /// public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter { public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x67; public override byte AttachInfoLength { get; set; } = 26; /// /// 报警ID /// public uint AlarmId { get; set; } /// /// 标志状态 /// public byte FlagState { get; set; } /// /// 报警/事件类型 /// public byte AlarmOrEventType{ get; set; } /// /// 报警/事件类型 /// public byte AlarmLevel { get; set; } /// /// 车速 /// public byte Speed { get; set; } /// /// 高程 /// public ushort Altitude { get; set; } /// /// 纬度 /// public int Latitude { get; set; } /// /// 经度 /// public int Longitude { get; set; } /// /// 日期时间 /// YYMMDDhhmmss /// BCD[6] /// public DateTime AlarmTime { get; set; } /// /// 车辆状态 /// public ushort VehicleState { get; set; } /// /// 报警标识号 /// public AlarmIdentificationProperty AlarmIdentification { get; set; } 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 { TerminalID = reader.ReadString(7), Time = reader.ReadDateTime6(), SN = reader.ReadByte(), AttachCount = reader.ReadByte(), Retain = reader.ReadByte() }; return jT808_0X0200_0X67; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x67 value, IJT808Config config) { writer.WriteByte(value.AttachInfoId); writer.WriteByte(value.AttachInfoLength); writer.WriteUInt32(value.AlarmId); writer.WriteByte(value.FlagState); writer.WriteByte(value.AlarmOrEventType); writer.WriteByte(value.AlarmLevel); writer.WriteByte(value.Speed); writer.WriteUInt16(value.Altitude); writer.WriteUInt32((uint)value.Latitude); writer.WriteUInt32((uint)value.Longitude); writer.WriteDateTime6(value.AlarmTime); writer.WriteUInt16(value.VehicleState); if (value.AlarmIdentification == null) { throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); } writer.WriteString(value.AlarmIdentification.TerminalID); writer.WriteDateTime6(value.AlarmIdentification.Time); writer.WriteByte(value.AlarmIdentification.SN); writer.WriteByte(value.AlarmIdentification.AttachCount); writer.WriteByte(value.AlarmIdentification.Retain); } } }