diff --git a/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj b/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj index 6d61a9f..5627df8 100644 --- a/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj +++ b/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj @@ -48,6 +48,7 @@ + diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs new file mode 100644 index 0000000..b71783b --- /dev/null +++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs @@ -0,0 +1,640 @@ +using JT808.Protocol.Extensions; +using JT808.Protocol.Interfaces; +using JT808.Protocol.Internal; +using JT808.Protocol.MessageBody; +using JT808.Protocol.MessageBody.CarDVR; +using JT808.Protocol.Test.MessageBody.JT808_0x0701BodiesImpl; +using System; +using System.Collections.Generic; +using System.Reflection; +using Xunit; +using static JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08; +using static JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09; +using static JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10; +using static JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11; + +namespace JT808.Protocol.Test.MessageBody +{ + public class JT808_0x0700Test + { + JT808Serializer JT808Serializer; + + public JT808_0x0700Test() + { + IJT808Config jT808Config = new DefaultGlobalConfig(); + JT808Serializer = new JT808Serializer(jT808Config); + } + [Fact] + public void Test_Serialize_0x00() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x00; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x00 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x00 + { + ModifyNumber = 1, + StandardYear = "19" + }; + + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000100557A00000200190135", hex); + } + + [Fact] + public void Test_Deserilize_0x00() + { + byte[] bytes = "000100557A00000200190135".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var package = value.JT808CarDVRUpPackage as JT808CarDVRUpPackage; + Assert.Equal(0x557a, package.Begin); + Assert.Equal(0, package.KeepFields); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x00; + Assert.Equal(1, body.ModifyNumber); + Assert.Equal("19", body.StandardYear); + } + + [Fact] + public void Test_Serialize_0x01() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x01; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x01 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x01 + { + DriverLicenseNo = "430223199007126687" + }; + + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000101557A0100120034333032323331393930303731323636383732", hex); + } + + [Fact] + public void Test_Deserilize_0x01() + { + byte[] bytes = "000101557A0100120034333032323331393930303731323636383732".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x01; + Assert.Equal("430223199007126687", body.DriverLicenseNo); + } + [Fact] + public void Test_Serialize_0x02() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x02; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x02 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x02 + { + RealTime = Convert.ToDateTime("2020-03-23 10:10:10") + }; + + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000102557A020006002003231010103B", hex); + } + + [Fact] + public void Test_Deserilize_0x02() + { + byte[] bytes = "000102557A020006002003231010103B".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x02; + Assert.Equal("2020-03-23 10:10:10", body.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); + } + [Fact] + public void Test_Serialize_0x03() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x03; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x03 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x03 + { + FirstInstallTime = Convert.ToDateTime("2020-03-23 10:10:10"), + RealTime = Convert.ToDateTime("2020-03-22 10:10:10"), + FirstMileage = "1000", + TotalMilage = "5000" + }; + + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000103557A03001400200322101010200323101010000010000000500079", hex); + } + + [Fact] + public void Test_Deserilize_0x03() + { + byte[] bytes = "000103557A03001400200322101010200323101010000010000000500079".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x03; + Assert.Equal("2020-03-22 10:10:10", body.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); + Assert.Equal("2020-03-23 10:10:10", body.FirstInstallTime.ToString("yyyy-MM-dd HH:mm:ss")); + Assert.Equal("1000", body.FirstMileage); + Assert.Equal("5000", body.TotalMilage); + } + [Fact] + public void Test_Serialize_0x04() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x04; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x04 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x04 + { + RealTime = Convert.ToDateTime("2020-03-23 10:10:10"), + PulseCoefficient = 50 + }; + + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000104557A04000800200323101010003201", hex); + } + + [Fact] + public void Test_Deserilize_0x04() + { + byte[] bytes = "000104557A04000800200323101010003201".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x04; + Assert.Equal("2020-03-23 10:10:10", body.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); + Assert.Equal(50, body.PulseCoefficient); + } + [Fact] + public void Test_Serialize_0x05() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x05; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x05 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x05 + { + VehicleNo = "粤B12345", + VehicleType = "重型货车", + Vin = "12345678912345678" + }; + + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000105557A050027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B5000009", hex); + } + + [Fact] + public void Test_Deserilize_0x05() + { + byte[] bytes = "000105557A050027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B5000009".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x05; + Assert.Equal("粤B12345", body.VehicleNo); + Assert.Equal("重型货车", body.VehicleType); + Assert.Equal("12345678912345678", body.Vin); + } + [Fact] + public void Test_Serialize_0x06() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x06; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x06 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x06 + { + FarLight = "远光灯", + Brake = "制动", + D0 = "自定义1", + D1 = "自定义2", + D2 = "自定义3", + LeftTurn = "左转向", + NearLight = "近光灯", + RealTime = Convert.ToDateTime("2020-03-23 10:10:10"), + RightTurn = "右转向", + SignalOperate = 255, + }; + + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000106557A06005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000084", hex); + } + + [Fact] + public void Test_Deserilize_0x06() + { + byte[] bytes = "000106557A06005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000084".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x06; + Assert.Equal("远光灯", body.FarLight); + Assert.Equal("制动", body.Brake); + Assert.Equal("自定义1", body.D0); + Assert.Equal("自定义2", body.D1); + Assert.Equal("自定义3", body.D2); + Assert.Equal("左转向", body.LeftTurn); + Assert.Equal("近光灯", body.NearLight); + Assert.Equal("2020-03-23 10:10:10", body.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); + Assert.Equal("右转向", body.RightTurn); + Assert.Equal(255, body.SignalOperate); + } + [Fact] + public void Test_Serialize_0x07() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x07; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x07 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x07 + { + CertifiedProductModels = "1234567891234567", + ProductionDate = Convert.ToDateTime("2020-03-23"), + ProductionPlantCCCCertificationCode = "1234567", + ProductProductionFlowNumber = "1234", + Reversed = "1234" + }; + + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000107557A0700230031323334353637313233343536373839313233343536372003233132333431323334003A", hex); + } + + [Fact] + public void Test_Deserilize_0x07() + { + byte[] bytes = "000107557A0700230031323334353637313233343536373839313233343536372003233132333431323334003A".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x07; + Assert.Equal("2020-03-23", body.ProductionDate.ToString("yyyy-MM-dd")); + Assert.Equal("1234567891234567", body.CertifiedProductModels); + Assert.Equal("1234567", body.ProductionPlantCCCCertificationCode); + Assert.Equal("1234", body.ProductProductionFlowNumber); + Assert.Equal("1234", body.Reversed); + } + [Fact] + public void Test_Serialize_0x08() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x08; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x08 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x08 + { + JT808_CarDVR_Up_0x08_SpeedPerMinutes = new List { + new JT808_CarDVR_Up_0x08_SpeedPerMinute{ + StartTime=Convert.ToDateTime("2020-03-23"), + JT808_CarDVR_Up_0x08_SpeedPerSeconds=new List{ + new JT808_CarDVR_Up_0x08_SpeedPerSecond{ + AvgSpeedAfterStartTime=10, + StatusSignalAfterStartTime=20 + } + } + } + } + }; + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000108557A08007E002003230000000A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47", hex); + } + + [Fact] + public void Test_Deserilize_0x08() + { + byte[] bytes = "000108557A08007E002003230000000A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x08; + Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x08_SpeedPerMinutes[0].StartTime.ToString("yyyy-MM-dd")); + Assert.Equal(10, body.JT808_CarDVR_Up_0x08_SpeedPerMinutes[0].JT808_CarDVR_Up_0x08_SpeedPerSeconds[0].AvgSpeedAfterStartTime); + Assert.Equal(20, body.JT808_CarDVR_Up_0x08_SpeedPerMinutes[0].JT808_CarDVR_Up_0x08_SpeedPerSeconds[0].StatusSignalAfterStartTime); + } + [Fact] + public void Test_Serialize_0x09() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x09; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x09 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x09 + { + JT808_CarDVR_Up_0x09_PositionPerHours = new List { + new JT808_CarDVR_Up_0x09_PositionPerHour{ + StartTime=Convert.ToDateTime("2020-03-23"), + JT808_CarDVR_Up_0x09_PositionPerMinutes=new List{ + new JT808_CarDVR_Up_0x09_PositionPerMinute{ + AvgSpeedAfterStartTime=10, + GpsLat=23665544, + GpsLng=113656598, + Height=50 + } + } + } + } + }; + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000109557A09029A0020032300000006C6431601691B8800320AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17", hex); + } + + [Fact] + public void Test_Deserilize_0x09() + { + byte[] bytes = "000109557A09029A0020032300000006C6431601691B8800320AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x09; + Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x09_PositionPerHours[0].StartTime.ToString("yyyy-MM-dd")); + Assert.Equal(10, body.JT808_CarDVR_Up_0x09_PositionPerHours[0].JT808_CarDVR_Up_0x09_PositionPerMinutes[0].AvgSpeedAfterStartTime); + Assert.Equal(23665544, body.JT808_CarDVR_Up_0x09_PositionPerHours[0].JT808_CarDVR_Up_0x09_PositionPerMinutes[0].GpsLat); + Assert.Equal(113656598, body.JT808_CarDVR_Up_0x09_PositionPerHours[0].JT808_CarDVR_Up_0x09_PositionPerMinutes[0].GpsLng); + Assert.Equal(50, body.JT808_CarDVR_Up_0x09_PositionPerHours[0].JT808_CarDVR_Up_0x09_PositionPerMinutes[0].Height); + } + [Fact] + public void Test_Serialize_0x10() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x10; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x10 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x10 + { + JT808_CarDVR_Up_0x10_AccidentSuspectins = new List { + new JT808_CarDVR_Up_0x10_AccidentSuspectin{ + EndTime=Convert.ToDateTime("2020-03-23"), + GpsLat=23665544, + GpsLng=113656598, + Height=50, + DriverLicenseNo="430223199009203698", + JT808_CarDVR_Up_0x09_DrivingStatuss=new List + { + new JT808_CarDVR_Up_0x10_DrivingStatus{ + Speed=10, + StatusSignal=20 + } + } + } + } + }; + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000110557A1000EA002003230000003433303232333139393030393230333639380A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06C6431601691B8800329D", hex); + } + + [Fact] + public void Test_Deserilize_0x10() + { + byte[] bytes = "000110557A1000EA002003230000003433303232333139393030393230333639380A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06C6431601691B8800329D".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x10; + Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].EndTime.ToString("yyyy-MM-dd")); + Assert.Equal(23665544, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].GpsLat); + Assert.Equal(113656598, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].GpsLng); + Assert.Equal(50, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].Height); + Assert.Equal("430223199009203698", body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].DriverLicenseNo); + Assert.Equal(10, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x09_DrivingStatuss[0].Speed); + Assert.Equal(20, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x09_DrivingStatuss[0].StatusSignal); + } + [Fact] + public void Test_Serialize_0x11() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x11; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x11 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x11 + { + JT808_CarDVR_Up_0x11_DriveOverTimes = new List{ + new JT808_CarDVR_Up_0x11_DriveOverTime{ + ContinueDrivingEndTime=Convert.ToDateTime("2020-03-23"), + ContinueDrivingStartTime=Convert.ToDateTime("2020-03-22"), + GpsStartLat=23665544, + GpsStartLng=113656598, + GpsEndLat=23665545, + GpsEndLng=113656599, + StartHeight=50, + EndHeight=60, + DriverLicenseNo="430223199009203698" + } + } + }; + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000100557A00000300190134", hex); + } + + [Fact] + public void Test_Deserilize_0x11() + { + byte[] bytes = "000100557A00000300190134".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x11; + Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].ContinueDrivingEndTime.ToString("yyyy-MM-dd")); + Assert.Equal("2020-03-22", body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].ContinueDrivingStartTime.ToString("yyyy-MM-dd")); + Assert.Equal(23665544, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].GpsStartLat); + Assert.Equal(113656598, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].GpsStartLng); + Assert.Equal(50, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].StartHeight); + Assert.Equal(23665545, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].GpsEndLat); + Assert.Equal(113656599, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].GpsEndLng); + Assert.Equal(60, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].EndHeight); + Assert.Equal("430223199009203698", body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].DriverLicenseNo); + } + [Fact] + public void Test_Serialize_0x12() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x12; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x12 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x12 + { + JT808_CarDVR_Up_0x12_DriveLogins = new List{ + new JT808_CarDVR_Up_0x12_DriveLogin{ + LoginTime=Convert.ToDateTime("2020-03-23"), + LoginType=1, + DriverLicenseNo="430223199009203698" + } + } + }; + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000100557A00000300190134", hex); + } + + [Fact] + public void Test_Deserilize_0x12() + { + byte[] bytes = "000100557A00000300190134".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x12; + Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x12_DriveLogins[0].LoginTime.ToString("yyyy-MM-dd")); + Assert.Equal(1, body.JT808_CarDVR_Up_0x12_DriveLogins[0].LoginType); + Assert.Equal("430223199009203698", body.JT808_CarDVR_Up_0x12_DriveLogins[0].DriverLicenseNo); + } + [Fact] + public void Test_Serialize_0x13() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x13; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x13 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x13 + { + JT808_CarDVR_Up_0x13_ExternalPowerSupplys = new List{ + new JT808_CarDVR_Up_0x13_ExternalPowerSupply{ + EventTime=Convert.ToDateTime("2020-03-23"), + EventType=1 + } + } + }; + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000100557A00000300190134", hex); + } + + [Fact] + public void Test_Deserilize_0x13() + { + byte[] bytes = "000100557A00000300190134".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x13; + Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x13_ExternalPowerSupplys[0].EventTime.ToString("yyyy-MM-dd")); + Assert.Equal(1, body.JT808_CarDVR_Up_0x13_ExternalPowerSupplys[0].EventType); + } + [Fact] + public void Test_Serialize_0x14() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x14; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x14 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x14 + { + JT808_CarDVR_Up_0x14_ParameterModifys = new List{ + new JT808_CarDVR_Up_0x14_ParameterModify{ + EventTime=Convert.ToDateTime("2020-03-23"), + EventType=1 + } + } + }; + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000100557A00000300190134", hex); + } + + [Fact] + public void Test_Deserilize_0x14() + { + byte[] bytes = "000100557A00000300190134".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x14; + Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x14_ParameterModifys[0].EventTime.ToString("yyyy-MM-dd")); + Assert.Equal(1, body.JT808_CarDVR_Up_0x14_ParameterModifys[0].EventType); + } + [Fact] + public void Test_Serialize_0x15() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x15; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x15 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x15 + { + JT808_CarDVR_Up_0x15_SpeedStatusLogs = new List{ + new JT808_CarDVR_Up_0x15_SpeedStatusLog{ + SpeedStatusStartTime=Convert.ToDateTime("2020-03-22"), + SpeedStatusEndTime=Convert.ToDateTime("2020-03-23"), + SpeedStatus=1, + JT808_CarDVR_Up_0x15_SpeedPerSeconds=new List{ + new JT808_CarDVR_Up_0x15_SpeedPerSecond{ + RecordSpeed=50, + ReferenceSpeed=40 + } + } + } + } + }; + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000100557A00000300190134", hex); + } + + [Fact] + public void Test_Deserilize_0x15() + { + byte[] bytes = "000100557A00000300190134".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x15; + Assert.Equal("2020-03-22", body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].SpeedStatusStartTime.ToString("yyyy-MM-dd")); + Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].SpeedStatusEndTime.ToString("yyyy-MM-dd")); + Assert.Equal(1, body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].SpeedStatus); + Assert.Equal(50, body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].JT808_CarDVR_Up_0x15_SpeedPerSeconds[0].RecordSpeed); + Assert.Equal(40, body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].JT808_CarDVR_Up_0x15_SpeedPerSeconds[0].ReferenceSpeed); + } + [Fact] + public void Test_Serialize_0x82() + { + JT808_0x0700 value = new JT808_0x0700(); + value.CommandId = 0x82; + value.ReplyMsgNum = 1; + value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage + { + CommandId = 0x82 + }; + value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x82(); + var hex = JT808Serializer.Serialize(value).ToHexString(); + Assert.Equal("000182557A82000000AD", hex); + } + + [Fact] + public void Test_Deserilize_0x82() + { + byte[] bytes = "000182557A82000000AD".ToHexBytes(); + JT808_0x0700 value = JT808Serializer.Deserialize(bytes); + Assert.Equal(1, value.ReplyMsgNum); + var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x82; + } + } +} diff --git a/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs b/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs index da40808..65ed62b 100644 --- a/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs +++ b/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs @@ -26,6 +26,8 @@ namespace JT808.Protocol.Interfaces JT808_0x0900_Custom_Factory = new JT808_0x0900_Custom_Factory(); JT808_0x8900_Custom_Factory = new JT808_0x8900_Custom_Factory(); JT808_0x8500_2019_Factory = new JT808_0x8500_2019_Factory(); + JT808_CarDVR_Up_Factory = new JT808_CarDVR_Up_Factory(); + JT808_CarDVR_Down_Factory = new JT808_CarDVR_Down_Factory(); TerminalPhoneNoLength = 12; Trim = true; } @@ -48,7 +50,7 @@ namespace JT808.Protocol.Interfaces public virtual IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; } public IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; } public IJT808_CarDVR_Down_Factory JT808_CarDVR_Down_Factory { get; set; } - public bool SkipCarDVRCRCCode { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public bool SkipCarDVRCRCCode { get; set; } public virtual IJT808Config Register(params Assembly[] externalAssemblies) { @@ -65,6 +67,8 @@ namespace JT808.Protocol.Interfaces JT808_0x0900_Custom_Factory.Register(easb); JT808_0x8900_Custom_Factory.Register(easb); JT808_0x8500_2019_Factory.Register(easb); + JT808_CarDVR_Up_Factory.Register(easb); + JT808_CarDVR_Down_Factory.Register(easb); } } return this; diff --git a/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Factory.cs index 51bf055..a36e2bb 100644 --- a/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Factory.cs +++ b/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Factory.cs @@ -9,7 +9,7 @@ namespace JT808.Protocol.Interfaces /// public interface IJT808_CarDVR_Down_Factory : IJT808ExternalRegister { - IDictionary Map { get; } - IJT808_CarDVR_Down_Factory SetMap() ; + IDictionary Map { get; } + IJT808_CarDVR_Down_Factory SetMap() where TJT808CarDVRDownBodies : JT808CarDVRDownBodies; } } diff --git a/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Factory.cs index 03602d5..2263f43 100644 --- a/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Factory.cs +++ b/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Factory.cs @@ -9,7 +9,7 @@ namespace JT808.Protocol.Interfaces /// public interface IJT808_CarDVR_Up_Factory : IJT808ExternalRegister { - IDictionary Map { get; } - IJT808_CarDVR_Up_Factory SetMap() ; + IDictionary Map { get; } + IJT808_CarDVR_Up_Factory SetMap() where TJT808CarDVRUpBodies : JT808CarDVRUpBodies; } } diff --git a/src/JT808.Protocol/Internal/JT808_CarDVR_Down_Factory.cs b/src/JT808.Protocol/Internal/JT808_CarDVR_Down_Factory.cs new file mode 100644 index 0000000..925fc1f --- /dev/null +++ b/src/JT808.Protocol/Internal/JT808_CarDVR_Down_Factory.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace JT808.Protocol.Interfaces +{ + /// + /// 记录仪工厂 + /// + public class JT808_CarDVR_Down_Factory:IJT808_CarDVR_Down_Factory + { + public IDictionary Map { get; } + + public JT808_CarDVR_Down_Factory() + { + Map = new Dictionary(); + Register(Assembly.GetExecutingAssembly()); + } + public void Register(Assembly externalAssembly) + { + var types = externalAssembly.GetTypes().Where(w => w.BaseType == typeof(JT808CarDVRDownBodies)).ToList(); + foreach (var type in types) + { + var instance = Activator.CreateInstance(type); + var commandId = (byte)type.GetProperty(nameof(JT808CarDVRDownBodies.CommandId)).GetValue(instance); + if (Map.ContainsKey(commandId)) + { + throw new ArgumentException($"{type.FullName} {commandId} An element with the same key already exists."); + } + else + { + Map.Add(commandId, instance); + } + } + } + + public IJT808_CarDVR_Down_Factory SetMap() where TJT808CarDVRDownBodies : JT808CarDVRDownBodies + { + Type type = typeof(TJT808CarDVRDownBodies); + var instance = Activator.CreateInstance(type); + var attachInfoId = (byte)type.GetProperty(nameof(JT808CarDVRDownBodies.CommandId)).GetValue(instance); + if (Map.ContainsKey(attachInfoId)) + { + throw new ArgumentException($"{type.FullName} {attachInfoId} An element with the same key already exists."); + } + else + { + Map.Add(attachInfoId, instance); + } + return this; + } + } +} diff --git a/src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs b/src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs new file mode 100644 index 0000000..a812f92 --- /dev/null +++ b/src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace JT808.Protocol.Interfaces +{ + /// + /// 记录仪工厂 + /// + public class JT808_CarDVR_Up_Factory:IJT808_CarDVR_Up_Factory + { + public IDictionary Map { get; } + + public JT808_CarDVR_Up_Factory() + { + Map = new Dictionary(); + Register(Assembly.GetExecutingAssembly()); + } + public void Register(Assembly externalAssembly) + { + var types = externalAssembly.GetTypes().Where(w => w.BaseType == typeof(JT808CarDVRUpBodies)).ToList(); + foreach (var type in types) + { + var instance = Activator.CreateInstance(type); + var commandId = (byte)type.GetProperty(nameof(JT808CarDVRUpBodies.CommandId)).GetValue(instance); + if (Map.ContainsKey(commandId)) + { + throw new ArgumentException($"{type.FullName} {commandId} An element with the same key already exists."); + } + else + { + Map.Add(commandId, instance); + } + } + } + + public IJT808_CarDVR_Up_Factory SetMap() where TJT808CarDVRUpBodies : JT808CarDVRUpBodies + { + Type type = typeof(TJT808CarDVRUpBodies); + var instance = Activator.CreateInstance(type); + var attachInfoId = (byte)type.GetProperty(nameof(JT808CarDVRUpBodies.CommandId)).GetValue(instance); + if (Map.ContainsKey(attachInfoId)) + { + throw new ArgumentException($"{type.FullName} {attachInfoId} An element with the same key already exists."); + } + else + { + Map.Add(attachInfoId, instance); + } + return this; + } + } +} diff --git a/src/JT808.Protocol/JT808.Protocol.xml b/src/JT808.Protocol/JT808.Protocol.xml index 2bfa640..ddc028f 100644 --- a/src/JT808.Protocol/JT808.Protocol.xml +++ b/src/JT808.Protocol/JT808.Protocol.xml @@ -2633,6 +2633,16 @@ 记录仪工厂 + + + 记录仪工厂 + + + + + 记录仪工厂 + + 消息流水号 @@ -3682,36 +3692,200 @@ 返回:车辆信息 + + + 车辆识别代号 + + + + + 机动车号牌号码 + 后 3 个字节为备用字 + + + + + 机动车号牌分类 + 后 4 个字节为备用字 + + 设置记录仪初次安装日期 返回:初次安装日期 + + + 实时时间 + + 设置状态量配置信息 返回:状态量配置信息 + + + 实时时间 + + + + + 信号字节个数 + 单位字节的 D7~D0(由高到低)分别对应 8 个状态信号, 1 表示有操作,0表示无操作 + + + + + + + + + + 近光 D3 + 10个字节,未使用或不足时,补0 + + + + + 远光 D4 + 10个字节,未使用或不足时,补0 + + + + + 右转向 D5 + 10个字节,未使用或不足时,补0 + + + + + 左转向 D6 + 10个字节,未使用或不足时,补0 + + + + + 制动 D7 + 10个字节,未使用或不足时,补0 + + 设置记录仪时间 返回:北京时间的日期、时钟 + + + 实时时间 + + 设置记录仪脉冲系数 返回:记录仪脉冲系数 + + + 当前时间 + + + + + 脉冲系数高字节 + + + + + 仪脉冲系数低字节 + + 设置初始里程 返回:记录仪初次安装时车辆已行驶的总里程 + + + 实时时间 + + + + + 初次安装时间 + + + + + 初始里程 + + + + + 累计里程 + + + + + 进入或保持检定状态 + 返回:进入或保持检定状态 + + + + + 进入里程误差测量 + 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平) + + + + + 记录仪唯一性编号 + + + + + 脉冲系数 + + + + + 当前速度 + + + + + 累计里程 单位为米 + 单位为 0.1 千米每小时 + + + + + 状态信号 + + + + + 进入脉冲系数误差测量 + 返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平) + + + + + 进入实时时间误差测量 + 返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平) + + + + + 返回正常工作状态 + 返回:返回正常工作状态 + + 采集记录仪执行标准版本 @@ -3790,16 +3964,11 @@ 当前时间 - + 脉冲系数高字节 - - - 仪脉冲系数低字节 - - 采集车辆信息 @@ -3918,34 +4087,34 @@ 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) - + 单位分钟行驶速度记录数据块格式 1.本数据块总长度为 126 个字节,不足部分以 FFH补齐; 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 - + 开始时间 - + 60s钟,每秒的信息 - + 开始时间之后每秒钟的平均速度和状态信号 - + 开始时间之后每秒钟的平均速度 - + 开始时间之后每秒钟的状态信号 @@ -3962,44 +4131,44 @@ 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) - + 指定的结束时间之前最近的每 小时的位置信息记录 1.本数据块总长度为 666 个字节,不足部分以 FFH补齐; 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 - + 开始时间 - + 60s钟,每秒的信息 - + 开始时间之后每分钟的平均速度和位置信息 - + 经度 - + 纬度 - + 高度 - + 开始时间之后每分钟的平均速度 @@ -4016,54 +4185,54 @@ 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) - + 指定的结束时间之前最近的每条事故疑点记录 1.本数据块总长度为 234 个字节; 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 - + 行驶结束时间 - + 机动车驾驶证号码 - + 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列 - + 经度 - + 纬度 - + 高度 - + 行驶结束时间前的状态 - + 速度 - + 状态信号 @@ -4079,52 +4248,52 @@ 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) - + 单位超时驾驶记录数据块 - + 机动车驾驶证号码 18位 - + 连续驾驶开始时间 - + 连续驾驶结束时间 - + 经度 - + 纬度 - + 高度 - + 经度 - + 纬度 - + 高度 @@ -4140,22 +4309,22 @@ 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) - + 单位驾驶人身份记录数据块格式 - + 登入登出时间发生时间 - + 机动车驾驶证号码 18位 - + 事件类型 @@ -4171,17 +4340,17 @@ 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) - + 单位记录仪外部供电记录数据块格式 - + 事件发生时间 - + 事件类型 @@ -4197,17 +4366,17 @@ 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) - + - 单位记录仪外部供电记录数据块格式 + 单位参数修改记录数据块格式 - + 事件发生时间 - + 事件类型 @@ -4223,42 +4392,42 @@ 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) - + 单位速度状态日志数据块格式 - + 记录仪的速度状态 - + 速度状态判定的开始时间 - + 速度状态判定的结束时间 - + 60组 - + 每秒速度 - + 记录速度 - + 参考速度 @@ -4303,6 +4472,7 @@ 进入或保持检定状态 返回:进入或保持检定状态 + 在检定状态下,检定装置以不大于2秒的时间间隔发送包含本命令字的命令帧,记录仪在6秒内未收到该命令帧,则自动返回正常工作状态。 @@ -4968,6 +5138,22 @@ 查询类型为4 + + + 行驶记录数据上传 + 0x0700 + + + + + 应答流水号 + + + + + 命令字 + + 电子运单上报 @@ -7465,6 +7651,16 @@ + + + 行驶记录参数下传命令 + + + + + + + 上报驾驶员身份信息请求 diff --git a/src/JT808.Protocol/JT808CarDVRDownBodies.cs b/src/JT808.Protocol/JT808CarDVRDownBodies.cs index 9526bbe..cd06b68 100644 --- a/src/JT808.Protocol/JT808CarDVRDownBodies.cs +++ b/src/JT808.Protocol/JT808CarDVRDownBodies.cs @@ -22,7 +22,5 @@ namespace JT808.Protocol public virtual bool SkipSerialization { get; set; } = false; public abstract string Description { get; } - public abstract JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config); - public abstract void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config); } } diff --git a/src/JT808.Protocol/JT808CarDVRDownPackage.cs b/src/JT808.Protocol/JT808CarDVRDownPackage.cs index 89dde68..a51509f 100644 --- a/src/JT808.Protocol/JT808CarDVRDownPackage.cs +++ b/src/JT808.Protocol/JT808CarDVRDownPackage.cs @@ -1,10 +1,15 @@ -using System; +using JT808.Protocol.Enums; +using JT808.Protocol.Exceptions; +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; +using JT808.Protocol.MessagePack; +using System; using System.Collections.Generic; using System.Text; namespace JT808.Protocol { - public class JT808CarDVRDownPackage + public class JT808CarDVRDownPackage : IJT808MessagePackFormatter { public const ushort BeginFlag = 0x557A; /// @@ -31,5 +36,51 @@ namespace JT808.Protocol /// 校验字 /// public byte CheckCode { get; set; } + + public void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownPackage value, IJT808Config config) + { + var currentPosition = writer.GetCurrentPosition(); + writer.WriteUInt16(value.Begin); + writer.WriteByte(value.CommandId); + writer.Skip(2, out var datalengthPosition); + writer.WriteByte(value.KeepFields); + if (config.JT808_CarDVR_Down_Factory.Map.TryGetValue(value.CommandId, out var instance)) + { + if (!value.Bodies.SkipSerialization) + { + //4.2.处理消息体 + JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(instance, ref writer, value.Bodies, config); + } + } + writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() -2-1- datalengthPosition), datalengthPosition);//此处-2:减去数据长度字段2位,-1:减去保留字长度 + writer.WriteCarDVRCheckCode(currentPosition); + } + + public JT808CarDVRDownPackage Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + { + JT808CarDVRDownPackage value = new JT808CarDVRDownPackage(); + int currentPosition = reader.ReaderCount; + value.Begin = reader.ReadUInt16(); + value.CommandId = reader.ReadByte(); + value.DataLength = reader.ReadUInt16(); + value.KeepFields = reader.ReadByte(); + if (value.DataLength > 0) + { + if (config.JT808_CarDVR_Down_Factory.Map.TryGetValue(value.CommandId, out var instance)) + { + //4.2.处理消息体 + dynamic attachImpl = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config); + value.Bodies = attachImpl; + } + } + var carDVRCheckCode = reader.ReadCarDVRCheckCode(currentPosition); + if (!config.SkipCarDVRCRCCode) + { + if (carDVRCheckCode.RealXorCheckCode != carDVRCheckCode.CalculateXorCheckCode) + throw new JT808Exception(JT808ErrorCode.CarDVRCheckCodeNotEqual, $"{reader.RealCheckXorCode}!={reader.CalculateCheckXorCode}"); + } + value.CheckCode = reader.ReadByte(); + return value; + } } } diff --git a/src/JT808.Protocol/JT808CarDVRUpBodies.cs b/src/JT808.Protocol/JT808CarDVRUpBodies.cs index ee45a6c..4382b1b 100644 --- a/src/JT808.Protocol/JT808CarDVRUpBodies.cs +++ b/src/JT808.Protocol/JT808CarDVRUpBodies.cs @@ -22,7 +22,5 @@ namespace JT808.Protocol public virtual bool SkipSerialization { get; set; } = false; public abstract string Description { get; } - public abstract JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config); - public abstract void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies value, IJT808Config config); } } diff --git a/src/JT808.Protocol/JT808CarDVRUpPackage.cs b/src/JT808.Protocol/JT808CarDVRUpPackage.cs index 77dd0ad..4af3b33 100644 --- a/src/JT808.Protocol/JT808CarDVRUpPackage.cs +++ b/src/JT808.Protocol/JT808CarDVRUpPackage.cs @@ -1,5 +1,6 @@ using JT808.Protocol.Enums; using JT808.Protocol.Exceptions; +using JT808.Protocol.Extensions; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; @@ -59,7 +60,8 @@ namespace JT808.Protocol if (config.JT808_CarDVR_Up_Factory.Map.TryGetValue(value.CommandId, out var instance)) { //4.2.处理消息体 - value.Bodies = instance.Deserialize(ref reader, config); + dynamic attachImpl = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config); + value.Bodies = attachImpl; } } var carDVRCheckCode = reader.ReadCarDVRCheckCode(currentPosition); @@ -81,13 +83,13 @@ namespace JT808.Protocol writer.WriteByte(value.KeepFields); if (config.JT808_CarDVR_Up_Factory.Map.TryGetValue(value.CommandId, out var instance)) { - if (!instance.SkipSerialization) + if (!value.Bodies.SkipSerialization) { //4.2.处理消息体 - instance.Serialize(ref writer, value.Bodies, config); + JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(instance, ref writer, value.Bodies, config); } } - writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() - datalengthPosition + 1), datalengthPosition); + writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() -2-1- datalengthPosition), datalengthPosition);//此处-2:减去数据长度字段2位,-1:减去保留字长度 writer.WriteCarDVRCheckCode(currentPosition); } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x00.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x00.cs index e916fa9..a39a1fd 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x00.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x00.cs @@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR public override string Description => "采集记录仪执行标准版本"; public override bool SkipSerialization { get; set; } = true; - - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - throw new NotImplementedException(); - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config) - { - throw new NotImplementedException(); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x01.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x01.cs index 02053e3..cc8672b 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x01.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x01.cs @@ -16,20 +16,10 @@ namespace JT808.Protocol.MessageBody.CarDVR /// public class JT808_CarDVR_Down_0x01 : JT808CarDVRDownBodies { - public override byte CommandId => JT808CarDVRCommandID.采集指定的驾驶人身份记录.ToByteValue(); - + public override byte CommandId => JT808CarDVRCommandID.采集当前驾驶人信息.ToByteValue(); + public override string Description => "采集机动车驾驶证号码"; public override bool SkipSerialization { get; set; } = true; - - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - throw new NotImplementedException(); - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config) - { - throw new NotImplementedException(); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x02.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x02.cs index 4976412..a9f1d33 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x02.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x02.cs @@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR public override string Description => "实时时间"; public override bool SkipSerialization { get; set; } = true; - - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - throw new NotImplementedException(); - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config) - { - throw new NotImplementedException(); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x03.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x03.cs index 434ed4e..99c0cea 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x03.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x03.cs @@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR public override string Description => "实时时间、安装时的初始里程及安装后的累计行驶里程"; public override bool SkipSerialization { get; set; } = true; - - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - throw new NotImplementedException(); - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config) - { - throw new NotImplementedException(); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x04.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x04.cs index b4c4bc8..e9271b2 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x04.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x04.cs @@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR public override string Description => "实时时间及设定的脉冲系数"; public override bool SkipSerialization { get; set; } = true; - - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - throw new NotImplementedException(); - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config) - { - throw new NotImplementedException(); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x05.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x05.cs index c081ca3..dabaa2d 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x05.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x05.cs @@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR public override string Description => "车辆识别代号、机动车号牌号码和机动车号牌分类"; public override bool SkipSerialization { get; set; } = true; - - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - throw new NotImplementedException(); - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config) - { - throw new NotImplementedException(); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x06.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x06.cs index 79432ac..bb0f80d 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x06.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x06.cs @@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR public override string Description => "状态信号配置信息"; public override bool SkipSerialization { get; set; } = true; - - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - throw new NotImplementedException(); - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config) - { - throw new NotImplementedException(); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x07.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x07.cs index cb4f881..8b36dec 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x07.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x07.cs @@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR public override string Description => "唯一性编号及初次安装日期"; public override bool SkipSerialization { get; set; } = true; - - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - throw new NotImplementedException(); - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config) - { - throw new NotImplementedException(); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs index da4b12c..9b3e4b9 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 返回:符合条件的行驶速度记录 /// 如在指定的时间范围内无数据记录,则本数据块数据为空 /// - public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies + public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies, IJT808MessagePackFormatter { public override byte CommandId => JT808CarDVRCommandID.采集指定的行驶速度记录.ToByteValue(); /// @@ -32,7 +32,14 @@ namespace JT808.Protocol.MessageBody.CarDVR public ushort Count { get; set; } public override string Description => "符合条件的行驶速度记录"; - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x08 value, IJT808Config config) + { + writer.WriteDateTime6(value.StartTime); + writer.WriteDateTime6(value.EndTime); + writer.WriteUInt16(value.Count); + } + + public JT808_CarDVR_Down_0x08 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Down_0x08 value = new JT808_CarDVR_Down_0x08(); value.StartTime = reader.ReadDateTime6(); @@ -40,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR value.Count = reader.ReadUInt16(); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config) - { - JT808_CarDVR_Down_0x08 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x08; - writer.WriteDateTime6(value.StartTime); - writer.WriteDateTime6(value.EndTime); - writer.WriteUInt16(value.Count); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs index 0a72e2c..d3ff1a4 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 返回:符合条件的位置信息记录 /// 指定的时间范围内无数据记录,则本数据块数据为空 /// - public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies + public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies, IJT808MessagePackFormatter { public override byte CommandId => JT808CarDVRCommandID.采集指定的位置信息记录.ToByteValue(); @@ -33,7 +33,14 @@ namespace JT808.Protocol.MessageBody.CarDVR /// public ushort Count { get; set; } - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x09 value, IJT808Config config) + { + writer.WriteDateTime6(value.StartTime); + writer.WriteDateTime6(value.EndTime); + writer.WriteUInt16(value.Count); + } + + public JT808_CarDVR_Down_0x09 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Down_0x09 value = new JT808_CarDVR_Down_0x09(); value.StartTime = reader.ReadDateTime6(); @@ -41,13 +48,5 @@ namespace JT808.Protocol.MessageBody.CarDVR value.Count = reader.ReadUInt16(); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config) - { - JT808_CarDVR_Down_0x09 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x09; - writer.WriteDateTime6(value.StartTime); - writer.WriteDateTime6(value.EndTime); - writer.WriteUInt16(value.Count); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs index f7f377f..ff6dd37 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 返回:符合条件的事故疑点记录 /// 指定的时间范围内无数据记录,则本数据块数据为空 /// - public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies + public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies, IJT808MessagePackFormatter { public override byte CommandId => JT808CarDVRCommandID.采集指定的事故疑点记录.ToByteValue(); @@ -33,7 +33,14 @@ namespace JT808.Protocol.MessageBody.CarDVR /// public ushort Count { get; set; } - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x10 value, IJT808Config config) + { + writer.WriteDateTime6(value.StartTime); + writer.WriteDateTime6(value.EndTime); + writer.WriteUInt16(value.Count); + } + + public JT808_CarDVR_Down_0x10 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Down_0x10 value = new JT808_CarDVR_Down_0x10(); value.StartTime = reader.ReadDateTime6(); @@ -41,13 +48,5 @@ namespace JT808.Protocol.MessageBody.CarDVR value.Count = reader.ReadUInt16(); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config) - { - JT808_CarDVR_Down_0x10 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x10; - writer.WriteDateTime6(value.StartTime); - writer.WriteDateTime6(value.EndTime); - writer.WriteUInt16(value.Count); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs index 53abb9e..532cef6 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs @@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的超时驾驶记录 /// 返回:符合条件的超时驾驶记录 /// - public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies + public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies, IJT808MessagePackFormatter { public override byte CommandId => JT808CarDVRCommandID.采集指定的超时驾驶记录.ToByteValue(); @@ -32,7 +32,14 @@ namespace JT808.Protocol.MessageBody.CarDVR /// public ushort Count { get; set; } - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x11 value, IJT808Config config) + { + writer.WriteDateTime6(value.StartTime); + writer.WriteDateTime6(value.EndTime); + writer.WriteUInt16(value.Count); + } + + public JT808_CarDVR_Down_0x11 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Down_0x11 value = new JT808_CarDVR_Down_0x11(); value.StartTime = reader.ReadDateTime6(); @@ -40,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR value.Count = reader.ReadUInt16(); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config) - { - JT808_CarDVR_Down_0x11 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x11; - writer.WriteDateTime6(value.StartTime); - writer.WriteDateTime6(value.EndTime); - writer.WriteUInt16(value.Count); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs index d60ce34..a4af480 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs @@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的驾驶人身份记录 /// 返回:符合条件的驾驶人登录退出记录 /// - public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies + public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies, IJT808MessagePackFormatter { public override byte CommandId => JT808CarDVRCommandID.采集指定的驾驶人身份记录.ToByteValue(); @@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 最大单位数据块个数 /// public ushort Count { get; set; } - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x12 value, IJT808Config config) + { + writer.WriteDateTime6(value.StartTime); + writer.WriteDateTime6(value.EndTime); + writer.WriteUInt16(value.Count); + } + + public JT808_CarDVR_Down_0x12 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Down_0x12 value = new JT808_CarDVR_Down_0x12(); value.StartTime = reader.ReadDateTime6(); @@ -39,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR value.Count = reader.ReadUInt16(); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config) - { - JT808_CarDVR_Down_0x12 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x12; - writer.WriteDateTime6(value.StartTime); - writer.WriteDateTime6(value.EndTime); - writer.WriteUInt16(value.Count); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs index 891a234..70fd66c 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs @@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的外部供电记录 /// 返回:符合条件的供电记录 /// - public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies + public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies, IJT808MessagePackFormatter { public override byte CommandId => JT808CarDVRCommandID.采集指定的外部供电记录.ToByteValue(); @@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 最大单位数据块个数 /// public ushort Count { get; set; } - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x13 value, IJT808Config config) + { + writer.WriteDateTime6(value.StartTime); + writer.WriteDateTime6(value.EndTime); + writer.WriteUInt16(value.Count); + } + + public JT808_CarDVR_Down_0x13 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Down_0x13 value = new JT808_CarDVR_Down_0x13(); value.StartTime = reader.ReadDateTime6(); @@ -39,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR value.Count = reader.ReadUInt16(); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config) - { - JT808_CarDVR_Down_0x13 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x13; - writer.WriteDateTime6(value.StartTime); - writer.WriteDateTime6(value.EndTime); - writer.WriteUInt16(value.Count); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs index ef19ce6..9730158 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs @@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的参数修改记录 /// 返回:符合条件的参数修改记录 /// - public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies + public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies, IJT808MessagePackFormatter { public override byte CommandId => JT808CarDVRCommandID.采集指定的参数修改记录.ToByteValue(); @@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 最大单位数据块个数 /// public ushort Count { get; set; } - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x14 value, IJT808Config config) + { + writer.WriteDateTime6(value.StartTime); + writer.WriteDateTime6(value.EndTime); + writer.WriteUInt16(value.Count); + } + + public JT808_CarDVR_Down_0x14 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Down_0x14 value = new JT808_CarDVR_Down_0x14(); value.StartTime = reader.ReadDateTime6(); @@ -39,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR value.Count = reader.ReadUInt16(); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config) - { - JT808_CarDVR_Down_0x14 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x14; - writer.WriteDateTime6(value.StartTime); - writer.WriteDateTime6(value.EndTime); - writer.WriteUInt16(value.Count); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs index f590f6e..3118f1f 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs @@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的速度状态日志 /// 返回:符合条件的速度状态日志 /// - public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies + public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies, IJT808MessagePackFormatter { public override byte CommandId => JT808CarDVRCommandID.采集指定的速度状态日志.ToByteValue(); @@ -31,22 +31,21 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 最大单位数据块个数 /// public ushort Count { get; set; } - public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Down_0x15 value = new JT808_CarDVR_Down_0x15(); - value.StartTime = reader.ReadDateTime6(); - value.EndTime = reader.ReadDateTime6(); - value.Count = reader.ReadUInt16(); - return value; - } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x15 value, IJT808Config config) { - JT808_CarDVR_Down_0x15 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x15; writer.WriteDateTime6(value.StartTime); writer.WriteDateTime6(value.EndTime); writer.WriteUInt16(value.Count); } + public JT808_CarDVR_Down_0x15 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + { + JT808_CarDVR_Down_0x15 value = new JT808_CarDVR_Down_0x15(); + value.StartTime = reader.ReadDateTime6(); + value.EndTime = reader.ReadDateTime6(); + value.Count = reader.ReadUInt16(); + return value; + } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs index c7fe60f..342d89c 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs @@ -15,10 +15,23 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置车辆信息 /// 返回:车辆信息 /// - public class JT808_CarDVR_Down_0x82 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Down_0x82 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.设置车辆信息.ToByteValue(); - + /// + /// 车辆识别代号 + /// + public string Vin { get; set; } + /// + /// 机动车号牌号码 + /// 后 3 个字节为备用字 + /// + public string VehicleNo { get; set; } + /// + /// 机动车号牌分类 + /// 后 4 个字节为备用字 + /// + public string VehicleType { get; set; } public override string Description => "车辆信息"; public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) @@ -26,18 +39,24 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x82 value, IJT808Config config) { - JT808_CarDVR_Up_0x82 value = new JT808_CarDVR_Up_0x82(); - - return value; + writer.WriteASCII(value.Vin.PadRight(17, '0')); + writer.WriteASCII(value.VehicleNo.PadRight(9, '0')); + writer.Skip(3, out var reversed1); + writer.WriteString(value.VehicleType.PadRight(6, '0')); + writer.Skip(4, out var reversed2); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Down_0x82 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0x82 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x82; - + JT808_CarDVR_Down_0x82 value = new JT808_CarDVR_Down_0x82(); + value.Vin = reader.ReadASCII(17); + value.VehicleNo = reader.ReadASCII(9); + reader.Skip(3); + value.VehicleType = reader.ReadString(6); + reader.Skip(4); + return value; } - } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs index e53c36a..93e0754 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs @@ -15,10 +15,13 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置记录仪初次安装日期 /// 返回:初次安装日期 /// - public class JT808_CarDVR_Down_0x83 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Down_0x83 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.设置记录仪初次安装日期.ToByteValue(); - + /// + /// 实时时间 + /// + public DateTime RealTime { get; set; } public override string Description => "初次安装日期"; public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) @@ -26,15 +29,16 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x83 value, IJT808Config config) { - JT808_CarDVR_Up_0x83 value = new JT808_CarDVR_Up_0x83(); - return value; + writer.WriteDateTime6(value.RealTime); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Down_0x83 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0x83 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x83; + JT808_CarDVR_Down_0x83 value = new JT808_CarDVR_Down_0x83(); + value.RealTime = reader.ReadDateTime6(); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs index 9b177eb..e63fb5d 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs @@ -15,10 +15,51 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置状态量配置信息 /// 返回:状态量配置信息 /// - public class JT808_CarDVR_Down_0x84 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Down_0x84 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.设置状态量配置信息.ToByteValue(); + /// + /// 实时时间 + /// + public DateTime RealTime { get; set; } + /// + /// 信号字节个数 + /// 单位字节的 D7~D0(由高到低)分别对应 8 个状态信号, 1 表示有操作,0表示无操作 + /// + public byte SignalOperate { get; set; } + /// + /// + /// + public string D0 { get; set; } + public string D1 { get; set; } + + public string D2 { get; set; } + /// + /// 近光 D3 + /// 10个字节,未使用或不足时,补0 + /// + public string NearLight { get; set; } + /// + /// 远光 D4 + /// 10个字节,未使用或不足时,补0 + /// + public string FarLight { get; set; } + /// + /// 右转向 D5 + /// 10个字节,未使用或不足时,补0 + /// + public string RightTurn { get; set; } + /// + /// 左转向 D6 + /// 10个字节,未使用或不足时,补0 + /// + public string LeftTurn { get; set; } + /// + /// 制动 D7 + /// 10个字节,未使用或不足时,补0 + /// + public string Brake { get; set; } public override string Description => "状态量配置信息"; public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) @@ -26,15 +67,34 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x84 value, IJT808Config config) { - JT808_CarDVR_Up_0x84 value = new JT808_CarDVR_Up_0x84(); - return value; + writer.WriteDateTime6(value.RealTime); + writer.WriteByte(value.SignalOperate); + writer.WriteASCII(value.D0.PadRight(0)); + writer.WriteASCII(value.D1.PadRight(0)); + writer.WriteASCII(value.D2.PadRight(0)); + writer.WriteASCII(value.NearLight.PadRight(0)); + writer.WriteASCII(value.FarLight.PadRight(0)); + writer.WriteASCII(value.RightTurn.PadRight(0)); + writer.WriteASCII(value.LeftTurn.PadRight(0)); + writer.WriteASCII(value.Brake.PadRight(0)); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Down_0x84 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0x84 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x84; + JT808_CarDVR_Down_0x84 value = new JT808_CarDVR_Down_0x84(); + value.RealTime = reader.ReadDateTime6(); + value.SignalOperate = reader.ReadByte(); + value.D0 = reader.ReadASCII(10); + value.D1 = reader.ReadASCII(10); + value.D2 = reader.ReadASCII(10); + value.NearLight = reader.ReadASCII(10); + value.FarLight = reader.ReadASCII(10); + value.RightTurn = reader.ReadASCII(10); + value.LeftTurn = reader.ReadASCII(10); + value.Brake = reader.ReadASCII(10); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs index 98ac2f3..c191769 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs @@ -15,10 +15,13 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置记录仪时间 /// 返回:北京时间的日期、时钟 /// - public class JT808_CarDVR_Down_0xC2 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Down_0xC2 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.设置记录仪时间.ToByteValue(); - + /// + /// 实时时间 + /// + public DateTime RealTime { get; set; } public override string Description => "北京时间的日期、时钟"; public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) @@ -26,16 +29,17 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC2 value, IJT808Config config) { - JT808_CarDVR_Up_0xC2 value = new JT808_CarDVR_Up_0xC2(); - return value; + writer.WriteDateTime6(value.RealTime); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Down_0xC2 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0xC2 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC2; - + JT808_CarDVR_Down_0xC2 value = new JT808_CarDVR_Down_0xC2(); + value.RealTime = reader.ReadDateTime6(); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs index d88b66a..cb6a1d9 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs @@ -15,10 +15,21 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置记录仪脉冲系数 /// 返回:记录仪脉冲系数 /// - public class JT808_CarDVR_Down_0xC3 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Down_0xC3 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.设置记录仪脉冲系数.ToByteValue(); - + /// + /// 当前时间 + /// + public DateTime RealTime { get; set; } + /// + /// 脉冲系数高字节 + /// + public byte PulseCoefficientHighByte { get; set; } + /// + /// 仪脉冲系数低字节 + /// + public byte PulseCoefficientLowByte { get; set; } public override string Description => "记录仪脉冲系数"; public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) @@ -26,16 +37,21 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC3 value, IJT808Config config) { - JT808_CarDVR_Up_0xC3 value = new JT808_CarDVR_Up_0xC3(); - return value; + writer.WriteDateTime6(value.RealTime); + writer.WriteByte(value.PulseCoefficientHighByte); + writer.WriteByte(value.PulseCoefficientLowByte); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Down_0xC3 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0xC3 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC3; - + JT808_CarDVR_Down_0xC3 value = new JT808_CarDVR_Down_0xC3(); + value.RealTime = reader.ReadDateTime6(); + value.PulseCoefficientHighByte = reader.ReadByte(); + value.PulseCoefficientLowByte = reader.ReadByte(); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs index a6f54fe..fdb6439 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs @@ -15,9 +15,25 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置初始里程 /// 返回:记录仪初次安装时车辆已行驶的总里程 /// - public class JT808_CarDVR_Down_0xC4 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Down_0xC4 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.设置初始里程.ToByteValue(); + /// + /// 实时时间 + /// + public DateTime RealTime { get; set; } + /// + /// 初次安装时间 + /// + public DateTime FirstInstallTime { get; set; } + /// + /// 初始里程 + /// + public string FirstMileage { get; set; } + /// + /// 累计里程 + /// + public string TotalMilage { get; set; } public override string Description => "车辆识别代号、机动车号牌号码和机动车号牌分类"; public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) @@ -25,15 +41,22 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC4 value, IJT808Config config) { - JT808_CarDVR_Up_0xC4 value = new JT808_CarDVR_Up_0xC4(); - return value; + writer.WriteDateTime6(value.RealTime); + writer.WriteDateTime6(value.FirstInstallTime); + writer.WriteBCD(value.FirstMileage, 8); + writer.WriteBCD(value.TotalMilage, 8); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Down_0xC4 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0xC4 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC4; + JT808_CarDVR_Down_0xC4 value = new JT808_CarDVR_Down_0xC4(); + value.RealTime = reader.ReadDateTime6(); + value.FirstInstallTime = reader.ReadDateTime6(); + value.FirstMileage = reader.ReadBCD(8); + value.TotalMilage = reader.ReadBCD(8); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE0.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE0.cs new file mode 100644 index 0000000..219d426 --- /dev/null +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE0.cs @@ -0,0 +1,26 @@ +using JT808.Protocol.Enums; +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessagePack; +using System; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; + +namespace JT808.Protocol.MessageBody.CarDVR +{ + /// + /// 进入或保持检定状态 + /// 返回:进入或保持检定状态 + /// + public class JT808_CarDVR_Down_0xE0 : JT808CarDVRDownBodies + { + public override byte CommandId => JT808CarDVRCommandID.进入或保持检定状态.ToByteValue(); + + public override string Description => "进入或保持检定状态"; + public override bool SkipSerialization { get; set; } = true; + + } +} diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs new file mode 100644 index 0000000..cc1bd17 --- /dev/null +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs @@ -0,0 +1,69 @@ +using JT808.Protocol.Enums; +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessagePack; +using System; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; + +namespace JT808.Protocol.MessageBody.CarDVR +{ + /// + /// 进入里程误差测量 + /// 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平) + /// + public class JT808_CarDVR_Down_0xE1 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, IJT808Analyze + { + public override byte CommandId => JT808CarDVRCommandID.进入里程误差测量.ToByteValue(); + /// + /// 记录仪唯一性编号 + /// + public string UniqueNumber { get; set; } + /// + /// 脉冲系数 + /// + public ushort PulseCoefficient { get; set; } + /// + /// 当前速度 + /// + public ushort Speed { get; set; } + /// + /// 累计里程 单位为米 + /// 单位为 0.1 千米每小时 + /// + public uint TotalMileage { get; set; } + /// + /// 状态信号 + /// + public byte StatusSignal { get; set; } + public override string Description => "通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平)"; + + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + + } + + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xE1 value, IJT808Config config) + { + writer.WriteASCII(value.UniqueNumber.PadRight(35, '0')); + writer.WriteUInt16(value.PulseCoefficient); + writer.WriteUInt16(value.Speed); + writer.WriteUInt32(value.TotalMileage); + writer.WriteByte(value.StatusSignal); + } + + public JT808_CarDVR_Down_0xE1 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + { + JT808_CarDVR_Down_0xE1 value = new JT808_CarDVR_Down_0xE1(); + value.UniqueNumber = reader.ReadASCII(35); + value.PulseCoefficient = reader.ReadUInt16(); + value.Speed = reader.ReadUInt16(); + value.TotalMileage = reader.ReadUInt32(); + value.StatusSignal = reader.ReadByte(); + return value; + } + } +} diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE2.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE2.cs new file mode 100644 index 0000000..4054967 --- /dev/null +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE2.cs @@ -0,0 +1,26 @@ +using JT808.Protocol.Enums; +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessagePack; +using System; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; + +namespace JT808.Protocol.MessageBody.CarDVR +{ + /// + /// 进入脉冲系数误差测量 + /// 返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平) + /// + public class JT808_CarDVR_Down_0xE2 : JT808CarDVRDownBodies + { + public override byte CommandId => JT808CarDVRCommandID.进入脉冲系数误差测量.ToByteValue(); + + public override string Description => "通过 DB9 的 7 脚输出车速传感器信号(TTL 电平)"; + + public override bool SkipSerialization { get; set; } = true; + } +} diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE3.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE3.cs new file mode 100644 index 0000000..40103d9 --- /dev/null +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE3.cs @@ -0,0 +1,25 @@ +using JT808.Protocol.Enums; +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessagePack; +using System; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; + +namespace JT808.Protocol.MessageBody.CarDVR +{ + /// + /// 进入实时时间误差测量 + /// 返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平) + /// + public class JT808_CarDVR_Down_0xE3 : JT808CarDVRDownBodies + { + public override byte CommandId => JT808CarDVRCommandID.进入实时时间误差测量.ToByteValue(); + + public override string Description => "通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平)"; + public override bool SkipSerialization { get; set; } = true; + } +} diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE4.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE4.cs new file mode 100644 index 0000000..8b08766 --- /dev/null +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE4.cs @@ -0,0 +1,25 @@ +using JT808.Protocol.Enums; +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessagePack; +using System; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; + +namespace JT808.Protocol.MessageBody.CarDVR +{ + /// + /// 返回正常工作状态 + /// 返回:返回正常工作状态 + /// + public class JT808_CarDVR_Down_0xE4 : JT808CarDVRDownBodies + { + public override byte CommandId => JT808CarDVRCommandID.返回正常工作状态.ToByteValue(); + public override string Description => "返回正常工作状态"; + + public override bool SkipSerialization { get; set; } = true; + } +} diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs index b0b24f8..7df4678 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集记录仪执行标准版本 /// 返回:记录仪执行标准的年号及修改单号 /// - public class JT808_CarDVR_Up_0x00 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x00 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集记录仪执行标准版本.ToByteValue(); /// @@ -35,20 +35,18 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x00 value, IJT808Config config) + { + writer.WriteBCD(value.StandardYear, 2); + writer.WriteByte(value.ModifyNumber); + } + + public JT808_CarDVR_Up_0x00 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x00 value = new JT808_CarDVR_Up_0x00(); value.StandardYear = reader.ReadBCD(2); value.ModifyNumber = reader.ReadByte(); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x00 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x00; - writer.WriteBCD(value.StandardYear, 2); - writer.WriteByte(value.ModifyNumber); - } - } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs index d6b89e7..fbc47de 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 机动车驾驶证号码 /// 返回:当前驾驶人的机动车驾驶证号码 /// - public class JT808_CarDVR_Up_0x01 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x01 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集当前驾驶人信息.ToByteValue(); /// @@ -30,17 +30,18 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x01 value, IJT808Config config) { - JT808_CarDVR_Up_0x01 value = new JT808_CarDVR_Up_0x01(); - value.DriverLicenseNo = reader.ReadASCII(18); - return value; + var currentPosition = writer.GetCurrentPosition(); + writer.WriteASCII(value.DriverLicenseNo); + writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Up_0x01 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0x01 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x01; - writer.WriteASCII(value.DriverLicenseNo.PadRight(18,'0')); + JT808_CarDVR_Up_0x01 value = new JT808_CarDVR_Up_0x01(); + value.DriverLicenseNo = reader.ReadASCII(18); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs index e1ab8c3..9f28e5d 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集记录仪实时时间 /// 返回:实时时间 /// - public class JT808_CarDVR_Up_0x02 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x02 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集记录仪实时时间.ToByteValue(); /// @@ -29,17 +29,16 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x02 value, IJT808Config config) { - JT808_CarDVR_Up_0x02 value = new JT808_CarDVR_Up_0x02(); - value.RealTime = reader.ReadDateTime6(); - return value; + writer.WriteDateTime6(value.RealTime); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Up_0x02 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0x02 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x02; - writer.WriteDateTime6(value.RealTime); + JT808_CarDVR_Up_0x02 value = new JT808_CarDVR_Up_0x02(); + value.RealTime = reader.ReadDateTime6(); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs index 3a72347..1d997f4 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集累计行驶里程 /// 返回:实时时间、安装时的初始里程及安装后的累计行驶里程 /// - public class JT808_CarDVR_Up_0x03 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x03 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集累计行驶里程.ToByteValue(); /// @@ -41,7 +41,15 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x03 value, IJT808Config config) + { + writer.WriteDateTime6(value.RealTime); + writer.WriteDateTime6(value.FirstInstallTime); + writer.WriteBCD(value.FirstMileage, 8); + writer.WriteBCD(value.TotalMilage, 8); + } + + public JT808_CarDVR_Up_0x03 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x03 value = new JT808_CarDVR_Up_0x03(); value.RealTime = reader.ReadDateTime6(); @@ -50,14 +58,5 @@ namespace JT808.Protocol.MessageBody.CarDVR value.TotalMilage = reader.ReadBCD(8); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x03 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x03; - writer.WriteDateTime6(value.RealTime); - writer.WriteDateTime6(value.FirstInstallTime); - writer.WriteBCD(value.FirstMileage, 8); - writer.WriteBCD(value.TotalMilage, 8); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs index cd958a7..020e395 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集记录仪脉冲系数 /// 返回:实时时间及设定的脉冲系数 /// - public class JT808_CarDVR_Up_0x04 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x04 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集记录仪脉冲系数.ToByteValue(); /// @@ -25,11 +25,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// /// 脉冲系数高字节 /// - public byte PulseCoefficientHighByte { get; set; } - /// - /// 仪脉冲系数低字节 - /// - public byte PulseCoefficientLowByte { get; set; } + public ushort PulseCoefficient { get; set; } public override string Description => "实时时间及设定的脉冲系数"; @@ -38,21 +34,18 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x04 value, IJT808Config config) { - JT808_CarDVR_Up_0x04 value = new JT808_CarDVR_Up_0x04(); - value.RealTime= reader.ReadDateTime6(); - value.PulseCoefficientHighByte = reader.ReadByte(); - value.PulseCoefficientLowByte = reader.ReadByte(); - return value; + writer.WriteDateTime6(value.RealTime); + writer.WriteUInt16(value.PulseCoefficient); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Up_0x04 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0x04 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x04; - writer.WriteDateTime6(value.RealTime); - writer.WriteByte(value.PulseCoefficientHighByte); - writer.WriteByte(value.PulseCoefficientLowByte); + JT808_CarDVR_Up_0x04 value = new JT808_CarDVR_Up_0x04(); + value.RealTime = reader.ReadDateTime6(); + value.PulseCoefficient = reader.ReadUInt16(); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs index e3f06a1..28a7518 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集车辆信息 /// 返回:车辆识别代号、机动车号牌号码和机动车号牌分类 /// - public class JT808_CarDVR_Up_0x05 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x05 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集车辆信息.ToByteValue(); /// @@ -39,25 +39,26 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x05 value, IJT808Config config) { - JT808_CarDVR_Up_0x05 value = new JT808_CarDVR_Up_0x05(); - value.Vin= reader.ReadASCII(17); - value.VehicleNo = reader.ReadASCII(9); - reader.Skip(3); - value.VehicleType = reader.ReadString(6); - reader.Skip(4); - return value; + var currentPosition = writer.GetCurrentPosition(); + writer.WriteASCII(value.Vin); + writer.Skip(17 - (writer.GetCurrentPosition()- currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.VehicleNo); + writer.Skip(12 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.VehicleType); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); } - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) + public JT808_CarDVR_Up_0x05 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - JT808_CarDVR_Up_0x05 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x05; - writer.WriteASCII(value.Vin.PadRight(17,'0')); - writer.WriteASCII(value.VehicleNo); - writer.Skip(12 - value.VehicleNo.Length, out var vehicleNo); - writer.WriteString(value.VehicleType); - writer.Skip(10 - value.VehicleType.Length, out var vehicleType); + JT808_CarDVR_Up_0x05 value = new JT808_CarDVR_Up_0x05(); + value.Vin = reader.ReadASCII(17); + value.VehicleNo = reader.ReadString(12); + value.VehicleType = reader.ReadString(10); + return value; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs index 42b6716..35424be 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集记录仪状态信号配置信息 /// 返回:状态信号配置信息 /// - public class JT808_CarDVR_Up_0x06 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x06 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集记录仪状态信号配置信息.ToByteValue(); /// @@ -68,35 +68,50 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x06 value, IJT808Config config) + { + writer.WriteDateTime6(value.RealTime); + writer.WriteByte(value.SignalOperate); + var currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.D0); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.D1); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.D2); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.NearLight); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.FarLight); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.RightTurn); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.LeftTurn); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.Brake); + writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _); + } + + public JT808_CarDVR_Up_0x06 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x06 value = new JT808_CarDVR_Up_0x06(); value.RealTime = reader.ReadDateTime6(); value.SignalOperate = reader.ReadByte(); - value.D0 = reader.ReadASCII(10); - value.D1 = reader.ReadASCII(10); - value.D2 = reader.ReadASCII(10); - value.NearLight = reader.ReadASCII(10); - value.FarLight = reader.ReadASCII(10); - value.RightTurn = reader.ReadASCII(10); - value.LeftTurn = reader.ReadASCII(10); - value.Brake = reader.ReadASCII(10); + value.D0 = reader.ReadString(10); + value.D1 = reader.ReadString(10); + value.D2 = reader.ReadString(10); + value.NearLight = reader.ReadString(10); + value.FarLight = reader.ReadString(10); + value.RightTurn = reader.ReadString(10); + value.LeftTurn = reader.ReadString(10); + value.Brake = reader.ReadString(10); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x06 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x06; - writer.WriteDateTime6(value.RealTime); - writer.WriteByte(value.SignalOperate); - writer.WriteASCII(value.D0.PadRight(0)); - writer.WriteASCII(value.D1.PadRight(0)); - writer.WriteASCII(value.D2.PadRight(0)); - writer.WriteASCII(value.NearLight.PadRight(0)); - writer.WriteASCII(value.FarLight.PadRight(0)); - writer.WriteASCII(value.RightTurn.PadRight(0)); - writer.WriteASCII(value.LeftTurn.PadRight(0)); - writer.WriteASCII(value.Brake.PadRight(0)); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs index a4f8b70..35983f6 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集记录仪唯一性编号 /// 返回:唯一性编号及初次安装日期 /// - public class JT808_CarDVR_Up_0x07 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x07 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集记录仪唯一性编号.ToByteValue(); /// @@ -45,25 +45,32 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x07 value, IJT808Config config) + { + var currentPosition = writer.GetCurrentPosition(); + writer.WriteASCII(value.ProductionPlantCCCCertificationCode); + writer.Skip(7 - (writer.GetCurrentPosition()- currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteASCII(value.CertifiedProductModels); + writer.Skip(16 - (writer.GetCurrentPosition()- currentPosition), out var _); + writer.WriteDateTime3(value.ProductionDate); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.ProductProductionFlowNumber); + writer.Skip(4 - (writer.GetCurrentPosition() - currentPosition), out var _); + currentPosition = writer.GetCurrentPosition(); + writer.WriteString(value.Reversed); + writer.Skip(5 - (writer.GetCurrentPosition() - currentPosition), out var _); + } + + public JT808_CarDVR_Up_0x07 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x07 value = new JT808_CarDVR_Up_0x07(); value.ProductionPlantCCCCertificationCode = reader.ReadASCII(7); value.CertifiedProductModels = reader.ReadASCII(16); value.ProductionDate = reader.ReadDateTime3(); - value.ProductProductionFlowNumber = reader.ReadASCII(4); - value.Reversed = reader.ReadASCII(5); + value.ProductProductionFlowNumber = reader.ReadString(4); + value.Reversed = reader.ReadString(5); return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x07 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x07; - writer.WriteASCII(value.ProductionPlantCCCCertificationCode.PadRight(7,'0')); - writer.WriteASCII(value.CertifiedProductModels.PadRight(16, '0')); - writer.WriteDateTime3(value.ProductionDate); - writer.WriteASCII(value.ProductProductionFlowNumber.PadRight(4,'0')); - writer.WriteASCII(value.Reversed.PadRight(5, '0')); - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs index ebce9d2..c9f3b9b 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs @@ -16,7 +16,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 返回:符合条件的行驶速度记录 /// 如在指定的时间范围内无数据记录,则本数据块数据为空 /// - public class JT808_CarDVR_Up_0x08 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x08 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集指定的行驶速度记录.ToByteValue(); /// @@ -30,10 +30,31 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x08 value, IJT808Config config) + { + foreach (var speedPerMinute in value.JT808_CarDVR_Up_0x08_SpeedPerMinutes) + { + writer.WriteDateTime6(speedPerMinute.StartTime); + for (int i = 0; i < 60; i++) + { + if (i < speedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds.Count) + { + writer.WriteByte(speedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds[i].AvgSpeedAfterStartTime); + writer.WriteByte(speedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds[i].StatusSignalAfterStartTime); + } + else { + writer.WriteByte(0xFF); + writer.WriteByte(0xFF); + } + } + } + } + + public JT808_CarDVR_Up_0x08 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x08 value = new JT808_CarDVR_Up_0x08(); - var count = (reader.ReadCurrentRemainContentLength() - 1 - 1)/126;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 + value.JT808_CarDVR_Up_0x08_SpeedPerMinutes = new List(); + var count = (reader.ReadCurrentRemainContentLength() - 1) / 126;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x08_SpeedPerMinute jT808_CarDVR_Up_0X08_SpeedPerMinute = new JT808_CarDVR_Up_0x08_SpeedPerMinute() @@ -49,53 +70,40 @@ namespace JT808.Protocol.MessageBody.CarDVR StatusSignalAfterStartTime = reader.ReadByte() }); } + value.JT808_CarDVR_Up_0x08_SpeedPerMinutes.Add(jT808_CarDVR_Up_0X08_SpeedPerMinute); } return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x08 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x08; - foreach (var speedPerMinute in value.JT808_CarDVR_Up_0x08_SpeedPerMinutes) - { - writer.WriteDateTime6(speedPerMinute.StartTime); - foreach (var speedPerSecond in speedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds) - { - writer.WriteByte(speedPerSecond.AvgSpeedAfterStartTime); - writer.WriteByte(speedPerSecond.StatusSignalAfterStartTime); - } - } - } + } + /// + /// 单位分钟行驶速度记录数据块格式 + /// 1.本数据块总长度为 126 个字节,不足部分以 FFH补齐; + /// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 + /// + public class JT808_CarDVR_Up_0x08_SpeedPerMinute + { /// - /// 单位分钟行驶速度记录数据块格式 - /// 1.本数据块总长度为 126 个字节,不足部分以 FFH补齐; - /// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 + /// 开始时间 /// - public class JT808_CarDVR_Up_0x08_SpeedPerMinute - { - /// - /// 开始时间 - /// - public DateTime StartTime { get; set; } - /// - /// 60s钟,每秒的信息 - /// - public List JT808_CarDVR_Up_0x08_SpeedPerSeconds { get; set; } + public DateTime StartTime { get; set; } + /// + /// 60s钟,每秒的信息 + /// + public List JT808_CarDVR_Up_0x08_SpeedPerSeconds { get; set; } - } + } + /// + /// 开始时间之后每秒钟的平均速度和状态信号 + /// + public class JT808_CarDVR_Up_0x08_SpeedPerSecond + { /// - /// 开始时间之后每秒钟的平均速度和状态信号 + /// 开始时间之后每秒钟的平均速度 /// - public class JT808_CarDVR_Up_0x08_SpeedPerSecond - { - /// - /// 开始时间之后每秒钟的平均速度 - /// - public byte AvgSpeedAfterStartTime { get; set; } - /// - /// 开始时间之后每秒钟的状态信号 - /// - public byte StatusSignalAfterStartTime { get; set; } - } + public byte AvgSpeedAfterStartTime { get; set; } + /// + /// 开始时间之后每秒钟的状态信号 + /// + public byte StatusSignalAfterStartTime { get; set; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs index 8b68847..ff3fe44 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs @@ -16,7 +16,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 返回:符合条件的位置信息记录 /// 指定的时间范围内无数据记录,则本数据块数据为空 /// - public class JT808_CarDVR_Up_0x09 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x09 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集指定的位置信息记录.ToByteValue(); /// @@ -29,11 +29,35 @@ namespace JT808.Protocol.MessageBody.CarDVR { } + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x09 value, IJT808Config config) + { + foreach (var positionPerHour in value.JT808_CarDVR_Up_0x09_PositionPerHours) + { + writer.WriteDateTime6(positionPerHour.StartTime); + for (int i = 0; i < 60; i++) + { + if (i < positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes.Count) + { + writer.WriteInt32(positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes[i].GpsLng); + writer.WriteInt32(positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes[i].GpsLat); + writer.WriteInt16(positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes[i].Height); + writer.WriteByte(positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes[i].AvgSpeedAfterStartTime); + } + else { + writer.WriteUInt32(0xFFFFFFFF); + writer.WriteUInt32(0xFFFFFFFF); + writer.WriteUInt16(0xFFFF); + writer.WriteByte(0xFF); + } + } + } + } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public JT808_CarDVR_Up_0x09 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x09 value = new JT808_CarDVR_Up_0x09(); - var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 666;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 + value.JT808_CarDVR_Up_0x09_PositionPerHours = new List(); + var count = (reader.ReadCurrentRemainContentLength() - 1) / 666;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x09_PositionPerHour jT808_CarDVR_Up_0x09_PositionPerHour = new JT808_CarDVR_Up_0x09_PositionPerHour() @@ -51,63 +75,48 @@ namespace JT808.Protocol.MessageBody.CarDVR AvgSpeedAfterStartTime = reader.ReadByte() }); } + value.JT808_CarDVR_Up_0x09_PositionPerHours.Add(jT808_CarDVR_Up_0x09_PositionPerHour); } return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x09 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x09; - foreach (var positionPerHour in value.JT808_CarDVR_Up_0x09_PositionPerHours) - { - writer.WriteDateTime6(positionPerHour.StartTime); - foreach (var positionPerMinute in positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes) - { - writer.WriteInt32(positionPerMinute.GpsLng); - writer.WriteInt32(positionPerMinute.GpsLat); - writer.WriteInt16(positionPerMinute.Height); - writer.WriteByte(positionPerMinute.AvgSpeedAfterStartTime); - } - } - } + } + /// + /// 指定的结束时间之前最近的每 小时的位置信息记录 + /// 1.本数据块总长度为 666 个字节,不足部分以 FFH补齐; + /// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 + /// + public class JT808_CarDVR_Up_0x09_PositionPerHour + { /// - /// 指定的结束时间之前最近的每 小时的位置信息记录 - /// 1.本数据块总长度为 666 个字节,不足部分以 FFH补齐; - /// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 + /// 开始时间 /// - public class JT808_CarDVR_Up_0x09_PositionPerHour - { - /// - /// 开始时间 - /// - public DateTime StartTime { get; set; } - /// - /// 60s钟,每秒的信息 - /// - public List JT808_CarDVR_Up_0x09_PositionPerMinutes { get; set; } + public DateTime StartTime { get; set; } + /// + /// 60s钟,每秒的信息 + /// + public List JT808_CarDVR_Up_0x09_PositionPerMinutes { get; set; } - } + } + /// + /// 开始时间之后每分钟的平均速度和位置信息 + /// + public class JT808_CarDVR_Up_0x09_PositionPerMinute + { /// - /// 开始时间之后每分钟的平均速度和位置信息 + /// 经度 /// - public class JT808_CarDVR_Up_0x09_PositionPerMinute - { - /// - /// 经度 - /// - public int GpsLng { get; set; } - /// - /// 纬度 - /// - public int GpsLat { get; set; } - /// - /// 高度 - /// - public short Height { get; set; } - /// - /// 开始时间之后每分钟的平均速度 - /// - public byte AvgSpeedAfterStartTime { get; set; } - } + public int GpsLng { get; set; } + /// + /// 纬度 + /// + public int GpsLat { get; set; } + /// + /// 高度 + /// + public short Height { get; set; } + /// + /// 开始时间之后每分钟的平均速度 + /// + public byte AvgSpeedAfterStartTime { get; set; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs index f675621..fcd3db7 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs @@ -17,7 +17,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 返回:符合条件的事故疑点记录 /// 指定的时间范围内无数据记录,则本数据块数据为空 /// - public class JT808_CarDVR_Up_0x10 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x10 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集指定的事故疑点记录.ToByteValue(); /// @@ -31,10 +31,38 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x10 value, IJT808Config config) + { + foreach (var accidentSuspectin in value.JT808_CarDVR_Up_0x10_AccidentSuspectins) + { + writer.WriteDateTime6(accidentSuspectin.EndTime); + var currentPosition = writer.GetCurrentPosition(); + writer.WriteASCII(accidentSuspectin.DriverLicenseNo); + writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _); + for (int i = 0; i < 100; i++) + { + if (i < accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss.Count) + { + writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss[i].Speed); + writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss[i].StatusSignal); + } + else + { + writer.WriteByte(0xFF); + writer.WriteByte(0xFF); + } + } + writer.WriteInt32(accidentSuspectin.GpsLng); + writer.WriteInt32(accidentSuspectin.GpsLat); + writer.WriteInt16(accidentSuspectin.Height); + } + } + + public JT808_CarDVR_Up_0x10 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x10 value = new JT808_CarDVR_Up_0x10(); - var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 234;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 + value.JT808_CarDVR_Up_0x10_AccidentSuspectins = new List(); + var count = (reader.ReadCurrentRemainContentLength() - 1) / 234;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x10_AccidentSuspectin jT808_CarDVR_Up_0x10_AccidentSuspectin = new JT808_CarDVR_Up_0x10_AccidentSuspectin(); @@ -52,73 +80,56 @@ namespace JT808.Protocol.MessageBody.CarDVR jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng = reader.ReadInt32(); jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat = reader.ReadInt32(); jT808_CarDVR_Up_0x10_AccidentSuspectin.Height = reader.ReadInt16(); + value.JT808_CarDVR_Up_0x10_AccidentSuspectins.Add(jT808_CarDVR_Up_0x10_AccidentSuspectin); } return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x10 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x10; - foreach (var accidentSuspectin in value.JT808_CarDVR_Up_0x10_AccidentSuspectins) - { - writer.WriteDateTime6(accidentSuspectin.EndTime); - writer.WriteASCII(accidentSuspectin.DriverLicenseNo.PadRight(18, '0')); - foreach (var drivingStatus in accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss) - { - writer.WriteByte(drivingStatus.Speed); - writer.WriteByte(drivingStatus.StatusSignal); - } - writer.WriteInt32(accidentSuspectin.GpsLng); - writer.WriteInt32(accidentSuspectin.GpsLat); - writer.WriteInt16(accidentSuspectin.Height); - } - } + } + /// + /// 指定的结束时间之前最近的每条事故疑点记录 + /// 1.本数据块总长度为 234 个字节; + /// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 + /// + public class JT808_CarDVR_Up_0x10_AccidentSuspectin + { /// - /// 指定的结束时间之前最近的每条事故疑点记录 - /// 1.本数据块总长度为 234 个字节; - /// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 + /// 行驶结束时间 /// - public class JT808_CarDVR_Up_0x10_AccidentSuspectin - { - /// - /// 行驶结束时间 - /// - public DateTime EndTime { get; set; } - /// - /// 机动车驾驶证号码 - /// - public string DriverLicenseNo { get; set; } - /// - /// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列 - /// - public List JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; } - /// - /// 经度 - /// - public int GpsLng { get; set; } - /// - /// 纬度 - /// - public int GpsLat { get; set; } - /// - /// 高度 - /// - public short Height { get; set; } + public DateTime EndTime { get; set; } + /// + /// 机动车驾驶证号码 + /// + public string DriverLicenseNo { get; set; } + /// + /// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列 + /// + public List JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; } + /// + /// 经度 + /// + public int GpsLng { get; set; } + /// + /// 纬度 + /// + public int GpsLat { get; set; } + /// + /// 高度 + /// + public short Height { get; set; } - } + } + /// + /// 行驶结束时间前的状态 + /// + public class JT808_CarDVR_Up_0x10_DrivingStatus + { /// - /// 行驶结束时间前的状态 + /// 速度 /// - public class JT808_CarDVR_Up_0x10_DrivingStatus - { - /// - /// 速度 - /// - public byte Speed { get; set; } - /// - /// 状态信号 - /// - public byte StatusSignal { get; set; } - } + public byte Speed { get; set; } + /// + /// 状态信号 + /// + public byte StatusSignal { get; set; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs index 77a4b16..627ae55 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的超时驾驶记录 /// 返回:符合条件的超时驾驶记录 /// - public class JT808_CarDVR_Up_0x11 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x11 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集指定的超时驾驶记录.ToByteValue(); /// @@ -29,11 +29,27 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x11 value, IJT808Config config) + { + foreach (var driveOverTime in value.JT808_CarDVR_Up_0x11_DriveOverTimes) + { + writer.WriteASCII(driveOverTime.DriverLicenseNo.PadRight(18, '0')); + writer.WriteDateTime6(driveOverTime.ContinueDrivingStartTime); + writer.WriteDateTime6(driveOverTime.ContinueDrivingEndTime); + writer.WriteInt32(driveOverTime.GpsStartLng); + writer.WriteInt32(driveOverTime.GpsStartLat); + writer.WriteInt16(driveOverTime.StartHeight); + writer.WriteInt32(driveOverTime.GpsEndLng); + writer.WriteInt32(driveOverTime.GpsStartLat); + writer.WriteInt16(driveOverTime.EndHeight); + } + } + + public JT808_CarDVR_Up_0x11 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x11 value = new JT808_CarDVR_Up_0x11(); value.JT808_CarDVR_Up_0x11_DriveOverTimes = new List(); - var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 50;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 + var count = (reader.ReadCurrentRemainContentLength() - 1) / 50;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x11_DriveOverTime jT808_CarDVR_Up_0x11_DriveOverTime = new JT808_CarDVR_Up_0x11_DriveOverTime(); @@ -50,64 +66,47 @@ namespace JT808.Protocol.MessageBody.CarDVR } return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x11 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x11; - foreach (var driveOverTime in value.JT808_CarDVR_Up_0x11_DriveOverTimes) - { - writer.WriteASCII(driveOverTime.DriverLicenseNo.PadRight(18, '0')); - writer.WriteDateTime6(driveOverTime.ContinueDrivingStartTime); - writer.WriteDateTime6(driveOverTime.ContinueDrivingEndTime); - writer.WriteInt32(driveOverTime.GpsStartLng); - writer.WriteInt32(driveOverTime.GpsStartLat); - writer.WriteInt16(driveOverTime.StartHeight); - writer.WriteInt32(driveOverTime.GpsEndLng); - writer.WriteInt32(driveOverTime.GpsStartLat); - writer.WriteInt16(driveOverTime.EndHeight); - } - } + } + /// + /// 单位超时驾驶记录数据块 + /// + public class JT808_CarDVR_Up_0x11_DriveOverTime + { /// - /// 单位超时驾驶记录数据块 + /// 机动车驾驶证号码 18位 /// - public class JT808_CarDVR_Up_0x11_DriveOverTime - { - /// - /// 机动车驾驶证号码 18位 - /// - public string DriverLicenseNo { get; set; } - /// - /// 连续驾驶开始时间 - /// - public DateTime ContinueDrivingStartTime { get; set; } - /// - /// 连续驾驶结束时间 - /// - public DateTime ContinueDrivingEndTime { get; set; } - /// - /// 经度 - /// - public int GpsStartLng { get; set; } - /// - /// 纬度 - /// - public int GpsStartLat { get; set; } - /// - /// 高度 - /// - public short StartHeight { get; set; } - /// - /// 经度 - /// - public int GpsEndLng { get; set; } - /// - /// 纬度 - /// - public int GpsEndLat { get; set; } - /// - /// 高度 - /// - public short EndHeight { get; set; } - } + public string DriverLicenseNo { get; set; } + /// + /// 连续驾驶开始时间 + /// + public DateTime ContinueDrivingStartTime { get; set; } + /// + /// 连续驾驶结束时间 + /// + public DateTime ContinueDrivingEndTime { get; set; } + /// + /// 经度 + /// + public int GpsStartLng { get; set; } + /// + /// 纬度 + /// + public int GpsStartLat { get; set; } + /// + /// 高度 + /// + public short StartHeight { get; set; } + /// + /// 经度 + /// + public int GpsEndLng { get; set; } + /// + /// 纬度 + /// + public int GpsEndLat { get; set; } + /// + /// 高度 + /// + public short EndHeight { get; set; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs index 4d55e0e..0e6dda1 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的驾驶人身份记录 /// 返回:符合条件的驾驶人登录退出记录 /// - public class JT808_CarDVR_Up_0x12 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x12 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集指定的驾驶人身份记录.ToByteValue(); /// @@ -29,11 +29,21 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x12 value, IJT808Config config) + { + foreach (var driveLogin in value.JT808_CarDVR_Up_0x12_DriveLogins) + { + writer.WriteDateTime6(driveLogin.LoginTime); + writer.WriteASCII(driveLogin.DriverLicenseNo.PadRight(18, '0')); + writer.WriteByte(driveLogin.LoginType); + } + } + + public JT808_CarDVR_Up_0x12 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x12 value = new JT808_CarDVR_Up_0x12(); - value.JT808_CarDVR_Up_0x12_DriveLogins= new List(); - var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 25;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 + value.JT808_CarDVR_Up_0x12_DriveLogins = new List(); + var count = (reader.ReadCurrentRemainContentLength() - 1) / 25;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x12_DriveLogin jT808_CarDVR_Up_0x12_DriveLogin = new JT808_CarDVR_Up_0x12_DriveLogin(); @@ -44,34 +54,23 @@ namespace JT808.Protocol.MessageBody.CarDVR } return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x12 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x12; - foreach (var driveLogin in value.JT808_CarDVR_Up_0x12_DriveLogins) - { - writer.WriteDateTime6(driveLogin.LoginTime); - writer.WriteASCII(driveLogin.DriverLicenseNo.PadRight(18, '0')); - writer.WriteByte(driveLogin.LoginType); - } - } + } + /// + /// 单位驾驶人身份记录数据块格式 + /// + public class JT808_CarDVR_Up_0x12_DriveLogin + { /// - /// 单位驾驶人身份记录数据块格式 + /// 登入登出时间发生时间 /// - public class JT808_CarDVR_Up_0x12_DriveLogin - { - /// - /// 登入登出时间发生时间 - /// - public DateTime LoginTime { get; set; } - /// - /// 机动车驾驶证号码 18位 - /// - public string DriverLicenseNo { get; set; } - /// - /// 事件类型 - /// - public byte LoginType { get; set; } - } + public DateTime LoginTime { get; set; } + /// + /// 机动车驾驶证号码 18位 + /// + public string DriverLicenseNo { get; set; } + /// + /// 事件类型 + /// + public byte LoginType { get; set; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs index 36bfd93..61405b7 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的外部供电记录 /// 返回:符合条件的供电记录 /// - public class JT808_CarDVR_Up_0x13 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x13 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集指定的外部供电记录.ToByteValue(); /// @@ -28,12 +28,20 @@ namespace JT808.Protocol.MessageBody.CarDVR { } + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x13 value, IJT808Config config) + { + foreach (var externalPowerSupply in value.JT808_CarDVR_Up_0x13_ExternalPowerSupplys) + { + writer.WriteDateTime6(externalPowerSupply.EventTime); + writer.WriteByte(externalPowerSupply.EventType); + } + } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public JT808_CarDVR_Up_0x13 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x13 value = new JT808_CarDVR_Up_0x13(); value.JT808_CarDVR_Up_0x13_ExternalPowerSupplys = new List(); - var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 7;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 + var count = (reader.ReadCurrentRemainContentLength() - 1) / 7;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x13_ExternalPowerSupply jT808_CarDVR_Up_0x13_ExternalPowerSupply = new JT808_CarDVR_Up_0x13_ExternalPowerSupply(); @@ -43,29 +51,19 @@ namespace JT808.Protocol.MessageBody.CarDVR } return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x13 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x13; - foreach (var externalPowerSupply in value.JT808_CarDVR_Up_0x13_ExternalPowerSupplys) - { - writer.WriteDateTime6(externalPowerSupply.EventTime); - writer.WriteByte(externalPowerSupply.EventType); - } - } + } + /// + /// 单位记录仪外部供电记录数据块格式 + /// + public class JT808_CarDVR_Up_0x13_ExternalPowerSupply + { /// - /// 单位记录仪外部供电记录数据块格式 + /// 事件发生时间 /// - public class JT808_CarDVR_Up_0x13_ExternalPowerSupply - { - /// - /// 事件发生时间 - /// - public DateTime EventTime { get; set; } - /// - /// 事件类型 - /// - public byte EventType { get; set; } - } + public DateTime EventTime { get; set; } + /// + /// 事件类型 + /// + public byte EventType { get; set; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs index 421b528..5828463 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的参数修改记录 /// 返回:符合条件的参数修改记录 /// - public class JT808_CarDVR_Up_0x14 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x14 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集指定的参数修改记录.ToByteValue(); /// @@ -29,11 +29,20 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x14 value, IJT808Config config) + { + foreach (var parameterModify in value.JT808_CarDVR_Up_0x14_ParameterModifys) + { + writer.WriteDateTime6(parameterModify.EventTime); + writer.WriteByte(parameterModify.EventType); + } + } + + public JT808_CarDVR_Up_0x14 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x14 value = new JT808_CarDVR_Up_0x14(); value.JT808_CarDVR_Up_0x14_ParameterModifys = new List(); - var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 7;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 + var count = (reader.ReadCurrentRemainContentLength() - 1) / 7;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x14_ParameterModify jT808_CarDVR_Up_0x14_ParameterModify = new JT808_CarDVR_Up_0x14_ParameterModify(); @@ -43,29 +52,19 @@ namespace JT808.Protocol.MessageBody.CarDVR } return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x14 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x14; - foreach (var parameterModify in value.JT808_CarDVR_Up_0x14_ParameterModifys) - { - writer.WriteDateTime6(parameterModify.EventTime); - writer.WriteByte(parameterModify.EventType); - } - } + } + /// + /// 单位参数修改记录数据块格式 + /// + public class JT808_CarDVR_Up_0x14_ParameterModify + { /// - /// 单位记录仪外部供电记录数据块格式 + /// 事件发生时间 /// - public class JT808_CarDVR_Up_0x14_ParameterModify - { - /// - /// 事件发生时间 - /// - public DateTime EventTime { get; set; } - /// - /// 事件类型 - /// - public byte EventType { get; set; } - } + public DateTime EventTime { get; set; } + /// + /// 事件类型 + /// + public byte EventType { get; set; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs index 75a18e5..85cd66e 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs @@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 采集指定的速度状态日志 /// 返回:符合条件的速度状态日志 /// - public class JT808_CarDVR_Up_0x15 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x15 : JT808CarDVRUpBodies, IJT808MessagePackFormatter, IJT808Analyze { public override byte CommandId => JT808CarDVRCommandID.采集指定的速度状态日志.ToByteValue(); /// @@ -29,11 +29,26 @@ namespace JT808.Protocol.MessageBody.CarDVR } - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x15 value, IJT808Config config) + { + foreach (var speedStatusLog in value.JT808_CarDVR_Up_0x15_SpeedStatusLogs) + { + writer.WriteByte(speedStatusLog.SpeedStatus); + writer.WriteDateTime6(speedStatusLog.SpeedStatusStartTime); + writer.WriteDateTime6(speedStatusLog.SpeedStatusEndTime); + foreach (var speedPerSecond in speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds) + { + writer.WriteByte(speedPerSecond.RecordSpeed); + writer.WriteByte(speedPerSecond.ReferenceSpeed); + } + } + } + + public JT808_CarDVR_Up_0x15 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_CarDVR_Up_0x15 value = new JT808_CarDVR_Up_0x15(); value.JT808_CarDVR_Up_0x15_SpeedStatusLogs = new List(); - var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 133;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 + var count = (reader.ReadCurrentRemainContentLength() - 1) / 133;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x15_SpeedStatusLog jT808_CarDVR_Up_0x15_SpeedStatusLog = new JT808_CarDVR_Up_0x15_SpeedStatusLog(); @@ -52,57 +67,41 @@ namespace JT808.Protocol.MessageBody.CarDVR } return value; } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x15 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x15; - foreach (var speedStatusLog in value.JT808_CarDVR_Up_0x15_SpeedStatusLogs) - { - writer.WriteByte(speedStatusLog.SpeedStatus); - writer.WriteDateTime6(speedStatusLog.SpeedStatusStartTime); - writer.WriteDateTime6(speedStatusLog.SpeedStatusEndTime); - foreach (var speedPerSecond in speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds) - { - writer.WriteByte(speedPerSecond.RecordSpeed); - writer.WriteByte(speedPerSecond.ReferenceSpeed); - } - } - } + } + /// + /// 单位速度状态日志数据块格式 + /// + public class JT808_CarDVR_Up_0x15_SpeedStatusLog + { /// - /// 单位速度状态日志数据块格式 + /// 记录仪的速度状态 /// - public class JT808_CarDVR_Up_0x15_SpeedStatusLog - { - /// - /// 记录仪的速度状态 - /// - public byte SpeedStatus { get; set; } - /// - /// 速度状态判定的开始时间 - /// - public DateTime SpeedStatusStartTime { get; set; } - /// - /// 速度状态判定的结束时间 - /// - public DateTime SpeedStatusEndTime { get; set; } - /// - /// 60组 - /// - public List JT808_CarDVR_Up_0x15_SpeedPerSeconds { get; set; } - } + public byte SpeedStatus { get; set; } /// - /// 每秒速度 + /// 速度状态判定的开始时间 /// - public class JT808_CarDVR_Up_0x15_SpeedPerSecond - { - /// - /// 记录速度 - /// - public byte RecordSpeed { get; set; } - /// - /// 参考速度 - /// - public byte ReferenceSpeed { get; set; } - } + public DateTime SpeedStatusStartTime { get; set; } + /// + /// 速度状态判定的结束时间 + /// + public DateTime SpeedStatusEndTime { get; set; } + /// + /// 60组 + /// + public List JT808_CarDVR_Up_0x15_SpeedPerSeconds { get; set; } + } + /// + /// 每秒速度 + /// + public class JT808_CarDVR_Up_0x15_SpeedPerSecond + { + /// + /// 记录速度 + /// + public byte RecordSpeed { get; set; } + /// + /// 参考速度 + /// + public byte ReferenceSpeed { get; set; } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x82.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x82.cs index 88e09ee..57ff9a1 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x82.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x82.cs @@ -15,29 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置车辆信息 /// 返回:车辆信息 /// - public class JT808_CarDVR_Up_0x82 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x82 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.设置车辆信息.ToByteValue(); public override string Description => "车辆信息"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0x82 value = new JT808_CarDVR_Up_0x82(); - - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x82 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x82; - - } - + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x83.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x83.cs index d42bca1..4ec9e87 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x83.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x83.cs @@ -15,26 +15,12 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置记录仪初次安装日期 /// 返回:初次安装日期 /// - public class JT808_CarDVR_Up_0x83 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x83 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.设置记录仪初次安装日期.ToByteValue(); public override string Description => "初次安装日期"; - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0x83 value = new JT808_CarDVR_Up_0x83(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x83 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x83; - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x84.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x84.cs index 71a2ad9..20cc505 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x84.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x84.cs @@ -15,26 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置状态量配置信息 /// 返回:状态量配置信息 /// - public class JT808_CarDVR_Up_0x84 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0x84 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.设置状态量配置信息.ToByteValue(); public override string Description => "状态量配置信息"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0x84 value = new JT808_CarDVR_Up_0x84(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0x84 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x84; - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC2.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC2.cs index 3e60b0a..b68eae9 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC2.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC2.cs @@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置记录仪时间 /// 返回:北京时间的日期、时钟 /// - public class JT808_CarDVR_Up_0xC2 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0xC2 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.设置记录仪时间.ToByteValue(); public override string Description => "北京时间的日期、时钟"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0xC2 value = new JT808_CarDVR_Up_0xC2(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0xC2 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC2; - - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC3.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC3.cs index 32263e2..02d740a 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC3.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC3.cs @@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置记录仪脉冲系数 /// 返回:记录仪脉冲系数 /// - public class JT808_CarDVR_Up_0xC3 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0xC3 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.设置记录仪脉冲系数.ToByteValue(); public override string Description => "记录仪脉冲系数"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0xC3 value = new JT808_CarDVR_Up_0xC3(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0xC3 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC3; - - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC4.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC4.cs index 6bf0ef1..4d27f49 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC4.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC4.cs @@ -15,25 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 设置初始里程 /// 返回:记录仪初次安装时车辆已行驶的总里程 /// - public class JT808_CarDVR_Up_0xC4 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0xC4 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.设置初始里程.ToByteValue(); public override string Description => "车辆识别代号、机动车号牌号码和机动车号牌分类"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0xC4 value = new JT808_CarDVR_Up_0xC4(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0xC4 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC4; - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE0.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE0.cs index 267af2d..a9dbdd2 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE0.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE0.cs @@ -14,27 +14,12 @@ namespace JT808.Protocol.MessageBody.CarDVR /// /// 进入或保持检定状态 /// 返回:进入或保持检定状态 + /// 在检定状态下,检定装置以不大于2秒的时间间隔发送包含本命令字的命令帧,记录仪在6秒内未收到该命令帧,则自动返回正常工作状态。 /// - public class JT808_CarDVR_Up_0xE0 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0xE0 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.进入或保持检定状态.ToByteValue(); - public override string Description => "进入或保持检定状态"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0xE0 value = new JT808_CarDVR_Up_0xE0(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0xE0 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE0; - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE1.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE1.cs index 278d0de..e98e644 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE1.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE1.cs @@ -15,26 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 进入里程误差测量 /// 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平) /// - public class JT808_CarDVR_Up_0xE1 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0xE1 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.进入里程误差测量.ToByteValue(); public override string Description => "通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平)"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0xE1 value = new JT808_CarDVR_Up_0xE1(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0xE1 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE1; - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE2.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE2.cs index 3c87558..c342dfc 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE2.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE2.cs @@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 进入脉冲系数误差测量 /// 返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平) /// - public class JT808_CarDVR_Up_0xE2 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0xE2 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.进入脉冲系数误差测量.ToByteValue(); public override string Description => "通过 DB9 的 7 脚输出车速传感器信号(TTL 电平)"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0xE2 value = new JT808_CarDVR_Up_0xE2(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0xE2 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE2; - - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs index 88d4f9e..da10a00 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs @@ -15,27 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 进入实时时间误差测量 /// 返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平) /// - public class JT808_CarDVR_Up_0xE3 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0xE3 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.进入实时时间误差测量.ToByteValue(); public override string Description => "通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平)"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0xE3 value = new JT808_CarDVR_Up_0xE3(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0xE3 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE3; - - } } } diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE4.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE4.cs index 6566e86..b509a98 100644 --- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE4.cs +++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE4.cs @@ -15,25 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR /// 返回正常工作状态 /// 返回:返回正常工作状态 /// - public class JT808_CarDVR_Up_0xE4 : JT808CarDVRUpBodies, IJT808Analyze + public class JT808_CarDVR_Up_0xE4 : JT808CarDVRUpBodies { public override byte CommandId => JT808CarDVRCommandID.返回正常工作状态.ToByteValue(); public override string Description => "返回正常工作状态"; - - public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) - { - - } - - public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config) - { - JT808_CarDVR_Up_0xE4 value = new JT808_CarDVR_Up_0xE4(); - return value; - } - - public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config) - { - JT808_CarDVR_Up_0xE4 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE4; - } + public override bool SkipSerialization { get; set; } = true; } } diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0700.cs b/src/JT808.Protocol/MessageBody/JT808_0x0700.cs new file mode 100644 index 0000000..8ac20ef --- /dev/null +++ b/src/JT808.Protocol/MessageBody/JT808_0x0700.cs @@ -0,0 +1,52 @@ +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessagePack; +using System; +using System.Text.Json; + +namespace JT808.Protocol.MessageBody +{ + /// + /// 行驶记录数据上传 + /// 0x0700 + /// + public class JT808_0x0700 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze + { + public override ushort MsgId { get; } = 0x0700; + public override string Description => "行驶记录数据上传"; + /// + /// 应答流水号 + /// + public ushort ReplyMsgNum { get; set; } + /// + /// 命令字 + /// + public byte CommandId { get; set; } + + public JT808CarDVRUpPackage JT808CarDVRUpPackage { get; set; } + + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + JT808_0x0700 value = new JT808_0x0700(); + } + + public JT808_0x0700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + { + JT808_0x0700 value = new JT808_0x0700(); + value.ReplyMsgNum = reader.ReadUInt16(); + value.CommandId = reader.ReadByte(); + object obj = config.GetMessagePackFormatterByType(typeof( JT808CarDVRUpPackage)); + value.JT808CarDVRUpPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config); + return value; + } + + public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0700 value, IJT808Config config) + { + writer.WriteUInt16(value.ReplyMsgNum); + writer.WriteByte(value.CommandId); + object obj = config.GetMessagePackFormatterByType(typeof(JT808CarDVRUpPackage)); + JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer,value.JT808CarDVRUpPackage, config); + } + } +} diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8700.cs b/src/JT808.Protocol/MessageBody/JT808_0x8700.cs index 26ab308..e709193 100644 --- a/src/JT808.Protocol/MessageBody/JT808_0x8700.cs +++ b/src/JT808.Protocol/MessageBody/JT808_0x8700.cs @@ -1,4 +1,5 @@ -using JT808.Protocol.Formatters; +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System; @@ -18,6 +19,8 @@ namespace JT808.Protocol.MessageBody /// public byte CommandId { get; set; } + public JT808CarDVRDownPackage JT808CarDVRDownPackage { get; set; } + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { throw new NotImplementedException(); @@ -25,12 +28,18 @@ namespace JT808.Protocol.MessageBody public JT808_0x8700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { - throw new NotImplementedException(); + JT808_0x8700 value = new JT808_0x8700(); + value.CommandId = reader.ReadByte(); + object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType()); + value.JT808CarDVRDownPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config); + return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8700 value, IJT808Config config) { - throw new NotImplementedException(); + writer.WriteByte(value.CommandId); + object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType()); + JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRDownPackage, config); } } } diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8701.cs b/src/JT808.Protocol/MessageBody/JT808_0x8701.cs new file mode 100644 index 0000000..ae55814 --- /dev/null +++ b/src/JT808.Protocol/MessageBody/JT808_0x8701.cs @@ -0,0 +1,48 @@ +using JT808.Protocol.Extensions; +using JT808.Protocol.Formatters; +using JT808.Protocol.Interfaces; +using JT808.Protocol.MessagePack; +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; + +namespace JT808.Protocol.MessageBody +{ + /// + /// 行驶记录参数下传命令 + /// + public class JT808_0x8701: JT808Bodies, IJT808MessagePackFormatter, IJT808_2019_Version, IJT808Analyze + { + public override ushort MsgId => 0x8701; + + public override string Description => "行驶记录参数下传命令"; + /// + /// + /// + public byte CommandId { get; set; } + + public JT808CarDVRDownPackage JT808CarDVRDownPackage { get; set; } + + public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) + { + throw new NotImplementedException(); + } + + public JT808_0x8701 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) + { + JT808_0x8701 value = new JT808_0x8701(); + value.CommandId = reader.ReadByte(); + object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType()); + value.JT808CarDVRDownPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config); + return value; + } + + public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8701 value, IJT808Config config) + { + writer.WriteByte(value.CommandId); + object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType()); + JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRDownPackage, config); + } + } +} diff --git a/src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs b/src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs index f4084e3..e9180e6 100644 --- a/src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs +++ b/src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs @@ -420,7 +420,7 @@ namespace JT808.Protocol.MessagePack { calculateXorCheckCode = (byte)(calculateXorCheckCode ^ item); } - var realXorCheckCode = Reader.Slice(ReaderCount + 1)[0]; + var realXorCheckCode = Reader.Slice(ReaderCount)[0]; return (calculateXorCheckCode, realXorCheckCode); } }