瀏覽代碼

v1.0.6

1.修复驾驶员状态监测系统报警信息预设的附加信息长度
2.修复驾驶员状态监测系统报警信息(报警/事件类型)数据类型分析器
修复单元测试
pull/4/head
SmallChi(Koike) 4 年之前
父節點
當前提交
e01c2ce11c
共有 6 個文件被更改,包括 20 次插入107 次删除
  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 查看文件

@@ -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()


+ 1
- 1
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>



+ 8
- 12
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:


+ 3
- 3
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);
}
}


+ 6
- 89
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);
}
}
}

+ 1
- 1
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>


Loading…
取消
儲存