using JT808.Protocol.Enums;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
namespace JT808.Protocol.MessageBody
{
///
/// 查询终端属性应答
///
public class JT808_0x0107 : JT808Bodies,IJT808MessagePackFormatter, IJT808_2019_Version
{
public override ushort MsgId { get; } = 0x0107;
public override string Description => "查询终端属性应答";
///
/// 终端类型
/// bit0,0:不适用客运车辆,1:适用客运车辆;
/// bit1,0:不适用危险品车辆,1:适用危险品车辆;
/// bit2,0:不适用普通货运车辆,1:适用普通货运车辆;
/// bit3,0:不适用出租车辆,1:适用出租车辆;
/// bit6,0:不支持硬盘录像,1:支持硬盘录像;
/// bit7,0:一体机,1:分体机
///
public ushort TerminalType { get; set; }
///
/// 制造商 ID
/// 2013版本 5 个字节,终端制造商编码
/// 2019版本 11 个字节,终端制造商编码
///
public string MakerId { get; set; }
///
/// 终端型号
/// BYTE[20] 20 个字节,此终端型号由制造商自行定义,位数不足时,后补“0X00”。
/// 2019版本
/// BYTE[30] 30 个字节,此终端型号由制造商自行定义,位数不足时,后补“0X00”。
///
public string TerminalModel { get; set; }
///
/// 终端ID
/// BYTE[7] 7 个字节,由大写字母和数字组成,此终端 ID 由制造商自行定义,位数不足时,后补“0X00”
/// 2019版本
/// BYTE[30] 30 个字节,由大写字母和数字组成,此终端 ID 由制造商自行定义,位数不足时,后补“0X00”
///
public string TerminalId { get; set; }
///
/// 终端 SIM 卡 ICCID
/// BCD[10]
///
public string Terminal_SIM_ICCID { get; set; }
///
/// 终端硬件版本号长度
///
public byte Terminal_Hardware_Version_Length { get; set; }
///
/// 终端硬件版本号
///
public string Terminal_Hardware_Version_Num { get; set; }
///
/// 终端固件版本号长度
///
public byte Terminal_Firmware_Version_Length { get; set; }
///
/// 终端固件版本号
///
public string Terminal_Firmware_Version_Num { get; set; }
///
/// GNSS 模块属性
/// bit0,0:不支持 GPS 定位, 1:支持 GPS 定位;
/// bit1,0:不支持北斗定位, 1:支持北斗定位;
/// bit2,0:不支持 GLONASS 定位, 1:支持 GLONASS 定位;
/// bit3,0:不支持 Galileo 定位, 1:支持 Galileo 定位
///
public byte GNSSModule { get; set; }
///
/// 通信模块属性
/// bit0,0:不支持GPRS通信, 1:支持GPRS通信;
/// bit1,0:不支持CDMA通信, 1:支持CDMA通信;
/// bit2,0:不支持TD-SCDMA通信, 1:支持TD-SCDMA通信;
/// bit3,0:不支持WCDMA通信, 1:支持WCDMA通信;
/// bit4,0:不支持CDMA2000通信, 1:支持CDMA2000通信。
/// bit5,0:不支持TD-LTE通信, 1:支持TD-LTE通信;
/// bit7,0:不支持其他通信方式, 1:支持其他通信方式
///
public byte CommunicationModule { get; set; }
public JT808_0x0107 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x0107 jT808_0X0107 = new JT808_0x0107();
jT808_0X0107.TerminalType = reader.ReadUInt16();
if(reader.Version== JT808Version.JTT2019)
{
jT808_0X0107.MakerId = reader.ReadString(11);
jT808_0X0107.TerminalModel = reader.ReadString(30);
jT808_0X0107.TerminalId = reader.ReadString(30);
}
else
{
jT808_0X0107.MakerId = reader.ReadString(5);
jT808_0X0107.TerminalModel = reader.ReadString(20);
jT808_0X0107.TerminalId = reader.ReadString(7);
}
jT808_0X0107.Terminal_SIM_ICCID = reader.ReadBCD(20, config.Trim);
jT808_0X0107.Terminal_Hardware_Version_Length = reader.ReadByte();
jT808_0X0107.Terminal_Hardware_Version_Num = reader.ReadString(jT808_0X0107.Terminal_Hardware_Version_Length);
jT808_0X0107.Terminal_Firmware_Version_Length = reader.ReadByte();
jT808_0X0107.Terminal_Firmware_Version_Num = reader.ReadString(jT808_0X0107.Terminal_Firmware_Version_Length);
jT808_0X0107.GNSSModule = reader.ReadByte();
jT808_0X0107.CommunicationModule = reader.ReadByte();
return jT808_0X0107;
}
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0107 value, IJT808Config config)
{
writer.WriteUInt16(value.TerminalType);
if (writer.Version == JT808Version.JTT2019)
{
writer.WriteString(value.MakerId.PadLeft(11, '0'));
writer.WriteString(value.TerminalModel.PadLeft(30, '0'));
writer.WriteString(value.TerminalId.PadLeft(30, '0'));
}
else
{
writer.WriteString(value.MakerId.PadRight(5, '0'));
writer.WriteString(value.TerminalModel.PadRight(20, '0'));
writer.WriteString(value.TerminalId.PadRight(7, '0'));
}
writer.WriteBCD(value.Terminal_SIM_ICCID, 20);
writer.WriteByte((byte)value.Terminal_Hardware_Version_Num.Length);
writer.WriteString(value.Terminal_Hardware_Version_Num);
writer.WriteByte((byte)value.Terminal_Firmware_Version_Num.Length);
writer.WriteString(value.Terminal_Firmware_Version_Num);
writer.WriteByte(value.GNSSModule);
writer.WriteByte(value.CommunicationModule);
}
}
}