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