Browse Source

增加协议分析工具

tags/v1.0.1^0
smallchi(Koike) 5 years ago
parent
commit
3e0bc8fa9b
9 changed files with 416 additions and 117 deletions
  1. +6
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs
  2. +5
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs
  3. +18
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety/Enums/ActivePhotographyStrategyType.cs
  4. +0
    -20
      src/JT808.Protocol.Extensions.JTActiveSafety/Enums/JT808_JTActiveSafety_0x0900_Type.cs
  5. +20
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety/Enums/PhotoResolutionType.cs
  6. +21
    -0
      src/JT808.Protocol.Extensions.JTActiveSafety/Enums/VideoRecordingResolutionType.cs
  7. +11
    -6
      src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml
  8. +185
    -51
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs
  9. +150
    -40
      src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs

+ 6
- 0
src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs View File

@@ -129,5 +129,11 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test
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());
}
}
}

+ 5
- 0
src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs View File

@@ -107,5 +107,10 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Test
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());
}
}
}

+ 18
- 0
src/JT808.Protocol.Extensions.JTActiveSafety/Enums/ActivePhotographyStrategyType.cs View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.Protocol.Extensions.JTActiveSafety.Enums
{
/// <summary>
/// 主动拍照策略
/// </summary>
public enum ActivePhotographyStrategyType:byte
{
不开启=0x00,
定时拍照=0x01,
定距拍照=0x02,
保留=0x03,
不修改参数=0xFF
}
}

+ 0
- 20
src/JT808.Protocol.Extensions.JTActiveSafety/Enums/JT808_JTActiveSafety_0x0900_Type.cs View File

@@ -1,20 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.Protocol.Extensions.JTActiveSafety.Enums
{
public enum JT808_JTActiveSafety_0x0900_Type : byte
{
/// <summary>
/// 状态查询
/// 外设状态信息:外设工作状态、设备报警信息
/// </summary>
QueryState = 0xF7,
/// <summary>
/// 信息查询
/// 外设传感器的基本信息:公司信息、产品代码、版本号、外设ID、客户代码。
/// </summary>
QueryInfomation = 0xF8
}
}

+ 20
- 0
src/JT808.Protocol.Extensions.JTActiveSafety/Enums/PhotoResolutionType.cs View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.Protocol.Extensions.JTActiveSafety.Enums
{
/// <summary>
/// 拍照分辨率
/// </summary>
public enum PhotoResolutionType:byte
{
x352_288=0x01,
x704_288=0x02,
x704_576=0x03,
x640_480=0x04,
x1280_720=0x05,
x1920_1080=0x06,
不修改参数=0xFF
}
}

+ 21
- 0
src/JT808.Protocol.Extensions.JTActiveSafety/Enums/VideoRecordingResolutionType.cs View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.Protocol.Extensions.JTActiveSafety.Enums
{
/// <summary>
/// 视频录制分辨率
/// </summary>
public enum VideoRecordingResolutionType:byte
{
CIF=0x01,
HD1=0x02,
D1=0x03,
WD1=0x04,
VGA=0x05,
_720P=0x06,
_1080P=0x07,
不修改参数=0xFF
}
}

+ 11
- 6
src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml View File

@@ -4,16 +4,14 @@
<name>JT808.Protocol.Extensions.JTActiveSafety</name>
</assembly>
<members>
<member name="F:JT808.Protocol.Extensions.JTActiveSafety.Enums.JT808_JTActiveSafety_0x0900_Type.QueryState">
<member name="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.ActivePhotographyStrategyType">
<summary>
状态查询
外设状态信息:外设工作状态、设备报警信息
主动拍照策略
</summary>
</member>
<member name="F:JT808.Protocol.Extensions.JTActiveSafety.Enums.JT808_JTActiveSafety_0x0900_Type.QueryInfomation">
<member name="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.PhotoResolutionType">
<summary>
信息查询
外设传感器的基本信息:公司信息、产品代码、版本号、外设ID、客户代码。
拍照分辨率
</summary>
</member>
<member name="F:JT808.Protocol.Extensions.JTActiveSafety.Enums.USBIDType.ADAS">
@@ -36,6 +34,11 @@
盲点监测系统
</summary>
</member>
<member name="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.VideoRecordingResolutionType">
<summary>
视频录制分辨率
</summary>
</member>
<member name="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.WorkingConditionType">
<summary>
工作状态
@@ -483,6 +486,7 @@
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.MessageBody.JT808_0x8103_0xF364.ActivePhotographyStrategy">
<summary>
主动拍照策略
<see cref="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.ActivePhotographyStrategyType"/>
</summary>
</member>
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.MessageBody.JT808_0x8103_0xF364.ActivelyTimePhotoInterval">
@@ -508,6 +512,7 @@
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.MessageBody.JT808_0x8103_0xF364.PhotoResolution">
<summary>
拍照分辨率
<see cref="T:JT808.Protocol.Extensions.JTActiveSafety.Enums.PhotoResolutionType"/>
</summary>
</member>
<member name="P:JT808.Protocol.Extensions.JTActiveSafety.MessageBody.JT808_0x8103_0xF364.VideoRecordingResolution">


