@@ -365,9 +365,9 @@ Platform=AnyCpu Server=False Toolchain=.NET Core 3.1 | |||
| 40 | 0x8605 | √ | √ | 删除多边形区域 | | |||
| 41 | 0x8606 | √ | √ | 设置路线 |修改| | |||
| 42 | 0x8607 | √ | √ | 删除路线 | | |||
| 43 | 0x8700 | x | x | 行驶记录仪数据采集命令 |待开发 | |||
| 44 | 0x0700 | x | x | 行驶记录仪数据上传 |待开发 | |||
| 45 | 0x8701 | x | x | 行驶记录仪参数下传命令 |待开发 | |||
| 43 | 0x8700 | √ | √ | 行驶记录仪数据采集命令 |待开发 | |||
| 44 | 0x0700 | √ | √ | 行驶记录仪数据上传 |待开发 | |||
| 45 | 0x8701 | √ | √ | 行驶记录仪参数下传命令 |待开发 | |||
| 46 | 0x0701 | √ | √ | 电子运单上报 | | |||
| 47 | 0x0702 | √ | √ | 驾驶员身份信息采集上报 |修改| | |||
| 48 | 0x8702 | √ | 消息体为空| 上报驾驶员身份信息请求 | | |||
@@ -89,6 +89,8 @@ | |||
<Compile Include="MessageBody\JT808_0x8604Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x8605Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x0608Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x8701Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x8700Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x8607Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x8608Test.cs" /> | |||
<Compile Include="MessageBody\JT808_0x8606Test.cs" /> | |||
@@ -25,6 +25,58 @@ namespace JT808.Protocol.Test.MessageBody | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Test_Analyze() | |||
{ | |||
//0x00 | |||
byte[] bytes = "000100557A00000200190135".ToHexBytes(); | |||
var value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x01 | |||
bytes = "000101557A0100120034333032323331393930303731323636383732".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x02 | |||
bytes = "000102557A020006002003231010103B".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x03 | |||
bytes = "000103557A03001400200322101010200323101010000010000000500079".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x04 | |||
bytes = "000104557A04000800200323101010003201".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x05 | |||
bytes = "000105557A050027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B5000009".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x06 | |||
bytes = "000106557A06005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000084".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x07 | |||
bytes = "000107557A0700230031323334353637313233343536373839313233343536372003233132333431323334003A".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x08 | |||
bytes = "000108557A08007E002003230000000A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x09 | |||
bytes = "000109557A09029A0020032300000006C6431601691B8800320AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x10 | |||
bytes = "000110557A1000EA002003230000003433303232333139393030393230333639380A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06C6431601691B8800329D".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x11 | |||
bytes = "000111557A1100320034333032323331393930303932303336393820032200000020032300000006C6431601691B88003206C6431701691B89003C09".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x12 | |||
bytes = "000112557A12001900200323000000343330323233313939303039323033363938012F".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x13 | |||
bytes = "000113557A13000700200323000000013A".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x14 | |||
bytes = "000114557A14000700200323000000013D".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
//0x15 | |||
bytes = "000115557A15008500012003220000002003230000003228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x0700>(bytes); | |||
} | |||
[Fact] | |||
public void Test_Serialize_0x00() | |||
{ | |||
JT808_0x0700 value = new JT808_0x0700(); | |||
@@ -86,6 +138,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x01; | |||
Assert.Equal("430223199007126687", body.DriverLicenseNo); | |||
} | |||
[Fact] | |||
public void Test_Serialize_0x02() | |||
{ | |||
@@ -393,7 +446,7 @@ namespace JT808.Protocol.Test.MessageBody | |||
GpsLng=113656598, | |||
Height=50, | |||
DriverLicenseNo="430223199009203698", | |||
JT808_CarDVR_Up_0x09_DrivingStatuss=new List<JT808_CarDVR_Up_0x10_DrivingStatus> | |||
JT808_CarDVR_Up_0x10_DrivingStatuss=new List<JT808_CarDVR_Up_0x10_DrivingStatus> | |||
{ | |||
new JT808_CarDVR_Up_0x10_DrivingStatus{ | |||
Speed=10, | |||
@@ -419,8 +472,8 @@ namespace JT808.Protocol.Test.MessageBody | |||
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); | |||
Assert.Equal(10, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x10_DrivingStatuss[0].Speed); | |||
Assert.Equal(20, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x10_DrivingStatuss[0].StatusSignal); | |||
} | |||
[Fact] | |||
public void Test_Serialize_0x11() | |||
@@ -449,13 +502,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("000100557A00000300190134", hex); | |||
Assert.Equal("000111557A1100320034333032323331393930303932303336393820032200000020032300000006C6431601691B88003206C6431701691B89003C09", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0x11() | |||
{ | |||
byte[] bytes = "000100557A00000300190134".ToHexBytes(); | |||
byte[] bytes = "000111557A1100320034333032323331393930303932303336393820032200000020032300000006C6431601691B88003206C6431701691B89003C09".ToHexBytes(); | |||
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes); | |||
Assert.Equal(1, value.ReplyMsgNum); | |||
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x11; | |||
@@ -490,13 +543,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("000100557A00000300190134", hex); | |||
Assert.Equal("000112557A12001900200323000000343330323233313939303039323033363938012F", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0x12() | |||
{ | |||
byte[] bytes = "000100557A00000300190134".ToHexBytes(); | |||
byte[] bytes = "000112557A12001900200323000000343330323233313939303039323033363938012F".ToHexBytes(); | |||
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes); | |||
Assert.Equal(1, value.ReplyMsgNum); | |||
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x12; | |||
@@ -524,13 +577,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("000100557A00000300190134", hex); | |||
Assert.Equal("000113557A13000700200323000000013A", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0x13() | |||
{ | |||
byte[] bytes = "000100557A00000300190134".ToHexBytes(); | |||
byte[] bytes = "000113557A13000700200323000000013A".ToHexBytes(); | |||
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes); | |||
Assert.Equal(1, value.ReplyMsgNum); | |||
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x13; | |||
@@ -557,13 +610,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("000100557A00000300190134", hex); | |||
Assert.Equal("000114557A14000700200323000000013D", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0x14() | |||
{ | |||
byte[] bytes = "000100557A00000300190134".ToHexBytes(); | |||
byte[] bytes = "000114557A14000700200323000000013D".ToHexBytes(); | |||
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes); | |||
Assert.Equal(1, value.ReplyMsgNum); | |||
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x14; | |||
@@ -597,13 +650,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("000100557A00000300190134", hex); | |||
Assert.Equal("000115557A15008500012003220000002003230000003228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0x15() | |||
{ | |||
byte[] bytes = "000100557A00000300190134".ToHexBytes(); | |||
byte[] bytes = "000115557A15008500012003220000002003230000003228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5".ToHexBytes(); | |||
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes); | |||
Assert.Equal(1, value.ReplyMsgNum); | |||
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x15; | |||
@@ -0,0 +1,96 @@ | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.Extensions; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
using JT808.Protocol.Internal; | |||
using JT808.Protocol.MessageBody.CarDVR; | |||
namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
public class JT808_0x8700Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x8700Test() | |||
{ | |||
IJT808Config jT808Config = new DefaultGlobalConfig(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Test_Analyze() | |||
{ | |||
//0x00 -- 0x07 指令和这个单元测试一样 | |||
byte[] bytes = "00557A000000002F".ToHexBytes(); | |||
var value = JT808Serializer.Analyze<JT808_0x8700>(bytes); | |||
// 0x08 -- 0x15 测试用例一样 | |||
bytes = "08557A08000E00200322101010200323101010000129".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x8700>(bytes); | |||
} | |||
/// <summary> | |||
/// 0x00 -- 0x07 指令和这个单元测试一样 | |||
/// </summary> | |||
[Fact] | |||
public void Test_Serilize_0x00() | |||
{ | |||
JT808_0x8700 value = new JT808_0x8700(); | |||
value.CommandId = 0x00; | |||
value.JT808CarDVRDownPackage = new JT808CarDVRDownPackage { | |||
CommandId=0x00, | |||
Bodies=new JT808_CarDVR_Down_0x00() | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("00557A000000002F", hex); | |||
} | |||
/// <summary> | |||
/// 0x00 -- 0x07 指令和这个单元测试一样 | |||
/// </summary> | |||
[Fact] | |||
public void Test_Deserilize_0x00() | |||
{ | |||
byte[] bytes = "00557A000000002F".ToHexBytes(); | |||
JT808_0x8700 value = JT808Serializer.Deserialize<JT808_0x8700>(bytes); | |||
Assert.Equal(0, value.CommandId); | |||
var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage; | |||
Assert.Equal(0, body.CommandId); | |||
} | |||
/// <summary> | |||
/// 0x08 -- 0x15 测试用例一样 | |||
/// </summary> | |||
[Fact] | |||
public void Test_Serilize_0x08() | |||
{ | |||
JT808_0x8700 value = new JT808_0x8700(); | |||
value.CommandId = 0x08; | |||
value.JT808CarDVRDownPackage = new JT808CarDVRDownPackage | |||
{ | |||
CommandId = 0x08, | |||
Bodies = new JT808_CarDVR_Down_0x08() | |||
{ | |||
StartTime = Convert.ToDateTime("2020-03-22 10:10:10"), | |||
EndTime = Convert.ToDateTime("2020-03-23 10:10:10"), | |||
Count =1 | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("08557A08000E00200322101010200323101010000129", hex); | |||
} | |||
/// <summary> | |||
/// 0x08 -- 0x15 测试用例一样 | |||
/// </summary> | |||
[Fact] | |||
public void Test_Deserilize_0x08() | |||
{ | |||
byte[] bytes = "08557A08000E00200322101010200323101010000129".ToHexBytes(); | |||
JT808_0x8700 value = JT808Serializer.Deserialize<JT808_0x8700>(bytes); | |||
Assert.Equal(0x08, value.CommandId); | |||
var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage; | |||
Assert.Equal(0x08, body.CommandId); | |||
var subBody = body.Bodies as JT808_CarDVR_Down_0x08; | |||
Assert.Equal("2020-03-22 10:10:10", subBody.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
Assert.Equal("2020-03-23 10:10:10", subBody.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
Assert.Equal(1, subBody.Count); | |||
} | |||
} | |||
} |
@@ -0,0 +1,241 @@ | |||
using JT808.Protocol.MessageBody; | |||
using JT808.Protocol.Extensions; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using Xunit; | |||
using JT808.Protocol.Internal; | |||
using JT808.Protocol.MessageBody.CarDVR; | |||
namespace JT808.Protocol.Test.MessageBody | |||
{ | |||
public class JT808_0x8701Test | |||
{ | |||
JT808Serializer JT808Serializer; | |||
public JT808_0x8701Test() | |||
{ | |||
IJT808Config jT808Config = new DefaultGlobalConfig(); | |||
JT808Serializer = new JT808Serializer(jT808Config); | |||
} | |||
[Fact] | |||
public void Test_Analyze() | |||
{ | |||
//0x82 | |||
byte[] bytes = "82557A820027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B500008E".ToHexBytes(); | |||
var value = JT808Serializer.Analyze<JT808_0x8701>(bytes); | |||
// 0x83 | |||
bytes = "83557A83000600200323101010BA".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x8701>(bytes); | |||
//0x84 | |||
bytes = "84557A84005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000006".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x8701>(bytes); | |||
// 0xC2 | |||
bytes = "C2557AC2000600200323101010FB".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x8701>(bytes); | |||
//0xC3 | |||
bytes = "C3557AC30008002003231010100032C6".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x8701>(bytes); | |||
// 0xC4 | |||
bytes = "C4557AC40014002003231010102003221010100000100000005000BE".ToHexBytes(); | |||
value = JT808Serializer.Analyze<JT808_0x8701>(bytes); | |||
} | |||
[Fact] | |||
public void Test_Serilize_0x82() | |||
{ | |||
JT808_0x8701 value = new JT808_0x8701(); | |||
value.CommandId = 0x82; | |||
value.JT808CarDVRDownPackage = new JT808CarDVRDownPackage | |||
{ | |||
CommandId = 0x82, | |||
Bodies = new JT808_CarDVR_Down_0x82() { | |||
VehicleNo="粤B12345", | |||
VehicleType="重型货车", | |||
Vin="12345678912345678" | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("82557A820027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B500008E", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0x82() | |||
{ | |||
byte[] bytes = "82557A820027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B500008E".ToHexBytes(); | |||
JT808_0x8701 value = JT808Serializer.Deserialize<JT808_0x8701>(bytes); | |||
Assert.Equal(0x82, value.CommandId); | |||
var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage; | |||
Assert.Equal(0x82, body.CommandId); | |||
var subBody = body.Bodies as JT808_CarDVR_Down_0x82; | |||
Assert.Equal("粤B12345", subBody.VehicleNo); | |||
Assert.Equal("重型货车", subBody.VehicleType); | |||
Assert.Equal("12345678912345678", subBody.Vin); | |||
} | |||
[Fact] | |||
public void Test_Serilize_0x83() | |||
{ | |||
JT808_0x8701 value = new JT808_0x8701(); | |||
value.CommandId = 0x83; | |||
value.JT808CarDVRDownPackage = new JT808CarDVRDownPackage | |||
{ | |||
CommandId = 0x83, | |||
Bodies = new JT808_CarDVR_Down_0x83() | |||
{ | |||
RealTime = Convert.ToDateTime("2020-03-23 10:10:10") | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("83557A83000600200323101010BA", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0x83() | |||
{ | |||
byte[] bytes = "83557A83000600200323101010BA".ToHexBytes(); | |||
JT808_0x8701 value = JT808Serializer.Deserialize<JT808_0x8701>(bytes); | |||
Assert.Equal(0x83, value.CommandId); | |||
var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage; | |||
Assert.Equal(0x83, body.CommandId); | |||
var subBody = body.Bodies as JT808_CarDVR_Down_0x83; | |||
Assert.Equal("2020-03-23 10:10:10", subBody.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
} | |||
[Fact] | |||
public void Test_Serilize_0x84() | |||
{ | |||
JT808_0x8701 value = new JT808_0x8701(); | |||
value.CommandId = 0x84; | |||
value.JT808CarDVRDownPackage = new JT808CarDVRDownPackage | |||
{ | |||
CommandId = 0x84, | |||
Bodies = new JT808_CarDVR_Down_0x84() | |||
{ | |||
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("84557A84005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000006", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0x84() | |||
{ | |||
byte[] bytes = "84557A84005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000006".ToHexBytes(); | |||
JT808_0x8701 value = JT808Serializer.Deserialize<JT808_0x8701>(bytes); | |||
Assert.Equal(0x84, value.CommandId); | |||
var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage; | |||
Assert.Equal(0x84, body.CommandId); | |||
var subBody = body.Bodies as JT808_CarDVR_Down_0x84; | |||
Assert.Equal("远光灯", subBody.FarLight); | |||
Assert.Equal("制动", subBody.Brake); | |||
Assert.Equal("自定义1", subBody.D0); | |||
Assert.Equal("自定义2", subBody.D1); | |||
Assert.Equal("自定义3", subBody.D2); | |||
Assert.Equal("左转向", subBody.LeftTurn); | |||
Assert.Equal("近光灯", subBody.NearLight); | |||
Assert.Equal("2020-03-23 10:10:10", subBody.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
Assert.Equal("右转向", subBody.RightTurn); | |||
Assert.Equal(255, subBody.SignalOperate); | |||
} | |||
[Fact] | |||
public void Test_Serilize_0xC2() | |||
{ | |||
JT808_0x8701 value = new JT808_0x8701(); | |||
value.CommandId = 0xC2; | |||
value.JT808CarDVRDownPackage = new JT808CarDVRDownPackage | |||
{ | |||
CommandId = 0xC2, | |||
Bodies = new JT808_CarDVR_Down_0xC2() | |||
{ | |||
RealTime = Convert.ToDateTime("2020-03-23 10:10:10") | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("C2557AC2000600200323101010FB", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0xC2() | |||
{ | |||
byte[] bytes = "C2557AC2000600200323101010FB".ToHexBytes(); | |||
JT808_0x8701 value = JT808Serializer.Deserialize<JT808_0x8701>(bytes); | |||
Assert.Equal(0xC2, value.CommandId); | |||
var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage; | |||
Assert.Equal(0xC2, body.CommandId); | |||
var subBody = body.Bodies as JT808_CarDVR_Down_0xC2; | |||
Assert.Equal("2020-03-23 10:10:10", subBody.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
} | |||
[Fact] | |||
public void Test_Serilize_0xC3() | |||
{ | |||
JT808_0x8701 value = new JT808_0x8701(); | |||
value.CommandId = 0xC3; | |||
value.JT808CarDVRDownPackage = new JT808CarDVRDownPackage | |||
{ | |||
CommandId = 0xC3, | |||
Bodies = new JT808_CarDVR_Down_0xC3() | |||
{ | |||
PulseCoefficient=50, | |||
RealTime = Convert.ToDateTime("2020-03-23 10:10:10") | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("C3557AC30008002003231010100032C6", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0xC3() | |||
{ | |||
byte[] bytes = "C3557AC30008002003231010100032C6".ToHexBytes(); | |||
JT808_0x8701 value = JT808Serializer.Deserialize<JT808_0x8701>(bytes); | |||
Assert.Equal(0xC3, value.CommandId); | |||
var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage; | |||
Assert.Equal(0xC3, body.CommandId); | |||
var subBody = body.Bodies as JT808_CarDVR_Down_0xC3; | |||
Assert.Equal("2020-03-23 10:10:10", subBody.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
Assert.Equal(50, subBody.PulseCoefficient); | |||
} | |||
[Fact] | |||
public void Test_Serilize_0xC4() | |||
{ | |||
JT808_0x8701 value = new JT808_0x8701(); | |||
value.CommandId = 0xC4; | |||
value.JT808CarDVRDownPackage = new JT808CarDVRDownPackage | |||
{ | |||
CommandId = 0xC4, | |||
Bodies = new JT808_CarDVR_Down_0xC4() | |||
{ | |||
FirstInstallTime = Convert.ToDateTime("2020-03-22 10:10:10"), | |||
RealTime = Convert.ToDateTime("2020-03-23 10:10:10"), | |||
FirstMileage="1000", | |||
TotalMilage="5000" | |||
} | |||
}; | |||
var hex = JT808Serializer.Serialize(value).ToHexString(); | |||
Assert.Equal("C4557AC40014002003231010102003221010100000100000005000BE", hex); | |||
} | |||
[Fact] | |||
public void Test_Deserilize_0xC4() | |||
{ | |||
byte[] bytes = "C4557AC40014002003231010102003221010100000100000005000BE".ToHexBytes(); | |||
JT808_0x8701 value = JT808Serializer.Deserialize<JT808_0x8701>(bytes); | |||
Assert.Equal(0xC4, value.CommandId); | |||
var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage; | |||
Assert.Equal(0xC4, body.CommandId); | |||
var subBody = body.Bodies as JT808_CarDVR_Down_0xC4; | |||
Assert.Equal("2020-03-22 10:10:10", subBody.FirstInstallTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
Assert.Equal("2020-03-23 10:10:10", subBody.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
Assert.Equal("1000", subBody.FirstMileage); | |||
Assert.Equal("5000", subBody.TotalMilage); | |||
} | |||
} | |||
} |
@@ -28,6 +28,8 @@ namespace JT808.Protocol.Interfaces | |||
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(); | |||
IJT808_CarDVR_Up_Package = new JT808CarDVRUpPackage(); | |||
IJT808_CarDVR_Down_Package = new JT808CarDVRDownPackage(); | |||
TerminalPhoneNoLength = 12; | |||
Trim = true; | |||
} | |||
@@ -50,6 +52,8 @@ 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 IJT808_CarDVR_Up_Package IJT808_CarDVR_Up_Package { get; set; } | |||
public IJT808_CarDVR_Down_Package IJT808_CarDVR_Down_Package { get; set; } | |||
public bool SkipCarDVRCRCCode { get; set; } | |||
public virtual IJT808Config Register(params Assembly[] externalAssemblies) | |||
@@ -61,14 +61,22 @@ namespace JT808.Protocol | |||
/// </summary> | |||
IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; } | |||
/// <summary> | |||
/// 记录仪上行工厂 | |||
/// 记录仪上行命令字工厂 | |||
/// </summary> | |||
IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; } | |||
/// <summary> | |||
/// 记录仪下行工厂 | |||
/// 记录仪下行命令字工厂 | |||
/// </summary> | |||
IJT808_CarDVR_Down_Factory JT808_CarDVR_Down_Factory { get; set; } | |||
/// <summary> | |||
/// 记录仪上行包 | |||
/// </summary> | |||
public IJT808_CarDVR_Up_Package IJT808_CarDVR_Up_Package { get; set; } | |||
/// <summary> | |||
/// 记录仪下行包 | |||
/// </summary> | |||
public IJT808_CarDVR_Down_Package IJT808_CarDVR_Down_Package { get; set; } | |||
/// <summary> | |||
/// 统一编码 | |||
/// </summary> | |||
Encoding Encoding { get; set; } | |||
@@ -0,0 +1,10 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Interfaces | |||
{ | |||
public interface IJT808_CarDVR_Down_Package | |||
{ | |||
} | |||
} |
@@ -0,0 +1,10 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT808.Protocol.Interfaces | |||
{ | |||
public interface IJT808_CarDVR_Up_Package | |||
{ | |||
} | |||
} |
@@ -2706,12 +2706,22 @@ | |||
</member> | |||
<member name="P:JT808.Protocol.IJT808Config.JT808_CarDVR_Up_Factory"> | |||
<summary> | |||
记录仪上行工厂 | |||
记录仪上行命令字工厂 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.IJT808Config.JT808_CarDVR_Down_Factory"> | |||
<summary> | |||
记录仪下行工厂 | |||
记录仪下行命令字工厂 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.IJT808Config.IJT808_CarDVR_Up_Package"> | |||
<summary> | |||
记录仪上行包 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.IJT808Config.IJT808_CarDVR_Down_Package"> | |||
<summary> | |||
记录仪下行包 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.IJT808Config.Encoding"> | |||
@@ -3794,14 +3804,9 @@ | |||
当前时间 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficientHighByte"> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficient"> | |||
<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"> | |||
@@ -3966,7 +3971,7 @@ | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x04.PulseCoefficient"> | |||
<summary> | |||
脉冲系数高字节 | |||
脉冲系数 | |||
</summary> | |||
</member> | |||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x05"> | |||
@@ -4202,7 +4207,7 @@ | |||
机动车驾驶证号码 | |||
</summary> | |||
</member> | |||
<member name="P:JT808.Protocol.MessageBody.CarDVR.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_0x10_DrivingStatuss"> | |||
<summary> | |||
每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列 | |||
</summary> | |||
@@ -2,14 +2,16 @@ | |||
using JT808.Protocol.Exceptions; | |||
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 | |||
{ | |||
public class JT808CarDVRDownPackage : IJT808MessagePackFormatter<JT808CarDVRDownPackage> | |||
public class JT808CarDVRDownPackage : IJT808_CarDVR_Down_Package,IJT808MessagePackFormatter<JT808CarDVRDownPackage>, IJT808Analyze | |||
{ | |||
public const ushort BeginFlag = 0x557A; | |||
/// <summary> | |||
@@ -82,5 +84,39 @@ namespace JT808.Protocol | |||
value.CheckCode = reader.ReadByte(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808CarDVRDownPackage value = new JT808CarDVRDownPackage(); | |||
writer.WriteStartObject("行车记录仪下行数据包"); | |||
int currentPosition = reader.ReaderCount; | |||
value.Begin = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Begin.ReadNumber()}]起始字头", value.Begin); | |||
value.CommandId = reader.ReadByte(); | |||
writer.WriteString($"[{value.Begin.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
value.DataLength = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]数据块长度", value.DataLength); | |||
value.KeepFields = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.KeepFields.ReadNumber()}]保留字", value.KeepFields); | |||
if (value.DataLength > 0) | |||
{ | |||
if (config.JT808_CarDVR_Down_Factory.Map.TryGetValue(value.CommandId, out var instance)) | |||
{ | |||
//4.2.处理消息体 | |||
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
instance.Analyze(ref reader, writer, config); | |||
writer.WriteEndObject(); | |||
} | |||
} | |||
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(); | |||
writer.WriteNumber($"[{value.CheckCode.ReadNumber()}]校验位", value.CheckCode); | |||
writer.WriteEndObject(); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol | |||
/// <summary> | |||
/// 行车记录仪上行数据包 | |||
/// </summary> | |||
public class JT808CarDVRUpPackage : IJT808MessagePackFormatter<JT808CarDVRUpPackage>, IJT808Analyze | |||
public class JT808CarDVRUpPackage : IJT808_CarDVR_Up_Package,IJT808MessagePackFormatter<JT808CarDVRUpPackage>, IJT808Analyze | |||
{ | |||
public const ushort BeginFlag = 0x557A; | |||
/// <summary> | |||
@@ -44,7 +44,36 @@ namespace JT808.Protocol | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
throw new NotImplementedException(); | |||
JT808CarDVRUpPackage value = new JT808CarDVRUpPackage(); | |||
writer.WriteStartObject("行车记录仪上行数据包"); | |||
int currentPosition = reader.ReaderCount; | |||
value.Begin = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Begin.ReadNumber()}]起始字头", value.Begin); | |||
value.CommandId = reader.ReadByte(); | |||
writer.WriteString($"[{value.Begin.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
value.DataLength = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]数据块长度", value.DataLength); | |||
value.KeepFields = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.KeepFields.ReadNumber()}]保留字", value.KeepFields); | |||
if (value.DataLength > 0) | |||
{ | |||
if (config.JT808_CarDVR_Up_Factory.Map.TryGetValue(value.CommandId, out var instance)) | |||
{ | |||
//4.2.处理消息体 | |||
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
instance.Analyze(ref reader,writer, config); | |||
writer.WriteEndObject(); | |||
} | |||
} | |||
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(); | |||
writer.WriteNumber($"[{value.CheckCode.ReadNumber()}]校验位", value.CheckCode); | |||
writer.WriteEndObject(); | |||
} | |||
public JT808CarDVRUpPackage Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的行驶速度记录 | |||
/// 如在指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x08> | |||
public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x08>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的行驶速度记录.ToByteValue(); | |||
/// <summary> | |||
@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
value.Count = reader.ReadUInt16(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x08 value = new JT808_CarDVR_Down_0x08(); | |||
value.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.Count = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的位置信息记录 | |||
/// 指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x09> | |||
public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x09>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的位置信息记录.ToByteValue(); | |||
@@ -48,5 +48,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
value.Count = reader.ReadUInt16(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x09 value = new JT808_CarDVR_Down_0x09(); | |||
value.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.Count = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 返回:符合条件的事故疑点记录 | |||
/// 指定的时间范围内无数据记录,则本数据块数据为空 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x10> | |||
public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x10>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的事故疑点记录.ToByteValue(); | |||
@@ -48,5 +48,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
value.Count = reader.ReadUInt16(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x10 value = new JT808_CarDVR_Down_0x10(); | |||
value.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.Count = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的超时驾驶记录 | |||
/// 返回:符合条件的超时驾驶记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x11> | |||
public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x11>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的超时驾驶记录.ToByteValue(); | |||
@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
value.Count = reader.ReadUInt16(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x11 value = new JT808_CarDVR_Down_0x11(); | |||
value.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.Count = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的驾驶人身份记录 | |||
/// 返回:符合条件的驾驶人登录退出记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x12> | |||
public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x12>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的驾驶人身份记录.ToByteValue(); | |||
@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
value.Count = reader.ReadUInt16(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x12 value = new JT808_CarDVR_Down_0x12(); | |||
value.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.Count = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的外部供电记录 | |||
/// 返回:符合条件的供电记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x13> | |||
public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x13>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的外部供电记录.ToByteValue(); | |||
@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
value.Count = reader.ReadUInt16(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x13 value = new JT808_CarDVR_Down_0x13(); | |||
value.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.Count = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的参数修改记录 | |||
/// 返回:符合条件的参数修改记录 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x14> | |||
public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x14>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的参数修改记录.ToByteValue(); | |||
@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
value.Count = reader.ReadUInt16(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x14 value = new JT808_CarDVR_Down_0x14(); | |||
value.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.Count = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count); | |||
} | |||
} | |||
} |
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// 采集指定的速度状态日志 | |||
/// 返回:符合条件的速度状态日志 | |||
/// </summary> | |||
public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x15> | |||
public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x15>, IJT808Analyze | |||
{ | |||
public override byte CommandId => JT808CarDVRCommandID.采集指定的速度状态日志.ToByteValue(); | |||
@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
value.Count = reader.ReadUInt16(); | |||
return value; | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x15 value = new JT808_CarDVR_Down_0x15(); | |||
value.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.Count = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count); | |||
} | |||
} | |||
} |
@@ -36,26 +36,37 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x82 value = new JT808_CarDVR_Down_0x82(); | |||
var vinHex = reader.ReadVirtualArray(17); | |||
value.Vin = reader.ReadASCII(17); | |||
writer.WriteString($"[{vinHex.ToArray().ToHexString()}]车辆识别代号", value.Vin); | |||
var vehicleNoHex = reader.ReadVirtualArray(12); | |||
value.VehicleNo = reader.ReadString(12); | |||
writer.WriteString($"[{vehicleNoHex.ToArray().ToHexString()}]机动车号牌号码", value.VehicleNo); | |||
var vehicleTypeHex = reader.ReadVirtualArray(10); | |||
value.VehicleType = reader.ReadString(10); | |||
writer.WriteString($"[{vehicleTypeHex.ToArray().ToHexString()}]机动车号牌分类", value.VehicleType); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x82 value, IJT808Config config) | |||
{ | |||
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); | |||
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 JT808_CarDVR_Down_0x82 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
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); | |||
value.VehicleNo = reader.ReadString(12); | |||
value.VehicleType = reader.ReadString(10); | |||
return value; | |||
} | |||
} | |||
@@ -26,7 +26,9 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x83 value = new JT808_CarDVR_Down_0x83(); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]初次安装日期", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x83 value, IJT808Config config) | |||
@@ -64,21 +64,65 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0x84 value = new JT808_CarDVR_Down_0x84(); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]实时时间", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.SignalOperate = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.SignalOperate.ReadNumber()}]信号个数", value.SignalOperate); | |||
var display = reader.ReadVirtualArray(10); | |||
value.D0 = reader.ReadString(10); | |||
writer.WriteString($"[{display.ToArray().ToHexString()}]D0", value.D0); | |||
display = reader.ReadVirtualArray(10); | |||
value.D1 = reader.ReadString(10); | |||
writer.WriteString($"[{display.ToArray().ToHexString()}]D1", value.D1); | |||
display = reader.ReadVirtualArray(10); | |||
value.D2 = reader.ReadString(10); | |||
writer.WriteString($"[{display.ToArray().ToHexString()}]D2", value.D2); | |||
display = reader.ReadVirtualArray(10); | |||
value.NearLight = reader.ReadString(10); | |||
writer.WriteString($"[{display.ToArray().ToHexString()}]近光灯", value.NearLight); | |||
display = reader.ReadVirtualArray(10); | |||
value.FarLight = reader.ReadString(10); | |||
writer.WriteString($"[{display.ToArray().ToHexString()}]远光灯", value.FarLight); | |||
display = reader.ReadVirtualArray(10); | |||
value.RightTurn = reader.ReadString(10); | |||
writer.WriteString($"[{display.ToArray().ToHexString()}]右转向", value.RightTurn); | |||
display = reader.ReadVirtualArray(10); | |||
value.LeftTurn = reader.ReadString(10); | |||
writer.WriteString($"[{display.ToArray().ToHexString()}]左转向", value.LeftTurn); | |||
display = reader.ReadVirtualArray(10); | |||
value.Brake = reader.ReadString(10); | |||
writer.WriteString($"[{display.ToArray().ToHexString()}]制动", value.Brake); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x84 value, IJT808Config config) | |||
{ | |||
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)); | |||
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_Down_0x84 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
@@ -86,14 +130,14 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
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); | |||
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; | |||
} | |||
} | |||
@@ -26,7 +26,9 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0xC2 value = new JT808_CarDVR_Down_0xC2(); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]实时时间", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
} | |||
@@ -23,17 +23,18 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// </summary> | |||
public DateTime RealTime { get; set; } | |||
/// <summary> | |||
/// 脉冲系数高字节 | |||
/// 脉冲系数 | |||
/// </summary> | |||
public byte PulseCoefficientHighByte { get; set; } | |||
/// <summary> | |||
/// 仪脉冲系数低字节 | |||
/// </summary> | |||
public byte PulseCoefficientLowByte { get; set; } | |||
public ushort PulseCoefficient { get; set; } | |||
public override string Description => "记录仪脉冲系数"; | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0xC3 value = new JT808_CarDVR_Down_0xC3(); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]当前时间", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.PulseCoefficient = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.PulseCoefficient.ReadNumber()}]脉冲系数", value.PulseCoefficient); | |||
} | |||
@@ -41,16 +42,14 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC3 value, IJT808Config config) | |||
{ | |||
writer.WriteDateTime6(value.RealTime); | |||
writer.WriteByte(value.PulseCoefficientHighByte); | |||
writer.WriteByte(value.PulseCoefficientLowByte); | |||
writer.WriteUInt16(value.PulseCoefficient); | |||
} | |||
public JT808_CarDVR_Down_0xC3 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0xC3 value = new JT808_CarDVR_Down_0xC3(); | |||
value.RealTime = reader.ReadDateTime6(); | |||
value.PulseCoefficientHighByte = reader.ReadByte(); | |||
value.PulseCoefficientLowByte = reader.ReadByte(); | |||
value.PulseCoefficient = reader.ReadUInt16(); | |||
return value; | |||
} | |||
} | |||
@@ -38,7 +38,15 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0xC4 value = new JT808_CarDVR_Down_0xC4(); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]当前时间", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.FirstInstallTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{value.FirstInstallTime.ToString("yyMMddHHmmss")}]初次安装时间", value.FirstInstallTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||
value.FirstMileage = reader.ReadBCD(8); | |||
writer.WriteString($"[{value.FirstMileage}]初始里程", value.FirstMileage); | |||
value.TotalMilage = reader.ReadBCD(8); | |||
writer.WriteString($"[{value.TotalMilage}]累计里程", value.TotalMilage); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC4 value, IJT808Config config) | |||
@@ -43,12 +43,25 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Down_0xE1 value = new JT808_CarDVR_Down_0xE1(); | |||
var hex = reader.ReadVirtualArray(35); | |||
value.UniqueNumber = reader.ReadASCII(35); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]记录仪唯一性编号", value.UniqueNumber); | |||
value.PulseCoefficient = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.PulseCoefficient.ReadNumber()}]脉冲系数", value.PulseCoefficient); | |||
value.Speed = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.Speed.ReadNumber()}]当前速度", value.Speed); | |||
value.TotalMileage = reader.ReadUInt32(); | |||
writer.WriteNumber($"[{value.TotalMileage.ReadNumber()}]累计里程", value.TotalMileage); | |||
value.StatusSignal = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.StatusSignal.ReadNumber()}]状态信号", value.StatusSignal); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xE1 value, IJT808Config config) | |||
{ | |||
writer.WriteASCII(value.UniqueNumber.PadRight(35, '0')); | |||
var currentPosition = writer.GetCurrentPosition(); | |||
writer.WriteASCII(value.UniqueNumber); | |||
writer.Skip(35 - (writer.GetCurrentPosition() - currentPosition), out var _); | |||
writer.WriteUInt16(value.PulseCoefficient); | |||
writer.WriteUInt16(value.Speed); | |||
writer.WriteUInt32(value.TotalMileage); | |||
@@ -32,7 +32,11 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x00 value = new JT808_CarDVR_Up_0x00(); | |||
value.StandardYear = reader.ReadBCD(2); | |||
writer.WriteString($"[{value.StandardYear}]记录仪执行标准年号", value.StandardYear); | |||
value.ModifyNumber = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.ModifyNumber.ReadNumber()}]修改单号", value.ModifyNumber); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x00 value, IJT808Config config) | |||
@@ -27,7 +27,10 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x01 value = new JT808_CarDVR_Up_0x01(); | |||
var hex = reader.ReadVirtualArray(18); | |||
value.DriverLicenseNo = reader.ReadASCII(18); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]当前驾驶人的机动车驾驶证号码", value.DriverLicenseNo); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x01 value, IJT808Config config) | |||
@@ -26,7 +26,10 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x02 value = new JT808_CarDVR_Up_0x02(); | |||
var hex = reader.ReadVirtualArray(6); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]实时时间", value.RealTime); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x02 value, IJT808Config config) | |||
@@ -38,7 +38,19 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x03 value = new JT808_CarDVR_Up_0x03(); | |||
var hex = reader.ReadVirtualArray(6); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]实时时间", value.RealTime); | |||
hex = reader.ReadVirtualArray(6); | |||
value.FirstInstallTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]初次安装时间", value.RealTime); | |||
hex = reader.ReadVirtualArray(4); | |||
value.FirstMileage = reader.ReadBCD(8); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]初始里程", value.FirstMileage); | |||
hex = reader.ReadVirtualArray(4); | |||
value.TotalMilage = reader.ReadBCD(8); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]累计里程", value.TotalMilage); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x03 value, IJT808Config config) | |||
@@ -23,7 +23,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// </summary> | |||
public DateTime RealTime { get; set; } | |||
/// <summary> | |||
/// 脉冲系数高字节 | |||
/// 脉冲系数 | |||
/// </summary> | |||
public ushort PulseCoefficient { get; set; } | |||
@@ -31,7 +31,12 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x04 value = new JT808_CarDVR_Up_0x04(); | |||
var hex = reader.ReadVirtualArray(6); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]当前时间", value.RealTime); | |||
value.PulseCoefficient = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.PulseCoefficient.ReadNumber()}]脉冲系数",value.PulseCoefficient); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x04 value, IJT808Config config) | |||
@@ -36,7 +36,16 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x05 value = new JT808_CarDVR_Up_0x05(); | |||
var hex = reader.ReadVirtualArray(17); | |||
value.Vin = reader.ReadASCII(17); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]车辆识别代号", value.Vin); | |||
hex = reader.ReadVirtualArray(12); | |||
value.VehicleNo = reader.ReadString(12); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]机动车号牌号码", value.VehicleNo); | |||
hex = reader.ReadVirtualArray(10); | |||
value.VehicleType = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]机动车号牌分类", value.VehicleType); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x05 value, IJT808Config config) | |||
@@ -65,7 +65,36 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x06 value = new JT808_CarDVR_Up_0x06(); | |||
var hex = reader.ReadVirtualArray(6); | |||
value.RealTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]实时时间", value.RealTime); | |||
value.SignalOperate = reader.ReadByte(); | |||
writer.WriteNumber($"[{value.SignalOperate.ReadNumber()}]信号个数", value.SignalOperate) ; | |||
hex = reader.ReadVirtualArray(10); | |||
value.D0 = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]D0", value.D0); | |||
hex = reader.ReadVirtualArray(10); | |||
value.D1 = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]D1", value.D1); | |||
hex = reader.ReadVirtualArray(10); | |||
value.D2 = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]D2", value.D2); | |||
hex = reader.ReadVirtualArray(10); | |||
value.NearLight = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]近光灯", value.NearLight); | |||
hex = reader.ReadVirtualArray(10); | |||
value.FarLight = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]远光灯", value.FarLight); | |||
hex = reader.ReadVirtualArray(10); | |||
value.RightTurn = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]右转向", value.RightTurn); | |||
hex = reader.ReadVirtualArray(10); | |||
value.LeftTurn = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]左转向", value.LeftTurn); | |||
hex = reader.ReadVirtualArray(10); | |||
value.Brake = reader.ReadString(10); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]制动", value.Brake); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x06 value, IJT808Config config) | |||
@@ -42,7 +42,22 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x07 value = new JT808_CarDVR_Up_0x07(); | |||
var hex = reader.ReadVirtualArray(7); | |||
value.ProductionPlantCCCCertificationCode = reader.ReadASCII(7); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]生产厂 CCC 认证代码", value.ProductionPlantCCCCertificationCode); | |||
hex = reader.ReadVirtualArray(16); | |||
value.CertifiedProductModels = reader.ReadASCII(16); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]认证产品型号", value.CertifiedProductModels); | |||
hex = reader.ReadVirtualArray(3); | |||
value.ProductionDate = reader.ReadDateTime3(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]生产日期", value.ProductionDate); | |||
hex = reader.ReadVirtualArray(4); | |||
value.ProductProductionFlowNumber = reader.ReadString(4); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]产品生产流水号", value.ProductProductionFlowNumber); | |||
hex = reader.ReadVirtualArray(5); | |||
value.Reversed = reader.ReadString(5); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]备用", value.Reversed); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x07 value, IJT808Config config) | |||
@@ -27,7 +27,32 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x08 value = new JT808_CarDVR_Up_0x08(); | |||
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); | |||
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(); | |||
writer.WriteStartObject(); | |||
writer.WriteStartObject($"第{i+1}分钟行驶速度记录数据块格式"); | |||
var hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0X08_SpeedPerMinute.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]开始时间", jT808_CarDVR_Up_0X08_SpeedPerMinute.StartTime); | |||
for (int j = 0; j < 60; j++)//60秒 | |||
{ | |||
JT808_CarDVR_Up_0x08_SpeedPerSecond jT808_CarDVR_Up_0X08_SpeedPerSecond = new JT808_CarDVR_Up_0x08_SpeedPerSecond(); | |||
writer.WriteStartObject($"开始时间之后第{j+1}秒钟的平均速度和状态信号"); | |||
jT808_CarDVR_Up_0X08_SpeedPerSecond.AvgSpeedAfterStartTime = reader.ReadByte(); | |||
writer.WriteNumber($"[{jT808_CarDVR_Up_0X08_SpeedPerSecond.AvgSpeedAfterStartTime.ReadNumber()}]平均速度", jT808_CarDVR_Up_0X08_SpeedPerSecond.AvgSpeedAfterStartTime); | |||
jT808_CarDVR_Up_0X08_SpeedPerSecond.StatusSignalAfterStartTime = reader.ReadByte(); | |||
writer.WriteNumber($"[{jT808_CarDVR_Up_0X08_SpeedPerSecond.StatusSignalAfterStartTime.ReadNumber()}]状态信号", jT808_CarDVR_Up_0X08_SpeedPerSecond.StatusSignalAfterStartTime); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x08 value, IJT808Config config) | |||
@@ -27,7 +27,35 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x09 value = new JT808_CarDVR_Up_0x09(); | |||
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); | |||
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(); | |||
writer.WriteStartObject(); | |||
writer.WriteStartObject($"指定的结束时间之前最近的第{i+1}小时的位置信息记录"); | |||
var hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x09_PositionPerHour.StartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]开始时间", jT808_CarDVR_Up_0x09_PositionPerHour.StartTime); | |||
for (int j = 0; j < 60; j++)//60钟 | |||
{ | |||
JT808_CarDVR_Up_0x09_PositionPerMinute jT808_CarDVR_Up_0X09_PositionPerMinute = new JT808_CarDVR_Up_0x09_PositionPerMinute(); | |||
writer.WriteStartObject($"开始时间之后第{j+1}分钟的平均速度和位置信息"); | |||
jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLng = reader.ReadInt32(); | |||
writer.WriteNumber($"[{jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLng.ReadNumber()}]经度", jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLng); | |||
jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLat = reader.ReadInt32(); | |||
writer.WriteNumber($"[{jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLat.ReadNumber()}]纬度", jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLat); | |||
jT808_CarDVR_Up_0X09_PositionPerMinute.Height = reader.ReadInt16(); | |||
writer.WriteNumber($"[{jT808_CarDVR_Up_0X09_PositionPerMinute.Height.ReadNumber()}]高度", jT808_CarDVR_Up_0X09_PositionPerMinute.Height); | |||
jT808_CarDVR_Up_0X09_PositionPerMinute.AvgSpeedAfterStartTime = reader.ReadByte(); | |||
writer.WriteNumber($"[{jT808_CarDVR_Up_0X09_PositionPerMinute.AvgSpeedAfterStartTime.ReadNumber()}]平均速度", jT808_CarDVR_Up_0X09_PositionPerMinute.AvgSpeedAfterStartTime); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x09 value, IJT808Config config) | |||
{ | |||
@@ -28,7 +28,46 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x10 value = new JT808_CarDVR_Up_0x10(); | |||
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); | |||
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(); | |||
writer.WriteStartObject(); | |||
writer.WriteStartObject($"指定的结束时间之前最近的第{i+1}条事故疑点记录"); | |||
var hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]行驶结束时间", jT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime); | |||
hex = reader.ReadVirtualArray(18); | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo = reader.ReadASCII(18); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]机动车驾驶证号码", jT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo); | |||
for (int j = 0; j < 100; j++)//100组 | |||
{ | |||
JT808_CarDVR_Up_0x10_DrivingStatus jT808_CarDVR_Up_0X10_DrivingStatus = new JT808_CarDVR_Up_0x10_DrivingStatus(); | |||
if (j == 0) | |||
{ | |||
writer.WriteStartObject("行驶结束时的速度"); | |||
} | |||
else { | |||
writer.WriteStartObject($"行驶结束时间前 { (j * 0.2).ToString("F1")} 秒时的速度"); | |||
} | |||
jT808_CarDVR_Up_0X10_DrivingStatus.Speed = reader.ReadByte(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X10_DrivingStatus.Speed.ReadNumber()}]速度", jT808_CarDVR_Up_0X10_DrivingStatus.Speed); | |||
jT808_CarDVR_Up_0X10_DrivingStatus.StatusSignal = reader.ReadByte(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X10_DrivingStatus.StatusSignal.ReadNumber()}]状态信号", jT808_CarDVR_Up_0X10_DrivingStatus.StatusSignal); | |||
writer.WriteEndObject(); | |||
} | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng = reader.ReadInt32(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng); | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat = reader.ReadInt32(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat.ReadNumber()}]纬度", jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat); | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.Height = reader.ReadInt16(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x10_AccidentSuspectin.Height.ReadNumber()}]高度", jT808_CarDVR_Up_0x10_AccidentSuspectin.Height); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x10 value, IJT808Config config) | |||
@@ -41,10 +80,10 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _); | |||
for (int i = 0; i < 100; i++) | |||
{ | |||
if (i < accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss.Count) | |||
if (i < accidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss.Count) | |||
{ | |||
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss[i].Speed); | |||
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss[i].StatusSignal); | |||
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss[i].Speed); | |||
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss[i].StatusSignal); | |||
} | |||
else | |||
{ | |||
@@ -68,10 +107,10 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
JT808_CarDVR_Up_0x10_AccidentSuspectin jT808_CarDVR_Up_0x10_AccidentSuspectin = new JT808_CarDVR_Up_0x10_AccidentSuspectin(); | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime = reader.ReadDateTime6(); | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo = reader.ReadASCII(18); | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss = new List<JT808_CarDVR_Up_0x10_DrivingStatus>(); | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss = new List<JT808_CarDVR_Up_0x10_DrivingStatus>(); | |||
for (int j = 0; j < 100; j++)//100组 | |||
{ | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss.Add(new JT808_CarDVR_Up_0x10_DrivingStatus | |||
jT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss.Add(new JT808_CarDVR_Up_0x10_DrivingStatus | |||
{ | |||
Speed = reader.ReadByte(), | |||
StatusSignal = reader.ReadByte() | |||
@@ -103,7 +142,7 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
/// <summary> | |||
/// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列 | |||
/// </summary> | |||
public List<JT808_CarDVR_Up_0x10_DrivingStatus> JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; } | |||
public List<JT808_CarDVR_Up_0x10_DrivingStatus> JT808_CarDVR_Up_0x10_DrivingStatuss { get; set; } | |||
/// <summary> | |||
/// 经度 | |||
/// </summary> | |||
@@ -26,21 +26,59 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x11 value = new JT808_CarDVR_Up_0x11(); | |||
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); | |||
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(); | |||
writer.WriteStartObject(); | |||
writer.WriteStartObject($"指定的结束时间前最近的第 {i+1}条超时驾驶记录"); | |||
var hex = reader.ReadVirtualArray(18); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo = reader.ReadASCII(18); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}机动车驾驶证号码]", jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo); | |||
hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}连续驾驶开始时间]", jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime); | |||
hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}连续驾驶结束时间]", jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime); | |||
writer.WriteStartObject("连续驾驶开始时间所在的最近一次有效位置信息"); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng = reader.ReadInt32(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat = reader.ReadInt32(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat.ReadNumber()}纬度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight = reader.ReadInt16(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight.ReadNumber()}]高度", jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight); | |||
writer.WriteEndObject(); | |||
writer.WriteStartObject("连续驾驶结束时间所在的最近一次有效位置信息"); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng = reader.ReadInt32(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat = reader.ReadInt32(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat.ReadNumber()}]纬度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat); | |||
jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight = reader.ReadInt16(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight.ReadNumber()}]高度", jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
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')); | |||
var currentPosition = writer.GetCurrentPosition(); | |||
writer.WriteASCII(driveOverTime.DriverLicenseNo); | |||
writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _); | |||
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.WriteInt32(driveOverTime.GpsEndLat); | |||
writer.WriteInt16(driveOverTime.EndHeight); | |||
} | |||
} | |||
@@ -26,7 +26,39 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x12 value = new JT808_CarDVR_Up_0x12(); | |||
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); | |||
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(); | |||
writer.WriteStartObject(); | |||
writer.WriteStartObject($"指定的结束时间之前最近的第 {i+1}条驾驶人登录退出记录"); | |||
var hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x12_DriveLogin.LoginTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]登录/登出发生时间", jT808_CarDVR_Up_0x12_DriveLogin.LoginTime); | |||
hex = reader.ReadVirtualArray(18); | |||
jT808_CarDVR_Up_0x12_DriveLogin.DriverLicenseNo = reader.ReadASCII(18); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]机动车驾驶证号码", jT808_CarDVR_Up_0x12_DriveLogin.DriverLicenseNo); | |||
jT808_CarDVR_Up_0x12_DriveLogin.LoginType = reader.ReadByte(); | |||
writer.WriteString($"[{ jT808_CarDVR_Up_0x12_DriveLogin.LoginType.ReadNumber()}]登录/登出事件", LoginTypeDisplay(jT808_CarDVR_Up_0x12_DriveLogin.LoginType)); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
string LoginTypeDisplay(byte loginType){ | |||
if (loginType == 1) | |||
{ | |||
return "登录"; | |||
} | |||
else if(loginType == 2) | |||
{ | |||
return "退出"; | |||
} | |||
else { | |||
return "保留"; | |||
} | |||
} | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x12 value, IJT808Config config) | |||
@@ -34,7 +66,9 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
foreach (var driveLogin in value.JT808_CarDVR_Up_0x12_DriveLogins) | |||
{ | |||
writer.WriteDateTime6(driveLogin.LoginTime); | |||
writer.WriteASCII(driveLogin.DriverLicenseNo.PadRight(18, '0')); | |||
var currentPosition = writer.GetCurrentPosition(); | |||
writer.WriteASCII(driveLogin.DriverLicenseNo); | |||
writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _); | |||
writer.WriteByte(driveLogin.LoginType); | |||
} | |||
} | |||
@@ -26,7 +26,32 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x13 value = new JT808_CarDVR_Up_0x13(); | |||
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); | |||
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(); | |||
writer.WriteStartObject(); | |||
writer.WriteStartObject($"从指定的结束时间之前最近的第{i+1}条外部电源记录"); | |||
var hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]事件发生时间", jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventTime); | |||
jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType = reader.ReadByte(); | |||
writer.WriteString($"[{ jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType.ReadNumber()}]事件类型", EventTypeDisplay(jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType)); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
string EventTypeDisplay(byte eventType) { | |||
if (eventType == 1) | |||
{ | |||
return "供电"; | |||
} | |||
else { | |||
return "断电"; | |||
} | |||
} | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x13 value, IJT808Config config) | |||
{ | |||
@@ -26,7 +26,23 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x14 value = new JT808_CarDVR_Up_0x14(); | |||
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); | |||
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(); | |||
writer.WriteStartObject(); | |||
writer.WriteStartObject($"指定的结束时间之前最近的第{i+1}条参数修改记录"); | |||
var hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x14_ParameterModify.EventTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{hex.ToArray().ToHexString()}]事件发生时间", jT808_CarDVR_Up_0x14_ParameterModify.EventTime); | |||
jT808_CarDVR_Up_0x14_ParameterModify.EventType = reader.ReadByte(); | |||
writer.WriteString($"[{ jT808_CarDVR_Up_0x14_ParameterModify.EventType.ReadNumber()}]事件类型", ((JT808CarDVRCommandID)jT808_CarDVR_Up_0x14_ParameterModify.EventType).ToString()); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x14 value, IJT808Config config) | |||
@@ -26,7 +26,61 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_CarDVR_Up_0x15 value = new JT808_CarDVR_Up_0x15(); | |||
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); | |||
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(); | |||
writer.WriteStartObject(); | |||
writer.WriteStartObject($"指定的结束时间之前最近的第{i+1} 条速度状态日志"); | |||
jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus = reader.ReadByte(); | |||
writer.WriteString($"[{ jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus.ReadNumber()}]速度状态", SpeedStatusDisplay(jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus)); | |||
var hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusStartTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{ hex.ToArray().ToHexString()}]速度状态判定的开始时间", jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusStartTime); | |||
hex = reader.ReadVirtualArray(6); | |||
jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusEndTime = reader.ReadDateTime6(); | |||
writer.WriteString($"[{ hex.ToArray().ToHexString()}]速度状态判定的结束时间", jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusEndTime); | |||
writer.WriteStartArray("前60s速度状态日志"); | |||
for (int j = 0; j < 60; j++)//60组 | |||
{ | |||
writer.WriteStartObject(); | |||
JT808_CarDVR_Up_0x15_SpeedPerSecond jT808_CarDVR_Up_0X15_SpeedPerSecond = new JT808_CarDVR_Up_0x15_SpeedPerSecond(); | |||
if (j == 0) | |||
{ | |||
jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed = reader.ReadByte(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed.ReadNumber()}]开始时间对应的记录速度", jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed); | |||
jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed = reader.ReadByte(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed.ReadNumber()}]开始时间对应的参考速度", jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed); | |||
} | |||
else | |||
{ | |||
jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed = reader.ReadByte(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed.ReadNumber()}]开始时间后第{j}秒对应的记录速度", jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed); | |||
jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed = reader.ReadByte(); | |||
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed.ReadNumber()}]开始时间后第{j}秒对应的参考速度", jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed); | |||
} | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
writer.WriteEndArray(); | |||
string SpeedStatusDisplay(byte speedStatus) { | |||
if (speedStatus == 0x01) | |||
{ | |||
return "正常"; | |||
} | |||
else if (speedStatus == 0x02) | |||
{ | |||
return "异常"; | |||
} | |||
else { | |||
return "未知"; | |||
} | |||
} | |||
} | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x15 value, IJT808Config config) | |||
@@ -36,10 +90,17 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
writer.WriteByte(speedStatusLog.SpeedStatus); | |||
writer.WriteDateTime6(speedStatusLog.SpeedStatusStartTime); | |||
writer.WriteDateTime6(speedStatusLog.SpeedStatusEndTime); | |||
foreach (var speedPerSecond in speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds) | |||
for (int i = 0; i < 60; i++) | |||
{ | |||
writer.WriteByte(speedPerSecond.RecordSpeed); | |||
writer.WriteByte(speedPerSecond.ReferenceSpeed); | |||
if (i < speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds.Count) | |||
{ | |||
writer.WriteByte(speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds[i].RecordSpeed); | |||
writer.WriteByte(speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds[i].ReferenceSpeed); | |||
} | |||
else { | |||
writer.WriteByte(0xFF); | |||
writer.WriteByte(0xFF); | |||
} | |||
} | |||
} | |||
} | |||
@@ -20,5 +20,6 @@ namespace JT808.Protocol.MessageBody.CarDVR | |||
public override byte CommandId => JT808CarDVRCommandID.进入实时时间误差测量.ToByteValue(); | |||
public override string Description => "通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平)"; | |||
public override bool SkipSerialization { get; set; } = true; | |||
} | |||
} |
@@ -180,7 +180,7 @@ namespace JT808.Protocol.MessageBody | |||
jT808_0X0107.TerminalId = reader.ReadString(7); | |||
writer.WriteString($"[{terminalIdSpan.ToArray().ToHexString()}]终端ID", jT808_0X0107.TerminalId); | |||
} | |||
ReadOnlySpan<byte> iccidSpan = reader.ReadVirtualArray(20); | |||
ReadOnlySpan<byte> iccidSpan = reader.ReadVirtualArray(10); | |||
jT808_0X0107.Terminal_SIM_ICCID = reader.ReadBCD(20, config.Trim); | |||
writer.WriteString($"[{iccidSpan.ToArray().ToHexString()}]终端SIM卡ICCID", jT808_0X0107.Terminal_SIM_ICCID); | |||
jT808_0X0107.Terminal_Hardware_Version_Length = reader.ReadByte(); | |||
@@ -1,4 +1,5 @@ | |||
using JT808.Protocol.Extensions; | |||
using JT808.Protocol.Enums; | |||
using JT808.Protocol.Extensions; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
@@ -29,6 +30,15 @@ namespace JT808.Protocol.MessageBody | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0700 value = new JT808_0x0700(); | |||
writer.WriteStartObject("行驶记录参数下传命令"); | |||
value.ReplyMsgNum = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{value.ReplyMsgNum.ReadNumber()}]应答流水号", value.ReplyMsgNum); | |||
value.CommandId = reader.ReadByte(); | |||
writer.WriteString($"[{value.CommandId.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
config.IJT808_CarDVR_Up_Package.Analyze(ref reader, writer, config); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
public JT808_0x0700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
@@ -36,7 +46,7 @@ namespace JT808.Protocol.MessageBody | |||
JT808_0x0700 value = new JT808_0x0700(); | |||
value.ReplyMsgNum = reader.ReadUInt16(); | |||
value.CommandId = reader.ReadByte(); | |||
object obj = config.GetMessagePackFormatterByType(typeof( JT808CarDVRUpPackage)); | |||
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Up_Package.GetType()); | |||
value.JT808CarDVRUpPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config); | |||
return value; | |||
} | |||
@@ -45,8 +55,9 @@ namespace JT808.Protocol.MessageBody | |||
{ | |||
writer.WriteUInt16(value.ReplyMsgNum); | |||
writer.WriteByte(value.CommandId); | |||
object obj = config.GetMessagePackFormatterByType(typeof(JT808CarDVRUpPackage)); | |||
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer,value.JT808CarDVRUpPackage, config); | |||
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Up_Package.GetType()); | |||
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRUpPackage, config); | |||
} | |||
} | |||
} |
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody | |||
public override ushort MsgId { get; } = 0x8003; | |||
public override string Description => "补传分包请求"; | |||
/// <summary> | |||
/// 原始消息流水号 | |||
/// 原始消息流水号 | |||
/// 对应要求补传的原始消息第一包的消息流水号 | |||
/// </summary> | |||
public ushort OriginalMsgNum { get; set; } | |||
@@ -1,4 +1,5 @@ | |||
using JT808.Protocol.Extensions; | |||
using JT808.Protocol.Enums; | |||
using JT808.Protocol.Extensions; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
@@ -23,14 +24,21 @@ namespace JT808.Protocol.MessageBody | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
throw new NotImplementedException(); | |||
JT808_0x8700 value = new JT808_0x8700(); | |||
writer.WriteStartObject("行驶记录数据采集命令"); | |||
value.CommandId = reader.ReadByte(); | |||
writer.WriteString($"[{value.CommandId.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
config.IJT808_CarDVR_Down_Package.Analyze(ref reader, writer, config); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
public JT808_0x8700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | |||
{ | |||
JT808_0x8700 value = new JT808_0x8700(); | |||
value.CommandId = reader.ReadByte(); | |||
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType()); | |||
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Down_Package.GetType()); | |||
value.JT808CarDVRDownPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config); | |||
return value; | |||
} | |||
@@ -38,7 +46,7 @@ namespace JT808.Protocol.MessageBody | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8700 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.CommandId); | |||
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType()); | |||
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Down_Package.GetType()); | |||
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRDownPackage, config); | |||
} | |||
} | |||
@@ -1,4 +1,5 @@ | |||
using JT808.Protocol.Extensions; | |||
using JT808.Protocol.Enums; | |||
using JT808.Protocol.Extensions; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
@@ -26,14 +27,21 @@ namespace JT808.Protocol.MessageBody | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
throw new NotImplementedException(); | |||
JT808_0x8701 value = new JT808_0x8701(); | |||
writer.WriteStartObject("行驶记录参数下传命令"); | |||
value.CommandId = reader.ReadByte(); | |||
writer.WriteString($"[{value.CommandId.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString()); | |||
config.IJT808_CarDVR_Down_Package.Analyze(ref reader, writer, config); | |||
writer.WriteEndObject(); | |||
writer.WriteEndObject(); | |||
} | |||
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()); | |||
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Down_Package.GetType()); | |||
value.JT808CarDVRDownPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config); | |||
return value; | |||
} | |||
@@ -41,7 +49,7 @@ namespace JT808.Protocol.MessageBody | |||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8701 value, IJT808Config config) | |||
{ | |||
writer.WriteByte(value.CommandId); | |||
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType()); | |||
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Down_Package.GetType()); | |||
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRDownPackage, config); | |||
} | |||
} | |||