25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
4.1 KiB

  1. using JT808.Protocol.Extensions;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.Interfaces;
  4. using JT808.Protocol.MessagePack;
  5. using System;
  6. using System.Linq;
  7. using System.Text.Json;
  8. namespace JT808.Protocol.MessageBody
  9. {
  10. /// <summary>
  11. /// 人工确认报警消息
  12. /// 0x8203
  13. /// </summary>
  14. public class JT808_0x8203 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x8203>, IJT808Analyze
  15. {
  16. /// <summary>
  17. /// 0x8203
  18. /// </summary>
  19. public override ushort MsgId { get; } = 0x8203;
  20. /// <summary>
  21. /// 人工确认报警消息
  22. /// </summary>
  23. public override string Description => "人工确认报警消息";
  24. /// <summary>
  25. /// 报警消息流水号
  26. /// 需人工确认的报警消息流水号,0 表示该报警类型所有消息
  27. /// </summary>
  28. public ushort AlarmMsgNum { get; set; }
  29. /// <summary>
  30. /// 人工确认报警类型
  31. /// </summary>
  32. public uint ManualConfirmAlarmType { get; set; }
  33. /// <summary>
  34. ///
  35. /// </summary>
  36. /// <param name="reader"></param>
  37. /// <param name="config"></param>
  38. /// <returns></returns>
  39. public JT808_0x8203 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  40. {
  41. JT808_0x8203 jT808_0X8203 = new JT808_0x8203();
  42. jT808_0X8203.AlarmMsgNum = reader.ReadUInt16();
  43. jT808_0X8203.ManualConfirmAlarmType = reader.ReadUInt32();
  44. return jT808_0X8203;
  45. }
  46. /// <summary>
  47. ///
  48. /// </summary>
  49. /// <param name="writer"></param>
  50. /// <param name="value"></param>
  51. /// <param name="config"></param>
  52. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8203 value, IJT808Config config)
  53. {
  54. writer.WriteUInt16(value.AlarmMsgNum);
  55. writer.WriteUInt32(value.ManualConfirmAlarmType);
  56. }
  57. /// <summary>
  58. ///
  59. /// </summary>
  60. /// <param name="reader"></param>
  61. /// <param name="writer"></param>
  62. /// <param name="config"></param>
  63. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  64. {
  65. JT808_0x8203 value = new JT808_0x8203();
  66. value.AlarmMsgNum = reader.ReadUInt16();
  67. writer.WriteNumber($"[{ value.AlarmMsgNum.ReadNumber()}]报警消息流水号", value.AlarmMsgNum);
  68. value.ManualConfirmAlarmType = reader.ReadUInt32();
  69. writer.WriteNumber($"[{ value.ManualConfirmAlarmType.ReadNumber()}]人工确认报警类型", value.ManualConfirmAlarmType);
  70. ReadOnlySpan<char> manualConfirmAlarmTypeBits =string.Join("", Convert.ToString(value.ManualConfirmAlarmType, 2).PadLeft(32, '0').Reverse()).AsSpan();
  71. writer.WriteStartObject($"人工确认报警对象[{manualConfirmAlarmTypeBits.ToString()}]");
  72. writer.WriteString("[bit29~bit31]保留", manualConfirmAlarmTypeBits.Slice(29,3).ToString());
  73. writer.WriteString($"[bit28]{manualConfirmAlarmTypeBits[28]}","确认车辆非法位移报警");
  74. writer.WriteString($"[bit27]{manualConfirmAlarmTypeBits[27]}", "确认车辆非法点火报警");
  75. writer.WriteString($"[bit23~bit26]保留", manualConfirmAlarmTypeBits.Slice(23, 4).ToString());
  76. writer.WriteString($"[bit22]{manualConfirmAlarmTypeBits[22]}", "确认路段行驶时间不足/过长报警");
  77. writer.WriteString($"[bit21]{manualConfirmAlarmTypeBits[21]}", "确认进出路线报警");
  78. writer.WriteString($"[bit20]{manualConfirmAlarmTypeBits[20]}", "确认进出区域报警");
  79. writer.WriteString($"[bit4~bit19]保留", manualConfirmAlarmTypeBits.Slice(4, 16).ToString());
  80. writer.WriteString($"[bit3]{manualConfirmAlarmTypeBits[3]}", "确认危险预警");
  81. writer.WriteString($"[bit1~bit2]保留", manualConfirmAlarmTypeBits.Slice(1, 2).ToString());
  82. writer.WriteString($"[bit0]{manualConfirmAlarmTypeBits[0]}", "确认紧急报警");
  83. writer.WriteEndObject();
  84. }
  85. }
  86. }