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);
}
}