using JT809.Protocol.Enums; using JT809.Protocol.Formatters; using JT809.Protocol.MessagePack; using JT809.Protocol.Extensions; using System; using JT809.Protocol.Interfaces; using System.Text.Json; namespace JT809.Protocol.SubMessageBody { /// /// 上报车辆行驶记录请求消息 /// 子业务类型标识:DOVJN_CTRL_MSG_TAKE_TRAVEL_REQ /// 描述:上级平台向下级平台下发上报车辆行驶记录请求消息 /// public class JT809_0x9500_0x9504:JT809SubBodies, IJT809MessagePackFormatter, IJT809Analyze, IJT809_2019_Version { public override ushort SubMsgId => JT809SubBusinessType.上报车辆行驶记录请求消息.ToUInt16Value(); public override string Description => "上报车辆行驶记录请求消息"; /// /// 开始时间 /// public DateTime StartTime { get; set; } /// /// 开始时间 /// public DateTime EndTime { get; set; } /// /// 命令字ID /// public JT809CommandType Command { get; set; } /// /// 最大数据数 /// public ushort Max { get; set; } public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) { var value = new JT809_0x9500_0x9504(); if (config.Version == JT809Version.JTT2019) { var hex = reader.ReadVirtualArray(8); value.StartTime = reader.ReadUTCDateTime(); writer.WriteString($"[{hex.ToArray().ToHexString()}]开始时间", value.StartTime); hex = reader.ReadVirtualArray(8); value.EndTime = reader.ReadUTCDateTime(); writer.WriteString($"[{hex.ToArray().ToHexString()}]结束时间", value.EndTime); value.Command = (JT809CommandType)reader.ReadByte(); writer.WriteString($"[{value.Command.ToByteValue()}]命令字ID", value.Command.ToString()); } else { value.Command = (JT809CommandType)reader.ReadByte(); writer.WriteString($"[{value.Command.ToByteValue()}]命令字ID", value.Command.ToString()); switch (value.Command) { case JT809CommandType.记录仪标准版本: case JT809CommandType.当前驾驶人信息: case JT809CommandType.记录仪时间: case JT809CommandType.记录仪累计行驶里程: case JT809CommandType.记录仪脉冲系数: case JT809CommandType.车辆信息: case JT809CommandType.记录仪状态信号配置信息: case JT809CommandType.记录仪唯一性编号: break; case JT809CommandType.采集记录仪行驶记录: case JT809CommandType.采集记录仪位置信息记录: case JT809CommandType.采集记录仪事故疑点记录: case JT809CommandType.采集记录仪超时驾驶记录: case JT809CommandType.采集记录仪驾驶人身份记录: case JT809CommandType.采集记录仪外部供电记录: case JT809CommandType.采集记录仪参数修改记录: case JT809CommandType.采集记录仪速度状态日志: var hex = reader.ReadVirtualArray(6); value.StartTime = reader.ReadDateTime6(); writer.WriteString($"[{hex.ToArray().ToHexString()}]开始时间", value.StartTime); hex = reader.ReadVirtualArray(6); value.EndTime = reader.ReadDateTime6(); writer.WriteString($"[{hex.ToArray().ToHexString()}]结束时间", value.EndTime); value.Max = reader.ReadUInt16(); writer.WriteNumber($"[{value.Max.ReadNumber()}]最大数据数", value.Max); break; } } } public JT809_0x9500_0x9504 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) { var value = new JT809_0x9500_0x9504(); if(config.Version == JT809Version.JTT2019) { value.StartTime = reader.ReadUTCDateTime(); value.EndTime = reader.ReadUTCDateTime(); value.Command = (JT809CommandType)reader.ReadByte(); } else { value.Command = (JT809CommandType)reader.ReadByte(); switch (value.Command) { case JT809CommandType.记录仪标准版本: case JT809CommandType.当前驾驶人信息: case JT809CommandType.记录仪时间: case JT809CommandType.记录仪累计行驶里程: case JT809CommandType.记录仪脉冲系数: case JT809CommandType.车辆信息: case JT809CommandType.记录仪状态信号配置信息: case JT809CommandType.记录仪唯一性编号: break; case JT809CommandType.采集记录仪行驶记录: case JT809CommandType.采集记录仪位置信息记录: case JT809CommandType.采集记录仪事故疑点记录: case JT809CommandType.采集记录仪超时驾驶记录: case JT809CommandType.采集记录仪驾驶人身份记录: case JT809CommandType.采集记录仪外部供电记录: case JT809CommandType.采集记录仪参数修改记录: case JT809CommandType.采集记录仪速度状态日志: value.StartTime = reader.ReadDateTime6(); value.EndTime = reader.ReadDateTime6(); value.Max = reader.ReadUInt16(); break; } } return value; } public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9500_0x9504 value, IJT809Config config) { if (config.Version == JT809Version.JTT2019) { writer.WriteUTCDateTime(value.StartTime); writer.WriteUTCDateTime(value.EndTime); writer.WriteByte((byte)value.Command); } else { writer.WriteByte((byte)value.Command); switch (value.Command) { case JT809CommandType.记录仪标准版本: case JT809CommandType.当前驾驶人信息: case JT809CommandType.记录仪时间: case JT809CommandType.记录仪累计行驶里程: case JT809CommandType.记录仪脉冲系数: case JT809CommandType.车辆信息: case JT809CommandType.记录仪状态信号配置信息: case JT809CommandType.记录仪唯一性编号: break; case JT809CommandType.采集记录仪行驶记录: case JT809CommandType.采集记录仪位置信息记录: case JT809CommandType.采集记录仪事故疑点记录: case JT809CommandType.采集记录仪超时驾驶记录: case JT809CommandType.采集记录仪驾驶人身份记录: case JT809CommandType.采集记录仪外部供电记录: case JT809CommandType.采集记录仪参数修改记录: case JT809CommandType.采集记录仪速度状态日志: writer.WriteDateTime6(value.StartTime); writer.WriteDateTime6(value.EndTime); writer.WriteUInt16(value.Max); break; } } } } }