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.

157 regels
7.4 KiB

  1. using JT808.Protocol.Formatters;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessageBody;
  4. using JT808.Protocol.MessagePack;
  5. using System.Text.Json;
  6. namespace JT808.Protocol.Extensions.SuBiao.MessageBody
  7. {
  8. /// <summary>
  9. /// 胎压监测系统参数
  10. /// </summary>
  11. public class JT808_0x8103_0xF366 : JT808MessagePackFormatter<JT808_0x8103_0xF366>, JT808_0x8103_BodyBase, IJT808Analyze
  12. {
  13. /// <summary>
  14. /// 胎压监测系统参数Id
  15. /// </summary>
  16. public uint ParamId { get; set; } = JT808_SuBiao_Constants.JT808_0X8103_0xF366;
  17. /// <summary>
  18. /// 胎压监测系统参数长度
  19. /// </summary>
  20. public byte ParamLength { get; set; } = 46;
  21. /// <summary>
  22. /// 轮胎规格型号 12位
  23. /// </summary>
  24. public string TyreSpecificationType { get; set; }
  25. /// <summary>
  26. /// 胎压单位
  27. /// </summary>
  28. public ushort TyrePressureUnit { get; set; }
  29. /// <summary>
  30. /// 正常胎压值
  31. /// </summary>
  32. public ushort NormalFetalPressure { get; set; }
  33. /// <summary>
  34. /// 胎压不平衡门限
  35. /// </summary>
  36. public ushort ThresholdUnbalancedTirePressure { get; set; }
  37. /// <summary>
  38. /// 慢漏气门限
  39. /// </summary>
  40. public ushort SlowLeakageThreshold { get; set; }
  41. /// <summary>
  42. /// 低压阈值
  43. /// </summary>
  44. public ushort LowVoltageThreshold { get; set; }
  45. /// <summary>
  46. /// 高压阈值
  47. /// </summary>
  48. public ushort HighVoltageThreshold { get; set; }
  49. /// <summary>
  50. /// 高温阈值
  51. /// </summary>
  52. public ushort HighTemperatureThreshold { get; set; }
  53. /// <summary>
  54. /// 电压阈值
  55. /// </summary>
  56. public ushort VoltageThreshold { get; set; }
  57. /// <summary>
  58. /// 定时上报时间间隔
  59. /// </summary>
  60. public ushort TimedReportingInterval { get; set; }
  61. /// <summary>
  62. /// 保留项
  63. /// </summary>
  64. public byte[] Retain { get; set; } = new byte[6];
  65. /// <summary>
  66. /// 胎压监测系统参数
  67. /// </summary>
  68. public string Description => "胎压监测系统参数";
  69. /// <summary>
  70. ///
  71. /// </summary>
  72. /// <param name="reader"></param>
  73. /// <param name="writer"></param>
  74. /// <param name="config"></param>
  75. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  76. {
  77. JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366();
  78. value.ParamId = reader.ReadUInt32();
  79. value.ParamLength = reader.ReadByte();
  80. writer.WriteNumber($"[{value.ParamId.ReadNumber()}]参数ID", value.ParamId);
  81. writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength);
  82. string tyreSpecificationTypeHex = reader.ReadVirtualArray(12).ToArray().ToHexString();
  83. value.TyreSpecificationType = reader.ReadString(12);
  84. writer.WriteString($"[{tyreSpecificationTypeHex}]轮胎规格型号", value.TyreSpecificationType);
  85. value.TyrePressureUnit = reader.ReadUInt16();
  86. writer.WriteNumber($"[{value.TyrePressureUnit.ReadNumber()}]胎压单位", value.TyrePressureUnit);
  87. value.NormalFetalPressure = reader.ReadUInt16();
  88. writer.WriteNumber($"[{value.NormalFetalPressure.ReadNumber()}]正常胎压值", value.NormalFetalPressure);
  89. value.ThresholdUnbalancedTirePressure = reader.ReadUInt16();
  90. writer.WriteNumber($"[{value.ThresholdUnbalancedTirePressure.ReadNumber()}]胎压不平衡门限", value.ThresholdUnbalancedTirePressure);
  91. value.SlowLeakageThreshold = reader.ReadUInt16();
  92. writer.WriteNumber($"[{value.SlowLeakageThreshold.ReadNumber()}]慢漏气门限", value.SlowLeakageThreshold);
  93. value.LowVoltageThreshold = reader.ReadUInt16();
  94. writer.WriteNumber($"[{value.LowVoltageThreshold.ReadNumber()}]低压阈值", value.LowVoltageThreshold);
  95. value.HighVoltageThreshold = reader.ReadUInt16();
  96. writer.WriteNumber($"[{value.HighVoltageThreshold.ReadNumber()}]高压阈值", value.HighVoltageThreshold);
  97. value.HighTemperatureThreshold = reader.ReadUInt16();
  98. writer.WriteNumber($"[{value.HighTemperatureThreshold.ReadNumber()}]高温阈值", value.HighTemperatureThreshold);
  99. value.VoltageThreshold = reader.ReadUInt16();
  100. writer.WriteNumber($"[{value.VoltageThreshold.ReadNumber()}]电压阈值", value.VoltageThreshold);
  101. value.TimedReportingInterval = reader.ReadUInt16();
  102. writer.WriteNumber($"[{value.TimedReportingInterval.ReadNumber()}]定时上报时间间隔", value.TimedReportingInterval);
  103. value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray();
  104. writer.WriteString("保留项", value.Retain.ToHexString());
  105. }
  106. /// <summary>
  107. ///
  108. /// </summary>
  109. /// <param name="reader"></param>
  110. /// <param name="config"></param>
  111. /// <returns></returns>
  112. public override JT808_0x8103_0xF366 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  113. {
  114. JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366();
  115. value.ParamId = reader.ReadUInt32();
  116. value.ParamLength = reader.ReadByte();
  117. value.TyreSpecificationType = reader.ReadString(12);
  118. value.TyrePressureUnit = reader.ReadUInt16();
  119. value.NormalFetalPressure = reader.ReadUInt16();
  120. value.ThresholdUnbalancedTirePressure = reader.ReadUInt16();
  121. value.SlowLeakageThreshold = reader.ReadUInt16();
  122. value.LowVoltageThreshold = reader.ReadUInt16();
  123. value.HighVoltageThreshold = reader.ReadUInt16();
  124. value.HighTemperatureThreshold = reader.ReadUInt16();
  125. value.VoltageThreshold = reader.ReadUInt16();
  126. value.TimedReportingInterval = reader.ReadUInt16();
  127. value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray();
  128. return value;
  129. }
  130. /// <summary>
  131. ///
  132. /// </summary>
  133. /// <param name="writer"></param>
  134. /// <param name="value"></param>
  135. /// <param name="config"></param>
  136. public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF366 value, IJT808Config config)
  137. {
  138. writer.WriteUInt32(value.ParamId);
  139. writer.Skip(1, out int ParamLengthPosition);
  140. writer.WriteString(value.TyreSpecificationType);
  141. writer.WriteUInt16(value.TyrePressureUnit);
  142. writer.WriteUInt16(value.NormalFetalPressure);
  143. writer.WriteUInt16(value.ThresholdUnbalancedTirePressure);
  144. writer.WriteUInt16(value.SlowLeakageThreshold);
  145. writer.WriteUInt16(value.LowVoltageThreshold);
  146. writer.WriteUInt16(value.HighVoltageThreshold);
  147. writer.WriteUInt16(value.HighTemperatureThreshold);
  148. writer.WriteUInt16(value.VoltageThreshold);
  149. writer.WriteUInt16(value.TimedReportingInterval);
  150. writer.WriteArray(value.Retain);
  151. writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition);
  152. }
  153. }
  154. }