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