From e01c2ce11caa8672c5d15561b3096186e5778b99 Mon Sep 17 00:00:00 2001
From: "SmallChi(Koike)" <564952747@qq.com>
Date: Mon, 12 Oct 2020 15:59:03 +0800
Subject: [PATCH] =?UTF-8?q?v1.0.6=201.=E4=BF=AE=E5=A4=8D=E9=A9=BE=E9=A9=B6?=
 =?UTF-8?q?=E5=91=98=E7=8A=B6=E6=80=81=E7=9B=91=E6=B5=8B=E7=B3=BB=E7=BB=9F?=
 =?UTF-8?q?=E6=8A=A5=E8=AD=A6=E4=BF=A1=E6=81=AF=E9=A2=84=E8=AE=BE=E7=9A=84?=
 =?UTF-8?q?=E9=99=84=E5=8A=A0=E4=BF=A1=E6=81=AF=E9=95=BF=E5=BA=A6=202.?=
 =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A9=BE=E9=A9=B6=E5=91=98=E7=8A=B6=E6=80=81?=
 =?UTF-8?q?=E7=9B=91=E6=B5=8B=E7=B3=BB=E7=BB=9F=E6=8A=A5=E8=AD=A6=E4=BF=A1?=
 =?UTF-8?q?=E6=81=AF=EF=BC=88=E6=8A=A5=E8=AD=A6/=E4=BA=8B=E4=BB=B6?=
 =?UTF-8?q?=E7=B1=BB=E5=9E=8B=EF=BC=89=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B?=
 =?UTF-8?q?=E5=88=86=E6=9E=90=E5=99=A8=20=E4=BF=AE=E5=A4=8D=E5=8D=95?=
 =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../JT808_0x0200_0x65_Test.cs                 |  2 +-
 ....Protocol.Extensions.JTActiveSafety.csproj |  2 +-
 .../MessageBody/JT808_0x0200_0x65.cs          | 20 ++--
 .../JTActiveSafetySerializerTest.cs           |  6 +-
 .../Extensions/HexExtensions.cs               | 95 ++-----------------
 .../JTActiveSafety.Protocol.xml               |  2 +-
 6 files changed, 20 insertions(+), 107 deletions(-)

diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs
index f411197..ccef77b 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs
@@ -57,7 +57,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test
                 VehicleState = 19
             });
             var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
-            Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106520000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200", hex);
+            Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010652F000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200", hex);
         }
         [Fact]
         public void Deserialize()
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj b/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj
index 9c94bbb..824d3ee 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj
@@ -15,7 +15,7 @@
     <licenseUrl>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</licenseUrl>
     <license>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</license>
     <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
