您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

85 行
3.2 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. /// 温度
  15. /// </summary>
  16. public class JT808_0x0200_0x51 : JT808MessagePackFormatter<JT808_0x0200_0x51>, JT808_0x0200_CustomBodyBase, IJT808Analyze
  17. {
  18. /// <summary>
  19. /// 温度,Id
  20. /// </summary>
  21. public byte AttachInfoId { get; set; } = JT808_GPS51_Constants.JT808_0x0200_0x51;
  22. /// <summary>
  23. /// 温度信息附加长度
  24. /// </summary>
  25. public byte AttachInfoLength { get; set; }
  26. /// <summary>
  27. /// 温度数据
  28. /// </summary>
  29. public List<short> Temperatures { get; set; }
  30. /// <summary>
  31. ///
  32. /// </summary>
  33. /// <param name="reader"></param>
  34. /// <param name="writer"></param>
  35. /// <param name="config"></param>
  36. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  37. {
  38. JT808_0x0200_0x51 value = new JT808_0x0200_0x51();
  39. value.AttachInfoId = reader.ReadByte();
  40. writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId);
  41. value.AttachInfoLength = reader.ReadByte();
  42. writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength);
  43. value.Temperatures = new List<short>();
  44. for (ushort i = 0; i < value.AttachInfoLength/2; i++) {
  45. value.Temperatures.Add(reader.ReadInt16());
  46. }
  47. writer.WriteString($"[温度值:{string.Join("", value.Temperatures.Select(m=>m.ReadNumber()))}]",string.Join(",", value.Temperatures));
  48. }
  49. /// <summary>
  50. ///
  51. /// </summary>
  52. /// <param name="reader"></param>
  53. /// <param name="config"></param>
  54. /// <returns></returns>
  55. public override JT808_0x0200_0x51 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  56. {
  57. JT808_0x0200_0x51 value = new JT808_0x0200_0x51();
  58. value.AttachInfoId = reader.ReadByte();
  59. value.AttachInfoLength = reader.ReadByte();
  60. value.Temperatures = new List<short>();
  61. for (int i = 0; i < value.AttachInfoLength / 2; i++) {
  62. value.Temperatures.Add(reader.ReadInt16());
  63. }
  64. return value;
  65. }
  66. /// <summary>
  67. ///
  68. /// </summary>
  69. /// <param name="writer"></param>
  70. /// <param name="value"></param>
  71. /// <param name="config"></param>
  72. public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x51 value, IJT808Config config)
  73. {
  74. writer.WriteByte(value.AttachInfoId);
  75. writer.WriteByte((byte)(value.Temperatures.Count*2));
  76. foreach (var item in value.Temperatures)
  77. {
  78. writer.WriteInt16(item);
  79. }
  80. }
  81. }
  82. }