Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

123 linhas
4.1 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_0x9301 : JT808MessagePackFormatter<JT808_0x9301>, JT808Bodies, IJT808Analyze
  14. {
  15. /// <summary>
  16. /// 云台旋转
  17. /// </summary>
  18. public string Description => "云台旋转";
  19. /// <summary>
  20. ///
  21. /// </summary>
  22. public bool SkipSerialization => false;
  23. /// <summary>
  24. /// 0x9301
  25. /// </summary>
  26. public ushort MsgId => 0x9301;
  27. /// <summary>
  28. /// 逻辑通道号
  29. /// </summary>
  30. public byte ChannelNo { get; set; }
  31. /// <summary>
  32. /// 方向
  33. /// 0:停止
  34. /// 1:上
  35. /// 2:下
  36. /// 3:左
  37. /// 4:右
  38. /// </summary>
  39. public byte Direction { get; set; }
  40. /// <summary>
  41. /// 速度
  42. /// 0-255
  43. /// </summary>
  44. public byte Speed { get; set; }
  45. /// <summary>
  46. ///
  47. /// </summary>
  48. /// <param name="reader"></param>
  49. /// <param name="writer"></param>
  50. /// <param name="config"></param>
  51. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  52. {
  53. JT808_0x9301 value = new JT808_0x9301();
  54. value.ChannelNo = reader.ReadByte();
  55. writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
  56. value.Direction = reader.ReadByte();
  57. writer.WriteString($"[{value.Direction.ReadNumber()}]方向", DirectionDisplay(value.Direction));
  58. value.Speed = reader.ReadByte();
  59. writer.WriteNumber($"[{value.Speed.ReadNumber()}]速度", value.Speed);
  60. static string LogicalChannelNoDisplay(byte LogicalChannelNo)
  61. {
  62. return LogicalChannelNo switch
  63. {
  64. 1 => "驾驶员",
  65. 2 => "车辆正前方",
  66. 3 => "车前门",
  67. 4 => "车厢前部",
  68. 5 => "车厢后部",
  69. 7 => "行李舱",
  70. 8 => "车辆左侧",
  71. 9 => "车辆右侧",
  72. 10 => "车辆正后方",
  73. 11 => "车厢中部",
  74. 12 => "车中门",
  75. 13 => "驾驶席车门",
  76. 33 => "驾驶员",
  77. 36 => "车厢前部",
  78. 37 => "车厢后部",
  79. _ => "预留",
  80. };
  81. }
  82. static string DirectionDisplay(byte Direction) {
  83. return Direction switch
  84. {
  85. 0 => "停止",
  86. 1 => "上",
  87. 2 => "下",
  88. 3 => "左",
  89. 4 => "右",
  90. _ => "未知",
  91. };
  92. }
  93. }
  94. /// <summary>
  95. ///
  96. /// </summary>
  97. /// <param name="reader"></param>
  98. /// <param name="config"></param>
  99. /// <returns></returns>
  100. public override JT808_0x9301 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  101. {
  102. var jT808_0x9301 = new JT808_0x9301();
  103. jT808_0x9301.ChannelNo = reader.ReadByte();
  104. jT808_0x9301.Direction = reader.ReadByte();
  105. jT808_0x9301.Speed = reader.ReadByte();
  106. return jT808_0x9301;
  107. }
  108. /// <summary>
  109. ///
  110. /// </summary>
  111. /// <param name="writer"></param>
  112. /// <param name="value"></param>
  113. /// <param name="config"></param>
  114. public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x9301 value, IJT808Config config)
  115. {
  116. writer.WriteByte(value.ChannelNo);
  117. writer.WriteByte(value.Direction);
  118. writer.WriteByte(value.Speed);
  119. }
  120. }
  121. }