using JT808.Protocol.Enums; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; namespace JT808.Protocol.MessageBody { /// <summary> /// 下发终端升级包 /// </summary> public class JT808_0x8108 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x8108>, IJT808_2019_Version { public override ushort MsgId { get; } = 0x8108; public override string Description => "下发终端升级包"; /// <summary> /// 升级类型 /// </summary> public JT808UpgradeType UpgradeType { get; set; } /// <summary> /// 制造商 ID /// 2013版本 5 个字节,终端制造商编码 /// 2019版本 11 个字节,终端制造商编码 /// </summary> public string MakerId { get; set; } /// <summary> /// 版本号长度 /// </summary> public byte VersionNumLength { get; set; } /// <summary> /// 版本号 /// </summary> public string VersionNum { get; set; } /// <summary> /// 升级数据包长度 /// </summary> public int UpgradePackageLength { get; set; } /// <summary> /// 升级数据包 /// </summary> public byte[] UpgradePackage { get; set; } public JT808_0x8108 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8108 jT808_0X8108 = new JT808_0x8108(); jT808_0X8108.UpgradeType = (JT808UpgradeType)reader.ReadByte(); if (reader.Version == JT808Version.JTT2019) { jT808_0X8108.MakerId = reader.ReadString(11); } else { jT808_0X8108.MakerId = reader.ReadString(5); } jT808_0X8108.VersionNumLength = reader.ReadByte(); jT808_0X8108.VersionNum = reader.ReadString(jT808_0X8108.VersionNumLength); jT808_0X8108.UpgradePackageLength = reader.ReadInt32(); jT808_0X8108.UpgradePackage = reader.ReadArray(jT808_0X8108.UpgradePackageLength).ToArray(); return jT808_0X8108; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8108 value, IJT808Config config) { writer.WriteByte((byte)value.UpgradeType); if (writer.Version == JT808Version.JTT2019) { writer.WriteString(value.MakerId.PadLeft(11, '0')); } else { writer.WriteString(value.MakerId.PadRight(5, '0')); } writer.WriteByte((byte)value.VersionNum.Length); writer.WriteString(value.VersionNum); writer.WriteInt32(value.UpgradePackage.Length); writer.WriteArray(value.UpgradePackage); } } }