-    <Version>1.0.5</Version>
+    <Version>1.0.6</Version>
     <PackageLicenseFile>LICENSE</PackageLicenseFile>
   </PropertyGroup>
 
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs
index ffddc3a..6460d90 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs
@@ -16,7 +16,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
     public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x65>, IJT808Analyze
     {
         public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x65;
-        public override byte AttachInfoLength { get; set; } = 32;
+        public override byte AttachInfoLength { get; set; } = 47;
         /// <summary>
         /// 报警ID
         /// </summary>
@@ -101,26 +101,22 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
             switch (value.AlarmOrEventType)
             {
                 case 0x01:
-                    alarmOrEventTypeString = "前向碰撞报警";
+                    alarmOrEventTypeString = "疲劳驾驶报警";
                     break;
                 case 0x02:
-                    alarmOrEventTypeString = "车道偏离报警";
+                    alarmOrEventTypeString = "接打电话报警";
                     break;
                 case 0x03:
-                    alarmOrEventTypeString = "车距过近报警";
+                    alarmOrEventTypeString = "抽烟报警";
                     break;
                 case 0x04:
-                    alarmOrEventTypeString = "行人碰撞报警";
+                    alarmOrEventTypeString = "分神驾驶报警";
                     break;
                 case 0x05:
-                    alarmOrEventTypeString = "频繁变道报警";
+                    alarmOrEventTypeString = "驾驶员异常报警";
                     break;
                 case 0x06:
-                    alarmOrEventTypeString = "道路标识超限报警";
-                    break;
                 case 0x07:
-                    alarmOrEventTypeString = "障碍物报警";
-                    break;
                 case 0x08:
                 case 0x09:
                 case 0x0A:
@@ -132,10 +128,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
                     alarmOrEventTypeString = "用户自定义";
                     break;
                 case 0x10:
-                    alarmOrEventTypeString = "道路标志识别事件";
+                    alarmOrEventTypeString = "自动抓拍事件";
                     break;
                 case 0x11:
-                    alarmOrEventTypeString = "主动抓拍事件";
+                    alarmOrEventTypeString = "驾驶员变更事件";
                     break;
                 case 0x12:
                 case 0x13:
diff --git a/src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs b/src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs
index a92bb6d..6a1d46d 100644
--- a/src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs
+++ b/src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs
@@ -15,13 +15,13 @@ namespace JTActiveSafety.Protocol.Test
             package.Offset = 1;
             package.Bodies = new byte[5] { 1, 2, 3, 4, 5 };
             var hex = JTActiveSafetySerializer.Serialize(package).ToHexString();
-            Assert.Equal("3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405", hex);
+            Assert.Equal("30 31 63 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 61 6C 61 72 6D 2E 78 6C 73 78 00 00 00 01 00 00 00 05 01 02 03 04 05", hex);
         }
 
         [Fact]
         public void DeserializeTest1()
         {
-            var data = "3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405".ToHexBytes();
+            var data = "30 31 63 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 61 6C 61 72 6D 2E 78 6C 73 78 00 00 00 01 00 00 00 05 01 02 03 04 05".ToHexBytes();
             var package = JTActiveSafetySerializer.Deserialize(data);
             Assert.Equal(JTActiveSafetyPackage.FH, package.FH_Flag);
             Assert.Equal("alarm.xlsx", package.FileName.TrimStart('\0'));
@@ -33,7 +33,7 @@ namespace JTActiveSafety.Protocol.Test
         [Fact]
         public void AnalyzeTest1()
         {
-            var data = "3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405".ToHexBytes();
+            var data = "30 31 63 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 61 6C 61 72 6D 2E 78 6C 73 78 00 00 00 01 00 00 00 05 01 02 03 04 05".ToHexBytes();
             var json = JTActiveSafetySerializer.Analyze(data);
         }
     }
diff --git a/src/JTActiveSafety.Protocol/Extensions/HexExtensions.cs b/src/JTActiveSafety.Protocol/Extensions/HexExtensions.cs
index ff3420b..a1e94d8 100644
--- a/src/JTActiveSafety.Protocol/Extensions/HexExtensions.cs
+++ b/src/JTActiveSafety.Protocol/Extensions/HexExtensions.cs
@@ -1,4 +1,5 @@
 using System;
+using System.Linq;
 
 namespace JTActiveSafety.Protocol.Extensions
 {
@@ -8,38 +9,10 @@ namespace JTActiveSafety.Protocol.Extensions
     /// </summary>
     public static partial class HexExtensions
     {
-        public static string ToHexString(this byte[] source)
+        public static string ToHexString(this byte[] source, string separator = " ")
         {
-            return HexUtil.DoHexDump(source, 0, source.Length).ToUpper();
-        }
-
-        public static int WriteHexStringLittle(byte[] bytes, int offset, string data, int len)
-        {
-            if (data == null) data = "";
-            data = data.Replace(" ", "");
-            int startIndex = 0;
-            if (data.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
-            {
-                startIndex = 2;
-            }
-            int length = len;
-            if (length == -1)
-            {
-                length = (data.Length - startIndex) / 2;
-            }
-            int noOfZero = length * 2 + startIndex - data.Length;
-            if (noOfZero > 0)
-            {
-                data = data.Insert(startIndex, new string('0', noOfZero));
-            }
-            int byteIndex = 0;
-            while (startIndex < data.Length && byteIndex < length)
-            {
-                bytes[offset + byteIndex] = Convert.ToByte(data.Substring(startIndex, 2), 16);
-                startIndex += 2;
-                byteIndex++;
-            }
-            return length;
+            var value = source.Select(s => s.ToString("X2"));
+            return string.Join(separator, value);
         }
 
         /// <summary>
@@ -48,9 +21,9 @@ namespace JTActiveSafety.Protocol.Extensions
         /// <param name="hexString"></param>
         /// <param name="separator"></param>
         /// <returns></returns>
-        public static byte[] ToHexBytes(this string hexString)
+        public static byte[] ToHexBytes(this string hexString,string separator=" ")
         {
-            hexString = hexString.Replace(" ", "");
+            hexString = hexString.Replace(separator, "");
             byte[] buf = new byte[hexString.Length / 2];
             ReadOnlySpan<char> readOnlySpan = hexString.AsSpan();
             for (int i = 0; i < hexString.Length; i++)
@@ -63,14 +36,6 @@ namespace JTActiveSafety.Protocol.Extensions
             return buf;
         }
 
-        public static string ReadHexStringLittle(ReadOnlySpan<byte> read, ref int offset, int len)
-        {
-            ReadOnlySpan<byte> source = read.Slice(offset, len);
-            string hex = HexUtil.DoHexDump(read, offset, len);
-            offset += len;
-            return hex;
-        }
-
         public static string ReadNumber(this byte value, string format = "X2")
         {
             return value.ToString(format);
@@ -121,52 +86,4 @@ namespace JTActiveSafety.Protocol.Extensions
         }
 
     }
-
-    public static class HexUtil
-    {
-        static readonly char[] HexdumpTable = new char[256 * 4];
-        static HexUtil()
-        {
-            char[] digits = "0123456789ABCDEF".ToCharArray();
-            for (int i = 0; i < 256; i++)
-            {
-                HexdumpTable[i << 1] = digits[(int)((uint)i >> 4 & 0x0F)];
-                HexdumpTable[(i << 1) + 1] = digits[i & 0x0F];
-            }
-        }
-
-        public static string DoHexDump(ReadOnlySpan<byte> buffer, int fromIndex, int length)
-        {
-            if (length == 0)
-            {
-                return "";
-            }
-            int endIndex = fromIndex + length;
-            var buf = new char[length << 1];
-            int srcIdx = fromIndex;
-            int dstIdx = 0;
-            for (; srcIdx < endIndex; srcIdx++, dstIdx += 2)
-            {
-                Array.Copy(HexdumpTable, buffer[srcIdx] << 1, buf, dstIdx, 2);
-            }
-            return new string(buf);
-        }
-
-        public static string DoHexDump(byte[] array, int fromIndex, int length)
-        {
-            if (length == 0)
-            {
-                return "";
-            }
-            int endIndex = fromIndex + length;
-            var buf = new char[length << 1];
-            int srcIdx = fromIndex;
-            int dstIdx = 0;
-            for (; srcIdx < endIndex; srcIdx++, dstIdx += 2)
-            {
-                Array.Copy(HexdumpTable, (array[srcIdx] & 0xFF) << 1, buf, dstIdx, 2);
-            }
-            return new string(buf);
-        }
-    }
 }
diff --git a/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml b/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml
index b8694f0..c7cb0a3 100644
--- a/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml
+++ b/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml
@@ -15,7 +15,7 @@
             ref:"www.codeproject.com/tips/447938/high-performance-csharp-byte-array-to-hex-string-t"
             </summary>
         </member>
-        <member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ToHexBytes(System.String)">
+        <member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ToHexBytes(System.String,System.String)">
             <summary>
             16进制字符串转16进制数组
             </summary>