@@ -18,8 +18,4 @@ jobs: | |||
- name: dotnet restore | |||
run: dotnet restore ./src/JTActiveSafety.sln | |||
- name: dotnet JTActiveSafety.Protocol build | |||
run: dotnet build ./src/JTActiveSafety.Protocol.Test/JTActiveSafety.Protocol.Test.csproj | |||
- name: dotnet JT808.Protocol.Extensions.JTActiveSafety build | |||
run: dotnet test ./src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808.Protocol.Extensions.JTActiveSafety.Test.csproj | |||
- name: dotnet JT808.Protocol.Extensions.JTActiveSafety test | |||
run: dotnet test ./src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808.Protocol.Extensions.JTActiveSafety.Test.csproj | |||
run: dotnet build ./src/JTActiveSafety.Protocol.Test/JTActiveSafety.Protocol.Test.csproj |
@@ -12,37 +12,4 @@ JTActiveSafety协议、道路运输车辆主动安全智能防控系统-主动 | |||
| Package Name | Version | Downloads| Remark | | |||
| --------------------- | -------------------------------------------------- | --------------------------------------------------- |--------------------------------------------------- | | |||
| Install-Package JTActiveSafety|  |  |主动安全的附件协议| | |||
| Install-Package JT808 |  |  |基础JT808协议| | |||
| Install-Package JT808.Protocol.Extensions.JTActiveSafety|  |  |基于JT808扩展的JTActiveSafety消息协议| | |||
### JT808扩展协议消息对照表 | |||
| 序号 | 消息ID | 完成情况 | 测试情况 | 消息体名称 | | |||
| :---: | :---: | :---: | :---: | :---:| | |||
| 1 | 0x1210 | √ | √ | 报警附件信息消息 | | |||
| 2 | 0x1211 | √ | √ | 文件信息上传 | | |||
| 3 | 0x1212 | √ | √ | 文件上传完成消息 | | |||
| 4 | 0x9208 | √ | √ | 报警附件上传指令 | | |||
| 5 | 0x9212 | √ | √ | 文件上传完成消息应答 | | |||
| 6 | 0x0200_0x64 | √ | √ | 高级驾驶辅助系统报警信息 | | |||
| 7 | 0x0200_0x65 | √ | √ | 驾驶员状态监测系统报警信息 | | |||
| 8 | 0x0200_0x66 | √ | √ | 胎压监测系统报警信息 | | |||
| 9 | 0x0200_0x67 | √ | √ | 盲区监测系统报警信息 | | |||
| 10 | 0x8103_0xF364 | √ | √ | 高级驾驶辅助系统参数 | | |||
| 11 | 0x8103_0xF365 | √ | √ | 驾驶员状态监测系统参数 | | |||
| 12 | 0x8103_0xF366 | √ | √ | 胎压监测系统参数 | | |||
| 13 | 0x8103_0xF367 | √ | √ | 盲区监测系统参数 | | |||
| 14 | 0x0900 | √ | √ | 上传基本信息 | | |||
| 15 | 0x0900_0xF7 | √ | √ | 外设工作状态 | | |||
| 16 | 0x0900_0xF8 | √ | √ | 外设系统信息 | | |||
| 17 | 0x8900 | √ | √ | 查询基本信息 | | |||
| 18 | 0x8900_0xF7 | √ | √ | 外设工作状态 | | |||
| 19 | 0x8900_0xF8 | √ | √ | 外设系统信息 | | |||
### 使用方法 | |||
```dotnet | |||
IServiceCollection serviceDescriptors1 = new ServiceCollection(); | |||
serviceDescriptors1.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
``` |
@@ -1,30 +0,0 @@ | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<PropertyGroup> | |||
<TargetFramework>net5.0</TargetFramework> | |||
<IsPackable>false</IsPackable> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<None Include="..\..\LICENSE" Link="LICENSE"> | |||
<PackagePath></PackagePath> | |||
<Pack>True</Pack> | |||
</None> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" /> | |||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" /> | |||
<PackageReference Include="xunit" Version="2.4.1" /> | |||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> | |||
<PrivateAssets>all</PrivateAssets> | |||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | |||
</PackageReference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\JT808.Protocol.Extensions.JTActiveSafety\JT808.Protocol.Extensions.JTActiveSafety.csproj" /> | |||
</ItemGroup> | |||
</Project> |
@@ -1,100 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x0200_0x64_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x0200_0x64_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200 | |||
{ | |||
AlarmFlag = 1, | |||
Altitude = 40, | |||
GPSTime = DateTime.Parse("2018-07-15 10:10:10"), | |||
Lat = 12222222, | |||
Lng = 132444444, | |||
Speed = 60, | |||
Direction = 0, | |||
StatusFlag = 2, | |||
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>() | |||
}; | |||
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x64, new JT808_0x0200_0x64 | |||
{ | |||
AlarmId = 1, | |||
AlarmIdentification = new Metadata.AlarmIdentificationProperty | |||
{ | |||
AttachCount = 2, | |||
SN = 3, | |||
TerminalID = "4444444", | |||
Time = Convert.ToDateTime("2019-12-10 18:31:00") | |||
}, | |||
AlarmLevel = 5, | |||
AlarmOrEventType = 6, | |||
AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"), | |||
Altitude = 7, | |||
CarOrPedestrianDistanceAhead = 10, | |||
DeviateType = 11, | |||
FlagState = 12, | |||
Latitude = 13, | |||
Longitude = 14, | |||
RoadSignIdentificationData = 15, | |||
RoadSignIdentificationType = 16, | |||
Speed = 17, | |||
VehicleSpeed = 18, | |||
VehicleState = 19 | |||
}); | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106420000000010C0605120A0B100F1100070000000D0000000E191211183100001334343434343434191210183100030200", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C00001807151010106420000000010C0605120A0B100F1100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes()); | |||
jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_JTActiveSafety_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); | |||
Assert.Equal(3, jT808_0X0200_0X64.AlarmIdentification.SN); | |||
Assert.Equal("4444444", jT808_0X0200_0X64.AlarmIdentification.TerminalID); | |||
Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X64.AlarmIdentification.Time); | |||
Assert.Equal(5, jT808_0X0200_0X64.AlarmLevel); | |||
Assert.Equal(6, jT808_0X0200_0X64.AlarmOrEventType); | |||
Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X64.AlarmTime); | |||
Assert.Equal(7, jT808_0X0200_0X64.Altitude); | |||
Assert.Equal(0x64, jT808_0X0200_0X64.AttachInfoId); | |||
Assert.Equal(32, jT808_0X0200_0X64.AttachInfoLength); | |||
Assert.Equal(10, jT808_0X0200_0X64.CarOrPedestrianDistanceAhead); | |||
Assert.Equal(11, jT808_0X0200_0X64.DeviateType); | |||
Assert.Equal(12, jT808_0X0200_0X64.FlagState); | |||
Assert.Equal(13, jT808_0X0200_0X64.Latitude); | |||
Assert.Equal(14, jT808_0X0200_0X64.Longitude); | |||
Assert.Equal(15, jT808_0X0200_0X64.RoadSignIdentificationData); | |||
Assert.Equal(16, jT808_0X0200_0X64.RoadSignIdentificationType); | |||
Assert.Equal(17, jT808_0X0200_0X64.Speed); | |||
Assert.Equal(18, jT808_0X0200_0X64.VehicleSpeed); | |||
Assert.Equal(19, jT808_0X0200_0X64.VehicleState); | |||
} | |||
[Fact] | |||
public void Deserialize1() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C00001807151010106420000000010C0605120A0B100F1100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,94 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x0200_0x65_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x0200_0x65_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200 | |||
{ | |||
AlarmFlag = 1, | |||
Altitude = 40, | |||
GPSTime = DateTime.Parse("2018-07-15 10:10:10"), | |||
Lat = 12222222, | |||
Lng = 132444444, | |||
Speed = 60, | |||
Direction = 0, | |||
StatusFlag = 2, | |||
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>() | |||
}; | |||
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x65, new JT808_0x0200_0x65 | |||
{ | |||
AlarmId = 1, | |||
AlarmIdentification = new Metadata.AlarmIdentificationProperty | |||
{ | |||
AttachCount = 2, | |||
SN = 3, | |||
TerminalID = "4444444", | |||
Time = Convert.ToDateTime("2019-12-10 18:31:00") | |||
}, | |||
AlarmLevel = 5, | |||
AlarmOrEventType = 6, | |||
AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"), | |||
Altitude = 7, | |||
Retain=new byte[] { 1, 2, 3, 4 }, | |||
FlagState = 12, | |||
Latitude = 13, | |||
Longitude = 14, | |||
Speed = 17, | |||
Fatigue=18, | |||
VehicleState = 19 | |||
}); | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010652F000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C00001807151010106520000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes()); | |||
jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_JTActiveSafety_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); | |||
Assert.Equal(3, jT808_0X0200_0X65.AlarmIdentification.SN); | |||
Assert.Equal("4444444", jT808_0X0200_0X65.AlarmIdentification.TerminalID); | |||
Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X65.AlarmIdentification.Time); | |||
Assert.Equal(5, jT808_0X0200_0X65.AlarmLevel); | |||
Assert.Equal(6, jT808_0X0200_0X65.AlarmOrEventType); | |||
Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X65.AlarmTime); | |||
Assert.Equal(7, jT808_0X0200_0X65.Altitude); | |||
Assert.Equal(0x65, jT808_0X0200_0X65.AttachInfoId); | |||
Assert.Equal(32, jT808_0X0200_0X65.AttachInfoLength); | |||
Assert.Equal(new byte[] { 1, 2, 3, 4 }.ToHexString(), jT808_0X0200_0X65.Retain.ToHexString()); | |||
Assert.Equal(12, jT808_0X0200_0X65.FlagState); | |||
Assert.Equal(13, jT808_0X0200_0X65.Latitude); | |||
Assert.Equal(14, jT808_0X0200_0X65.Longitude); | |||
Assert.Equal(17, jT808_0X0200_0X65.Speed); | |||
Assert.Equal(18, jT808_0X0200_0X65.Fatigue); | |||
Assert.Equal(19, jT808_0X0200_0X65.VehicleState); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C00001807151010106520000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,114 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x0200_0x66_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x0200_0x66_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200 | |||
{ | |||
AlarmFlag = 1, | |||
Altitude = 40, | |||
GPSTime = DateTime.Parse("2018-07-15 10:10:10"), | |||
Lat = 12222222, | |||
Lng = 132444444, | |||
Speed = 60, | |||
Direction = 0, | |||
StatusFlag = 2, | |||
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>() | |||
}; | |||
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x66, new JT808_0x0200_0x66 | |||
{ | |||
AlarmId = 1, | |||
AlarmIdentification = new Metadata.AlarmIdentificationProperty | |||
{ | |||
AttachCount = 2, | |||
SN = 3, | |||
TerminalID = "4444444", | |||
Time = Convert.ToDateTime("2019-12-10 18:31:00") | |||
}, | |||
AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"), | |||
Altitude = 7, | |||
AlarmOrEventCount = 2, | |||
AlarmOrEvents = new List<Metadata.AlarmOrEventProperty> { | |||
new Metadata.AlarmOrEventProperty{ | |||
AlarmOrEventType=1, | |||
BatteryLevel=2, | |||
TirePressure=3, | |||
TirePressureAlarmPosition=4, | |||
TireTemperature=5 | |||
}, | |||
new Metadata.AlarmOrEventProperty{ | |||
AlarmOrEventType=6, | |||
BatteryLevel=7, | |||
TirePressure=8, | |||
TirePressureAlarmPosition=9, | |||
TireTemperature=10 | |||
} | |||
}, | |||
FlagState = 12, | |||
Latitude = 13, | |||
Longitude = 14, | |||
Speed = 17, | |||
VehicleState = 19 | |||
}); | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007".ToHexBytes()); | |||
jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_JTActiveSafety_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); | |||
Assert.Equal(3, jT808_0X0200_0X66.AlarmIdentification.SN); | |||
Assert.Equal("4444444", jT808_0X0200_0X66.AlarmIdentification.TerminalID); | |||
Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X66.AlarmIdentification.Time); | |||
Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X66.AlarmTime); | |||
Assert.Equal(7, jT808_0X0200_0X66.Altitude); | |||
Assert.Equal(2, jT808_0X0200_0X66.AlarmOrEventCount); | |||
Assert.Equal(1, jT808_0X0200_0X66.AlarmOrEvents[0].AlarmOrEventType); | |||
Assert.Equal(2, jT808_0X0200_0X66.AlarmOrEvents[0].BatteryLevel); | |||
Assert.Equal(3, jT808_0X0200_0X66.AlarmOrEvents[0].TirePressure); | |||
Assert.Equal(4, jT808_0X0200_0X66.AlarmOrEvents[0].TirePressureAlarmPosition); | |||
Assert.Equal(5, jT808_0X0200_0X66.AlarmOrEvents[0].TireTemperature); | |||
Assert.Equal(6, jT808_0X0200_0X66.AlarmOrEvents[1].AlarmOrEventType); | |||
Assert.Equal(7, jT808_0X0200_0X66.AlarmOrEvents[1].BatteryLevel); | |||
Assert.Equal(8, jT808_0X0200_0X66.AlarmOrEvents[1].TirePressure); | |||
Assert.Equal(9, jT808_0X0200_0X66.AlarmOrEvents[1].TirePressureAlarmPosition); | |||
Assert.Equal(10, jT808_0X0200_0X66.AlarmOrEvents[1].TireTemperature); | |||
Assert.Equal(0x66, jT808_0X0200_0X66.AttachInfoId); | |||
Assert.Equal(12, jT808_0X0200_0X66.FlagState); | |||
Assert.Equal(13, jT808_0X0200_0X66.Latitude); | |||
Assert.Equal(14, jT808_0X0200_0X66.Longitude); | |||
Assert.Equal(17, jT808_0X0200_0X66.Speed); | |||
Assert.Equal(19, jT808_0X0200_0X66.VehicleState); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,89 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x0200_0x67_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x0200_0x67_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200 | |||
{ | |||
AlarmFlag = 1, | |||
Altitude = 40, | |||
GPSTime = DateTime.Parse("2018-07-15 10:10:10"), | |||
Lat = 12222222, | |||
Lng = 132444444, | |||
Speed = 60, | |||
Direction = 0, | |||
StatusFlag = 2, | |||
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>() | |||
}; | |||
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x67, new JT808_0x0200_0x67 | |||
{ | |||
AlarmId = 1, | |||
AlarmIdentification = new Metadata.AlarmIdentificationProperty | |||
{ | |||
AttachCount = 2, | |||
SN = 3, | |||
TerminalID = "4444444", | |||
Time = Convert.ToDateTime("2019-12-10 18:31:00") | |||
}, | |||
AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"), | |||
Altitude = 7, | |||
AlarmLevel=8, | |||
AlarmOrEventType=9, | |||
FlagState = 12, | |||
Latitude = 13, | |||
Longitude = 14, | |||
Speed = 17, | |||
VehicleState = 19 | |||
}); | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010671A000000010C09081100070000000D0000000E191211183100001334343434343434191210183100030200", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C0000180715101010671A000000010C09081100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes()); | |||
jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_JTActiveSafety_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); | |||
Assert.Equal(3, jT808_0X0200_0X67.AlarmIdentification.SN); | |||
Assert.Equal("4444444", jT808_0X0200_0X67.AlarmIdentification.TerminalID); | |||
Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X67.AlarmIdentification.Time); | |||
Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X67.AlarmTime); | |||
Assert.Equal(7, jT808_0X0200_0X67.Altitude); | |||
Assert.Equal(8, jT808_0X0200_0X67.AlarmLevel); | |||
Assert.Equal(9, jT808_0X0200_0X67.AlarmOrEventType); | |||
Assert.Equal(0x67, jT808_0X0200_0X67.AttachInfoId); | |||
Assert.Equal(26, jT808_0X0200_0X67.AttachInfoLength); | |||
Assert.Equal(12, jT808_0X0200_0X67.FlagState); | |||
Assert.Equal(13, jT808_0X0200_0X67.Latitude); | |||
Assert.Equal(14, jT808_0X0200_0X67.Longitude); | |||
Assert.Equal(17, jT808_0X0200_0X67.Speed); | |||
Assert.Equal(19, jT808_0X0200_0X67.VehicleState); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x0200>("000000010000000200BA7F0E07E4F11C0028003C0000180715101010671A000000010C09081100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,120 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x0900_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x0900_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Test_0xF7_1() | |||
{ | |||
JT808_0x0900_0xF7 jT808_0x0900_0xF7 = new JT808_0x0900_0xF7 | |||
{ | |||
USBMessageCount = 2, | |||
USBMessages = new List<JT808_0x0900_0xF7_USB> { | |||
new JT808_0x0900_0xF7_USB { | |||
USBID = 1, | |||
AlarmStatus = 1, | |||
WorkingCondition = 2 | |||
}, | |||
new JT808_0x0900_0xF7_USB { | |||
USBID = 2, | |||
AlarmStatus = 1, | |||
WorkingCondition = 2 | |||
} | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808_0x0900_0xF7).ToHexString(); | |||
Assert.Equal("020105020000000102050200000001", hex); | |||
} | |||
[Fact] | |||
public void Test_0xF7_2() | |||
{ | |||
var jT808_0x0900_0xF7 = JT808Serializer.Deserialize<JT808_0x0900_0xF7>("020105020000000102050200000001".ToHexBytes()); | |||
Assert.Equal(JT808_JTActiveSafety_Constants.JT808_0X0900_0xF7, jT808_0x0900_0xF7.PassthroughType); | |||
Assert.Equal(2, jT808_0x0900_0xF7.USBMessageCount); | |||
Assert.Equal(1, jT808_0x0900_0xF7.USBMessages[0].USBID); | |||
Assert.Equal(5, jT808_0x0900_0xF7.USBMessages[0].MessageLength); | |||
Assert.Equal(2, jT808_0x0900_0xF7.USBMessages[0].WorkingCondition); | |||
Assert.Equal(1u, jT808_0x0900_0xF7.USBMessages[0].AlarmStatus); | |||
Assert.Equal(2, jT808_0x0900_0xF7.USBMessages[1].USBID); | |||
Assert.Equal(5, jT808_0x0900_0xF7.USBMessages[1].MessageLength); | |||
Assert.Equal(2, jT808_0x0900_0xF7.USBMessages[1].WorkingCondition); | |||
Assert.Equal(1u, jT808_0x0900_0xF7.USBMessages[1].AlarmStatus); | |||
} | |||
[Fact] | |||
public void Test_0xF7_3() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x0900_0xF7>("020105020000000102050200000001".ToHexBytes()); | |||
} | |||
[Fact] | |||
public void Test_0xF8_1() | |||
{ | |||
JT808_0x0900_0xF8 jT808_0x0900_0xF8 = new JT808_0x0900_0xF8 | |||
{ | |||
USBMessageCount = 1, | |||
USBMessages = new List<JT808_0x0900_0xF8_USB> { | |||
new JT808_0x0900_0xF8_USB { | |||
USBID = 1, | |||
CompantName = "CompantName", | |||
CustomerCode = "CustomerCode", | |||
DevicesID = "DevicesID", | |||
HardwareVersionNumber = "HardwareVersionNumber", | |||
ProductModel = "ProductModel", | |||
SoftwareVersionNumber = "SoftwareVersionNumber" | |||
} | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808_0x0900_0xF8).ToHexString(); | |||
Assert.Equal("01015C0B436F6D70616E744E616D650C50726F647563744D6F64656C15486172647761726556657273696F6E4E756D62657215536F66747761726556657273696F6E4E756D626572094465766963657349440C437573746F6D6572436F6465", hex); | |||
} | |||
[Fact] | |||
public void Test_0xF8_2() | |||
{ | |||
var jT808_0x0900_0xF8 = JT808Serializer.Deserialize<JT808_0x0900_0xF8>("01015C0B436F6D70616E744E616D650C50726F647563744D6F64656C15486172647761726556657273696F6E4E756D62657215536F66747761726556657273696F6E4E756D626572094465766963657349440C437573746F6D6572436F6465".ToHexBytes()); | |||
Assert.Equal(JT808_JTActiveSafety_Constants.JT808_0X0900_0xF8, jT808_0x0900_0xF8.PassthroughType); | |||
Assert.Equal(1, jT808_0x0900_0xF8.USBMessageCount); | |||
Assert.Equal(1, jT808_0x0900_0xF8.USBMessages[0].USBID); | |||
Assert.Equal("CompantName", jT808_0x0900_0xF8.USBMessages[0].CompantName); | |||
Assert.Equal("CompantName".Length, jT808_0x0900_0xF8.USBMessages[0].CompantNameLength); | |||
Assert.Equal("CustomerCode", jT808_0x0900_0xF8.USBMessages[0].CustomerCode); | |||
Assert.Equal("CustomerCode".Length, jT808_0x0900_0xF8.USBMessages[0].CustomerCodeLength); | |||
Assert.Equal("DevicesID", jT808_0x0900_0xF8.USBMessages[0].DevicesID); | |||
Assert.Equal("DevicesID".Length, jT808_0x0900_0xF8.USBMessages[0].DevicesIDLength); | |||
Assert.Equal("HardwareVersionNumber", jT808_0x0900_0xF8.USBMessages[0].HardwareVersionNumber); | |||
Assert.Equal("HardwareVersionNumber".Length, jT808_0x0900_0xF8.USBMessages[0].HardwareVersionNumberLength); | |||
Assert.Equal("ProductModel", jT808_0x0900_0xF8.USBMessages[0].ProductModel); | |||
Assert.Equal("ProductModel".Length, jT808_0x0900_0xF8.USBMessages[0].ProductModelLength); | |||
Assert.Equal("SoftwareVersionNumber", jT808_0x0900_0xF8.USBMessages[0].SoftwareVersionNumber); | |||
Assert.Equal("SoftwareVersionNumber".Length, jT808_0x0900_0xF8.USBMessages[0].SoftwareVersionNumberLength); | |||
} | |||
[Fact] | |||
public void Test_0xF8_3() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x0900_0xF8>("01015C0B436F6D70616E744E616D650C50726F647563744D6F64656C15486172647761726556657273696F6E4E756D62657215536F66747761726556657273696F6E4E756D626572094465766963657349440C437573746F6D6572436F6465".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,81 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x1210_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x1210_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x1210 jT808UploadLocationRequest = new JT808_0x1210 | |||
{ | |||
AlarmId = "11111111111111111111111111111111", | |||
AlarmIdentification = new Metadata.AlarmIdentificationProperty | |||
{ | |||
Retain = 1, | |||
AttachCount = 2, | |||
SN = 3, | |||
TerminalID = "4444444", | |||
Time = Convert.ToDateTime("2019-12-10 18:31:00") | |||
}, | |||
AttachInfos = new List<Metadata.AttachProperty> { | |||
new Metadata.AttachProperty{ | |||
FileName="filename", | |||
FileSize=9 | |||
}, | |||
new Metadata.AttachProperty{ | |||
FileName="filename1", | |||
FileSize=10 | |||
} | |||
}, | |||
MakerID = "4444444", | |||
InfoType = 0 | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("3434343434343434343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100020866696C656E616D65000000090966696C656E616D65310000000A", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x1210>("3434343434343434343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100020866696C656E616D65000000090966696C656E616D65310000000A".ToHexBytes()); | |||
Assert.Equal("11111111111111111111111111111111", jT808UploadLocationRequest.AlarmId); | |||
Assert.Equal(2, jT808UploadLocationRequest.AlarmIdentification.AttachCount); | |||
Assert.Equal(3, jT808UploadLocationRequest.AlarmIdentification.SN); | |||
Assert.Equal("4444444", jT808UploadLocationRequest.AlarmIdentification.TerminalID); | |||
Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808UploadLocationRequest.AlarmIdentification.Time); | |||
Assert.Equal(2, jT808UploadLocationRequest.AttachCount); | |||
Assert.Equal("filename", jT808UploadLocationRequest.AttachInfos[0].FileName); | |||
Assert.Equal(8, jT808UploadLocationRequest.AttachInfos[0].FileNameLength); | |||
Assert.Equal(9u, jT808UploadLocationRequest.AttachInfos[0].FileSize); | |||
Assert.Equal("filename1", jT808UploadLocationRequest.AttachInfos[1].FileName); | |||
Assert.Equal(9, jT808UploadLocationRequest.AttachInfos[1].FileNameLength); | |||
Assert.Equal(10u, jT808UploadLocationRequest.AttachInfos[1].FileSize); | |||
Assert.Equal("4444444", jT808UploadLocationRequest.MakerID); | |||
Assert.Equal(0, jT808UploadLocationRequest.InfoType); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x1210>("3434343434343434343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100020866696C656E616D65000000090966696C656E616D65310000000A".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,50 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x1211_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x1211_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x1211 jT808UploadLocationRequest = new JT808_0x1211 | |||
{ | |||
FileName= "FileName", | |||
FileSize=1, | |||
FileType=2 | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("0846696C654E616D650200000001", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x1211>("0846696C654E616D650200000001".ToHexBytes()); | |||
Assert.Equal("FileName", jT808UploadLocationRequest.FileName); | |||
Assert.Equal(1u, jT808UploadLocationRequest.FileSize); | |||
Assert.Equal(2, jT808UploadLocationRequest.FileType); | |||
Assert.Equal("FileName".Length, jT808UploadLocationRequest.FileNameLength); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x1211>("0846696C654E616D650200000001".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,44 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x1212_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x1212_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x1212 jT808UploadLocationRequest = new JT808_0x1212 | |||
{ | |||
FileName= "FileName", | |||
FileSize=1, | |||
FileType=2 | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("0846696C654E616D650200000001", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x1212>("0846696C654E616D650200000001".ToHexBytes()); | |||
Assert.Equal("FileName", jT808UploadLocationRequest.FileName); | |||
Assert.Equal(1u, jT808UploadLocationRequest.FileSize); | |||
Assert.Equal(2, jT808UploadLocationRequest.FileType); | |||
Assert.Equal("FileName".Length, jT808UploadLocationRequest.FileNameLength); | |||
} | |||
} | |||
} |
@@ -1,139 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x8103_0xF364_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x8103_0xF364_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103 | |||
{ | |||
ParamList=new List<JT808_0x8103_BodyBase> { | |||
new JT808_0x8103_0xF364{ | |||
ActiveDistancePhotographyDistanceInterval=1, | |||
ActivelyTimePhotoInterval=2, | |||
ActivePhotographyStrategy=3, | |||
AlarmEnable=4, | |||
AlarmJudgeSpeedThreshold=5, | |||
AlarmPhotoVehicleCloseDistance=6, | |||
AlarmPhotoVehicleCloseDistanceInterval=7, | |||
BarrierAlarmPhotographs=8, | |||
DistanceThresholdObstacleAlarm=9, | |||
EventEnable=10, | |||
ForwardCollisionAlarmInterval=11, | |||
ForwardCollisionAlarmPhotographs=12, | |||
ForwardCollisionWarningTimeThreshold=13, | |||
FrequentAlarmJudgmentNumberChannelChange=14, | |||
FrequentChannelChangeAlarmJudgmentTimePeriod=15, | |||
FrequentChannelChangeAlarmPhotos=16, | |||
FrequentLaneChangeAlarmInterval=17, | |||
GradedSpeedThresholdLaneDeviationAlarm=18, | |||
HierarchicalSpeedThresholdForwardCollisionWarning=19, | |||
HierarchicalSpeedThresholdFrequentChannelChangeAlarm=20, | |||
HierarchicalSpeedThresholdObstacleAlarm=21, | |||
LaneDepartureAlarmPhoto=22, | |||
LaneDepartureAlarmPhotoInterval=23, | |||
ObstacleAlarmInterval=24, | |||
PedestrianCollisionAlarmEnablingSpeedThreshold=25, | |||
PedestrianCollisionAlarmInterval=26, | |||
PedestrianCollisionAlarmPhotos=27, | |||
PedestrianCollisionAlarmTimeThreshold=28, | |||
PhotoResolution=29, | |||
Placeholder1=30, | |||
Placeholder2=new byte[]{1,2,3,4 }, | |||
RoadSignRecognitionPhotographs=32, | |||
RoadSignRecognitionPhotographsInterval=33, | |||
SingleInitiativePhotos=34, | |||
SingleInitiativePhotosInterval=35, | |||
VehicleDistanceMonitoringAlarmDistanceThreshold=36, | |||
VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold=37, | |||
VideoRecordingResolution=38, | |||
VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity=39, | |||
VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm=40, | |||
VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm=41, | |||
VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm=42, | |||
VideoRecordingTimeBeforeAndAfterObstacleAlarm=43, | |||
VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm=44, | |||
WarningVolume=45 | |||
} | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x8103>("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304".ToHexBytes()); | |||
JT808_0x8103_0xF364 jT808_0X8103_0XF364 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF364; | |||
Assert.Equal(1, jT808_0X8103_0XF364.ActiveDistancePhotographyDistanceInterval); | |||
Assert.Equal(2, jT808_0X8103_0XF364.ActivelyTimePhotoInterval); | |||
Assert.Equal(3, jT808_0X8103_0XF364.ActivePhotographyStrategy); | |||
Assert.Equal(4u, jT808_0X8103_0XF364.AlarmEnable); | |||
Assert.Equal(5, jT808_0X8103_0XF364.AlarmJudgeSpeedThreshold); | |||
Assert.Equal(6, jT808_0X8103_0XF364.AlarmPhotoVehicleCloseDistance); | |||
Assert.Equal(7, jT808_0X8103_0XF364.AlarmPhotoVehicleCloseDistanceInterval); | |||
Assert.Equal(8, jT808_0X8103_0XF364.BarrierAlarmPhotographs); | |||
Assert.Equal(9, jT808_0X8103_0XF364.DistanceThresholdObstacleAlarm); | |||
Assert.Equal(10u, jT808_0X8103_0XF364.EventEnable); | |||
Assert.Equal(11, jT808_0X8103_0XF364.ForwardCollisionAlarmInterval); | |||
Assert.Equal(12, jT808_0X8103_0XF364.ForwardCollisionAlarmPhotographs); | |||
Assert.Equal(13, jT808_0X8103_0XF364.ForwardCollisionWarningTimeThreshold); | |||
Assert.Equal(14, jT808_0X8103_0XF364.FrequentAlarmJudgmentNumberChannelChange); | |||
Assert.Equal(15, jT808_0X8103_0XF364.FrequentChannelChangeAlarmJudgmentTimePeriod); | |||
Assert.Equal(16, jT808_0X8103_0XF364.FrequentChannelChangeAlarmPhotos); | |||
Assert.Equal(17, jT808_0X8103_0XF364.FrequentLaneChangeAlarmInterval); | |||
Assert.Equal(18, jT808_0X8103_0XF364.GradedSpeedThresholdLaneDeviationAlarm); | |||
Assert.Equal(19, jT808_0X8103_0XF364.HierarchicalSpeedThresholdForwardCollisionWarning); | |||
Assert.Equal(20, jT808_0X8103_0XF364.HierarchicalSpeedThresholdFrequentChannelChangeAlarm); | |||
Assert.Equal(21, jT808_0X8103_0XF364.HierarchicalSpeedThresholdObstacleAlarm); | |||
Assert.Equal(22, jT808_0X8103_0XF364.LaneDepartureAlarmPhoto); | |||
Assert.Equal(23, jT808_0X8103_0XF364.LaneDepartureAlarmPhotoInterval); | |||
Assert.Equal(24, jT808_0X8103_0XF364.ObstacleAlarmInterval); | |||
Assert.Equal(25, jT808_0X8103_0XF364.PedestrianCollisionAlarmEnablingSpeedThreshold); | |||
Assert.Equal(26, jT808_0X8103_0XF364.PedestrianCollisionAlarmInterval); | |||
Assert.Equal(27, jT808_0X8103_0XF364.PedestrianCollisionAlarmPhotos); | |||
Assert.Equal(28, jT808_0X8103_0XF364.PedestrianCollisionAlarmTimeThreshold); | |||
Assert.Equal(29, jT808_0X8103_0XF364.PhotoResolution); | |||
Assert.Equal(30, jT808_0X8103_0XF364.Placeholder1); | |||
Assert.Equal(new byte[] { 1, 2, 3, 4 }.ToHexString(), jT808_0X8103_0XF364.Placeholder2.ToHexString()); | |||
Assert.Equal(32, jT808_0X8103_0XF364.RoadSignRecognitionPhotographs); | |||
Assert.Equal(33, jT808_0X8103_0XF364.RoadSignRecognitionPhotographsInterval); | |||
Assert.Equal(34, jT808_0X8103_0XF364.SingleInitiativePhotos); | |||
Assert.Equal(35, jT808_0X8103_0XF364.SingleInitiativePhotosInterval); | |||
Assert.Equal(36, jT808_0X8103_0XF364.VehicleDistanceMonitoringAlarmDistanceThreshold); | |||
Assert.Equal(37, jT808_0X8103_0XF364.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold); | |||
Assert.Equal(38, jT808_0X8103_0XF364.VideoRecordingResolution); | |||
Assert.Equal(39, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity); | |||
Assert.Equal(40, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm); | |||
Assert.Equal(41, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm); | |||
Assert.Equal(42, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm); | |||
Assert.Equal(43, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterObstacleAlarm); | |||
Assert.Equal(44, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm); | |||
Assert.Equal(45, jT808_0X8103_0XF364.WarningVolume); | |||
Assert.Equal(JT808_JTActiveSafety_Constants.JT808_0X8103_0xF364, jT808_0X8103_0XF364.ParamId); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x8103>("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,116 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x8103_0xF365_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x8103_0xF365_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103 | |||
{ | |||
ParamList=new List<JT808_0x8103_BodyBase> { | |||
new JT808_0x8103_0xF365{ | |||
ActiveDistancePhotographyDistanceInterval=1, | |||
ActivelyTimePhotoInterval=2, | |||
ActivePhotographyStrategy=3, | |||
AlarmEnable=4, | |||
AlarmJudgeSpeedThreshold=5, | |||
EventEnable=10, | |||
PhotoResolution=29, | |||
SingleInitiativePhotos=34, | |||
SingleInitiativePhotosInterval=35, | |||
VideoRecordingResolution=38, | |||
WarningVolume=45, | |||
CallAlarmDetermineTimeInterval=46, | |||
CallAlarmTakePicturesDriverFacialFeatures=47, | |||
CallAlarmTakePicturesDriverFacialFeaturesInterval=48, | |||
ClassifiedSpeedThresholdCallAlarm=49, | |||
ClassifiedSpeedThresholdDistractedDrivingAlarm=50, | |||
ClassifiedSpeedThresholdSmokingAlarm=51, | |||
DistractedDrivingAlarmPhotography=52, | |||
DistractedDrivingAlarmPhotographyInterval=53, | |||
DriverIdentificationTrigger=54, | |||
FatigueDrivingAlarmPhotograph=55, | |||
FatigueDrivingAlarmPhotographInterval=56, | |||
GradedSpeedThresholdFatigueDrivingAlarm=57, | |||
PhotographsAbnormalDrivingBehavior=58, | |||
PictureIntervalAbnormalDrivingBehavior=59, | |||
Reserve=new byte[]{1,2,3 }, | |||
Retain=new byte[]{5,6 }, | |||
SmokingAlarmPhotographsDriverFaceCharacteristics=60, | |||
SmokingAlarmPhotographsDriverFaceCharacteristicsInterval=61, | |||
TimeIntervalSmokingAlarmJudgment=62, | |||
VideoRecordingTimeAbnormalDrivingBehavior=63, | |||
VideoRecordingTimeBeforeAndAfterCallAlarm=64, | |||
VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm=65, | |||
VideoRecordingTimeBeforeAndAfterSmokingAlarm=66 | |||
} | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x8103>("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506".ToHexBytes()); | |||
JT808_0x8103_0xF365 jT808_0X8103_0XF365 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF365; | |||
Assert.Equal(1, jT808_0X8103_0XF365.ActiveDistancePhotographyDistanceInterval); | |||
Assert.Equal(2, jT808_0X8103_0XF365.ActivelyTimePhotoInterval); | |||
Assert.Equal(3, jT808_0X8103_0XF365.ActivePhotographyStrategy); | |||
Assert.Equal(4u, jT808_0X8103_0XF365.AlarmEnable); | |||
Assert.Equal(5, jT808_0X8103_0XF365.AlarmJudgeSpeedThreshold); | |||
Assert.Equal(10u, jT808_0X8103_0XF365.EventEnable); | |||
Assert.Equal(29, jT808_0X8103_0XF365.PhotoResolution); | |||
Assert.Equal(34, jT808_0X8103_0XF365.SingleInitiativePhotos); | |||
Assert.Equal(35, jT808_0X8103_0XF365.SingleInitiativePhotosInterval); | |||
Assert.Equal(38, jT808_0X8103_0XF365.VideoRecordingResolution); | |||
Assert.Equal(45, jT808_0X8103_0XF365.WarningVolume); | |||
Assert.Equal(46, jT808_0X8103_0XF365.CallAlarmDetermineTimeInterval); | |||
Assert.Equal(47, jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeatures); | |||
Assert.Equal(48, jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeaturesInterval); | |||
Assert.Equal(49, jT808_0X8103_0XF365.ClassifiedSpeedThresholdCallAlarm); | |||
Assert.Equal(50, jT808_0X8103_0XF365.ClassifiedSpeedThresholdDistractedDrivingAlarm); | |||
Assert.Equal(51, jT808_0X8103_0XF365.ClassifiedSpeedThresholdSmokingAlarm); | |||
Assert.Equal(52, jT808_0X8103_0XF365.DistractedDrivingAlarmPhotography); | |||
Assert.Equal(53, jT808_0X8103_0XF365.DistractedDrivingAlarmPhotographyInterval); | |||
Assert.Equal(54, jT808_0X8103_0XF365.DriverIdentificationTrigger); | |||
Assert.Equal(55, jT808_0X8103_0XF365.FatigueDrivingAlarmPhotograph); | |||
Assert.Equal(56, jT808_0X8103_0XF365.FatigueDrivingAlarmPhotographInterval); | |||
Assert.Equal(57, jT808_0X8103_0XF365.GradedSpeedThresholdFatigueDrivingAlarm); | |||
Assert.Equal(58, jT808_0X8103_0XF365.PhotographsAbnormalDrivingBehavior); | |||
Assert.Equal(59, jT808_0X8103_0XF365.PictureIntervalAbnormalDrivingBehavior); | |||
Assert.Equal(new byte[] { 1, 2, 3 }.ToHexString(), jT808_0X8103_0XF365.Reserve.ToHexString()); | |||
Assert.Equal(new byte[] { 5, 6 }.ToHexString(), jT808_0X8103_0XF365.Retain.ToHexString()); | |||
Assert.Equal(60, jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristics); | |||
Assert.Equal(61, jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval); | |||
Assert.Equal(62, jT808_0X8103_0XF365.TimeIntervalSmokingAlarmJudgment); | |||
Assert.Equal(63, jT808_0X8103_0XF365.VideoRecordingTimeAbnormalDrivingBehavior); | |||
Assert.Equal(64, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterCallAlarm); | |||
Assert.Equal(65, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm); | |||
Assert.Equal(66, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterSmokingAlarm); | |||
Assert.Equal(JT808_JTActiveSafety_Constants.JT808_0X8103_0xF365, jT808_0X8103_0XF365.ParamId); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x8103>("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,69 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x8103_0xF366_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x8103_0xF366_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103 | |||
{ | |||
ParamList=new List<JT808_0x8103_BodyBase> { | |||
new JT808_0x8103_0xF366{ | |||
HighTemperatureThreshold=1, | |||
HighVoltageThreshold=2, | |||
LowVoltageThreshold=3, | |||
NormalFetalPressure=4, | |||
Retain=new byte[]{1,2,3,4,5,6 }, | |||
SlowLeakageThreshold=5, | |||
ThresholdUnbalancedTirePressure=6, | |||
TimedReportingInterval=7, | |||
TyrePressureUnit=8, | |||
TyreSpecificationType="999999999999", | |||
VoltageThreshold=10 | |||
} | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("010000F366243939393939393939393939390008000400060005000300020001000A0007010203040506", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x8103>("010000F366243939393939393939393939390008000400060005000300020001000A0007010203040506".ToHexBytes()); | |||
JT808_0x8103_0xF366 jT808_0x8103_0xF366 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF366; | |||
Assert.Equal(1, jT808_0x8103_0xF366.HighTemperatureThreshold); | |||
Assert.Equal(2, jT808_0x8103_0xF366.HighVoltageThreshold); | |||
Assert.Equal(3, jT808_0x8103_0xF366.LowVoltageThreshold); | |||
Assert.Equal(4, jT808_0x8103_0xF366.NormalFetalPressure); | |||
Assert.Equal(new byte[] { 1, 2, 3, 4, 5, 6 }.ToHexString(), jT808_0x8103_0xF366.Retain.ToHexString()); | |||
Assert.Equal(5, jT808_0x8103_0xF366.SlowLeakageThreshold); | |||
Assert.Equal(6, jT808_0x8103_0xF366.ThresholdUnbalancedTirePressure); | |||
Assert.Equal(7, jT808_0x8103_0xF366.TimedReportingInterval); | |||
Assert.Equal(8, jT808_0x8103_0xF366.TyrePressureUnit); | |||
Assert.Equal("999999999999", jT808_0x8103_0xF366.TyreSpecificationType); | |||
Assert.Equal(10, jT808_0x8103_0xF366.VoltageThreshold); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x8103>("010000F366243939393939393939393939390008000400060005000300020001000A0007010203040506".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,51 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x8103_0xF367_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x8103_0xF367_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103 | |||
{ | |||
ParamList=new List<JT808_0x8103_BodyBase> { | |||
new JT808_0x8103_0xF367{ | |||
LateralRearApproachAlarmTimeThreshold=1, | |||
RearApproachAlarmTimeThreshold=2 | |||
} | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("010000F367020201", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x8103>("010000F367020201".ToHexBytes()); | |||
JT808_0x8103_0xF367 jT808_0x8103_0xF367 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF367; | |||
Assert.Equal(1, jT808_0x8103_0xF367.LateralRearApproachAlarmTimeThreshold); | |||
Assert.Equal(2, jT808_0x8103_0xF367.RearApproachAlarmTimeThreshold); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x8103>("010000F367020201".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,46 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x8900_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x8900_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x8900_0xF7 jT808UploadLocationRequest = new JT808_0x8900_0xF7 | |||
{ | |||
USBCount=2, | |||
MultipleUSB=new List<byte> {1,2 } | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("020102", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x8900_0xF7>("020102".ToHexBytes()); | |||
Assert.Equal(2, jT808UploadLocationRequest.USBCount); | |||
Assert.Equal(new List<byte> { 1, 2 }.ToArray().ToHexString(), jT808UploadLocationRequest.MultipleUSB.ToArray().ToHexString()); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x8900_0xF7>("020102".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,64 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x9208_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x9208_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x9208 jT808UploadLocationRequest = new JT808_0x9208 | |||
{ | |||
AlarmId="11111111111111111111111111111111", | |||
AlarmIdentification=new Metadata.AlarmIdentificationProperty { | |||
Retain=1, | |||
AttachCount = 2, | |||
SN = 3, | |||
TerminalID = "4444444", | |||
Time = Convert.ToDateTime("2019-12-10 18:31:00") | |||
}, | |||
AttachmentServerIP="192.168.1.1", | |||
AttachmentServerIPTcpPort=5000, | |||
AttachmentServerIPUdpPort=5001 | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("0B3139322E3136382E312E311388138934343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100000000000000000000000000000000", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x9208>("0B3139322E3136382E312E311388138934343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100000000000000000000000000000000".ToHexBytes()); | |||
Assert.Equal("11111111111111111111111111111111", jT808UploadLocationRequest.AlarmId); | |||
Assert.Equal(1, jT808UploadLocationRequest.AlarmIdentification.Retain); | |||
Assert.Equal(2, jT808UploadLocationRequest.AlarmIdentification.AttachCount); | |||
Assert.Equal(3, jT808UploadLocationRequest.AlarmIdentification.SN); | |||
Assert.Equal("4444444", jT808UploadLocationRequest.AlarmIdentification.TerminalID); | |||
Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808UploadLocationRequest.AlarmIdentification.Time); | |||
Assert.Equal("192.168.1.1", jT808UploadLocationRequest.AttachmentServerIP); | |||
Assert.Equal("192.168.1.1".Length, jT808UploadLocationRequest.AttachmentServerIPLength); | |||
Assert.Equal(5000, jT808UploadLocationRequest.AttachmentServerIPTcpPort); | |||
Assert.Equal(5001, jT808UploadLocationRequest.AttachmentServerIPUdpPort); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x9208>("0B3139322E3136382E312E311388138934343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100000000000000000000000000000000".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,66 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.MessageBody; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Test | |||
{ | |||
public class JT808_0x9212_Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x9212_Test() | |||
{ | |||
ServiceCollection serviceDescriptors = new ServiceCollection(); | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService<IJT808Config>(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Serializer() | |||
{ | |||
JT808_0x9212 jT808UploadLocationRequest = new JT808_0x9212 | |||
{ | |||
DataPackageCount=2, | |||
DataPackages=new List<Metadata.DataPackageProperty> { | |||
new Metadata.DataPackageProperty{ | |||
Length=10, | |||
Offset=20 | |||
}, | |||
new Metadata.DataPackageProperty{ | |||
Length=30, | |||
Offset=40 | |||
} | |||
}, | |||
FileName= "FileName", | |||
FileType=1, | |||
UploadResult=2 | |||
}; | |||
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); | |||
Assert.Equal("0846696C654E616D65010202000000140000000A000000280000001E", hex); | |||
} | |||
[Fact] | |||
public void Deserialize() | |||
{ | |||
var jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x9212>("0846696C654E616D65010202000000140000000A000000280000001E".ToHexBytes()); | |||
Assert.Equal(2, jT808UploadLocationRequest.DataPackageCount); | |||
Assert.Equal("FileName", jT808UploadLocationRequest.FileName); | |||
Assert.Equal(1, jT808UploadLocationRequest.FileType); | |||
Assert.Equal(2, jT808UploadLocationRequest.UploadResult); | |||
Assert.Equal(10u, jT808UploadLocationRequest.DataPackages[0].Length); | |||
Assert.Equal(20u, jT808UploadLocationRequest.DataPackages[0].Offset); | |||
Assert.Equal(30u, jT808UploadLocationRequest.DataPackages[1].Length); | |||
Assert.Equal(40u, jT808UploadLocationRequest.DataPackages[1].Offset); | |||
} | |||
[Fact] | |||
public void Json() | |||
{ | |||
var json = JT808Serializer.Analyze<JT808_0x9212>("0846696C654E616D65010202000000140000000A000000280000001E".ToHexBytes()); | |||
} | |||
} | |||
} |
@@ -1,33 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
{ | |||
/// <summary> | |||
/// 主动拍照策略 | |||
/// </summary> | |||
public enum ActivePhotographyStrategyType:byte | |||
{ | |||
/// <summary> | |||
/// 不开启 | |||
/// </summary> | |||
不开启 = 0x00, | |||
/// <summary> | |||
/// 定时拍照 | |||
/// </summary> | |||
定时拍照 = 0x01, | |||
/// <summary> | |||
/// 定距拍照 | |||
/// </summary> | |||
定距拍照 = 0x02, | |||
/// <summary> | |||
/// 保留 | |||
/// </summary> | |||
保留 = 0x03, | |||
/// <summary> | |||
/// 不修改参数 | |||
/// </summary> | |||
不修改参数 = 0xFF | |||
} | |||
} |
@@ -1,33 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
{ | |||
/// <summary> | |||
/// 主动安全消息Id | |||
/// </summary> | |||
public enum JT808_JTActiveSafety_MsgId : ushort | |||
{ | |||
/// <summary> | |||
/// 报警附件信息消息 | |||
/// </summary> | |||
报警附件信息消息 = 0x1210, | |||
/// <summary> | |||
/// 文件信息上传 | |||
/// </summary> | |||
文件信息上传 = 0x1211, | |||
/// <summary> | |||
/// 文件上传完成消息 | |||
/// </summary> | |||
文件上传完成消息 = 0x1212, | |||
/// <summary> | |||
/// 报警附件上传指令 | |||
/// </summary> | |||
报警附件上传指令 = 0x9208, | |||
/// <summary> | |||
/// 文件上传完成消息应答 | |||
/// </summary> | |||
文件上传完成消息应答 = 0x9212, | |||
} | |||
} |
@@ -1,41 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
{ | |||
/// <summary> | |||
/// 拍照分辨率 | |||
/// </summary> | |||
public enum PhotoResolutionType:byte | |||
{ | |||
/// <summary> | |||
/// 352x288 | |||
/// </summary> | |||
x352_288 = 0x01, | |||
/// <summary> | |||
/// 704x288 | |||
/// </summary> | |||
x704_288 = 0x02, | |||
/// <summary> | |||
/// 704x576 | |||
/// </summary> | |||
x704_576 = 0x03, | |||
/// <summary> | |||
/// 640x480 | |||
/// </summary> | |||
x640_480 = 0x04, | |||
/// <summary> | |||
/// 1280x720 | |||
/// </summary> | |||
x1280_720 = 0x05, | |||
/// <summary> | |||
/// 1920x1080 | |||
/// </summary> | |||
x1920_1080 = 0x06, | |||
/// <summary> | |||
/// 不修改参数 | |||
/// </summary> | |||
不修改参数 = 0xFF | |||
} | |||
} |
@@ -1,29 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
{ | |||
/// <summary> | |||
/// USB编号类型 | |||
/// </summary> | |||
public enum USBIDType:byte | |||
{ | |||
/// <summary> | |||
/// 高级驾驶辅助系统 | |||
/// </summary> | |||
ADAS = 0x64, | |||
/// <summary> | |||
/// 驾驶员状态监控系统 | |||
/// </summary> | |||
DSM = 0x65, | |||
/// <summary> | |||
/// 轮胎气压监测系统 | |||
/// </summary> | |||
TPMS = 0x66, | |||
/// <summary> | |||
/// 盲点监测系统 | |||
/// </summary> | |||
BSD = 0x67 | |||
} | |||
} |
@@ -1,45 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
{ | |||
/// <summary> | |||
/// 视频录制分辨率 | |||
/// </summary> | |||
public enum VideoRecordingResolutionType:byte | |||
{ | |||
/// <summary> | |||
/// CIF | |||
/// </summary> | |||
CIF = 0x01, | |||
/// <summary> | |||
/// HD1 | |||
/// </summary> | |||
HD1 = 0x02, | |||
/// <summary> | |||
/// D1 | |||
/// </summary> | |||
D1 = 0x03, | |||
/// <summary> | |||
/// WD1 | |||
/// </summary> | |||
WD1 = 0x04, | |||
/// <summary> | |||
/// VGA | |||
/// </summary> | |||
VGA = 0x05, | |||
/// <summary> | |||
/// 720P | |||
/// </summary> | |||
_720P = 0x06, | |||
/// <summary> | |||
/// 1080P | |||
/// </summary> | |||
_1080P = 0x07, | |||
/// <summary> | |||
/// 不修改参数 | |||
/// </summary> | |||
不修改参数 = 0xFF | |||
} | |||
} |
@@ -1,33 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Enums | |||
{ | |||
/// <summary> | |||
/// 工作状态 | |||
/// </summary> | |||
public enum WorkingConditionType:byte | |||
{ | |||
/// <summary> | |||
/// 正常工作 | |||
/// </summary> | |||
正常工作 = 0x01, | |||
/// <summary> | |||
/// 待机状态 | |||
/// </summary> | |||
待机状态 = 0x02, | |||
/// <summary> | |||
/// 升级维护 | |||
/// </summary> | |||
升级维护 = 0x03, | |||
/// <summary> | |||
/// 设备异常 | |||
/// </summary> | |||
设备异常 = 0x04, | |||
/// <summary> | |||
/// 断开连接 | |||
/// </summary> | |||
断开连接 = 0x10, | |||
} | |||
} |
@@ -1,36 +0,0 @@ | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<PropertyGroup> | |||
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;</TargetFrameworks> | |||
<LangVersion>9.0</LangVersion> | |||
<Copyright>Copyright 2019.</Copyright> | |||
<Authors>SmallChi(Koike)</Authors> | |||
<PackageId>JT808.Protocol.Extensions.JTActiveSafety</PackageId> | |||
<Product>JT808.Protocol.Extensions.JTActiveSafety</Product> | |||
<Description>基于JT808协议、GB808协议扩展的主动安全消息协议(苏标)</Description> | |||
<PackageReleaseNotes>基于JT808协议、GB808协议扩展的主动安全消息协议(苏标)</PackageReleaseNotes> | |||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | |||
<RepositoryUrl>https://github.com/SmallChi/JTActiveSafety</RepositoryUrl> | |||
<PackageProjectUrl>https://github.com/SmallChi/JTActiveSafety</PackageProjectUrl> | |||
<licenseUrl>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</licenseUrl> | |||
<license>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</license> | |||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | |||
<DocumentationFile>JT808.Protocol.Extensions.JTActiveSafety.xml</DocumentationFile> | |||
<Version>1.1.7</Version> | |||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<None Include="..\..\LICENSE"> | |||
<Pack>True</Pack> | |||
<PackagePath></PackagePath> | |||
</None> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<PackageReference Include="JT808" Version="2.4.0" /> | |||
</ItemGroup> | |||
</Project> |
@@ -1,53 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety | |||
{ | |||
/// <summary> | |||
/// 主动安全常量 | |||
/// </summary> | |||
public static class JT808_JTActiveSafety_Constants | |||
{ | |||
/// <summary> | |||
/// 附加信息ID 高级驾驶辅助系统报警信息 | |||
/// </summary> | |||
public const byte JT808_0X0200_0x64 = 0x64; | |||
/// <summary> | |||
/// 附加信息ID 驾驶员状态监测系统报警信息 | |||
/// </summary> | |||
public const byte JT808_0X0200_0x65 = 0x65; | |||
/// <summary> | |||
/// 附加信息ID 胎压监测系统报警信息 | |||
/// </summary> | |||
public const byte JT808_0X0200_0x66 = 0x66; | |||
/// <summary> | |||
/// 附加信息ID 盲区监测系统报警信息 | |||
/// </summary> | |||
public const byte JT808_0X0200_0x67 = 0x67; | |||
/// <summary> | |||
/// 高级驾驶辅助系统参数设置 | |||
/// </summary> | |||
public const uint JT808_0X8103_0xF364 = 0xF364; | |||
/// <summary> | |||
/// 驾驶员状态监测系统参数设置 | |||
/// </summary> | |||
public const uint JT808_0X8103_0xF365 = 0xF365; | |||
/// <summary> | |||
/// 胎压监测系统参数设置 | |||
/// </summary> | |||
public const uint JT808_0X8103_0xF366 = 0xF366; | |||
/// <summary> | |||
/// 盲区监测系统参数设置 | |||
/// </summary> | |||
public const uint JT808_0X8103_0xF367 = 0xF367; | |||
/// <summary> | |||
/// 状态查询 | |||
/// </summary> | |||
public const byte JT808_0X0900_0xF7 = 0xF7; | |||
/// <summary> | |||
/// 信息查询 | |||
/// </summary> | |||
public const byte JT808_0X0900_0xF8 = 0xF8; | |||
} | |||
} |
@@ -1,28 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Enums; | |||
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; | |||
using JT808.Protocol.Interfaces; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Reflection; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety | |||
{ | |||
/// <summary> | |||
/// 主动安全扩展 | |||
/// </summary> | |||
public static class JTActiveSafetyDependencyInjectionExtensions | |||
{ | |||
/// <summary> | |||
/// 添加主动安全 | |||
/// </summary> | |||
/// <param name="jT808Builder"></param> | |||
/// <returns></returns> | |||
public static IJT808Builder AddJTActiveSafetyConfigure(this IJT808Builder jT808Builder) | |||
{ | |||
jT808Builder.Config.Register(Assembly.GetExecutingAssembly()); | |||
return jT808Builder; | |||
} | |||
} | |||
} |
@@ -1,344 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 高级驾驶辅助系统报警信息 | |||
/// </summary> | |||
public class JT808_0x0200_0x64 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x64>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 高级驾驶辅助系统报警信息Id | |||
/// </summary> | |||
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x64; | |||
/// <summary> | |||
/// 高级驾驶辅助系统报警信息附加长度 | |||
/// </summary> | |||
public override byte AttachInfoLength { get; set; } = 32; | |||
/// <summary> | |||
/// 报警ID | |||
/// </summary> | |||
public uint AlarmId { get; set; } | |||
/// <summary> | |||
/// 标志状态 | |||
/// </summary> | |||
public byte FlagState { get; set; } | |||
/// <summary> | |||
/// 报警/事件类型 | |||
/// </summary> | |||
public byte AlarmOrEventType{ get; set; } | |||
/// <summary> | |||
/// 报警/事件类型 | |||
/// </summary> | |||
public byte AlarmLevel { get; set; } | |||
/// <summary> | |||
/// 前车车速 | |||
/// </summary> | |||
public byte VehicleSpeed { get; set; } | |||
/// <summary> | |||
/// 前车/行人距离 | |||
/// </summary> | |||
public byte CarOrPedestrianDistanceAhead { get; set; } | |||
/// <summary> | |||
/// 偏离类型 | |||
/// </summary> | |||
public byte DeviateType { get; set; } | |||
/// <summary> | |||
/// 道路标志识别类型 | |||
/// </summary> | |||
public byte RoadSignIdentificationType { get; set; } | |||
/// <summary> | |||
/// 道路标志识别类型 | |||
/// </summary> | |||
public byte RoadSignIdentificationData { get; set; } | |||
/// <summary> | |||
/// 车速 | |||
/// </summary> | |||
public byte Speed { get; set; } | |||
/// <summary> | |||
/// 高程 | |||
/// </summary> | |||
public ushort Altitude { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int Latitude { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int Longitude { get; set; } | |||
/// <summary> | |||
/// 日期时间 | |||
/// YYMMDDhhmmss | |||
/// BCD[6] | |||
/// </summary> | |||
public DateTime AlarmTime { get; set; } | |||
/// <summary> | |||
/// 车辆状态 | |||
/// </summary> | |||
public ushort VehicleState { get; set; } | |||
/// <summary> | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x64 value = new JT808_0x0200_0x64(); | |||
value.AttachInfoId = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); | |||
value.AttachInfoLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); | |||
value.AlarmId = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.AlarmId.ReadNumber()}]报警ID", value.AlarmId); | |||
value.FlagState = reader.ReadByte(); | |||
string flagStateString = "未知"; | |||
switch (value.FlagState) | |||
{ | |||
case 0: | |||
flagStateString = "不可用"; | |||
break; | |||
case 1: | |||
flagStateString = "开始标志"; | |||
break; | |||
case 2: | |||
flagStateString = "结束标志"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.FlagState.ReadNumber()}]标志状态-{flagStateString}", value.FlagState); | |||
value.AlarmOrEventType = reader.ReadByte(); | |||
string alarmOrEventTypeString = ""; | |||
string vehicleSpeedString = "无效"; | |||
string carOrPedestrianDistanceAheadString = "无效"; | |||
string deviateTypeString = "无效"; | |||
string roadSignIdentificationTypeString = "无效"; | |||
switch (value.AlarmOrEventType) | |||
{ | |||
case 0x01: | |||
alarmOrEventTypeString = "前向碰撞报警"; | |||
vehicleSpeedString = "有效"; | |||
carOrPedestrianDistanceAheadString = "有效"; | |||
break; | |||
case 0x02: | |||
alarmOrEventTypeString = "车道偏离报警"; | |||
vehicleSpeedString = "有效"; | |||
carOrPedestrianDistanceAheadString = "有效"; | |||
deviateTypeString = "有效"; | |||
break; | |||
case 0x03: | |||
alarmOrEventTypeString = "车距过近报警"; | |||
break; | |||
case 0x04: | |||
alarmOrEventTypeString = "行人碰撞报警"; | |||
vehicleSpeedString = "有效"; | |||
break; | |||
case 0x05: | |||
alarmOrEventTypeString = "频繁变道报警"; | |||
break; | |||
case 0x06: | |||
alarmOrEventTypeString = "道路标识超限报警"; | |||
roadSignIdentificationTypeString = "有效"; | |||
break; | |||
case 0x07: | |||
alarmOrEventTypeString = "障碍物报警"; | |||
break; | |||
case 0x08: | |||
case 0x09: | |||
case 0x0A: | |||
case 0x0B: | |||
case 0x0C: | |||
case 0x0D: | |||
case 0x0E: | |||
case 0x0F: | |||
alarmOrEventTypeString = "用户自定义"; | |||
break; | |||
case 0x10: | |||
roadSignIdentificationTypeString = "有效"; | |||
alarmOrEventTypeString = "道路标志识别事件"; | |||
break; | |||
case 0x11: | |||
alarmOrEventTypeString = "主动抓拍事件"; | |||
break; | |||
case 0x12: | |||
case 0x13: | |||
case 0x14: | |||
case 0x15: | |||
case 0x16: | |||
case 0x17: | |||
case 0x18: | |||
case 0x19: | |||
case 0x1A: | |||
case 0x1B: | |||
case 0x1C: | |||
case 0x1D: | |||
case 0x1E: | |||
case 0x1F: | |||
alarmOrEventTypeString = "用户自定义"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", value.AlarmOrEventType); | |||
value.AlarmLevel = reader.ReadByte(); | |||
string alarmLevelString = "未知"; | |||
switch (value.AlarmLevel) | |||
{ | |||
case 0x01: | |||
alarmLevelString = "一级报警"; | |||
break; | |||
case 0x02: | |||
alarmLevelString = "二级报警"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.AlarmLevel.ReadNumber()}]报警级别-{alarmLevelString}", value.AlarmLevel); | |||
value.VehicleSpeed = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VehicleSpeed.ReadNumber()}]前车车速-{vehicleSpeedString}", value.VehicleSpeed); | |||
value.CarOrPedestrianDistanceAhead = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.CarOrPedestrianDistanceAhead.ReadNumber()}]前车_行人距离-{carOrPedestrianDistanceAheadString}", value.CarOrPedestrianDistanceAhead); | |||
value.DeviateType = reader.ReadByte(); | |||
string deviateType = value.DeviateType == 0x01 ? "左侧偏离" : "右侧偏离"; | |||
writer.WriteNumber($"[{value.DeviateType.ReadNumber()}]偏离类型-{deviateType}-{deviateTypeString}", value.DeviateType); | |||
value.RoadSignIdentificationType = reader.ReadByte(); | |||
string roadSignIdentificationType = "未知标志"; | |||
if (value.RoadSignIdentificationType == 0x01) | |||
{ | |||
roadSignIdentificationType = "限速标志"; | |||
} | |||
else if (value.RoadSignIdentificationType == 0x02) | |||
{ | |||
roadSignIdentificationType = "限高标志"; | |||
} | |||
else if (value.RoadSignIdentificationType == 0x03) | |||
{ | |||
roadSignIdentificationType = "限重标志"; | |||
} | |||
writer.WriteNumber($"[{value.RoadSignIdentificationType.ReadNumber()}]道路标志识别类型-{roadSignIdentificationType}-{roadSignIdentificationTypeString}", value.RoadSignIdentificationType); | |||
value.RoadSignIdentificationData = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.RoadSignIdentificationData.ReadNumber()}]道路标志识别数据", value.RoadSignIdentificationData); | |||
value.Speed = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.Speed.ReadNumber()}]车速", value.Speed); | |||
value.Altitude = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Altitude.ReadNumber()}]高程", value.Altitude); | |||
value.Latitude = (int)reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.Latitude.ReadNumber()}]纬度", value.Latitude); | |||
value.Longitude = (int)reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.Longitude.ReadNumber()}]经度", value.Longitude); | |||
value.AlarmTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.VehicleState = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState); | |||
var vehicleStateBits = Convert.ToString(value.VehicleState, 2).PadLeft(16, '0'); | |||
writer.WriteStartObject($"车辆状态对象[{vehicleStateBits}]"); | |||
writer.WriteString($"[{vehicleStateBits[15]}]Bit0ACC状态", vehicleStateBits[15] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[14]}]Bit1左转向状态", vehicleStateBits[14] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[13]}]Bit2右转向状态", vehicleStateBits[13] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[12]}]Bit3雨刮器状态", vehicleStateBits[12] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[11]}]Bit4制动状态", vehicleStateBits[11] == '0' ? "未制动" : "制动"); | |||
writer.WriteString($"[{vehicleStateBits[10]}]Bit5插卡状态", vehicleStateBits[10] == '0' ? "未插卡" : "已插卡"); | |||
writer.WriteString($"[{vehicleStateBits[9]}]Bit6自定义", vehicleStateBits[9].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[8]}]Bit7自定义", vehicleStateBits[8].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[7]}]Bit8自定义", vehicleStateBits[7].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[6]}]Bit9自定义", vehicleStateBits[6].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[5]}]Bit10定位状态", vehicleStateBits[5] == '0' ? "未定位" : "已定位"); | |||
writer.WriteString($"[{vehicleStateBits[4]}]Bit11自定义", vehicleStateBits[4].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[3]}]Bit12自定义", vehicleStateBits[3].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[2]}]Bit13自定义", vehicleStateBits[2].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString()); | |||
writer.WriteEndObject(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty(); | |||
string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); | |||
value.AlarmIdentification.TerminalID = reader.ReadString(7); | |||
value.AlarmIdentification.Time = reader.ReadDateTime6(); | |||
value.AlarmIdentification.SN = reader.ReadByte(); | |||
value.AlarmIdentification.AttachCount = reader.ReadByte(); | |||
value.AlarmIdentification.Retain = reader.ReadByte(); | |||
writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalID); | |||
writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); | |||
writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0200_0x64 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x64 value = new JT808_0x0200_0x64(); | |||
value.AttachInfoId = reader.ReadByte(); | |||
value.AttachInfoLength = reader.ReadByte(); | |||
value.AlarmId = reader.ReadUInt32(); | |||
value.FlagState = reader.ReadByte(); | |||
value.AlarmOrEventType = reader.ReadByte(); | |||
value.AlarmLevel = reader.ReadByte(); | |||
value.VehicleSpeed = reader.ReadByte(); | |||
value.CarOrPedestrianDistanceAhead = reader.ReadByte(); | |||
value.DeviateType = reader.ReadByte(); | |||
value.RoadSignIdentificationType = reader.ReadByte(); | |||
value.RoadSignIdentificationData = reader.ReadByte(); | |||
value.Speed = reader.ReadByte(); | |||
value.Altitude = reader.ReadUInt16(); | |||
value.Latitude = (int)reader.ReadUInt32(); | |||
value.Longitude = (int)reader.ReadUInt32(); | |||
value.AlarmTime = reader.ReadDateTime6(); | |||
value.VehicleState = reader.ReadUInt16(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty | |||
{ | |||
TerminalID = reader.ReadString(7), | |||
Time = reader.ReadDateTime6(), | |||
SN = reader.ReadByte(), | |||
AttachCount = reader.ReadByte(), | |||
Retain = reader.ReadByte() | |||
}; | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x64 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.AttachInfoId); | |||
writer.WriteByte(value.AttachInfoLength); | |||
writer.WriteUInt32(value.AlarmId); | |||
writer.WriteByte(value.FlagState); | |||
writer.WriteByte(value.AlarmOrEventType); | |||
writer.WriteByte(value.AlarmLevel); | |||
writer.WriteByte(value.VehicleSpeed); | |||
writer.WriteByte(value.CarOrPedestrianDistanceAhead); | |||
writer.WriteByte(value.DeviateType); | |||
writer.WriteByte(value.RoadSignIdentificationType); | |||
writer.WriteByte(value.RoadSignIdentificationData); | |||
writer.WriteByte(value.Speed); | |||
writer.WriteUInt16(value.Altitude); | |||
writer.WriteUInt32((uint)value.Latitude); | |||
writer.WriteUInt32((uint)value.Longitude); | |||
writer.WriteDateTime6(value.AlarmTime); | |||
writer.WriteUInt16(value.VehicleState); | |||
if (value.AlarmIdentification == null) { | |||
throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); | |||
} | |||
writer.WriteString(value.AlarmIdentification.TerminalID); | |||
writer.WriteDateTime6(value.AlarmIdentification.Time); | |||
writer.WriteByte(value.AlarmIdentification.SN); | |||
writer.WriteByte(value.AlarmIdentification.AttachCount); | |||
writer.WriteByte(value.AlarmIdentification.Retain); | |||
} | |||
} | |||
} |
@@ -1,295 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 驾驶员状态监测系统报警信息 | |||
/// </summary> | |||
public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x65>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 驾驶员状态监测系统报警信息Id | |||
/// </summary> | |||
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x65; | |||
/// <summary> | |||
/// 驾驶员状态监测系统报警信息长度 | |||
/// </summary> | |||
public override byte AttachInfoLength { get; set; } = 47; | |||
/// <summary> | |||
/// 报警ID | |||
/// </summary> | |||
public uint AlarmId { get; set; } | |||
/// <summary> | |||
/// 标志状态 | |||
/// </summary> | |||
public byte FlagState { get; set; } | |||
/// <summary> | |||
/// 报警/事件类型 | |||
/// </summary> | |||
public byte AlarmOrEventType{ get; set; } | |||
/// <summary> | |||
/// 报警级别 | |||
/// </summary> | |||
public byte AlarmLevel { get; set; } | |||
/// <summary> | |||
/// 疲劳程度 | |||
/// </summary> | |||
public byte Fatigue { get; set; } | |||
/// <summary> | |||
/// 预留 | |||
/// </summary> | |||
public byte[] Retain { get; set; } = new byte[4]; | |||
/// <summary> | |||
/// 车速 | |||
/// </summary> | |||
public byte Speed { get; set; } | |||
/// <summary> | |||
/// 高程 | |||
/// </summary> | |||
public ushort Altitude { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int Latitude { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int Longitude { get; set; } | |||
/// <summary> | |||
/// 日期时间 | |||
/// YYMMDDhhmmss | |||
/// BCD[6] | |||
/// </summary> | |||
public DateTime AlarmTime { get; set; } | |||
/// <summary> | |||
/// 车辆状态 | |||
/// </summary> | |||
public ushort VehicleState { get; set; } | |||
/// <summary> | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x65 value = new JT808_0x0200_0x65(); | |||
value.AttachInfoId = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); | |||
value.AttachInfoLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); | |||
value.AlarmId = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.AlarmId.ReadNumber()}]报警ID", value.AlarmId); | |||
value.FlagState = reader.ReadByte(); | |||
string flagStateString = "未知"; | |||
switch (value.FlagState) | |||
{ | |||
case 0: | |||
flagStateString = "不可用"; | |||
break; | |||
case 1: | |||
flagStateString = "开始标志"; | |||
break; | |||
case 2: | |||
flagStateString = "结束标志"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.FlagState.ReadNumber()}]标志状态-{flagStateString}", value.FlagState); | |||
value.AlarmOrEventType = reader.ReadByte(); | |||
string alarmOrEventTypeString = ""; | |||
switch (value.AlarmOrEventType) | |||
{ | |||
case 0x01: | |||
alarmOrEventTypeString = "疲劳驾驶报警"; | |||
break; | |||
case 0x02: | |||
alarmOrEventTypeString = "接打电话报警"; | |||
break; | |||
case 0x03: | |||
alarmOrEventTypeString = "抽烟报警"; | |||
break; | |||
case 0x04: | |||
alarmOrEventTypeString = "分神驾驶报警"; | |||
break; | |||
case 0x05: | |||
alarmOrEventTypeString = "驾驶员异常报警"; | |||
break; | |||
case 0x06: | |||
case 0x07: | |||
case 0x08: | |||
case 0x09: | |||
case 0x0A: | |||
case 0x0B: | |||
case 0x0C: | |||
case 0x0D: | |||
case 0x0E: | |||
case 0x0F: | |||
alarmOrEventTypeString = "用户自定义"; | |||
break; | |||
case 0x10: | |||
alarmOrEventTypeString = "自动抓拍事件"; | |||
break; | |||
case 0x11: | |||
alarmOrEventTypeString = "驾驶员变更事件"; | |||
break; | |||
case 0x12: | |||
case 0x13: | |||
case 0x14: | |||
case 0x15: | |||
case 0x16: | |||
case 0x17: | |||
case 0x18: | |||
case 0x19: | |||
case 0x1A: | |||
case 0x1B: | |||
case 0x1C: | |||
case 0x1D: | |||
case 0x1E: | |||
case 0x1F: | |||
alarmOrEventTypeString = "用户自定义"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", value.AlarmOrEventType); | |||
value.AlarmLevel = reader.ReadByte(); | |||
string alarmLevelString = "未知"; | |||
switch (value.AlarmLevel) | |||
{ | |||
case 0x01: | |||
alarmLevelString = "一级报警"; | |||
break; | |||
case 0x02: | |||
alarmLevelString = "二级报警"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.AlarmLevel.ReadNumber()}]报警级别-{alarmLevelString}", value.AlarmLevel); | |||
value.Fatigue = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.Fatigue.ReadNumber()}]疲劳程度", value.Fatigue); | |||
value.Retain = reader.ReadArray(4).ToArray(); | |||
writer.WriteString("预留", value.Retain.ToHexString()); | |||
value.Speed = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.Speed.ReadNumber()}]车速", value.Speed); | |||
value.Altitude = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Altitude.ReadNumber()}]高程", value.Altitude); | |||
value.Latitude = (int)reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.Latitude.ReadNumber()}]纬度", value.Latitude); | |||
value.Longitude = (int)reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.Longitude.ReadNumber()}]经度", value.Longitude); | |||
value.AlarmTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.VehicleState = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState); | |||
var vehicleStateBits = Convert.ToString(value.VehicleState, 2).PadLeft(16, '0'); | |||
writer.WriteStartObject($"车辆状态对象[{vehicleStateBits}]"); | |||
writer.WriteString($"[{vehicleStateBits[15]}]Bit0ACC状态", vehicleStateBits[15] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[14]}]Bit1左转向状态", vehicleStateBits[14] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[13]}]Bit2右转向状态", vehicleStateBits[13] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[12]}]Bit3雨刮器状态", vehicleStateBits[12] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[11]}]Bit4制动状态", vehicleStateBits[11] == '0' ? "未制动" : "制动"); | |||
writer.WriteString($"[{vehicleStateBits[10]}]Bit5插卡状态", vehicleStateBits[10] == '0' ? "未插卡" : "已插卡"); | |||
writer.WriteString($"[{vehicleStateBits[9]}]Bit6自定义", vehicleStateBits[9].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[8]}]Bit7自定义", vehicleStateBits[8].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[7]}]Bit8自定义", vehicleStateBits[7].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[6]}]Bit9自定义", vehicleStateBits[6].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[5]}]Bit10定位状态", vehicleStateBits[5] == '0' ? "未定位" : "已定位"); | |||
writer.WriteString($"[{vehicleStateBits[4]}]Bit11自定义", vehicleStateBits[4].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[3]}]Bit12自定义", vehicleStateBits[3].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[2]}]Bit13自定义", vehicleStateBits[2].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString()); | |||
writer.WriteEndObject(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty(); | |||
string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); | |||
value.AlarmIdentification.TerminalID = reader.ReadString(7); | |||
value.AlarmIdentification.Time = reader.ReadDateTime6(); | |||
value.AlarmIdentification.SN = reader.ReadByte(); | |||
value.AlarmIdentification.AttachCount = reader.ReadByte(); | |||
value.AlarmIdentification.Retain = reader.ReadByte(); | |||
writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalID); | |||
writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); | |||
writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0200_0x65 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x65 value = new JT808_0x0200_0x65(); | |||
value.AttachInfoId = reader.ReadByte(); | |||
value.AttachInfoLength = reader.ReadByte(); | |||
value.AlarmId = reader.ReadUInt32(); | |||
value.FlagState = reader.ReadByte(); | |||
value.AlarmOrEventType = reader.ReadByte(); | |||
value.AlarmLevel = reader.ReadByte(); | |||
value.Fatigue = reader.ReadByte(); | |||
value.Retain = reader.ReadArray(4).ToArray(); | |||
value.Speed = reader.ReadByte(); | |||
value.Altitude = reader.ReadUInt16(); | |||
value.Latitude = (int)reader.ReadUInt32(); | |||
value.Longitude = (int)reader.ReadUInt32(); | |||
value.AlarmTime = reader.ReadDateTime6(); | |||
value.VehicleState = reader.ReadUInt16(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty | |||
{ | |||
TerminalID = reader.ReadString(7), | |||
Time = reader.ReadDateTime6(), | |||
SN = reader.ReadByte(), | |||
AttachCount = reader.ReadByte(), | |||
Retain = reader.ReadByte() | |||
}; | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x65 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.AttachInfoId); | |||
writer.WriteByte(value.AttachInfoLength); | |||
writer.WriteUInt32(value.AlarmId); | |||
writer.WriteByte(value.FlagState); | |||
writer.WriteByte(value.AlarmOrEventType); | |||
writer.WriteByte(value.AlarmLevel); | |||
writer.WriteByte(value.Fatigue); | |||
if (value.Retain.Length != 4) | |||
{ | |||
throw new ArgumentOutOfRangeException($"{nameof(JT808_0x0200_0x65.Retain)} length==4"); | |||
} | |||
writer.WriteArray(value.Retain); | |||
writer.WriteByte(value.Speed); | |||
writer.WriteUInt16(value.Altitude); | |||
writer.WriteUInt32((uint)value.Latitude); | |||
writer.WriteUInt32((uint)value.Longitude); | |||
writer.WriteDateTime6(value.AlarmTime); | |||
writer.WriteUInt16(value.VehicleState); | |||
if (value.AlarmIdentification == null) | |||
{ | |||
throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); | |||
} | |||
writer.WriteString(value.AlarmIdentification.TerminalID); | |||
writer.WriteDateTime6(value.AlarmIdentification.Time); | |||
writer.WriteByte(value.AlarmIdentification.SN); | |||
writer.WriteByte(value.AlarmIdentification.AttachCount); | |||
writer.WriteByte(value.AlarmIdentification.Retain); | |||
} | |||
} | |||
} |
@@ -1,312 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 胎压监测系统报警信息 | |||
/// </summary> | |||
public class JT808_0x0200_0x66 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x66>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 胎压监测系统报警信息Id | |||
/// </summary> | |||
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x66; | |||
/// <summary> | |||
/// 胎压监测系统报警信息长度 | |||
/// </summary> | |||
public override byte AttachInfoLength { get; set; } | |||
/// <summary> | |||
/// 报警ID | |||
/// </summary> | |||
public uint AlarmId { get; set; } | |||
/// <summary> | |||
/// 标志状态 | |||
/// </summary> | |||
public byte FlagState { get; set; } | |||
/// <summary> | |||
/// 车速 | |||
/// </summary> | |||
public byte Speed { get; set; } | |||
/// <summary> | |||
/// 高程 | |||
/// </summary> | |||
public ushort Altitude { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int Latitude { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int Longitude { get; set; } | |||
/// <summary> | |||
/// 日期时间 | |||
/// YYMMDDhhmmss | |||
/// BCD[6] | |||
/// </summary> | |||
public DateTime AlarmTime { get; set; } | |||
/// <summary> | |||
/// 车辆状态 | |||
/// </summary> | |||
public ushort VehicleState { get; set; } | |||
/// <summary> | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// 报警/事件列表总数 | |||
/// </summary> | |||
public byte AlarmOrEventCount { get; set; } | |||
/// <summary> | |||
/// 报警/事件信息列表 | |||
/// </summary> | |||
public List<AlarmOrEventProperty> AlarmOrEvents { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x66 value = new JT808_0x0200_0x66(); | |||
value.AttachInfoId = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); | |||
value.AttachInfoLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); | |||
value.AlarmId = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.AlarmId.ReadNumber()}]报警ID", value.AlarmId); | |||
value.FlagState = reader.ReadByte(); | |||
string flagStateString = "未知"; | |||
switch (value.FlagState) | |||
{ | |||
case 0: | |||
flagStateString = "不可用"; | |||
break; | |||
case 1: | |||
flagStateString = "开始标志"; | |||
break; | |||
case 2: | |||
flagStateString = "结束标志"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.FlagState.ReadNumber()}]标志状态-{flagStateString}", value.FlagState); | |||
value.Speed = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.Speed.ReadNumber()}]车速", value.Speed); | |||
value.Altitude = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Altitude.ReadNumber()}]高程", value.Altitude); | |||
value.Latitude = (int)reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.Latitude.ReadNumber()}]纬度", value.Latitude); | |||
value.Longitude = (int)reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.Longitude.ReadNumber()}]经度", value.Longitude); | |||
value.AlarmTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.VehicleState = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState); | |||
var vehicleStateBits = Convert.ToString(value.VehicleState, 2).PadLeft(16, '0'); | |||
writer.WriteStartObject($"车辆状态对象[{vehicleStateBits}]"); | |||
writer.WriteString($"[{vehicleStateBits[15]}]Bit0ACC状态", vehicleStateBits[15] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[14]}]Bit1左转向状态", vehicleStateBits[14] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[13]}]Bit2右转向状态", vehicleStateBits[13] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[12]}]Bit3雨刮器状态", vehicleStateBits[12] == '0' ? "关闭" : "打开"); | |||
writer.WriteString($"[{vehicleStateBits[11]}]Bit4制动状态", vehicleStateBits[11] == '0' ? "未制动" : "制动"); | |||
writer.WriteString($"[{vehicleStateBits[10]}]Bit5插卡状态", vehicleStateBits[10] == '0' ? "未插卡" : "已插卡"); | |||
writer.WriteString($"[{vehicleStateBits[9]}]Bit6自定义", vehicleStateBits[9].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[8]}]Bit7自定义", vehicleStateBits[8].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[7]}]Bit8自定义", vehicleStateBits[7].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[6]}]Bit9自定义", vehicleStateBits[6].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[5]}]Bit10定位状态", vehicleStateBits[5] == '0' ? "未定位" : "已定位"); | |||
writer.WriteString($"[{vehicleStateBits[4]}]Bit11自定义", vehicleStateBits[4].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[3]}]Bit12自定义", vehicleStateBits[3].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[2]}]Bit13自定义", vehicleStateBits[2].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString()); | |||
writer.WriteEndObject(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty(); | |||
string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); | |||
value.AlarmIdentification.TerminalID = reader.ReadString(7); | |||
value.AlarmIdentification.Time = reader.ReadDateTime6(); | |||
value.AlarmIdentification.SN = reader.ReadByte(); | |||
value.AlarmIdentification.AttachCount = reader.ReadByte(); | |||
value.AlarmIdentification.Retain = reader.ReadByte(); | |||
writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalID); | |||
writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); | |||
writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
value.AlarmOrEventCount = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AlarmOrEventCount.ReadNumber()}]报警_事件列表总数", value.AlarmOrEventCount); | |||
if (value.AlarmOrEventCount > 0) | |||
{ | |||
writer.WriteStartArray("报警_事件列表"); | |||
for (int i = 0; i < value.AlarmOrEventCount; i++) | |||
{ | |||
writer.WriteStartObject(); | |||
AlarmOrEventProperty item = new AlarmOrEventProperty(); | |||
item.TirePressureAlarmPosition = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.TirePressureAlarmPosition.ReadNumber()}]胎压报警位置", item.TirePressureAlarmPosition); | |||
item.AlarmOrEventType = reader.ReadUInt16(); | |||
string alarmOrEventTypeString = ""; | |||
switch (item.AlarmOrEventType) | |||
{ | |||
case 0x01: | |||
alarmOrEventTypeString = "前向碰撞报警"; | |||
break; | |||
case 0x02: | |||
alarmOrEventTypeString = "车道偏离报警"; | |||
break; | |||
case 0x03: | |||
alarmOrEventTypeString = "车距过近报警"; | |||
break; | |||
case 0x04: | |||
alarmOrEventTypeString = "行人碰撞报警"; | |||
break; | |||
case 0x05: | |||
alarmOrEventTypeString = "频繁变道报警"; | |||
break; | |||
case 0x06: | |||
alarmOrEventTypeString = "道路标识超限报警"; | |||
break; | |||
case 0x07: | |||
alarmOrEventTypeString = "障碍物报警"; | |||
break; | |||
case 0x08: | |||
case 0x09: | |||
case 0x0A: | |||
case 0x0B: | |||
case 0x0C: | |||
case 0x0D: | |||
case 0x0E: | |||
case 0x0F: | |||
alarmOrEventTypeString = "用户自定义"; | |||
break; | |||
case 0x10: | |||
alarmOrEventTypeString = "道路标志识别事件"; | |||
break; | |||
case 0x11: | |||
alarmOrEventTypeString = "主动抓拍事件"; | |||
break; | |||
case 0x12: | |||
case 0x13: | |||
case 0x14: | |||
case 0x15: | |||
case 0x16: | |||
case 0x17: | |||
case 0x18: | |||
case 0x19: | |||
case 0x1A: | |||
case 0x1B: | |||
case 0x1C: | |||
case 0x1D: | |||
case 0x1E: | |||
case 0x1F: | |||
alarmOrEventTypeString = "用户自定义"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{item.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", item.AlarmOrEventType); | |||
item.TirePressure = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{item.TirePressure.ReadNumber()}]胎压Kpa", item.TirePressure); | |||
item.TireTemperature = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{item.TireTemperature.ReadNumber()}]胎温℃", item.TireTemperature); | |||
item.BatteryLevel = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{item.BatteryLevel.ReadNumber()}]电池电量%", item.BatteryLevel); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0200_0x66 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x66 value = new JT808_0x0200_0x66(); | |||
value.AttachInfoId = reader.ReadByte(); | |||
value.AttachInfoLength = reader.ReadByte(); | |||
value.AlarmId = reader.ReadUInt32(); | |||
value.FlagState = reader.ReadByte(); | |||
value.Speed = reader.ReadByte(); | |||
value.Altitude = reader.ReadUInt16(); | |||
value.Latitude = (int)reader.ReadUInt32(); | |||
value.Longitude = (int)reader.ReadUInt32(); | |||
value.AlarmTime = reader.ReadDateTime6(); | |||
value.VehicleState = reader.ReadUInt16(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty | |||
{ | |||
TerminalID = reader.ReadString(7), | |||
Time = reader.ReadDateTime6(), | |||
SN = reader.ReadByte(), | |||
AttachCount = reader.ReadByte(), | |||
Retain = reader.ReadByte() | |||
}; | |||
value.AlarmOrEventCount = reader.ReadByte(); | |||
if (value.AlarmOrEventCount > 0) | |||
{ | |||
value.AlarmOrEvents = new List<AlarmOrEventProperty>(); | |||
for (int i = 0; i < value.AlarmOrEventCount; i++) | |||
{ | |||
AlarmOrEventProperty alarmOrEventProperty = new AlarmOrEventProperty(); | |||
alarmOrEventProperty.TirePressureAlarmPosition = reader.ReadByte(); | |||
alarmOrEventProperty.AlarmOrEventType = reader.ReadUInt16(); | |||
alarmOrEventProperty.TirePressure = reader.ReadUInt16(); | |||
alarmOrEventProperty.TireTemperature = reader.ReadUInt16(); | |||
alarmOrEventProperty.BatteryLevel = reader.ReadUInt16(); | |||
value.AlarmOrEvents.Add(alarmOrEventProperty); | |||
} | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x66 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.AttachInfoId); | |||
writer.Skip(1, out int AttachInfoLengthPosition); | |||
writer.WriteUInt32(value.AlarmId); | |||
writer.WriteByte(value.FlagState); | |||
writer.WriteByte(value.Speed); | |||
writer.WriteUInt16(value.Altitude); | |||
writer.WriteUInt32((uint)value.Latitude); | |||
writer.WriteUInt32((uint)value.Longitude); | |||
writer.WriteDateTime6(value.AlarmTime); | |||
writer.WriteUInt16(value.VehicleState); | |||
if (value.AlarmIdentification == null) | |||
{ | |||
throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); | |||
} | |||
writer.WriteString(value.AlarmIdentification.TerminalID); | |||
writer.WriteDateTime6(value.AlarmIdentification.Time); | |||
writer.WriteByte(value.AlarmIdentification.SN); | |||
writer.WriteByte(value.AlarmIdentification.AttachCount); | |||
writer.WriteByte(value.AlarmIdentification.Retain); | |||
if (value.AlarmOrEvents.Count > 0) | |||
{ | |||
writer.WriteByte((byte)value.AlarmOrEvents.Count); | |||
foreach (var item in value.AlarmOrEvents) | |||
{ | |||
writer.WriteByte(item.TirePressureAlarmPosition); | |||
writer.WriteUInt16(item.AlarmOrEventType); | |||
writer.WriteUInt16(item.TirePressure); | |||
writer.WriteUInt16(item.TireTemperature); | |||
writer.WriteUInt16(item.BatteryLevel); | |||
} | |||
} | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - AttachInfoLengthPosition - 1), AttachInfoLengthPosition); | |||
} | |||
} | |||
} |
@@ -1,279 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 盲区监测系统报警信息 | |||
/// </summary> | |||
public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x67>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 盲区监测系统报警信息Id | |||
/// </summary> | |||
public override byte AttachInfoId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0200_0x67; | |||
/// <summary> | |||
/// 盲区监测系统报警信息长度 | |||
/// </summary> | |||
public override byte AttachInfoLength { get; set; } = 26; | |||
/// <summary> | |||
/// 报警ID | |||
/// </summary> | |||
public uint AlarmId { get; set; } | |||
/// <summary> | |||
/// 标志状态 | |||
/// </summary> | |||
public byte FlagState { get; set; } | |||
/// <summary> | |||
/// 报警/事件类型 | |||
/// </summary> | |||
public byte AlarmOrEventType{ get; set; } | |||
/// <summary> | |||
/// 报警/事件类型 | |||
/// </summary> | |||
public byte AlarmLevel { get; set; } | |||
/// <summary> | |||
/// 车速 | |||
/// </summary> | |||
public byte Speed { get; set; } | |||
/// <summary> | |||
/// 高程 | |||
/// </summary> | |||
public ushort Altitude { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int Latitude { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int Longitude { get; set; } | |||
/// <summary> | |||
/// 日期时间 | |||
/// YYMMDDhhmmss | |||
/// BCD[6] | |||
/// </summary> | |||
public DateTime AlarmTime { get; set; } | |||
/// <summary> | |||
/// 车辆状态 | |||
/// </summary> | |||
public ushort VehicleState { get; set; } | |||
/// <summary> | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x67 value = new JT808_0x0200_0x67(); | |||
value.AttachInfoId = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); | |||
value.AttachInfoLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); | |||
value.AlarmId = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.AlarmId.ReadNumber()}]报警ID", value.AlarmId); | |||
value.FlagState = reader.ReadByte(); | |||
string flagStateString = "未知"; | |||
switch (value.FlagState) | |||
{ | |||
case 0: | |||
flagStateString = "不可用"; | |||
break; | |||
case 1: | |||
flagStateString = "开始标志"; | |||
break; | |||
case 2: | |||
flagStateString = "结束标志"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.FlagState.ReadNumber()}]标志状态-{flagStateString}", value.FlagState); | |||
value.AlarmOrEventType = reader.ReadByte(); | |||
string alarmOrEventTypeString = ""; | |||
switch (value.AlarmOrEventType) | |||
{ | |||
case 0x01: | |||
alarmOrEventTypeString = "前向碰撞报警"; | |||
break; | |||
case 0x02: | |||
alarmOrEventTypeString = "车道偏离报警"; | |||
break; | |||
case 0x03: | |||
alarmOrEventTypeString = "车距过近报警"; | |||
break; | |||
case 0x04: | |||
alarmOrEventTypeString = "行人碰撞报警"; | |||
break; | |||
case 0x05: | |||
alarmOrEventTypeString = "频繁变道报警"; | |||
break; | |||
case 0x06: | |||
alarmOrEventTypeString = "道路标识超限报警"; | |||
break; | |||
case 0x07: | |||
alarmOrEventTypeString = "障碍物报警"; | |||
break; | |||
case 0x08: | |||
case 0x09: | |||
case 0x0A: | |||
case 0x0B: | |||
case 0x0C: | |||
case 0x0D: | |||
case 0x0E: | |||
case 0x0F: | |||
alarmOrEventTypeString = "用户自定义"; | |||
break; | |||
case 0x10: | |||
alarmOrEventTypeString = "道路标志识别事件"; | |||
break; | |||
case 0x11: | |||
alarmOrEventTypeString = "主动抓拍事件"; | |||
break; | |||
case 0x12: | |||
case 0x13: | |||
case 0x14: | |||
case 0x15: | |||
case 0x16: | |||
case 0x17: | |||
case 0x18: | |||
case 0x19: | |||
case 0x1A: | |||
case 0x1B: | |||
case 0x1C: | |||
case 0x1D: | |||
case 0x1E: | |||
case 0x1F: | |||
alarmOrEventTypeString = "用户自定义"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", value.AlarmOrEventType); | |||
value.AlarmLevel = reader.ReadByte(); | |||
string alarmLevelString = "未知"; | |||
switch (value.AlarmLevel) | |||
{ | |||
case 0x01: | |||
alarmLevelString = "一级报警"; | |||
break; | |||
case 0x02: | |||
alarmLevelString = "二级报警"; | |||
break; | |||
} | |||
writer.WriteNumber($"[{value.AlarmLevel.ReadNumber()}]报警级别-{alarmLevelString}", value.AlarmLevel); | |||
value.Speed = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.Speed.ReadNumber()}]车速", value.Speed); | |||
value.Altitude = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Altitude.ReadNumber()}]高程", value.Altitude); | |||
value.Latitude = (int)reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.Latitude.ReadNumber()}]纬度", value.Latitude); | |||
value.Longitude = (int)reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.Longitude.ReadNumber()}]经度", value.Longitude); | |||
value.AlarmTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.AlarmTime.ToString("yyMMddHHmmss")}]日期时间", value.AlarmTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.VehicleState = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.VehicleState.ReadNumber()}]车辆状态", value.VehicleState); | |||
var vehicleStateBits=Convert.ToString(value.VehicleState, 2).PadLeft(16, '0'); | |||
writer.WriteStartObject($"车辆状态对象[{vehicleStateBits}]"); | |||
writer.WriteString($"[{vehicleStateBits[15]}]Bit0ACC状态", vehicleStateBits[15]=='0'?"关闭":"打开"); | |||
writer.WriteString($"[{vehicleStateBits[14]}]Bit1左转向状态", vehicleStateBits[14]=='0'?"关闭":"打开"); | |||
writer.WriteString($"[{vehicleStateBits[13]}]Bit2右转向状态", vehicleStateBits[13]=='0'?"关闭":"打开"); | |||
writer.WriteString($"[{vehicleStateBits[12]}]Bit3雨刮器状态", vehicleStateBits[12]=='0'?"关闭":"打开"); | |||
writer.WriteString($"[{vehicleStateBits[11]}]Bit4制动状态", vehicleStateBits[11] == '0' ? "未制动" : "制动"); | |||
writer.WriteString($"[{vehicleStateBits[10]}]Bit5插卡状态", vehicleStateBits[10] == '0' ? "未插卡" : "已插卡"); | |||
writer.WriteString($"[{vehicleStateBits[9]}]Bit6自定义", vehicleStateBits[9].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[8]}]Bit7自定义", vehicleStateBits[8].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[7]}]Bit8自定义", vehicleStateBits[7].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[6]}]Bit9自定义", vehicleStateBits[6].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[5]}]Bit10定位状态", vehicleStateBits[5] == '0' ? "未定位" : "已定位"); | |||
writer.WriteString($"[{vehicleStateBits[4]}]Bit11自定义", vehicleStateBits[4].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[3]}]Bit12自定义", vehicleStateBits[3].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[2]}]Bit13自定义", vehicleStateBits[2].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[1]}]Bit14自定义", vehicleStateBits[1].ToString()); | |||
writer.WriteString($"[{vehicleStateBits[0]}]Bit15自定义", vehicleStateBits[0].ToString()); | |||
writer.WriteEndObject(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty(); | |||
string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); | |||
value.AlarmIdentification.TerminalID = reader.ReadString(7); | |||
value.AlarmIdentification.Time = reader.ReadDateTime6(); | |||
value.AlarmIdentification.SN = reader.ReadByte(); | |||
value.AlarmIdentification.AttachCount = reader.ReadByte(); | |||
value.AlarmIdentification.Retain = reader.ReadByte(); | |||
writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalID); | |||
writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); | |||
writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0200_0x67 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0200_0x67 value = new JT808_0x0200_0x67(); | |||
value.AttachInfoId = reader.ReadByte(); | |||
value.AttachInfoLength = reader.ReadByte(); | |||
value.AlarmId = reader.ReadUInt32(); | |||
value.FlagState = reader.ReadByte(); | |||
value.AlarmOrEventType = reader.ReadByte(); | |||
value.AlarmLevel = reader.ReadByte(); | |||
value.Speed = reader.ReadByte(); | |||
value.Altitude = reader.ReadUInt16(); | |||
value.Latitude = (int)reader.ReadUInt32(); | |||
value.Longitude = (int)reader.ReadUInt32(); | |||
value.AlarmTime = reader.ReadDateTime6(); | |||
value.VehicleState = reader.ReadUInt16(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty | |||
{ | |||
TerminalID = reader.ReadString(7), | |||
Time = reader.ReadDateTime6(), | |||
SN = reader.ReadByte(), | |||
AttachCount = reader.ReadByte(), | |||
Retain = reader.ReadByte() | |||
}; | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x67 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.AttachInfoId); | |||
writer.WriteByte(value.AttachInfoLength); | |||
writer.WriteUInt32(value.AlarmId); | |||
writer.WriteByte(value.FlagState); | |||
writer.WriteByte(value.AlarmOrEventType); | |||
writer.WriteByte(value.AlarmLevel); | |||
writer.WriteByte(value.Speed); | |||
writer.WriteUInt16(value.Altitude); | |||
writer.WriteUInt32((uint)value.Latitude); | |||
writer.WriteUInt32((uint)value.Longitude); | |||
writer.WriteDateTime6(value.AlarmTime); | |||
writer.WriteUInt16(value.VehicleState); | |||
if (value.AlarmIdentification == null) | |||
{ | |||
throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); | |||
} | |||
writer.WriteString(value.AlarmIdentification.TerminalID); | |||
writer.WriteDateTime6(value.AlarmIdentification.Time); | |||
writer.WriteByte(value.AlarmIdentification.SN); | |||
writer.WriteByte(value.AlarmIdentification.AttachCount); | |||
writer.WriteByte(value.AlarmIdentification.Retain); | |||
} | |||
} | |||
} |
@@ -1,122 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Enums; | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 透传数据 | |||
/// </summary> | |||
public class JT808_0x0900_0xF7 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter<JT808_0x0900_0xF7>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 透传类型 | |||
/// </summary> | |||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF7; | |||
/// <summary> | |||
/// 消息列表总数 | |||
/// </summary> | |||
public byte USBMessageCount { get; set; } | |||
/// <summary> | |||
/// 消息列表数据 | |||
/// </summary> | |||
public List<JT808_0x0900_0xF7_USB> USBMessages { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); | |||
value.USBMessageCount = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.USBMessageCount.ReadNumber()}]消息列表总数", value.USBMessageCount); | |||
if (value.USBMessageCount > 0) | |||
{ | |||
writer.WriteStartArray("消息列表"); | |||
for (int i = 0; i < value.USBMessageCount; i++) | |||
{ | |||
writer.WriteStartObject(); | |||
JT808_0x0900_0xF7_USB item = new JT808_0x0900_0xF7_USB(); | |||
item.USBID = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.USBID.ReadNumber()}]外设ID", item.USBID); | |||
item.MessageLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.MessageLength.ReadNumber()}]消息长度", item.MessageLength); | |||
item.WorkingCondition = reader.ReadByte(); | |||
var workingCondition = (WorkingConditionType)item.WorkingCondition; | |||
writer.WriteNumber($"[{item.WorkingCondition.ReadNumber()}]工作状态-{workingCondition.ToString()}", item.WorkingCondition); | |||
item.AlarmStatus = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{item.AlarmStatus.ReadNumber()}]报警状态", item.AlarmStatus); | |||
var alarmStatusBits = Convert.ToString(item.AlarmStatus, 2).PadLeft(32, '0').AsSpan(); | |||
writer.WriteStartObject($"报警状态对象[{alarmStatusBits.ToString()}]"); | |||
writer.WriteString($"[bit12~bit31]预留", alarmStatusBits.Slice(12).ToString()); | |||
writer.WriteString($"]bit11]定位模块异常", alarmStatusBits[11].ToString()); | |||
writer.WriteString($"[bit10]通讯模块异常", alarmStatusBits[10].ToString()); | |||
writer.WriteString($"[bit6~bit9]预留", alarmStatusBits.Slice(6,4).ToString()); | |||
writer.WriteString($"[bit5]电池异常", alarmStatusBits[5].ToString()); | |||
writer.WriteString($"[bit4]扬声器异常", alarmStatusBits[4].ToString()); | |||
writer.WriteString($"[bit3]红外补光异常", alarmStatusBits[3].ToString()); | |||
writer.WriteString($"[bit2]辅存储器异常", alarmStatusBits[2].ToString()); | |||
writer.WriteString($"[bit1]主存储器异常", alarmStatusBits[1].ToString()); | |||
writer.WriteString($"[bit0]摄像头异常", alarmStatusBits[0].ToString()); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0900_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); | |||
value.USBMessageCount = reader.ReadByte(); | |||
if (value.USBMessageCount > 0) | |||
{ | |||
value.USBMessages = new List<JT808_0x0900_0xF7_USB>(); | |||
for (int i = 0; i < value.USBMessageCount; i++) | |||
{ | |||
JT808_0x0900_0xF7_USB item = new JT808_0x0900_0xF7_USB(); | |||
item.USBID = reader.ReadByte(); | |||
item.MessageLength = reader.ReadByte(); | |||
item.WorkingCondition = reader.ReadByte(); | |||
item.AlarmStatus = reader.ReadUInt32(); | |||
value.USBMessages.Add(item); | |||
} | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0900_0xF7 value, IJT808Config config) | |||
{ | |||
if (value.USBMessages != null && value.USBMessages.Count > 0) | |||
{ | |||
writer.WriteByte((byte)value.USBMessages.Count); | |||
foreach (var item in value.USBMessages) | |||
{ | |||
writer.WriteByte(item.USBID); | |||
writer.WriteByte(5); | |||
writer.WriteByte(item.WorkingCondition); | |||
writer.WriteUInt32(item.AlarmStatus); | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -1,175 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 透传数据 | |||
/// </summary> | |||
public class JT808_0x0900_0xF8 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter<JT808_0x0900_0xF8>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 透传类型 | |||
/// </summary> | |||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF8; | |||
/// <summary> | |||
/// 消息列表总数 | |||
/// </summary> | |||
public byte USBMessageCount { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public List<JT808_0x0900_0xF8_USB> USBMessages { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0900_0xF8 value = new JT808_0x0900_0xF8(); | |||
value.USBMessageCount = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.USBMessageCount.ReadNumber()}]消息列表总数", value.USBMessageCount); | |||
if (value.USBMessageCount > 0) | |||
{ | |||
writer.WriteStartArray("消息列表"); | |||
for (int i = 0; i < value.USBMessageCount; i++) | |||
{ | |||
writer.WriteStartObject(); | |||
JT808_0x0900_0xF8_USB item = new JT808_0x0900_0xF8_USB(); | |||
item.USBID = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.USBID.ReadNumber()}]外设ID", item.USBID); | |||
item.MessageLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.MessageLength.ReadNumber()}]消息长度", item.MessageLength); | |||
item.CompantNameLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.CompantNameLength.ReadNumber()}]公司名称长度", item.CompantNameLength); | |||
string compantNameHex = reader.ReadVirtualArray(item.CompantNameLength).ToArray().ToHexString(); | |||
item.CompantName = reader.ReadString(item.CompantNameLength); | |||
writer.WriteString($"[{compantNameHex}]公司名称", item.CompantName); | |||
item.ProductModelLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.ProductModelLength.ReadNumber()}]产品型号长度", item.ProductModelLength); | |||
string productModelHex = reader.ReadVirtualArray(item.ProductModelLength).ToArray().ToHexString(); | |||
item.ProductModel = reader.ReadString(item.ProductModelLength); | |||
writer.WriteString($"[{productModelHex}]产品型号", item.ProductModel); | |||
item.HardwareVersionNumberLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.HardwareVersionNumberLength.ReadNumber()}]硬件版本号长度", item.HardwareVersionNumberLength); | |||
string hardwareVersionNumberHex = reader.ReadVirtualArray(item.HardwareVersionNumberLength).ToArray().ToHexString(); | |||
item.HardwareVersionNumber = reader.ReadString(item.HardwareVersionNumberLength); | |||
writer.WriteString($"[{hardwareVersionNumberHex}]硬件版本号", item.HardwareVersionNumber); | |||
item.SoftwareVersionNumberLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.SoftwareVersionNumberLength.ReadNumber()}]软件版本号长度", item.SoftwareVersionNumberLength); | |||
string softwareVersionNumberHex = reader.ReadVirtualArray(item.SoftwareVersionNumberLength).ToArray().ToHexString(); | |||
item.SoftwareVersionNumber = reader.ReadString(item.SoftwareVersionNumberLength); | |||
writer.WriteString($"[{softwareVersionNumberHex}]软件版本号", item.SoftwareVersionNumber); | |||
item.DevicesIDLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.DevicesIDLength.ReadNumber()}]设备ID长度", item.DevicesIDLength); | |||
string devicesIDHex = reader.ReadVirtualArray(item.DevicesIDLength).ToArray().ToHexString(); | |||
item.DevicesID = reader.ReadString(item.DevicesIDLength); | |||
writer.WriteString($"[{devicesIDHex}]设备ID", item.DevicesID); | |||
item.CustomerCodeLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{item.CustomerCodeLength.ReadNumber()}]客户代码长度", item.CustomerCodeLength); | |||
string customerCodeHex = reader.ReadVirtualArray(item.CustomerCodeLength).ToArray().ToHexString(); | |||
item.CustomerCode = reader.ReadString(item.CustomerCodeLength); | |||
writer.WriteString($"[{customerCodeHex}]客户代码", item.CustomerCode); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x0900_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x0900_0xF8 value = new JT808_0x0900_0xF8(); | |||
value.USBMessageCount = reader.ReadByte(); | |||
if (value.USBMessageCount > 0) | |||
{ | |||
value.USBMessages = new List<JT808_0x0900_0xF8_USB>(); | |||
for (int i = 0; i < value.USBMessageCount; i++) | |||
{ | |||
JT808_0x0900_0xF8_USB item = new JT808_0x0900_0xF8_USB(); | |||
item.USBID = reader.ReadByte(); | |||
item.MessageLength = reader.ReadByte(); | |||
item.CompantNameLength = reader.ReadByte(); | |||
item.CompantName = reader.ReadString(item.CompantNameLength); | |||
item.ProductModelLength = reader.ReadByte(); | |||
item.ProductModel = reader.ReadString(item.ProductModelLength); | |||
item.HardwareVersionNumberLength = reader.ReadByte(); | |||
item.HardwareVersionNumber = reader.ReadString(item.HardwareVersionNumberLength); | |||
item.SoftwareVersionNumberLength = reader.ReadByte(); | |||
item.SoftwareVersionNumber = reader.ReadString(item.SoftwareVersionNumberLength); | |||
item.DevicesIDLength = reader.ReadByte(); | |||
item.DevicesID = reader.ReadString(item.DevicesIDLength); | |||
item.CustomerCodeLength = reader.ReadByte(); | |||
item.CustomerCode = reader.ReadString(item.CustomerCodeLength); | |||
value.USBMessages.Add(item); | |||
} | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0900_0xF8 value, IJT808Config config) | |||
{ | |||
if (value.USBMessages != null && value.USBMessages.Count > 0) | |||
{ | |||
writer.WriteByte((byte)value.USBMessages.Count); | |||
foreach (var item in value.USBMessages) | |||
{ | |||
writer.WriteByte(item.USBID); | |||
writer.Skip(1,out int messageLengthPosition); | |||
writer.Skip(1, out int CompantNameLengthPosition); | |||
writer.WriteString(item.CompantName); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - CompantNameLengthPosition - 1), CompantNameLengthPosition); | |||
writer.Skip(1, out int ProductModelLengthPosition); | |||
writer.WriteString(item.ProductModel); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ProductModelLengthPosition - 1), ProductModelLengthPosition); | |||
writer.Skip(1, out int HardwareVersionNumberLengthPosition); | |||
writer.WriteString(item.HardwareVersionNumber); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - HardwareVersionNumberLengthPosition - 1), HardwareVersionNumberLengthPosition); | |||
writer.Skip(1, out int SoftwareVersionNumberLengthPosition); | |||
writer.WriteString(item.SoftwareVersionNumber); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - SoftwareVersionNumberLengthPosition - 1), SoftwareVersionNumberLengthPosition); | |||
writer.Skip(1, out int DevicesIDLengthPosition); | |||
writer.WriteString(item.DevicesID); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - DevicesIDLengthPosition - 1), DevicesIDLengthPosition); | |||
writer.Skip(1, out int CustomerCodeLengthPosition); | |||
writer.WriteString(item.CustomerCode); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - CustomerCodeLengthPosition - 1), CustomerCodeLengthPosition); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - messageLengthPosition - 1), messageLengthPosition); | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -1,175 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 报警附件信息消息 | |||
/// </summary> | |||
public class JT808_0x1210: JT808Bodies, IJT808MessagePackFormatter<JT808_0x1210>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 制造商Id | |||
/// 7 个字节,由大写字母和数字组成,此终端ID 由制造商自行定义,位数不足时,后补“0x00” | |||
/// </summary> | |||
public string MakerID { get; set; } | |||
/// <summary> | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// 平台给报警分配的唯一编号 | |||
/// 32 | |||
/// </summary> | |||
public string AlarmId { get; set; } | |||
/// <summary> | |||
/// 信息类型 | |||
/// 0x00:正常报警文件信息 | |||
/// 0x01:补传报警文件信息 | |||
/// </summary> | |||
public byte InfoType { get; set; } | |||
/// <summary> | |||
/// 附件数量 | |||
/// </summary> | |||
public byte AttachCount { get; set; } | |||
/// <summary> | |||
/// 附件信息列表 | |||
/// </summary> | |||
public List<AttachProperty> AttachInfos { get; set; } | |||
/// <summary> | |||
/// 报警附件信息消息Id | |||
/// </summary> | |||
public override ushort MsgId => 0x1210; | |||
/// <summary> | |||
/// 报警附件信息消息 | |||
/// </summary> | |||
public override string Description => "报警附件信息消息"; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x1210 value = new JT808_0x1210(); | |||
string makerIdHex=reader.ReadVirtualArray(7).ToArray().ToHexString(); | |||
value.MakerID = reader.ReadString(7); | |||
writer.WriteString($"[{makerIdHex}]制造商Id", value.MakerID); | |||
value.AlarmIdentification = new AlarmIdentificationProperty(); | |||
string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); | |||
value.AlarmIdentification.TerminalID = reader.ReadString(7); | |||
value.AlarmIdentification.Time = reader.ReadDateTime6(); | |||
value.AlarmIdentification.SN = reader.ReadByte(); | |||
value.AlarmIdentification.AttachCount = reader.ReadByte(); | |||
value.AlarmIdentification.Retain = reader.ReadByte(); | |||
writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalID); | |||
writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); | |||
writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
string alarmIdHex = reader.ReadVirtualArray(32).ToArray().ToHexString(); | |||
value.AlarmId = reader.ReadString(32); | |||
writer.WriteString($"[{alarmIdHex}]平台给报警分配的唯一编号", value.AlarmId); | |||
value.InfoType = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.InfoType.ReadNumber()}]信息类型", value.InfoType); | |||
value.AttachCount = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachCount.ReadNumber()}]附件数量", value.AttachCount); | |||
if (value.AttachCount > 0) | |||
{ | |||
writer.WriteStartArray("附件信息列表"); | |||
for (int i = 0; i < value.AttachCount; i++) | |||
{ | |||
writer.WriteStartObject(); | |||
AttachProperty attachProperty = new AttachProperty(); | |||
attachProperty.FileNameLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{attachProperty.FileNameLength.ReadNumber()}]文件名称长度", attachProperty.FileNameLength); | |||
string fileNameHex = reader.ReadVirtualArray(attachProperty.FileNameLength).ToArray().ToHexString(); | |||
attachProperty.FileName = reader.ReadString(attachProperty.FileNameLength); | |||
writer.WriteString($"[{fileNameHex}]文件名称", attachProperty.FileName); | |||
attachProperty.FileSize = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{ attachProperty.FileSize.ReadNumber()}]文件大小", attachProperty.FileSize); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x1210 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x1210 value = new JT808_0x1210(); | |||
value.MakerID = reader.ReadString(7); | |||
value.AlarmIdentification = new AlarmIdentificationProperty | |||
{ | |||
TerminalID = reader.ReadString(7), | |||
Time = reader.ReadDateTime6(), | |||
SN = reader.ReadByte(), | |||
AttachCount = reader.ReadByte(), | |||
Retain = reader.ReadByte() | |||
}; | |||
value.AlarmId = reader.ReadString(32); | |||
value.InfoType = reader.ReadByte(); | |||
value.AttachCount = reader.ReadByte(); | |||
if (value.AttachCount > 0) | |||
{ | |||
value.AttachInfos = new List<AttachProperty>(); | |||
for (int i = 0; i < value.AttachCount; i++) | |||
{ | |||
AttachProperty attachProperty = new AttachProperty(); | |||
attachProperty.FileNameLength = reader.ReadByte(); | |||
attachProperty.FileName = reader.ReadString(attachProperty.FileNameLength); | |||
attachProperty.FileSize = reader.ReadUInt32(); | |||
value.AttachInfos.Add(attachProperty); | |||
} | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1210 value, IJT808Config config) | |||
{ | |||
writer.WriteString(value.MakerID.PadRight(7, '\0')); | |||
if (value.AlarmIdentification == null) | |||
{ | |||
throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); | |||
} | |||
writer.WriteString(value.AlarmIdentification.TerminalID); | |||
writer.WriteDateTime6(value.AlarmIdentification.Time); | |||
writer.WriteByte(value.AlarmIdentification.SN); | |||
writer.WriteByte(value.AlarmIdentification.AttachCount); | |||
writer.WriteByte(value.AlarmIdentification.Retain); | |||
writer.WriteString(value.AlarmId); | |||
writer.WriteByte(value.InfoType); | |||
if (value.AttachInfos != null && value.AttachInfos.Count > 0) | |||
{ | |||
writer.WriteByte((byte)value.AttachInfos.Count); | |||
foreach (var item in value.AttachInfos) | |||
{ | |||
writer.Skip(1, out int FileNameLengthPosition); | |||
writer.WriteString(item.FileName); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition); | |||
writer.WriteUInt32(item.FileSize); | |||
} | |||
} | |||
else | |||
{ | |||
writer.WriteByte(0); | |||
} | |||
} | |||
} | |||
} |
@@ -1,87 +0,0 @@ | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 文件信息上传 | |||
/// </summary> | |||
public class JT808_0x1211 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x1211>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 文件信息上传 | |||
/// </summary> | |||
public override string Description => "文件信息上传"; | |||
/// <summary> | |||
/// 文件名称长度 | |||
/// </summary> | |||
public byte FileNameLength { get; set; } | |||
/// <summary> | |||
/// 文件名称 | |||
/// 形如:文件类型_通道号_报警类型_序号_报警编号.后缀名 | |||
/// </summary> | |||
public string FileName { get; set; } | |||
/// <summary> | |||
/// 文件类型 | |||
/// </summary> | |||
public byte FileType { get; set; } | |||
/// <summary> | |||
/// 文件大小 | |||
/// </summary> | |||
public uint FileSize { get; set; } | |||
/// <summary> | |||
/// 文件信息上传Id | |||
/// </summary> | |||
public override ushort MsgId => 0x1211; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x1211 value = new JT808_0x1211(); | |||
value.FileNameLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FileNameLength.ReadNumber()}]文件名称长度", value.FileNameLength); | |||
string fileNameHex = reader.ReadVirtualArray(value.FileNameLength).ToArray().ToHexString(); | |||
value.FileName = reader.ReadString(value.FileNameLength); | |||
writer.WriteString($"[{fileNameHex}]文件名称", value.FileName); | |||
value.FileType = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FileType.ReadNumber()}]文件类型", value.FileType); | |||
value.FileSize = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小", value.FileSize); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x1211 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x1211 value = new JT808_0x1211(); | |||
value.FileNameLength = reader.ReadByte(); | |||
value.FileName = reader.ReadString(value.FileNameLength); | |||
value.FileType = reader.ReadByte(); | |||
value.FileSize = reader.ReadUInt32(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1211 value, IJT808Config config) | |||
{ | |||
writer.Skip(1, out int FileNameLengthPosition); | |||
writer.WriteString(value.FileName); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition); | |||
writer.WriteByte(value.FileType); | |||
writer.WriteUInt32(value.FileSize); | |||
} | |||
} | |||
} |
@@ -1,87 +0,0 @@ | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 文件上传完成消息 | |||
/// </summary> | |||
public class JT808_0x1212 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x1212>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 文件上传完成消息 | |||
/// </summary> | |||
public override string Description => "文件上传完成消息"; | |||
/// <summary> | |||
/// 文件名称长度 | |||
/// </summary> | |||
public byte FileNameLength { get; set; } | |||
/// <summary> | |||
/// 文件名称 | |||
/// 形如:文件类型_通道号_报警类型_序号_报警编号.后缀名 | |||
/// </summary> | |||
public string FileName { get; set; } | |||
/// <summary> | |||
/// 文件类型 | |||
/// </summary> | |||
public byte FileType { get; set; } | |||
/// <summary> | |||
/// 文件大小 | |||
/// </summary> | |||
public uint FileSize { get; set; } | |||
/// <summary> | |||
/// 文件上传完成消息 | |||
/// </summary> | |||
public override ushort MsgId => 0x1212; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x1212 value = new JT808_0x1212(); | |||
value.FileNameLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FileNameLength.ReadNumber()}]文件名称长度", value.FileNameLength); | |||
string fileNameHex = reader.ReadVirtualArray(value.FileNameLength).ToArray().ToHexString(); | |||
value.FileName = reader.ReadString(value.FileNameLength); | |||
writer.WriteString($"[{fileNameHex}]文件名称", value.FileName); | |||
value.FileType = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FileType.ReadNumber()}]文件类型", value.FileType); | |||
value.FileSize = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小", value.FileSize); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x1212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x1212 value = new JT808_0x1212(); | |||
value.FileNameLength = reader.ReadByte(); | |||
value.FileName = reader.ReadString(value.FileNameLength); | |||
value.FileType = reader.ReadByte(); | |||
value.FileSize = reader.ReadUInt32(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1212 value, IJT808Config config) | |||
{ | |||
writer.Skip(1, out int FileNameLengthPosition); | |||
writer.WriteString(value.FileName); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition); | |||
writer.WriteByte(value.FileType); | |||
writer.WriteUInt32(value.FileSize); | |||
} | |||
} | |||
} |
@@ -1,456 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Enums; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 高级驾驶辅助系统参数 | |||
/// </summary> | |||
public class JT808_0x8103_0xF364 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF364>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 高级驾驶辅助系统参数 | |||
/// </summary> | |||
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF364; | |||
/// <summary> | |||
/// 高级驾驶辅助系统参数长度 | |||
/// </summary> | |||
public override byte ParamLength { get; set; } | |||
/// <summary> | |||
/// 报警判断速度阈值 | |||
/// </summary> | |||
public byte AlarmJudgeSpeedThreshold { get; set; } | |||
/// <summary> | |||
/// 报警提示音量 | |||
/// </summary> | |||
public byte WarningVolume { get; set; } | |||
/// <summary> | |||
/// 主动拍照策略 | |||
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.ActivePhotographyStrategyType"/> | |||
/// </summary> | |||
public byte ActivePhotographyStrategy { get; set; } | |||
/// <summary> | |||
/// 主动定时拍照时间间隔 | |||
/// </summary> | |||
public ushort ActivelyTimePhotoInterval { get; set; } | |||
/// <summary> | |||
/// 主动定距拍照距离间隔 | |||
/// </summary> | |||
public ushort ActiveDistancePhotographyDistanceInterval { get; set; } | |||
/// <summary> | |||
/// 单次主动拍照张数 | |||
/// </summary> | |||
public byte SingleInitiativePhotos { get; set; } | |||
/// <summary> | |||
/// 单次主动拍照时间间隔 | |||
/// </summary> | |||
public byte SingleInitiativePhotosInterval { get; set; } | |||
/// <summary> | |||
/// 拍照分辨率 | |||
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.PhotoResolutionType"/> | |||
/// </summary> | |||
public byte PhotoResolution { get; set; } | |||
/// <summary> | |||
/// 视频录制分辨率 | |||
/// </summary> | |||
public byte VideoRecordingResolution { get; set; } | |||
/// <summary> | |||
/// 报警使能 | |||
/// </summary> | |||
public uint AlarmEnable { get; set; } | |||
/// <summary> | |||
/// 事件使能 | |||
/// </summary> | |||
public uint EventEnable { get; set; } | |||
/// <summary> | |||
/// 预留字段 | |||
/// </summary> | |||
public byte Placeholder1 { get; set; } | |||
/// <summary> | |||
/// 障碍物报警距离阈值 | |||
/// </summary> | |||
public byte DistanceThresholdObstacleAlarm { get; set; } | |||
/// <summary> | |||
/// 障碍物报警分级速度阈值 | |||
/// </summary> | |||
public byte HierarchicalSpeedThresholdObstacleAlarm { get; set; } | |||
/// <summary> | |||
/// 障碍物报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterObstacleAlarm { get; set; } | |||
/// <summary> | |||
/// 障碍物报警拍照张数 | |||
/// </summary> | |||
public byte BarrierAlarmPhotographs { get; set; } | |||
/// <summary> | |||
/// 障碍物报警拍照间隔 | |||
/// </summary> | |||
public byte ObstacleAlarmInterval { get; set; } | |||
/// <summary> | |||
/// 频繁变道报警判断时间段 | |||
/// </summary> | |||
public byte FrequentChannelChangeAlarmJudgmentTimePeriod { get; set; } | |||
/// <summary> | |||
/// 频繁变道报警判断次数 | |||
/// </summary> | |||
public byte FrequentAlarmJudgmentNumberChannelChange { get; set; } | |||
/// <summary> | |||
/// 频繁变道报警分级速度阈值 | |||
/// </summary> | |||
public byte HierarchicalSpeedThresholdFrequentChannelChangeAlarm { get; set; } | |||
/// <summary> | |||
/// 频繁变道报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm { get; set; } | |||
/// <summary> | |||
/// 频繁变道报警拍照张数 | |||
/// </summary> | |||
public byte FrequentChannelChangeAlarmPhotos { get; set; } | |||
/// <summary> | |||
/// 频繁变道报警拍照间隔 | |||
/// </summary> | |||
public byte FrequentLaneChangeAlarmInterval { get; set; } | |||
/// <summary> | |||
/// 车道偏离报警分级速度阈值 | |||
/// </summary> | |||
public byte GradedSpeedThresholdLaneDeviationAlarm { get; set; } | |||
/// <summary> | |||
/// 车道偏离报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm { get; set; } | |||
/// <summary> | |||
/// 车道偏离报警拍照张数 | |||
/// </summary> | |||
public byte LaneDepartureAlarmPhoto { get; set; } | |||
/// <summary> | |||
/// 车道偏离报警拍照间隔 | |||
/// </summary> | |||
public byte LaneDepartureAlarmPhotoInterval { get; set; } | |||
/// <summary> | |||
/// 前向碰撞报警时间阈值 | |||
/// </summary> | |||
public byte ForwardCollisionWarningTimeThreshold { get; set; } | |||
/// <summary> | |||
/// 前向碰撞报警分级速度阈值 | |||
/// </summary> | |||
public byte HierarchicalSpeedThresholdForwardCollisionWarning { get; set; } | |||
/// <summary> | |||
/// 前向碰撞报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm { get; set; } | |||
/// <summary> | |||
/// 前向碰撞报警拍照张数 | |||
/// </summary> | |||
public byte ForwardCollisionAlarmPhotographs { get; set; } | |||
/// <summary> | |||
/// 前向碰撞报警拍照间隔 | |||
/// </summary> | |||
public byte ForwardCollisionAlarmInterval { get; set; } | |||
/// <summary> | |||
/// 行人碰撞报警时间阈值 | |||
/// </summary> | |||
public byte PedestrianCollisionAlarmTimeThreshold { get; set; } | |||
/// <summary> | |||
/// 行人碰撞报警使能速度阈值 | |||
/// </summary> | |||
public byte PedestrianCollisionAlarmEnablingSpeedThreshold { get; set; } | |||
/// <summary> | |||
/// 行人碰撞报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm { get; set; } | |||
/// <summary> | |||
/// 行人碰撞报警拍照张数 | |||
/// </summary> | |||
public byte PedestrianCollisionAlarmPhotos { get; set; } | |||
/// <summary> | |||
/// 行人碰撞报警拍照间隔 | |||
/// </summary> | |||
public byte PedestrianCollisionAlarmInterval { get; set; } | |||
/// <summary> | |||
/// 车距监控报警距离阈值 | |||
/// </summary> | |||
public byte VehicleDistanceMonitoringAlarmDistanceThreshold { get; set; } | |||
/// <summary> | |||
/// 车距监控报警分级速度阈值 | |||
/// </summary> | |||
public byte VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold { get; set; } | |||
/// <summary> | |||
/// 车距过近报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity { get; set; } | |||
/// <summary> | |||
/// 车距过近报警拍照张数 | |||
/// </summary> | |||
public byte AlarmPhotoVehicleCloseDistance { get; set; } | |||
/// <summary> | |||
/// 车距过近报警拍照间隔 | |||
/// </summary> | |||
public byte AlarmPhotoVehicleCloseDistanceInterval { get; set; } | |||
/// <summary> | |||
/// 道路标志识别拍照张数 | |||
/// </summary> | |||
public byte RoadSignRecognitionPhotographs { get; set; } | |||
/// <summary> | |||
/// 道路标志识别拍照间隔 | |||
/// </summary> | |||
public byte RoadSignRecognitionPhotographsInterval { get; set; } | |||
/// <summary> | |||
/// 保留字段 | |||
/// </summary> | |||
public byte[] Placeholder2 { get; set; } = new byte[4]; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF364 value = new JT808_0x8103_0xF364(); | |||
value.ParamId = reader.ReadUInt32(); | |||
value.ParamLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ParamId.ReadNumber()}]参数ID", value.ParamId); | |||
writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength); | |||
value.AlarmJudgeSpeedThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AlarmJudgeSpeedThreshold.ReadNumber()}]报警判断速度阈值", value.AlarmJudgeSpeedThreshold); | |||
value.WarningVolume = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.WarningVolume.ReadNumber()}]报警提示音量", value.WarningVolume); | |||
value.ActivePhotographyStrategy = reader.ReadByte(); | |||
var activePhotographyStrategy = (ActivePhotographyStrategyType)ActivePhotographyStrategy; | |||
writer.WriteNumber($"[{value.ActivePhotographyStrategy.ReadNumber()}]主动拍照策略-{activePhotographyStrategy.ToString()}", value.ActivePhotographyStrategy); | |||
value.ActivelyTimePhotoInterval = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.ActivelyTimePhotoInterval.ReadNumber()}]主动定时拍照时间间隔", value.ActivelyTimePhotoInterval); | |||
value.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.ActiveDistancePhotographyDistanceInterval.ReadNumber()}]主动定距拍照距离间隔", value.ActiveDistancePhotographyDistanceInterval); | |||
value.SingleInitiativePhotos = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.SingleInitiativePhotos.ReadNumber()}]单次主动拍照张数", value.SingleInitiativePhotos); | |||
value.SingleInitiativePhotosInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.SingleInitiativePhotosInterval.ReadNumber()}]单次主动拍照时间间隔", value.SingleInitiativePhotosInterval); | |||
value.PhotoResolution = reader.ReadByte(); | |||
var photoResolutionType = (PhotoResolutionType)value.PhotoResolution; | |||
writer.WriteNumber($"[{value.PhotoResolution.ReadNumber()}]拍照分辨率-{photoResolutionType.ToString()}", value.PhotoResolution); | |||
value.VideoRecordingResolution = reader.ReadByte(); | |||
var videoRecordingResolution = (VideoRecordingResolutionType)value.VideoRecordingResolution; | |||
writer.WriteNumber($"[{value.VideoRecordingResolution.ReadNumber()}]视频录制分辨率-{videoRecordingResolution.ToString()}", value.VideoRecordingResolution); | |||
value.AlarmEnable = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.AlarmEnable.ReadNumber()}]报警使能", value.AlarmEnable); | |||
var alarmEnableBits = Convert.ToString(value.AlarmEnable, 2).PadLeft(32, '0').AsSpan(); | |||
writer.WriteStartObject("报警使能对象"); | |||
writer.WriteString("[bit30~bit31]预留", alarmEnableBits.Slice(30,2).ToString()); | |||
writer.WriteString("[bit17~bit29]用户自定义", alarmEnableBits.Slice(17, 13).ToString()); | |||
writer.WriteString("[bit16]道路标识超限报警", alarmEnableBits[16]=='0'?"关闭":"打开"); | |||
writer.WriteString("[bit12~bit15]道路标识超限报警", alarmEnableBits.Slice(12, 4).ToString()); | |||
writer.WriteString("[bit11]车距过近二级报警", alarmEnableBits[11] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit10]车距过近一级报警", alarmEnableBits[10] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit9]行人碰撞二级报警", alarmEnableBits[9] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit8]行人碰撞一级报警", alarmEnableBits[8] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit7]前向碰撞二级报警", alarmEnableBits[7] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit6]前向碰撞一级报警", alarmEnableBits[6] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit5]车道偏离二级报警", alarmEnableBits[5] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit4]车道偏离一级报警", alarmEnableBits[4] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit3]频繁变道二级报警", alarmEnableBits[3] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit2]频繁变道一级报警", alarmEnableBits[2] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit1]障碍检测二级报警", alarmEnableBits[1] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit0]障碍检测一级报警", alarmEnableBits[0] == '0' ? "关闭" : "打开"); | |||
writer.WriteEndObject(); | |||
value.EventEnable = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.EventEnable.ReadNumber()}]事件使能", value.EventEnable); | |||
var eventEnableBits = Convert.ToString(value.EventEnable, 2).PadLeft(32, '0').AsSpan(); | |||
writer.WriteStartObject("事件使能对象"); | |||
writer.WriteString("[bit30~bit31]预留", eventEnableBits.Slice(30, 2).ToString()); | |||
writer.WriteString("[bit2~bit29]用户自定义", alarmEnableBits.Slice(2, 28).ToString()); | |||
writer.WriteString("[bit1]主动拍照", alarmEnableBits[1] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit0]道路标识识别", alarmEnableBits[0] == '0' ? "关闭" : "打开"); | |||
writer.WriteEndObject(); | |||
value.Placeholder1 = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.Placeholder1.ReadNumber()}]预留字段", value.Placeholder1); | |||
value.DistanceThresholdObstacleAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.DistanceThresholdObstacleAlarm.ReadNumber()}]障碍物报警距离阈值", value.DistanceThresholdObstacleAlarm); | |||
value.HierarchicalSpeedThresholdObstacleAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.HierarchicalSpeedThresholdObstacleAlarm.ReadNumber()}]障碍物报警分级速度阈值", value.HierarchicalSpeedThresholdObstacleAlarm); | |||
value.VideoRecordingTimeBeforeAndAfterObstacleAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterObstacleAlarm.ReadNumber()}]障碍物报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterObstacleAlarm); | |||
value.BarrierAlarmPhotographs = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.BarrierAlarmPhotographs.ReadNumber()}]障碍物报警拍照张数", value.BarrierAlarmPhotographs); | |||
value.ObstacleAlarmInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ObstacleAlarmInterval.ReadNumber()}]障碍物报警拍照间隔", value.ObstacleAlarmInterval); | |||
value.FrequentChannelChangeAlarmJudgmentTimePeriod = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FrequentChannelChangeAlarmJudgmentTimePeriod.ReadNumber()}]频繁变道报警判断时间段", value.FrequentChannelChangeAlarmJudgmentTimePeriod); | |||
value.FrequentAlarmJudgmentNumberChannelChange = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FrequentAlarmJudgmentNumberChannelChange.ReadNumber()}]频繁变道报警判断次数", value.FrequentAlarmJudgmentNumberChannelChange); | |||
value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm.ReadNumber()}]频繁变道报警分级速度阈值", value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm); | |||
value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm.ReadNumber()}]频繁变道报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm); | |||
value.FrequentChannelChangeAlarmPhotos = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FrequentChannelChangeAlarmPhotos.ReadNumber()}]频繁变道报警拍照张数", value.FrequentChannelChangeAlarmPhotos); | |||
value.FrequentLaneChangeAlarmInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FrequentLaneChangeAlarmInterval.ReadNumber()}]频繁变道报警拍照间隔", value.FrequentLaneChangeAlarmInterval); | |||
value.GradedSpeedThresholdLaneDeviationAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.GradedSpeedThresholdLaneDeviationAlarm.ReadNumber()}]车道偏离报警分级速度阈值", value.GradedSpeedThresholdLaneDeviationAlarm); | |||
value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm.ReadNumber()}]车道偏离报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm); | |||
value.LaneDepartureAlarmPhoto = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.LaneDepartureAlarmPhoto.ReadNumber()}]车道偏离报警拍照张数", value.LaneDepartureAlarmPhoto); | |||
value.LaneDepartureAlarmPhotoInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.LaneDepartureAlarmPhotoInterval.ReadNumber()}]车道偏离报警拍照间隔", value.LaneDepartureAlarmPhotoInterval); | |||
value.ForwardCollisionWarningTimeThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ForwardCollisionWarningTimeThreshold.ReadNumber()}]前向碰撞报警时间阈值", value.ForwardCollisionWarningTimeThreshold); | |||
value.HierarchicalSpeedThresholdForwardCollisionWarning = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.HierarchicalSpeedThresholdForwardCollisionWarning.ReadNumber()}]前向碰撞报警分级速度阈值", value.HierarchicalSpeedThresholdForwardCollisionWarning); | |||
value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm.ReadNumber()}]前向碰撞报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm); | |||
value.ForwardCollisionAlarmPhotographs = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ForwardCollisionAlarmPhotographs.ReadNumber()}]前向碰撞报警拍照张数", value.ForwardCollisionAlarmPhotographs); | |||
value.ForwardCollisionAlarmInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ForwardCollisionAlarmInterval.ReadNumber()}]前向碰撞报警拍照间隔", value.ForwardCollisionAlarmInterval); | |||
value.PedestrianCollisionAlarmTimeThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.PedestrianCollisionAlarmTimeThreshold.ReadNumber()}]行人碰撞报警时间阈值", value.PedestrianCollisionAlarmTimeThreshold); | |||
value.PedestrianCollisionAlarmEnablingSpeedThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.PedestrianCollisionAlarmEnablingSpeedThreshold.ReadNumber()}]行人碰撞报警使能速度阈值", value.PedestrianCollisionAlarmEnablingSpeedThreshold); | |||
value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm.ReadNumber()}]行人碰撞报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm); | |||
value.PedestrianCollisionAlarmPhotos = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.PedestrianCollisionAlarmPhotos.ReadNumber()}]行人碰撞报警拍照张数", value.PedestrianCollisionAlarmPhotos); | |||
value.PedestrianCollisionAlarmInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.PedestrianCollisionAlarmInterval.ReadNumber()}]行人碰撞报警拍照间隔", value.PedestrianCollisionAlarmInterval); | |||
value.VehicleDistanceMonitoringAlarmDistanceThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VehicleDistanceMonitoringAlarmDistanceThreshold.ReadNumber()}]车距监控报警距离阈值", value.VehicleDistanceMonitoringAlarmDistanceThreshold); | |||
value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold.ReadNumber()}]车距监控报警分级速度阈值", value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold); | |||
value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity.ReadNumber()}]车距过近报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity); | |||
value.AlarmPhotoVehicleCloseDistance = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AlarmPhotoVehicleCloseDistance.ReadNumber()}]车距过近报警拍照张数", value.AlarmPhotoVehicleCloseDistance); | |||
value.AlarmPhotoVehicleCloseDistanceInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AlarmPhotoVehicleCloseDistanceInterval.ReadNumber()}]车距过近报警拍照间隔", value.AlarmPhotoVehicleCloseDistanceInterval); | |||
value.RoadSignRecognitionPhotographs = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.RoadSignRecognitionPhotographs.ReadNumber()}]道路标志识别拍照张数", value.RoadSignRecognitionPhotographs); | |||
value.RoadSignRecognitionPhotographsInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.RoadSignRecognitionPhotographsInterval.ReadNumber()}]道路标志识别拍照间隔", value.RoadSignRecognitionPhotographsInterval); | |||
value.Placeholder2 = reader.ReadArray(4).ToArray(); | |||
writer.WriteString("保留字段", value.Placeholder2.ToHexString()); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8103_0xF364 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF364 value = new JT808_0x8103_0xF364(); | |||
value.ParamId = reader.ReadUInt32(); | |||
value.ParamLength = reader.ReadByte(); | |||
value.AlarmJudgeSpeedThreshold = reader.ReadByte(); | |||
value.WarningVolume = reader.ReadByte(); | |||
value.ActivePhotographyStrategy = reader.ReadByte(); | |||
value.ActivelyTimePhotoInterval = reader.ReadUInt16(); | |||
value.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16(); | |||
value.SingleInitiativePhotos = reader.ReadByte(); | |||
value.SingleInitiativePhotosInterval = reader.ReadByte(); | |||
value.PhotoResolution = reader.ReadByte(); | |||
value.VideoRecordingResolution = reader.ReadByte(); | |||
value.AlarmEnable = reader.ReadUInt32(); | |||
value.EventEnable = reader.ReadUInt32(); | |||
value.Placeholder1 = reader.ReadByte(); | |||
value.DistanceThresholdObstacleAlarm = reader.ReadByte(); | |||
value.HierarchicalSpeedThresholdObstacleAlarm = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterObstacleAlarm = reader.ReadByte(); | |||
value.BarrierAlarmPhotographs = reader.ReadByte(); | |||
value.ObstacleAlarmInterval = reader.ReadByte(); | |||
value.FrequentChannelChangeAlarmJudgmentTimePeriod = reader.ReadByte(); | |||
value.FrequentAlarmJudgmentNumberChannelChange = reader.ReadByte(); | |||
value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm = reader.ReadByte(); | |||
value.FrequentChannelChangeAlarmPhotos = reader.ReadByte(); | |||
value.FrequentLaneChangeAlarmInterval = reader.ReadByte(); | |||
value.GradedSpeedThresholdLaneDeviationAlarm = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm = reader.ReadByte(); | |||
value.LaneDepartureAlarmPhoto = reader.ReadByte(); | |||
value.LaneDepartureAlarmPhotoInterval = reader.ReadByte(); | |||
value.ForwardCollisionWarningTimeThreshold = reader.ReadByte(); | |||
value.HierarchicalSpeedThresholdForwardCollisionWarning = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm = reader.ReadByte(); | |||
value.ForwardCollisionAlarmPhotographs = reader.ReadByte(); | |||
value.ForwardCollisionAlarmInterval = reader.ReadByte(); | |||
value.PedestrianCollisionAlarmTimeThreshold = reader.ReadByte(); | |||
value.PedestrianCollisionAlarmEnablingSpeedThreshold = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm = reader.ReadByte(); | |||
value.PedestrianCollisionAlarmPhotos = reader.ReadByte(); | |||
value.PedestrianCollisionAlarmInterval = reader.ReadByte(); | |||
value.VehicleDistanceMonitoringAlarmDistanceThreshold = reader.ReadByte(); | |||
value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity = reader.ReadByte(); | |||
value.AlarmPhotoVehicleCloseDistance = reader.ReadByte(); | |||
value.AlarmPhotoVehicleCloseDistanceInterval = reader.ReadByte(); | |||
value.RoadSignRecognitionPhotographs = reader.ReadByte(); | |||
value.RoadSignRecognitionPhotographsInterval = reader.ReadByte(); | |||
value.Placeholder2 = reader.ReadArray(4).ToArray(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF364 value, IJT808Config config) | |||
{ | |||
writer.WriteUInt32(value.ParamId); | |||
writer.Skip(1, out int ParamLengthPosition); | |||
writer.WriteByte(value.AlarmJudgeSpeedThreshold); | |||
writer.WriteByte(value.WarningVolume); | |||
writer.WriteByte(value.ActivePhotographyStrategy); | |||
writer.WriteUInt16(value.ActivelyTimePhotoInterval); | |||
writer.WriteUInt16(value.ActiveDistancePhotographyDistanceInterval); | |||
writer.WriteByte(value.SingleInitiativePhotos); | |||
writer.WriteByte(value.SingleInitiativePhotosInterval); | |||
writer.WriteByte(value.PhotoResolution); | |||
writer.WriteByte(value.VideoRecordingResolution); | |||
writer.WriteUInt32(value.AlarmEnable); | |||
writer.WriteUInt32(value.EventEnable); | |||
writer.WriteByte(value.Placeholder1); | |||
writer.WriteByte(value.DistanceThresholdObstacleAlarm); | |||
writer.WriteByte(value.HierarchicalSpeedThresholdObstacleAlarm); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterObstacleAlarm); | |||
writer.WriteByte(value.BarrierAlarmPhotographs); | |||
writer.WriteByte(value.ObstacleAlarmInterval); | |||
writer.WriteByte(value.FrequentChannelChangeAlarmJudgmentTimePeriod); | |||
writer.WriteByte(value.FrequentAlarmJudgmentNumberChannelChange); | |||
writer.WriteByte(value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm); | |||
writer.WriteByte(value.FrequentChannelChangeAlarmPhotos); | |||
writer.WriteByte(value.FrequentLaneChangeAlarmInterval); | |||
writer.WriteByte(value.GradedSpeedThresholdLaneDeviationAlarm); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm); | |||
writer.WriteByte(value.LaneDepartureAlarmPhoto); | |||
writer.WriteByte(value.LaneDepartureAlarmPhotoInterval); | |||
writer.WriteByte(value.ForwardCollisionWarningTimeThreshold); | |||
writer.WriteByte(value.HierarchicalSpeedThresholdForwardCollisionWarning); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm); | |||
writer.WriteByte(value.ForwardCollisionAlarmPhotographs); | |||
writer.WriteByte(value.ForwardCollisionAlarmInterval); | |||
writer.WriteByte(value.PedestrianCollisionAlarmTimeThreshold); | |||
writer.WriteByte(value.PedestrianCollisionAlarmEnablingSpeedThreshold); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm); | |||
writer.WriteByte(value.PedestrianCollisionAlarmPhotos); | |||
writer.WriteByte(value.PedestrianCollisionAlarmInterval); | |||
writer.WriteByte(value.VehicleDistanceMonitoringAlarmDistanceThreshold); | |||
writer.WriteByte(value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity); | |||
writer.WriteByte(value.AlarmPhotoVehicleCloseDistance); | |||
writer.WriteByte(value.AlarmPhotoVehicleCloseDistanceInterval); | |||
writer.WriteByte(value.RoadSignRecognitionPhotographs); | |||
writer.WriteByte(value.RoadSignRecognitionPhotographsInterval); | |||
writer.WriteArray(value.Placeholder2); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition); | |||
} | |||
} | |||
} |
@@ -1,365 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Enums; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 驾驶员状态监测系统参数 | |||
/// </summary> | |||
public class JT808_0x8103_0xF365 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF365>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 驾驶员状态监测系统参数 | |||
/// </summary> | |||
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF365; | |||
/// <summary> | |||
/// 驾驶员状态监测系统参数长度 | |||
/// </summary> | |||
public override byte ParamLength { get; set; } | |||
/// <summary> | |||
/// 报警判断速度阈值 | |||
/// </summary> | |||
public byte AlarmJudgeSpeedThreshold { get; set; } | |||
/// <summary> | |||
/// 报警提示音量 | |||
/// </summary> | |||
public byte WarningVolume { get; set; } | |||
/// <summary> | |||
/// 主动拍照策略 | |||
/// </summary> | |||
public byte ActivePhotographyStrategy { get; set; } | |||
/// <summary> | |||
/// 主动定时拍照时间间隔 | |||
/// </summary> | |||
public ushort ActivelyTimePhotoInterval { get; set; } | |||
/// <summary> | |||
/// 主动定距拍照距离间隔 | |||
/// </summary> | |||
public ushort ActiveDistancePhotographyDistanceInterval { get; set; } | |||
/// <summary> | |||
/// 单次主动拍照张数 | |||
/// </summary> | |||
public byte SingleInitiativePhotos { get; set; } | |||
/// <summary> | |||
/// 单次主动拍照时间间隔 | |||
/// </summary> | |||
public byte SingleInitiativePhotosInterval { get; set; } | |||
/// <summary> | |||
/// 拍照分辨率 | |||
/// </summary> | |||
public byte PhotoResolution { get; set; } | |||
/// <summary> | |||
/// 视频录制分辨率 | |||
/// </summary> | |||
public byte VideoRecordingResolution { get; set; } | |||
/// <summary> | |||
/// 报警使能 | |||
/// </summary> | |||
public uint AlarmEnable { get; set; } | |||
/// <summary> | |||
/// 事件使能 | |||
/// </summary> | |||
public uint EventEnable { get; set; } | |||
/// <summary> | |||
/// 吸烟报警判断时间间隔 | |||
/// </summary> | |||
public ushort TimeIntervalSmokingAlarmJudgment { get; set; } | |||
/// <summary> | |||
/// 接打电话报警判断时间间隔 | |||
/// </summary> | |||
public ushort CallAlarmDetermineTimeInterval{ get; set; } | |||
/// <summary> | |||
/// 预留字段 | |||
/// </summary> | |||
public byte[] Reserve { get; set; } = new byte[3]; | |||
/// <summary> | |||
/// 疲劳驾驶报警分级速度阈值 | |||
/// </summary> | |||
public byte GradedSpeedThresholdFatigueDrivingAlarm { get; set; } | |||
/// <summary> | |||
/// 疲劳驾驶报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm { get; set; } | |||
/// <summary> | |||
/// 疲劳驾驶报警拍照张数 | |||
/// </summary> | |||
public byte FatigueDrivingAlarmPhotograph { get; set; } | |||
/// <summary> | |||
/// 疲劳驾驶报警拍照间隔时间 | |||
/// </summary> | |||
public byte FatigueDrivingAlarmPhotographInterval { get; set; } | |||
/// <summary> | |||
/// 接打电话报警分级速度阈值 | |||
/// </summary> | |||
public byte ClassifiedSpeedThresholdCallAlarm{ get; set; } | |||
/// <summary> | |||
/// 接打电话报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterCallAlarm{ get; set; } | |||
/// <summary> | |||
/// 接打电话报警拍驾驶员面部特征照片张数 | |||
/// </summary> | |||
public byte CallAlarmTakePicturesDriverFacialFeatures{ get; set; } | |||
/// <summary> | |||
/// 接打电话报警拍驾驶员面部特征照片间隔时间 | |||
/// </summary> | |||
public byte CallAlarmTakePicturesDriverFacialFeaturesInterval { get; set; } | |||
/// <summary> | |||
/// 抽烟报警分级车速阈值 | |||
/// </summary> | |||
public byte ClassifiedSpeedThresholdSmokingAlarm{ get; set; } | |||
/// <summary> | |||
/// 抽烟报警前后视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeBeforeAndAfterSmokingAlarm{ get; set; } | |||
/// <summary> | |||
/// 抽烟报警拍驾驶员面部特征照片张数 | |||
/// </summary> | |||
public byte SmokingAlarmPhotographsDriverFaceCharacteristics { get; set; } | |||
/// <summary> | |||
/// 抽烟报警拍驾驶员面部特征照片间隔时间 | |||
/// </summary> | |||
public byte SmokingAlarmPhotographsDriverFaceCharacteristicsInterval { get; set; } | |||
/// <summary> | |||
/// 分神驾驶报警分级车速阈值 | |||
/// </summary> | |||
public byte ClassifiedSpeedThresholdDistractedDrivingAlarm { get; set; } | |||
/// <summary> | |||
/// 分神驾驶报警拍照张数 | |||
/// </summary> | |||
public byte DistractedDrivingAlarmPhotography{ get; set; } | |||
/// <summary> | |||
/// 分神驾驶报警拍照间隔时间 | |||
/// </summary> | |||
public byte DistractedDrivingAlarmPhotographyInterval { get; set; } | |||
/// <summary> | |||
/// 驾驶行为异常视频录制时间 | |||
/// </summary> | |||
public byte VideoRecordingTimeAbnormalDrivingBehavior{ get; set; } | |||
/// <summary> | |||
/// 驾驶行为异常抓拍照片张数 | |||
/// </summary> | |||
public byte PhotographsAbnormalDrivingBehavior{ get; set; } | |||
/// <summary> | |||
/// 驾驶行为异常拍照间隔 | |||
/// </summary> | |||
public byte PictureIntervalAbnormalDrivingBehavior{ get; set; } | |||
/// <summary> | |||
/// 驾驶员身份识别触发 | |||
/// </summary> | |||
public byte DriverIdentificationTrigger { get; set; } | |||
/// <summary> | |||
/// 保留字段 | |||
/// </summary> | |||
public byte[] Retain { get; set; } = new byte[2]; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF365 value = new JT808_0x8103_0xF365(); | |||
value.ParamId = reader.ReadUInt32(); | |||
value.ParamLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ParamId.ReadNumber()}]参数ID", value.ParamId); | |||
writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength); | |||
value.AlarmJudgeSpeedThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AlarmJudgeSpeedThreshold.ReadNumber()}]报警判断速度阈值", value.AlarmJudgeSpeedThreshold); | |||
value.WarningVolume = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.WarningVolume.ReadNumber()}]报警提示音量", value.WarningVolume); | |||
value.ActivePhotographyStrategy = reader.ReadByte(); | |||
var activePhotographyStrategy = (ActivePhotographyStrategyType)ActivePhotographyStrategy; | |||
writer.WriteNumber($"[{value.ActivePhotographyStrategy.ReadNumber()}]主动拍照策略-{activePhotographyStrategy.ToString()}", value.ActivePhotographyStrategy); | |||
value.ActivelyTimePhotoInterval = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.ActivelyTimePhotoInterval.ReadNumber()}]主动定时拍照时间间隔", value.ActivelyTimePhotoInterval); | |||
value.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.ActiveDistancePhotographyDistanceInterval.ReadNumber()}]主动定距拍照距离间隔", value.ActiveDistancePhotographyDistanceInterval); | |||
value.SingleInitiativePhotos = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.SingleInitiativePhotos.ReadNumber()}]单次主动拍照张数", value.SingleInitiativePhotos); | |||
value.SingleInitiativePhotosInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.SingleInitiativePhotosInterval.ReadNumber()}]单次主动拍照时间间隔", value.SingleInitiativePhotosInterval); | |||
value.PhotoResolution = reader.ReadByte(); | |||
var photoResolutionType = (PhotoResolutionType)value.PhotoResolution; | |||
writer.WriteNumber($"[{value.PhotoResolution.ReadNumber()}]拍照分辨率-{photoResolutionType.ToString()}", value.PhotoResolution); | |||
value.VideoRecordingResolution = reader.ReadByte(); | |||
var videoRecordingResolution = (VideoRecordingResolutionType)value.VideoRecordingResolution; | |||
writer.WriteNumber($"[{value.VideoRecordingResolution.ReadNumber()}]视频录制分辨率-{videoRecordingResolution.ToString()}", value.VideoRecordingResolution); | |||
value.AlarmEnable = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.AlarmEnable.ReadNumber()}]报警使能", value.AlarmEnable); | |||
var alarmEnableBits = Convert.ToString(value.AlarmEnable, 2).PadLeft(32, '0').AsSpan(); | |||
writer.WriteStartObject("报警使能对象"); | |||
writer.WriteString("[bit30~bit31]预留", alarmEnableBits.Slice(30, 2).ToString()); | |||
writer.WriteString("[bit17~bit29]用户自定义", alarmEnableBits.Slice(17, 13).ToString()); | |||
writer.WriteString("[bit16]道路标识超限报警", alarmEnableBits[16] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit12~bit15]道路标识超限报警", alarmEnableBits.Slice(12, 4).ToString()); | |||
writer.WriteString("[bit11]车距过近二级报警", alarmEnableBits[11] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit10]车距过近一级报警", alarmEnableBits[10] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit9]行人碰撞二级报警", alarmEnableBits[9] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit8]行人碰撞一级报警", alarmEnableBits[8] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit7]前向碰撞二级报警", alarmEnableBits[7] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit6]前向碰撞一级报警", alarmEnableBits[6] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit5]车道偏离二级报警", alarmEnableBits[5] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit4]车道偏离一级报警", alarmEnableBits[4] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit3]频繁变道二级报警", alarmEnableBits[3] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit2]频繁变道一级报警", alarmEnableBits[2] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit1]障碍检测二级报警", alarmEnableBits[1] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit0]障碍检测一级报警", alarmEnableBits[0] == '0' ? "关闭" : "打开"); | |||
writer.WriteEndObject(); | |||
value.EventEnable = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.EventEnable.ReadNumber()}]事件使能", value.EventEnable); | |||
var eventEnableBits = Convert.ToString(value.EventEnable, 2).PadLeft(32, '0').AsSpan(); | |||
writer.WriteStartObject("事件使能对象"); | |||
writer.WriteString("[bit30~bit31]预留", eventEnableBits.Slice(30, 2).ToString()); | |||
writer.WriteString("[bit2~bit29]用户自定义", alarmEnableBits.Slice(2, 28).ToString()); | |||
writer.WriteString("[bit1]主动拍照", alarmEnableBits[1] == '0' ? "关闭" : "打开"); | |||
writer.WriteString("[bit0]道路标识识别", alarmEnableBits[0] == '0' ? "关闭" : "打开"); | |||
writer.WriteEndObject(); | |||
value.TimeIntervalSmokingAlarmJudgment = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.TimeIntervalSmokingAlarmJudgment.ReadNumber()}]吸烟报警判断时间间隔", value.TimeIntervalSmokingAlarmJudgment); | |||
value.CallAlarmDetermineTimeInterval = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.CallAlarmDetermineTimeInterval.ReadNumber()}]接打电话报警判断时间间隔", value.CallAlarmDetermineTimeInterval); | |||
value.Reserve = reader.ReadArray(3).ToArray(); | |||
writer.WriteString("预留字段", value.Reserve.ToHexString()); | |||
value.GradedSpeedThresholdFatigueDrivingAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.GradedSpeedThresholdFatigueDrivingAlarm.ReadNumber()}]疲劳驾驶报警分级速度阈值", value.GradedSpeedThresholdFatigueDrivingAlarm); | |||
value.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm.ReadNumber()}]疲劳驾驶报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm); | |||
value.FatigueDrivingAlarmPhotograph = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FatigueDrivingAlarmPhotograph.ReadNumber()}]疲劳驾驶报警拍照张数", value.FatigueDrivingAlarmPhotograph); | |||
value.FatigueDrivingAlarmPhotographInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FatigueDrivingAlarmPhotographInterval.ReadNumber()}]疲劳驾驶报警拍照间隔时间", value.FatigueDrivingAlarmPhotographInterval); | |||
value.ClassifiedSpeedThresholdCallAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ClassifiedSpeedThresholdCallAlarm.ReadNumber()}]接打电话报警分级速度阈值", value.ClassifiedSpeedThresholdCallAlarm); | |||
value.VideoRecordingTimeBeforeAndAfterCallAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterCallAlarm.ReadNumber()}]接打电话报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterCallAlarm); | |||
value.CallAlarmTakePicturesDriverFacialFeatures = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.CallAlarmTakePicturesDriverFacialFeatures.ReadNumber()}]接打电话报警拍驾驶员面部特征照片张数", value.CallAlarmTakePicturesDriverFacialFeatures); | |||
value.CallAlarmTakePicturesDriverFacialFeaturesInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.CallAlarmTakePicturesDriverFacialFeaturesInterval.ReadNumber()}]接打电话报警拍驾驶员面部特征照片间隔时间", value.CallAlarmTakePicturesDriverFacialFeaturesInterval); | |||
value.ClassifiedSpeedThresholdSmokingAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ClassifiedSpeedThresholdSmokingAlarm.ReadNumber()}]抽烟报警分级车速阈值", value.ClassifiedSpeedThresholdSmokingAlarm); | |||
value.VideoRecordingTimeBeforeAndAfterSmokingAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterSmokingAlarm.ReadNumber()}]抽烟报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterSmokingAlarm); | |||
value.SmokingAlarmPhotographsDriverFaceCharacteristics = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.SmokingAlarmPhotographsDriverFaceCharacteristics.ReadNumber()}]抽烟报警拍驾驶员面部特征照片张数", value.SmokingAlarmPhotographsDriverFaceCharacteristics); | |||
value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval.ReadNumber()}]抽烟报警拍驾驶员面部特征照片间隔时间", value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval); | |||
value.ClassifiedSpeedThresholdDistractedDrivingAlarm = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ClassifiedSpeedThresholdDistractedDrivingAlarm.ReadNumber()}]分神驾驶报警分级车速阈值", value.ClassifiedSpeedThresholdDistractedDrivingAlarm); | |||
value.DistractedDrivingAlarmPhotography = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.DistractedDrivingAlarmPhotography.ReadNumber()}]分神驾驶报警拍照张数", value.DistractedDrivingAlarmPhotography); | |||
value.DistractedDrivingAlarmPhotographyInterval = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.DistractedDrivingAlarmPhotographyInterval.ReadNumber()}]分神驾驶报警拍照间隔时间", value.DistractedDrivingAlarmPhotographyInterval); | |||
value.VideoRecordingTimeAbnormalDrivingBehavior = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.VideoRecordingTimeAbnormalDrivingBehavior.ReadNumber()}]驾驶行为异常视频录制时间", value.VideoRecordingTimeAbnormalDrivingBehavior); | |||
value.PhotographsAbnormalDrivingBehavior = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.PhotographsAbnormalDrivingBehavior.ReadNumber()}]驾驶行为异常抓拍照片张数", value.PhotographsAbnormalDrivingBehavior); | |||
value.PictureIntervalAbnormalDrivingBehavior = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.PictureIntervalAbnormalDrivingBehavior.ReadNumber()}]驾驶行为异常拍照间隔", value.PictureIntervalAbnormalDrivingBehavior); | |||
value.DriverIdentificationTrigger = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.DriverIdentificationTrigger.ReadNumber()}]驾驶员身份识别触发", value.DriverIdentificationTrigger); | |||
value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); | |||
writer.WriteString("保留字段", value.Retain.ToHexString()); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8103_0xF365 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF365 value = new JT808_0x8103_0xF365(); | |||
value.ParamId = reader.ReadUInt32(); | |||
value.ParamLength = reader.ReadByte(); | |||
value.AlarmJudgeSpeedThreshold = reader.ReadByte(); | |||
value.WarningVolume = reader.ReadByte(); | |||
value.ActivePhotographyStrategy = reader.ReadByte(); | |||
value.ActivelyTimePhotoInterval = reader.ReadUInt16(); | |||
value.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16(); | |||
value.SingleInitiativePhotos = reader.ReadByte(); | |||
value.SingleInitiativePhotosInterval = reader.ReadByte(); | |||
value.PhotoResolution = reader.ReadByte(); | |||
value.VideoRecordingResolution = reader.ReadByte(); | |||
value.AlarmEnable = reader.ReadUInt32(); | |||
value.EventEnable = reader.ReadUInt32(); | |||
value.TimeIntervalSmokingAlarmJudgment = reader.ReadUInt16(); | |||
value.CallAlarmDetermineTimeInterval = reader.ReadUInt16(); | |||
value.Reserve = reader.ReadArray(3).ToArray(); | |||
value.GradedSpeedThresholdFatigueDrivingAlarm = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm = reader.ReadByte(); | |||
value.FatigueDrivingAlarmPhotograph = reader.ReadByte(); | |||
value.FatigueDrivingAlarmPhotographInterval = reader.ReadByte(); | |||
value.ClassifiedSpeedThresholdCallAlarm = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterCallAlarm = reader.ReadByte(); | |||
value.CallAlarmTakePicturesDriverFacialFeatures = reader.ReadByte(); | |||
value.CallAlarmTakePicturesDriverFacialFeaturesInterval = reader.ReadByte(); | |||
value.ClassifiedSpeedThresholdSmokingAlarm = reader.ReadByte(); | |||
value.VideoRecordingTimeBeforeAndAfterSmokingAlarm = reader.ReadByte(); | |||
value.SmokingAlarmPhotographsDriverFaceCharacteristics = reader.ReadByte(); | |||
value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval = reader.ReadByte(); | |||
value.ClassifiedSpeedThresholdDistractedDrivingAlarm = reader.ReadByte(); | |||
value.DistractedDrivingAlarmPhotography = reader.ReadByte(); | |||
value.DistractedDrivingAlarmPhotographyInterval = reader.ReadByte(); | |||
value.VideoRecordingTimeAbnormalDrivingBehavior = reader.ReadByte(); | |||
value.PhotographsAbnormalDrivingBehavior = reader.ReadByte(); | |||
value.PictureIntervalAbnormalDrivingBehavior = reader.ReadByte(); | |||
value.DriverIdentificationTrigger = reader.ReadByte(); | |||
value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF365 value, IJT808Config config) | |||
{ | |||
writer.WriteUInt32(value.ParamId); | |||
writer.Skip(1, out int ParamLengthPosition); | |||
writer.WriteByte(value.AlarmJudgeSpeedThreshold); | |||
writer.WriteByte(value.WarningVolume); | |||
writer.WriteByte(value.ActivePhotographyStrategy); | |||
writer.WriteUInt16(value.ActivelyTimePhotoInterval); | |||
writer.WriteUInt16(value.ActiveDistancePhotographyDistanceInterval); | |||
writer.WriteByte(value.SingleInitiativePhotos); | |||
writer.WriteByte(value.SingleInitiativePhotosInterval); | |||
writer.WriteByte(value.PhotoResolution); | |||
writer.WriteByte(value.VideoRecordingResolution); | |||
writer.WriteUInt32(value.AlarmEnable); | |||
writer.WriteUInt32(value.EventEnable); | |||
writer.WriteUInt16(value.TimeIntervalSmokingAlarmJudgment); | |||
writer.WriteUInt16(value.CallAlarmDetermineTimeInterval); | |||
writer.WriteArray(value.Reserve); | |||
writer.WriteByte(value.GradedSpeedThresholdFatigueDrivingAlarm); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm); | |||
writer.WriteByte(value.FatigueDrivingAlarmPhotograph); | |||
writer.WriteByte(value.FatigueDrivingAlarmPhotographInterval); | |||
writer.WriteByte(value.ClassifiedSpeedThresholdCallAlarm); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterCallAlarm); | |||
writer.WriteByte(value.CallAlarmTakePicturesDriverFacialFeatures); | |||
writer.WriteByte(value.CallAlarmTakePicturesDriverFacialFeaturesInterval); | |||
writer.WriteByte(value.ClassifiedSpeedThresholdSmokingAlarm); | |||
writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterSmokingAlarm); | |||
writer.WriteByte(value.SmokingAlarmPhotographsDriverFaceCharacteristics); | |||
writer.WriteByte(value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval); | |||
writer.WriteByte(value.ClassifiedSpeedThresholdDistractedDrivingAlarm); | |||
writer.WriteByte(value.DistractedDrivingAlarmPhotography); | |||
writer.WriteByte(value.DistractedDrivingAlarmPhotographyInterval); | |||
writer.WriteByte(value.VideoRecordingTimeAbnormalDrivingBehavior); | |||
writer.WriteByte(value.PhotographsAbnormalDrivingBehavior); | |||
writer.WriteByte(value.PictureIntervalAbnormalDrivingBehavior); | |||
writer.WriteByte(value.DriverIdentificationTrigger); | |||
writer.WriteArray(value.Retain); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition); | |||
} | |||
} | |||
} |
@@ -1,151 +0,0 @@ | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 胎压监测系统参数 | |||
/// </summary> | |||
public class JT808_0x8103_0xF366 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF366>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 胎压监测系统参数Id | |||
/// </summary> | |||
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF366; | |||
/// <summary> | |||
/// 胎压监测系统参数长度 | |||
/// </summary> | |||
public override byte ParamLength { get; set; } = 46; | |||
/// <summary> | |||
/// 轮胎规格型号 12位 | |||
/// </summary> | |||
public string TyreSpecificationType { get; set; } | |||
/// <summary> | |||
/// 胎压单位 | |||
/// </summary> | |||
public ushort TyrePressureUnit { get; set; } | |||
/// <summary> | |||
/// 正常胎压值 | |||
/// </summary> | |||
public ushort NormalFetalPressure { get; set; } | |||
/// <summary> | |||
/// 胎压不平衡门限 | |||
/// </summary> | |||
public ushort ThresholdUnbalancedTirePressure { get; set; } | |||
/// <summary> | |||
/// 慢漏气门限 | |||
/// </summary> | |||
public ushort SlowLeakageThreshold { get; set; } | |||
/// <summary> | |||
/// 低压阈值 | |||
/// </summary> | |||
public ushort LowVoltageThreshold { get; set; } | |||
/// <summary> | |||
/// 高压阈值 | |||
/// </summary> | |||
public ushort HighVoltageThreshold { get; set; } | |||
/// <summary> | |||
/// 高温阈值 | |||
/// </summary> | |||
public ushort HighTemperatureThreshold { get; set; } | |||
/// <summary> | |||
/// 电压阈值 | |||
/// </summary> | |||
public ushort VoltageThreshold { get; set; } | |||
/// <summary> | |||
/// 定时上报时间间隔 | |||
/// </summary> | |||
public ushort TimedReportingInterval { get; set; } | |||
/// <summary> | |||
/// 保留项 | |||
/// </summary> | |||
public byte[] Retain { get; set; } = new byte[6]; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366(); | |||
value.ParamId = reader.ReadUInt32(); | |||
value.ParamLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ParamId.ReadNumber()}]参数ID", value.ParamId); | |||
writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength); | |||
string tyreSpecificationTypeHex = reader.ReadVirtualArray(12).ToArray().ToHexString(); | |||
value.TyreSpecificationType = reader.ReadString(12); | |||
writer.WriteString($"[{tyreSpecificationTypeHex}]轮胎规格型号", value.TyreSpecificationType); | |||
value.TyrePressureUnit = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.TyrePressureUnit.ReadNumber()}]胎压单位", value.TyrePressureUnit); | |||
value.NormalFetalPressure = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.NormalFetalPressure.ReadNumber()}]正常胎压值", value.NormalFetalPressure); | |||
value.ThresholdUnbalancedTirePressure = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.ThresholdUnbalancedTirePressure.ReadNumber()}]胎压不平衡门限", value.ThresholdUnbalancedTirePressure); | |||
value.SlowLeakageThreshold = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.SlowLeakageThreshold.ReadNumber()}]慢漏气门限", value.SlowLeakageThreshold); | |||
value.LowVoltageThreshold = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.LowVoltageThreshold.ReadNumber()}]低压阈值", value.LowVoltageThreshold); | |||
value.HighVoltageThreshold = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.HighVoltageThreshold.ReadNumber()}]高压阈值", value.HighVoltageThreshold); | |||
value.HighTemperatureThreshold = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.HighTemperatureThreshold.ReadNumber()}]高温阈值", value.HighTemperatureThreshold); | |||
value.VoltageThreshold = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.VoltageThreshold.ReadNumber()}]电压阈值", value.VoltageThreshold); | |||
value.TimedReportingInterval = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.TimedReportingInterval.ReadNumber()}]定时上报时间间隔", value.TimedReportingInterval); | |||
value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); | |||
writer.WriteString("保留项", value.Retain.ToHexString()); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8103_0xF366 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366(); | |||
value.ParamId = reader.ReadUInt32(); | |||
value.ParamLength = reader.ReadByte(); | |||
value.TyreSpecificationType = reader.ReadString(12); | |||
value.TyrePressureUnit = reader.ReadUInt16(); | |||
value.NormalFetalPressure = reader.ReadUInt16(); | |||
value.ThresholdUnbalancedTirePressure = reader.ReadUInt16(); | |||
value.SlowLeakageThreshold = reader.ReadUInt16(); | |||
value.LowVoltageThreshold = reader.ReadUInt16(); | |||
value.HighVoltageThreshold = reader.ReadUInt16(); | |||
value.HighTemperatureThreshold = reader.ReadUInt16(); | |||
value.VoltageThreshold = reader.ReadUInt16(); | |||
value.TimedReportingInterval = reader.ReadUInt16(); | |||
value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF366 value, IJT808Config config) | |||
{ | |||
writer.WriteUInt32(value.ParamId); | |||
writer.Skip(1, out int ParamLengthPosition); | |||
writer.WriteString(value.TyreSpecificationType); | |||
writer.WriteUInt16(value.TyrePressureUnit); | |||
writer.WriteUInt16(value.NormalFetalPressure); | |||
writer.WriteUInt16(value.ThresholdUnbalancedTirePressure); | |||
writer.WriteUInt16(value.SlowLeakageThreshold); | |||
writer.WriteUInt16(value.LowVoltageThreshold); | |||
writer.WriteUInt16(value.HighVoltageThreshold); | |||
writer.WriteUInt16(value.HighTemperatureThreshold); | |||
writer.WriteUInt16(value.VoltageThreshold); | |||
writer.WriteUInt16(value.TimedReportingInterval); | |||
writer.WriteArray(value.Retain); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition); | |||
} | |||
} | |||
} |
@@ -1,77 +0,0 @@ | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 盲区监测系统参数 | |||
/// </summary> | |||
public class JT808_0x8103_0xF367 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF367>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 盲区监测系统参数Id | |||
/// </summary> | |||
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF367; | |||
/// <summary> | |||
/// 盲区监测系统参数长度 | |||
/// </summary> | |||
public override byte ParamLength { get; set; } = 2; | |||
/// <summary> | |||
/// 后方接近报警时间阈值 | |||
/// </summary> | |||
public byte RearApproachAlarmTimeThreshold { get; set; } | |||
/// <summary> | |||
/// 侧后方接近报警时间阈值 | |||
/// </summary> | |||
public byte LateralRearApproachAlarmTimeThreshold { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF367 value = new JT808_0x8103_0xF367(); | |||
value.ParamId = reader.ReadUInt32(); | |||
value.ParamLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{ value.ParamId.ReadNumber()}]参数ID", value.ParamId); | |||
writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength); | |||
value.RearApproachAlarmTimeThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.RearApproachAlarmTimeThreshold.ReadNumber()}]后方接近报警时间阈值", value.RearApproachAlarmTimeThreshold); | |||
value.LateralRearApproachAlarmTimeThreshold = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.LateralRearApproachAlarmTimeThreshold.ReadNumber()}]侧后方接近报警时间阈值", value.LateralRearApproachAlarmTimeThreshold); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8103_0xF367 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8103_0xF367 value = new JT808_0x8103_0xF367(); | |||
value.ParamId = reader.ReadUInt32(); | |||
value.ParamLength = reader.ReadByte(); | |||
value.RearApproachAlarmTimeThreshold = reader.ReadByte(); | |||
value.LateralRearApproachAlarmTimeThreshold = reader.ReadByte(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF367 value, IJT808Config config) | |||
{ | |||
writer.WriteUInt32(value.ParamId); | |||
writer.WriteByte(2); | |||
writer.WriteByte(value.RearApproachAlarmTimeThreshold); | |||
writer.WriteByte(value.LateralRearApproachAlarmTimeThreshold); | |||
} | |||
} | |||
} |
@@ -1,89 +0,0 @@ | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System.Collections.Generic; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 查询基本信息 | |||
/// </summary> | |||
public class JT808_0x8900_0xF7 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter<JT808_0x8900_0xF7>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 查询基本信息类型 | |||
/// </summary> | |||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF7; | |||
/// <summary> | |||
/// 外设ID列表总数 | |||
/// </summary> | |||
public byte USBCount { get; set; } | |||
/// <summary> | |||
/// 外设ID | |||
/// </summary> | |||
public List<byte> MultipleUSB { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8900_0xF7 value = new JT808_0x8900_0xF7(); | |||
value.USBCount = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.USBCount.ReadNumber()}]外设ID列表总数", value.USBCount); | |||
if (value.USBCount > 0) | |||
{ | |||
writer.WriteStartArray("外设ID列表"); | |||
for (int i = 0; i < value.USBCount; i++) | |||
{ | |||
writer.WriteStartObject(); | |||
byte usbId = reader.ReadByte(); | |||
writer.WriteNumber($"[{usbId.ReadNumber()}]外设ID", usbId); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8900_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8900_0xF7 value = new JT808_0x8900_0xF7(); | |||
value.USBCount = reader.ReadByte(); | |||
if (value.USBCount > 0) | |||
{ | |||
value.MultipleUSB = new List<byte>(); | |||
for (int i = 0; i < value.USBCount; i++) | |||
{ | |||
value.MultipleUSB.Add(reader.ReadByte()); | |||
} | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8900_0xF7 value, IJT808Config config) | |||
{ | |||
if (value.MultipleUSB != null && value.MultipleUSB.Count > 0) | |||
{ | |||
writer.WriteByte((byte)value.MultipleUSB.Count); | |||
foreach (var item in value.MultipleUSB) | |||
{ | |||
writer.WriteByte(item); | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -1,89 +0,0 @@ | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.MessagePack; | |||
using System.Collections.Generic; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 查询基本信息 | |||
/// </summary> | |||
public class JT808_0x8900_0xF8 : JT808_0x8900_BodyBase, IJT808MessagePackFormatter<JT808_0x8900_0xF8>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 查询基本信息透传类型 | |||
/// </summary> | |||
public override byte PassthroughType { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X0900_0xF8; | |||
/// <summary> | |||
/// 外设ID列表总数 | |||
/// </summary> | |||
public byte USBCount { get; set; } | |||
/// <summary> | |||
/// 外设ID | |||
/// </summary> | |||
public List<byte> MultipleUSB { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x8900_0xF8 value = new JT808_0x8900_0xF8(); | |||
value.USBCount = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.USBCount.ReadNumber()}]外设ID列表总数", value.USBCount); | |||
if (value.USBCount > 0) | |||
{ | |||
writer.WriteStartArray("外设ID列表"); | |||
for (int i = 0; i < value.USBCount; i++) | |||
{ | |||
writer.WriteStartObject(); | |||
byte usbId = reader.ReadByte(); | |||
writer.WriteNumber($"[{usbId.ReadNumber()}]外设ID", usbId); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x8900_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8900_0xF8 value = new JT808_0x8900_0xF8(); | |||
value.USBCount = reader.ReadByte(); | |||
if (value.USBCount > 0) | |||
{ | |||
value.MultipleUSB = new List<byte>(); | |||
for (int i = 0; i < value.USBCount; i++) | |||
{ | |||
value.MultipleUSB.Add(reader.ReadByte()); | |||
} | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8900_0xF8 value, IJT808Config config) | |||
{ | |||
if (value.MultipleUSB != null && value.MultipleUSB.Count > 0) | |||
{ | |||
writer.WriteByte((byte)value.MultipleUSB.Count); | |||
foreach (var item in value.MultipleUSB) | |||
{ | |||
writer.WriteByte(item); | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -1,139 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 报警附件上传指令 | |||
/// </summary> | |||
public class JT808_0x9208: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9208>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// Description | |||
/// </summary> | |||
public override string Description => "报警附件上传指令"; | |||
/// <summary> | |||
/// 服务IP地址长度 | |||
/// </summary> | |||
public byte AttachmentServerIPLength { get; set; } | |||
/// <summary> | |||
/// 服务IP地址 | |||
/// </summary> | |||
public string AttachmentServerIP { get; set; } | |||
/// <summary> | |||
/// TCP端口 | |||
/// </summary> | |||
public ushort AttachmentServerIPTcpPort { get; set; } | |||
/// <summary> | |||
/// UDP端口 | |||
/// </summary> | |||
public ushort AttachmentServerIPUdpPort { get; set; } | |||
/// <summary> | |||
/// 报警标识号 | |||
/// </summary> | |||
public AlarmIdentificationProperty AlarmIdentification { get; set; } | |||
/// <summary> | |||
/// 平台给报警分配的唯一编号 | |||
/// 32 | |||
/// </summary> | |||
public string AlarmId { get; set; } | |||
/// <summary> | |||
/// 预留 | |||
/// </summary> | |||
public byte[] Retain { get; set; } = new byte[16]; | |||
/// <summary> | |||
/// 报警附件上传指令Id | |||
/// </summary> | |||
public override ushort MsgId => 0x9208; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x9208 value = new JT808_0x9208(); | |||
value.AttachmentServerIPLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.AttachmentServerIPLength.ReadNumber()}]服务IP地址长度", value.AttachmentServerIPLength); | |||
string attachmentServerIPHex = reader.ReadVirtualArray(value.AttachmentServerIPLength).ToArray().ToHexString(); | |||
value.AttachmentServerIP = reader.ReadString(value.AttachmentServerIPLength); | |||
writer.WriteString($"[{AttachmentServerIP}]服务IP地址", value.AttachmentServerIP); | |||
value.AttachmentServerIPTcpPort = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.AttachmentServerIPTcpPort.ReadNumber()}]TCP端口", value.AttachmentServerIPTcpPort); | |||
value.AttachmentServerIPUdpPort = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.AttachmentServerIPUdpPort.ReadNumber()}]UDP端口", value.AttachmentServerIPUdpPort); | |||
value.AlarmIdentification = new AlarmIdentificationProperty(); | |||
string terminalIDHex = reader.ReadVirtualArray(7).ToArray().ToHexString(); | |||
value.AlarmIdentification.TerminalID = reader.ReadString(7); | |||
value.AlarmIdentification.Time = reader.ReadDateTime6(); | |||
value.AlarmIdentification.SN = reader.ReadByte(); | |||
value.AlarmIdentification.AttachCount = reader.ReadByte(); | |||
value.AlarmIdentification.Retain = reader.ReadByte(); | |||
writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalID); | |||
writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); | |||
writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); | |||
writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); | |||
writer.WriteNumber($"[{value.AlarmIdentification.Retain.ReadNumber()}]预留", value.AlarmIdentification.Retain); | |||
string alarmIdHex = reader.ReadVirtualArray(32).ToArray().ToHexString(); | |||
value.AlarmId = reader.ReadString(32); | |||
writer.WriteString($"[{alarmIdHex}]平台给报警分配的唯一编号", value.AlarmId); | |||
string retainHex = reader.ReadVirtualArray(16).ToArray().ToHexString(); | |||
writer.WriteString($"预留", retainHex); | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x9208 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x9208 value = new JT808_0x9208(); | |||
value.AttachmentServerIPLength = reader.ReadByte(); | |||
value.AttachmentServerIP = reader.ReadString(value.AttachmentServerIPLength); | |||
value.AttachmentServerIPTcpPort = reader.ReadUInt16(); | |||
value.AttachmentServerIPUdpPort = reader.ReadUInt16(); | |||
value.AlarmIdentification = new AlarmIdentificationProperty | |||
{ | |||
TerminalID = reader.ReadString(7), | |||
Time = reader.ReadDateTime6(), | |||
SN = reader.ReadByte(), | |||
AttachCount = reader.ReadByte(), | |||
Retain = reader.ReadByte() | |||
}; | |||
value.AlarmId = reader.ReadString(32); | |||
value.Retain = reader.ReadArray(16).ToArray(); | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9208 value, IJT808Config config) | |||
{ | |||
writer.Skip(1, out int AttachmentServerIPLengthPosition); | |||
writer.WriteString(value.AttachmentServerIP); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - AttachmentServerIPLengthPosition - 1), AttachmentServerIPLengthPosition); | |||
writer.WriteUInt16(value.AttachmentServerIPTcpPort); | |||
writer.WriteUInt16(value.AttachmentServerIPUdpPort); | |||
if (value.AlarmIdentification == null) | |||
{ | |||
throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空"); | |||
} | |||
writer.WriteString(value.AlarmIdentification.TerminalID); | |||
writer.WriteDateTime6(value.AlarmIdentification.Time); | |||
writer.WriteByte(value.AlarmIdentification.SN); | |||
writer.WriteByte(value.AlarmIdentification.AttachCount); | |||
writer.WriteByte(value.AlarmIdentification.Retain); | |||
writer.WriteString(value.AlarmId); | |||
writer.WriteArray(value.Retain); | |||
} | |||
} | |||
} |
@@ -1,139 +0,0 @@ | |||
using JT808.Protocol.Extensions.JTActiveSafety.Metadata; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
using System.Collections.Generic; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody | |||
{ | |||
/// <summary> | |||
/// 文件上传完成消息应答 | |||
/// </summary> | |||
public class JT808_0x9212: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9212>, IJT808Analyze | |||
{ | |||
/// <summary> | |||
/// 文件上传完成消息应答 | |||
/// </summary> | |||
public override string Description => "文件上传完成消息应答"; | |||
/// <summary> | |||
/// 文件名称长度 | |||
/// </summary> | |||
public byte FileNameLength { get; set; } | |||
/// <summary> | |||
/// 文件名称 | |||
/// </summary> | |||
public string FileName { get; set; } | |||
/// <summary> | |||
/// 文件类型 | |||
/// </summary> | |||
public byte FileType { get; set; } | |||
/// <summary> | |||
/// 上传结果 | |||
/// </summary> | |||
public byte UploadResult { get; set; } | |||
/// <summary> | |||
/// 补传数据包数量 | |||
/// 需要补传的数据包数量,无补传时该值为0 | |||
/// </summary> | |||
public byte DataPackageCount { get; set; } | |||
/// <summary> | |||
/// 补传数据包列表 | |||
/// </summary> | |||
public List<DataPackageProperty> DataPackages { get; set; } | |||
/// <summary> | |||
/// 文件上传完成消息应答Id | |||
/// </summary> | |||
public override ushort MsgId => 0x9212; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="writer"></param> | |||
/// <param name="config"></param> | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x9212 value = new JT808_0x9212(); | |||
value.FileNameLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FileNameLength.ReadNumber()}]文件名称长度", value.FileNameLength); | |||
string fileNameHex = reader.ReadVirtualArray(value.FileNameLength).ToArray().ToHexString(); | |||
value.FileName = reader.ReadString(value.FileNameLength); | |||
writer.WriteString($"[{fileNameHex}]文件名称", value.FileName); | |||
value.FileType = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.FileType.ReadNumber()}]文件类型", value.FileType); | |||
value.UploadResult = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.UploadResult.ReadNumber()}]上传结果", value.UploadResult); | |||
value.DataPackageCount = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.DataPackageCount.ReadNumber()}]补传数据包数量", value.DataPackageCount); | |||
if (value.DataPackageCount > 0) | |||
{ | |||
writer.WriteStartArray("补传数据包列表"); | |||
for (int i = 0; i < value.DataPackageCount; i++) | |||
{ | |||
writer.WriteStartObject(); | |||
DataPackageProperty dataPackageProperty = new DataPackageProperty(); | |||
dataPackageProperty.Offset = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{dataPackageProperty.Offset.ReadNumber()}]数据偏移量", dataPackageProperty.Offset); | |||
dataPackageProperty.Length = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{dataPackageProperty.Length.ReadNumber()}]数据长度", dataPackageProperty.Length); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="reader"></param> | |||
/// <param name="config"></param> | |||
/// <returns></returns> | |||
public JT808_0x9212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x9212 value = new JT808_0x9212(); | |||
value.FileNameLength = reader.ReadByte(); | |||
value.FileName = reader.ReadString(value.FileNameLength); | |||
value.FileType = reader.ReadByte(); | |||
value.UploadResult = reader.ReadByte(); | |||
value.DataPackageCount = reader.ReadByte(); | |||
if (value.DataPackageCount > 0) | |||
{ | |||
value.DataPackages = new List<DataPackageProperty>(); | |||
for (int i = 0; i < value.DataPackageCount; i++) | |||
{ | |||
DataPackageProperty dataPackageProperty = new DataPackageProperty(); | |||
dataPackageProperty.Offset = reader.ReadUInt32(); | |||
dataPackageProperty.Length = reader.ReadUInt32(); | |||
value.DataPackages.Add(dataPackageProperty); | |||
} | |||
} | |||
return value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
/// <param name="writer"></param> | |||
/// <param name="value"></param> | |||
/// <param name="config"></param> | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9212 value, IJT808Config config) | |||
{ | |||
writer.Skip(1, out int FileNameLengthPosition); | |||
writer.WriteString(value.FileName); | |||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition); | |||
writer.WriteByte(value.FileType); | |||
writer.WriteByte(value.UploadResult); | |||
if (value.DataPackages != null && value.DataPackages.Count > 0) | |||
{ | |||
writer.WriteByte((byte)value.DataPackages.Count); | |||
foreach (var item in value.DataPackages) | |||
{ | |||
writer.WriteUInt32(item.Offset); | |||
writer.WriteUInt32(item.Length); | |||
} | |||
} | |||
else | |||
{ | |||
writer.WriteByte(0); | |||
} | |||
} | |||
} | |||
} |
@@ -1,34 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
{ | |||
/// <summary> | |||
/// 报警标识号 | |||
/// </summary> | |||
public class AlarmIdentificationProperty | |||
{ | |||
/// <summary> | |||
/// 终端ID | |||
/// </summary> | |||
public string TerminalID { get; set; } | |||
/// <summary> | |||
/// YY-MM-DD-hh-mm-ss | |||
/// BCD[6] | |||
/// </summary> | |||
public DateTime Time { get; set; } | |||
/// <summary> | |||
/// 序号 | |||
/// </summary> | |||
public byte SN { get; set; } | |||
/// <summary> | |||
/// 附件数量 | |||
/// </summary> | |||
public byte AttachCount { get; set; } | |||
/// <summary> | |||
/// 预留 | |||
/// </summary> | |||
public byte Retain { get; set; } | |||
} | |||
} |
@@ -1,33 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
{ | |||
/// <summary> | |||
/// 胎压监测系统报警/事件信息 | |||
/// </summary> | |||
public class AlarmOrEventProperty | |||
{ | |||
/// <summary> | |||
/// 胎压报警位置 | |||
/// </summary> | |||
public byte TirePressureAlarmPosition { get; set; } | |||
/// <summary> | |||
/// 报警/事件类型 | |||
/// </summary> | |||
public ushort AlarmOrEventType { get; set; } | |||
/// <summary> | |||
/// 胎压 | |||
/// </summary> | |||
public ushort TirePressure { get; set; } | |||
/// <summary> | |||
/// 胎温 | |||
/// </summary> | |||
public ushort TireTemperature { get; set; } | |||
/// <summary> | |||
/// 电池电量 | |||
/// </summary> | |||
public ushort BatteryLevel { get; set; } | |||
} | |||
} |
@@ -1,26 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
{ | |||
/// <summary> | |||
/// 附件信息 | |||
/// </summary> | |||
public class AttachProperty | |||
{ | |||
/// <summary> | |||
/// 文件名称长度 | |||
/// </summary> | |||
public byte FileNameLength { get; set; } | |||
/// <summary> | |||
/// 文件名称 | |||
/// 形如:文件类型_通道号_报警类型_序号_报警编号.后缀名 | |||
/// </summary> | |||
public string FileName{ get; set; } | |||
/// <summary> | |||
/// 文件大小 | |||
/// </summary> | |||
public uint FileSize { get; set; } | |||
} | |||
} |
@@ -1,21 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
{ | |||
/// <summary> | |||
/// 补传数据包信息 | |||
/// </summary> | |||
public class DataPackageProperty | |||
{ | |||
/// <summary> | |||
/// 数据偏移量 | |||
/// </summary> | |||
public uint Offset { get; set; } | |||
/// <summary> | |||
/// 数据长度 | |||
/// </summary> | |||
public uint Length { get; set; } | |||
} | |||
} |
@@ -1,31 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public class JT808_0x0900_0xF7_USB | |||
{ | |||
/// <summary> | |||
/// 外设ID | |||
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.USBIDType"/> | |||
/// </summary> | |||
public byte USBID { get; set; } | |||
/// <summary> | |||
/// 消息长度 | |||
/// </summary> | |||
public byte MessageLength { get; set; } | |||
/// <summary> | |||
/// 工作状态 | |||
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.WorkingConditionType"/> | |||
/// </summary> | |||
public byte WorkingCondition { get; set; } | |||
/// <summary> | |||
/// 报警状态 | |||
/// </summary> | |||
public uint AlarmStatus { get; set; } | |||
} | |||
} |
@@ -1,72 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Extensions.JTActiveSafety.Metadata | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public class JT808_0x0900_0xF8_USB | |||
{ | |||
/// <summary> | |||
/// 外设ID | |||
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.USBIDType"/> | |||
/// </summary> | |||
public byte USBID { get; set; } | |||
/// <summary> | |||
/// 消息长度 | |||
/// </summary> | |||
public byte MessageLength { get; set; } | |||
/// <summary> | |||
/// 公司名称长度 | |||
/// </summary> | |||
public byte CompantNameLength { get; set; } | |||
/// <summary> | |||
/// 公司名称 | |||
/// </summary> | |||
public string CompantName { get; set; } | |||
/// <summary> | |||
/// 产品型号长度 | |||
/// </summary> | |||
public byte ProductModelLength { get; set; } | |||
/// <summary> | |||
/// 产品型号 | |||
/// </summary> | |||
public string ProductModel { get; set; } | |||
/// <summary> | |||
/// 硬件版本号长度 | |||
/// </summary> | |||
public byte HardwareVersionNumberLength { get; set; } | |||
/// <summary> | |||
/// 硬件版本号 | |||
/// ASCII | |||
/// </summary> | |||
public string HardwareVersionNumber { get; set; } | |||
/// <summary> | |||
/// 软件版本号长度 | |||
/// </summary> | |||
public byte SoftwareVersionNumberLength { get; set; } | |||
/// <summary> | |||
/// 软件版本号 | |||
/// ASCII | |||
/// </summary> | |||
public string SoftwareVersionNumber { get; set; } | |||
/// <summary> | |||
/// 设备ID长度 | |||
/// </summary> | |||
public byte DevicesIDLength { get; set; } | |||
/// <summary> | |||
/// 设备ID | |||
/// </summary> | |||
public string DevicesID { get; set; } | |||
/// <summary> | |||
/// 客户代码长度 | |||
/// </summary> | |||
public byte CustomerCodeLength { get; set; } | |||
/// <summary> | |||
/// 客户代码 | |||
/// </summary> | |||
public string CustomerCode { get; set; } | |||
} | |||
} |
@@ -3,12 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 12.00 | |||
# Visual Studio Version 16 | |||
VisualStudioVersion = 16.0.29215.179 | |||
MinimumVisualStudioVersion = 10.0.40219.1 | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Protocol.Extensions.JTActiveSafety", "JT808.Protocol.Extensions.JTActiveSafety\JT808.Protocol.Extensions.JTActiveSafety.csproj", "{EDB6CAC8-B2A6-4C59-BFC3-8FF13A7CF799}" | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTActiveSafety.Protocol", "JTActiveSafety.Protocol\JTActiveSafety.Protocol.csproj", "{FF716FAA-0C89-4DB9-A559-C50E502B996D}" | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Protocol.Extensions.JTActiveSafety.Test", "JT808.Protocol.Extensions.JTActiveSafety.Test\JT808.Protocol.Extensions.JTActiveSafety.Test.csproj", "{5A5B068D-4276-4E9D-84A4-C659A86A4A6B}" | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTActiveSafety.Protocol.Test", "JTActiveSafety.Protocol.Test\JTActiveSafety.Protocol.Test.csproj", "{148DB5C2-A8ED-4430-8AB8-44839FC45C7F}" | |||
EndProject | |||
Global | |||
@@ -17,18 +13,10 @@ Global | |||
Release|Any CPU = Release|Any CPU | |||
EndGlobalSection | |||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||
{EDB6CAC8-B2A6-4C59-BFC3-8FF13A7CF799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{EDB6CAC8-B2A6-4C59-BFC3-8FF13A7CF799}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{EDB6CAC8-B2A6-4C59-BFC3-8FF13A7CF799}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{EDB6CAC8-B2A6-4C59-BFC3-8FF13A7CF799}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{FF716FAA-0C89-4DB9-A559-C50E502B996D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{FF716FAA-0C89-4DB9-A559-C50E502B996D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{FF716FAA-0C89-4DB9-A559-C50E502B996D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{FF716FAA-0C89-4DB9-A559-C50E502B996D}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{5A5B068D-4276-4E9D-84A4-C659A86A4A6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{5A5B068D-4276-4E9D-84A4-C659A86A4A6B}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{5A5B068D-4276-4E9D-84A4-C659A86A4A6B}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{5A5B068D-4276-4E9D-84A4-C659A86A4A6B}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{148DB5C2-A8ED-4430-8AB8-44839FC45C7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{148DB5C2-A8ED-4430-8AB8-44839FC45C7F}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{148DB5C2-A8ED-4430-8AB8-44839FC45C7F}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||