using JT808.Protocol.Enums; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System; namespace JT808.Protocol.MessageBody { /// /// 驾驶员身份信息采集上报 /// public class JT808_0x0702 : JT808Bodies, IJT808MessagePackFormatter, IJT808_2019_Version { public override ushort MsgId { get; } = 0x0702; public override string Description => "驾驶员身份信息采集上报"; /// /// 状态 /// 0x01:从业资格证 IC 卡插入(驾驶员上班); /// 0x02:从业资格证 IC 卡拔出(驾驶员下班)。 /// public JT808ICCardStatus IC_Card_Status { get; set; } /// /// 插卡/拔卡时间,YY-MM-DD-hh-mm-ss; /// 以下字段在状态为 0x01 时才有效并做填充。 /// BCD[6] /// public DateTime IC_Card_PlugDateTime { get; set; } /// /// IC 卡读取结果 /// 0x00:IC 卡读卡成功; /// 0x01:读卡失败,原因为卡片密钥认证未通过; /// 0x02:读卡失败,原因为卡片已被锁定; /// 0x03:读卡失败,原因为卡片被拔出; /// 0x04:读卡失败,原因为数据校验错误。 /// 以下字段在 IC 卡读取结果等于 0x00 时才有效。 /// public JT808ICCardReadResult IC_Card_ReadResult { get; set; } /// /// 驾驶员姓名长度 /// public byte DriverUserNameLength { get; set; } /// /// 驾驶员姓名 /// public string DriverUserName { get; set; } /// /// 从业资格证编码 /// 长度 20 位,不足补 0x00。 /// public string QualificationCode { get; set; } /// /// 发证机构名称长度 /// public byte LicenseIssuingLength { get; set; } /// /// 发证机构名称长度 /// public string LicenseIssuing { get; set; } /// /// 证件有效期 BCD[4] /// public DateTime CertificateExpiresDate { get; set; } /// /// 驾驶员身份证号 长度20 不足补0 /// 2019版本 /// public string DriverIdentityCard { get; set; } public JT808_0x0702 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x0702 jT808_0X0702 = new JT808_0x0702(); jT808_0X0702.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte(); jT808_0X0702.IC_Card_PlugDateTime = reader.ReadDateTime6(); if (jT808_0X0702.IC_Card_Status == JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班) { jT808_0X0702.IC_Card_ReadResult = (JT808ICCardReadResult)reader.ReadByte(); if (jT808_0X0702.IC_Card_ReadResult == JT808ICCardReadResult.IC卡读卡成功) { jT808_0X0702.DriverUserNameLength = reader.ReadByte(); jT808_0X0702.DriverUserName = reader.ReadString(jT808_0X0702.DriverUserNameLength); jT808_0X0702.QualificationCode = reader.ReadString(20); jT808_0X0702.LicenseIssuingLength = reader.ReadByte(); jT808_0X0702.LicenseIssuing = reader.ReadString(jT808_0X0702.LicenseIssuingLength); jT808_0X0702.CertificateExpiresDate = reader.ReadDateTime4(); if(reader.Version== JT808Version.JTT2019) { jT808_0X0702.DriverIdentityCard = reader.ReadString(20); } } } return jT808_0X0702; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0702 value, IJT808Config config) { writer.WriteByte((byte)value.IC_Card_Status); writer.WriteDateTime6(value.IC_Card_PlugDateTime); if (value.IC_Card_Status == JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班) { writer.WriteByte((byte)value.IC_Card_ReadResult); if (value.IC_Card_ReadResult == JT808ICCardReadResult.IC卡读卡成功) { writer.WriteByte((byte)value.DriverUserName.Length); writer.WriteString(value.DriverUserName); writer.WriteString(value.QualificationCode.PadRight(20, '0')); writer.WriteByte((byte)value.LicenseIssuing.Length); writer.WriteString(value.LicenseIssuing); writer.WriteDateTime4(value.CertificateExpiresDate); if (writer.Version == JT808Version.JTT2019) { writer.WriteString(value.DriverIdentityCard.PadRight(20,'0')); } } } } } }