From 3e0bc8fa9b741bfc479955e3d3174c9dcb8b0af7 Mon Sep 17 00:00:00 2001 From: "smallchi(Koike)" <564952747@qq.com> Date: Wed, 12 Feb 2020 15:36:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8D=8F=E8=AE=AE=E5=88=86?= =?UTF-8?q?=E6=9E=90=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JT808_0x8103_0xF364_Test.cs | 6 + .../JT808_0x8103_0xF365_Test.cs | 5 + .../Enums/ActivePhotographyStrategyType.cs | 18 ++ .../Enums/JT808_JTActiveSafety_0x0900_Type.cs | 20 -- .../Enums/PhotoResolutionType.cs | 20 ++ .../Enums/VideoRecordingResolutionType.cs | 21 ++ ...808.Protocol.Extensions.JTActiveSafety.xml | 17 +- .../MessageBody/JT808_0x8103_0xF364.cs | 236 ++++++++++++++---- .../MessageBody/JT808_0x8103_0xF365.cs | 190 +++++++++++--- 9 files changed, 416 insertions(+), 117 deletions(-) create mode 100644 src/JT808.Protocol.Extensions.JTActiveSafety/Enums/ActivePhotographyStrategyType.cs delete mode 100644 src/JT808.Protocol.Extensions.JTActiveSafety/Enums/JT808_JTActiveSafety_0x0900_Type.cs create mode 100644 src/JT808.Protocol.Extensions.JTActiveSafety/Enums/PhotoResolutionType.cs create mode 100644 src/JT808.Protocol.Extensions.JTActiveSafety/Enums/VideoRecordingResolutionType.cs diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs index 996fa33..d00b610 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs @@ -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("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs index 5502d67..9e1e511 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs @@ -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("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506".ToHexBytes()); + } } } diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/ActivePhotographyStrategyType.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/ActivePhotographyStrategyType.cs new file mode 100644 index 0000000..c08704d --- /dev/null +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/ActivePhotographyStrategyType.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.Protocol.Extensions.JTActiveSafety.Enums +{ + /// + /// 主动拍照策略 + /// + public enum ActivePhotographyStrategyType:byte + { + 不开启=0x00, + 定时拍照=0x01, + 定距拍照=0x02, + 保留=0x03, + 不修改参数=0xFF + } +} diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/JT808_JTActiveSafety_0x0900_Type.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/JT808_JTActiveSafety_0x0900_Type.cs deleted file mode 100644 index 44be60c..0000000 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/JT808_JTActiveSafety_0x0900_Type.cs +++ /dev/null @@ -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 - { - /// - /// 状态查询 - /// 外设状态信息:外设工作状态、设备报警信息 - /// - QueryState = 0xF7, - /// - /// 信息查询 - /// 外设传感器的基本信息:公司信息、产品代码、版本号、外设ID、客户代码。 - /// - QueryInfomation = 0xF8 - } -} diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/PhotoResolutionType.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/PhotoResolutionType.cs new file mode 100644 index 0000000..238e11d --- /dev/null +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/PhotoResolutionType.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.Protocol.Extensions.JTActiveSafety.Enums +{ + /// + /// 拍照分辨率 + /// + public enum PhotoResolutionType:byte + { + x352_288=0x01, + x704_288=0x02, + x704_576=0x03, + x640_480=0x04, + x1280_720=0x05, + x1920_1080=0x06, + 不修改参数=0xFF + } +} diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/VideoRecordingResolutionType.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/VideoRecordingResolutionType.cs new file mode 100644 index 0000000..b10ed4a --- /dev/null +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/Enums/VideoRecordingResolutionType.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.Protocol.Extensions.JTActiveSafety.Enums +{ + /// + /// 视频录制分辨率 + /// + public enum VideoRecordingResolutionType:byte + { + CIF=0x01, + HD1=0x02, + D1=0x03, + WD1=0x04, + VGA=0x05, + _720P=0x06, + _1080P=0x07, + 不修改参数=0xFF + } +} diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml b/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml index 652d462..1a58040 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.xml @@ -4,16 +4,14 @@ JT808.Protocol.Extensions.JTActiveSafety - + - 状态查询 - 外设状态信息:外设工作状态、设备报警信息 + 主动拍照策略 - + - 信息查询 - 外设传感器的基本信息:公司信息、产品代码、版本号、外设ID、客户代码。 + 拍照分辨率 @@ -36,6 +34,11 @@ 盲点监测系统 + + + 视频录制分辨率 + + 工作状态 @@ -483,6 +486,7 @@ 主动拍照策略 + @@ -508,6 +512,7 @@ 拍照分辨率 + diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs index d5043e2..ae50786 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs @@ -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 { /// /// 高级驾驶辅助系统参数 /// - public class JT808_0x8103_0xF364 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter + public class JT808_0x8103_0xF364 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter, 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; } /// /// 主动拍照策略 + /// /// public byte ActivePhotographyStrategy { get; set; } /// @@ -41,6 +46,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody public byte SingleInitiativePhotosInterval { get; set; } /// /// 拍照分辨率 + /// /// public byte PhotoResolution { get; set; } /// @@ -193,57 +199,185 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody /// 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) diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs index 85e41d8..33e1c5f 100644 --- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs +++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs @@ -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 { /// /// 驾驶员状态监测系统参数 /// - public class JT808_0x8103_0xF365 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter + public class JT808_0x8103_0xF365 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter, 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 /// 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)