Преглед на файлове

1.调整0x200位置附加信息扩展,通过协议版本号约束各个版本的位置附加信息保留解析

2.修改除808本身的位置附加信息使用JT808_0x0200_BodyBase继承,其余外部依赖统一使用JT808_0x0200_CustomBodyBase来处理,这样可以保留自身808协议的保留约束
3.调整0x0200位置附加信息解析错误的提示
4.升级808库去掉Net5
tags/v2.4.6
SmallChi(Koike) преди 3 години
родител
ревизия
7806c9da81
променени са 27 файла, в които са добавени 249 реда и са изтрити 68 реда
  1. +1
    -1
      .github/workflows/dotnetcore.yml
  2. +5
    -0
      global.json
  3. +2
    -2
      src/Info.props
  4. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808.Protocol.Extensions.JT1078.Test.csproj
  5. +12
    -12
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808LocationAttach.cs
  6. +6
    -6
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808_0x0200Test.cs
  7. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x14.cs
  8. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x15.cs
  9. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x16.cs
  10. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x17.cs
  11. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x18.cs
  12. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808.Protocol.Extensions.SuBiao.Test.csproj
  13. +3
    -3
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808_0x0200_0x64_Test.cs
  14. +3
    -3
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808_0x0200_0x65_Test.cs
  15. +3
    -3
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808_0x0200_0x66_Test.cs
  16. +3
    -3
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808_0x0200_0x67_Test.cs
  17. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x64.cs
  18. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x65.cs
  19. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x66.cs
  20. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x67.cs
  21. +2
    -2
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808.Protocol.Extensions.YueBiao.Test.csproj
  22. +1
    -1
      src/JT808.Protocol.Test/JT808.Protocol.Test.csproj
  23. +97
    -7
      src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs
  24. +79
    -0
      src/JT808.Protocol/Extensions/JT808_0X0200_FactoryExtensions.cs
  25. +2
    -7
      src/JT808.Protocol/JT808.Protocol.csproj
  26. +11
    -0
      src/JT808.Protocol/JT808.Protocol.xml
  27. +8
    -7
      src/JT808.Protocol/MessageBody/JT808_0x0200.cs

+ 1
- 1
.github/workflows/dotnetcore.yml Целия файл

@@ -12,7 +12,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@master
with:
dotnet-version: 6.0.100
dotnet-version: 6.0.201
- name: dotnet info
run: dotnet --info
- name: dotnet restore


+ 5
- 0
global.json Целия файл

@@ -0,0 +1,5 @@
{
"sdk": {
"version": "6.0.201"
}
}

+ 2
- 2
src/Info.props Целия файл

@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0;</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net6.0;</TargetFrameworks>
<LangVersion>10.0</LangVersion>
<Copyright>Copyright 2018.</Copyright>
<Authors>SmallChi(Koike)</Authors>
@@ -8,7 +8,7 @@
<PackageProjectUrl>https://github.com/SmallChi/JT808</PackageProjectUrl>
<licenseUrl>https://github.com/SmallChi/JT808/blob/master/LICENSE</licenseUrl>
<license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license>
<Version>2.4.5</Version>
<Version>2.4.6-preview1</Version>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<AnalysisLevel>latest</AnalysisLevel>


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808.Protocol.Extensions.JT1078.Test.csproj Целия файл

@@ -7,7 +7,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>


+ 12
- 12
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808LocationAttach.cs Целия файл

