您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

88 行
3.4 KiB

  1. using JT808.Protocol.Formatters;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessageBody;
  4. using JT808.Protocol.MessagePack;
  5. using System;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.Extensions.JT1078.MessageBody
  8. {
  9. /// <summary>
  10. /// 视频信号丢失报警状态
  11. /// 0x0200_0x15
  12. /// </summary>
  13. public class JT808_0x0200_0x15 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x15>, IJT808Analyze
  14. {
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. public override byte AttachInfoId { get; set; } = 0x15;
  19. /// <summary>
  20. /// 数据 长度
  21. /// </summary>
  22. public override byte AttachInfoLength { get; set; } = 4;
  23. /// <summary>
  24. /// 视频信号丢失报警状态
  25. /// </summary>
  26. public uint VideoSignalLoseAlarmStatus { get; set; }
  27. /// <summary>
  28. ///
  29. /// </summary>
  30. /// <param name="reader"></param>
  31. /// <param name="writer"></param>
  32. /// <param name="config"></param>
  33. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  34. {
  35. JT808_0x0200_0x15 value = new JT808_0x0200_0x15();
  36. value.AttachInfoId = reader.ReadByte();
  37. writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId);
  38. value.AttachInfoLength = reader.ReadByte();
  39. writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength);
  40. value.VideoSignalLoseAlarmStatus = reader.ReadUInt32();
  41. writer.WriteNumber($"[{value.VideoSignalLoseAlarmStatus.ReadNumber()}]视频信号丢失报警状态", value.VideoSignalLoseAlarmStatus);
  42. var videoSignalLoseAlarmStatusSpan = Convert.ToString(value.VideoSignalLoseAlarmStatus, 2).PadLeft(32, '0').AsSpan();
  43. writer.WriteStartArray("视频信号丢失报警状态集合");
  44. int index = 0;
  45. foreach (var item in videoSignalLoseAlarmStatusSpan)
  46. {
  47. if (item == '1')
  48. {
  49. writer.WriteStringValue($"{index}通道视频信号丢失");
  50. }
  51. else
  52. {
  53. writer.WriteStringValue($"{index}通道视频正常");
  54. }
  55. index++;
  56. }
  57. writer.WriteEndArray();
  58. }
  59. /// <summary>
  60. ///
  61. /// </summary>
  62. /// <param name="reader"></param>
  63. /// <param name="config"></param>
  64. /// <returns></returns>
  65. public JT808_0x0200_0x15 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  66. {
  67. JT808_0x0200_0x15 value = new JT808_0x0200_0x15();
  68. value.AttachInfoId = reader.ReadByte();
  69. value.AttachInfoLength = reader.ReadByte();
  70. value.VideoSignalLoseAlarmStatus = reader.ReadUInt32();
  71. return value;
  72. }
  73. /// <summary>
  74. ///
  75. /// </summary>
  76. /// <param name="writer"></param>
  77. /// <param name="value"></param>
  78. /// <param name="config"></param>
  79. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x15 value, IJT808Config config)
  80. {
  81. writer.WriteByte(value.AttachInfoId);
  82. writer.WriteByte(value.AttachInfoLength);
  83. writer.WriteUInt32(value.VideoSignalLoseAlarmStatus);
  84. }
  85. }
  86. }