From 8c31ac8447e50babbef239fed1fc0269222442f1 Mon Sep 17 00:00:00 2001 From: waterliu99 Date: Sun, 27 Jun 2021 17:29:41 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=A4=E6=A0=87=E5=8D=95=E5=85=83=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JT808.Protocol.Extensions.JT1078.xml | 38 +-- .../JT808_0x0200_0x66_Test.cs | 6 +- .../JT808_0x0200_0x67_Test.cs | 16 +- .../JT808_0x8103_0xF364_Test.cs | 32 ++- .../JT808_0x8103_0xF365_Test.cs | 59 ++++- .../JT808.Protocol.Extensions.YueBiao.xml | 246 +++++++++++++++++- .../JT808_YueBiao_Constants.cs | 8 + .../MessageBody/JT808_0x0200_0x64.cs | 10 +- .../MessageBody/JT808_0x0200_0x66.cs | 90 ++----- .../MessageBody/JT808_0x0200_0x67.cs | 70 +---- .../MessageBody/JT808_0x0200_0xF1.cs | 73 ++++++ .../MessageBody/JT808_0x0200_0xF2.cs | 73 ++++++ .../MessageBody/JT808_0x0900_0xF7.cs | 3 +- .../MessageBody/JT808_0x0900_0xF8.cs | 24 +- .../MessageBody/JT808_0x8103_0xF364.cs | 107 ++++++-- .../MessageBody/JT808_0x8103_0xF365.cs | 231 ++++++++++++++-- .../MessageBody/JT808_0x8103_0xF366.cs | 4 +- .../Metadata/AlarmOrEventProperty.cs | 2 +- 18 files changed, 826 insertions(+), 266 deletions(-) create mode 100644 src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0xF1.cs create mode 100644 src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0xF2.cs diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/JT808.Protocol.Extensions.JT1078.xml b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/JT808.Protocol.Extensions.JT1078.xml index 72d78ad..bf071bf 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/JT808.Protocol.Extensions.JT1078.xml +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/JT808.Protocol.Extensions.JT1078.xml @@ -1831,16 +1831,6 @@ 文件上传指令 - - - 文件上传指令 - - - - - 0x9206 - - 服务器IP地址服务 @@ -1893,12 +1883,12 @@ - 起始时间 + 起始时间 BCD[6] - 结束时间 + 结束时间 BCD[6] @@ -1926,30 +1916,6 @@ 任务执行条件 - - - - - - - - - - - - - - - - - - - - - - - - 文件上传控制 diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x0200_0x66_Test.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x0200_0x66_Test.cs index e81113b..c452f25 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x0200_0x66_Test.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x0200_0x66_Test.cs @@ -71,13 +71,13 @@ namespace JT808.Protocol.Extensions.YueBiao.Test VehicleState = 19 }); var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); - Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106653000000010C1100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506020400010003000500020900060008000A0007", hex); + Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106655000000010C1100070000000D0000000E1912111831000013343434343434340000000000000000000000000000000000000000000000191210183100030205060200040001000300050002000900060008000A0007", hex); } [Fact] public void Deserialize() { - var jT808UploadLocationRequest = JT808Serializer.Deserialize("000000010000000200BA7F0E07E4F11C0028003C00001807151010106653000000010C1100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506020400010003000500020900060008000A0007".ToHexBytes()); + var jT808UploadLocationRequest = JT808Serializer.Deserialize("000000010000000200BA7F0E07E4F11C0028003C00001807151010106655000000010C1100070000000D0000000E1912111831000013343434343434340000000000000000000000000000000000000000000000191210183100030205060200040001000300050002000900060008000A0007".ToHexBytes()); jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_YueBiao_Constants.JT808_0X0200_0x66, out var value); JT808_0x0200_0x66 jT808_0X0200_0X66 = value as JT808_0x0200_0x66; Assert.Equal(1u, jT808_0X0200_0X66.AlarmId); @@ -111,7 +111,7 @@ namespace JT808.Protocol.Extensions.YueBiao.Test [Fact] public void Json() { - var json = JT808Serializer.Analyze("000000010000000200BA7F0E07E4F11C0028003C00001807151010106653000000010C1100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506020400010003000500020900060008000A0007".ToHexBytes()); + var json = JT808Serializer.Analyze("000000010000000200BA7F0E07E4F11C0028003C00001807151010106655000000010C1100070000000D0000000E1912111831000013343434343434340000000000000000000000000000000000000000000000191210183100030205060200040001000300050002000900060008000A0007".ToHexBytes()); } } } diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x0200_0x67_Test.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x0200_0x67_Test.cs index 3322182..e63c47d 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x0200_0x67_Test.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x0200_0x67_Test.cs @@ -42,26 +42,25 @@ namespace JT808.Protocol.Extensions.YueBiao.Test SN = 3, TerminalId = "4444444", Time = Convert.ToDateTime("2019-12-10 18:31:00"), - Retain1=5, - Retain2=6 + Retain1=5, + Retain2=6 }, AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"), Altitude = 7, - AlarmLevel = 8, AlarmOrEventType = 9, - FlagState = 12, + FlagState = 12, Latitude = 13, Longitude = 14, Speed = 17, VehicleState = 19 }); var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); - Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106742000000010C09081100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506", hex); + Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106741000000010C091100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506", hex); } [Fact] public void Deserialize() { - var jT808UploadLocationRequest = JT808Serializer.Deserialize("000000010000000200BA7F0E07E4F11C0028003C00001807151010106742000000010C09081100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506".ToHexBytes()); + var jT808UploadLocationRequest = JT808Serializer.Deserialize("000000010000000200BA7F0E07E4F11C0028003C00001807151010106741000000010C091100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506".ToHexBytes()); jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_YueBiao_Constants.JT808_0X0200_0x67, out var value); JT808_0x0200_0x67 jT808_0X0200_0X67 = value as JT808_0x0200_0x67; Assert.Equal(1u, jT808_0X0200_0X67.AlarmId); @@ -73,10 +72,9 @@ namespace JT808.Protocol.Extensions.YueBiao.Test Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X67.AlarmIdentification.Time); Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X67.AlarmTime); Assert.Equal(7, jT808_0X0200_0X67.Altitude); - Assert.Equal(8, jT808_0X0200_0X67.AlarmLevel); Assert.Equal(9, jT808_0X0200_0X67.AlarmOrEventType); Assert.Equal(0x67, jT808_0X0200_0X67.AttachInfoId); - Assert.Equal(66, jT808_0X0200_0X67.AttachInfoLength); + Assert.Equal(65, jT808_0X0200_0X67.AttachInfoLength); Assert.Equal(12, jT808_0X0200_0X67.FlagState); Assert.Equal(13, jT808_0X0200_0X67.Latitude); Assert.Equal(14, jT808_0X0200_0X67.Longitude); @@ -86,7 +84,7 @@ namespace JT808.Protocol.Extensions.YueBiao.Test [Fact] public void Json() { - var json = JT808Serializer.Analyze("000000010000000200BA7F0E07E4F11C0028003C00001807151010106742000000010C09081100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506".ToHexBytes()); + var json = JT808Serializer.Analyze("000000010000000200BA7F0E07E4F11C0028003C00001807151010106741000000010C091100070000000D0000000E191211183100001334343434343434000000000000000000000000000000000000000000000019121018310003020506".ToHexBytes()); } } } diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x8103_0xF364_Test.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x8103_0xF364_Test.cs index 967c36b..aaf7b3e 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x8103_0xF364_Test.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x8103_0xF364_Test.cs @@ -43,7 +43,7 @@ namespace JT808.Protocol.Extensions.YueBiao.Test FrequentChannelChangeAlarmJudgmentTimePeriod=15, FrequentChannelChangeAlarmPhotos=16, FrequentLaneChangeAlarmInterval=17, - GradedSpeedThresholdLaneDeviationAlarm=18, + GradedSpeedThresholdLaneDepartureAlarm=18, HierarchicalSpeedThresholdForwardCollisionWarning=19, HierarchicalSpeedThresholdFrequentChannelChangeAlarm=20, HierarchicalSpeedThresholdObstacleAlarm=21, @@ -70,17 +70,27 @@ namespace JT808.Protocol.Extensions.YueBiao.Test VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm=42, VideoRecordingTimeBeforeAndAfterObstacleAlarm=43, VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm=44, - WarningVolume=45 + WarningVolume=45, + + CarriageAislePassengerDetectionAlarmClassificationSpeedThreshold=46, + VideoRecordingTimeBeforeAndAfterCarriageAislePassengerDetectionAlarm=47, + CarriageAislePassengerDetectionAlarmPhotographs=48, + CarriageAislePassengerDetectionAlarmPhotoInterval=49, + SolidLineChangeLanesAlarmClassificationSpeedThreshold=50, + VideoRecordingTimeBeforeAndAfterSolidLineChangeLanesAlarm=51, + SolidLineChangeLanesAlarmPhotographs=52, + SolidLineChangeLanesAlarmPhotoInterval=53 + } } }; var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); - Assert.Equal("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304", hex); + Assert.Equal("010000F36440052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A24252706072021323334352E2F303101020304", hex); } [Fact] public void Deserialize() { - var jT808UploadLocationRequest = JT808Serializer.Deserialize("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304".ToHexBytes()); + var jT808UploadLocationRequest = JT808Serializer.Deserialize("010000F36440052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A24252706072021323334352E2F303101020304".ToHexBytes()); JT808_0x8103_0xF364 jT808_0X8103_0XF364 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF364; Assert.Equal(1, jT808_0X8103_0XF364.ActiveDistancePhotographyDistanceInterval); Assert.Equal(2, jT808_0X8103_0XF364.ActivelyTimePhotoInterval); @@ -99,7 +109,7 @@ namespace JT808.Protocol.Extensions.YueBiao.Test Assert.Equal(15, jT808_0X8103_0XF364.FrequentChannelChangeAlarmJudgmentTimePeriod); Assert.Equal(16, jT808_0X8103_0XF364.FrequentChannelChangeAlarmPhotos); Assert.Equal(17, jT808_0X8103_0XF364.FrequentLaneChangeAlarmInterval); - Assert.Equal(18, jT808_0X8103_0XF364.GradedSpeedThresholdLaneDeviationAlarm); + Assert.Equal(18, jT808_0X8103_0XF364.GradedSpeedThresholdLaneDepartureAlarm); Assert.Equal(19, jT808_0X8103_0XF364.HierarchicalSpeedThresholdForwardCollisionWarning); Assert.Equal(20, jT808_0X8103_0XF364.HierarchicalSpeedThresholdFrequentChannelChangeAlarm); Assert.Equal(21, jT808_0X8103_0XF364.HierarchicalSpeedThresholdObstacleAlarm); @@ -127,13 +137,23 @@ namespace JT808.Protocol.Extensions.YueBiao.Test Assert.Equal(43, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterObstacleAlarm); Assert.Equal(44, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm); Assert.Equal(45, jT808_0X8103_0XF364.WarningVolume); + + Assert.Equal(46, jT808_0X8103_0XF364.CarriageAislePassengerDetectionAlarmClassificationSpeedThreshold); + Assert.Equal(47, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterCarriageAislePassengerDetectionAlarm); + Assert.Equal(48, jT808_0X8103_0XF364.CarriageAislePassengerDetectionAlarmPhotographs); + Assert.Equal(49, jT808_0X8103_0XF364.CarriageAislePassengerDetectionAlarmPhotoInterval); + + Assert.Equal(50, jT808_0X8103_0XF364.SolidLineChangeLanesAlarmClassificationSpeedThreshold); + Assert.Equal(51, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterSolidLineChangeLanesAlarm); + Assert.Equal(52, jT808_0X8103_0XF364.SolidLineChangeLanesAlarmPhotographs); + Assert.Equal(53, jT808_0X8103_0XF364.SolidLineChangeLanesAlarmPhotoInterval); Assert.Equal(JT808_YueBiao_Constants.JT808_0X8103_0xF364, jT808_0X8103_0XF364.ParamId); } [Fact] public void Json() { - var json = JT808Serializer.Analyze("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304".ToHexBytes()); + var json = JT808Serializer.Analyze("010000F36440052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A24252706072021323334352E2F303101020304".ToHexBytes()); } } } diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x8103_0xF365_Test.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x8103_0xF365_Test.cs index 305d9e4..335accd 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x8103_0xF365_Test.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao.Test/JT808_0x8103_0xF365_Test.cs @@ -49,6 +49,7 @@ namespace JT808.Protocol.Extensions.YueBiao.Test FatigueDrivingAlarmPhotograph=55, FatigueDrivingAlarmPhotographInterval=56, GradedSpeedThresholdFatigueDrivingAlarm=57, + PhotographsAbnormalDrivingBehavior=58, PictureIntervalAbnormalDrivingBehavior=59, Reserve=new byte[]{1,2,3 }, @@ -59,17 +60,42 @@ namespace JT808.Protocol.Extensions.YueBiao.Test VideoRecordingTimeAbnormalDrivingBehavior=63, VideoRecordingTimeBeforeAndAfterCallAlarm=64, VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm=65, - VideoRecordingTimeBeforeAndAfterSmokingAlarm=66 + VideoRecordingTimeBeforeAndAfterSmokingAlarm=66, + + ClassifiedSpeedThresholdCameraOcclusion=68, + + ClassifiedSpeedThresholdDoubleHanderOff=69, + VideoRecordingTimeDoubleHanderOff=70, + PhotographsDoubleHanderOff=71, + PictureIntervalDoubleHanderOff=72, + + ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure=73, + VideoRecordingTimeInfraredSunglassesBlockingFailure=74, + PhotographsInfraredSunglassesBlockingFailure=75, + PictureIntervalInfraredSunglassesBlockingFailure=76, + + ClassifiedSpeedThresholdNotBuckleUp=77, + VideoRecordingTimeNotBuckleUp=78, + PhotographsNotBuckleUp=79, + PictureIntervalNotBuckleUp=80, + + ClassifiedSpeedThresholdPlayMobile=81, + VideoRecordingTimePlayMobile=82, + PhotographsPlayMobile=83, + PictureIntervalPlayMobile=84, + + ClassifiedSpeedThresholdAbnormalDrivingBehavior=67, + VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm=85 } } }; var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); - Assert.Equal("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506", hex); + Assert.Equal("010000F36542052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D32553435433F3A3B36444D4E4F50494A4B4C45464748515253540506", hex); } [Fact] public void Deserialize() { - var jT808UploadLocationRequest = JT808Serializer.Deserialize("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506".ToHexBytes()); + var jT808UploadLocationRequest = JT808Serializer.Deserialize("010000F36542052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D32553435433F3A3B36444D4E4F50494A4B4C45464748515253540506".ToHexBytes()); JT808_0x8103_0xF365 jT808_0X8103_0XF365 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF365; Assert.Equal(1, jT808_0X8103_0XF365.ActiveDistancePhotographyDistanceInterval); Assert.Equal(2, jT808_0X8103_0XF365.ActivelyTimePhotoInterval); @@ -105,12 +131,37 @@ namespace JT808.Protocol.Extensions.YueBiao.Test Assert.Equal(64, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterCallAlarm); Assert.Equal(65, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm); Assert.Equal(66, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterSmokingAlarm); + + Assert.Equal(67, jT808_0X8103_0XF365.ClassifiedSpeedThresholdAbnormalDrivingBehavior); + Assert.Equal(68, jT808_0X8103_0XF365.ClassifiedSpeedThresholdCameraOcclusion); + Assert.Equal(85, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm); + + Assert.Equal(69, jT808_0X8103_0XF365.ClassifiedSpeedThresholdDoubleHanderOff); + Assert.Equal(70, jT808_0X8103_0XF365.VideoRecordingTimeDoubleHanderOff); + Assert.Equal(71, jT808_0X8103_0XF365.PhotographsDoubleHanderOff); + Assert.Equal(72, jT808_0X8103_0XF365.PictureIntervalDoubleHanderOff); + + Assert.Equal(73, jT808_0X8103_0XF365.ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure); + Assert.Equal(74, jT808_0X8103_0XF365.VideoRecordingTimeInfraredSunglassesBlockingFailure); + Assert.Equal(75, jT808_0X8103_0XF365.PhotographsInfraredSunglassesBlockingFailure); + Assert.Equal(76, jT808_0X8103_0XF365.PictureIntervalInfraredSunglassesBlockingFailure); + + Assert.Equal(77, jT808_0X8103_0XF365.ClassifiedSpeedThresholdNotBuckleUp); + Assert.Equal(78, jT808_0X8103_0XF365.VideoRecordingTimeNotBuckleUp); + Assert.Equal(79, jT808_0X8103_0XF365.PhotographsNotBuckleUp); + Assert.Equal(80, jT808_0X8103_0XF365.PictureIntervalNotBuckleUp); + + Assert.Equal(81, jT808_0X8103_0XF365.ClassifiedSpeedThresholdPlayMobile); + Assert.Equal(82, jT808_0X8103_0XF365.VideoRecordingTimePlayMobile); + Assert.Equal(83, jT808_0X8103_0XF365.PhotographsPlayMobile); + Assert.Equal(84, jT808_0X8103_0XF365.PictureIntervalPlayMobile); + Assert.Equal(JT808_YueBiao_Constants.JT808_0X8103_0xF365, jT808_0X8103_0XF365.ParamId); } [Fact] public void Json() { - var json = JT808Serializer.Analyze("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506".ToHexBytes()); + var json = JT808Serializer.Analyze("010000F36542052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D32553435433F3A3B36444D4E4F50494A4B4C45464748515253540506".ToHexBytes()); } } } diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/JT808.Protocol.Extensions.YueBiao.xml b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/JT808.Protocol.Extensions.YueBiao.xml index 7d9fbee..bc5393b 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/JT808.Protocol.Extensions.YueBiao.xml +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/JT808.Protocol.Extensions.YueBiao.xml @@ -307,6 +307,16 @@ 附加信息ID 盲区监测系统报警信息 + + + 附加信息ID 安装信息异常 + + + + + 附加信息ID 算法异常信息 + + 高级驾驶辅助系统参数设置 @@ -400,7 +410,7 @@ - 道路标志识别类型 + 道路标志识别数据 @@ -696,11 +706,6 @@ 报警/事件类型 - - - 报警/事件类型 - - 车速 @@ -762,6 +767,94 @@ + + + 安装异常信息 + + + + + 安装异常信息附件ID + + + + + 算法异常信息长度 + + + + + 厂家自定义 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 算法异常信息 + + + + + 算法异常信息附件ID + + + + + 算法异常信息长度 + + + + + 厂家自定义 + + + + + + + + + + + + + + + + + + + + + + + + + + 透传数据 @@ -1241,7 +1334,7 @@ 频繁变道报警拍照间隔 - + 车道偏离报警分级速度阈值 @@ -1313,12 +1406,12 @@ - 车距监控报警距离阈值 + 车距过近报警距离阈值 - 车距监控报警分级速度阈值 + 车距过近报警分级速度阈值 @@ -1346,6 +1439,46 @@ 道路标志识别拍照间隔 + + + 实线变道报警分级速度阈值 + + + + + 实线变道报警前后视频录制时间 + + + + + 实线变道报警拍照张数 + + + + + 实线变道报警拍照间隔 + + + + + 车厢过道行人检测报警分级速度阈值 + + + + + 车厢过道行人检测报警前后视频录制时间 + + + + + 车厢过道行人检测报警拍照张数 + + + + + 车厢过道行人检测报警拍照间隔 + + 保留字段 @@ -1522,17 +1655,27 @@ - 分神驾驶报警分级车速阈值 + 不目视前方报警分级车速阈值 + + + + + 不目视前方报警前后视频录制时间 - 分神驾驶报警拍照张数 + 不目视前方报警拍照张数 - 分神驾驶报警拍照间隔时间 + 不目视前方报警拍照间隔时间 + + + + + 驾驶行为异常分级车速阈值 @@ -1552,9 +1695,86 @@ - 驾驶员身份识别触发 + 驾驶员身份识别触发方式 + + + 摄像机遮挡报警分级车速阈值 + + + + + 不系安全带报警分级车速阈值 + + + + + 不系安全带报警前后视频录制时间 + + + + + 不系安全带报警抓拍照片张数 + + + + + 不系安全带报警拍照间隔 + + + + + 红外墨镜阻断失效报警分级车速阈值 + + + + + 红外墨镜阻断失效报警前后视频录制时间 + + + + + 红外墨镜阻断失效报警抓拍照片张数 + + + + + 红外墨镜阻断失效报警拍照间隔 + + + + + + 双脱把报警前后视频录制时间 + + + + + 双脱把报警抓拍照片张数 + + + + + 双脱把报警拍照间隔 + + + + + + 玩手机报警前后视频录制时间 + + + + + 玩手机报警抓拍照片张数 + + + + + 玩手机报警拍照间隔 + + 保留字段 diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/JT808_YueBiao_Constants.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/JT808_YueBiao_Constants.cs index 7a21693..518f3c2 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/JT808_YueBiao_Constants.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/JT808_YueBiao_Constants.cs @@ -26,6 +26,14 @@ namespace JT808.Protocol.Extensions.YueBiao /// public const byte JT808_0X0200_0x67 = 0x67; /// + /// 附加信息ID 安装信息异常 + /// + public const byte JT808_0X0200_0xF1 = 0xF1; + /// + /// 附加信息ID 算法异常信息 + /// + public const byte JT808_0X0200_0xF2 = 0xF2; + /// /// 高级驾驶辅助系统参数设置 /// public const uint JT808_0X8103_0xF364 = 0xF364; diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x64.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x64.cs index d348ba9..77defdd 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x64.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x64.cs @@ -56,7 +56,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody /// public byte RoadSignIdentificationType { get; set; } /// - /// 道路标志识别类型 + /// 道路标志识别数据 /// public byte RoadSignIdentificationData { get; set; } /// @@ -227,6 +227,14 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody { roadSignIdentificationType = "限重标志"; } + else if (value.RoadSignIdentificationType == 0x04) + { + roadSignIdentificationType = "禁行标志"; + } + else if (value.RoadSignIdentificationType == 0x05) + { + roadSignIdentificationType = "禁停标志"; + } writer.WriteNumber($"[{value.RoadSignIdentificationType.ReadNumber()}]道路标志识别类型-{roadSignIdentificationType}-{roadSignIdentificationTypeString}", value.RoadSignIdentificationType); value.RoadSignIdentificationData = reader.ReadByte(); writer.WriteNumber($"[{value.RoadSignIdentificationData.ReadNumber()}]道路标志识别数据", value.RoadSignIdentificationData); diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x66.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x66.cs index ecb54da..1aa513e 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x66.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x66.cs @@ -138,12 +138,6 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody value.AlarmIdentification.AttachCount = reader.ReadByte(); value.AlarmIdentification.Retain1 = reader.ReadByte(); value.AlarmIdentification.Retain2 = reader.ReadByte(); - writer.WriteString($"[{terminalIDHex}]终端ID", value.AlarmIdentification.TerminalId); - writer.WriteString($"[{value.AlarmIdentification.Time.ToString("yyMMddHHmmss")}]日期时间", value.AlarmIdentification.Time.ToString("yyyy-MM-dd HH:mm:ss")); - writer.WriteNumber($"[{value.AlarmIdentification.SN.ReadNumber()}]序号", value.AlarmIdentification.SN); - writer.WriteNumber($"[{value.AlarmIdentification.AttachCount.ReadNumber()}]附件数量", value.AlarmIdentification.AttachCount); - writer.WriteNumber($"[{value.AlarmIdentification.Retain1.ReadNumber()}]预留1", value.AlarmIdentification.Retain1); - writer.WriteNumber($"[{value.AlarmIdentification.Retain2.ReadNumber()}]预留2", value.AlarmIdentification.Retain2); value.AlarmOrEventCount = reader.ReadByte(); writer.WriteNumber($"[{value.AlarmOrEventCount.ReadNumber()}]报警_事件列表总数", value.AlarmOrEventCount); if (value.AlarmOrEventCount > 0) @@ -153,67 +147,29 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody { writer.WriteStartObject(); AlarmOrEventProperty item = new AlarmOrEventProperty(); - item.TirePressureAlarmPosition = reader.ReadByte(); + item.TirePressureAlarmPosition = reader.ReadUInt16(); writer.WriteNumber($"[{item.TirePressureAlarmPosition.ReadNumber()}]胎压报警位置", item.TirePressureAlarmPosition); item.AlarmOrEventType = reader.ReadUInt16(); - string alarmOrEventTypeString = ""; - switch (item.AlarmOrEventType) - { - case 0x01: - alarmOrEventTypeString = "前向碰撞报警"; - break; - case 0x02: - alarmOrEventTypeString = "车道偏离报警"; - break; - case 0x03: - alarmOrEventTypeString = "车距过近报警"; - break; - case 0x04: - alarmOrEventTypeString = "行人碰撞报警"; - break; - case 0x05: - alarmOrEventTypeString = "频繁变道报警"; - break; - case 0x06: - alarmOrEventTypeString = "道路标识超限报警"; - break; - case 0x07: - alarmOrEventTypeString = "障碍物报警"; - break; - case 0x08: - case 0x09: - case 0x0A: - case 0x0B: - case 0x0C: - case 0x0D: - case 0x0E: - case 0x0F: - alarmOrEventTypeString = "用户自定义"; - break; - case 0x10: - alarmOrEventTypeString = "道路标志识别事件"; - break; - case 0x11: - alarmOrEventTypeString = "主动抓拍事件"; - break; - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: - case 0x1A: - case 0x1B: - case 0x1C: - case 0x1D: - case 0x1E: - case 0x1F: - alarmOrEventTypeString = "用户自定义"; - break; - } - writer.WriteNumber($"[{item.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", item.AlarmOrEventType); + writer.WriteNumber($"[{item.AlarmOrEventType.ReadNumber()}]事件/报警类型", item.AlarmOrEventType); + var AlarmOrEventTypeBits = Convert.ToString(item.AlarmOrEventType, 2).PadLeft(16, '0'); + writer.WriteStartObject($"事件/报警类型[{AlarmOrEventTypeBits}]"); + writer.WriteString($"[{AlarmOrEventTypeBits[15]}]Bit0胎压(定时上报)", AlarmOrEventTypeBits[15] == '0' ? "无报警" : "有报警"); + writer.WriteString($"[{AlarmOrEventTypeBits[14]}]Bit1胎压过高报警", AlarmOrEventTypeBits[14] == '0' ? "无报警" : "有报警"); + writer.WriteString($"[{AlarmOrEventTypeBits[13]}]Bit2胎压过低报警", AlarmOrEventTypeBits[13] == '0' ? "无报警" : "有报警"); + writer.WriteString($"[{AlarmOrEventTypeBits[12]}]Bit3胎温过高报警", AlarmOrEventTypeBits[12] == '0' ? "无报警" : "有报警"); + writer.WriteString($"[{AlarmOrEventTypeBits[11]}]Bit4传感器异常报警", AlarmOrEventTypeBits[11] == '0' ? "无报警" : "有报警"); + writer.WriteString($"[{AlarmOrEventTypeBits[10]}]Bit5胎压不平衡报警", AlarmOrEventTypeBits[10] == '0' ? "无报警" : "有报警"); + writer.WriteString($"[{AlarmOrEventTypeBits[9]}]Bit6慢漏气报警", AlarmOrEventTypeBits[9] == '0' ? "无报警" : "有报警"); + writer.WriteString($"[{AlarmOrEventTypeBits[8]}]Bit7电池电量低报警", AlarmOrEventTypeBits[8] == '0' ? "无报警" : "有报警"); + writer.WriteString($"[{AlarmOrEventTypeBits[7]}]Bit8自定义", AlarmOrEventTypeBits[7].ToString()); + writer.WriteString($"[{AlarmOrEventTypeBits[6]}]Bit9自定义", AlarmOrEventTypeBits[6].ToString()); + writer.WriteString($"[{AlarmOrEventTypeBits[5]}]Bit10自定义", AlarmOrEventTypeBits[5].ToString()); + writer.WriteString($"[{AlarmOrEventTypeBits[4]}]Bit11自定义", AlarmOrEventTypeBits[4].ToString()); + writer.WriteString($"[{AlarmOrEventTypeBits[3]}]Bit12自定义", AlarmOrEventTypeBits[3].ToString()); + writer.WriteString($"[{AlarmOrEventTypeBits[2]}]Bit13自定义", AlarmOrEventTypeBits[2].ToString()); + writer.WriteString($"[{AlarmOrEventTypeBits[1]}]Bit14自定义", AlarmOrEventTypeBits[1].ToString()); + writer.WriteString($"[{AlarmOrEventTypeBits[0]}]Bit15自定义", AlarmOrEventTypeBits[0].ToString()); + writer.WriteEndObject(); item.TirePressure = reader.ReadUInt16(); writer.WriteNumber($"[{item.TirePressure.ReadNumber()}]胎压Kpa", item.TirePressure); item.TireTemperature = reader.ReadUInt16(); @@ -260,7 +216,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody for (int i = 0; i < value.AlarmOrEventCount; i++) { AlarmOrEventProperty alarmOrEventProperty = new AlarmOrEventProperty(); - alarmOrEventProperty.TirePressureAlarmPosition = reader.ReadByte(); + alarmOrEventProperty.TirePressureAlarmPosition = reader.ReadUInt16(); alarmOrEventProperty.AlarmOrEventType = reader.ReadUInt16(); alarmOrEventProperty.TirePressure = reader.ReadUInt16(); alarmOrEventProperty.TireTemperature = reader.ReadUInt16(); @@ -303,7 +259,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.WriteByte((byte)value.AlarmOrEvents.Count); foreach (var item in value.AlarmOrEvents) { - writer.WriteByte(item.TirePressureAlarmPosition); + writer.WriteUInt16(item.TirePressureAlarmPosition); writer.WriteUInt16(item.AlarmOrEventType); writer.WriteUInt16(item.TirePressure); writer.WriteUInt16(item.TireTemperature); diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x67.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x67.cs index a1dbec7..a727a21 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x67.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0x67.cs @@ -36,10 +36,6 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody /// public byte AlarmOrEventType{ get; set; } /// - /// 报警/事件类型 - /// - public byte AlarmLevel { get; set; } - /// /// 车速 /// public byte Speed { get; set; } @@ -104,72 +100,16 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody switch (value.AlarmOrEventType) { case 0x01: - alarmOrEventTypeString = "前向碰撞报警"; + alarmOrEventTypeString = "后方接近报警"; break; case 0x02: - alarmOrEventTypeString = "车道偏离报警"; + alarmOrEventTypeString = "左侧后方接近报警"; break; case 0x03: - alarmOrEventTypeString = "车距过近报警"; - break; - case 0x04: - alarmOrEventTypeString = "行人碰撞报警"; - break; - case 0x05: - alarmOrEventTypeString = "频繁变道报警"; - break; - case 0x06: - alarmOrEventTypeString = "道路标识超限报警"; - break; - case 0x07: - alarmOrEventTypeString = "障碍物报警"; - break; - case 0x08: - case 0x09: - case 0x0A: - case 0x0B: - case 0x0C: - case 0x0D: - case 0x0E: - case 0x0F: - alarmOrEventTypeString = "用户自定义"; - break; - case 0x10: - alarmOrEventTypeString = "道路标志识别事件"; - break; - case 0x11: - alarmOrEventTypeString = "主动抓拍事件"; - break; - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: - case 0x1A: - case 0x1B: - case 0x1C: - case 0x1D: - case 0x1E: - case 0x1F: - alarmOrEventTypeString = "用户自定义"; - break; - } - writer.WriteNumber($"[{value.AlarmOrEventType.ReadNumber()}]报警_事件类型-{alarmOrEventTypeString}", value.AlarmOrEventType); - value.AlarmLevel = reader.ReadByte(); - string alarmLevelString = "未知"; - switch (value.AlarmLevel) - { - case 0x01: - alarmLevelString = "一级报警"; - break; - case 0x02: - alarmLevelString = "二级报警"; + alarmOrEventTypeString = "右侧后方接近报警"; break; } - writer.WriteNumber($"[{value.AlarmLevel.ReadNumber()}]报警级别-{alarmLevelString}", value.AlarmLevel); + writer.WriteString($"[{value.AlarmOrEventType.ReadNumber()}]报警_事件类型", alarmOrEventTypeString); value.Speed = reader.ReadByte(); writer.WriteNumber($"[{value.Speed.ReadNumber()}]车速", value.Speed); value.Altitude = reader.ReadUInt16(); @@ -230,7 +170,6 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody value.AlarmId = reader.ReadUInt32(); value.FlagState = reader.ReadByte(); value.AlarmOrEventType = reader.ReadByte(); - value.AlarmLevel = reader.ReadByte(); value.Speed = reader.ReadByte(); value.Altitude = reader.ReadUInt16(); value.Latitude = (int)reader.ReadUInt32(); @@ -261,7 +200,6 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.WriteUInt32(value.AlarmId); writer.WriteByte(value.FlagState); writer.WriteByte(value.AlarmOrEventType); - writer.WriteByte(value.AlarmLevel); writer.WriteByte(value.Speed); writer.WriteUInt16(value.Altitude); writer.WriteUInt32((uint)value.Latitude); diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0xF1.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0xF1.cs new file mode 100644 index 0000000..2582c97 --- /dev/null +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0xF1.cs @@ -0,0 +1,73 @@ +using JT808.Protocol.Extensions.YueBiao.Metadata; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessageBody; +using JT808.Protocol.MessagePack; +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; + +namespace JT808.Protocol.Extensions.YueBiao.MessageBody +{ + /// + /// 安装异常信息 + /// + public class JT808_0x0200_0xF1 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version + { + /// + /// 安装异常信息附件ID + /// + public override byte AttachInfoId { get; set; } = JT808_YueBiao_Constants.JT808_0X0200_0xF1; + /// + /// 算法异常信息长度 + /// + public override byte AttachInfoLength { get; set; } = 4; + /// + /// 厂家自定义 + /// + public uint Retain { get; set; } + /// + /// + /// + /// + /// + /// + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x0200_0xF1 value = new JT808_0x0200_0xF1(); + value.AttachInfoId = reader.ReadByte(); + writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); + value.AttachInfoLength = reader.ReadByte(); + writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); + value.Retain = reader.ReadUInt32(); + writer.WriteNumber($"[{value.Retain.ReadNumber()}]厂家自定义", value.Retain); + } + /// + /// + /// + /// + /// + /// + public JT808_0x0200_0xF1 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + { + JT808_0x0200_0xF1 value = new JT808_0x0200_0xF1(); + value.AttachInfoId = reader.ReadByte(); + value.AttachInfoLength = reader.ReadByte(); + value.Retain = reader.ReadUInt32(); + return value; + } + /// + /// + /// + /// + /// + /// + public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0xF1 value, IJT808Config config) + { + writer.WriteByte(value.AttachInfoId); + writer.WriteByte(value.AttachInfoLength); + writer.WriteUInt32(value.Retain); + } + } +} diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0xF2.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0xF2.cs new file mode 100644 index 0000000..43c4263 --- /dev/null +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0200_0xF2.cs @@ -0,0 +1,73 @@ +using JT808.Protocol.Extensions.YueBiao.Metadata; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessageBody; +using JT808.Protocol.MessagePack; +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; + +namespace JT808.Protocol.Extensions.YueBiao.MessageBody +{ + /// + /// 算法异常信息 + /// + public class JT808_0x0200_0xF2 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version + { + /// + /// 算法异常信息附件ID + /// + public override byte AttachInfoId { get; set; } = JT808_YueBiao_Constants.JT808_0X0200_0xF2; + /// + /// 算法异常信息长度 + /// + public override byte AttachInfoLength { get; set; } = 4; + /// + /// 厂家自定义 + /// + public uint Retain { get; set; } + /// + /// + /// + /// + /// + /// + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x0200_0xF2 value = new JT808_0x0200_0xF2(); + value.AttachInfoId = reader.ReadByte(); + writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); + value.AttachInfoLength = reader.ReadByte(); + writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); + value.Retain = reader.ReadUInt32(); + writer.WriteNumber($"[{value.Retain.ReadNumber()}]厂家自定义", value.Retain); + } + /// + /// + /// + /// + /// + /// + public JT808_0x0200_0xF2 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + { + JT808_0x0200_0xF2 value = new JT808_0x0200_0xF2(); + value.AttachInfoId = reader.ReadByte(); + value.AttachInfoLength = reader.ReadByte(); + value.Retain = reader.ReadUInt32(); + return value; + } + /// + /// + /// + /// + /// + /// + public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0xF2 value, IJT808Config config) + { + writer.WriteByte(value.AttachInfoId); + writer.WriteByte(value.AttachInfoLength); + writer.WriteUInt32(value.Retain); + } + } +} diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0900_0xF7.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0900_0xF7.cs index 3e1e6b4..d79615b 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0900_0xF7.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0900_0xF7.cs @@ -6,6 +6,7 @@ using JT808.Protocol.MessageBody; using JT808.Protocol.MessagePack; using System; using System.Collections.Generic; +using System.Linq; using System.Text; using System.Text.Json; @@ -55,7 +56,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.WriteNumber($"[{item.WorkingCondition.ReadNumber()}]工作状态-{workingCondition.ToString()}", item.WorkingCondition); item.AlarmStatus = reader.ReadUInt32(); writer.WriteNumber($"[{item.AlarmStatus.ReadNumber()}]报警状态", item.AlarmStatus); - var alarmStatusBits = Convert.ToString(item.AlarmStatus, 2).PadLeft(32, '0').AsSpan(); + var alarmStatusBits = Convert.ToString(item.AlarmStatus, 2).PadLeft(32, '0').Reverse().ToArray().AsSpan(); writer.WriteStartObject($"报警状态对象[{alarmStatusBits.ToString()}]"); writer.WriteString($"[bit12~bit31]预留", alarmStatusBits.Slice(12).ToString()); writer.WriteString($"]bit11]定位模块异常", alarmStatusBits[11].ToString()); diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0900_0xF8.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0900_0xF8.cs index a8fbd49..18ff27a 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0900_0xF8.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x0900_0xF8.cs @@ -111,17 +111,17 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody item.USBID = reader.ReadByte(); item.MessageLength = reader.ReadByte(); item.CompantNameLength = reader.ReadByte(); - item.CompantName = reader.ReadString(item.CompantNameLength); + item.CompantName = reader.ReadASCII(item.CompantNameLength); item.ProductModelLength = reader.ReadByte(); - item.ProductModel = reader.ReadString(item.ProductModelLength); + item.ProductModel = reader.ReadASCII(item.ProductModelLength); item.HardwareVersionNumberLength = reader.ReadByte(); - item.HardwareVersionNumber = reader.ReadString(item.HardwareVersionNumberLength); + item.HardwareVersionNumber = reader.ReadASCII(item.HardwareVersionNumberLength); item.SoftwareVersionNumberLength = reader.ReadByte(); - item.SoftwareVersionNumber = reader.ReadString(item.SoftwareVersionNumberLength); + item.SoftwareVersionNumber = reader.ReadASCII(item.SoftwareVersionNumberLength); item.DevicesIDLength = reader.ReadByte(); - item.DevicesID = reader.ReadString(item.DevicesIDLength); + item.DevicesID = reader.ReadASCII(item.DevicesIDLength); item.CustomerCodeLength = reader.ReadByte(); - item.CustomerCode = reader.ReadString(item.CustomerCodeLength); + item.CustomerCode = reader.ReadASCII(item.CustomerCodeLength); value.USBMessages.Add(item); } } @@ -144,27 +144,27 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.Skip(1,out int messageLengthPosition); writer.Skip(1, out int CompantNameLengthPosition); - writer.WriteString(item.CompantName); + writer.WriteASCII(item.CompantName); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - CompantNameLengthPosition - 1), CompantNameLengthPosition); writer.Skip(1, out int ProductModelLengthPosition); - writer.WriteString(item.ProductModel); + writer.WriteASCII(item.ProductModel); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ProductModelLengthPosition - 1), ProductModelLengthPosition); writer.Skip(1, out int HardwareVersionNumberLengthPosition); - writer.WriteString(item.HardwareVersionNumber); + writer.WriteASCII(item.HardwareVersionNumber); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - HardwareVersionNumberLengthPosition - 1), HardwareVersionNumberLengthPosition); writer.Skip(1, out int SoftwareVersionNumberLengthPosition); - writer.WriteString(item.SoftwareVersionNumber); + writer.WriteASCII(item.SoftwareVersionNumber); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - SoftwareVersionNumberLengthPosition - 1), SoftwareVersionNumberLengthPosition); writer.Skip(1, out int DevicesIDLengthPosition); - writer.WriteString(item.DevicesID); + writer.WriteASCII(item.DevicesID); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - DevicesIDLengthPosition - 1), DevicesIDLengthPosition); writer.Skip(1, out int CustomerCodeLengthPosition); - writer.WriteString(item.CustomerCode); + writer.WriteASCII(item.CustomerCode); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - CustomerCodeLengthPosition - 1), CustomerCodeLengthPosition); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - messageLengthPosition - 1), messageLengthPosition); diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF364.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF364.cs index fdb445f..74f600f 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF364.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF364.cs @@ -4,6 +4,7 @@ using JT808.Protocol.Interfaces; using JT808.Protocol.MessageBody; using JT808.Protocol.MessagePack; using System; +using System.Linq; using System.Text.Json; namespace JT808.Protocol.Extensions.YueBiao.MessageBody @@ -119,7 +120,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody /// /// 车道偏离报警分级速度阈值 /// - public byte GradedSpeedThresholdLaneDeviationAlarm { get; set; } + public byte GradedSpeedThresholdLaneDepartureAlarm { get; set; } /// /// 车道偏离报警前后视频录制时间 /// @@ -173,11 +174,11 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody /// public byte PedestrianCollisionAlarmInterval { get; set; } /// - /// 车距监控报警距离阈值 + /// 车距过近报警距离阈值 /// public byte VehicleDistanceMonitoringAlarmDistanceThreshold { get; set; } /// - /// 车距监控报警分级速度阈值 + /// 车距过近报警分级速度阈值 /// public byte VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold { get; set; } /// @@ -201,6 +202,38 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody /// public byte RoadSignRecognitionPhotographsInterval { get; set; } /// + /// 实线变道报警分级速度阈值 + /// + public byte SolidLineChangeLanesAlarmClassificationSpeedThreshold { get; set; } + /// + /// 实线变道报警前后视频录制时间 + /// + public byte VideoRecordingTimeBeforeAndAfterSolidLineChangeLanesAlarm { get; set; } + /// + /// 实线变道报警拍照张数 + /// + public byte SolidLineChangeLanesAlarmPhotographs { get; set; } + /// + /// 实线变道报警拍照间隔 + /// + public byte SolidLineChangeLanesAlarmPhotoInterval { get; set; } + /// + /// 车厢过道行人检测报警分级速度阈值 + /// + public byte CarriageAislePassengerDetectionAlarmClassificationSpeedThreshold { get; set; } + /// + /// 车厢过道行人检测报警前后视频录制时间 + /// + public byte VideoRecordingTimeBeforeAndAfterCarriageAislePassengerDetectionAlarm { get; set; } + /// + /// 车厢过道行人检测报警拍照张数 + /// + public byte CarriageAislePassengerDetectionAlarmPhotographs { get; set; } + /// + /// 车厢过道行人检测报警拍照间隔 + /// + public byte CarriageAislePassengerDetectionAlarmPhotoInterval { get; set; } + /// /// 保留字段 /// public byte[] Placeholder2 { get; set; } = new byte[4]; @@ -240,12 +273,15 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody 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("报警使能对象"); + var alarmEnableBits = Convert.ToString(value.AlarmEnable, 2).PadLeft(32, '0').Reverse().ToArray().AsSpan(); + writer.WriteStartObject($"报警使能对象[{alarmEnableBits.ToString()}]"); writer.WriteString("[bit30~bit31]预留", alarmEnableBits.Slice(30,2).ToString()); - writer.WriteString("[bit17~bit29]用户自定义", alarmEnableBits.Slice(17, 13).ToString()); + writer.WriteString("[bit20~bit29]用户自定义", alarmEnableBits.Slice(20, 10).ToString()); + writer.WriteString("[bit19]车厢过道行人检测", alarmEnableBits[19] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit18]实线变道二级报警", alarmEnableBits[18] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit17]实线变道一级报警", alarmEnableBits[17] == '0' ? "关闭" : "打开"); writer.WriteString("[bit16]道路标识超限报警", alarmEnableBits[16]=='0'?"关闭":"打开"); - writer.WriteString("[bit12~bit15]道路标识超限报警", alarmEnableBits.Slice(12, 4).ToString()); + 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' ? "关闭" : "打开"); @@ -261,12 +297,12 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody 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("事件使能对象"); + var eventEnableBits = Convert.ToString(value.EventEnable, 2).PadLeft(32, '0').Reverse().ToArray().AsSpan(); + writer.WriteStartObject($"事件使能对象[{eventEnableBits.ToString()}]"); 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.WriteString("[bit1]主动拍照", eventEnableBits[1] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit0]道路标识识别", eventEnableBits[0] == '0' ? "关闭" : "打开"); writer.WriteEndObject(); value.Placeholder1 = reader.ReadByte(); writer.WriteNumber($"[{value.Placeholder1.ReadNumber()}]预留字段", value.Placeholder1); @@ -292,8 +328,8 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody 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.GradedSpeedThresholdLaneDepartureAlarm = reader.ReadByte(); + writer.WriteNumber($"[{value.GradedSpeedThresholdLaneDepartureAlarm.ReadNumber()}]车道偏离报警分级速度阈值", value.GradedSpeedThresholdLaneDepartureAlarm); value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm = reader.ReadByte(); writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm.ReadNumber()}]车道偏离报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm); value.LaneDepartureAlarmPhoto = reader.ReadByte(); @@ -321,9 +357,9 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody value.PedestrianCollisionAlarmInterval = reader.ReadByte(); writer.WriteNumber($"[{value.PedestrianCollisionAlarmInterval.ReadNumber()}]行人碰撞报警拍照间隔", value.PedestrianCollisionAlarmInterval); value.VehicleDistanceMonitoringAlarmDistanceThreshold = reader.ReadByte(); - writer.WriteNumber($"[{value.VehicleDistanceMonitoringAlarmDistanceThreshold.ReadNumber()}]车距监控报警距离阈值", value.VehicleDistanceMonitoringAlarmDistanceThreshold); + writer.WriteNumber($"[{value.VehicleDistanceMonitoringAlarmDistanceThreshold.ReadNumber()}]车距过近报警距离阈值", value.VehicleDistanceMonitoringAlarmDistanceThreshold); value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold = reader.ReadByte(); - writer.WriteNumber($"[{value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold.ReadNumber()}]车距监控报警分级速度阈值", value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold); + writer.WriteNumber($"[{value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold.ReadNumber()}]车距过近报警分级速度阈值", value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold); value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity = reader.ReadByte(); writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity.ReadNumber()}]车距过近报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity); value.AlarmPhotoVehicleCloseDistance = reader.ReadByte(); @@ -334,6 +370,24 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.WriteNumber($"[{value.RoadSignRecognitionPhotographs.ReadNumber()}]道路标志识别拍照张数", value.RoadSignRecognitionPhotographs); value.RoadSignRecognitionPhotographsInterval = reader.ReadByte(); writer.WriteNumber($"[{value.RoadSignRecognitionPhotographsInterval.ReadNumber()}]道路标志识别拍照间隔", value.RoadSignRecognitionPhotographsInterval); + //实线变道报警 + value.SolidLineChangeLanesAlarmClassificationSpeedThreshold = reader.ReadByte(); + writer.WriteNumber($"[{value.SolidLineChangeLanesAlarmClassificationSpeedThreshold.ReadNumber()}]实线变道报警分级速度阈值", value.SolidLineChangeLanesAlarmClassificationSpeedThreshold); + value.VideoRecordingTimeBeforeAndAfterSolidLineChangeLanesAlarm = reader.ReadByte(); + writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterSolidLineChangeLanesAlarm.ReadNumber()}]实线变道报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterSolidLineChangeLanesAlarm); + value.SolidLineChangeLanesAlarmPhotographs = reader.ReadByte(); + writer.WriteNumber($"[{value.SolidLineChangeLanesAlarmPhotographs.ReadNumber()}]实线变道报警拍照张数", value.SolidLineChangeLanesAlarmPhotographs); + value.SolidLineChangeLanesAlarmPhotoInterval = reader.ReadByte(); + writer.WriteNumber($"[{value.SolidLineChangeLanesAlarmPhotoInterval.ReadNumber()}]实线变道报警拍照间隔", value.SolidLineChangeLanesAlarmPhotoInterval); + //车厢过道行人检测报警 + value.CarriageAislePassengerDetectionAlarmClassificationSpeedThreshold = reader.ReadByte(); + writer.WriteNumber($"[{value.CarriageAislePassengerDetectionAlarmClassificationSpeedThreshold.ReadNumber()}]车厢过道行人检测报警分级速度阈值", value.CarriageAislePassengerDetectionAlarmClassificationSpeedThreshold); + value.VideoRecordingTimeBeforeAndAfterCarriageAislePassengerDetectionAlarm = reader.ReadByte(); + writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterCarriageAislePassengerDetectionAlarm.ReadNumber()}]车厢过道行人检测报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterCarriageAislePassengerDetectionAlarm); + value.CarriageAislePassengerDetectionAlarmPhotographs = reader.ReadByte(); + writer.WriteNumber($"[{value.CarriageAislePassengerDetectionAlarmPhotographs.ReadNumber()}]车厢过道行人检测报警拍照张数", value.CarriageAislePassengerDetectionAlarmPhotographs); + value.CarriageAislePassengerDetectionAlarmPhotoInterval = reader.ReadByte(); + writer.WriteNumber($"[{value.CarriageAislePassengerDetectionAlarmPhotoInterval.ReadNumber()}]车厢过道行人检测报警拍照间隔", value.CarriageAislePassengerDetectionAlarmPhotoInterval); value.Placeholder2 = reader.ReadArray(4).ToArray(); writer.WriteString("保留字段", value.Placeholder2.ToHexString()); } @@ -371,7 +425,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm = reader.ReadByte(); value.FrequentChannelChangeAlarmPhotos = reader.ReadByte(); value.FrequentLaneChangeAlarmInterval = reader.ReadByte(); - value.GradedSpeedThresholdLaneDeviationAlarm = reader.ReadByte(); + value.GradedSpeedThresholdLaneDepartureAlarm = reader.ReadByte(); value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm = reader.ReadByte(); value.LaneDepartureAlarmPhoto = reader.ReadByte(); value.LaneDepartureAlarmPhotoInterval = reader.ReadByte(); @@ -392,6 +446,17 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody value.AlarmPhotoVehicleCloseDistanceInterval = reader.ReadByte(); value.RoadSignRecognitionPhotographs = reader.ReadByte(); value.RoadSignRecognitionPhotographsInterval = reader.ReadByte(); + + value.SolidLineChangeLanesAlarmClassificationSpeedThreshold = reader.ReadByte(); + value.VideoRecordingTimeBeforeAndAfterSolidLineChangeLanesAlarm = reader.ReadByte(); + value.SolidLineChangeLanesAlarmPhotographs = reader.ReadByte(); + value.SolidLineChangeLanesAlarmPhotoInterval = reader.ReadByte(); + + value.CarriageAislePassengerDetectionAlarmClassificationSpeedThreshold = reader.ReadByte(); + value.VideoRecordingTimeBeforeAndAfterCarriageAislePassengerDetectionAlarm = reader.ReadByte(); + value.CarriageAislePassengerDetectionAlarmPhotographs = reader.ReadByte(); + value.CarriageAislePassengerDetectionAlarmPhotoInterval = reader.ReadByte(); + value.Placeholder2 = reader.ReadArray(4).ToArray(); return value; } @@ -428,7 +493,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm); writer.WriteByte(value.FrequentChannelChangeAlarmPhotos); writer.WriteByte(value.FrequentLaneChangeAlarmInterval); - writer.WriteByte(value.GradedSpeedThresholdLaneDeviationAlarm); + writer.WriteByte(value.GradedSpeedThresholdLaneDepartureAlarm); writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm); writer.WriteByte(value.LaneDepartureAlarmPhoto); writer.WriteByte(value.LaneDepartureAlarmPhotoInterval); @@ -449,6 +514,14 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.WriteByte(value.AlarmPhotoVehicleCloseDistanceInterval); writer.WriteByte(value.RoadSignRecognitionPhotographs); writer.WriteByte(value.RoadSignRecognitionPhotographsInterval); + writer.WriteByte(value.SolidLineChangeLanesAlarmClassificationSpeedThreshold); + writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterSolidLineChangeLanesAlarm); + writer.WriteByte(value.SolidLineChangeLanesAlarmPhotographs); + writer.WriteByte(value.SolidLineChangeLanesAlarmPhotoInterval); + writer.WriteByte(value.CarriageAislePassengerDetectionAlarmClassificationSpeedThreshold); + writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterCarriageAislePassengerDetectionAlarm); + writer.WriteByte(value.CarriageAislePassengerDetectionAlarmPhotographs); + writer.WriteByte(value.CarriageAislePassengerDetectionAlarmPhotoInterval); writer.WriteArray(value.Placeholder2); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition); } diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF365.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF365.cs index d40729a..850d138 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF365.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF365.cs @@ -4,6 +4,7 @@ using JT808.Protocol.Interfaces; using JT808.Protocol.MessageBody; using JT808.Protocol.MessagePack; using System; +using System.Linq; using System.Text.Json; namespace JT808.Protocol.Extensions.YueBiao.MessageBody @@ -126,18 +127,26 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody /// public byte SmokingAlarmPhotographsDriverFaceCharacteristicsInterval { get; set; } /// - /// 分神驾驶报警分级车速阈值 + /// 不目视前方报警分级车速阈值 /// public byte ClassifiedSpeedThresholdDistractedDrivingAlarm { get; set; } /// - /// 分神驾驶报警拍照张数 + /// 不目视前方报警前后视频录制时间 + /// + public byte VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm { get; set; } + /// + /// 不目视前方报警拍照张数 /// public byte DistractedDrivingAlarmPhotography{ get; set; } /// - /// 分神驾驶报警拍照间隔时间 + /// 不目视前方报警拍照间隔时间 /// public byte DistractedDrivingAlarmPhotographyInterval { get; set; } /// + /// 驾驶行为异常分级车速阈值 + /// + public byte ClassifiedSpeedThresholdAbnormalDrivingBehavior { get; set; } + /// /// 驾驶行为异常视频录制时间 /// public byte VideoRecordingTimeAbnormalDrivingBehavior{ get; set; } @@ -150,10 +159,77 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody /// public byte PictureIntervalAbnormalDrivingBehavior{ get; set; } /// - /// 驾驶员身份识别触发 + /// 驾驶员身份识别触发方式 /// public byte DriverIdentificationTrigger { get; set; } /// + /// 摄像机遮挡报警分级车速阈值 + /// + public byte ClassifiedSpeedThresholdCameraOcclusion { get; set; } + + /// + /// 不系安全带报警分级车速阈值 + /// + public byte ClassifiedSpeedThresholdNotBuckleUp { get; set; } + /// + /// 不系安全带报警前后视频录制时间 + /// + public byte VideoRecordingTimeNotBuckleUp { get; set; } + /// + /// 不系安全带报警抓拍照片张数 + /// + public byte PhotographsNotBuckleUp { get; set; } + /// + ///不系安全带报警拍照间隔 + /// + public byte PictureIntervalNotBuckleUp { get; set; } + /// + /// 红外墨镜阻断失效报警分级车速阈值 + /// + public byte ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure { get; set; } + /// + /// 红外墨镜阻断失效报警前后视频录制时间 + /// + public byte VideoRecordingTimeInfraredSunglassesBlockingFailure { get; set; } + /// + /// 红外墨镜阻断失效报警抓拍照片张数 + /// + public byte PhotographsInfraredSunglassesBlockingFailure { get; set; } + /// + ///红外墨镜阻断失效报警拍照间隔 + /// + public byte PictureIntervalInfraredSunglassesBlockingFailure { get; set; } + /// 双脱把报警分级车速阈值 + /// + public byte ClassifiedSpeedThresholdDoubleHanderOff { get; set; } + /// + /// 双脱把报警前后视频录制时间 + /// + public byte VideoRecordingTimeDoubleHanderOff { get; set; } + /// + /// 双脱把报警抓拍照片张数 + /// + public byte PhotographsDoubleHanderOff { get; set; } + /// + ///双脱把报警拍照间隔 + /// + public byte PictureIntervalDoubleHanderOff { get; set; } + ///玩手机报警分级车速阈值 + /// + public byte ClassifiedSpeedThresholdPlayMobile { get; set; } + /// + /// 玩手机报警前后视频录制时间 + /// + public byte VideoRecordingTimePlayMobile { get; set; } + /// + /// 玩手机报警抓拍照片张数 + /// + public byte PhotographsPlayMobile { get; set; } + /// + ///玩手机报警拍照间隔 + /// + public byte PictureIntervalPlayMobile { get; set; } + /// /// 保留字段 /// public byte[] Retain { get; set; } = new byte[2]; @@ -193,33 +269,39 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody 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' ? "关闭" : "打开"); + var alarmEnableBits = Convert.ToString(value.AlarmEnable, 2).PadLeft(32, '0').Reverse().ToArray().AsSpan(); + writer.WriteStartObject($"报警使能对象[{alarmEnableBits.ToString()}]"); + writer.WriteString("[bit30~bit31]保留", alarmEnableBits.Slice(30, 2).ToString()); + writer.WriteString("[bit20~bit29]用户自定义", alarmEnableBits.Slice(20, 10).ToString()); + writer.WriteString("[bit19]玩手机二级报警", alarmEnableBits[19] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit18]玩手机一级报警", alarmEnableBits[18] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit17]双脱把二级报警(双手同时脱离方向盘)", alarmEnableBits[17] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit16]双脱把一级报警(双手同时脱离方向盘)", alarmEnableBits[16] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit15]红外墨镜阻断失效二级报警", alarmEnableBits[15] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit14]红外墨镜阻断失效一级报警", alarmEnableBits[14] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit13]不系安全带二级报警", alarmEnableBits[13] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit12]不系安全带一级报警", alarmEnableBits[12] == '0' ? "关闭" : "打开"); + 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("事件使能对象"); + var eventEnableBits = Convert.ToString(value.EventEnable, 2).PadLeft(32, '0').Reverse().ToArray().AsSpan(); + writer.WriteStartObject($"事件使能对象[{eventEnableBits.ToString()}]"); 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.WriteString("[bit2~bit29]用户自定义", eventEnableBits.Slice(2, 28).ToString()); + writer.WriteString("[bit1]主动拍照事件", eventEnableBits[1] == '0' ? "关闭" : "打开"); + writer.WriteString("[bit0]驾驶员变更事件", eventEnableBits[0] == '0' ? "关闭" : "打开"); writer.WriteEndObject(); value.TimeIntervalSmokingAlarmJudgment = reader.ReadUInt16(); writer.WriteNumber($"[{value.TimeIntervalSmokingAlarmJudgment.ReadNumber()}]吸烟报警判断时间间隔", value.TimeIntervalSmokingAlarmJudgment); @@ -253,10 +335,14 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.WriteNumber($"[{value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval.ReadNumber()}]抽烟报警拍驾驶员面部特征照片间隔时间", value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval); value.ClassifiedSpeedThresholdDistractedDrivingAlarm = reader.ReadByte(); writer.WriteNumber($"[{value.ClassifiedSpeedThresholdDistractedDrivingAlarm.ReadNumber()}]分神驾驶报警分级车速阈值", value.ClassifiedSpeedThresholdDistractedDrivingAlarm); + value.VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm = reader.ReadByte(); + writer.WriteNumber($"[{value.VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm.ReadNumber()}]不目视前方报警前后视频录制时间", value.VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm); value.DistractedDrivingAlarmPhotography = reader.ReadByte(); writer.WriteNumber($"[{value.DistractedDrivingAlarmPhotography.ReadNumber()}]分神驾驶报警拍照张数", value.DistractedDrivingAlarmPhotography); value.DistractedDrivingAlarmPhotographyInterval = reader.ReadByte(); writer.WriteNumber($"[{value.DistractedDrivingAlarmPhotographyInterval.ReadNumber()}]分神驾驶报警拍照间隔时间", value.DistractedDrivingAlarmPhotographyInterval); + value.ClassifiedSpeedThresholdAbnormalDrivingBehavior = reader.ReadByte(); + writer.WriteNumber($"[{value.ClassifiedSpeedThresholdAbnormalDrivingBehavior.ReadNumber()}]驾驶行为异常分级车速阈值", value.ClassifiedSpeedThresholdAbnormalDrivingBehavior); value.VideoRecordingTimeAbnormalDrivingBehavior = reader.ReadByte(); writer.WriteNumber($"[{value.VideoRecordingTimeAbnormalDrivingBehavior.ReadNumber()}]驾驶行为异常视频录制时间", value.VideoRecordingTimeAbnormalDrivingBehavior); value.PhotographsAbnormalDrivingBehavior = reader.ReadByte(); @@ -264,7 +350,46 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody value.PictureIntervalAbnormalDrivingBehavior = reader.ReadByte(); writer.WriteNumber($"[{value.PictureIntervalAbnormalDrivingBehavior.ReadNumber()}]驾驶行为异常拍照间隔", value.PictureIntervalAbnormalDrivingBehavior); value.DriverIdentificationTrigger = reader.ReadByte(); - writer.WriteNumber($"[{value.DriverIdentificationTrigger.ReadNumber()}]驾驶员身份识别触发", value.DriverIdentificationTrigger); + writer.WriteNumber($"[{value.DriverIdentificationTrigger.ReadNumber()}]驾驶员身份识别触发方式", value.DriverIdentificationTrigger); + value.ClassifiedSpeedThresholdCameraOcclusion = reader.ReadByte(); + writer.WriteNumber($"[{value.ClassifiedSpeedThresholdCameraOcclusion.ReadNumber()}]摄像机遮挡报警分级速度阈值", value.ClassifiedSpeedThresholdCameraOcclusion); + //不系安全带报警 + value.ClassifiedSpeedThresholdNotBuckleUp = reader.ReadByte(); + writer.WriteNumber($"[{value.ClassifiedSpeedThresholdNotBuckleUp.ReadNumber()}]不系安全带报警拍照间隔", value.ClassifiedSpeedThresholdNotBuckleUp); + value.VideoRecordingTimeNotBuckleUp = reader.ReadByte(); + writer.WriteNumber($"[{value.VideoRecordingTimeNotBuckleUp.ReadNumber()}]不系安全带报警前后视频录制时间", value.VideoRecordingTimeNotBuckleUp); + value.PhotographsNotBuckleUp = reader.ReadByte(); + writer.WriteNumber($"[{value.PhotographsNotBuckleUp.ReadNumber()}]不系安全带报警抓拍照片张数", value.PhotographsNotBuckleUp); + value.PictureIntervalNotBuckleUp = reader.ReadByte(); + writer.WriteNumber($"[{value.PictureIntervalNotBuckleUp.ReadNumber()}]不系安全带报警拍照间隔", value.PictureIntervalNotBuckleUp); + //红外墨镜阻断失效报警 + value.ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure = reader.ReadByte(); + writer.WriteNumber($"[{value.ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure.ReadNumber()}]红外墨镜阻断失效报警分级车速阈值", value.ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure); + value.VideoRecordingTimeInfraredSunglassesBlockingFailure = reader.ReadByte(); + writer.WriteNumber($"[{value.VideoRecordingTimeInfraredSunglassesBlockingFailure.ReadNumber()}]红外墨镜阻断失效报警前后视频录制时间", value.VideoRecordingTimeInfraredSunglassesBlockingFailure); + value.PhotographsInfraredSunglassesBlockingFailure = reader.ReadByte(); + writer.WriteNumber($"[{value.PhotographsInfraredSunglassesBlockingFailure.ReadNumber()}]红外墨镜阻断失效报警抓拍照片张数", value.PhotographsInfraredSunglassesBlockingFailure); + value.PictureIntervalInfraredSunglassesBlockingFailure = reader.ReadByte(); + writer.WriteNumber($"[{value.PictureIntervalInfraredSunglassesBlockingFailure.ReadNumber()}]红外墨镜阻断失效报警拍照间隔", value.PictureIntervalInfraredSunglassesBlockingFailure); + //双脱把报警 + value.ClassifiedSpeedThresholdDoubleHanderOff = reader.ReadByte(); + writer.WriteNumber($"[{value.ClassifiedSpeedThresholdDoubleHanderOff.ReadNumber()}]双脱把报警分级车速阈值", value.ClassifiedSpeedThresholdDoubleHanderOff); + value.VideoRecordingTimeDoubleHanderOff = reader.ReadByte(); + writer.WriteNumber($"[{value.VideoRecordingTimeDoubleHanderOff.ReadNumber()}]双脱把报警前后视频录制时间", value.VideoRecordingTimeDoubleHanderOff); + value.PhotographsDoubleHanderOff = reader.ReadByte(); + writer.WriteNumber($"[{value.PhotographsDoubleHanderOff.ReadNumber()}]双脱把报警抓拍照片张数", value.PhotographsDoubleHanderOff); + value.PictureIntervalDoubleHanderOff = reader.ReadByte(); + writer.WriteNumber($"[{value.PictureIntervalDoubleHanderOff.ReadNumber()}]双脱把报警拍照间隔", value.PictureIntervalDoubleHanderOff); + //玩手机报警 + value.ClassifiedSpeedThresholdPlayMobile = reader.ReadByte(); + writer.WriteNumber($"[{value.ClassifiedSpeedThresholdPlayMobile.ReadNumber()}]玩手机报警分级车速阈值", value.ClassifiedSpeedThresholdPlayMobile); + value.VideoRecordingTimePlayMobile = reader.ReadByte(); + writer.WriteNumber($"[{value.VideoRecordingTimePlayMobile.ReadNumber()}]玩手机报警前后视频录制时间", value.VideoRecordingTimePlayMobile); + value.PhotographsPlayMobile = reader.ReadByte(); + writer.WriteNumber($"[{value.PhotographsPlayMobile.ReadNumber()}]玩手机报警抓拍照片张数", value.PhotographsPlayMobile); + value.PictureIntervalPlayMobile = reader.ReadByte(); + writer.WriteNumber($"[{value.PictureIntervalPlayMobile.ReadNumber()}]玩手机报警拍照间隔", value.PictureIntervalPlayMobile); + value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); writer.WriteString("保留字段", value.Retain.ToHexString()); } @@ -306,12 +431,36 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody value.SmokingAlarmPhotographsDriverFaceCharacteristics = reader.ReadByte(); value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval = reader.ReadByte(); value.ClassifiedSpeedThresholdDistractedDrivingAlarm = reader.ReadByte(); + value.VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm = reader.ReadByte(); value.DistractedDrivingAlarmPhotography = reader.ReadByte(); value.DistractedDrivingAlarmPhotographyInterval = reader.ReadByte(); + value.ClassifiedSpeedThresholdAbnormalDrivingBehavior = reader.ReadByte(); value.VideoRecordingTimeAbnormalDrivingBehavior = reader.ReadByte(); value.PhotographsAbnormalDrivingBehavior = reader.ReadByte(); value.PictureIntervalAbnormalDrivingBehavior = reader.ReadByte(); value.DriverIdentificationTrigger = reader.ReadByte(); + value.ClassifiedSpeedThresholdCameraOcclusion = reader.ReadByte(); + + value.ClassifiedSpeedThresholdNotBuckleUp = reader.ReadByte(); + value.VideoRecordingTimeNotBuckleUp = reader.ReadByte(); + value.PhotographsNotBuckleUp = reader.ReadByte(); + value.PictureIntervalNotBuckleUp = reader.ReadByte(); + + value.ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure = reader.ReadByte(); + value.VideoRecordingTimeInfraredSunglassesBlockingFailure = reader.ReadByte(); + value.PhotographsInfraredSunglassesBlockingFailure = reader.ReadByte(); + value.PictureIntervalInfraredSunglassesBlockingFailure = reader.ReadByte(); + + value.ClassifiedSpeedThresholdDoubleHanderOff = reader.ReadByte(); + value.VideoRecordingTimeDoubleHanderOff = reader.ReadByte(); + value.PhotographsDoubleHanderOff = reader.ReadByte(); + value.PictureIntervalDoubleHanderOff = reader.ReadByte(); + + value.ClassifiedSpeedThresholdPlayMobile = reader.ReadByte(); + value.VideoRecordingTimePlayMobile = reader.ReadByte(); + value.PhotographsPlayMobile = reader.ReadByte(); + value.PictureIntervalPlayMobile = reader.ReadByte(); + value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); return value; } @@ -352,12 +501,38 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody writer.WriteByte(value.SmokingAlarmPhotographsDriverFaceCharacteristics); writer.WriteByte(value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval); writer.WriteByte(value.ClassifiedSpeedThresholdDistractedDrivingAlarm); + writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterDistractedDrivingAlarm); writer.WriteByte(value.DistractedDrivingAlarmPhotography); writer.WriteByte(value.DistractedDrivingAlarmPhotographyInterval); + + writer.WriteByte(value.ClassifiedSpeedThresholdAbnormalDrivingBehavior); writer.WriteByte(value.VideoRecordingTimeAbnormalDrivingBehavior); writer.WriteByte(value.PhotographsAbnormalDrivingBehavior); writer.WriteByte(value.PictureIntervalAbnormalDrivingBehavior); + writer.WriteByte(value.DriverIdentificationTrigger); + writer.WriteByte(value.ClassifiedSpeedThresholdCameraOcclusion); + + writer.WriteByte(value.ClassifiedSpeedThresholdNotBuckleUp); + writer.WriteByte(value.VideoRecordingTimeNotBuckleUp); + writer.WriteByte(value.PhotographsNotBuckleUp); + writer.WriteByte(value.PictureIntervalNotBuckleUp); + + writer.WriteByte(value.ClassifiedSpeedThresholdInfraredSunglassesBlockingFailure); + writer.WriteByte(value.VideoRecordingTimeInfraredSunglassesBlockingFailure); + writer.WriteByte(value.PhotographsInfraredSunglassesBlockingFailure); + writer.WriteByte(value.PictureIntervalInfraredSunglassesBlockingFailure); + + writer.WriteByte(value.ClassifiedSpeedThresholdDoubleHanderOff); + writer.WriteByte(value.VideoRecordingTimeDoubleHanderOff); + writer.WriteByte(value.PhotographsDoubleHanderOff); + writer.WriteByte(value.PictureIntervalDoubleHanderOff); + + writer.WriteByte(value.ClassifiedSpeedThresholdPlayMobile); + writer.WriteByte(value.VideoRecordingTimePlayMobile); + writer.WriteByte(value.PhotographsPlayMobile); + writer.WriteByte(value.PictureIntervalPlayMobile); + writer.WriteArray(value.Retain); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition); } diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF366.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF366.cs index 55087ca..502ff54 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF366.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/MessageBody/JT808_0x8103_0xF366.cs @@ -111,7 +111,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366(); value.ParamId = reader.ReadUInt32(); value.ParamLength = reader.ReadByte(); - value.TyreSpecificationType = reader.ReadString(12); + value.TyreSpecificationType = reader.ReadASCII(12); value.TyrePressureUnit = reader.ReadUInt16(); value.NormalFetalPressure = reader.ReadUInt16(); value.ThresholdUnbalancedTirePressure = reader.ReadUInt16(); @@ -134,7 +134,7 @@ namespace JT808.Protocol.Extensions.YueBiao.MessageBody { writer.WriteUInt32(value.ParamId); writer.Skip(1, out int ParamLengthPosition); - writer.WriteString(value.TyreSpecificationType); + writer.WriteASCII(value.TyreSpecificationType); writer.WriteUInt16(value.TyrePressureUnit); writer.WriteUInt16(value.NormalFetalPressure); writer.WriteUInt16(value.ThresholdUnbalancedTirePressure); diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/Metadata/AlarmOrEventProperty.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/Metadata/AlarmOrEventProperty.cs index b5d4ce1..f99145d 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/Metadata/AlarmOrEventProperty.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.YueBiao/Metadata/AlarmOrEventProperty.cs @@ -12,7 +12,7 @@ namespace JT808.Protocol.Extensions.YueBiao.Metadata /// /// 胎压报警位置 /// - public byte TirePressureAlarmPosition { get; set; } + public ushort TirePressureAlarmPosition { get; set; } /// /// 报警/事件类型 ///