@@ -48,6 +48,7 @@ | |||
<Compile Include="MessageBody\JT808_0x0303Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x0500Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x0701BodiesImpl\JT808_0x0701TestBodiesImpl.cs" /> | |||
<Compile Include="MessageBody\JT808_0x0700Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x0701Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x0702Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x0704Test.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<JT808_0x0700>(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<JT808_0x0700>(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<JT808_0x0700>(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<JT808_0x0700>(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<JT808_0x0700>(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<JT808_0x0700>(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<JT808_0x0700>(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<JT808_0x0700>(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<JT808_CarDVR_Up_0x08_SpeedPerMinute> { | |||
new JT808_CarDVR_Up_0x08_SpeedPerMinute{ | |||
StartTime=Convert.ToDateTime("2020-03-23"), | |||
JT808_CarDVR_Up_0x08_SpeedPerSeconds=new List<JT808_CarDVR_Up_0x08_SpeedPerSecond>{ | |||
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<JT808_0x0700>(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<JT808_CarDVR_Up_0x09_PositionPerHour> { | |||
new JT808_CarDVR_Up_0x09_PositionPerHour{ | |||
StartTime=Convert.ToDateTime("2020-03-23"), | |||
JT808_CarDVR_Up_0x09_PositionPerMinutes=new List<JT808_CarDVR_Up_0x09_PositionPerMinute>{ | |||
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<JT808_0x0700>(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<JT808_CarDVR_Up_0x10_AccidentSuspectin> { | |||
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<JT808_CarDVR_Up_0x10_DrivingStatus> | |||
{ | |||
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<JT808_0x0700>(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<JT808_CarDVR_Up_0x11_DriveOverTime>{ | |||
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<JT808_0x0700>(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<JT808_CarDVR_Up_0x12_DriveLogin>{ | |||
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<JT808_0x0700>(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<JT808_CarDVR_Up_0x13_ExternalPowerSupply>{ | |||
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<JT808_0x0700>(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<JT808_CarDVR_Up_0x14_ParameterModify>{ | |||
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<JT808_0x0700>(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<JT808_CarDVR_Up_0x15_SpeedStatusLog>{ | |||
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<JT808_CarDVR_Up_0x15_SpeedPerSecond>{ | |||
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<JT808_0x0700>(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<JT808_0x0700>(bytes); | |||
Assert.Equal(1, value.ReplyMsgNum); | |||
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x82; | |||
} | |||
} | |||
} |
@@ -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; | |||
@@ -9,7 +9,7 @@ namespace JT808.Protocol.Interfaces | |||
/// </summary> | |||
public interface IJT808_CarDVR_Down_Factory : IJT808ExternalRegister | |||
{ | |||
IDictionary<byte, JT808CarDVRDownBodies> Map { get; } | |||
IJT808_CarDVR_Down_Factory SetMap<JT808CarDVRDownBodies>() ; | |||
IDictionary<byte, object> Map { get; } | |||
IJT808_CarDVR_Down_Factory SetMap<TJT808CarDVRDownBodies>() where TJT808CarDVRDownBodies : JT808CarDVRDownBodies; | |||
} | |||
} |
@@ -9,7 +9,7 @@ namespace JT808.Protocol.Interfaces | |||
/// </summary> | |||
public interface IJT808_CarDVR_Up_Factory : IJT808ExternalRegister | |||
{ | |||
IDictionary<byte, JT808CarDVRUpBodies> Map { get; } | |||
IJT808_CarDVR_Up_Factory SetMap<JT808CarDVRUpBodies>() ; | |||
IDictionary<byte, object> Map { get; } | |||
IJT808_CarDVR_Up_Factory SetMap<TJT808CarDVRUpBodies>() where TJT808CarDVRUpBodies : JT808CarDVRUpBodies; | |||
} | |||
} |
@@ -0,0 +1,55 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Reflection; | |||
using System.Text; | |||
namespace JT808.Protocol.Interfaces | |||
{ | |||
/// <summary> | |||
/// 记录仪工厂 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_Factory:IJT808_CarDVR_Down_Factory | |||
{ | |||
public IDictionary<byte, object> Map { get; } | |||
public JT808_CarDVR_Down_Factory() | |||
{ | |||
Map = new Dictionary<byte, object>(); | |||
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<TJT808CarDVRDownBodies>() 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; | |||
} | |||
} | |||
} |
@@ -0,0 +1,55 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Reflection; | |||
using System.Text; | |||
namespace JT808.Protocol.Interfaces | |||
{ | |||
/// <summary> | |||
/// 记录仪工厂 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_Factory:IJT808_CarDVR_Up_Factory | |||
{ | |||
public IDictionary<byte, object> Map { get; } | |||
public JT808_CarDVR_Up_Factory() | |||
{ | |||
Map = new Dictionary<byte, object>(); | |||
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<TJT808CarDVRUpBodies>() 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; | |||
} | |||
} | |||
} |
@@ -2633,6 +2633,16 @@ | |||
记录仪工厂 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.Interfaces.JT808_CarDVR_Down_Factory"> | |||
<summary> | |||
记录仪工厂 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.Interfaces.JT808_CarDVR_Up_Factory"> | |||
<summary> | |||
记录仪工厂 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.IJT808Config.MsgSNDistributed"> | |||
<summary> | |||
消息流水号 | |||
@@ -3682,36 +3692,200 @@ | |||
返回:车辆信息 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x82.Vin"> | |||
<summary> | |||
车辆识别代号 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x82.VehicleNo"> | |||
<summary> | |||
机动车号牌号码 | |||
后 3 个字节为备用字 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x82.VehicleType"> | |||
<summary> | |||
机动车号牌分类 | |||
后 4 个字节为备用字 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x83"> | |||
<summary> | |||
设置记录仪初次安装日期 | |||
返回:初次安装日期 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x83.RealTime"> | |||
<summary> | |||
实时时间 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84"> | |||
<summary> | |||
设置状态量配置信息 | |||
返回:状态量配置信息 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.RealTime"> | |||
<summary> | |||
实时时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.SignalOperate"> | |||
<summary> | |||
信号字节个数 | |||
单位字节的 D7~D0(由高到低)分别对应 8 个状态信号, 1 表示有操作,0表示无操作 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.D0"> | |||
<summary> | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.NearLight"> | |||
<summary> | |||
近光 D3 | |||
10个字节,未使用或不足时,补0 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.FarLight"> | |||
<summary> | |||
远光 D4 | |||
10个字节,未使用或不足时,补0 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.RightTurn"> | |||
<summary> | |||
右转向 D5 | |||
10个字节,未使用或不足时,补0 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.LeftTurn"> | |||
<summary> | |||
左转向 D6 | |||
10个字节,未使用或不足时,补0 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.Brake"> | |||
<summary> | |||
制动 D7 | |||
10个字节,未使用或不足时,补0 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC2"> | |||
<summary> | |||
设置记录仪时间 | |||
返回:北京时间的日期、时钟 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC2.RealTime"> | |||
<summary> | |||
实时时间 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3"> | |||
<summary> | |||
设置记录仪脉冲系数 | |||
返回:记录仪脉冲系数 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.RealTime"> | |||
<summary> | |||
当前时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficientHighByte"> | |||
<summary> | |||
脉冲系数高字节 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficientLowByte"> | |||
<summary> | |||
仪脉冲系数低字节 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4"> | |||
<summary> | |||
设置初始里程 | |||
返回:记录仪初次安装时车辆已行驶的总里程 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4.RealTime"> | |||
<summary> | |||
实时时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4.FirstInstallTime"> | |||
<summary> | |||
初次安装时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4.FirstMileage"> | |||
<summary> | |||
初始里程 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4.TotalMilage"> | |||
<summary> | |||
累计里程 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE0"> | |||
<summary> | |||
进入或保持检定状态 | |||
返回:进入或保持检定状态 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1"> | |||
<summary> | |||
进入里程误差测量 | |||
返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平) | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.UniqueNumber"> | |||
<summary> | |||
记录仪唯一性编号 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.PulseCoefficient"> | |||
<summary> | |||
脉冲系数 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.Speed"> | |||
<summary> | |||
当前速度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.TotalMileage"> | |||
<summary> | |||
累计里程 单位为米 | |||
单位为 0.1 千米每小时 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.StatusSignal"> | |||
<summary> | |||
状态信号 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE2"> | |||
<summary> | |||
进入脉冲系数误差测量 | |||
返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE3"> | |||
<summary> | |||
进入实时时间误差测量 | |||
返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE4"> | |||
<summary> | |||
返回正常工作状态 | |||
返回:返回正常工作状态 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x00"> | |||
<summary> | |||
采集记录仪执行标准版本 | |||
@@ -3790,16 +3964,11 @@ | |||
当前时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x04.PulseCoefficientHighByte"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x04.PulseCoefficient"> | |||
<summary> | |||
脉冲系数高字节 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x04.PulseCoefficientLowByte"> | |||
<summary> | |||
仪脉冲系数低字节 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x05"> | |||
<summary> | |||
采集车辆信息 | |||
@@ -3918,34 +4087,34 @@ | |||
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerMinute"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerMinute"> | |||
<summary> | |||
单位分钟行驶速度记录数据块格式 | |||
1.本数据块总长度为 126 个字节,不足部分以 FFH补齐; | |||
2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerMinute.StartTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerMinute.StartTime"> | |||
<summary> | |||
开始时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds"> | |||
<summary> | |||
60s钟,每秒的信息 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerSecond"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerSecond"> | |||
<summary> | |||
开始时间之后每秒钟的平均速度和状态信号 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerSecond.AvgSpeedAfterStartTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerSecond.AvgSpeedAfterStartTime"> | |||
<summary> | |||
开始时间之后每秒钟的平均速度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerSecond.StatusSignalAfterStartTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerSecond.StatusSignalAfterStartTime"> | |||
<summary> | |||
开始时间之后每秒钟的状态信号 | |||
</summary> | |||
@@ -3962,44 +4131,44 @@ | |||
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerHour"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerHour"> | |||
<summary> | |||
指定的结束时间之前最近的每 小时的位置信息记录 | |||
1.本数据块总长度为 666 个字节,不足部分以 FFH补齐; | |||
2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerHour.StartTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerHour.StartTime"> | |||
<summary> | |||
开始时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes"> | |||
<summary> | |||
60s钟,每秒的信息 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute"> | |||
<summary> | |||
开始时间之后每分钟的平均速度和位置信息 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute.GpsLng"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute.GpsLng"> | |||
<summary> | |||
经度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute.GpsLat"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute.GpsLat"> | |||
<summary> | |||
纬度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute.Height"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute.Height"> | |||
<summary> | |||
高度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute.AvgSpeedAfterStartTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute.AvgSpeedAfterStartTime"> | |||
<summary> | |||
开始时间之后每分钟的平均速度 | |||
</summary> | |||
@@ -4016,54 +4185,54 @@ | |||
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin"> | |||
<summary> | |||
指定的结束时间之前最近的每条事故疑点记录 | |||
1.本数据块总长度为 234 个字节; | |||
2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime"> | |||
<summary> | |||
行驶结束时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo"> | |||
<summary> | |||
机动车驾驶证号码 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss"> | |||
<summary> | |||
每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng"> | |||
<summary> | |||
经度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat"> | |||
<summary> | |||
纬度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.Height"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.Height"> | |||
<summary> | |||
高度 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_DrivingStatus"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_DrivingStatus"> | |||
<summary> | |||
行驶结束时间前的状态 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_DrivingStatus.Speed"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_DrivingStatus.Speed"> | |||
<summary> | |||
速度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_DrivingStatus.StatusSignal"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_DrivingStatus.StatusSignal"> | |||
<summary> | |||
状态信号 | |||
</summary> | |||
@@ -4079,52 +4248,52 @@ | |||
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime"> | |||
<summary> | |||
单位超时驾驶记录数据块 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo"> | |||
<summary> | |||
机动车驾驶证号码 18位 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime"> | |||
<summary> | |||
连续驾驶开始时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime"> | |||
<summary> | |||
连续驾驶结束时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng"> | |||
<summary> | |||
经度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat"> | |||
<summary> | |||
纬度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.StartHeight"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.StartHeight"> | |||
<summary> | |||
高度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng"> | |||
<summary> | |||
经度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat"> | |||
<summary> | |||
纬度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.EndHeight"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.EndHeight"> | |||
<summary> | |||
高度 | |||
</summary> | |||
@@ -4140,22 +4309,22 @@ | |||
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12.JT808_CarDVR_Up_0x12_DriveLogin"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12_DriveLogin"> | |||
<summary> | |||
单位驾驶人身份记录数据块格式 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12.JT808_CarDVR_Up_0x12_DriveLogin.LoginTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12_DriveLogin.LoginTime"> | |||
<summary> | |||
登入登出时间发生时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12.JT808_CarDVR_Up_0x12_DriveLogin.DriverLicenseNo"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12_DriveLogin.DriverLicenseNo"> | |||
<summary> | |||
机动车驾驶证号码 18位 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12.JT808_CarDVR_Up_0x12_DriveLogin.LoginType"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12_DriveLogin.LoginType"> | |||
<summary> | |||
事件类型 | |||
</summary> | |||
@@ -4171,17 +4340,17 @@ | |||
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13.JT808_CarDVR_Up_0x13_ExternalPowerSupply"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13_ExternalPowerSupply"> | |||
<summary> | |||
单位记录仪外部供电记录数据块格式 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13.JT808_CarDVR_Up_0x13_ExternalPowerSupply.EventTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13_ExternalPowerSupply.EventTime"> | |||
<summary> | |||
事件发生时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13.JT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType"> | |||
<summary> | |||
事件类型 | |||
</summary> | |||
@@ -4197,17 +4366,17 @@ | |||
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14.JT808_CarDVR_Up_0x14_ParameterModify"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14_ParameterModify"> | |||
<summary> | |||
单位记录仪外部供电记录数据块格式 | |||
单位参数修改记录数据块格式 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14.JT808_CarDVR_Up_0x14_ParameterModify.EventTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14_ParameterModify.EventTime"> | |||
<summary> | |||
事件发生时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14.JT808_CarDVR_Up_0x14_ParameterModify.EventType"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14_ParameterModify.EventType"> | |||
<summary> | |||
事件类型 | |||
</summary> | |||
@@ -4223,42 +4392,42 @@ | |||
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1) | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog"> | |||
<summary> | |||
单位速度状态日志数据块格式 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus"> | |||
<summary> | |||
记录仪的速度状态 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusStartTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusStartTime"> | |||
<summary> | |||
速度状态判定的开始时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusEndTime"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusEndTime"> | |||
<summary> | |||
速度状态判定的结束时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds"> | |||
<summary> | |||
60组 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedPerSecond"> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedPerSecond"> | |||
<summary> | |||
每秒速度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedPerSecond.RecordSpeed"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedPerSecond.RecordSpeed"> | |||
<summary> | |||
记录速度 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedPerSecond.ReferenceSpeed"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedPerSecond.ReferenceSpeed"> | |||
<summary> | |||
参考速度 | |||
</summary> | |||
@@ -4303,6 +4472,7 @@ | |||
<summary> | |||
进入或保持检定状态 | |||
返回:进入或保持检定状态 | |||
在检定状态下,检定装置以不大于2秒的时间间隔发送包含本命令字的命令帧,记录仪在6秒内未收到该命令帧,则自动返回正常工作状态。 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0xE1"> | |||
@@ -4968,6 +5138,22 @@ | |||
查询类型为4 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.JT808_0x0700"> | |||
<summary> | |||
行驶记录数据上传 | |||
0x0700 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.JT808_0x0700.ReplyMsgNum"> | |||
<summary> | |||
应答流水号 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.JT808_0x0700.CommandId"> | |||
<summary> | |||
命令字 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.JT808_0x0701"> | |||
<summary> | |||
电子运单上报 | |||
@@ -7465,6 +7651,16 @@ | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.JT808_0x8701"> | |||
<summary> | |||
行驶记录参数下传命令 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.JT808_0x8701.CommandId"> | |||
<summary> | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.JT808_0x8702"> | |||
<summary> | |||
上报驾驶员身份信息请求 | |||
@@ -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); | |||
} | |||
} |
@@ -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<JT808CarDVRDownPackage> | |||
{ | |||
public const ushort BeginFlag = 0x557A; | |||
/// <summary> | |||
@@ -31,5 +36,51 @@ namespace JT808.Protocol | |||
/// 校验字 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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); | |||
} | |||
} | |||
@@ -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(); | |||
} | |||
} | |||
} |
@@ -16,20 +16,10 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// </summary> | |||
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(); | |||
} | |||
} | |||
} |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的行驶速度记录 | |||
/// 如在指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies | |||
public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x08> | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的行驶速度记录.ToByteValue(); | |||
/// <summary> | |||
@@ -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); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的位置信息记录 | |||
/// 指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies | |||
public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x09> | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的位置信息记录.ToByteValue(); | |||
@@ -33,7 +33,14 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的事故疑点记录 | |||
/// 指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies | |||
public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x10> | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的事故疑点记录.ToByteValue(); | |||
@@ -33,7 +33,14 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的超时驾驶记录 | |||
/// 返回:符合条件的超时驾驶记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies | |||
public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x11> | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的超时驾驶记录.ToByteValue(); | |||
@@ -32,7 +32,14 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的驾驶人身份记录 | |||
/// 返回:符合条件的驾驶人登录退出记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies | |||
public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x12> | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的驾驶人身份记录.ToByteValue(); | |||
@@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 最大单位数据块个数 | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的外部供电记录 | |||
/// 返回:符合条件的供电记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies | |||
public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x13> | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的外部供电记录.ToByteValue(); | |||
@@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 最大单位数据块个数 | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的参数修改记录 | |||
/// 返回:符合条件的参数修改记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies | |||
public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x14> | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的参数修改记录.ToByteValue(); | |||
@@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 最大单位数据块个数 | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的速度状态日志 | |||
/// 返回:符合条件的速度状态日志 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies | |||
public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x15> | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的速度状态日志.ToByteValue(); | |||
@@ -31,22 +31,21 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 最大单位数据块个数 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -15,10 +15,23 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置车辆信息 | |||
/// 返回:车辆信息 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x82 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Down_0x82 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x82>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.设置车辆信息.ToByteValue(); | |||
/// <summary> | |||
/// 车辆识别代号 | |||
/// </summary> | |||
public string Vin { get; set; } | |||
/// <summary> | |||
/// 机动车号牌号码 | |||
/// 后 3 个字节为备用字 | |||
/// </summary> | |||
public string VehicleNo { get; set; } | |||
/// <summary> | |||
/// 机动车号牌分类 | |||
/// 后 4 个字节为备用字 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -15,10 +15,13 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置记录仪初次安装日期 | |||
/// 返回:初次安装日期 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x83 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Down_0x83 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x83>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.设置记录仪初次安装日期.ToByteValue(); | |||
/// <summary> | |||
/// 实时时间 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -15,10 +15,51 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置状态量配置信息 | |||
/// 返回:状态量配置信息 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x84 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Down_0x84 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x84>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.设置状态量配置信息.ToByteValue(); | |||
/// <summary> | |||
/// 实时时间 | |||
/// </summary> | |||
public DateTime RealTime { get; set; } | |||
/// <summary> | |||
/// 信号字节个数 | |||
/// 单位字节的 D7~D0(由高到低)分别对应 8 个状态信号, 1 表示有操作,0表示无操作 | |||
/// </summary> | |||
public byte SignalOperate { get; set; } | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public string D0 { get; set; } | |||
public string D1 { get; set; } | |||
public string D2 { get; set; } | |||
/// <summary> | |||
/// 近光 D3 | |||
/// 10个字节,未使用或不足时,补0 | |||
/// </summary> | |||
public string NearLight { get; set; } | |||
/// <summary> | |||
/// 远光 D4 | |||
/// 10个字节,未使用或不足时,补0 | |||
/// </summary> | |||
public string FarLight { get; set; } | |||
/// <summary> | |||
/// 右转向 D5 | |||
/// 10个字节,未使用或不足时,补0 | |||
/// </summary> | |||
public string RightTurn { get; set; } | |||
/// <summary> | |||
/// 左转向 D6 | |||
/// 10个字节,未使用或不足时,补0 | |||
/// </summary> | |||
public string LeftTurn { get; set; } | |||
/// <summary> | |||
/// 制动 D7 | |||
/// 10个字节,未使用或不足时,补0 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -15,10 +15,13 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置记录仪时间 | |||
/// 返回:北京时间的日期、时钟 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0xC2 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Down_0xC2 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0xC2>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.设置记录仪时间.ToByteValue(); | |||
/// <summary> | |||
/// 实时时间 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -15,10 +15,21 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置记录仪脉冲系数 | |||
/// 返回:记录仪脉冲系数 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0xC3 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Down_0xC3 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0xC3>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.设置记录仪脉冲系数.ToByteValue(); | |||
/// <summary> | |||
/// 当前时间 | |||
/// </summary> | |||
public DateTime RealTime { get; set; } | |||
/// <summary> | |||
/// 脉冲系数高字节 | |||
/// </summary> | |||
public byte PulseCoefficientHighByte { get; set; } | |||
/// <summary> | |||
/// 仪脉冲系数低字节 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -15,9 +15,25 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置初始里程 | |||
/// 返回:记录仪初次安装时车辆已行驶的总里程 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0xC4 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Down_0xC4 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0xC4>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.设置初始里程.ToByteValue(); | |||
/// <summary> | |||
/// 实时时间 | |||
/// </summary> | |||
public DateTime RealTime { get; set; } | |||
/// <summary> | |||
/// 初次安装时间 | |||
/// </summary> | |||
public DateTime FirstInstallTime { get; set; } | |||
/// <summary> | |||
/// 初始里程 | |||
/// </summary> | |||
public string FirstMileage { get; set; } | |||
/// <summary> | |||
/// 累计里程 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 进入或保持检定状态 | |||
/// 返回:进入或保持检定状态 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0xE0 : JT808CarDVRDownBodies | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.进入或保持检定状态.ToByteValue(); | |||
public override string Description => "进入或保持检定状态"; | |||
public override bool SkipSerialization { get; set; } = true; | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 进入里程误差测量 | |||
/// 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平) | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0xE1 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0xE1>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.进入里程误差测量.ToByteValue(); | |||
/// <summary> | |||
/// 记录仪唯一性编号 | |||
/// </summary> | |||
public string UniqueNumber { get; set; } | |||
/// <summary> | |||
/// 脉冲系数 | |||
/// </summary> | |||
public ushort PulseCoefficient { get; set; } | |||
/// <summary> | |||
/// 当前速度 | |||
/// </summary> | |||
public ushort Speed { get; set; } | |||
/// <summary> | |||
/// 累计里程 单位为米 | |||
/// 单位为 0.1 千米每小时 | |||
/// </summary> | |||
public uint TotalMileage { get; set; } | |||
/// <summary> | |||
/// 状态信号 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 进入脉冲系数误差测量 | |||
/// 返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平) | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 进入实时时间误差测量 | |||
/// 返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平) | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 返回正常工作状态 | |||
/// 返回:返回正常工作状态 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0xE4 : JT808CarDVRDownBodies | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.返回正常工作状态.ToByteValue(); | |||
public override string Description => "返回正常工作状态"; | |||
public override bool SkipSerialization { get; set; } = true; | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集记录仪执行标准版本 | |||
/// 返回:记录仪执行标准的年号及修改单号 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x00 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x00 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x00>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集记录仪执行标准版本.ToByteValue(); | |||
/// <summary> | |||
@@ -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); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 机动车驾驶证号码 | |||
/// 返回:当前驾驶人的机动车驾驶证号码 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x01 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x01 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x01>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集当前驾驶人信息.ToByteValue(); | |||
/// <summary> | |||
@@ -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; | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集记录仪实时时间 | |||
/// 返回:实时时间 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x02 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x02 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x02>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集记录仪实时时间.ToByteValue(); | |||
/// <summary> | |||
@@ -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; | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集累计行驶里程 | |||
/// 返回:实时时间、安装时的初始里程及安装后的累计行驶里程 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x03 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x03 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x03>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集累计行驶里程.ToByteValue(); | |||
/// <summary> | |||
@@ -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); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集记录仪脉冲系数 | |||
/// 返回:实时时间及设定的脉冲系数 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x04 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x04 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x04>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集记录仪脉冲系数.ToByteValue(); | |||
/// <summary> | |||
@@ -25,11 +25,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// <summary> | |||
/// 脉冲系数高字节 | |||
/// </summary> | |||
public byte PulseCoefficientHighByte { get; set; } | |||
/// <summary> | |||
/// 仪脉冲系数低字节 | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集车辆信息 | |||
/// 返回:车辆识别代号、机动车号牌号码和机动车号牌分类 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x05 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x05 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x05>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集车辆信息.ToByteValue(); | |||
/// <summary> | |||
@@ -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; | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集记录仪状态信号配置信息 | |||
/// 返回:状态信号配置信息 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x06 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x06 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x06>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集记录仪状态信号配置信息.ToByteValue(); | |||
/// <summary> | |||
@@ -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)); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集记录仪唯一性编号 | |||
/// 返回:唯一性编号及初次安装日期 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x07 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x07 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x07>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集记录仪唯一性编号.ToByteValue(); | |||
/// <summary> | |||
@@ -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')); | |||
} | |||
} | |||
} |
@@ -16,7 +16,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的行驶速度记录 | |||
/// 如在指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x08 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x08 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x08>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的行驶速度记录.ToByteValue(); | |||
/// <summary> | |||
@@ -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<JT808_CarDVR_Up_0x08_SpeedPerMinute>(); | |||
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); | |||
} | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 单位分钟行驶速度记录数据块格式 | |||
/// 1.本数据块总长度为 126 个字节,不足部分以 FFH补齐; | |||
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x08_SpeedPerMinute | |||
{ | |||
/// <summary> | |||
/// 单位分钟行驶速度记录数据块格式 | |||
/// 1.本数据块总长度为 126 个字节,不足部分以 FFH补齐; | |||
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
/// 开始时间 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x08_SpeedPerMinute | |||
{ | |||
/// <summary> | |||
/// 开始时间 | |||
/// </summary> | |||
public DateTime StartTime { get; set; } | |||
/// <summary> | |||
/// 60s钟,每秒的信息 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x08_SpeedPerSecond> JT808_CarDVR_Up_0x08_SpeedPerSeconds { get; set; } | |||
public DateTime StartTime { get; set; } | |||
/// <summary> | |||
/// 60s钟,每秒的信息 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x08_SpeedPerSecond> JT808_CarDVR_Up_0x08_SpeedPerSeconds { get; set; } | |||
} | |||
} | |||
/// <summary> | |||
/// 开始时间之后每秒钟的平均速度和状态信号 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x08_SpeedPerSecond | |||
{ | |||
/// <summary> | |||
/// 开始时间之后每秒钟的平均速度和状态信号 | |||
/// 开始时间之后每秒钟的平均速度 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x08_SpeedPerSecond | |||
{ | |||
/// <summary> | |||
/// 开始时间之后每秒钟的平均速度 | |||
/// </summary> | |||
public byte AvgSpeedAfterStartTime { get; set; } | |||
/// <summary> | |||
/// 开始时间之后每秒钟的状态信号 | |||
/// </summary> | |||
public byte StatusSignalAfterStartTime { get; set; } | |||
} | |||
public byte AvgSpeedAfterStartTime { get; set; } | |||
/// <summary> | |||
/// 开始时间之后每秒钟的状态信号 | |||
/// </summary> | |||
public byte StatusSignalAfterStartTime { get; set; } | |||
} | |||
} |
@@ -16,7 +16,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的位置信息记录 | |||
/// 指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x09 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x09 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x09>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的位置信息记录.ToByteValue(); | |||
/// <summary> | |||
@@ -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<JT808_CarDVR_Up_0x09_PositionPerHour>(); | |||
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); | |||
} | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 指定的结束时间之前最近的每 小时的位置信息记录 | |||
/// 1.本数据块总长度为 666 个字节,不足部分以 FFH补齐; | |||
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x09_PositionPerHour | |||
{ | |||
/// <summary> | |||
/// 指定的结束时间之前最近的每 小时的位置信息记录 | |||
/// 1.本数据块总长度为 666 个字节,不足部分以 FFH补齐; | |||
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
/// 开始时间 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x09_PositionPerHour | |||
{ | |||
/// <summary> | |||
/// 开始时间 | |||
/// </summary> | |||
public DateTime StartTime { get; set; } | |||
/// <summary> | |||
/// 60s钟,每秒的信息 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x09_PositionPerMinute> JT808_CarDVR_Up_0x09_PositionPerMinutes { get; set; } | |||
public DateTime StartTime { get; set; } | |||
/// <summary> | |||
/// 60s钟,每秒的信息 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x09_PositionPerMinute> JT808_CarDVR_Up_0x09_PositionPerMinutes { get; set; } | |||
} | |||
} | |||
/// <summary> | |||
/// 开始时间之后每分钟的平均速度和位置信息 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x09_PositionPerMinute | |||
{ | |||
/// <summary> | |||
/// 开始时间之后每分钟的平均速度和位置信息 | |||
/// 经度 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x09_PositionPerMinute | |||
{ | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int GpsLng { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int GpsLat { get; set; } | |||
/// <summary> | |||
/// 高度 | |||
/// </summary> | |||
public short Height { get; set; } | |||
/// <summary> | |||
/// 开始时间之后每分钟的平均速度 | |||
/// </summary> | |||
public byte AvgSpeedAfterStartTime { get; set; } | |||
} | |||
public int GpsLng { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int GpsLat { get; set; } | |||
/// <summary> | |||
/// 高度 | |||
/// </summary> | |||
public short Height { get; set; } | |||
/// <summary> | |||
/// 开始时间之后每分钟的平均速度 | |||
/// </summary> | |||
public byte AvgSpeedAfterStartTime { get; set; } | |||
} | |||
} |
@@ -17,7 +17,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的事故疑点记录 | |||
/// 指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x10 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x10 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x10>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的事故疑点记录.ToByteValue(); | |||
/// <summary> | |||
@@ -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<JT808_CarDVR_Up_0x10_AccidentSuspectin>(); | |||
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); | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 指定的结束时间之前最近的每条事故疑点记录 | |||
/// 1.本数据块总长度为 234 个字节; | |||
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x10_AccidentSuspectin | |||
{ | |||
/// <summary> | |||
/// 指定的结束时间之前最近的每条事故疑点记录 | |||
/// 1.本数据块总长度为 234 个字节; | |||
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空 | |||
/// 行驶结束时间 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x10_AccidentSuspectin | |||
{ | |||
/// <summary> | |||
/// 行驶结束时间 | |||
/// </summary> | |||
public DateTime EndTime { get; set; } | |||
/// <summary> | |||
/// 机动车驾驶证号码 | |||
/// </summary> | |||
public string DriverLicenseNo { get; set; } | |||
/// <summary> | |||
/// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x10_DrivingStatus> JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int GpsLng { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int GpsLat { get; set; } | |||
/// <summary> | |||
/// 高度 | |||
/// </summary> | |||
public short Height { get; set; } | |||
public DateTime EndTime { get; set; } | |||
/// <summary> | |||
/// 机动车驾驶证号码 | |||
/// </summary> | |||
public string DriverLicenseNo { get; set; } | |||
/// <summary> | |||
/// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x10_DrivingStatus> JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int GpsLng { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int GpsLat { get; set; } | |||
/// <summary> | |||
/// 高度 | |||
/// </summary> | |||
public short Height { get; set; } | |||
} | |||
} | |||
/// <summary> | |||
/// 行驶结束时间前的状态 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x10_DrivingStatus | |||
{ | |||
/// <summary> | |||
/// 行驶结束时间前的状态 | |||
/// 速度 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x10_DrivingStatus | |||
{ | |||
/// <summary> | |||
/// 速度 | |||
/// </summary> | |||
public byte Speed { get; set; } | |||
/// <summary> | |||
/// 状态信号 | |||
/// </summary> | |||
public byte StatusSignal { get; set; } | |||
} | |||
public byte Speed { get; set; } | |||
/// <summary> | |||
/// 状态信号 | |||
/// </summary> | |||
public byte StatusSignal { get; set; } | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的超时驾驶记录 | |||
/// 返回:符合条件的超时驾驶记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x11 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x11 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x11>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的超时驾驶记录.ToByteValue(); | |||
/// <summary> | |||
@@ -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<JT808_CarDVR_Up_0x11_DriveOverTime>(); | |||
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); | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 单位超时驾驶记录数据块 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x11_DriveOverTime | |||
{ | |||
/// <summary> | |||
/// 单位超时驾驶记录数据块 | |||
/// 机动车驾驶证号码 18位 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x11_DriveOverTime | |||
{ | |||
/// <summary> | |||
/// 机动车驾驶证号码 18位 | |||
/// </summary> | |||
public string DriverLicenseNo { get; set; } | |||
/// <summary> | |||
/// 连续驾驶开始时间 | |||
/// </summary> | |||
public DateTime ContinueDrivingStartTime { get; set; } | |||
/// <summary> | |||
/// 连续驾驶结束时间 | |||
/// </summary> | |||
public DateTime ContinueDrivingEndTime { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int GpsStartLng { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int GpsStartLat { get; set; } | |||
/// <summary> | |||
/// 高度 | |||
/// </summary> | |||
public short StartHeight { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int GpsEndLng { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int GpsEndLat { get; set; } | |||
/// <summary> | |||
/// 高度 | |||
/// </summary> | |||
public short EndHeight { get; set; } | |||
} | |||
public string DriverLicenseNo { get; set; } | |||
/// <summary> | |||
/// 连续驾驶开始时间 | |||
/// </summary> | |||
public DateTime ContinueDrivingStartTime { get; set; } | |||
/// <summary> | |||
/// 连续驾驶结束时间 | |||
/// </summary> | |||
public DateTime ContinueDrivingEndTime { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int GpsStartLng { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int GpsStartLat { get; set; } | |||
/// <summary> | |||
/// 高度 | |||
/// </summary> | |||
public short StartHeight { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
public int GpsEndLng { get; set; } | |||
/// <summary> | |||
/// 纬度 | |||
/// </summary> | |||
public int GpsEndLat { get; set; } | |||
/// <summary> | |||
/// 高度 | |||
/// </summary> | |||
public short EndHeight { get; set; } | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的驾驶人身份记录 | |||
/// 返回:符合条件的驾驶人登录退出记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x12 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x12 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x12>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的驾驶人身份记录.ToByteValue(); | |||
/// <summary> | |||
@@ -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<JT808_CarDVR_Up_0x12_DriveLogin>(); | |||
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 25;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志 | |||
value.JT808_CarDVR_Up_0x12_DriveLogins = new List<JT808_CarDVR_Up_0x12_DriveLogin>(); | |||
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); | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 单位驾驶人身份记录数据块格式 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x12_DriveLogin | |||
{ | |||
/// <summary> | |||
/// 单位驾驶人身份记录数据块格式 | |||
/// 登入登出时间发生时间 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x12_DriveLogin | |||
{ | |||
/// <summary> | |||
/// 登入登出时间发生时间 | |||
/// </summary> | |||
public DateTime LoginTime { get; set; } | |||
/// <summary> | |||
/// 机动车驾驶证号码 18位 | |||
/// </summary> | |||
public string DriverLicenseNo { get; set; } | |||
/// <summary> | |||
/// 事件类型 | |||
/// </summary> | |||
public byte LoginType { get; set; } | |||
} | |||
public DateTime LoginTime { get; set; } | |||
/// <summary> | |||
/// 机动车驾驶证号码 18位 | |||
/// </summary> | |||
public string DriverLicenseNo { get; set; } | |||
/// <summary> | |||
/// 事件类型 | |||
/// </summary> | |||
public byte LoginType { get; set; } | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的外部供电记录 | |||
/// 返回:符合条件的供电记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x13 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x13 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x13>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的外部供电记录.ToByteValue(); | |||
/// <summary> | |||
@@ -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<JT808_CarDVR_Up_0x13_ExternalPowerSupply>(); | |||
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); | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 单位记录仪外部供电记录数据块格式 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x13_ExternalPowerSupply | |||
{ | |||
/// <summary> | |||
/// 单位记录仪外部供电记录数据块格式 | |||
/// 事件发生时间 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x13_ExternalPowerSupply | |||
{ | |||
/// <summary> | |||
/// 事件发生时间 | |||
/// </summary> | |||
public DateTime EventTime { get; set; } | |||
/// <summary> | |||
/// 事件类型 | |||
/// </summary> | |||
public byte EventType { get; set; } | |||
} | |||
public DateTime EventTime { get; set; } | |||
/// <summary> | |||
/// 事件类型 | |||
/// </summary> | |||
public byte EventType { get; set; } | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的参数修改记录 | |||
/// 返回:符合条件的参数修改记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x14 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x14 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x14>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的参数修改记录.ToByteValue(); | |||
/// <summary> | |||
@@ -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<JT808_CarDVR_Up_0x14_ParameterModify>(); | |||
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); | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 单位参数修改记录数据块格式 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x14_ParameterModify | |||
{ | |||
/// <summary> | |||
/// 单位记录仪外部供电记录数据块格式 | |||
/// 事件发生时间 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x14_ParameterModify | |||
{ | |||
/// <summary> | |||
/// 事件发生时间 | |||
/// </summary> | |||
public DateTime EventTime { get; set; } | |||
/// <summary> | |||
/// 事件类型 | |||
/// </summary> | |||
public byte EventType { get; set; } | |||
} | |||
public DateTime EventTime { get; set; } | |||
/// <summary> | |||
/// 事件类型 | |||
/// </summary> | |||
public byte EventType { get; set; } | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的速度状态日志 | |||
/// 返回:符合条件的速度状态日志 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x15 : JT808CarDVRUpBodies, IJT808Analyze | |||
public class JT808_CarDVR_Up_0x15 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x15>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的速度状态日志.ToByteValue(); | |||
/// <summary> | |||
@@ -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<JT808_CarDVR_Up_0x15_SpeedStatusLog>(); | |||
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); | |||
} | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 单位速度状态日志数据块格式 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x15_SpeedStatusLog | |||
{ | |||
/// <summary> | |||
/// 单位速度状态日志数据块格式 | |||
/// 记录仪的速度状态 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x15_SpeedStatusLog | |||
{ | |||
/// <summary> | |||
/// 记录仪的速度状态 | |||
/// </summary> | |||
public byte SpeedStatus { get; set; } | |||
/// <summary> | |||
/// 速度状态判定的开始时间 | |||
/// </summary> | |||
public DateTime SpeedStatusStartTime { get; set; } | |||
/// <summary> | |||
/// 速度状态判定的结束时间 | |||
/// </summary> | |||
public DateTime SpeedStatusEndTime { get; set; } | |||
/// <summary> | |||
/// 60组 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x15_SpeedPerSecond> JT808_CarDVR_Up_0x15_SpeedPerSeconds { get; set; } | |||
} | |||
public byte SpeedStatus { get; set; } | |||
/// <summary> | |||
/// 每秒速度 | |||
/// 速度状态判定的开始时间 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x15_SpeedPerSecond | |||
{ | |||
/// <summary> | |||
/// 记录速度 | |||
/// </summary> | |||
public byte RecordSpeed { get; set; } | |||
/// <summary> | |||
/// 参考速度 | |||
/// </summary> | |||
public byte ReferenceSpeed { get; set; } | |||
} | |||
public DateTime SpeedStatusStartTime { get; set; } | |||
/// <summary> | |||
/// 速度状态判定的结束时间 | |||
/// </summary> | |||
public DateTime SpeedStatusEndTime { get; set; } | |||
/// <summary> | |||
/// 60组 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x15_SpeedPerSecond> JT808_CarDVR_Up_0x15_SpeedPerSeconds { get; set; } | |||
} | |||
/// <summary> | |||
/// 每秒速度 | |||
/// </summary> | |||
public class JT808_CarDVR_Up_0x15_SpeedPerSecond | |||
{ | |||
/// <summary> | |||
/// 记录速度 | |||
/// </summary> | |||
public byte RecordSpeed { get; set; } | |||
/// <summary> | |||
/// 参考速度 | |||
/// </summary> | |||
public byte ReferenceSpeed { get; set; } | |||
} | |||
} |
@@ -15,29 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置车辆信息 | |||
/// 返回:车辆信息 | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -15,26 +15,12 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置记录仪初次安装日期 | |||
/// 返回:初次安装日期 | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -15,26 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置状态量配置信息 | |||
/// 返回:状态量配置信息 | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置记录仪时间 | |||
/// 返回:北京时间的日期、时钟 | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置记录仪脉冲系数 | |||
/// 返回:记录仪脉冲系数 | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -15,25 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 设置初始里程 | |||
/// 返回:记录仪初次安装时车辆已行驶的总里程 | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -14,27 +14,12 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// <summary> | |||
/// 进入或保持检定状态 | |||
/// 返回:进入或保持检定状态 | |||
/// 在检定状态下,检定装置以不大于2秒的时间间隔发送包含本命令字的命令帧,记录仪在6秒内未收到该命令帧,则自动返回正常工作状态。 | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -15,26 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 进入里程误差测量 | |||
/// 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平) | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 进入脉冲系数误差测量 | |||
/// 返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平) | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -15,27 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 进入实时时间误差测量 | |||
/// 返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平) | |||
/// </summary> | |||
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; | |||
} | |||
} | |||
} |
@@ -15,25 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回正常工作状态 | |||
/// 返回:返回正常工作状态 | |||
/// </summary> | |||
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; | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 行驶记录数据上传 | |||
/// 0x0700 | |||
/// </summary> | |||
public class JT808_0x0700 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0700>, IJT808Analyze | |||
{ | |||
public override ushort MsgId { get; } = 0x0700; | |||
public override string Description => "行驶记录数据上传"; | |||
/// <summary> | |||
/// 应答流水号 | |||
/// </summary> | |||
public ushort ReplyMsgNum { get; set; } | |||
/// <summary> | |||
/// 命令字 | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -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 | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 行驶记录参数下传命令 | |||
/// </summary> | |||
public class JT808_0x8701: JT808Bodies, IJT808MessagePackFormatter<JT808_0x8701>, IJT808_2019_Version, IJT808Analyze | |||
{ | |||
public override ushort MsgId => 0x8701; | |||
public override string Description => "行驶记录参数下传命令"; | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
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); | |||
} | |||
} | |||
} |
@@ -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); | |||
} | |||
} | |||