Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

146 righe
5.7 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_0x9202 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9202>, IJT808Analyze
  14. {
  15. public override string Description => "平台下发远程录像回放控制";
  16. public override ushort MsgId => 0x9202;
  17. /// <summary>
  18. /// 音视频通道号
  19. /// </summary>
  20. public byte AVChannelNo { get; set; }
  21. /// <summary>
  22. /// 回放控制
  23. /// </summary>
  24. public byte PlayBackControl { get; set; }
  25. /// <summary>
  26. /// 快进或快退倍数
  27. /// </summary>
  28. public byte FastForwardOrFastRewindMultiples { get; set; }
  29. /// <summary>
  30. /// 拖动回放位置
  31. /// </summary>
  32. public DateTime DragPlaybackPosition { get; set; }
  33. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  34. {
  35. JT808_0x9202 value = new JT808_0x9202();
  36. value.AVChannelNo = reader.ReadByte();
  37. writer.WriteString($"[{value.AVChannelNo.ReadNumber()}]音视频通道号", AVChannelNoDisplay(value.AVChannelNo));
  38. value.PlayBackControl = reader.ReadByte();
  39. writer.WriteString($"[{value.PlayBackControl.ReadNumber()}]回放控制", PlayBackControlDisplay(value.PlayBackControl));
  40. value.FastForwardOrFastRewindMultiples = reader.ReadByte();
  41. writer.WriteString($"[{value.FastForwardOrFastRewindMultiples.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.FastForwardOrFastRewindMultiples));
  42. value.DragPlaybackPosition = reader.ReadDateTime6();
  43. writer.WriteString($"[{value.DragPlaybackPosition.ToString("yyMMddHHmmss")}]拖动回放位置", value.DragPlaybackPosition.ToString("yyyy-MM-dd HH:mm:ss"));
  44. string AVChannelNoDisplay(byte LogicalChannelNo)
  45. {
  46. switch (LogicalChannelNo)
  47. {
  48. case 1:
  49. return "驾驶员";
  50. case 2:
  51. return "车辆正前方";
  52. case 3:
  53. return "车前门";
  54. case 4:
  55. return "车厢前部";
  56. case 5:
  57. return "车厢后部";
  58. case 7:
  59. return "行李舱";
  60. case 8:
  61. return "车辆左侧";
  62. case 9:
  63. return "车辆右侧";
  64. case 10:
  65. return "车辆正后方";
  66. case 11:
  67. return "车厢中部";
  68. case 12:
  69. return "车中门";
  70. case 13:
  71. return "驾驶席车门";
  72. case 33:
  73. return "驾驶员";
  74. case 36:
  75. return "车厢前部";
  76. case 37:
  77. return "车厢后部";
  78. default:
  79. return "预留";
  80. }
  81. }
  82. string PlayBackControlDisplay(byte PlayBackControl) {
  83. switch (PlayBackControl)
  84. {
  85. case 0:
  86. return "开始回放";
  87. case 1:
  88. return "暂停回放";
  89. case 2:
  90. return "结束回放";
  91. case 3:
  92. return "快进回放";
  93. case 4:
  94. return "关键帧快退回放";
  95. case 5:
  96. return "拖动回放";
  97. case 6:
  98. return "关键帧播放";
  99. default:
  100. return "未知";
  101. }
  102. }
  103. string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples)
  104. {
  105. switch (FastForwardOrFastRewindMultiples)
  106. {
  107. case 0:
  108. return "无效";
  109. case 1:
  110. return "1倍";
  111. case 2:
  112. return "2倍";
  113. case 3:
  114. return "4倍";
  115. case 4:
  116. return "8倍";
  117. case 5:
  118. return "16倍";
  119. default:
  120. return "未知";
  121. }
  122. }
  123. }
  124. public JT808_0x9202 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  125. {
  126. JT808_0x9202 jT808_0x9202 = new JT808_0x9202();
  127. jT808_0x9202.AVChannelNo = reader.ReadByte();
  128. jT808_0x9202.PlayBackControl = reader.ReadByte();
  129. jT808_0x9202.FastForwardOrFastRewindMultiples = reader.ReadByte();
  130. jT808_0x9202.DragPlaybackPosition = reader.ReadDateTime6();
  131. return jT808_0x9202;
  132. }
  133. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9202 value, IJT808Config config)
  134. {
  135. writer.WriteByte(value.AVChannelNo);
  136. writer.WriteByte(value.PlayBackControl);
  137. writer.WriteByte(value.FastForwardOrFastRewindMultiples);
  138. writer.WriteDateTime6(value.DragPlaybackPosition);
  139. }
  140. }
  141. }