@@ -35,25 +35,25 @@ namespace JT808.Protocol.Extensions.JT1078.Test
Speed = 60,
Direction = 0,
StatusFlag = 2,
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
CustomLocationAttachData = new Dictionary<byte, JT808_0x0200_CustomBodyBase>()
};
jT808UploadLocationRequest.BasicLocationAttachData.Add(0x14, new JT808_0x0200_0x14
jT808UploadLocationRequest.CustomLocationAttachData.Add(0x14, new JT808_0x0200_0x14
{
VideoRelateAlarm = 100
});
jT808UploadLocationRequest.BasicLocationAttachData.Add(0x15, new JT808_0x0200_0x15
jT808UploadLocationRequest.CustomLocationAttachData.Add(0x15, new JT808_0x0200_0x15
{
VideoSignalLoseAlarmStatus = 100
});
jT808UploadLocationRequest.BasicLocationAttachData.Add(0x16, new JT808_0x0200_0x16
jT808UploadLocationRequest.CustomLocationAttachData.Add(0x16, new JT808_0x0200_0x16
{
VideoSignalOcclusionAlarmStatus = 100
});
jT808UploadLocationRequest.BasicLocationAttachData.Add(0x17, new JT808_0x0200_0x17
jT808UploadLocationRequest.CustomLocationAttachData.Add(0x17, new JT808_0x0200_0x17
{
StorageFaultAlarmStatus = 100
});
jT808UploadLocationRequest.BasicLocationAttachData.Add(0x18, new JT808_0x0200_0x18
jT808UploadLocationRequest.CustomLocationAttachData.Add(0x18, new JT808_0x0200_0x18
{
AbnormalDrivingBehaviorAlarmType = 100,
FatigueLevel = 88
@@ -73,12 +73,12 @@ namespace JT808.Protocol.Extensions.JT1078.Test
Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed);
Assert.Equal(2u, jT808UploadLocationRequest.StatusFlag);
Assert.Equal(100u, ((JT808_0x0200_0x14)jT808UploadLocationRequest.BasicLocationAttachData[0x14]).VideoRelateAlarm);
Assert.Equal(100u, ((JT808_0x0200_0x15)jT808UploadLocationRequest.BasicLocationAttachData[0x15]).VideoSignalLoseAlarmStatus);
Assert.Equal(100u, ((JT808_0x0200_0x16)jT808UploadLocationRequest.BasicLocationAttachData[0x16]).VideoSignalOcclusionAlarmStatus);
Assert.Equal(100u, ((JT808_0x0200_0x17)jT808UploadLocationRequest.BasicLocationAttachData[0x17]).StorageFaultAlarmStatus);
Assert.Equal(100u, ((JT808_0x0200_0x18)jT808UploadLocationRequest.BasicLocationAttachData[0x18]).AbnormalDrivingBehaviorAlarmType);
Assert.Equal(88, ((JT808_0x0200_0x18)jT808UploadLocationRequest.BasicLocationAttachData[0x18]).FatigueLevel);
Assert.Equal(100u, ((JT808_0x0200_0x14)jT808UploadLocationRequest.CustomLocationAttachData[0x14]).VideoRelateAlarm);
Assert.Equal(100u, ((JT808_0x0200_0x15)jT808UploadLocationRequest.CustomLocationAttachData[0x15]).VideoSignalLoseAlarmStatus);
Assert.Equal(100u, ((JT808_0x0200_0x16)jT808UploadLocationRequest.CustomLocationAttachData[0x16]).VideoSignalOcclusionAlarmStatus);
Assert.Equal(100u, ((JT808_0x0200_0x17)jT808UploadLocationRequest.CustomLocationAttachData[0x17]).StorageFaultAlarmStatus);
Assert.Equal(100u, ((JT808_0x0200_0x18)jT808UploadLocationRequest.CustomLocationAttachData[0x18]).AbnormalDrivingBehaviorAlarmType);
Assert.Equal(88, ((JT808_0x0200_0x18)jT808UploadLocationRequest.CustomLocationAttachData[0x18]).FatigueLevel);
}

[Fact]


+ 6
- 6
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078.Test/JT808_0x0200Test.cs Целия файл

@@ -36,9 +36,9 @@ namespace JT808.Protocol.Extensions.JT1078.Test
Speed = 60,
Direction = 0,
StatusFlag = 2,
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
CustomLocationAttachData = new Dictionary<byte, JT808_0x0200_CustomBodyBase>()
};
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808_JT1078_Constants.JT808_0X0200_0x14, new JT808_0x0200_0x14
jT808UploadLocationRequest.CustomLocationAttachData.Add(JT808_JT1078_Constants.JT808_0X0200_0x14, new JT808_0x0200_0x14
{
VideoRelateAlarm = (uint)(VideoRelateAlarmType.视频信号遮挡报警 | VideoRelateAlarmType.其他视频设备故障报警)
});
@@ -57,7 +57,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed);
Assert.Equal((uint)2, jT808UploadLocationRequest.StatusFlag);
Assert.Equal((uint)(VideoRelateAlarmType.视频信号遮挡报警 | VideoRelateAlarmType.其他视频设备故障报警), ((JT808_0x0200_0x14)jT808UploadLocationRequest.BasicLocationAttachData[JT808_JT1078_Constants.JT808_0X0200_0x14]).VideoRelateAlarm);
Assert.Equal((uint)(VideoRelateAlarmType.视频信号遮挡报警 | VideoRelateAlarmType.其他视频设备故障报警), ((JT808_0x0200_0x14)jT808UploadLocationRequest.CustomLocationAttachData[JT808_JT1078_Constants.JT808_0X0200_0x14]).VideoRelateAlarm);
}

[Fact]
@@ -80,9 +80,9 @@ namespace JT808.Protocol.Extensions.JT1078.Test
Speed = 60,
Direction = 0,
StatusFlag = 2,
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
CustomLocationAttachData = new Dictionary<byte, JT808_0x0200_CustomBodyBase>()
};
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808_JT1078_Constants.JT808_0X0200_0x15, new JT808_0x0200_0x15
jT808UploadLocationRequest.CustomLocationAttachData.Add(JT808_JT1078_Constants.JT808_0X0200_0x15, new JT808_0x0200_0x15
{
VideoSignalLoseAlarmStatus=3
});
@@ -101,7 +101,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed);
Assert.Equal((uint)2, jT808UploadLocationRequest.StatusFlag);
Assert.Equal(3u, ((JT808_0x0200_0x15)jT808UploadLocationRequest.BasicLocationAttachData[JT808_JT1078_Constants.JT808_0X0200_0x15]).VideoSignalLoseAlarmStatus);
Assert.Equal(3u, ((JT808_0x0200_0x15)jT808UploadLocationRequest.CustomLocationAttachData[JT808_JT1078_Constants.JT808_0X0200_0x15]).VideoSignalLoseAlarmStatus);
}

