Você não pode selecionar mais de 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.

79 linhas
3.0 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.Json;
  6. using JT808.Protocol.Extensions.GPS51.Metadata;
  7. using JT808.Protocol.Formatters;
  8. using JT808.Protocol.Interfaces;
  9. using JT808.Protocol.MessageBody;
  10. using JT808.Protocol.MessagePack;
  11. namespace JT808.Protocol.Extensions.GPS51.MessageBody
  12. {
  13. /// <summary>
  14. /// N
  15. /// 版本号,开机或者重连第一条上报,例子结果:GB201-GSM-21001-1.1.1
  16. /// </summary>
  17. public class JT808_0x0200_0xe2 : JT808MessagePackFormatter<JT808_0x0200_0xe2>, JT808_0x0200_CustomBodyBase, IJT808Analyze
  18. {
  19. /// <summary>
  20. ///
  21. /// </summary>
  22. public byte AttachInfoId { get; set; } = JT808_GPS51_Constants.JT808_0x0200_0xe2;
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. public byte AttachInfoLength { get; set; }
  27. /// <summary>
  28. /// 版本号
  29. /// </summary>
  30. public string Version { get; set; }
  31. /// <summary>
  32. ///
  33. /// </summary>
  34. /// <param name="reader"></param>
  35. /// <param name="writer"></param>
  36. /// <param name="config"></param>
  37. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  38. {
  39. JT808_0x0200_0xe2 value = new JT808_0x0200_0xe2();
  40. value.AttachInfoId = reader.ReadByte();
  41. writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId);
  42. value.AttachInfoLength = reader.ReadByte();
  43. writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength);
  44. var version = reader.ReadVirtualArray(value.AttachInfoLength);
  45. writer.WriteString($"[{version.ToArray().ToHexString()}]版本号", reader.ReadRemainStringContent());
  46. }
  47. /// <summary>
  48. ///
  49. /// </summary>
  50. /// <param name="reader"></param>
  51. /// <param name="config"></param>
  52. /// <returns></returns>
  53. public override JT808_0x0200_0xe2 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  54. {
  55. JT808_0x0200_0xe2 value = new JT808_0x0200_0xe2();
  56. value.AttachInfoId = reader.ReadByte();
  57. value.AttachInfoLength = reader.ReadByte();
  58. value.Version = reader.ReadRemainStringContent();
  59. return value;
  60. }
  61. /// <summary>
  62. ///
  63. /// </summary>
  64. /// <param name="writer"></param>
  65. /// <param name="value"></param>
  66. /// <param name="config"></param>
  67. public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0xe2 value, IJT808Config config)
  68. {
  69. writer.WriteByte(value.AttachInfoId);
  70. writer.Skip(1,out int position);
  71. writer.WriteString(value.Version);
  72. var length = writer.GetCurrentPosition() - position - 1;
  73. writer.WriteByteReturn((byte)length, position);
  74. }
  75. }
  76. }