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.

172 lines
6.8 KiB

  1. using JT808.Protocol.Formatters;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessagePack;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Text.Json;
  8. namespace JT808.Protocol.Extensions.JT1078.MessageBody
  9. {
  10. /// <summary>
  11. /// 终端上传音视频资源列表
  12. /// </summary>
  13. public class JT808_0x1205_AVResouce:IJT808MessagePackFormatter<JT808_0x1205_AVResouce>, IJT808Analyze
  14. {
  15. /// <summary>
  16. /// 逻辑通道号
  17. /// </summary>
  18. public byte LogicChannelNo { get; set; }
  19. /// <summary>
  20. /// 开始时间
  21. /// </summary>
  22. public DateTime BeginTime { get; set; }
  23. /// <summary>
  24. /// 结束时间
  25. /// </summary>
  26. public DateTime EndTime { get; set; }
  27. /// <summary>
  28. /// 报警标志
  29. /// </summary>
  30. public uint AlarmFlag { get; set; }
  31. /// <summary>
  32. /// 音视频资源类型
  33. /// </summary>
  34. public byte AVResourceType { get; set; }
  35. /// <summary>
  36. /// 码流类型
  37. /// </summary>
  38. public byte StreamType { get; set; }
  39. /// <summary>
  40. /// 存储器类型
  41. /// </summary>
  42. public byte MemoryType { get; set; }
  43. /// <summary>
  44. /// 文件大小
  45. /// </summary>
  46. public uint FileSize { get; set; }
  47. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  48. {
  49. JT808_0x1205_AVResouce value = new JT808_0x1205_AVResouce();
  50. value.LogicChannelNo = reader.ReadByte();
  51. writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
  52. value.BeginTime = reader.ReadDateTime6();
  53. writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]开始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
  54. value.BeginTime = reader.ReadDateTime6();
  55. writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]开始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
  56. value.AlarmFlag = reader.ReadUInt32();
  57. writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag);//此处的报警标志不是很明白
  58. value.AVResourceType = reader.ReadByte();
  59. writer.WriteString($"[{value.AVResourceType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVResourceType));
  60. value.StreamType = reader.ReadByte();
  61. writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType));
  62. value.MemoryType = reader.ReadByte();
  63. writer.WriteString($"[{value.MemoryType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemoryType));
  64. value.FileSize = reader.ReadUInt32();
  65. writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小(B)", value.FileSize);
  66. string LogicalChannelNoDisplay(byte LogicalChannelNo)
  67. {
  68. switch (LogicalChannelNo)
  69. {
  70. case 1:
  71. return "驾驶员";
  72. case 2:
  73. return "车辆正前方";
  74. case 3:
  75. return "车前门";
  76. case 4:
  77. return "车厢前部";
  78. case 5:
  79. return "车厢后部";
  80. case 7:
  81. return "行李舱";
  82. case 8:
  83. return "车辆左侧";
  84. case 9:
  85. return "车辆右侧";
  86. case 10:
  87. return "车辆正后方";
  88. case 11:
  89. return "车厢中部";
  90. case 12:
  91. return "车中门";
  92. case 13:
  93. return "驾驶席车门";
  94. case 33:
  95. return "驾驶员";
  96. case 36:
  97. return "车厢前部";
  98. case 37:
  99. return "车厢后部";
  100. default:
  101. return "预留";
  102. }
  103. }
  104. string AVResourceTypeDisplay(byte AVResourceType) {
  105. switch (AVResourceType)
  106. {
  107. case 0:
  108. return "音视频";
  109. case 1:
  110. return "音频";
  111. case 2:
  112. return "视频";
  113. default:
  114. break;
  115. }
  116. return "未知";
  117. }
  118. string StreamTypeDisplay(byte StreamType) {
  119. switch (StreamType)
  120. {
  121. case 1:
  122. return "主码流";
  123. case 2:
  124. return "子码流";
  125. default:
  126. return "未知";
  127. }
  128. }
  129. string MemoryTypeDisplay(byte MemoryType)
  130. {
  131. switch (MemoryType)
  132. {
  133. case 1:
  134. return "主存储器";
  135. case 2:
  136. return "灾备存储器";
  137. default:
  138. return "未知";
  139. }
  140. }
  141. }
  142. public JT808_0x1205_AVResouce Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  143. {
  144. JT808_0x1205_AVResouce jT808_0x1205_AVResouce = new JT808_0x1205_AVResouce();
  145. jT808_0x1205_AVResouce.LogicChannelNo = reader.ReadByte();
  146. jT808_0x1205_AVResouce.BeginTime = reader.ReadDateTime6();
  147. jT808_0x1205_AVResouce.EndTime = reader.ReadDateTime6();
  148. jT808_0x1205_AVResouce.AlarmFlag = reader.ReadUInt32();
  149. jT808_0x1205_AVResouce.AVResourceType = reader.ReadByte();
  150. jT808_0x1205_AVResouce.StreamType = reader.ReadByte();
  151. jT808_0x1205_AVResouce.MemoryType = reader.ReadByte();
  152. jT808_0x1205_AVResouce.FileSize = reader.ReadUInt32();
  153. return jT808_0x1205_AVResouce;
  154. }
  155. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1205_AVResouce value, IJT808Config config)
  156. {
  157. writer.WriteByte(value.LogicChannelNo);
  158. writer.WriteDateTime6(value.BeginTime);
  159. writer.WriteDateTime6(value.EndTime);
  160. writer.WriteUInt32(value.AlarmFlag);
  161. writer.WriteByte(value.AVResourceType);
  162. writer.WriteByte(value.StreamType);
  163. writer.WriteByte(value.MemoryType);
  164. writer.WriteUInt32(value.FileSize);
  165. }
  166. }
  167. }