No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

190 líneas
7.6 KiB

  1. using JT809.Protocol.Extensions.JT1078.Enums;
  2. using JT809.Protocol.Formatters;
  3. using JT809.Protocol.Interfaces;
  4. using JT809.Protocol.MessagePack;
  5. using System;
  6. using System.Text.Json;
  7. namespace JT809.Protocol.Extensions.JT1078.MessageBody
  8. {
  9. /// <summary>
  10. /// 查询音视频资源目录请求消息
  11. /// </summary>
  12. public class JT809_JT1078_0x9900_0x9902 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9900_0x9902>, IJT809Analyze
  13. {
  14. /// <summary>
  15. /// 逻辑通道号
  16. /// </summary>
  17. public byte ChannelId { get; set; }
  18. /// <summary>
  19. /// 起始时间
  20. /// </summary>
  21. public DateTime StartTime { get; set; }
  22. /// <summary>
  23. /// 终止时间
  24. /// </summary>
  25. public DateTime EndTime { get; set; }
  26. /// <summary>
  27. /// 报警类型
  28. /// </summary>
  29. public ulong AlarmType { get; set; }
  30. /// <summary>
  31. /// 音视频类型
  32. /// </summary>
  33. public byte AVItemType { get; set; }
  34. /// <summary>
  35. /// 码流类型
  36. /// </summary>
  37. public byte StreamType { get; set; }
  38. /// <summary>
  39. /// 存储器类型
  40. /// </summary>
  41. public byte MemType { get; set; }
  42. /// <summary>
  43. /// 时效口令
  44. /// 64
  45. /// </summary>
  46. public string AuthorizeCode { get; set; }
  47. /// <summary>
  48. /// 车辆进入跨域地区后5min之内任一位置,仅跨域访问请求时,使用此字段
  49. /// 36
  50. /// </summary>
  51. public byte[] GnssData { get; set; }
  52. public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.查询音视频资源目录请求消息.ToUInt16Value();
  53. public override string Description { get; } = "查询音视频资源目录请求消息";
  54. public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
  55. {
  56. JT809_JT1078_0x9900_0x9902 value = new JT809_JT1078_0x9900_0x9902();
  57. value.ChannelId = reader.ReadByte();
  58. writer.WriteString($"[{value.ChannelId.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelId));
  59. var virtualHex = reader.ReadVirtualArray(8);
  60. value.StartTime = reader.ReadUTCDateTime();
  61. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]开始时间", value.StartTime);
  62. virtualHex = reader.ReadVirtualArray(8);
  63. value.EndTime = reader.ReadUTCDateTime();
  64. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]结束时间", value.StartTime);
  65. value.AlarmType = reader.ReadUInt64();
  66. writer.WriteNumber($"[{value.AlarmType.ReadNumber()}]报警标志物", value.AlarmType);
  67. value.AVItemType = reader.ReadByte();
  68. writer.WriteString($"[{value.AVItemType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVItemType));
  69. value.StreamType = reader.ReadByte();
  70. writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType));
  71. value.MemType = reader.ReadByte();
  72. writer.WriteString($"[{value.MemType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemType));
  73. virtualHex = reader.ReadVirtualArray(64);
  74. value.AuthorizeCode = reader.ReadString(64);
  75. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]时效口令", value.AuthorizeCode);
  76. virtualHex = reader.ReadVirtualArray(36);
  77. value.GnssData = reader.ReadArray(36).ToArray();
  78. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆进入跨域地区后5min之内任一位置", virtualHex.ToArray().ToHexString());
  79. string LogicalChannelNoDisplay(byte LogicalChannelNo)
  80. {
  81. switch (LogicalChannelNo)
  82. {
  83. case 1:
  84. return "驾驶员";
  85. case 2:
  86. return "车辆正前方";
  87. case 3:
  88. return "车前门";
  89. case 4:
  90. return "车厢前部";
  91. case 5:
  92. return "车厢后部";
  93. case 7:
  94. return "行李舱";
  95. case 8:
  96. return "车辆左侧";
  97. case 9:
  98. return "车辆右侧";
  99. case 10:
  100. return "车辆正后方";
  101. case 11:
  102. return "车厢中部";
  103. case 12:
  104. return "车中门";
  105. case 13:
  106. return "驾驶席车门";
  107. case 33:
  108. return "驾驶员";
  109. case 36:
  110. return "车厢前部";
  111. case 37:
  112. return "车厢后部";
  113. default:
  114. return "预留";
  115. }
  116. }
  117. string AVResourceTypeDisplay(byte AVResourceType)
  118. {
  119. switch (AVResourceType)
  120. {
  121. case 0:
  122. return "音视频";
  123. case 1:
  124. return "音频";
  125. case 2:
  126. return "视频";
  127. default:
  128. break;
  129. }
  130. return "未知";
  131. }
  132. string StreamTypeDisplay(byte StreamType)
  133. {
  134. switch (StreamType)
  135. {
  136. case 1:
  137. return "主码流";
  138. case 2:
  139. return "子码流";
  140. default:
  141. return "未知";
  142. }
  143. }
  144. string MemoryTypeDisplay(byte MemoryType)
  145. {
  146. switch (MemoryType)
  147. {
  148. case 1:
  149. return "主存储器";
  150. case 2:
  151. return "灾备存储器";
  152. default:
  153. return "未知";
  154. }
  155. }
  156. }
  157. public JT809_JT1078_0x9900_0x9902 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
  158. {
  159. JT809_JT1078_0x9900_0x9902 value = new JT809_JT1078_0x9900_0x9902();
  160. value.ChannelId = reader.ReadByte();
  161. value.StartTime = reader.ReadUTCDateTime();
  162. value.EndTime = reader.ReadUTCDateTime();
  163. value.AlarmType = reader.ReadUInt64();
  164. value.AVItemType = reader.ReadByte();
  165. value.StreamType = reader.ReadByte();
  166. value.MemType = reader.ReadByte();
  167. value.AuthorizeCode = reader.ReadString(64);
  168. value.GnssData = reader.ReadArray(36).ToArray();
  169. return value;
  170. }
  171. public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9900_0x9902 value, IJT809Config config)
  172. {
  173. writer.WriteByte(value.ChannelId);
  174. writer.WriteUTCDateTime(value.StartTime);
  175. writer.WriteUTCDateTime(value.EndTime);
  176. writer.WriteUInt64(value.AlarmType);
  177. writer.WriteByte(value.AVItemType);
  178. writer.WriteByte(value.StreamType);
  179. writer.WriteByte(value.MemType);
  180. writer.WriteStringPadRight(value.AuthorizeCode, 64);
  181. writer.WriteArray(value.GnssData);
  182. }
  183. }
  184. }