You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
4.5 KiB

  1. using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.MessageBody;
  4. using JT808.Protocol.MessagePack;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Text;
  8. namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
  9. {
  10. /// <summary>
  11. /// 盲区监测系统报警信息
  12. /// </summary>
  13. public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x67>
  14. {
  15. public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x67;
  16. public override byte AttachInfoLength { get; set; } = 26;
  17. /// <summary>
  18. /// 报警ID
  19. /// </summary>
  20. public uint AlarmId { get; set; }
  21. /// <summary>
  22. /// 标志状态
  23. /// </summary>
  24. public byte FlagState { get; set; }
  25. /// <summary>
  26. /// 报警/事件类型
  27. /// </summary>
  28. public byte AlarmOrEventType{ get; set; }
  29. /// <summary>
  30. /// 报警/事件类型
  31. /// </summary>
  32. public byte AlarmLevel { get; set; }
  33. /// <summary>
  34. /// 车速
  35. /// </summary>
  36. public byte Speed { get; set; }
  37. /// <summary>
  38. /// 高程
  39. /// </summary>
  40. public ushort Altitude { get; set; }
  41. /// <summary>
  42. /// 纬度
  43. /// </summary>
  44. public int Latitude { get; set; }
  45. /// <summary>
  46. /// 经度
  47. /// </summary>
  48. public int Longitude { get; set; }
  49. /// <summary>
  50. /// 日期时间
  51. /// YYMMDDhhmmss
  52. /// BCD[6]
  53. /// </summary>
  54. public DateTime AlarmTime { get; set; }
  55. /// <summary>
  56. /// 车辆状态
  57. /// </summary>
  58. public ushort VehicleState { get; set; }
  59. /// <summary>
  60. /// 报警标识号
  61. /// </summary>
  62. public AlarmIdentificationProperty AlarmIdentification { get; set; }
  63. public JT808_0x0200_0x67 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  64. {
  65. JT808_0x0200_0x67 jT808_0X0200_0X67 = new JT808_0x0200_0x67();
  66. jT808_0X0200_0X67.AttachInfoId = reader.ReadByte();
  67. jT808_0X0200_0X67.AttachInfoLength = reader.ReadByte();
  68. jT808_0X0200_0X67.AlarmId = reader.ReadUInt32();
  69. jT808_0X0200_0X67.FlagState = reader.ReadByte();
  70. jT808_0X0200_0X67.AlarmOrEventType = reader.ReadByte();
  71. jT808_0X0200_0X67.AlarmLevel = reader.ReadByte();
  72. jT808_0X0200_0X67.Speed = reader.ReadByte();
  73. jT808_0X0200_0X67.Altitude = reader.ReadUInt16();
  74. jT808_0X0200_0X67.Latitude = (int)reader.ReadUInt32();
  75. jT808_0X0200_0X67.Longitude = (int)reader.ReadUInt32();
  76. jT808_0X0200_0X67.AlarmTime = reader.ReadDateTime6();
  77. jT808_0X0200_0X67.VehicleState = reader.ReadUInt16();
  78. jT808_0X0200_0X67.AlarmIdentification = new AlarmIdentificationProperty
  79. {
  80. TerminalID = reader.ReadString(7),
  81. Time = reader.ReadDateTime6(),
  82. SN = reader.ReadByte(),
  83. AttachCount = reader.ReadByte(),
  84. Retain = reader.ReadByte()
  85. };
  86. return jT808_0X0200_0X67;
  87. }
  88. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x67 value, IJT808Config config)
  89. {
  90. writer.WriteByte(value.AttachInfoId);
  91. writer.WriteByte(value.AttachInfoLength);
  92. writer.WriteUInt32(value.AlarmId);
  93. writer.WriteByte(value.FlagState);
  94. writer.WriteByte(value.AlarmOrEventType);
  95. writer.WriteByte(value.AlarmLevel);
  96. writer.WriteByte(value.Speed);
  97. writer.WriteUInt16(value.Altitude);
  98. writer.WriteUInt32((uint)value.Latitude);
  99. writer.WriteUInt32((uint)value.Longitude);
  100. writer.WriteDateTime6(value.AlarmTime);
  101. writer.WriteUInt16(value.VehicleState);
  102. if (value.AlarmIdentification == null)
  103. {
  104. throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空");
  105. }
  106. writer.WriteString(value.AlarmIdentification.TerminalID);
  107. writer.WriteDateTime6(value.AlarmIdentification.Time);
  108. writer.WriteByte(value.AlarmIdentification.SN);
  109. writer.WriteByte(value.AlarmIdentification.AttachCount);
  110. writer.WriteByte(value.AlarmIdentification.Retain);
  111. }
  112. }
  113. }