您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

457 行
29 KiB

  1. using JT808.Protocol.Extensions.JTActiveSafety.Enums;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.Interfaces;
  4. using JT808.Protocol.MessageBody;
  5. using JT808.Protocol.MessagePack;
  6. using System;
  7. using System.Text.Json;
  8. namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
  9. {
  10. /// <summary>
  11. /// 高级驾驶辅助系统参数
  12. /// </summary>
  13. public class JT808_0x8103_0xF364 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0xF364>, IJT808Analyze
  14. {
  15. /// <summary>
  16. /// 高级驾驶辅助系统参数
  17. /// </summary>
  18. public override uint ParamId { get; set; } = JT808_JTActiveSafety_Constants.JT808_0X8103_0xF364;
  19. /// <summary>
  20. /// 高级驾驶辅助系统参数长度
  21. /// </summary>
  22. public override byte ParamLength { get; set; }
  23. /// <summary>
  24. /// 报警判断速度阈值
  25. /// </summary>
  26. public byte AlarmJudgeSpeedThreshold { get; set; }
  27. /// <summary>
  28. /// 报警提示音量
  29. /// </summary>
  30. public byte WarningVolume { get; set; }
  31. /// <summary>
  32. /// 主动拍照策略
  33. /// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.ActivePhotographyStrategyType"/>
  34. /// </summary>
  35. public byte ActivePhotographyStrategy { get; set; }
  36. /// <summary>
  37. /// 主动定时拍照时间间隔
  38. /// </summary>
  39. public ushort ActivelyTimePhotoInterval { get; set; }
  40. /// <summary>
  41. /// 主动定距拍照距离间隔
  42. /// </summary>
  43. public ushort ActiveDistancePhotographyDistanceInterval { get; set; }
  44. /// <summary>
  45. /// 单次主动拍照张数
  46. /// </summary>
  47. public byte SingleInitiativePhotos { get; set; }
  48. /// <summary>
  49. /// 单次主动拍照时间间隔
  50. /// </summary>
  51. public byte SingleInitiativePhotosInterval { get; set; }
  52. /// <summary>
  53. /// 拍照分辨率
  54. /// <see cref="JT808.Protocol.Extensions.JTActiveSafety.Enums.PhotoResolutionType"/>
  55. /// </summary>
  56. public byte PhotoResolution { get; set; }
  57. /// <summary>
  58. /// 视频录制分辨率
  59. /// </summary>
  60. public byte VideoRecordingResolution { get; set; }
  61. /// <summary>
  62. /// 报警使能
  63. /// </summary>
  64. public uint AlarmEnable { get; set; }
  65. /// <summary>
  66. /// 事件使能
  67. /// </summary>
  68. public uint EventEnable { get; set; }
  69. /// <summary>
  70. /// 预留字段
  71. /// </summary>
  72. public byte Placeholder1 { get; set; }
  73. /// <summary>
  74. /// 障碍物报警距离阈值
  75. /// </summary>
  76. public byte DistanceThresholdObstacleAlarm { get; set; }
  77. /// <summary>
  78. /// 障碍物报警分级速度阈值
  79. /// </summary>
  80. public byte HierarchicalSpeedThresholdObstacleAlarm { get; set; }
  81. /// <summary>
  82. /// 障碍物报警前后视频录制时间
  83. /// </summary>
  84. public byte VideoRecordingTimeBeforeAndAfterObstacleAlarm { get; set; }
  85. /// <summary>
  86. /// 障碍物报警拍照张数
  87. /// </summary>
  88. public byte BarrierAlarmPhotographs { get; set; }
  89. /// <summary>
  90. /// 障碍物报警拍照间隔
  91. /// </summary>
  92. public byte ObstacleAlarmInterval { get; set; }
  93. /// <summary>
  94. /// 频繁变道报警判断时间段
  95. /// </summary>
  96. public byte FrequentChannelChangeAlarmJudgmentTimePeriod { get; set; }
  97. /// <summary>
  98. /// 频繁变道报警判断次数
  99. /// </summary>
  100. public byte FrequentAlarmJudgmentNumberChannelChange { get; set; }
  101. /// <summary>
  102. /// 频繁变道报警分级速度阈值
  103. /// </summary>
  104. public byte HierarchicalSpeedThresholdFrequentChannelChangeAlarm { get; set; }
  105. /// <summary>
  106. /// 频繁变道报警前后视频录制时间
  107. /// </summary>
  108. public byte VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm { get; set; }
  109. /// <summary>
  110. /// 频繁变道报警拍照张数
  111. /// </summary>
  112. public byte FrequentChannelChangeAlarmPhotos { get; set; }
  113. /// <summary>
  114. /// 频繁变道报警拍照间隔
  115. /// </summary>
  116. public byte FrequentLaneChangeAlarmInterval { get; set; }
  117. /// <summary>
  118. /// 车道偏离报警分级速度阈值
  119. /// </summary>
  120. public byte GradedSpeedThresholdLaneDeviationAlarm { get; set; }
  121. /// <summary>
  122. /// 车道偏离报警前后视频录制时间
  123. /// </summary>
  124. public byte VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm { get; set; }
  125. /// <summary>
  126. /// 车道偏离报警拍照张数
  127. /// </summary>
  128. public byte LaneDepartureAlarmPhoto { get; set; }
  129. /// <summary>
  130. /// 车道偏离报警拍照间隔
  131. /// </summary>
  132. public byte LaneDepartureAlarmPhotoInterval { get; set; }
  133. /// <summary>
  134. /// 前向碰撞报警时间阈值
  135. /// </summary>
  136. public byte ForwardCollisionWarningTimeThreshold { get; set; }
  137. /// <summary>
  138. /// 前向碰撞报警分级速度阈值
  139. /// </summary>
  140. public byte HierarchicalSpeedThresholdForwardCollisionWarning { get; set; }
  141. /// <summary>
  142. /// 前向碰撞报警前后视频录制时间
  143. /// </summary>
  144. public byte VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm { get; set; }
  145. /// <summary>
  146. /// 前向碰撞报警拍照张数
  147. /// </summary>
  148. public byte ForwardCollisionAlarmPhotographs { get; set; }
  149. /// <summary>
  150. /// 前向碰撞报警拍照间隔
  151. /// </summary>
  152. public byte ForwardCollisionAlarmInterval { get; set; }
  153. /// <summary>
  154. /// 行人碰撞报警时间阈值
  155. /// </summary>
  156. public byte PedestrianCollisionAlarmTimeThreshold { get; set; }
  157. /// <summary>
  158. /// 行人碰撞报警使能速度阈值
  159. /// </summary>
  160. public byte PedestrianCollisionAlarmEnablingSpeedThreshold { get; set; }
  161. /// <summary>
  162. /// 行人碰撞报警前后视频录制时间
  163. /// </summary>
  164. public byte VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm { get; set; }
  165. /// <summary>
  166. /// 行人碰撞报警拍照张数
  167. /// </summary>
  168. public byte PedestrianCollisionAlarmPhotos { get; set; }
  169. /// <summary>
  170. /// 行人碰撞报警拍照间隔
  171. /// </summary>
  172. public byte PedestrianCollisionAlarmInterval { get; set; }
  173. /// <summary>
  174. /// 车距监控报警距离阈值
  175. /// </summary>
  176. public byte VehicleDistanceMonitoringAlarmDistanceThreshold { get; set; }
  177. /// <summary>
  178. /// 车距监控报警分级速度阈值
  179. /// </summary>
  180. public byte VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold { get; set; }
  181. /// <summary>
  182. /// 车距过近报警前后视频录制时间
  183. /// </summary>
  184. public byte VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity { get; set; }
  185. /// <summary>
  186. /// 车距过近报警拍照张数
  187. /// </summary>
  188. public byte AlarmPhotoVehicleCloseDistance { get; set; }
  189. /// <summary>
  190. /// 车距过近报警拍照间隔
  191. /// </summary>
  192. public byte AlarmPhotoVehicleCloseDistanceInterval { get; set; }
  193. /// <summary>
  194. /// 道路标志识别拍照张数
  195. /// </summary>
  196. public byte RoadSignRecognitionPhotographs { get; set; }
  197. /// <summary>
  198. /// 道路标志识别拍照间隔
  199. /// </summary>
  200. public byte RoadSignRecognitionPhotographsInterval { get; set; }
  201. /// <summary>
  202. /// 保留字段
  203. /// </summary>
  204. public byte[] Placeholder2 { get; set; } = new byte[4];
  205. /// <summary>
  206. ///
  207. /// </summary>
  208. /// <param name="reader"></param>
  209. /// <param name="writer"></param>
  210. /// <param name="config"></param>
  211. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  212. {
  213. JT808_0x8103_0xF364 value = new JT808_0x8103_0xF364();
  214. value.ParamId = reader.ReadUInt32();
  215. value.ParamLength = reader.ReadByte();
  216. writer.WriteNumber($"[{value.ParamId.ReadNumber()}]参数ID", value.ParamId);
  217. writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]参数长度", value.ParamLength);
  218. value.AlarmJudgeSpeedThreshold = reader.ReadByte();
  219. writer.WriteNumber($"[{value.AlarmJudgeSpeedThreshold.ReadNumber()}]报警判断速度阈值", value.AlarmJudgeSpeedThreshold);
  220. value.WarningVolume = reader.ReadByte();
  221. writer.WriteNumber($"[{value.WarningVolume.ReadNumber()}]报警提示音量", value.WarningVolume);
  222. value.ActivePhotographyStrategy = reader.ReadByte();
  223. var activePhotographyStrategy = (ActivePhotographyStrategyType)ActivePhotographyStrategy;
  224. writer.WriteNumber($"[{value.ActivePhotographyStrategy.ReadNumber()}]主动拍照策略-{activePhotographyStrategy.ToString()}", value.ActivePhotographyStrategy);
  225. value.ActivelyTimePhotoInterval = reader.ReadUInt16();
  226. writer.WriteNumber($"[{value.ActivelyTimePhotoInterval.ReadNumber()}]主动定时拍照时间间隔", value.ActivelyTimePhotoInterval);
  227. value.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16();
  228. writer.WriteNumber($"[{value.ActiveDistancePhotographyDistanceInterval.ReadNumber()}]主动定距拍照距离间隔", value.ActiveDistancePhotographyDistanceInterval);
  229. value.SingleInitiativePhotos = reader.ReadByte();
  230. writer.WriteNumber($"[{value.SingleInitiativePhotos.ReadNumber()}]单次主动拍照张数", value.SingleInitiativePhotos);
  231. value.SingleInitiativePhotosInterval = reader.ReadByte();
  232. writer.WriteNumber($"[{value.SingleInitiativePhotosInterval.ReadNumber()}]单次主动拍照时间间隔", value.SingleInitiativePhotosInterval);
  233. value.PhotoResolution = reader.ReadByte();
  234. var photoResolutionType = (PhotoResolutionType)value.PhotoResolution;
  235. writer.WriteNumber($"[{value.PhotoResolution.ReadNumber()}]拍照分辨率-{photoResolutionType.ToString()}", value.PhotoResolution);
  236. value.VideoRecordingResolution = reader.ReadByte();
  237. var videoRecordingResolution = (VideoRecordingResolutionType)value.VideoRecordingResolution;
  238. writer.WriteNumber($"[{value.VideoRecordingResolution.ReadNumber()}]视频录制分辨率-{videoRecordingResolution.ToString()}", value.VideoRecordingResolution);
  239. value.AlarmEnable = reader.ReadUInt32();
  240. writer.WriteNumber($"[{value.AlarmEnable.ReadNumber()}]报警使能", value.AlarmEnable);
  241. var alarmEnableBits = Convert.ToString(value.AlarmEnable, 2).PadLeft(32, '0').AsSpan();
  242. writer.WriteStartObject("报警使能对象");
  243. writer.WriteString("[bit30~bit31]预留", alarmEnableBits.Slice(30,2).ToString());
  244. writer.WriteString("[bit17~bit29]用户自定义", alarmEnableBits.Slice(17, 13).ToString());
  245. writer.WriteString("[bit16]道路标识超限报警", alarmEnableBits[16]=='0'?"关闭":"打开");
  246. writer.WriteString("[bit12~bit15]道路标识超限报警", alarmEnableBits.Slice(12, 4).ToString());
  247. writer.WriteString("[bit11]车距过近二级报警", alarmEnableBits[11] == '0' ? "关闭" : "打开");
  248. writer.WriteString("[bit10]车距过近一级报警", alarmEnableBits[10] == '0' ? "关闭" : "打开");
  249. writer.WriteString("[bit9]行人碰撞二级报警", alarmEnableBits[9] == '0' ? "关闭" : "打开");
  250. writer.WriteString("[bit8]行人碰撞一级报警", alarmEnableBits[8] == '0' ? "关闭" : "打开");
  251. writer.WriteString("[bit7]前向碰撞二级报警", alarmEnableBits[7] == '0' ? "关闭" : "打开");
  252. writer.WriteString("[bit6]前向碰撞一级报警", alarmEnableBits[6] == '0' ? "关闭" : "打开");
  253. writer.WriteString("[bit5]车道偏离二级报警", alarmEnableBits[5] == '0' ? "关闭" : "打开");
  254. writer.WriteString("[bit4]车道偏离一级报警", alarmEnableBits[4] == '0' ? "关闭" : "打开");
  255. writer.WriteString("[bit3]频繁变道二级报警", alarmEnableBits[3] == '0' ? "关闭" : "打开");
  256. writer.WriteString("[bit2]频繁变道一级报警", alarmEnableBits[2] == '0' ? "关闭" : "打开");
  257. writer.WriteString("[bit1]障碍检测二级报警", alarmEnableBits[1] == '0' ? "关闭" : "打开");
  258. writer.WriteString("[bit0]障碍检测一级报警", alarmEnableBits[0] == '0' ? "关闭" : "打开");
  259. writer.WriteEndObject();
  260. value.EventEnable = reader.ReadUInt32();
  261. writer.WriteNumber($"[{value.EventEnable.ReadNumber()}]事件使能", value.EventEnable);
  262. var eventEnableBits = Convert.ToString(value.EventEnable, 2).PadLeft(32, '0').AsSpan();
  263. writer.WriteStartObject("事件使能对象");
  264. writer.WriteString("[bit30~bit31]预留", eventEnableBits.Slice(30, 2).ToString());
  265. writer.WriteString("[bit2~bit29]用户自定义", alarmEnableBits.Slice(2, 28).ToString());
  266. writer.WriteString("[bit1]主动拍照", alarmEnableBits[1] == '0' ? "关闭" : "打开");
  267. writer.WriteString("[bit0]道路标识识别", alarmEnableBits[0] == '0' ? "关闭" : "打开");
  268. writer.WriteEndObject();
  269. value.Placeholder1 = reader.ReadByte();
  270. writer.WriteNumber($"[{value.Placeholder1.ReadNumber()}]预留字段", value.Placeholder1);
  271. value.DistanceThresholdObstacleAlarm = reader.ReadByte();
  272. writer.WriteNumber($"[{value.DistanceThresholdObstacleAlarm.ReadNumber()}]障碍物报警距离阈值", value.DistanceThresholdObstacleAlarm);
  273. value.HierarchicalSpeedThresholdObstacleAlarm = reader.ReadByte();
  274. writer.WriteNumber($"[{value.HierarchicalSpeedThresholdObstacleAlarm.ReadNumber()}]障碍物报警分级速度阈值", value.HierarchicalSpeedThresholdObstacleAlarm);
  275. value.VideoRecordingTimeBeforeAndAfterObstacleAlarm = reader.ReadByte();
  276. writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterObstacleAlarm.ReadNumber()}]障碍物报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterObstacleAlarm);
  277. value.BarrierAlarmPhotographs = reader.ReadByte();
  278. writer.WriteNumber($"[{value.BarrierAlarmPhotographs.ReadNumber()}]障碍物报警拍照张数", value.BarrierAlarmPhotographs);
  279. value.ObstacleAlarmInterval = reader.ReadByte();
  280. writer.WriteNumber($"[{value.ObstacleAlarmInterval.ReadNumber()}]障碍物报警拍照间隔", value.ObstacleAlarmInterval);
  281. value.FrequentChannelChangeAlarmJudgmentTimePeriod = reader.ReadByte();
  282. writer.WriteNumber($"[{value.FrequentChannelChangeAlarmJudgmentTimePeriod.ReadNumber()}]频繁变道报警判断时间段", value.FrequentChannelChangeAlarmJudgmentTimePeriod);
  283. value.FrequentAlarmJudgmentNumberChannelChange = reader.ReadByte();
  284. writer.WriteNumber($"[{value.FrequentAlarmJudgmentNumberChannelChange.ReadNumber()}]频繁变道报警判断次数", value.FrequentAlarmJudgmentNumberChannelChange);
  285. value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm = reader.ReadByte();
  286. writer.WriteNumber($"[{value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm.ReadNumber()}]频繁变道报警分级速度阈值", value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm);
  287. value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm = reader.ReadByte();
  288. writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm.ReadNumber()}]频繁变道报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm);
  289. value.FrequentChannelChangeAlarmPhotos = reader.ReadByte();
  290. writer.WriteNumber($"[{value.FrequentChannelChangeAlarmPhotos.ReadNumber()}]频繁变道报警拍照张数", value.FrequentChannelChangeAlarmPhotos);
  291. value.FrequentLaneChangeAlarmInterval = reader.ReadByte();
  292. writer.WriteNumber($"[{value.FrequentLaneChangeAlarmInterval.ReadNumber()}]频繁变道报警拍照间隔", value.FrequentLaneChangeAlarmInterval);
  293. value.GradedSpeedThresholdLaneDeviationAlarm = reader.ReadByte();
  294. writer.WriteNumber($"[{value.GradedSpeedThresholdLaneDeviationAlarm.ReadNumber()}]车道偏离报警分级速度阈值", value.GradedSpeedThresholdLaneDeviationAlarm);
  295. value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm = reader.ReadByte();
  296. writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm.ReadNumber()}]车道偏离报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm);
  297. value.LaneDepartureAlarmPhoto = reader.ReadByte();
  298. writer.WriteNumber($"[{value.LaneDepartureAlarmPhoto.ReadNumber()}]车道偏离报警拍照张数", value.LaneDepartureAlarmPhoto);
  299. value.LaneDepartureAlarmPhotoInterval = reader.ReadByte();
  300. writer.WriteNumber($"[{value.LaneDepartureAlarmPhotoInterval.ReadNumber()}]车道偏离报警拍照间隔", value.LaneDepartureAlarmPhotoInterval);
  301. value.ForwardCollisionWarningTimeThreshold = reader.ReadByte();
  302. writer.WriteNumber($"[{value.ForwardCollisionWarningTimeThreshold.ReadNumber()}]前向碰撞报警时间阈值", value.ForwardCollisionWarningTimeThreshold);
  303. value.HierarchicalSpeedThresholdForwardCollisionWarning = reader.ReadByte();
  304. writer.WriteNumber($"[{value.HierarchicalSpeedThresholdForwardCollisionWarning.ReadNumber()}]前向碰撞报警分级速度阈值", value.HierarchicalSpeedThresholdForwardCollisionWarning);
  305. value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm = reader.ReadByte();
  306. writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm.ReadNumber()}]前向碰撞报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm);
  307. value.ForwardCollisionAlarmPhotographs = reader.ReadByte();
  308. writer.WriteNumber($"[{value.ForwardCollisionAlarmPhotographs.ReadNumber()}]前向碰撞报警拍照张数", value.ForwardCollisionAlarmPhotographs);
  309. value.ForwardCollisionAlarmInterval = reader.ReadByte();
  310. writer.WriteNumber($"[{value.ForwardCollisionAlarmInterval.ReadNumber()}]前向碰撞报警拍照间隔", value.ForwardCollisionAlarmInterval);
  311. value.PedestrianCollisionAlarmTimeThreshold = reader.ReadByte();
  312. writer.WriteNumber($"[{value.PedestrianCollisionAlarmTimeThreshold.ReadNumber()}]行人碰撞报警时间阈值", value.PedestrianCollisionAlarmTimeThreshold);
  313. value.PedestrianCollisionAlarmEnablingSpeedThreshold = reader.ReadByte();
  314. writer.WriteNumber($"[{value.PedestrianCollisionAlarmEnablingSpeedThreshold.ReadNumber()}]行人碰撞报警使能速度阈值", value.PedestrianCollisionAlarmEnablingSpeedThreshold);
  315. value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm = reader.ReadByte();
  316. writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm.ReadNumber()}]行人碰撞报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm);
  317. value.PedestrianCollisionAlarmPhotos = reader.ReadByte();
  318. writer.WriteNumber($"[{value.PedestrianCollisionAlarmPhotos.ReadNumber()}]行人碰撞报警拍照张数", value.PedestrianCollisionAlarmPhotos);
  319. value.PedestrianCollisionAlarmInterval = reader.ReadByte();
  320. writer.WriteNumber($"[{value.PedestrianCollisionAlarmInterval.ReadNumber()}]行人碰撞报警拍照间隔", value.PedestrianCollisionAlarmInterval);
  321. value.VehicleDistanceMonitoringAlarmDistanceThreshold = reader.ReadByte();
  322. writer.WriteNumber($"[{value.VehicleDistanceMonitoringAlarmDistanceThreshold.ReadNumber()}]车距监控报警距离阈值", value.VehicleDistanceMonitoringAlarmDistanceThreshold);
  323. value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold = reader.ReadByte();
  324. writer.WriteNumber($"[{value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold.ReadNumber()}]车距监控报警分级速度阈值", value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold);
  325. value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity = reader.ReadByte();
  326. writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity.ReadNumber()}]车距过近报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity);
  327. value.AlarmPhotoVehicleCloseDistance = reader.ReadByte();
  328. writer.WriteNumber($"[{value.AlarmPhotoVehicleCloseDistance.ReadNumber()}]车距过近报警拍照张数", value.AlarmPhotoVehicleCloseDistance);
  329. value.AlarmPhotoVehicleCloseDistanceInterval = reader.ReadByte();
  330. writer.WriteNumber($"[{value.AlarmPhotoVehicleCloseDistanceInterval.ReadNumber()}]车距过近报警拍照间隔", value.AlarmPhotoVehicleCloseDistanceInterval);
  331. value.RoadSignRecognitionPhotographs = reader.ReadByte();
  332. writer.WriteNumber($"[{value.RoadSignRecognitionPhotographs.ReadNumber()}]道路标志识别拍照张数", value.RoadSignRecognitionPhotographs);
  333. value.RoadSignRecognitionPhotographsInterval = reader.ReadByte();
  334. writer.WriteNumber($"[{value.RoadSignRecognitionPhotographsInterval.ReadNumber()}]道路标志识别拍照间隔", value.RoadSignRecognitionPhotographsInterval);
  335. value.Placeholder2 = reader.ReadArray(4).ToArray();
  336. writer.WriteString("保留字段", value.Placeholder2.ToHexString());
  337. }
  338. /// <summary>
  339. ///
  340. /// </summary>
  341. /// <param name="reader"></param>
  342. /// <param name="config"></param>
  343. /// <returns></returns>
  344. public JT808_0x8103_0xF364 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  345. {
  346. JT808_0x8103_0xF364 value = new JT808_0x8103_0xF364();
  347. value.ParamId = reader.ReadUInt32();
  348. value.ParamLength = reader.ReadByte();
  349. value.AlarmJudgeSpeedThreshold = reader.ReadByte();
  350. value.WarningVolume = reader.ReadByte();
  351. value.ActivePhotographyStrategy = reader.ReadByte();
  352. value.ActivelyTimePhotoInterval = reader.ReadUInt16();
  353. value.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16();
  354. value.SingleInitiativePhotos = reader.ReadByte();
  355. value.SingleInitiativePhotosInterval = reader.ReadByte();
  356. value.PhotoResolution = reader.ReadByte();
  357. value.VideoRecordingResolution = reader.ReadByte();
  358. value.AlarmEnable = reader.ReadUInt32();
  359. value.EventEnable = reader.ReadUInt32();
  360. value.Placeholder1 = reader.ReadByte();
  361. value.DistanceThresholdObstacleAlarm = reader.ReadByte();
  362. value.HierarchicalSpeedThresholdObstacleAlarm = reader.ReadByte();
  363. value.VideoRecordingTimeBeforeAndAfterObstacleAlarm = reader.ReadByte();
  364. value.BarrierAlarmPhotographs = reader.ReadByte();
  365. value.ObstacleAlarmInterval = reader.ReadByte();
  366. value.FrequentChannelChangeAlarmJudgmentTimePeriod = reader.ReadByte();
  367. value.FrequentAlarmJudgmentNumberChannelChange = reader.ReadByte();
  368. value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm = reader.ReadByte();
  369. value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm = reader.ReadByte();
  370. value.FrequentChannelChangeAlarmPhotos = reader.ReadByte();
  371. value.FrequentLaneChangeAlarmInterval = reader.ReadByte();
  372. value.GradedSpeedThresholdLaneDeviationAlarm = reader.ReadByte();
  373. value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm = reader.ReadByte();
  374. value.LaneDepartureAlarmPhoto = reader.ReadByte();
  375. value.LaneDepartureAlarmPhotoInterval = reader.ReadByte();
  376. value.ForwardCollisionWarningTimeThreshold = reader.ReadByte();
  377. value.HierarchicalSpeedThresholdForwardCollisionWarning = reader.ReadByte();
  378. value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm = reader.ReadByte();
  379. value.ForwardCollisionAlarmPhotographs = reader.ReadByte();
  380. value.ForwardCollisionAlarmInterval = reader.ReadByte();
  381. value.PedestrianCollisionAlarmTimeThreshold = reader.ReadByte();
  382. value.PedestrianCollisionAlarmEnablingSpeedThreshold = reader.ReadByte();
  383. value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm = reader.ReadByte();
  384. value.PedestrianCollisionAlarmPhotos = reader.ReadByte();
  385. value.PedestrianCollisionAlarmInterval = reader.ReadByte();
  386. value.VehicleDistanceMonitoringAlarmDistanceThreshold = reader.ReadByte();
  387. value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold = reader.ReadByte();
  388. value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity = reader.ReadByte();
  389. value.AlarmPhotoVehicleCloseDistance = reader.ReadByte();
  390. value.AlarmPhotoVehicleCloseDistanceInterval = reader.ReadByte();
  391. value.RoadSignRecognitionPhotographs = reader.ReadByte();
  392. value.RoadSignRecognitionPhotographsInterval = reader.ReadByte();
  393. value.Placeholder2 = reader.ReadArray(4).ToArray();
  394. return value;
  395. }
  396. /// <summary>
  397. ///
  398. /// </summary>
  399. /// <param name="writer"></param>
  400. /// <param name="value"></param>
  401. /// <param name="config"></param>
  402. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF364 value, IJT808Config config)
  403. {
  404. writer.WriteUInt32(value.ParamId);
  405. writer.Skip(1, out int ParamLengthPosition);
  406. writer.WriteByte(value.AlarmJudgeSpeedThreshold);
  407. writer.WriteByte(value.WarningVolume);
  408. writer.WriteByte(value.ActivePhotographyStrategy);
  409. writer.WriteUInt16(value.ActivelyTimePhotoInterval);
  410. writer.WriteUInt16(value.ActiveDistancePhotographyDistanceInterval);
  411. writer.WriteByte(value.SingleInitiativePhotos);
  412. writer.WriteByte(value.SingleInitiativePhotosInterval);
  413. writer.WriteByte(value.PhotoResolution);
  414. writer.WriteByte(value.VideoRecordingResolution);
  415. writer.WriteUInt32(value.AlarmEnable);
  416. writer.WriteUInt32(value.EventEnable);
  417. writer.WriteByte(value.Placeholder1);
  418. writer.WriteByte(value.DistanceThresholdObstacleAlarm);
  419. writer.WriteByte(value.HierarchicalSpeedThresholdObstacleAlarm);
  420. writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterObstacleAlarm);
  421. writer.WriteByte(value.BarrierAlarmPhotographs);
  422. writer.WriteByte(value.ObstacleAlarmInterval);
  423. writer.WriteByte(value.FrequentChannelChangeAlarmJudgmentTimePeriod);
  424. writer.WriteByte(value.FrequentAlarmJudgmentNumberChannelChange);
  425. writer.WriteByte(value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm);
  426. writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm);
  427. writer.WriteByte(value.FrequentChannelChangeAlarmPhotos);
  428. writer.WriteByte(value.FrequentLaneChangeAlarmInterval);
  429. writer.WriteByte(value.GradedSpeedThresholdLaneDeviationAlarm);
  430. writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm);
  431. writer.WriteByte(value.LaneDepartureAlarmPhoto);
  432. writer.WriteByte(value.LaneDepartureAlarmPhotoInterval);
  433. writer.WriteByte(value.ForwardCollisionWarningTimeThreshold);
  434. writer.WriteByte(value.HierarchicalSpeedThresholdForwardCollisionWarning);
  435. writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm);
  436. writer.WriteByte(value.ForwardCollisionAlarmPhotographs);
  437. writer.WriteByte(value.ForwardCollisionAlarmInterval);
  438. writer.WriteByte(value.PedestrianCollisionAlarmTimeThreshold);
  439. writer.WriteByte(value.PedestrianCollisionAlarmEnablingSpeedThreshold);
  440. writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm);
  441. writer.WriteByte(value.PedestrianCollisionAlarmPhotos);
  442. writer.WriteByte(value.PedestrianCollisionAlarmInterval);
  443. writer.WriteByte(value.VehicleDistanceMonitoringAlarmDistanceThreshold);
  444. writer.WriteByte(value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold);
  445. writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity);
  446. writer.WriteByte(value.AlarmPhotoVehicleCloseDistance);
  447. writer.WriteByte(value.AlarmPhotoVehicleCloseDistanceInterval);
  448. writer.WriteByte(value.RoadSignRecognitionPhotographs);
  449. writer.WriteByte(value.RoadSignRecognitionPhotographsInterval);
  450. writer.WriteArray(value.Placeholder2);
  451. writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition);
  452. }
  453. }
  454. }