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.

146 lines
6.0 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Extensions;
  3. using JT808.Protocol.Formatters;
  4. using JT808.Protocol.Interfaces;
  5. using JT808.Protocol.MessagePack;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.MessageBody
  8. {
  9. /// <summary>
  10. /// 摄像头立即拍摄命令
  11. /// 0x8801
  12. /// </summary>
  13. public class JT808_0x8801 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x8801>, IJT808Analyze, IJT808_2019_Version
  14. {
  15. /// <summary>
  16. /// 0x8801
  17. /// </summary>
  18. public override ushort MsgId { get; } = 0x8801;
  19. /// <summary>
  20. /// 摄像头立即拍摄命令
  21. /// </summary>
  22. public override string Description => "摄像头立即拍摄命令";
  23. /// <summary>
  24. /// 通道 ID
  25. /// </summary>
  26. public byte ChannelId { get; set; }
  27. /// <summary>
  28. /// 拍摄命令
  29. /// 0 表示停止拍摄;0xFFFF 表示录像;其它表示拍照张数
  30. /// </summary>
  31. public ushort ShootingCommand { get; set; }
  32. /// <summary>
  33. /// 拍照间隔/录像时间
  34. /// 秒,0 表示按最小间隔拍照或一直录像
  35. /// </summary>
  36. public ushort VideoTime { get; set; }
  37. /// <summary>
  38. /// 保存标志
  39. /// 1:保存;0:实时上传
  40. /// </summary>
  41. public byte SaveFlag { get; set; }
  42. /// <summary>
  43. /// 分辨率
  44. /// <see cref="JT808.Protocol.Enums.JT808CameraResolutionType"/>
  45. /// </summary>
  46. public byte Resolution { get; set; }
  47. /// <summary>
  48. /// 图像/视频质量
  49. /// 1-10,1 代表质量损失最小,10 表示压缩比最大
  50. /// </summary>
  51. public byte VideoQuality { get; set; }
  52. /// <summary>
  53. /// 亮度
  54. /// 0-255
  55. /// </summary>
  56. public byte Lighting { get; set; }
  57. /// <summary>
  58. /// 对比度
  59. /// 0-127
  60. /// </summary>
  61. public byte Contrast { get; set; }
  62. /// <summary>
  63. /// 饱和度
  64. /// 0-127
  65. /// </summary>
  66. public byte Saturability { get; set; }
  67. /// <summary>
  68. /// 色度
  69. /// 0-255
  70. /// </summary>
  71. public byte Chroma { get; set; }
  72. /// <summary>
  73. ///
  74. /// </summary>
  75. /// <param name="reader"></param>
  76. /// <param name="config"></param>
  77. /// <returns></returns>
  78. public JT808_0x8801 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  79. {
  80. JT808_0x8801 jT808_0X8801 = new JT808_0x8801();
  81. jT808_0X8801.ChannelId = reader.ReadByte();
  82. jT808_0X8801.ShootingCommand = reader.ReadUInt16();
  83. jT808_0X8801.VideoTime = reader.ReadUInt16();
  84. jT808_0X8801.SaveFlag = reader.ReadByte();
  85. jT808_0X8801.Resolution = reader.ReadByte();
  86. jT808_0X8801.VideoQuality = reader.ReadByte();
  87. jT808_0X8801.Lighting = reader.ReadByte();
  88. jT808_0X8801.Contrast = reader.ReadByte();
  89. jT808_0X8801.Saturability = reader.ReadByte();
  90. jT808_0X8801.Chroma = reader.ReadByte();
  91. return jT808_0X8801;
  92. }
  93. /// <summary>
  94. ///
  95. /// </summary>
  96. /// <param name="writer"></param>
  97. /// <param name="value"></param>
  98. /// <param name="config"></param>
  99. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8801 value, IJT808Config config)
  100. {
  101. writer.WriteByte(value.ChannelId);
  102. writer.WriteUInt16(value.ShootingCommand);
  103. writer.WriteUInt16(value.VideoTime);
  104. writer.WriteByte(value.SaveFlag);
  105. writer.WriteByte(value.Resolution);
  106. writer.WriteByte(value.VideoQuality);
  107. writer.WriteByte(value.Lighting);
  108. writer.WriteByte(value.Contrast);
  109. writer.WriteByte(value.Saturability);
  110. writer.WriteByte(value.Chroma);
  111. }
  112. /// <summary>
  113. ///
  114. /// </summary>
  115. /// <param name="reader"></param>
  116. /// <param name="writer"></param>
  117. /// <param name="config"></param>
  118. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  119. {
  120. JT808_0x8801 value = new JT808_0x8801();
  121. value.ChannelId = reader.ReadByte();
  122. value.ShootingCommand = reader.ReadUInt16();
  123. value.VideoTime = reader.ReadUInt16();
  124. value.SaveFlag = reader.ReadByte();
  125. value.Resolution = reader.ReadByte();
  126. value.VideoQuality = reader.ReadByte();
  127. value.Lighting = reader.ReadByte();
  128. value.Contrast = reader.ReadByte();
  129. value.Saturability = reader.ReadByte();
  130. value.Chroma = reader.ReadByte();
  131. JT808CameraResolutionType jT808CameraResolutionType = (JT808CameraResolutionType)value.Resolution;
  132. writer.WriteNumber($"[{ value.ChannelId.ReadNumber()}]通道ID", value.ChannelId);
  133. writer.WriteNumber($"[{ value.ShootingCommand.ReadNumber()}]拍摄命令", value.ShootingCommand);
  134. writer.WriteNumber($"[{ value.VideoTime.ReadNumber()}]拍照间隔_录像时间", value.VideoTime);
  135. writer.WriteString($"[{ value.SaveFlag.ReadNumber()}]保存标志-{value.SaveFlag}", value.SaveFlag==1? "保存" : "实时上传");
  136. writer.WriteNumber($"[{ value.Resolution.ReadNumber()}]分辨率-{jT808CameraResolutionType.ToString()}", value.Resolution);
  137. writer.WriteNumber($"[{ value.VideoQuality.ReadNumber()}]图像_视频质量", value.VideoQuality);
  138. writer.WriteNumber($"[{ value.Lighting.ReadNumber()}]亮度", value.Lighting);
  139. writer.WriteNumber($"[{ value.Contrast.ReadNumber()}]对比度", value.Contrast);
  140. writer.WriteNumber($"[{ value.Saturability.ReadNumber()}]饱和度", value.Saturability);
  141. writer.WriteNumber($"[{ value.Chroma.ReadNumber()}]色度", value.Chroma);
  142. }
  143. }
  144. }