+ 185
- 51
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs View File

@@ -1,13 +1,17 @@
using JT808.Protocol.Formatters;
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>
public class JT808_0x8103_0xF364 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF364>, IJT808Analyze
{
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF364;
public override byte ParamLength { get; set; }
@@ -21,6 +25,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
public byte WarningVolume { get; set; }
/// <summary>
/// 主动拍照策略
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.ActivePhotographyStrategyType"/>
/// </summary>
public byte ActivePhotographyStrategy { get; set; }
/// <summary>
@@ -41,6 +46,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
public byte SingleInitiativePhotosInterval { get; set; }
/// <summary>
/// 拍照分辨率
/// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.PhotoResolutionType"/>
/// </summary>
public byte PhotoResolution { get; set; }
/// <summary>
@@ -193,57 +199,185 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// </summary>
public byte[] Placeholder2 { get; set; } = new byte[4];

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());
}

public JT808_0x8103_0xF364 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8103_0xF364 jT808_0X8103_0XF364 = new JT808_0x8103_0xF364();
jT808_0X8103_0XF364.ParamId = reader.ReadUInt32();
jT808_0X8103_0XF364.ParamLength = reader.ReadByte();
jT808_0X8103_0XF364.AlarmJudgeSpeedThreshold = reader.ReadByte();
jT808_0X8103_0XF364.WarningVolume = reader.ReadByte();
jT808_0X8103_0XF364.ActivePhotographyStrategy = reader.ReadByte();
jT808_0X8103_0XF364.ActivelyTimePhotoInterval = reader.ReadUInt16();
jT808_0X8103_0XF364.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16();
jT808_0X8103_0XF364.SingleInitiativePhotos = reader.ReadByte();
jT808_0X8103_0XF364.SingleInitiativePhotosInterval = reader.ReadByte();
jT808_0X8103_0XF364.PhotoResolution = reader.ReadByte();
jT808_0X8103_0XF364.VideoRecordingResolution = reader.ReadByte();
jT808_0X8103_0XF364.AlarmEnable = reader.ReadUInt32();
jT808_0X8103_0XF364.EventEnable = reader.ReadUInt32();
jT808_0X8103_0XF364.Placeholder1 = reader.ReadByte();
jT808_0X8103_0XF364.DistanceThresholdObstacleAlarm = reader.ReadByte();
jT808_0X8103_0XF364.HierarchicalSpeedThresholdObstacleAlarm = reader.ReadByte();
jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterObstacleAlarm = reader.ReadByte();
jT808_0X8103_0XF364.BarrierAlarmPhotographs = reader.ReadByte();
jT808_0X8103_0XF364.ObstacleAlarmInterval = reader.ReadByte();
jT808_0X8103_0XF364.FrequentChannelChangeAlarmJudgmentTimePeriod = reader.ReadByte();
jT808_0X8103_0XF364.FrequentAlarmJudgmentNumberChannelChange = reader.ReadByte();
jT808_0X8103_0XF364.HierarchicalSpeedThresholdFrequentChannelChangeAlarm = reader.ReadByte();
jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm = reader.ReadByte();
jT808_0X8103_0XF364.FrequentChannelChangeAlarmPhotos = reader.ReadByte();
jT808_0X8103_0XF364.FrequentLaneChangeAlarmInterval = reader.ReadByte();
jT808_0X8103_0XF364.GradedSpeedThresholdLaneDeviationAlarm = reader.ReadByte();
jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm = reader.ReadByte();
jT808_0X8103_0XF364.LaneDepartureAlarmPhoto = reader.ReadByte();
jT808_0X8103_0XF364.LaneDepartureAlarmPhotoInterval = reader.ReadByte();
jT808_0X8103_0XF364.ForwardCollisionWarningTimeThreshold = reader.ReadByte();
jT808_0X8103_0XF364.HierarchicalSpeedThresholdForwardCollisionWarning = reader.ReadByte();
jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm = reader.ReadByte();
jT808_0X8103_0XF364.ForwardCollisionAlarmPhotographs = reader.ReadByte();
jT808_0X8103_0XF364.ForwardCollisionAlarmInterval = reader.ReadByte();
jT808_0X8103_0XF364.PedestrianCollisionAlarmTimeThreshold = reader.ReadByte();
jT808_0X8103_0XF364.PedestrianCollisionAlarmEnablingSpeedThreshold = reader.ReadByte();
jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm = reader.ReadByte();
jT808_0X8103_0XF364.PedestrianCollisionAlarmPhotos = reader.ReadByte();
jT808_0X8103_0XF364.PedestrianCollisionAlarmInterval = reader.ReadByte();
jT808_0X8103_0XF364.VehicleDistanceMonitoringAlarmDistanceThreshold = reader.ReadByte();
jT808_0X8103_0XF364.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold = reader.ReadByte();
jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity = reader.ReadByte();
jT808_0X8103_0XF364.AlarmPhotoVehicleCloseDistance = reader.ReadByte();
jT808_0X8103_0XF364.AlarmPhotoVehicleCloseDistanceInterval = reader.ReadByte();
jT808_0X8103_0XF364.RoadSignRecognitionPhotographs = reader.ReadByte();
jT808_0X8103_0XF364.RoadSignRecognitionPhotographsInterval = reader.ReadByte();
jT808_0X8103_0XF364.Placeholder2 = reader.ReadArray(4).ToArray();
return jT808_0X8103_0XF364;
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;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF364 value, IJT808Config config)


