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.

108 lines
4.3 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Extensions;
  3. using JT808.Protocol.Formatters;
  4. using JT808.Protocol.Interfaces;
  5. using JT808.Protocol.MessagePack;
  6. using System;
  7. using System.Buffers.Binary;
  8. using System.Collections.Generic;
  9. using System.Text;
  10. using System.Text.Json;
  11. namespace JT808.Protocol.MessageBody.CarDVR
  12. {
  13. /// <summary>
  14. /// 进入里程误差测量
  15. /// 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平)
  16. /// </summary>
  17. public class JT808_CarDVR_Down_0xE1 : JT808MessagePackFormatter<JT808_CarDVR_Down_0xE1>, JT808CarDVRDownBodies, IJT808Analyze
  18. {
  19. /// <summary>
  20. /// 0xE1
  21. /// </summary>
  22. public byte CommandId => JT808CarDVRCommandID.enter_mileage_error_measurement.ToByteValue();
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. public bool SkipSerialization => false;
  27. /// <summary>
  28. /// 记录仪唯一性编号
  29. /// </summary>
  30. public string UniqueNumber { get; set; }
  31. /// <summary>
  32. /// 脉冲系数
  33. /// </summary>
  34. public ushort PulseCoefficient { get; set; }
  35. /// <summary>
  36. /// 当前速度
  37. /// </summary>
  38. public ushort Speed { get; set; }
  39. /// <summary>
  40. /// 累计里程 单位为米
  41. /// 单位为 0.1 千米每小时
  42. /// </summary>
  43. public uint TotalMileage { get; set; }
  44. /// <summary>
  45. /// 状态信号
  46. /// </summary>
  47. public byte StatusSignal { get; set; }
  48. /// <summary>
  49. /// 通过DB9的7脚接收标准速度脉冲测量信号(TTL 电平)
  50. /// </summary>
  51. public string Description => "通过DB9的7脚接收标准速度脉冲测量信号(TTL 电平)";
  52. /// <summary>
  53. ///
  54. /// </summary>
  55. /// <param name="reader"></param>
  56. /// <param name="writer"></param>
  57. /// <param name="config"></param>
  58. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  59. {
  60. JT808_CarDVR_Down_0xE1 value = new JT808_CarDVR_Down_0xE1();
  61. var hex = reader.ReadVirtualArray(35);
  62. value.UniqueNumber = reader.ReadASCII(35);
  63. writer.WriteString($"[{hex.ToArray().ToHexString()}]记录仪唯一性编号", value.UniqueNumber);
  64. value.PulseCoefficient = reader.ReadUInt16();
  65. writer.WriteNumber($"[{value.PulseCoefficient.ReadNumber()}]脉冲系数", value.PulseCoefficient);
  66. value.Speed = reader.ReadUInt16();
  67. writer.WriteNumber($"[{value.Speed.ReadNumber()}]当前速度", value.Speed);
  68. value.TotalMileage = reader.ReadUInt32();
  69. writer.WriteNumber($"[{value.TotalMileage.ReadNumber()}]累计里程", value.TotalMileage);
  70. value.StatusSignal = reader.ReadByte();
  71. writer.WriteNumber($"[{value.StatusSignal.ReadNumber()}]状态信号", value.StatusSignal);
  72. }
  73. /// <summary>
  74. ///
  75. /// </summary>
  76. /// <param name="writer"></param>
  77. /// <param name="value"></param>
  78. /// <param name="config"></param>
  79. public override void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xE1 value, IJT808Config config)
  80. {
  81. var currentPosition = writer.GetCurrentPosition();
  82. writer.WriteASCII(value.UniqueNumber);
  83. writer.Skip(35 - (writer.GetCurrentPosition() - currentPosition), out var _);
  84. writer.WriteUInt16(value.PulseCoefficient);
  85. writer.WriteUInt16(value.Speed);
  86. writer.WriteUInt32(value.TotalMileage);
  87. writer.WriteByte(value.StatusSignal);
  88. }
  89. /// <summary>
  90. ///
  91. /// </summary>
  92. /// <param name="reader"></param>
  93. /// <param name="config"></param>
  94. /// <returns></returns>
  95. public override JT808_CarDVR_Down_0xE1 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  96. {
  97. JT808_CarDVR_Down_0xE1 value = new JT808_CarDVR_Down_0xE1();
  98. value.UniqueNumber = reader.ReadASCII(35);
  99. value.PulseCoefficient = reader.ReadUInt16();
  100. value.Speed = reader.ReadUInt16();
  101. value.TotalMileage = reader.ReadUInt32();
  102. value.StatusSignal = reader.ReadByte();
  103. return value;
  104. }
  105. }
  106. }