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

152 行
7.2 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 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF366>, IJT808Analyze
  12. {
  13. /// <summary>
  14. /// 胎压监测系统参数Id
  15. /// </summary>
  16. public override uint ParamId { get; set; } = JT808_SuBiao_Constants.JT808_0X8103_0xF366;
  17. /// <summary>
  18. /// 胎压监测系统参数长度
  19. /// </summary>
  20. public override 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. /// <param name="reader"></param>
  69. /// <param name="writer"></param>
  70. /// <param name="config"></param>
  71. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  72. {
  73. JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366();
  74. value.ParamId = reader.ReadUInt32();
  75. value.ParamLength = reader.ReadByte();
  76. writer.WriteNumber($"[{value.ParamId.ReadNumber()}]参数ID", value.ParamId);
  77. writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength);
  78. string tyreSpecificationTypeHex = reader.ReadVirtualArray(12).ToArray().ToHexString();
  79. value.TyreSpecificationType = reader.ReadString(12);
  80. writer.WriteString($"[{tyreSpecificationTypeHex}]轮胎规格型号", value.TyreSpecificationType);
  81. value.TyrePressureUnit = reader.ReadUInt16();
  82. writer.WriteNumber($"[{value.TyrePressureUnit.ReadNumber()}]胎压单位", value.TyrePressureUnit);
  83. value.NormalFetalPressure = reader.ReadUInt16();
  84. writer.WriteNumber($"[{value.NormalFetalPressure.ReadNumber()}]正常胎压值", value.NormalFetalPressure);
  85. value.ThresholdUnbalancedTirePressure = reader.ReadUInt16();
  86. writer.WriteNumber($"[{value.ThresholdUnbalancedTirePressure.ReadNumber()}]胎压不平衡门限", value.ThresholdUnbalancedTirePressure);
  87. value.SlowLeakageThreshold = reader.ReadUInt16();
  88. writer.WriteNumber($"[{value.SlowLeakageThreshold.ReadNumber()}]慢漏气门限", value.SlowLeakageThreshold);
  89. value.LowVoltageThreshold = reader.ReadUInt16();
  90. writer.WriteNumber($"[{value.LowVoltageThreshold.ReadNumber()}]低压阈值", value.LowVoltageThreshold);
  91. value.HighVoltageThreshold = reader.ReadUInt16();
  92. writer.WriteNumber($"[{value.HighVoltageThreshold.ReadNumber()}]高压阈值", value.HighVoltageThreshold);
  93. value.HighTemperatureThreshold = reader.ReadUInt16();
  94. writer.WriteNumber($"[{value.HighTemperatureThreshold.ReadNumber()}]高温阈值", value.HighTemperatureThreshold);
  95. value.VoltageThreshold = reader.ReadUInt16();
  96. writer.WriteNumber($"[{value.VoltageThreshold.ReadNumber()}]电压阈值", value.VoltageThreshold);
  97. value.TimedReportingInterval = reader.ReadUInt16();
  98. writer.WriteNumber($"[{value.TimedReportingInterval.ReadNumber()}]定时上报时间间隔", value.TimedReportingInterval);
  99. value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray();
  100. writer.WriteString("保留项", value.Retain.ToHexString());
  101. }
  102. /// <summary>
  103. ///
  104. /// </summary>
  105. /// <param name="reader"></param>
  106. /// <param name="config"></param>
  107. /// <returns></returns>
  108. public JT808_0x8103_0xF366 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  109. {
  110. JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366();
  111. value.ParamId = reader.ReadUInt32();
  112. value.ParamLength = reader.ReadByte();
  113. value.TyreSpecificationType = reader.ReadString(12);
  114. value.TyrePressureUnit = reader.ReadUInt16();
  115. value.NormalFetalPressure = reader.ReadUInt16();
  116. value.ThresholdUnbalancedTirePressure = reader.ReadUInt16();
  117. value.SlowLeakageThreshold = reader.ReadUInt16();
  118. value.LowVoltageThreshold = reader.ReadUInt16();
  119. value.HighVoltageThreshold = reader.ReadUInt16();
  120. value.HighTemperatureThreshold = reader.ReadUInt16();
  121. value.VoltageThreshold = reader.ReadUInt16();
  122. value.TimedReportingInterval = reader.ReadUInt16();
  123. value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray();
  124. return value;
  125. }
  126. /// <summary>
  127. ///
  128. /// </summary>
  129. /// <param name="writer"></param>
  130. /// <param name="value"></param>
  131. /// <param name="config"></param>
  132. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF366 value, IJT808Config config)
  133. {
  134. writer.WriteUInt32(value.ParamId);
  135. writer.Skip(1, out int ParamLengthPosition);
  136. writer.WriteString(value.TyreSpecificationType);
  137. writer.WriteUInt16(value.TyrePressureUnit);
  138. writer.WriteUInt16(value.NormalFetalPressure);
  139. writer.WriteUInt16(value.ThresholdUnbalancedTirePressure);
  140. writer.WriteUInt16(value.SlowLeakageThreshold);
  141. writer.WriteUInt16(value.LowVoltageThreshold);
  142. writer.WriteUInt16(value.HighVoltageThreshold);
  143. writer.WriteUInt16(value.HighTemperatureThreshold);
  144. writer.WriteUInt16(value.VoltageThreshold);
  145. writer.WriteUInt16(value.TimedReportingInterval);
  146. writer.WriteArray(value.Retain);
  147. writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition);
  148. }
  149. }
  150. }