From 826d567946a6a996d3f511cab82a63cb5a1624ea 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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ....Protocol.Extensions.JTActiveSafety.csproj | 2 +- .../MessageBody/JT808_0x0200_0x65.cs | 20 ++-- .../JTActiveSafetySerializerTest.cs | 6 +- .../Extensions/HexExtensions.cs | 95 ++----------------- .../JTActiveSafety.Protocol.xml | 2 +- 5 files changed, 19 insertions(+), 106 deletions(-) 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 @@ https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE false - 1.0.5 + 1.0.6 LICENSE 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, 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; /// /// 报警ID /// @@ -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 /// 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); } /// @@ -48,9 +21,9 @@ namespace JTActiveSafety.Protocol.Extensions /// /// /// - 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 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 read, ref int offset, int len) - { - ReadOnlySpan 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 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" - + 16进制字符串转16进制数组