diff --git a/README.md b/README.md
index 6be3c15..cd805e6 100644
--- a/README.md
+++ b/README.md
@@ -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 | √ | 消息体为空| 上报驾驶员身份信息请求 |
diff --git a/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj b/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj
index 5627df8..4f51e08 100644
--- a/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj
+++ b/src/JT808.Protocol.Test/JT808.Protocol.Test.csproj
@@ -89,6 +89,8 @@
+
+
diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs
index b71783b..2babe78 100644
--- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs
+++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.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(bytes);
+ //0x01
+ bytes = "000101557A0100120034333032323331393930303731323636383732".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x02
+ bytes = "000102557A020006002003231010103B".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x03
+ bytes = "000103557A03001400200322101010200323101010000010000000500079".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x04
+ bytes = "000104557A04000800200323101010003201".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x05
+ bytes = "000105557A050027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B5000009".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x06
+ bytes = "000106557A06005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000084".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x07
+ bytes = "000107557A0700230031323334353637313233343536373839313233343536372003233132333431323334003A".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x08
+ bytes = "000108557A08007E002003230000000A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x09
+ bytes = "000109557A09029A0020032300000006C6431601691B8800320AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x10
+ bytes = "000110557A1000EA002003230000003433303232333139393030393230333639380A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06C6431601691B8800329D".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x11
+ bytes = "000111557A1100320034333032323331393930303932303336393820032200000020032300000006C6431601691B88003206C6431701691B89003C09".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x12
+ bytes = "000112557A12001900200323000000343330323233313939303039323033363938012F".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x13
+ bytes = "000113557A13000700200323000000013A".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x14
+ bytes = "000114557A14000700200323000000013D".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x15
+ bytes = "000115557A15008500012003220000002003230000003228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5".ToHexBytes();
+ value = JT808Serializer.Analyze(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_DrivingStatuss=new List
{
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(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(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(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(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(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x15;
diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x8700Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x8700Test.cs
new file mode 100644
index 0000000..4c879c2
--- /dev/null
+++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x8700Test.cs
@@ -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(bytes);
+ // 0x08 -- 0x15 测试用例一样
+ bytes = "08557A08000E00200322101010200323101010000129".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ }
+ ///
+ /// 0x00 -- 0x07 指令和这个单元测试一样
+ ///
+ [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);
+ }
+ ///
+ /// 0x00 -- 0x07 指令和这个单元测试一样
+ ///
+ [Fact]
+ public void Test_Deserilize_0x00()
+ {
+ byte[] bytes = "00557A000000002F".ToHexBytes();
+ JT808_0x8700 value = JT808Serializer.Deserialize(bytes);
+ Assert.Equal(0, value.CommandId);
+ var body = value.JT808CarDVRDownPackage as JT808CarDVRDownPackage;
+ Assert.Equal(0, body.CommandId);
+ }
+ ///
+ /// 0x08 -- 0x15 测试用例一样
+ ///
+ [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);
+ }
+ ///
+ /// 0x08 -- 0x15 测试用例一样
+ ///
+ [Fact]
+ public void Test_Deserilize_0x08()
+ {
+ byte[] bytes = "08557A08000E00200322101010200323101010000129".ToHexBytes();
+ JT808_0x8700 value = JT808Serializer.Deserialize(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);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x8701Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x8701Test.cs
new file mode 100644
index 0000000..62db2a0
--- /dev/null
+++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x8701Test.cs
@@ -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(bytes);
+ // 0x83
+ bytes = "83557A83000600200323101010BA".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0x84
+ bytes = "84557A84005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000006".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ // 0xC2
+ bytes = "C2557AC2000600200323101010FB".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ //0xC3
+ bytes = "C3557AC30008002003231010100032C6".ToHexBytes();
+ value = JT808Serializer.Analyze(bytes);
+ // 0xC4
+ bytes = "C4557AC40014002003231010102003221010100000100000005000BE".ToHexBytes();
+ value = JT808Serializer.Analyze(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(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(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(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(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(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(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);
+ }
+ }
+}
diff --git a/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs b/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs
index 65ed62b..e996b07 100644
--- a/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs
+++ b/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs
@@ -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)
diff --git a/src/JT808.Protocol/Interfaces/IJT808Config.cs b/src/JT808.Protocol/Interfaces/IJT808Config.cs
index 8c0037b..a8111dc 100644
--- a/src/JT808.Protocol/Interfaces/IJT808Config.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808Config.cs
@@ -61,14 +61,22 @@ namespace JT808.Protocol
///
IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; }
///
- /// 记录仪上行工厂
+ /// 记录仪上行命令字工厂
///
IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; }
///
- /// 记录仪下行工厂
+ /// 记录仪下行命令字工厂
///
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; }
+ ///
/// 统一编码
///
Encoding Encoding { get; set; }
diff --git a/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Package.cs b/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Package.cs
new file mode 100644
index 0000000..fbc4582
--- /dev/null
+++ b/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Package.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace JT808.Protocol.Interfaces
+{
+ public interface IJT808_CarDVR_Down_Package
+ {
+ }
+}
diff --git a/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Package.cs b/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Package.cs
new file mode 100644
index 0000000..d821b4a
--- /dev/null
+++ b/src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Package.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace JT808.Protocol.Interfaces
+{
+ public interface IJT808_CarDVR_Up_Package
+ {
+ }
+}
diff --git a/src/JT808.Protocol/JT808.Protocol.xml b/src/JT808.Protocol/JT808.Protocol.xml
index ddc028f..f96ec26 100644
--- a/src/JT808.Protocol/JT808.Protocol.xml
+++ b/src/JT808.Protocol/JT808.Protocol.xml
@@ -2706,12 +2706,22 @@
- 记录仪上行工厂
+ 记录仪上行命令字工厂
- 记录仪下行工厂
+ 记录仪下行命令字工厂
+
+
+
+
+ 记录仪上行包
+
+
+
+
+ 记录仪下行包
@@ -3794,14 +3804,9 @@
当前时间
-
+
- 脉冲系数高字节
-
-
-
-
- 仪脉冲系数低字节
+ 脉冲系数
@@ -3966,7 +3971,7 @@
- 脉冲系数高字节
+ 脉冲系数
@@ -4202,7 +4207,7 @@
机动车驾驶证号码
-
+
每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列
diff --git a/src/JT808.Protocol/JT808CarDVRDownPackage.cs b/src/JT808.Protocol/JT808CarDVRDownPackage.cs
index a51509f..b4ef5dc 100644
--- a/src/JT808.Protocol/JT808CarDVRDownPackage.cs
+++ b/src/JT808.Protocol/JT808CarDVRDownPackage.cs
@@ -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
+ public class JT808CarDVRDownPackage : IJT808_CarDVR_Down_Package,IJT808MessagePackFormatter, IJT808Analyze
{
public const ushort BeginFlag = 0x557A;
///
@@ -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();
+ }
}
}
diff --git a/src/JT808.Protocol/JT808CarDVRUpPackage.cs b/src/JT808.Protocol/JT808CarDVRUpPackage.cs
index 4af3b33..9a3ef63 100644
--- a/src/JT808.Protocol/JT808CarDVRUpPackage.cs
+++ b/src/JT808.Protocol/JT808CarDVRUpPackage.cs
@@ -14,7 +14,7 @@ namespace JT808.Protocol
///
/// 行车记录仪上行数据包
///
- public class JT808CarDVRUpPackage : IJT808MessagePackFormatter, IJT808Analyze
+ public class JT808CarDVRUpPackage : IJT808_CarDVR_Up_Package,IJT808MessagePackFormatter, IJT808Analyze
{
public const ushort BeginFlag = 0x557A;
///
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs
index 9b3e4b9..898b41e 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 返回:符合条件的行驶速度记录
/// 如在指定的时间范围内无数据记录,则本数据块数据为空
///
- public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies, IJT808MessagePackFormatter
+ public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, 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_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);
+ }
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs
index d3ff1a4..892b4ef 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 返回:符合条件的位置信息记录
/// 指定的时间范围内无数据记录,则本数据块数据为空
///
- public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies, IJT808MessagePackFormatter
+ public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, 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);
+ }
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs
index ff6dd37..9a46241 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 返回:符合条件的事故疑点记录
/// 指定的时间范围内无数据记录,则本数据块数据为空
///
- public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies, IJT808MessagePackFormatter
+ public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, 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);
+ }
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs
index 532cef6..344fc1f 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的超时驾驶记录
/// 返回:符合条件的超时驾驶记录
///
- public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies, IJT808MessagePackFormatter
+ public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, 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);
+ }
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs
index a4af480..13e6003 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的驾驶人身份记录
/// 返回:符合条件的驾驶人登录退出记录
///
- public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies, IJT808MessagePackFormatter
+ public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, 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);
+ }
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs
index 70fd66c..6b5fa4b 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的外部供电记录
/// 返回:符合条件的供电记录
///
- public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies, IJT808MessagePackFormatter
+ public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, 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);
+ }
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs
index 9730158..38746fd 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的参数修改记录
/// 返回:符合条件的参数修改记录
///
- public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies, IJT808MessagePackFormatter
+ public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, 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);
+ }
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs
index 3118f1f..d957a1a 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs
@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的速度状态日志
/// 返回:符合条件的速度状态日志
///
- public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies, IJT808MessagePackFormatter
+ public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies, IJT808MessagePackFormatter, 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);
+ }
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs
index 342d89c..b853d56 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs
@@ -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;
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs
index 93e0754..f8283af 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs
index e63fb5d..b702617 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs
@@ -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;
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs
index c191769..5c71a0a 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs
@@ -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"));
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs
index cb6a1d9..4f018ab 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs
@@ -23,17 +23,18 @@ namespace JT808.Protocol.MessageBody.CarDVR
///
public DateTime RealTime { get; set; }
///
- /// 脉冲系数高字节
+ /// 脉冲系数
///
- public byte PulseCoefficientHighByte { get; set; }
- ///
- /// 仪脉冲系数低字节
- ///
- 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;
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs
index fdb6439..3feeb1a 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs
index cc1bd17..287d29c 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs
@@ -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);
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs
index 7df4678..307f67b 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs
index fbc47de..ea48799 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs
index 9f28e5d..c83c36a 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs
index 1d997f4..fbbed3a 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs
index 020e395..2df78dc 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs
@@ -23,7 +23,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
///
public DateTime RealTime { get; set; }
///
- /// 脉冲系数高字节
+ /// 脉冲系数
///
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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs
index 28a7518..b1abb38 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs
index 35424be..2f00c90 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs
index 35983f6..dfc17ba 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs
index c9f3b9b..74db22c 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs
index ff3fe44..976c93c 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs
@@ -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)
{
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs
index fcd3db7..cc7c793 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs
@@ -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_AccidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss = new List();
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
///
/// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列
///
- public List JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; }
+ public List JT808_CarDVR_Up_0x10_DrivingStatuss { get; set; }
///
/// 经度
///
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs
index 627ae55..89d1c86 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs
@@ -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);
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs
index 0e6dda1..666f2cd 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs
@@ -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);
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs
index 61405b7..55404ca 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs
@@ -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)
{
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs
index 5828463..700d0ae 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs
@@ -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)
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs
index 85cd66e..638286d 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs
@@ -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);
+ }
}
}
}
diff --git a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs
index da10a00..fd991d6 100644
--- a/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs
+++ b/src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs
@@ -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;
}
}
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0107.cs b/src/JT808.Protocol/MessageBody/JT808_0x0107.cs
index 4b2b5dc..891c003 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x0107.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x0107.cs
@@ -180,7 +180,7 @@ namespace JT808.Protocol.MessageBody
jT808_0X0107.TerminalId = reader.ReadString(7);
writer.WriteString($"[{terminalIdSpan.ToArray().ToHexString()}]终端ID", jT808_0X0107.TerminalId);
}
- ReadOnlySpan iccidSpan = reader.ReadVirtualArray(20);
+ ReadOnlySpan 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();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0700.cs b/src/JT808.Protocol/MessageBody/JT808_0x0700.cs
index 8ac20ef..9b9009f 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x0700.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x0700.cs
@@ -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);
+
}
}
}
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8003.cs b/src/JT808.Protocol/MessageBody/JT808_0x8003.cs
index 224c154..9f5ec19 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8003.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8003.cs
@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody
public override ushort MsgId { get; } = 0x8003;
public override string Description => "补传分包请求";
///
- /// 原始消息流水号
+ /// 原始消息流水号
/// 对应要求补传的原始消息第一包的消息流水号
///
public ushort OriginalMsgNum { get; set; }
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8700.cs b/src/JT808.Protocol/MessageBody/JT808_0x8700.cs
index e709193..96d8a7f 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8700.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8700.cs
@@ -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);
}
}
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8701.cs b/src/JT808.Protocol/MessageBody/JT808_0x8701.cs
index ae55814..be6c3d0 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8701.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8701.cs
@@ -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);
}
}