[Fact]


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x14.cs Целия файл

@@ -12,7 +12,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// 视频相关报警
/// 0x0200_0x14
/// </summary>
public class JT808_0x0200_0x14 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x14>,IJT808Analyze
public class JT808_0x0200_0x14 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x14>,IJT808Analyze
{
/// <summary>
///


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x15.cs Целия файл

@@ -11,7 +11,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// 视频信号丢失报警状态
/// 0x0200_0x15
/// </summary>
public class JT808_0x0200_0x15 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x15>, IJT808Analyze
public class JT808_0x0200_0x15 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x15>, IJT808Analyze
{
/// <summary>
///


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x16.cs Целия файл

@@ -11,7 +11,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// 视频信号遮挡报警状态
/// 0x0200_0x16
/// </summary>
public class JT808_0x0200_0x16 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x16>, IJT808Analyze
public class JT808_0x0200_0x16 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x16>, IJT808Analyze
{
/// <summary>
///


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x17.cs Целия файл

@@ -11,7 +11,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// 存储器故障报警状态
/// 0x0200_0x17
/// </summary>
public class JT808_0x0200_0x17 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x17>, IJT808Analyze
public class JT808_0x0200_0x17 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x17>, IJT808Analyze
{
/// <summary>
///


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x0200_0x18.cs Целия файл

@@ -11,7 +11,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// 异常驾驶行为报警详细描述
/// 0x0200_0x18
/// </summary>
public class JT808_0x0200_0x18 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x18>, IJT808Analyze
public class JT808_0x0200_0x18 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x18>, IJT808Analyze
{
/// <summary>
///


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808.Protocol.Extensions.SuBiao.Test.csproj Целия файл

@@ -8,7 +8,7 @@

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>


+ 3
- 3
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808_0x0200_0x64_Test.cs Целия файл

@@ -32,9 +32,9 @@ namespace JT808.Protocol.Extensions.SuBiao.Test
Speed = 60,
Direction = 0,
StatusFlag = 2,
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
CustomLocationAttachData = new Dictionary<byte, JT808_0x0200_CustomBodyBase>()
};
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808_SuBiao_Constants.JT808_0X0200_0x64, new JT808_0x0200_0x64
jT808UploadLocationRequest.CustomLocationAttachData.Add(JT808_SuBiao_Constants.JT808_0X0200_0x64, new JT808_0x0200_0x64
{
AlarmId = 1,
AlarmIdentification = new Metadata.AlarmIdentificationProperty
@@ -66,7 +66,7 @@ namespace JT808.Protocol.Extensions.SuBiao.Test
public void Deserialize()
{
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C00001807151010106420000000010C0605120A0B100F1100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes());
jT808UploadLocationRequest.BasicLocationAttachData.TryGetValue(JT808_SuBiao_Constants.JT808_0X0200_0x64, out var value);
jT808UploadLocationRequest.CustomLocationAttachData.TryGetValue(JT808_SuBiao_Constants.JT808_0X0200_0x64, out var value);
JT808_0x0200_0x64 jT808_0X0200_0X64 = value as JT808_0x0200_0x64;
Assert.Equal(1u, jT808_0X0200_0X64.AlarmId);
Assert.Equal(2, jT808_0X0200_0X64.AlarmIdentification.AttachCount);


+ 3
- 3
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808_0x0200_0x65_Test.cs Целия файл

@@ -32,9 +32,9 @@ namespace JT808.Protocol.Extensions.SuBiao.Test
Speed = 60,
Direction = 0,
StatusFlag = 2,
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
CustomLocationAttachData = new Dictionary<byte, JT808_0x0200_CustomBodyBase>()
};
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808_SuBiao_Constants.JT808_0X0200_0x65, new JT808_0x0200_0x65
jT808UploadLocationRequest.CustomLocationAttachData.Add(JT808_SuBiao_Constants.JT808_0X0200_0x65, new JT808_0x0200_0x65
{
AlarmId = 1,
AlarmIdentification = new Metadata.AlarmIdentificationProperty
@@ -63,7 +63,7 @@ namespace JT808.Protocol.Extensions.SuBiao.Test
public void Deserialize()
{
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C00001807151010106520000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes());
jT808UploadLocationRequest.BasicLocationAttachData.TryGetValue(JT808_SuBiao_Constants.JT808_0X0200_0x65, out var value);
jT808UploadLocationRequest.CustomLocationAttachData.TryGetValue(JT808_SuBiao_Constants.JT808_0X0200_0x65, out var value);
JT808_0x0200_0x65 jT808_0X0200_0X65 = value as JT808_0x0200_0x65;
Assert.Equal(1u, jT808_0X0200_0X65.AlarmId);
Assert.Equal(2, jT808_0X0200_0X65.AlarmIdentification.AttachCount);


+ 3
- 3
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808_0x0200_0x66_Test.cs Целия файл

@@ -32,9 +32,9 @@ namespace JT808.Protocol.Extensions.SuBiao.Test
Speed = 60,
Direction = 0,
StatusFlag = 2,
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
CustomLocationAttachData = new Dictionary<byte, JT808_0x0200_CustomBodyBase>()
};
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808_SuBiao_Constants.JT808_0X0200_0x66, new JT808_0x0200_0x66
jT808UploadLocationRequest.CustomLocationAttachData.Add(JT808_SuBiao_Constants.JT808_0X0200_0x66, new JT808_0x0200_0x66
{
AlarmId = 1,
AlarmIdentification = new Metadata.AlarmIdentificationProperty
@@ -77,7 +77,7 @@ namespace JT808.Protocol.Extensions.SuBiao.Test
public void Deserialize()
{
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007".ToHexBytes());
jT808UploadLocationRequest.BasicLocationAttachData.TryGetValue(JT808_SuBiao_Constants.JT808_0X0200_0x66, out var value);
jT808UploadLocationRequest.CustomLocationAttachData.TryGetValue(JT808_SuBiao_Constants.JT808_0X0200_0x66, out var value);
JT808_0x0200_0x66 jT808_0X0200_0X66 = value as JT808_0x0200_0x66;
Assert.Equal(1u, jT808_0X0200_0X66.AlarmId);
Assert.Equal(2, jT808_0X0200_0X66.AlarmIdentification.AttachCount);


+ 3
- 3
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao.Test/JT808_0x0200_0x67_Test.cs Целия файл

@@ -32,9 +32,9 @@ namespace JT808.Protocol.Extensions.SuBiao.Test
Speed = 60,
Direction = 0,
StatusFlag = 2,
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
CustomLocationAttachData = new Dictionary<byte, JT808_0x0200_CustomBodyBase>()
};
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808_SuBiao_Constants.JT808_0X0200_0x67, new JT808_0x0200_0x67
jT808UploadLocationRequest.CustomLocationAttachData.Add(JT808_SuBiao_Constants.JT808_0X0200_0x67, new JT808_0x0200_0x67
{
AlarmId = 1,
AlarmIdentification = new Metadata.AlarmIdentificationProperty
@@ -61,7 +61,7 @@ namespace JT808.Protocol.Extensions.SuBiao.Test
public void Deserialize()
{
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C0000180715101010672A000000010C09081100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes());
jT808UploadLocationRequest.BasicLocationAttachData.TryGetValue(JT808_SuBiao_Constants.JT808_0X0200_0x67, out var value);
jT808UploadLocationRequest.CustomLocationAttachData.TryGetValue(JT808_SuBiao_Constants.JT808_0X0200_0x67, out var value);
JT808_0x0200_0x67 jT808_0X0200_0X67 = value as JT808_0x0200_0x67;
Assert.Equal(1u, jT808_0X0200_0X67.AlarmId);
Assert.Equal(2, jT808_0X0200_0X67.AlarmIdentification.AttachCount);


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x64.cs Целия файл

@@ -13,7 +13,7 @@ namespace JT808.Protocol.Extensions.SuBiao.MessageBody
/// <summary>
/// 高级驾驶辅助系统报警信息
/// </summary>
public class JT808_0x0200_0x64 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x64>, IJT808Analyze
public class JT808_0x0200_0x64 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x64>, IJT808Analyze
{
/// <summary>
/// 高级驾驶辅助系统报警信息Id


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x65.cs Целия файл

@@ -13,7 +13,7 @@ namespace JT808.Protocol.Extensions.SuBiao.MessageBody
/// <summary>
/// 驾驶员状态监测系统报警信息
/// </summary>
public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x65>, IJT808Analyze
public class JT808_0x0200_0x65 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x65>, IJT808Analyze
{
/// <summary>
/// 驾驶员状态监测系统报警信息Id


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x66.cs Целия файл

@@ -13,7 +13,7 @@ namespace JT808.Protocol.Extensions.SuBiao.MessageBody
/// <summary>
/// 胎压监测系统报警信息
/// </summary>
public class JT808_0x0200_0x66 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x66>, IJT808Analyze
public class JT808_0x0200_0x66 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x66>, IJT808Analyze
{
/// <summary>
/// 胎压监测系统报警信息Id


+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x0200_0x67.cs Целия файл

@@ -13,7 +13,7 @@ namespace JT808.Protocol.Extensions.SuBiao.MessageBody
/// <summary>
/// 盲区监测系统报警信息
/// </summary>
public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x67>, IJT808Analyze
public class JT808_0x0200_0x67 : JT808_0x0200_CustomBodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x67>, IJT808Analyze
{
/// <summary>
/// 盲区监测系统报警信息Id


+ 2
- 2
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808.Protocol.Extensions.YueBiao.Test.csproj Целия файл

@@ -8,13 +8,13 @@

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.0">
<PackageReference Include="coverlet.collector" Version="3.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>


+ 1
- 1
src/JT808.Protocol.Test/JT808.Protocol.Test.csproj Целия файл

@@ -108,7 +108,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="NETStandard.Library" Version="2.0.3" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />


+ 97
- 7
src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs Целия файл

@@ -403,6 +403,96 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Single(jT808UploadLocationRequest.ExceptionLocationAttachOriginalData);
}

[Fact]
public void Test8()
{
//7E
//0200
//0085
//011111111111
//0AA2
//00000000
//000C0000
//01F62E83
//07147C92
//001E
//0000
//001E
//11 01 11 03 11 52
//01
// 04
// 00 13 1A 34
//03
// 02
// 00 00
//05
// 01
// 00
//06
// 03
// 02 05 90
//07
// 03
// 03 81 20
//25
// 04
// 00 00 00 00
//2B
// 04
// 00 00 00 F0
//30
// 01
// 17
//31
// 01
// 05
//E0
// 01
// 3D
//E1
// 08
// 00 00 00 00 00 04 BC FD
//E2
// 04
// 00 00 00 00
//E3
// 04
// 00 00 07 AC
//E4
// 04
// 00 00 00 00
//E5
// 0C
// 00 13 00 27 00 13 00 27 00 13 00 27
//EA
// 04
// 00 00 00 00
//EB
// 04
// 00 00 00 00
//EE
// 01
// 00
//F6
// 04 error
// 14 50 error
//E9
//7E
byte[] bodys = "7E020000850111111111110AA200000000000C000001F62E8307147C92001E0000001E110111031152010400131A3403020000050100060302059007030381202504000000002B04000000F0300117310105E0013DE108000000000004BCFDE20400000000E304000007ACE40400000000E50C001300270013002700130027EA0400000000EB0400000000EE0100F6041450E97E".ToHexBytes();
var package = JT808Serializer1.Deserialize(bodys);
JT808_0x0200 jT808UploadLocationRequest = (JT808_0x0200)package.Bodies;
Assert.Single(jT808UploadLocationRequest.ExceptionLocationAttachOriginalData);
Assert.Equal(0x6, jT808UploadLocationRequest.BasicLocationAttachData.Count);
Assert.Equal(0xc,jT808UploadLocationRequest.UnknownLocationAttachData.Count);
}

[Fact]
public void Test8_1()
{
byte[] bodys = "7E020000850111111111110AA200000000000C000001F62E8307147C92001E0000001E110111031152010400131A3403020000050100060302059007030381202504000000002B04000000F0300117310105E0013DE108000000000004BCFDE20400000000E304000007ACE40400000000E50C001300270013002700130027EA0400000000EB0400000000EE0100F6041450E97E".ToHexBytes();
var json = JT808Serializer1.Analyze(bodys);
}

[Fact]
public void Test_all_attcahids()
{
@@ -637,7 +727,7 @@ namespace JT808.Protocol.Test.MessageBody
public void Test_JT808_0x0200_0x07_2()
{
byte[] bytes = "000000010000000200BA7F0E07E4F11C0028003C0000210528181010072C0401030002020400050305000604050006030204000503050006040500060203050006040500060104050006".ToHexBytes();
var jT808_0X0200 = JT808Serializer.Deserialize<JT808_0x0200>(bytes);
var jT808_0X0200 = JT808Serializer.Deserialize<JT808_0x0200>(bytes, JT808Version.JTT2019);
var jT808_0x0200_0x07=(JT808_0x0200_0x07)jT808_0X0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x07];
Assert.Equal((byte)(4 + (4 * 4 + 4 * 3 + 4 * 2 + 4)), jT808_0x0200_0x07.AttachInfoLength);
Assert.Equal(4, jT808_0x0200_0x07.BeiDou.Count);
@@ -780,7 +870,7 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
Assert.Equal(60, jT808UploadLocationRequest.Speed);
}
[Fact]
public void LatLngTest2_1()
@@ -810,7 +900,7 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed); //402653184
Assert.Equal(60, jT808UploadLocationRequest.Speed); //402653184
}
[Fact]
public void LatTest1_1()
@@ -840,7 +930,7 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
Assert.Equal(60, jT808UploadLocationRequest.Speed);
}
[Fact]
public void LatTest2()
@@ -890,7 +980,7 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
Assert.Equal(132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed); //402653184
Assert.Equal(60, jT808UploadLocationRequest.Speed); //402653184
}
[Fact]
public void LngTest1_1()
@@ -920,7 +1010,7 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed); //402653184
Assert.Equal(60, jT808UploadLocationRequest.Speed); //402653184
}
[Fact]
public void LngTest2()
@@ -970,7 +1060,7 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed); //402653184
Assert.Equal(60, jT808UploadLocationRequest.Speed); //402653184
}
}
}

+ 79
- 0
src/JT808.Protocol/Extensions/JT808_0X0200_FactoryExtensions.cs Целия файл

@@ -0,0 +1,79 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using static JT808.Protocol.MessageBody.JT808_0x8105;

namespace JT808.Protocol.Extensions
{
/// <summary>
/// 0200扩展
/// </summary>
public static class JT808_0X0200_FactoryExtensions
{
/// <summary>
/// 根据不同的版本号进行附加保留位判断
/// </summary>
/// <returns></returns>
public static bool TryGetValue(this IJT808_0x0200_Factory factory, JT808Version version, byte attachId, out object attachInstance)
{
if(factory == null)
{
attachInstance = default;
return false;
}
switch (version)
{
case JT808Version.JTT2013:
case JT808Version.JTT2013Force:
//协议保留
if (attachId>=0x5 && attachId <= 0x10)
{
attachInstance = default;
return false;
}
else if(attachId>=0x14 && attachId <= 0x24)
{
attachInstance = default;
return false;
}
else
{
return factory.Map.TryGetValue(attachId, out attachInstance);
}
case JT808Version.JTT2011:
//协议保留
if (attachId >= 0x4 && attachId <= 0xF)
{
attachInstance = default;
return false;
}
else
{
return factory.Map.TryGetValue(attachId, out attachInstance);
}
case JT808Version.JTT2019:
//协议保留
if (attachId >= 0x8 && attachId <= 0xF)
{
attachInstance = default;
return false;
}
else if (attachId >= 0x14 && attachId <= 0x24)
{
attachInstance = default;
return false;
}
else
{
return factory.Map.TryGetValue(attachId, out attachInstance);
}
default:
attachInstance = default;
return false;
}
}
}
}

+ 2
- 7
src/JT808.Protocol/JT808.Protocol.csproj Целия файл

@@ -56,23 +56,18 @@
<PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" />
<PackageReference Include="System.Memory" Version="4.5.4" />
<PackageReference Include="System.Reflection.Extensions" Version="4.3.0" />
<PackageReference Include="System.Text.Json" Version="6.0.1" />
<PackageReference Include="System.Text.Json" Version="6.0.3" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.1' ">
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Text.Json" Version="6.0.1" />
<PackageReference Include="System.Text.Json" Version="6.0.3" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net5.0' ">
<PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />


+ 11
- 0
src/JT808.Protocol/JT808.Protocol.xml Целия файл

@@ -3872,6 +3872,17 @@
<param name="fieldName"></param>
<param name="fixedLength"></param>
</member>
<member name="T:JT808.Protocol.Extensions.JT808_0X0200_FactoryExtensions">
<summary>
0200扩展
</summary>
</member>
<member name="M:JT808.Protocol.Extensions.JT808_0X0200_FactoryExtensions.TryGetValue(JT808.Protocol.Interfaces.IJT808_0x0200_Factory,JT808.Protocol.Enums.JT808Version,System.Byte,System.Object@)">
<summary>
根据不同的版本号进行附加保留位判断
</summary>
<returns></returns>
</member>
<member name="T:JT808.Protocol.Extensions.JT808_0x8105_CommandParameterExtensions">
<summary>
终端控制 命令参数扩展


+ 8
- 7
src/JT808.Protocol/MessageBody/JT808_0x0200.cs Целия файл

@@ -120,7 +120,7 @@ namespace JT808.Protocol.MessageBody
jT808_0X0200.Lat = reader.ReadInt32();
}
if (((jT808_0X0200.StatusFlag >> 27) & 1) == 1)
{ //西经 134217728 0x8000000
{ //西经 134217728 0x8000000
jT808_0X0200.Lng = (int)reader.ReadUInt32();
}
else
@@ -150,7 +150,7 @@ namespace JT808.Protocol.MessageBody
byte attachId = reader.ReadVirtualByte();
//自定义标准附加Id2、自定义标准附加Id3
ushort attachId2_3 = reader.ReadVirtualUInt16();
if (config.JT808_0X0200_Factory.Map.TryGetValue(attachId, out object attachInstance))
if (config.JT808_0X0200_Factory.TryGetValue(reader.Version, attachId, out object attachInstance))
{
if (jT808_0X0200.BasicLocationAttachData.ContainsKey(attachId))
{
@@ -234,7 +234,8 @@ namespace JT808.Protocol.MessageBody
int remainLength = reader.ReadCurrentRemainContentLength();
if(remainLength < attachLen)
{
jT808_0X0200.ExceptionLocationAttachOriginalData.Add(reader.ReadArray(remainLength).ToArray());
jT808_0X0200.ExceptionLocationAttachOriginalData.Add(reader.ReadArray(reader.ReaderCount - 2, remainLength+2).ToArray());
reader.ReadArray(remainLength);
}
else
{
@@ -282,7 +283,7 @@ namespace JT808.Protocol.MessageBody
writer.WriteUInt32(value.AlarmFlag);
writer.WriteUInt32(value.StatusFlag);
//0x10000000 南纬 134217728
//0x8000000 西经 ‭‬268435456
//0x8000000 西经 268435456
//0x18000000 南纬-西经 134217728+268435456
if (((value.StatusFlag >> 28) & 1) == 1)
{
@@ -497,7 +498,7 @@ namespace JT808.Protocol.MessageBody
writer.WriteNumber($"[{value.Lat.ReadNumber()}]纬度", value.Lat);
}
if (((value.StatusFlag >> 27) & 1) == 1)
{ //西经 134217728 0x8000000
{ //西经 134217728 0x8000000
value.Lng = (int)reader.ReadUInt32();
writer.WriteNumber($"[{value.Lng.ReadNumber()}]经度", value.Lng);
}
@@ -533,7 +534,7 @@ namespace JT808.Protocol.MessageBody
byte attachId = reader.ReadVirtualByte();
//自定义标准附加Id2、自定义标准附加Id3
ushort attachId2_3 = reader.ReadVirtualUInt16();
if (config.JT808_0X0200_Factory.Map.TryGetValue(attachId, out object attachInstance))
if (config.JT808_0X0200_Factory.TryGetValue(reader.Version, attachId, out object attachInstance))
{
if (value.BasicLocationAttachData.ContainsKey(attachId))
{
@@ -640,7 +641,7 @@ namespace JT808.Protocol.MessageBody
writer.WriteNumber($"[{attachLen.ReadNumber()}]未知附加信息长度", attachLen);
if ((attachLen+2) > remainLength)
{
writer.WriteString($"未知附加信息", reader.ReadArray(remainLength).ToArray().ToHexString());
writer.WriteString($"未知附加信息[异常解析]", reader.ReadArray(remainLength).ToArray().ToHexString());
}
else
{


Зареждане…
Отказ
Запис