您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

80 行
2.8 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.Interfaces;
  4. using JT808.Protocol.MessagePack;
  5. namespace JT808.Protocol.MessageBody
  6. {
  7. /// <summary>
  8. /// 下发终端升级包
  9. /// </summary>
  10. public class JT808_0x8108 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x8108>, IJT808_2019_Version
  11. {
  12. public override ushort MsgId { get; } = 0x8108;
  13. public override string Description => "下发终端升级包";
  14. /// <summary>
  15. /// 升级类型
  16. /// </summary>
  17. public JT808UpgradeType UpgradeType { get; set; }
  18. /// <summary>
  19. /// 制造商 ID
  20. /// 2013版本 5 个字节,终端制造商编码
  21. /// 2019版本 11 个字节,终端制造商编码
  22. /// </summary>
  23. public string MakerId { get; set; }
  24. /// <summary>
  25. /// 版本号长度
  26. /// </summary>
  27. public byte VersionNumLength { get; set; }
  28. /// <summary>
  29. /// 版本号
  30. /// </summary>
  31. public string VersionNum { get; set; }
  32. /// <summary>
  33. /// 升级数据包长度
  34. /// </summary>
  35. public int UpgradePackageLength { get; set; }
  36. /// <summary>
  37. /// 升级数据包
  38. /// </summary>
  39. public byte[] UpgradePackage { get; set; }
  40. public JT808_0x8108 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  41. {
  42. JT808_0x8108 jT808_0X8108 = new JT808_0x8108();
  43. jT808_0X8108.UpgradeType = (JT808UpgradeType)reader.ReadByte();
  44. if (reader.Version == JT808Version.JTT2019)
  45. {
  46. jT808_0X8108.MakerId = reader.ReadString(11);
  47. }
  48. else
  49. {
  50. jT808_0X8108.MakerId = reader.ReadString(5);
  51. }
  52. jT808_0X8108.VersionNumLength = reader.ReadByte();
  53. jT808_0X8108.VersionNum = reader.ReadString(jT808_0X8108.VersionNumLength);
  54. jT808_0X8108.UpgradePackageLength = reader.ReadInt32();
  55. jT808_0X8108.UpgradePackage = reader.ReadArray(jT808_0X8108.UpgradePackageLength).ToArray();
  56. return jT808_0X8108;
  57. }
  58. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8108 value, IJT808Config config)
  59. {
  60. writer.WriteByte((byte)value.UpgradeType);
  61. if (writer.Version == JT808Version.JTT2019)
  62. {
  63. writer.WriteString(value.MakerId.PadLeft(11, '0'));
  64. }
  65. else
  66. {
  67. writer.WriteString(value.MakerId.PadRight(5, '0'));
  68. }
  69. writer.WriteByte((byte)value.VersionNum.Length);
  70. writer.WriteString(value.VersionNum);
  71. writer.WriteInt32(value.UpgradePackage.Length);
  72. writer.WriteArray(value.UpgradePackage);
  73. }
  74. }
  75. }