25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
6.3 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_0x0107 : JT808Bodies,IJT808MessagePackFormatter<JT808_0x0107>, IJT808_2019_Version
  11. {
  12. public override ushort MsgId { get; } = 0x0107;
  13. public override string Description => "查询终端属性应答";
  14. /// <summary>
  15. /// 终端类型
  16. /// bit0,0:不适用客运车辆,1:适用客运车辆;
  17. /// bit1,0:不适用危险品车辆,1:适用危险品车辆;
  18. /// bit2,0:不适用普通货运车辆,1:适用普通货运车辆;
  19. /// bit3,0:不适用出租车辆,1:适用出租车辆;
  20. /// bit6,0:不支持硬盘录像,1:支持硬盘录像;
  21. /// bit7,0:一体机,1:分体机
  22. /// </summary>
  23. public ushort TerminalType { get; set; }
  24. /// <summary>
  25. /// 制造商 ID
  26. /// 2013版本 5 个字节,终端制造商编码
  27. /// 2019版本 11 个字节,终端制造商编码
  28. /// </summary>
  29. public string MakerId { get; set; }
  30. /// <summary>
  31. /// 终端型号
  32. /// BYTE[20] 20 个字节,此终端型号由制造商自行定义,位数不足时,后补“0X00”。
  33. /// 2019版本
  34. /// BYTE[30] 30 个字节,此终端型号由制造商自行定义,位数不足时,后补“0X00”。
  35. /// </summary>
  36. public string TerminalModel { get; set; }
  37. /// <summary>
  38. /// 终端ID
  39. /// BYTE[7] 7 个字节,由大写字母和数字组成,此终端 ID 由制造商自行定义,位数不足时,后补“0X00”
  40. /// 2019版本
  41. /// BYTE[30] 30 个字节,由大写字母和数字组成,此终端 ID 由制造商自行定义,位数不足时,后补“0X00”
  42. /// </summary>
  43. public string TerminalId { get; set; }
  44. /// <summary>
  45. /// 终端 SIM 卡 ICCID
  46. /// BCD[10]
  47. /// </summary>
  48. public string Terminal_SIM_ICCID { get; set; }
  49. /// <summary>
  50. /// 终端硬件版本号长度
  51. /// </summary>
  52. public byte Terminal_Hardware_Version_Length { get; set; }
  53. /// <summary>
  54. /// 终端硬件版本号
  55. /// </summary>
  56. public string Terminal_Hardware_Version_Num { get; set; }
  57. /// <summary>
  58. /// 终端固件版本号长度
  59. /// </summary>
  60. public byte Terminal_Firmware_Version_Length { get; set; }
  61. /// <summary>
  62. /// 终端固件版本号
  63. /// </summary>
  64. public string Terminal_Firmware_Version_Num { get; set; }
  65. /// <summary>
  66. /// GNSS 模块属性
  67. /// bit0,0:不支持 GPS 定位, 1:支持 GPS 定位;
  68. /// bit1,0:不支持北斗定位, 1:支持北斗定位;
  69. /// bit2,0:不支持 GLONASS 定位, 1:支持 GLONASS 定位;
  70. /// bit3,0:不支持 Galileo 定位, 1:支持 Galileo 定位
  71. /// </summary>
  72. public byte GNSSModule { get; set; }
  73. /// <summary>
  74. /// 通信模块属性
  75. /// bit0,0:不支持GPRS通信, 1:支持GPRS通信;
  76. /// bit1,0:不支持CDMA通信, 1:支持CDMA通信;
  77. /// bit2,0:不支持TD-SCDMA通信, 1:支持TD-SCDMA通信;
  78. /// bit3,0:不支持WCDMA通信, 1:支持WCDMA通信;
  79. /// bit4,0:不支持CDMA2000通信, 1:支持CDMA2000通信。
  80. /// bit5,0:不支持TD-LTE通信, 1:支持TD-LTE通信;
  81. /// bit7,0:不支持其他通信方式, 1:支持其他通信方式
  82. /// </summary>
  83. public byte CommunicationModule { get; set; }
  84. public JT808_0x0107 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  85. {
  86. JT808_0x0107 jT808_0X0107 = new JT808_0x0107();
  87. jT808_0X0107.TerminalType = reader.ReadUInt16();
  88. if(reader.Version== JT808Version.JTT2019)
  89. {
  90. jT808_0X0107.MakerId = reader.ReadString(11);
  91. jT808_0X0107.TerminalModel = reader.ReadString(30);
  92. jT808_0X0107.TerminalId = reader.ReadString(30);
  93. }
  94. else
  95. {
  96. jT808_0X0107.MakerId = reader.ReadString(5);
  97. jT808_0X0107.TerminalModel = reader.ReadString(20);
  98. jT808_0X0107.TerminalId = reader.ReadString(7);
  99. }
  100. jT808_0X0107.Terminal_SIM_ICCID = reader.ReadBCD(20, config.Trim);
  101. jT808_0X0107.Terminal_Hardware_Version_Length = reader.ReadByte();
  102. jT808_0X0107.Terminal_Hardware_Version_Num = reader.ReadString(jT808_0X0107.Terminal_Hardware_Version_Length);
  103. jT808_0X0107.Terminal_Firmware_Version_Length = reader.ReadByte();
  104. jT808_0X0107.Terminal_Firmware_Version_Num = reader.ReadString(jT808_0X0107.Terminal_Firmware_Version_Length);
  105. jT808_0X0107.GNSSModule = reader.ReadByte();
  106. jT808_0X0107.CommunicationModule = reader.ReadByte();
  107. return jT808_0X0107;
  108. }
  109. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0107 value, IJT808Config config)
  110. {
  111. writer.WriteUInt16(value.TerminalType);
  112. if (writer.Version == JT808Version.JTT2019)
  113. {
  114. writer.WriteString(value.MakerId.PadLeft(11, '0'));
  115. writer.WriteString(value.TerminalModel.PadLeft(30, '0'));
  116. writer.WriteString(value.TerminalId.PadLeft(30, '0'));
  117. }
  118. else
  119. {
  120. writer.WriteString(value.MakerId.PadRight(5, '0'));
  121. writer.WriteString(value.TerminalModel.PadRight(20, '0'));
  122. writer.WriteString(value.TerminalId.PadRight(7, '0'));
  123. }
  124. writer.WriteBCD(value.Terminal_SIM_ICCID, 20);
  125. writer.WriteByte((byte)value.Terminal_Hardware_Version_Num.Length);
  126. writer.WriteString(value.Terminal_Hardware_Version_Num);
  127. writer.WriteByte((byte)value.Terminal_Firmware_Version_Num.Length);
  128. writer.WriteString(value.Terminal_Firmware_Version_Num);
  129. writer.WriteByte(value.GNSSModule);
  130. writer.WriteByte(value.CommunicationModule);
  131. }
  132. }
  133. }