From d2b5f3df73821a9d8958cc46b727c2ede320f54c Mon Sep 17 00:00:00 2001
From: "SmallChi(Koike)" <564952747@qq.com>
Date: Thu, 27 Jun 2024 18:36:46 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=80=E4=B8=8B0702=20?=
 =?UTF-8?q?=EF=BC=8C=E5=9C=A8=E7=8A=B6=E6=80=81=E4=B8=BA02=E6=97=B6?=
 =?UTF-8?q?=EF=BC=8C=E5=A6=82=E6=9E=9C=E4=B8=8B=E7=8F=AD=E6=97=B6=E9=97=B4?=
 =?UTF-8?q?=E5=90=8E=E9=9D=A2=E8=BF=98=E6=9C=89=E5=AD=97=E6=AE=B5=EF=BC=8C?=
 =?UTF-8?q?=E5=B0=B1=E7=BB=A7=E7=BB=AD=E8=A7=A3=E6=9E=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../JT808_0x0200_0x51_Test.cs                 |  2 +-
 .../MessageBody/JT808_0x0702Test.cs           | 17 +++--
 .../MessageBody/JT808_0x0702.cs               | 72 +++++++------------
 3 files changed, 41 insertions(+), 50 deletions(-)

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<short> {
-                   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<JT808_0x0702>(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<JT808_0x0702>(bytes, JT808Version.JTT2011);
         }
+        [Fact]
+        public void Test2013_1()
+        {
+            byte[] bytes = "7e0702003a016067308681006d0218061b0f362e000753696d626132326777313233000000000000000000000000000000044341524407e8061be27e".ToHexBytes();
+            var package = JT808Serializer.Deserialize<JT808Package>(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);
             }
         }
         /// <summary>
@@ -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;
         }