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.

104 line
3.8 KiB

  1. using JT808.Protocol.Extensions;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.Interfaces;
  4. using JT808.Protocol.MessagePack;
  5. using System.Collections.Generic;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.MessageBody
  8. {
  9. /// <summary>
  10. /// 摄像头立即拍摄命令应答
  11. /// 0x0805
  12. /// </summary>
  13. public class JT808_0x0805 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0805>, IJT808Analyze, IJT808_2019_Version
  14. {
  15. public override ushort MsgId { get; } = 0x0805;
  16. public override string Description => "摄像头立即拍摄命令应答";
  17. /// <summary>
  18. /// 应答流水号
  19. /// 对应平台摄像头立即拍摄命令的消息流水号
  20. /// </summary>
  21. public ushort ReplyMsgNum { get; set; }
  22. /// <summary>
  23. /// 结果
  24. /// 0:成功;1:失败;2:通道不支持。以下字段在结果=0 时才有效。
  25. /// </summary>
  26. public byte Result { get; set; }
  27. /// <summary>
  28. /// 多媒体ID个数
  29. /// 拍摄成功的多媒体个数
  30. /// </summary>
  31. public ushort MultimediaIdCount { get; set; }
  32. /// <summary>
  33. /// 多媒体ID列表
  34. /// </summary>
  35. public List<uint> MultimediaIds { get; set; }
  36. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  37. {
  38. JT808_0x0805 value = new JT808_0x0805();
  39. value.ReplyMsgNum = reader.ReadUInt16();
  40. writer.WriteNumber($"[{value.ReplyMsgNum.ReadNumber()}]应答流水号", value.ReplyMsgNum);
  41. value.Result = reader.ReadByte();
  42. string result = "成功";
  43. switch (value.Result)
  44. {
  45. case 1:
  46. result = "失败";
  47. break;
  48. case 2:
  49. result = "通道不支持";
  50. break;
  51. }
  52. writer.WriteNumber($"[{value.Result.ReadNumber()}]结果-{result}", value.Result);
  53. if (value.Result == 0)
  54. {
  55. value.MultimediaIdCount = reader.ReadUInt16();
  56. writer.WriteNumber($"[{value.MultimediaIdCount.ReadNumber()}]多媒体ID个数", value.MultimediaIdCount);
  57. writer.WriteStartArray("多媒体ID列表");
  58. for (var i = 0; i < value.MultimediaIdCount; i++)
  59. {
  60. writer.WriteStartObject();
  61. uint id = reader.ReadUInt32();
  62. writer.WriteNumber($"[{id.ReadNumber()}]ID{i+1}", id);
  63. writer.WriteEndObject();
  64. }
  65. writer.WriteEndArray();
  66. }
  67. }
  68. public JT808_0x0805 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  69. {
  70. JT808_0x0805 value = new JT808_0x0805();
  71. value.ReplyMsgNum = reader.ReadUInt16();
  72. value.Result = reader.ReadByte();
  73. if (value.Result == 0)
  74. {
  75. value.MultimediaIdCount = reader.ReadUInt16();
  76. value.MultimediaIds = new List<uint>();
  77. for (var i = 0; i < value.MultimediaIdCount; i++)
  78. {
  79. uint id = reader.ReadUInt32();
  80. value.MultimediaIds.Add(id);
  81. }
  82. }
  83. return value;
  84. }
  85. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0805 value, IJT808Config config)
  86. {
  87. writer.WriteUInt16(value.ReplyMsgNum);
  88. writer.WriteByte(value.Result);
  89. if (value.Result == 0)
  90. {
  91. writer.WriteUInt16((ushort)value.MultimediaIds.Count);
  92. foreach (var item in value.MultimediaIds)
  93. {
  94. writer.WriteUInt32(item);
  95. }
  96. }
  97. }
  98. }
  99. }