+ 150
- 40
src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs View File

@@ -1,13 +1,17 @@
using JT808.Protocol.Formatters;
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>
public class JT808_0x8103_0xF365 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF365>, IJT808Analyze
{
public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF365;
public override byte ParamLength { get; set; }
@@ -148,46 +152,152 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// </summary>
public byte[] Retain { get; set; } = new byte[2];

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());
}

public JT808_0x8103_0xF365 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8103_0xF365 jT808_0X8103_0XF365 = new JT808_0x8103_0xF365();
jT808_0X8103_0XF365.ParamId = reader.ReadUInt32();
jT808_0X8103_0XF365.ParamLength = reader.ReadByte();
jT808_0X8103_0XF365.AlarmJudgeSpeedThreshold = reader.ReadByte();
jT808_0X8103_0XF365.WarningVolume = reader.ReadByte();
jT808_0X8103_0XF365.ActivePhotographyStrategy = reader.ReadByte();
jT808_0X8103_0XF365.ActivelyTimePhotoInterval = reader.ReadUInt16();
jT808_0X8103_0XF365.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16();
jT808_0X8103_0XF365.SingleInitiativePhotos = reader.ReadByte();
jT808_0X8103_0XF365.SingleInitiativePhotosInterval = reader.ReadByte();
jT808_0X8103_0XF365.PhotoResolution = reader.ReadByte();
jT808_0X8103_0XF365.VideoRecordingResolution = reader.ReadByte();
jT808_0X8103_0XF365.AlarmEnable = reader.ReadUInt32();
jT808_0X8103_0XF365.EventEnable = reader.ReadUInt32();
jT808_0X8103_0XF365.TimeIntervalSmokingAlarmJudgment = reader.ReadUInt16();
jT808_0X8103_0XF365.CallAlarmDetermineTimeInterval = reader.ReadUInt16();
jT808_0X8103_0XF365.Reserve = reader.ReadArray(3).ToArray();
jT808_0X8103_0XF365.GradedSpeedThresholdFatigueDrivingAlarm = reader.ReadByte();
jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm = reader.ReadByte();
jT808_0X8103_0XF365.FatigueDrivingAlarmPhotograph = reader.ReadByte();
jT808_0X8103_0XF365.FatigueDrivingAlarmPhotographInterval = reader.ReadByte();
jT808_0X8103_0XF365.ClassifiedSpeedThresholdCallAlarm = reader.ReadByte();
jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterCallAlarm = reader.ReadByte();
jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeatures = reader.ReadByte();
jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeaturesInterval = reader.ReadByte();
jT808_0X8103_0XF365.ClassifiedSpeedThresholdSmokingAlarm = reader.ReadByte();
jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterSmokingAlarm = reader.ReadByte();
jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristics = reader.ReadByte();
jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval = reader.ReadByte();
jT808_0X8103_0XF365.ClassifiedSpeedThresholdDistractedDrivingAlarm = reader.ReadByte();
jT808_0X8103_0XF365.DistractedDrivingAlarmPhotography = reader.ReadByte();
jT808_0X8103_0XF365.DistractedDrivingAlarmPhotographyInterval = reader.ReadByte();
jT808_0X8103_0XF365.VideoRecordingTimeAbnormalDrivingBehavior = reader.ReadByte();
jT808_0X8103_0XF365.PhotographsAbnormalDrivingBehavior = reader.ReadByte();
jT808_0X8103_0XF365.PictureIntervalAbnormalDrivingBehavior = reader.ReadByte();
jT808_0X8103_0XF365.DriverIdentificationTrigger = reader.ReadByte();
jT808_0X8103_0XF365.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray();
return jT808_0X8103_0XF365;
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;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF365 value, IJT808Config config)


Loading…
Cancel
Save