diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808_0x0200_0x51_Test.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808_0x0200_0x51_Test.cs index e3bd4a3..e08a175 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808_0x0200_0x51_Test.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808_0x0200_0x51_Test.cs @@ -40,7 +40,7 @@ namespace JT808.Protocol.Extensions.GPS51.Test AttachInfoId = 0x2b, AttachInfoLength = 4, Temperatures = new List { - 12,-34 + 12,34 } }); var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0702Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0702Test.cs index 8ba7f37..7c8df3e 100644 --- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0702Test.cs +++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0702Test.cs @@ -174,21 +174,21 @@ namespace JT808.Protocol.Test.MessageBody { JT808_0x0702 jT808_0X0702 = new JT808_0x0702 { - DriverUserName = "tk", + DriverUserName = "tk1", //不能小于2个字节 DriverIdentityCard="123456789123456789", QualificationCode = "qwe123456aaa", LicenseIssuing = "qwertx" }; var hex = JT808Serializer.Serialize(jT808_0X0702, JT808Version.JTT2011).ToHexString(); - Assert.Equal("02746B00003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".Replace(" ", ""), hex); + Assert.Equal("03746B3100003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".Replace(" ", ""), hex); } [Fact] public void Test2011_2() { - byte[] bytes = "02746B00003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".ToHexBytes(); + byte[] bytes = "03746B3100003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".ToHexBytes(); JT808_0x0702 jT808_0X0702 = JT808Serializer.Deserialize(bytes); - Assert.Equal("tk", jT808_0X0702.DriverUserName); + Assert.Equal("tk1", jT808_0X0702.DriverUserName); Assert.Equal("qwe123456aaa", jT808_0X0702.QualificationCode); Assert.Equal("qwertx", jT808_0X0702.LicenseIssuing); Assert.Equal("123456789123456789", jT808_0X0702.DriverIdentityCard); @@ -200,5 +200,14 @@ namespace JT808.Protocol.Test.MessageBody byte[] bytes = "02746B00003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".ToHexBytes(); string json = JT808Serializer.Analyze(bytes, JT808Version.JTT2011); } + [Fact] + public void Test2013_1() + { + byte[] bytes = "7e0702003a016067308681006d0218061b0f362e000753696d626132326777313233000000000000000000000000000000044341524407e8061be27e".ToHexBytes(); + var package = JT808Serializer.Deserialize(bytes, JT808Version.JTT2013); + + JT808_0x0702 jT808_0X0702= package.Bodies as JT808_0x0702; + + } } } diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0702.cs b/src/JT808.Protocol/MessageBody/JT808_0x0702.cs index 0187fe3..f135abf 100644 --- a/src/JT808.Protocol/MessageBody/JT808_0x0702.cs +++ b/src/JT808.Protocol/MessageBody/JT808_0x0702.cs @@ -102,13 +102,13 @@ namespace JT808.Protocol.MessageBody JT808_0x0702 value = new JT808_0x0702(); var firstByte = reader.ReadVirtualByte(); //因2011第一个字节代表姓名长度 所以该值长度只能为 2,3,4,整个数据长度 62+m+n - if (firstByte == 0x01) + if (firstByte == 0x01 || firstByte == 0x02) { value.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte(); writer.WriteNumber($"[{((byte)value.IC_Card_Status).ReadNumber()}]状态-{value.IC_Card_Status.ToString()}", (byte)value.IC_Card_Status); value.IC_Card_PlugDateTime = reader.ReadDateTime_yyMMddHHmmss(); writer.WriteString($"[{value.IC_Card_PlugDateTime.ToString("yyMMddHHmmss")}]插拔卡时间", value.IC_Card_PlugDateTime.ToString("yyyy-MM-dd HH:mm:ss")); - if (value.IC_Card_Status == JT808ICCardStatus.ic_card_into) + if (reader.ReadCurrentRemainContentLength() > 0) { value.IC_Card_ReadResult = (JT808ICCardReadResult)reader.ReadByte(); writer.WriteNumber($"[{((byte)value.IC_Card_ReadResult).ReadNumber()}]IC卡读取结果-{value.IC_Card_ReadResult.ToString()}", (byte)value.IC_Card_ReadResult); @@ -149,33 +149,22 @@ namespace JT808.Protocol.MessageBody } else { - if (firstByte == 0x02 && reader.ReadCurrentRemainContentLength() == 7) - { - //如果字节是0x02且长度只有7,那么该协议就是2013或者2019 - value.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte(); - writer.WriteNumber($"[{((byte)value.IC_Card_Status).ReadNumber()}]状态-{value.IC_Card_Status.ToString()}", (byte)value.IC_Card_Status); - value.IC_Card_PlugDateTime = reader.ReadDateTime_yyMMddHHmmss(); - writer.WriteString($"[{value.IC_Card_PlugDateTime.ToString("yyMMddHHmmss")}]插拔卡时间", value.IC_Card_PlugDateTime.ToString("yyyy-MM-dd HH:mm:ss")); - } - else - { - value.DriverUserNameLength = reader.ReadByte(); - writer.WriteNumber($"[{value.DriverUserNameLength.ReadNumber()}]驾驶员姓名长度", value.DriverUserNameLength); - var driverUserNameBuffer = reader.ReadVirtualArray(value.DriverUserNameLength); - value.DriverUserName = reader.ReadString(value.DriverUserNameLength); - writer.WriteString($"[{driverUserNameBuffer.ToArray().ToHexString()}]驾驶员姓名", value.DriverUserName); - var driverIdentityCardBuffer = reader.ReadVirtualArray(20); - value.DriverIdentityCard = reader.ReadString(20); - writer.WriteString($"[{driverIdentityCardBuffer.ToArray().ToHexString()}]驾驶员身份证号", value.DriverIdentityCard); - var qualificationCodeBuffer = reader.ReadVirtualArray(40); - value.QualificationCode = reader.ReadString(40); - writer.WriteString($"[{qualificationCodeBuffer.ToArray().ToHexString()}]从业资格证编码", value.QualificationCode); - value.LicenseIssuingLength = reader.ReadByte(); - writer.WriteNumber($"[{value.LicenseIssuingLength.ReadNumber()}]发证机构名称长度", value.LicenseIssuingLength); - var licenseIssuingBuffer = reader.ReadVirtualArray(value.LicenseIssuingLength); - value.LicenseIssuing = reader.ReadString(value.LicenseIssuingLength); - writer.WriteString($"[{licenseIssuingBuffer.ToArray().ToHexString()}]发证机构名称", value.LicenseIssuing); - } + value.DriverUserNameLength = reader.ReadByte(); + writer.WriteNumber($"[{value.DriverUserNameLength.ReadNumber()}]驾驶员姓名长度", value.DriverUserNameLength); + var driverUserNameBuffer = reader.ReadVirtualArray(value.DriverUserNameLength); + value.DriverUserName = reader.ReadString(value.DriverUserNameLength); + writer.WriteString($"[{driverUserNameBuffer.ToArray().ToHexString()}]驾驶员姓名", value.DriverUserName); + var driverIdentityCardBuffer = reader.ReadVirtualArray(20); + value.DriverIdentityCard = reader.ReadString(20); + writer.WriteString($"[{driverIdentityCardBuffer.ToArray().ToHexString()}]驾驶员身份证号", value.DriverIdentityCard); + var qualificationCodeBuffer = reader.ReadVirtualArray(40); + value.QualificationCode = reader.ReadString(40); + writer.WriteString($"[{qualificationCodeBuffer.ToArray().ToHexString()}]从业资格证编码", value.QualificationCode); + value.LicenseIssuingLength = reader.ReadByte(); + writer.WriteNumber($"[{value.LicenseIssuingLength.ReadNumber()}]发证机构名称长度", value.LicenseIssuingLength); + var licenseIssuingBuffer = reader.ReadVirtualArray(value.LicenseIssuingLength); + value.LicenseIssuing = reader.ReadString(value.LicenseIssuingLength); + writer.WriteString($"[{licenseIssuingBuffer.ToArray().ToHexString()}]发证机构名称", value.LicenseIssuing); } } /// @@ -189,11 +178,11 @@ namespace JT808.Protocol.MessageBody JT808_0x0702 value = new JT808_0x0702(); var firstByte = reader.ReadVirtualByte(); //因2011第一个字节代表姓名长度 所以该值长度只能为 2,3,4,整个数据长度 62+m+n - if (firstByte == 0x01) + if (firstByte == 0x01|| firstByte == 0x02) { value.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte(); value.IC_Card_PlugDateTime = reader.ReadDateTime_yyMMddHHmmss(); - if (value.IC_Card_Status == JT808ICCardStatus.ic_card_into) + if (reader.ReadCurrentRemainContentLength()>0) { value.IC_Card_ReadResult = (JT808ICCardReadResult)reader.ReadByte(); if (value.IC_Card_ReadResult == JT808ICCardReadResult.ic_card_reading_succeeded) @@ -219,20 +208,13 @@ namespace JT808.Protocol.MessageBody } else { - if (firstByte == 0x02 && reader.ReadCurrentRemainContentLength() == 7) - { - //如果字节是0x02且长度只有7,那么该协议就是2013或者2019 - value.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte(); - value.IC_Card_PlugDateTime = reader.ReadDateTime_yyMMddHHmmss(); - } - else { - value.DriverUserNameLength = reader.ReadByte(); - value.DriverUserName = reader.ReadString(value.DriverUserNameLength); - value.DriverIdentityCard = reader.ReadString(20); - value.QualificationCode = reader.ReadString(40); - value.LicenseIssuingLength = reader.ReadByte(); - value.LicenseIssuing = reader.ReadString(value.LicenseIssuingLength); - } + //默认是2011版本 + value.DriverUserNameLength = reader.ReadByte(); + value.DriverUserName = reader.ReadString(value.DriverUserNameLength); + value.DriverIdentityCard = reader.ReadString(20); + value.QualificationCode = reader.ReadString(40); + value.LicenseIssuingLength = reader.ReadByte(); + value.LicenseIssuing = reader.ReadString(value.LicenseIssuingLength); } return value; }