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.

90 line
3.1 KiB

  1. using JT808.Protocol.Formatters;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessageBody;
  4. using JT808.Protocol.MessagePack;
  5. using System.Collections.Generic;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.Extensions.SuBiao.MessageBody
  8. {
  9. /// <summary>
  10. /// 查询基本信息
  11. /// </summary>
  12. public class JT808_0x8900_0xF8 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter<JT808_0x8900_0xF8>, IJT808Analyze
  13. {
  14. /// <summary>
  15. /// 查询基本信息透传类型
  16. /// </summary>
  17. public override byte PassthroughType { get; set; } = JT808_SuBiao_Constants.JT808_0X0900_0xF8;
  18. /// <summary>
  19. /// 外设ID列表总数
  20. /// </summary>
  21. public byte USBCount { get; set; }
  22. /// <summary>
  23. /// 外设ID
  24. /// </summary>
  25. public List<byte> MultipleUSB { get; set; }
  26. /// <summary>
  27. ///
  28. /// </summary>
  29. /// <param name="reader"></param>
  30. /// <param name="writer"></param>
  31. /// <param name="config"></param>
  32. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  33. {
  34. JT808_0x8900_0xF8 value = new JT808_0x8900_0xF8();
  35. value.USBCount = reader.ReadByte();
  36. writer.WriteNumber($"[{value.USBCount.ReadNumber()}]外设ID列表总数", value.USBCount);
  37. if (value.USBCount > 0)
  38. {
  39. writer.WriteStartArray("外设ID列表");
  40. for (int i = 0; i < value.USBCount; i++)
  41. {
  42. writer.WriteStartObject();
  43. byte usbId = reader.ReadByte();
  44. writer.WriteNumber($"[{usbId.ReadNumber()}]外设ID", usbId);
  45. writer.WriteEndObject();
  46. }
  47. writer.WriteEndArray();
  48. }
  49. }
  50. /// <summary>
  51. ///
  52. /// </summary>
  53. /// <param name="reader"></param>
  54. /// <param name="config"></param>
  55. /// <returns></returns>
  56. public JT808_0x8900_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  57. {
  58. JT808_0x8900_0xF8 value = new JT808_0x8900_0xF8();
  59. value.USBCount = reader.ReadByte();
  60. if (value.USBCount > 0)
  61. {
  62. value.MultipleUSB = new List<byte>();
  63. for (int i = 0; i < value.USBCount; i++)
  64. {
  65. value.MultipleUSB.Add(reader.ReadByte());
  66. }
  67. }
  68. return value;
  69. }
  70. /// <summary>
  71. ///
  72. /// </summary>
  73. /// <param name="writer"></param>
  74. /// <param name="value"></param>
  75. /// <param name="config"></param>
  76. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8900_0xF8 value, IJT808Config config)
  77. {
  78. if (value.MultipleUSB != null && value.MultipleUSB.Count > 0)
  79. {
  80. writer.WriteByte((byte)value.MultipleUSB.Count);
  81. foreach (var item in value.MultipleUSB)
  82. {
  83. writer.WriteByte(item);
  84. }
  85. }
  86. }
  87. }
  88. }