Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

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