using JT808.Protocol.Enums; using JT808.Protocol.Extensions; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System; using System.Buffers.Binary; using System.Collections.Generic; using System.Text; using System.Text.Json; namespace JT808.Protocol.MessageBody.CarDVR { /// /// 进入里程误差测量 /// 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平) /// public class JT808_CarDVR_Down_0xE1 : JT808MessagePackFormatter, JT808CarDVRDownBodies, IJT808Analyze { /// /// 0xE1 /// public byte CommandId => JT808CarDVRCommandID.enter_mileage_error_measurement.ToByteValue(); /// /// /// public bool SkipSerialization => false; /// /// 记录仪唯一性编号 /// public string UniqueNumber { get; set; } /// /// 脉冲系数 /// public ushort PulseCoefficient { get; set; } /// /// 当前速度 /// public ushort Speed { get; set; } /// /// 累计里程 单位为米 /// 单位为 0.1 千米每小时 /// public uint TotalMileage { get; set; } /// /// 状态信号 /// public byte StatusSignal { get; set; } /// /// 通过DB9的7脚接收标准速度脉冲测量信号(TTL 电平) /// public string Description => "通过DB9的7脚接收标准速度脉冲测量信号(TTL 电平)"; /// /// /// /// /// /// public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_CarDVR_Down_0xE1 value = new JT808_CarDVR_Down_0xE1(); var hex = reader.ReadVirtualArray(35); value.UniqueNumber = reader.ReadASCII(35); writer.WriteString($"[{hex.ToArray().ToHexString()}]记录仪唯一性编号", value.UniqueNumber); value.PulseCoefficient = reader.ReadUInt16(); writer.WriteNumber($"[{value.PulseCoefficient.ReadNumber()}]脉冲系数", value.PulseCoefficient); value.Speed = reader.ReadUInt16(); writer.WriteNumber($"[{value.Speed.ReadNumber()}]当前速度", value.Speed); value.TotalMileage = reader.ReadUInt32(); writer.WriteNumber($"[{value.TotalMileage.ReadNumber()}]累计里程", value.TotalMileage); value.StatusSignal = reader.ReadByte(); writer.WriteNumber($"[{value.StatusSignal.ReadNumber()}]状态信号", value.StatusSignal); } /// /// /// /// /// /// public override void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xE1 value, IJT808Config config) { var currentPosition = writer.GetCurrentPosition(); writer.WriteASCII(value.UniqueNumber); writer.Skip(35 - (writer.GetCurrentPosition() - currentPosition), out var _); writer.WriteUInt16(value.PulseCoefficient); writer.WriteUInt16(value.Speed); writer.WriteUInt32(value.TotalMileage); writer.WriteByte(value.StatusSignal); } /// /// /// /// /// /// public override JT808_CarDVR_Down_0xE1 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Down_0xE1 value = new JT808_CarDVR_Down_0xE1(); value.UniqueNumber = reader.ReadASCII(35); value.PulseCoefficient = reader.ReadUInt16(); value.Speed = reader.ReadUInt16(); value.TotalMileage = reader.ReadUInt32(); value.StatusSignal = reader.ReadByte(); return value; } } }