Kaynağa Gözat

v1.0.6

1.修复驾驶员状态监测系统报警信息预设的附加信息长度
2.修复驾驶员状态监测系统报警信息(报警/事件类型)数据类型分析器
修复单元测试
pull/4/head
SmallChi(Koike) 4 yıl önce
ebeveyn
işleme
e01c2ce11c
6 değiştirilmiş dosya ile 20 ekleme ve 107 silme
  1. +1
    -1
      src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs
  2. +1
    -1
      src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj
  3. +8
    -12
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs
  4. +3
    -3
      src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs
  5. +6
    -89
      src/JTActiveSafety.Protocol/Extensions/HexExtensions.cs
  6. +1
    -1
      src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml

+ 1
- 1
src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs Dosyayı Görüntüle

@@ -57,7 +57,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test
VehicleState = 19 VehicleState = 19
}); });
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106520000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200", hex);
Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010652F000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200", hex);
} }
[Fact] [Fact]
public void Deserialize() public void Deserialize()


+ 1
- 1
src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj Dosyayı Görüntüle

@@ -15,7 +15,7 @@
<licenseUrl>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</licenseUrl> <licenseUrl>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</licenseUrl>
<license>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</license> <license>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</license>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Version>1.0.5</Version>
<Version>1.0.6</Version>
<PackageLicenseFile>LICENSE</PackageLicenseFile> <PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup> </PropertyGroup>




+ 8
- 12
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs Dosyayı Görüntüle

@@ -16,7 +16,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x65>, IJT808Analyze 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 AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x65;
public override byte AttachInfoLength { get; set; } = 32;
public override byte AttachInfoLength { get; set; } = 47;
/// <summary> /// <summary>
/// 报警ID /// 报警ID
/// </summary> /// </summary>
@@ -101,26 +101,22 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
switch (value.AlarmOrEventType) switch (value.AlarmOrEventType)
{ {
case 0x01: case 0x01:
alarmOrEventTypeString = "前向碰撞报警";
alarmOrEventTypeString = "疲劳驾驶报警";
break; break;
case 0x02: case 0x02:
alarmOrEventTypeString = "车道偏离报警";
alarmOrEventTypeString = "接打电话报警";
break; break;
case 0x03: case 0x03:
alarmOrEventTypeString = "车距过近报警";
alarmOrEventTypeString = "抽烟报警";
break; break;
case 0x04: case 0x04:
alarmOrEventTypeString = "行人碰撞报警";
alarmOrEventTypeString = "分神驾驶报警";
break; break;
case 0x05: case 0x05:
alarmOrEventTypeString = "频繁变道报警";
alarmOrEventTypeString = "驾驶员异常报警";
break; break;
case 0x06: case 0x06:
alarmOrEventTypeString = "道路标识超限报警";
break;
case 0x07: case 0x07:
alarmOrEventTypeString = "障碍物报警";
break;
case 0x08: case 0x08:
case 0x09: case 0x09:
case 0x0A: case 0x0A:
@@ -132,10 +128,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
alarmOrEventTypeString = "用户自定义"; alarmOrEventTypeString = "用户自定义";
break; break;
case 0x10: case 0x10:
alarmOrEventTypeString = "道路标志识别事件";
alarmOrEventTypeString = "自动抓拍事件";
break; break;
case 0x11: case 0x11:
alarmOrEventTypeString = "主动抓拍事件";
alarmOrEventTypeString = "驾驶员变更事件";
break; break;
case 0x12: case 0x12:
case 0x13: case 0x13:


+ 3
- 3
src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs Dosyayı Görüntüle

@@ -15,13 +15,13 @@ namespace JTActiveSafety.Protocol.Test
package.Offset = 1; package.Offset = 1;
package.Bodies = new byte[5] { 1, 2, 3, 4, 5 }; package.Bodies = new byte[5] { 1, 2, 3, 4, 5 };
var hex = JTActiveSafetySerializer.Serialize(package).ToHexString(); 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] [Fact]
public void DeserializeTest1() 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); var package = JTActiveSafetySerializer.Deserialize(data);
Assert.Equal(JTActiveSafetyPackage.FH, package.FH_Flag); Assert.Equal(JTActiveSafetyPackage.FH, package.FH_Flag);
Assert.Equal("alarm.xlsx", package.FileName.TrimStart('\0')); Assert.Equal("alarm.xlsx", package.FileName.TrimStart('\0'));
@@ -33,7 +33,7 @@ namespace JTActiveSafety.Protocol.Test
[Fact] [Fact]
public void AnalyzeTest1() 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); var json = JTActiveSafetySerializer.Analyze(data);
} }
} }


+ 6
- 89
src/JTActiveSafety.Protocol/Extensions/HexExtensions.cs Dosyayı Görüntüle

@@ -1,4 +1,5 @@
using System; using System;
using System.Linq;


namespace JTActiveSafety.Protocol.Extensions namespace JTActiveSafety.Protocol.Extensions
{ {
@@ -8,38 +9,10 @@ namespace JTActiveSafety.Protocol.Extensions
/// </summary> /// </summary>
public static partial class HexExtensions 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> /// <summary>
@@ -48,9 +21,9 @@ namespace JTActiveSafety.Protocol.Extensions
/// <param name="hexString"></param> /// <param name="hexString"></param>
/// <param name="separator"></param> /// <param name="separator"></param>
/// <returns></returns> /// <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]; byte[] buf = new byte[hexString.Length / 2];
ReadOnlySpan<char> readOnlySpan = hexString.AsSpan(); ReadOnlySpan<char> readOnlySpan = hexString.AsSpan();
for (int i = 0; i < hexString.Length; i++) for (int i = 0; i < hexString.Length; i++)
@@ -63,14 +36,6 @@ namespace JTActiveSafety.Protocol.Extensions
return buf; 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") public static string ReadNumber(this byte value, string format = "X2")
{ {
return value.ToString(format); 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);
}
}
} }

+ 1
- 1
src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml Dosyayı Görüntüle

@@ -15,7 +15,7 @@
ref:"www.codeproject.com/tips/447938/high-performance-csharp-byte-array-to-hex-string-t" ref:"www.codeproject.com/tips/447938/high-performance-csharp-byte-array-to-hex-string-t"
</summary> </summary>
</member> </member>
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ToHexBytes(System.String)">
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ToHexBytes(System.String,System.String)">
<summary> <summary>
16进制字符串转16进制数组 16进制字符串转16进制数组
</summary> </summary>


Yükleniyor…
İptal
Kaydet