Pārlūkot izejas kodu

记录仪协议分析,及单元测试

tags/v2.2.9
waterliu99 pirms 5 gadiem
vecāks
revīzija
8ccad9dbe3
49 mainītis faili ar 1159 papildinājumiem un 124 dzēšanām
  1. +3
    -3
      README.md
  2. +2
    -0
      src/JT808.Protocol.Test/JT808.Protocol.Test.csproj
  3. +66
    -13
      src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs
  4. +96
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x8700Test.cs
  5. +241
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x8701Test.cs
  6. +4
    -0
      src/JT808.Protocol/Interfaces/GlobalConfigBase.cs
  7. +10
    -2
      src/JT808.Protocol/Interfaces/IJT808Config.cs
  8. +10
    -0
      src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Package.cs
  9. +10
    -0
      src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Package.cs
  10. +16
    -11
      src/JT808.Protocol/JT808.Protocol.xml
  11. +37
    -1
      src/JT808.Protocol/JT808CarDVRDownPackage.cs
  12. +31
    -2
      src/JT808.Protocol/JT808CarDVRUpPackage.cs
  13. +12
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs
  14. +12
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs
  15. +12
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs
  16. +12
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs
  17. +12
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs
  18. +12
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs
  19. +12
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs
  20. +12
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs
  21. +21
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs
  22. +3
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs
  23. +61
    -17
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs
  24. +3
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs
  25. +9
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs
  26. +9
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs
  27. +15
    -2
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs
  28. +5
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs
  29. +4
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs
  30. +4
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs
  31. +13
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs
  32. +7
    -2
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs
  33. +10
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs
  34. +30
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs
  35. +16
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs
  36. +25
    -0
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs
  37. +29
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs
  38. +46
    -7
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs
  39. +41
    -3
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs
  40. +36
    -2
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs
  41. +26
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs
  42. +17
    -1
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs
  43. +65
    -4
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs
  44. +1
    -0
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs
  45. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0107.cs
  46. +15
    -4
      src/JT808.Protocol/MessageBody/JT808_0x0700.cs
  47. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8003.cs
  48. +12
    -4
      src/JT808.Protocol/MessageBody/JT808_0x8700.cs
  49. +12
    -4
      src/JT808.Protocol/MessageBody/JT808_0x8701.cs

+ 3
- 3
README.md Parādīt failu

@@ -365,9 +365,9 @@ Platform=AnyCpu Server=False Toolchain=.NET Core 3.1
| 40 | 0x8605 | √ | √ | 删除多边形区域 |
| 41 | 0x8606 | √ | √ | 设置路线 |修改|
| 42 | 0x8607 | √ | √ | 删除路线 |
| 43 | 0x8700 | x | x | 行驶记录仪数据采集命令 |待开发
| 44 | 0x0700 | x | x | 行驶记录仪数据上传 |待开发
| 45 | 0x8701 | x | x | 行驶记录仪参数下传命令 |待开发
| 43 | 0x8700 | √ | √ | 行驶记录仪数据采集命令 |待开发
| 44 | 0x0700 | √ | √ | 行驶记录仪数据上传 |待开发
| 45 | 0x8701 | √ | √ | 行驶记录仪参数下传命令 |待开发
| 46 | 0x0701 | √ | √ | 电子运单上报 |
| 47 | 0x0702 | √ | √ | 驾驶员身份信息采集上报 |修改|
| 48 | 0x8702 | √ | 消息体为空| 上报驾驶员身份信息请求 |


+ 2
- 0
src/JT808.Protocol.Test/JT808.Protocol.Test.csproj Parādīt failu

@@ -89,6 +89,8 @@
<Compile Include="MessageBody\JT808_0x8604Test.cs" />
<Compile Include="MessageBody\JT808_0x8605Test.cs" />
<Compile Include="MessageBody\JT808_0x0608Test.cs" />
<Compile Include="MessageBody\JT808_0x8701Test.cs" />
<Compile Include="MessageBody\JT808_0x8700Test.cs" />
<Compile Include="MessageBody\JT808_0x8607Test.cs" />
<Compile Include="MessageBody\JT808_0x8608Test.cs" />
<Compile Include="MessageBody\JT808_0x8606Test.cs" />


+ 66
- 13
src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs Parādīt failu

@@ -25,6 +25,58 @@ namespace JT808.Protocol.Test.MessageBody
JT808Serializer = new JT808Serializer(jT808Config);
}
[Fact]
public void Test_Analyze()
{
//0x00
byte[] bytes = "000100557A00000200190135".ToHexBytes();
var value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x01
bytes = "000101557A0100120034333032323331393930303731323636383732".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x02
bytes = "000102557A020006002003231010103B".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x03
bytes = "000103557A03001400200322101010200323101010000010000000500079".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x04
bytes = "000104557A04000800200323101010003201".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x05
bytes = "000105557A050027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B5000009".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x06
bytes = "000106557A06005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000084".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x07
bytes = "000107557A0700230031323334353637313233343536373839313233343536372003233132333431323334003A".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x08
bytes = "000108557A08007E002003230000000A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x09
bytes = "000109557A09029A0020032300000006C6431601691B8800320AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x10
bytes = "000110557A1000EA002003230000003433303232333139393030393230333639380A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06C6431601691B8800329D".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x11
bytes = "000111557A1100320034333032323331393930303932303336393820032200000020032300000006C6431601691B88003206C6431701691B89003C09".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x12
bytes = "000112557A12001900200323000000343330323233313939303039323033363938012F".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x13
bytes = "000113557A13000700200323000000013A".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x14
bytes = "000114557A14000700200323000000013D".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
//0x15
bytes = "000115557A15008500012003220000002003230000003228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5".ToHexBytes();
value = JT808Serializer.Analyze<JT808_0x0700>(bytes);
}
[Fact]
public void Test_Serialize_0x00()
{
JT808_0x0700 value = new JT808_0x0700();
@@ -86,6 +138,7 @@ namespace JT808.Protocol.Test.MessageBody
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x01;
Assert.Equal("430223199007126687", body.DriverLicenseNo);
}

[Fact]
public void Test_Serialize_0x02()
{
@@ -393,7 +446,7 @@ namespace JT808.Protocol.Test.MessageBody
GpsLng=113656598,
Height=50,
DriverLicenseNo="430223199009203698",
JT808_CarDVR_Up_0x09_DrivingStatuss=new List<JT808_CarDVR_Up_0x10_DrivingStatus>
JT808_CarDVR_Up_0x10_DrivingStatuss=new List<JT808_CarDVR_Up_0x10_DrivingStatus>
{
new JT808_CarDVR_Up_0x10_DrivingStatus{
Speed=10,
@@ -419,8 +472,8 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(113656598, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].GpsLng);
Assert.Equal(50, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].Height);
Assert.Equal("430223199009203698", body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].DriverLicenseNo);
Assert.Equal(10, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x09_DrivingStatuss[0].Speed);
Assert.Equal(20, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x09_DrivingStatuss[0].StatusSignal);
Assert.Equal(10, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x10_DrivingStatuss[0].Speed);
Assert.Equal(20, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x10_DrivingStatuss[0].StatusSignal);
}
[Fact]
public void Test_Serialize_0x11()
@@ -449,13 +502,13 @@ namespace JT808.Protocol.Test.MessageBody
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
Assert.Equal("000111557A1100320034333032323331393930303932303336393820032200000020032300000006C6431601691B88003206C6431701691B89003C09", hex);
}

[Fact]
public void Test_Deserilize_0x11()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
byte[] bytes = "000111557A1100320034333032323331393930303932303336393820032200000020032300000006C6431601691B88003206C6431701691B89003C09".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x11;
@@ -490,13 +543,13 @@ namespace JT808.Protocol.Test.MessageBody
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
Assert.Equal("000112557A12001900200323000000343330323233313939303039323033363938012F", hex);
}

[Fact]
public void Test_Deserilize_0x12()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
byte[] bytes = "000112557A12001900200323000000343330323233313939303039323033363938012F".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x12;
@@ -524,13 +577,13 @@ namespace JT808.Protocol.Test.MessageBody
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
Assert.Equal("000113557A13000700200323000000013A", hex);
}

[Fact]
public void Test_Deserilize_0x13()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
byte[] bytes = "000113557A13000700200323000000013A".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x13;
@@ -557,13 +610,13 @@ namespace JT808.Protocol.Test.MessageBody
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
Assert.Equal("000114557A14000700200323000000013D", hex);
}

[Fact]
public void Test_Deserilize_0x14()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
byte[] bytes = "000114557A14000700200323000000013D".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x14;
@@ -597,13 +650,13 @@ namespace JT808.Protocol.Test.MessageBody
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
Assert.Equal("000115557A15008500012003220000002003230000003228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5", hex);
}

[Fact]
public void Test_Deserilize_0x15()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
byte[] bytes = "000115557A15008500012003220000002003230000003228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x15;


+ 96
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x8700Test.cs Parādīt failu

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

+ 241
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x8701Test.cs Parādīt failu

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

+ 4
- 0
src/JT808.Protocol/Interfaces/GlobalConfigBase.cs Parādīt failu

@@ -28,6 +28,8 @@ namespace JT808.Protocol.Interfaces
JT808_0x8500_2019_Factory = new JT808_0x8500_2019_Factory();
JT808_CarDVR_Up_Factory = new JT808_CarDVR_Up_Factory();
JT808_CarDVR_Down_Factory = new JT808_CarDVR_Down_Factory();
IJT808_CarDVR_Up_Package = new JT808CarDVRUpPackage();
IJT808_CarDVR_Down_Package = new JT808CarDVRDownPackage();
TerminalPhoneNoLength = 12;
Trim = true;
}
@@ -50,6 +52,8 @@ namespace JT808.Protocol.Interfaces
public virtual IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; }
public IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; }
public IJT808_CarDVR_Down_Factory JT808_CarDVR_Down_Factory { get; set; }
public IJT808_CarDVR_Up_Package IJT808_CarDVR_Up_Package { get; set; }
public IJT808_CarDVR_Down_Package IJT808_CarDVR_Down_Package { get; set; }
public bool SkipCarDVRCRCCode { get; set; }

public virtual IJT808Config Register(params Assembly[] externalAssemblies)


+ 10
- 2
src/JT808.Protocol/Interfaces/IJT808Config.cs Parādīt failu

@@ -61,14 +61,22 @@ namespace JT808.Protocol
/// </summary>
IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; }
/// <summary>
/// 记录仪上行工厂
/// 记录仪上行命令字工厂
/// </summary>
IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; }
/// <summary>
/// 记录仪下行工厂
/// 记录仪下行命令字工厂
/// </summary>
IJT808_CarDVR_Down_Factory JT808_CarDVR_Down_Factory { get; set; }
/// <summary>
/// 记录仪上行包
/// </summary>
public IJT808_CarDVR_Up_Package IJT808_CarDVR_Up_Package { get; set; }
/// <summary>
/// 记录仪下行包
/// </summary>
public IJT808_CarDVR_Down_Package IJT808_CarDVR_Down_Package { get; set; }
/// <summary>
/// 统一编码
/// </summary>
Encoding Encoding { get; set; }


+ 10
- 0
src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Package.cs Parādīt failu

@@ -0,0 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.Protocol.Interfaces
{
public interface IJT808_CarDVR_Down_Package
{
}
}

+ 10
- 0
src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Package.cs Parādīt failu

@@ -0,0 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.Protocol.Interfaces
{
public interface IJT808_CarDVR_Up_Package
{
}
}

+ 16
- 11
src/JT808.Protocol/JT808.Protocol.xml Parādīt failu

@@ -2706,12 +2706,22 @@
</member>
<member name="P:JT808.Protocol.IJT808Config.JT808_CarDVR_Up_Factory">
<summary>
记录仪上行工厂
记录仪上行命令字工厂
</summary>
</member>
<member name="P:JT808.Protocol.IJT808Config.JT808_CarDVR_Down_Factory">
<summary>
记录仪下行工厂
记录仪下行命令字工厂
</summary>
</member>
<member name="P:JT808.Protocol.IJT808Config.IJT808_CarDVR_Up_Package">
<summary>
记录仪上行包
</summary>
</member>
<member name="P:JT808.Protocol.IJT808Config.IJT808_CarDVR_Down_Package">
<summary>
记录仪下行包
</summary>
</member>
<member name="P:JT808.Protocol.IJT808Config.Encoding">
@@ -3794,14 +3804,9 @@
当前时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficientHighByte">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficient">
<summary>
脉冲系数高字节
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficientLowByte">
<summary>
仪脉冲系数低字节
脉冲系数
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4">
@@ -3966,7 +3971,7 @@
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x04.PulseCoefficient">
<summary>
脉冲系数高字节
脉冲系数
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x05">
@@ -4202,7 +4207,7 @@
机动车驾驶证号码
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss">
<summary>
每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列
</summary>


+ 37
- 1
src/JT808.Protocol/JT808CarDVRDownPackage.cs Parādīt failu

@@ -2,14 +2,16 @@
using JT808.Protocol.Exceptions;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace JT808.Protocol
{
public class JT808CarDVRDownPackage : IJT808MessagePackFormatter<JT808CarDVRDownPackage>
public class JT808CarDVRDownPackage : IJT808_CarDVR_Down_Package,IJT808MessagePackFormatter<JT808CarDVRDownPackage>, IJT808Analyze
{
public const ushort BeginFlag = 0x557A;
/// <summary>
@@ -82,5 +84,39 @@ namespace JT808.Protocol
value.CheckCode = reader.ReadByte();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808CarDVRDownPackage value = new JT808CarDVRDownPackage();
writer.WriteStartObject("行车记录仪下行数据包");
int currentPosition = reader.ReaderCount;
value.Begin = reader.ReadUInt16();
writer.WriteNumber($"[{value.Begin.ReadNumber()}]起始字头", value.Begin);
value.CommandId = reader.ReadByte();
writer.WriteString($"[{value.Begin.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString());
value.DataLength = reader.ReadUInt16();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]数据块长度", value.DataLength);
value.KeepFields = reader.ReadByte();
writer.WriteNumber($"[{value.KeepFields.ReadNumber()}]保留字", value.KeepFields);
if (value.DataLength > 0)
{
if (config.JT808_CarDVR_Down_Factory.Map.TryGetValue(value.CommandId, out var instance))
{
//4.2.处理消息体
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString());
instance.Analyze(ref reader, writer, config);
writer.WriteEndObject();
}
}
var carDVRCheckCode = reader.ReadCarDVRCheckCode(currentPosition);
if (!config.SkipCarDVRCRCCode)
{
if (carDVRCheckCode.RealXorCheckCode != carDVRCheckCode.CalculateXorCheckCode)
throw new JT808Exception(JT808ErrorCode.CarDVRCheckCodeNotEqual, $"{reader.RealCheckXorCode}!={reader.CalculateCheckXorCode}");
}
value.CheckCode = reader.ReadByte();
writer.WriteNumber($"[{value.CheckCode.ReadNumber()}]校验位", value.CheckCode);
writer.WriteEndObject();
}
}
}

+ 31
- 2
src/JT808.Protocol/JT808CarDVRUpPackage.cs Parādīt failu

@@ -14,7 +14,7 @@ namespace JT808.Protocol
/// <summary>
/// 行车记录仪上行数据包
/// </summary>
public class JT808CarDVRUpPackage : IJT808MessagePackFormatter<JT808CarDVRUpPackage>, IJT808Analyze
public class JT808CarDVRUpPackage : IJT808_CarDVR_Up_Package,IJT808MessagePackFormatter<JT808CarDVRUpPackage>, IJT808Analyze
{
public const ushort BeginFlag = 0x557A;
/// <summary>
@@ -44,7 +44,36 @@ namespace JT808.Protocol

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
throw new NotImplementedException();
JT808CarDVRUpPackage value = new JT808CarDVRUpPackage();
writer.WriteStartObject("行车记录仪上行数据包");
int currentPosition = reader.ReaderCount;
value.Begin = reader.ReadUInt16();
writer.WriteNumber($"[{value.Begin.ReadNumber()}]起始字头", value.Begin);
value.CommandId = reader.ReadByte();
writer.WriteString($"[{value.Begin.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString());
value.DataLength = reader.ReadUInt16();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]数据块长度", value.DataLength);
value.KeepFields = reader.ReadByte();
writer.WriteNumber($"[{value.KeepFields.ReadNumber()}]保留字", value.KeepFields);
if (value.DataLength > 0)
{
if (config.JT808_CarDVR_Up_Factory.Map.TryGetValue(value.CommandId, out var instance))
{
//4.2.处理消息体
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString());
instance.Analyze(ref reader,writer, config);
writer.WriteEndObject();
}
}
var carDVRCheckCode = reader.ReadCarDVRCheckCode(currentPosition);
if (!config.SkipCarDVRCRCCode)
{
if (carDVRCheckCode.RealXorCheckCode != carDVRCheckCode.CalculateXorCheckCode)
throw new JT808Exception(JT808ErrorCode.CarDVRCheckCodeNotEqual, $"{reader.RealCheckXorCode}!={reader.CalculateCheckXorCode}");
}
value.CheckCode = reader.ReadByte();
writer.WriteNumber($"[{value.CheckCode.ReadNumber()}]校验位", value.CheckCode);
writer.WriteEndObject();
}

public JT808CarDVRUpPackage Deserialize(ref JT808MessagePackReader reader, IJT808Config config)


+ 12
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs Parādīt failu

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 返回:符合条件的行驶速度记录
/// 如在指定的时间范围内无数据记录,则本数据块数据为空
/// </summary>
public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x08>
public class JT808_CarDVR_Down_0x08 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x08>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的行驶速度记录.ToByteValue();
/// <summary>
@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0x08 value = new JT808_CarDVR_Down_0x08();
value.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.Count = reader.ReadUInt16();
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count);
}
}
}

+ 12
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs Parādīt failu

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 返回:符合条件的位置信息记录
/// 指定的时间范围内无数据记录,则本数据块数据为空
/// </summary>
public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x09>
public class JT808_CarDVR_Down_0x09 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x09>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的位置信息记录.ToByteValue();

@@ -48,5 +48,16 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0x09 value = new JT808_CarDVR_Down_0x09();
value.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.Count = reader.ReadUInt16();
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count);
}
}
}

+ 12
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs Parādīt failu

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 返回:符合条件的事故疑点记录
/// 指定的时间范围内无数据记录,则本数据块数据为空
/// </summary>
public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x10>
public class JT808_CarDVR_Down_0x10 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x10>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的事故疑点记录.ToByteValue();

@@ -48,5 +48,16 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0x10 value = new JT808_CarDVR_Down_0x10();
value.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.Count = reader.ReadUInt16();
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count);
}
}
}

+ 12
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs Parādīt failu

@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的超时驾驶记录
/// 返回:符合条件的超时驾驶记录
/// </summary>
public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x11>
public class JT808_CarDVR_Down_0x11 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x11>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的超时驾驶记录.ToByteValue();

@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0x11 value = new JT808_CarDVR_Down_0x11();
value.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.Count = reader.ReadUInt16();
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count);
}
}
}

+ 12
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs Parādīt failu

@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的驾驶人身份记录
/// 返回:符合条件的驾驶人登录退出记录
/// </summary>
public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x12>
public class JT808_CarDVR_Down_0x12 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x12>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的驾驶人身份记录.ToByteValue();

@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0x12 value = new JT808_CarDVR_Down_0x12();
value.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.Count = reader.ReadUInt16();
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count);
}
}
}

+ 12
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs Parādīt failu

@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的外部供电记录
/// 返回:符合条件的供电记录
/// </summary>
public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x13>
public class JT808_CarDVR_Down_0x13 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x13>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的外部供电记录.ToByteValue();

@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0x13 value = new JT808_CarDVR_Down_0x13();
value.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.Count = reader.ReadUInt16();
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count);
}
}
}

+ 12
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs Parādīt failu

@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的参数修改记录
/// 返回:符合条件的参数修改记录
/// </summary>
public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x14>
public class JT808_CarDVR_Down_0x14 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x14>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的参数修改记录.ToByteValue();

@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0x14 value = new JT808_CarDVR_Down_0x14();
value.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.Count = reader.ReadUInt16();
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count);
}
}
}

+ 12
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs Parādīt failu

@@ -14,7 +14,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集指定的速度状态日志
/// 返回:符合条件的速度状态日志
/// </summary>
public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x15>
public class JT808_CarDVR_Down_0x15 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x15>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的速度状态日志.ToByteValue();

@@ -47,5 +47,16 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0x15 value = new JT808_CarDVR_Down_0x15();
value.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{value.StartTime.ToString("yyMMddHHmmss")}]开始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.Count = reader.ReadUInt16();
writer.WriteNumber($"[{value.Count.ReadNumber()}]最大单位数据块个数", value.Count);
}
}
}

+ 21
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs Parādīt failu

@@ -36,26 +36,37 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Down_0x82 value = new JT808_CarDVR_Down_0x82();
var vinHex = reader.ReadVirtualArray(17);
value.Vin = reader.ReadASCII(17);
writer.WriteString($"[{vinHex.ToArray().ToHexString()}]车辆识别代号", value.Vin);
var vehicleNoHex = reader.ReadVirtualArray(12);
value.VehicleNo = reader.ReadString(12);
writer.WriteString($"[{vehicleNoHex.ToArray().ToHexString()}]机动车号牌号码", value.VehicleNo);
var vehicleTypeHex = reader.ReadVirtualArray(10);
value.VehicleType = reader.ReadString(10);
writer.WriteString($"[{vehicleTypeHex.ToArray().ToHexString()}]机动车号牌分类", value.VehicleType);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x82 value, IJT808Config config)
{
writer.WriteASCII(value.Vin.PadRight(17, '0'));
writer.WriteASCII(value.VehicleNo.PadRight(9, '0'));
writer.Skip(3, out var reversed1);
writer.WriteString(value.VehicleType.PadRight(6, '0'));
writer.Skip(4, out var reversed2);
var currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(value.Vin);
writer.Skip(17 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.VehicleNo);
writer.Skip(12 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.VehicleType);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
}

public JT808_CarDVR_Down_0x82 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x82 value = new JT808_CarDVR_Down_0x82();
value.Vin = reader.ReadASCII(17);
value.VehicleNo = reader.ReadASCII(9);
reader.Skip(3);
value.VehicleType = reader.ReadString(6);
reader.Skip(4);
value.VehicleNo = reader.ReadString(12);
value.VehicleType = reader.ReadString(10);
return value;
}
}


+ 3
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs Parādīt failu

@@ -26,7 +26,9 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Down_0x83 value = new JT808_CarDVR_Down_0x83();
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]初次安装日期", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x83 value, IJT808Config config)


+ 61
- 17
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs Parādīt failu

@@ -64,21 +64,65 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Down_0x84 value = new JT808_CarDVR_Down_0x84();
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]实时时间", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.SignalOperate = reader.ReadByte();
writer.WriteNumber($"[{value.SignalOperate.ReadNumber()}]信号个数", value.SignalOperate);
var display = reader.ReadVirtualArray(10);
value.D0 = reader.ReadString(10);
writer.WriteString($"[{display.ToArray().ToHexString()}]D0", value.D0);
display = reader.ReadVirtualArray(10);
value.D1 = reader.ReadString(10);
writer.WriteString($"[{display.ToArray().ToHexString()}]D1", value.D1);
display = reader.ReadVirtualArray(10);
value.D2 = reader.ReadString(10);
writer.WriteString($"[{display.ToArray().ToHexString()}]D2", value.D2);
display = reader.ReadVirtualArray(10);
value.NearLight = reader.ReadString(10);
writer.WriteString($"[{display.ToArray().ToHexString()}]近光灯", value.NearLight);
display = reader.ReadVirtualArray(10);
value.FarLight = reader.ReadString(10);
writer.WriteString($"[{display.ToArray().ToHexString()}]远光灯", value.FarLight);
display = reader.ReadVirtualArray(10);
value.RightTurn = reader.ReadString(10);
writer.WriteString($"[{display.ToArray().ToHexString()}]右转向", value.RightTurn);
display = reader.ReadVirtualArray(10);
value.LeftTurn = reader.ReadString(10);
writer.WriteString($"[{display.ToArray().ToHexString()}]左转向", value.LeftTurn);
display = reader.ReadVirtualArray(10);
value.Brake = reader.ReadString(10);
writer.WriteString($"[{display.ToArray().ToHexString()}]制动", value.Brake);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x84 value, IJT808Config config)
{
writer.WriteDateTime6(value.RealTime);
writer.WriteByte(value.SignalOperate);
writer.WriteASCII(value.D0.PadRight(0));
writer.WriteASCII(value.D1.PadRight(0));
writer.WriteASCII(value.D2.PadRight(0));
writer.WriteASCII(value.NearLight.PadRight(0));
writer.WriteASCII(value.FarLight.PadRight(0));
writer.WriteASCII(value.RightTurn.PadRight(0));
writer.WriteASCII(value.LeftTurn.PadRight(0));
writer.WriteASCII(value.Brake.PadRight(0));
var currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.D0);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.D1);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.D2);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.NearLight);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.FarLight);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.RightTurn);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.LeftTurn);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.Brake);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
}

public JT808_CarDVR_Down_0x84 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
@@ -86,14 +130,14 @@ namespace JT808.Protocol.MessageBody.CarDVR
JT808_CarDVR_Down_0x84 value = new JT808_CarDVR_Down_0x84();
value.RealTime = reader.ReadDateTime6();
value.SignalOperate = reader.ReadByte();
value.D0 = reader.ReadASCII(10);
value.D1 = reader.ReadASCII(10);
value.D2 = reader.ReadASCII(10);
value.NearLight = reader.ReadASCII(10);
value.FarLight = reader.ReadASCII(10);
value.RightTurn = reader.ReadASCII(10);
value.LeftTurn = reader.ReadASCII(10);
value.Brake = reader.ReadASCII(10);
value.D0 = reader.ReadString(10);
value.D1 = reader.ReadString(10);
value.D2 = reader.ReadString(10);
value.NearLight = reader.ReadString(10);
value.FarLight = reader.ReadString(10);
value.RightTurn = reader.ReadString(10);
value.LeftTurn = reader.ReadString(10);
value.Brake = reader.ReadString(10);
return value;
}
}


+ 3
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs Parādīt failu

@@ -26,7 +26,9 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Down_0xC2 value = new JT808_CarDVR_Down_0xC2();
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]实时时间", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
}




+ 9
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs Parādīt failu

@@ -23,17 +23,18 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// </summary>
public DateTime RealTime { get; set; }
/// <summary>
/// 脉冲系数高字节
/// 脉冲系数
/// </summary>
public byte PulseCoefficientHighByte { get; set; }
/// <summary>
/// 仪脉冲系数低字节
/// </summary>
public byte PulseCoefficientLowByte { get; set; }
public ushort PulseCoefficient { get; set; }
public override string Description => "记录仪脉冲系数";

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Down_0xC3 value = new JT808_CarDVR_Down_0xC3();
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]当前时间", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.PulseCoefficient = reader.ReadUInt16();
writer.WriteNumber($"[{value.PulseCoefficient.ReadNumber()}]脉冲系数", value.PulseCoefficient);

}

@@ -41,16 +42,14 @@ namespace JT808.Protocol.MessageBody.CarDVR
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC3 value, IJT808Config config)
{
writer.WriteDateTime6(value.RealTime);
writer.WriteByte(value.PulseCoefficientHighByte);
writer.WriteByte(value.PulseCoefficientLowByte);
writer.WriteUInt16(value.PulseCoefficient);
}

public JT808_CarDVR_Down_0xC3 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0xC3 value = new JT808_CarDVR_Down_0xC3();
value.RealTime = reader.ReadDateTime6();
value.PulseCoefficientHighByte = reader.ReadByte();
value.PulseCoefficientLowByte = reader.ReadByte();
value.PulseCoefficient = reader.ReadUInt16();
return value;
}
}


+ 9
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs Parādīt failu

@@ -38,7 +38,15 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Down_0xC4 value = new JT808_CarDVR_Down_0xC4();
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{value.RealTime.ToString("yyMMddHHmmss")}]当前时间", value.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.FirstInstallTime = reader.ReadDateTime6();
writer.WriteString($"[{value.FirstInstallTime.ToString("yyMMddHHmmss")}]初次安装时间", value.FirstInstallTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.FirstMileage = reader.ReadBCD(8);
writer.WriteString($"[{value.FirstMileage}]初始里程", value.FirstMileage);
value.TotalMilage = reader.ReadBCD(8);
writer.WriteString($"[{value.TotalMilage}]累计里程", value.TotalMilage);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC4 value, IJT808Config config)


+ 15
- 2
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs Parādīt failu

@@ -43,12 +43,25 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Down_0xE1 value = new JT808_CarDVR_Down_0xE1();
var hex = reader.ReadVirtualArray(35);
value.UniqueNumber = reader.ReadASCII(35);
writer.WriteString($"[{hex.ToArray().ToHexString()}]记录仪唯一性编号", value.UniqueNumber);
value.PulseCoefficient = reader.ReadUInt16();
writer.WriteNumber($"[{value.PulseCoefficient.ReadNumber()}]脉冲系数", value.PulseCoefficient);
value.Speed = reader.ReadUInt16();
writer.WriteNumber($"[{value.Speed.ReadNumber()}]当前速度", value.Speed);
value.TotalMileage = reader.ReadUInt32();
writer.WriteNumber($"[{value.TotalMileage.ReadNumber()}]累计里程", value.TotalMileage);
value.StatusSignal = reader.ReadByte();
writer.WriteNumber($"[{value.StatusSignal.ReadNumber()}]状态信号", value.StatusSignal);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xE1 value, IJT808Config config)
{
writer.WriteASCII(value.UniqueNumber.PadRight(35, '0'));
var currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(value.UniqueNumber);
writer.Skip(35 - (writer.GetCurrentPosition() - currentPosition), out var _);
writer.WriteUInt16(value.PulseCoefficient);
writer.WriteUInt16(value.Speed);
writer.WriteUInt32(value.TotalMileage);


+ 5
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs Parādīt failu

@@ -32,7 +32,11 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x00 value = new JT808_CarDVR_Up_0x00();
value.StandardYear = reader.ReadBCD(2);
writer.WriteString($"[{value.StandardYear}]记录仪执行标准年号", value.StandardYear);
value.ModifyNumber = reader.ReadByte();
writer.WriteNumber($"[{value.ModifyNumber.ReadNumber()}]修改单号", value.ModifyNumber);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x00 value, IJT808Config config)


+ 4
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs Parādīt failu

@@ -27,7 +27,10 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x01 value = new JT808_CarDVR_Up_0x01();
var hex = reader.ReadVirtualArray(18);
value.DriverLicenseNo = reader.ReadASCII(18);
writer.WriteString($"[{hex.ToArray().ToHexString()}]当前驾驶人的机动车驾驶证号码", value.DriverLicenseNo);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x01 value, IJT808Config config)


+ 4
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs Parādīt failu

@@ -26,7 +26,10 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x02 value = new JT808_CarDVR_Up_0x02();
var hex = reader.ReadVirtualArray(6);
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]实时时间", value.RealTime);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x02 value, IJT808Config config)


+ 13
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs Parādīt failu

@@ -38,7 +38,19 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x03 value = new JT808_CarDVR_Up_0x03();
var hex = reader.ReadVirtualArray(6);
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]实时时间", value.RealTime);
hex = reader.ReadVirtualArray(6);
value.FirstInstallTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]初次安装时间", value.RealTime);
hex = reader.ReadVirtualArray(4);
value.FirstMileage = reader.ReadBCD(8);
writer.WriteString($"[{hex.ToArray().ToHexString()}]初始里程", value.FirstMileage);
hex = reader.ReadVirtualArray(4);
value.TotalMilage = reader.ReadBCD(8);
writer.WriteString($"[{hex.ToArray().ToHexString()}]累计里程", value.TotalMilage);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x03 value, IJT808Config config)


+ 7
- 2
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs Parādīt failu

@@ -23,7 +23,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// </summary>
public DateTime RealTime { get; set; }
/// <summary>
/// 脉冲系数高字节
/// 脉冲系数
/// </summary>
public ushort PulseCoefficient { get; set; }

@@ -31,7 +31,12 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x04 value = new JT808_CarDVR_Up_0x04();
var hex = reader.ReadVirtualArray(6);
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]当前时间", value.RealTime);
value.PulseCoefficient = reader.ReadUInt16();
writer.WriteNumber($"[{value.PulseCoefficient.ReadNumber()}]脉冲系数",value.PulseCoefficient);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x04 value, IJT808Config config)


+ 10
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs Parādīt failu

@@ -36,7 +36,16 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x05 value = new JT808_CarDVR_Up_0x05();
var hex = reader.ReadVirtualArray(17);
value.Vin = reader.ReadASCII(17);
writer.WriteString($"[{hex.ToArray().ToHexString()}]车辆识别代号", value.Vin);
hex = reader.ReadVirtualArray(12);
value.VehicleNo = reader.ReadString(12);
writer.WriteString($"[{hex.ToArray().ToHexString()}]机动车号牌号码", value.VehicleNo);
hex = reader.ReadVirtualArray(10);
value.VehicleType = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]机动车号牌分类", value.VehicleType);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x05 value, IJT808Config config)


+ 30
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs Parādīt failu

@@ -65,7 +65,36 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x06 value = new JT808_CarDVR_Up_0x06();
var hex = reader.ReadVirtualArray(6);
value.RealTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]实时时间", value.RealTime);
value.SignalOperate = reader.ReadByte();
writer.WriteNumber($"[{value.SignalOperate.ReadNumber()}]信号个数", value.SignalOperate) ;
hex = reader.ReadVirtualArray(10);
value.D0 = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]D0", value.D0);
hex = reader.ReadVirtualArray(10);
value.D1 = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]D1", value.D1);
hex = reader.ReadVirtualArray(10);
value.D2 = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]D2", value.D2);
hex = reader.ReadVirtualArray(10);
value.NearLight = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]近光灯", value.NearLight);
hex = reader.ReadVirtualArray(10);
value.FarLight = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]远光灯", value.FarLight);
hex = reader.ReadVirtualArray(10);
value.RightTurn = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]右转向", value.RightTurn);
hex = reader.ReadVirtualArray(10);
value.LeftTurn = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]左转向", value.LeftTurn);
hex = reader.ReadVirtualArray(10);
value.Brake = reader.ReadString(10);
writer.WriteString($"[{hex.ToArray().ToHexString()}]制动", value.Brake);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x06 value, IJT808Config config)


+ 16
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs Parādīt failu

@@ -42,7 +42,22 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x07 value = new JT808_CarDVR_Up_0x07();
var hex = reader.ReadVirtualArray(7);
value.ProductionPlantCCCCertificationCode = reader.ReadASCII(7);
writer.WriteString($"[{hex.ToArray().ToHexString()}]生产厂 CCC 认证代码", value.ProductionPlantCCCCertificationCode);
hex = reader.ReadVirtualArray(16);
value.CertifiedProductModels = reader.ReadASCII(16);
writer.WriteString($"[{hex.ToArray().ToHexString()}]认证产品型号", value.CertifiedProductModels);
hex = reader.ReadVirtualArray(3);
value.ProductionDate = reader.ReadDateTime3();
writer.WriteString($"[{hex.ToArray().ToHexString()}]生产日期", value.ProductionDate);
hex = reader.ReadVirtualArray(4);
value.ProductProductionFlowNumber = reader.ReadString(4);
writer.WriteString($"[{hex.ToArray().ToHexString()}]产品生产流水号", value.ProductProductionFlowNumber);
hex = reader.ReadVirtualArray(5);
value.Reversed = reader.ReadString(5);
writer.WriteString($"[{hex.ToArray().ToHexString()}]备用", value.Reversed);
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x07 value, IJT808Config config)


+ 25
- 0
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs Parādīt failu

@@ -27,7 +27,32 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_CarDVR_Up_0x08 value = new JT808_CarDVR_Up_0x08();
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
var count = (reader.ReadCurrentRemainContentLength() - 1) / 126;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x08_SpeedPerMinute jT808_CarDVR_Up_0X08_SpeedPerMinute = new JT808_CarDVR_Up_0x08_SpeedPerMinute();
writer.WriteStartObject();
writer.WriteStartObject($"第{i+1}分钟行驶速度记录数据块格式");
var hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0X08_SpeedPerMinute.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]开始时间", jT808_CarDVR_Up_0X08_SpeedPerMinute.StartTime);
for (int j = 0; j < 60; j++)//60秒
{
JT808_CarDVR_Up_0x08_SpeedPerSecond jT808_CarDVR_Up_0X08_SpeedPerSecond = new JT808_CarDVR_Up_0x08_SpeedPerSecond();
writer.WriteStartObject($"开始时间之后第{j+1}秒钟的平均速度和状态信号");
jT808_CarDVR_Up_0X08_SpeedPerSecond.AvgSpeedAfterStartTime = reader.ReadByte();
writer.WriteNumber($"[{jT808_CarDVR_Up_0X08_SpeedPerSecond.AvgSpeedAfterStartTime.ReadNumber()}]平均速度", jT808_CarDVR_Up_0X08_SpeedPerSecond.AvgSpeedAfterStartTime);
jT808_CarDVR_Up_0X08_SpeedPerSecond.StatusSignalAfterStartTime = reader.ReadByte();
writer.WriteNumber($"[{jT808_CarDVR_Up_0X08_SpeedPerSecond.StatusSignalAfterStartTime.ReadNumber()}]状态信号", jT808_CarDVR_Up_0X08_SpeedPerSecond.StatusSignalAfterStartTime);
writer.WriteEndObject();

}
writer.WriteEndObject();
writer.WriteEndObject();
}
writer.WriteEndArray();
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x08 value, IJT808Config config)


+ 29
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs Parādīt failu

@@ -27,7 +27,35 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x09 value = new JT808_CarDVR_Up_0x09();
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
var count = (reader.ReadCurrentRemainContentLength() - 1) / 666;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x09_PositionPerHour jT808_CarDVR_Up_0x09_PositionPerHour = new JT808_CarDVR_Up_0x09_PositionPerHour();
writer.WriteStartObject();
writer.WriteStartObject($"指定的结束时间之前最近的第{i+1}小时的位置信息记录");
var hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x09_PositionPerHour.StartTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]开始时间", jT808_CarDVR_Up_0x09_PositionPerHour.StartTime);
for (int j = 0; j < 60; j++)//60钟
{
JT808_CarDVR_Up_0x09_PositionPerMinute jT808_CarDVR_Up_0X09_PositionPerMinute = new JT808_CarDVR_Up_0x09_PositionPerMinute();
writer.WriteStartObject($"开始时间之后第{j+1}分钟的平均速度和位置信息");
jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLng = reader.ReadInt32();
writer.WriteNumber($"[{jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLng.ReadNumber()}]经度", jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLng);
jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLat = reader.ReadInt32();
writer.WriteNumber($"[{jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLat.ReadNumber()}]纬度", jT808_CarDVR_Up_0X09_PositionPerMinute.GpsLat);
jT808_CarDVR_Up_0X09_PositionPerMinute.Height = reader.ReadInt16();
writer.WriteNumber($"[{jT808_CarDVR_Up_0X09_PositionPerMinute.Height.ReadNumber()}]高度", jT808_CarDVR_Up_0X09_PositionPerMinute.Height);
jT808_CarDVR_Up_0X09_PositionPerMinute.AvgSpeedAfterStartTime = reader.ReadByte();
writer.WriteNumber($"[{jT808_CarDVR_Up_0X09_PositionPerMinute.AvgSpeedAfterStartTime.ReadNumber()}]平均速度", jT808_CarDVR_Up_0X09_PositionPerMinute.AvgSpeedAfterStartTime);
writer.WriteEndObject();
}
writer.WriteEndObject();
writer.WriteEndObject();
}
writer.WriteEndArray();
}
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x09 value, IJT808Config config)
{


+ 46
- 7
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs Parādīt failu

@@ -28,7 +28,46 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x10 value = new JT808_CarDVR_Up_0x10();
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
var count = (reader.ReadCurrentRemainContentLength() - 1) / 234;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x10_AccidentSuspectin jT808_CarDVR_Up_0x10_AccidentSuspectin = new JT808_CarDVR_Up_0x10_AccidentSuspectin();
writer.WriteStartObject();
writer.WriteStartObject($"指定的结束时间之前最近的第{i+1}条事故疑点记录");
var hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]行驶结束时间", jT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime);
hex = reader.ReadVirtualArray(18);
jT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo = reader.ReadASCII(18);
writer.WriteString($"[{hex.ToArray().ToHexString()}]机动车驾驶证号码", jT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo);
for (int j = 0; j < 100; j++)//100组
{
JT808_CarDVR_Up_0x10_DrivingStatus jT808_CarDVR_Up_0X10_DrivingStatus = new JT808_CarDVR_Up_0x10_DrivingStatus();
if (j == 0)
{
writer.WriteStartObject("行驶结束时的速度");
}
else {
writer.WriteStartObject($"行驶结束时间前 { (j * 0.2).ToString("F1")} 秒时的速度");
}
jT808_CarDVR_Up_0X10_DrivingStatus.Speed = reader.ReadByte();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X10_DrivingStatus.Speed.ReadNumber()}]速度", jT808_CarDVR_Up_0X10_DrivingStatus.Speed);
jT808_CarDVR_Up_0X10_DrivingStatus.StatusSignal = reader.ReadByte();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X10_DrivingStatus.StatusSignal.ReadNumber()}]状态信号", jT808_CarDVR_Up_0X10_DrivingStatus.StatusSignal);
writer.WriteEndObject();
}
jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng = reader.ReadInt32();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng);
jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat = reader.ReadInt32();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat.ReadNumber()}]纬度", jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat);
jT808_CarDVR_Up_0x10_AccidentSuspectin.Height = reader.ReadInt16();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x10_AccidentSuspectin.Height.ReadNumber()}]高度", jT808_CarDVR_Up_0x10_AccidentSuspectin.Height);
writer.WriteEndObject();
writer.WriteEndObject();
}
writer.WriteEndArray();
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x10 value, IJT808Config config)
@@ -41,10 +80,10 @@ namespace JT808.Protocol.MessageBody.CarDVR
writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _);
for (int i = 0; i < 100; i++)
{
if (i < accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss.Count)
if (i < accidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss.Count)
{
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss[i].Speed);
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss[i].StatusSignal);
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss[i].Speed);
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss[i].StatusSignal);
}
else
{
@@ -68,10 +107,10 @@ namespace JT808.Protocol.MessageBody.CarDVR
JT808_CarDVR_Up_0x10_AccidentSuspectin jT808_CarDVR_Up_0x10_AccidentSuspectin = new JT808_CarDVR_Up_0x10_AccidentSuspectin();
jT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime = reader.ReadDateTime6();
jT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo = reader.ReadASCII(18);
jT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss = new List<JT808_CarDVR_Up_0x10_DrivingStatus>();
jT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss = new List<JT808_CarDVR_Up_0x10_DrivingStatus>();
for (int j = 0; j < 100; j++)//100组
{
jT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss.Add(new JT808_CarDVR_Up_0x10_DrivingStatus
jT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x10_DrivingStatuss.Add(new JT808_CarDVR_Up_0x10_DrivingStatus
{
Speed = reader.ReadByte(),
StatusSignal = reader.ReadByte()
@@ -103,7 +142,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// <summary>
/// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列
/// </summary>
public List<JT808_CarDVR_Up_0x10_DrivingStatus> JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; }
public List<JT808_CarDVR_Up_0x10_DrivingStatus> JT808_CarDVR_Up_0x10_DrivingStatuss { get; set; }
/// <summary>
/// 经度
/// </summary>


+ 41
- 3
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs Parādīt failu

@@ -26,21 +26,59 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x11 value = new JT808_CarDVR_Up_0x11();
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
var count = (reader.ReadCurrentRemainContentLength() - 1) / 50;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x11_DriveOverTime jT808_CarDVR_Up_0x11_DriveOverTime = new JT808_CarDVR_Up_0x11_DriveOverTime();
writer.WriteStartObject();
writer.WriteStartObject($"指定的结束时间前最近的第 {i+1}条超时驾驶记录");
var hex = reader.ReadVirtualArray(18);
jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo = reader.ReadASCII(18);
writer.WriteString($"[{hex.ToArray().ToHexString()}机动车驾驶证号码]", jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo);
hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}连续驾驶开始时间]", jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime);
hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}连续驾驶结束时间]", jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime);
writer.WriteStartObject("连续驾驶开始时间所在的最近一次有效位置信息");
jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng = reader.ReadInt32();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng);
jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat = reader.ReadInt32();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat.ReadNumber()}纬度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat);
jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight = reader.ReadInt16();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight.ReadNumber()}]高度", jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight);
writer.WriteEndObject();
writer.WriteStartObject("连续驾驶结束时间所在的最近一次有效位置信息");
jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng = reader.ReadInt32();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng);
jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat = reader.ReadInt32();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat.ReadNumber()}]纬度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat);
jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight = reader.ReadInt16();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight.ReadNumber()}]高度", jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight);
writer.WriteEndObject();
writer.WriteEndObject();
writer.WriteEndObject();
}
writer.WriteEndArray();
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x11 value, IJT808Config config)
{
foreach (var driveOverTime in value.JT808_CarDVR_Up_0x11_DriveOverTimes)
{
writer.WriteASCII(driveOverTime.DriverLicenseNo.PadRight(18, '0'));
var currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(driveOverTime.DriverLicenseNo);
writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _);
writer.WriteDateTime6(driveOverTime.ContinueDrivingStartTime);
writer.WriteDateTime6(driveOverTime.ContinueDrivingEndTime);
writer.WriteInt32(driveOverTime.GpsStartLng);
writer.WriteInt32(driveOverTime.GpsStartLat);
writer.WriteInt16(driveOverTime.StartHeight);
writer.WriteInt32(driveOverTime.GpsEndLng);
writer.WriteInt32(driveOverTime.GpsStartLat);
writer.WriteInt32(driveOverTime.GpsEndLat);
writer.WriteInt16(driveOverTime.EndHeight);
}
}


+ 36
- 2
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs Parādīt failu

@@ -26,7 +26,39 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x12 value = new JT808_CarDVR_Up_0x12();
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
var count = (reader.ReadCurrentRemainContentLength() - 1) / 25;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x12_DriveLogin jT808_CarDVR_Up_0x12_DriveLogin = new JT808_CarDVR_Up_0x12_DriveLogin();
writer.WriteStartObject();
writer.WriteStartObject($"指定的结束时间之前最近的第 {i+1}条驾驶人登录退出记录");
var hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x12_DriveLogin.LoginTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]登录/登出发生时间", jT808_CarDVR_Up_0x12_DriveLogin.LoginTime);
hex = reader.ReadVirtualArray(18);
jT808_CarDVR_Up_0x12_DriveLogin.DriverLicenseNo = reader.ReadASCII(18);
writer.WriteString($"[{hex.ToArray().ToHexString()}]机动车驾驶证号码", jT808_CarDVR_Up_0x12_DriveLogin.DriverLicenseNo);
jT808_CarDVR_Up_0x12_DriveLogin.LoginType = reader.ReadByte();
writer.WriteString($"[{ jT808_CarDVR_Up_0x12_DriveLogin.LoginType.ReadNumber()}]登录/登出事件", LoginTypeDisplay(jT808_CarDVR_Up_0x12_DriveLogin.LoginType));
writer.WriteEndObject();
writer.WriteEndObject();
}
writer.WriteEndArray();
string LoginTypeDisplay(byte loginType){
if (loginType == 1)
{
return "登录";
}
else if(loginType == 2)
{
return "退出";
}
else {
return "保留";
}
}
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x12 value, IJT808Config config)
@@ -34,7 +66,9 @@ namespace JT808.Protocol.MessageBody.CarDVR
foreach (var driveLogin in value.JT808_CarDVR_Up_0x12_DriveLogins)
{
writer.WriteDateTime6(driveLogin.LoginTime);
writer.WriteASCII(driveLogin.DriverLicenseNo.PadRight(18, '0'));
var currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(driveLogin.DriverLicenseNo);
writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _);
writer.WriteByte(driveLogin.LoginType);
}
}


+ 26
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs Parādīt failu

@@ -26,7 +26,32 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x13 value = new JT808_CarDVR_Up_0x13();
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
var count = (reader.ReadCurrentRemainContentLength() - 1) / 7;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x13_ExternalPowerSupply jT808_CarDVR_Up_0x13_ExternalPowerSupply = new JT808_CarDVR_Up_0x13_ExternalPowerSupply();
writer.WriteStartObject();
writer.WriteStartObject($"从指定的结束时间之前最近的第{i+1}条外部电源记录");
var hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]事件发生时间", jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventTime);
jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType = reader.ReadByte();
writer.WriteString($"[{ jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType.ReadNumber()}]事件类型", EventTypeDisplay(jT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType));
writer.WriteEndObject();
writer.WriteEndObject();
}
writer.WriteEndArray();
string EventTypeDisplay(byte eventType) {
if (eventType == 1)
{
return "供电";
}
else {
return "断电";
}
}
}
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x13 value, IJT808Config config)
{


+ 17
- 1
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs Parādīt failu

@@ -26,7 +26,23 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x14 value = new JT808_CarDVR_Up_0x14();
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
var count = (reader.ReadCurrentRemainContentLength() - 1) / 7;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x14_ParameterModify jT808_CarDVR_Up_0x14_ParameterModify = new JT808_CarDVR_Up_0x14_ParameterModify();
writer.WriteStartObject();
writer.WriteStartObject($"指定的结束时间之前最近的第{i+1}条参数修改记录");
var hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x14_ParameterModify.EventTime = reader.ReadDateTime6();
writer.WriteString($"[{hex.ToArray().ToHexString()}]事件发生时间", jT808_CarDVR_Up_0x14_ParameterModify.EventTime);
jT808_CarDVR_Up_0x14_ParameterModify.EventType = reader.ReadByte();
writer.WriteString($"[{ jT808_CarDVR_Up_0x14_ParameterModify.EventType.ReadNumber()}]事件类型", ((JT808CarDVRCommandID)jT808_CarDVR_Up_0x14_ParameterModify.EventType).ToString());
writer.WriteEndObject();
writer.WriteEndObject();
}
writer.WriteEndArray();
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x14 value, IJT808Config config)


+ 65
- 4
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs Parādīt failu

@@ -26,7 +26,61 @@ namespace JT808.Protocol.MessageBody.CarDVR

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{

JT808_CarDVR_Up_0x15 value = new JT808_CarDVR_Up_0x15();
writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
var count = (reader.ReadCurrentRemainContentLength() - 1) / 133;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x15_SpeedStatusLog jT808_CarDVR_Up_0x15_SpeedStatusLog = new JT808_CarDVR_Up_0x15_SpeedStatusLog();
writer.WriteStartObject();
writer.WriteStartObject($"指定的结束时间之前最近的第{i+1} 条速度状态日志");
jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus = reader.ReadByte();
writer.WriteString($"[{ jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus.ReadNumber()}]速度状态", SpeedStatusDisplay(jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus));
var hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusStartTime = reader.ReadDateTime6();
writer.WriteString($"[{ hex.ToArray().ToHexString()}]速度状态判定的开始时间", jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusStartTime);
hex = reader.ReadVirtualArray(6);
jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusEndTime = reader.ReadDateTime6();
writer.WriteString($"[{ hex.ToArray().ToHexString()}]速度状态判定的结束时间", jT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusEndTime);
writer.WriteStartArray("前60s速度状态日志");
for (int j = 0; j < 60; j++)//60组
{
writer.WriteStartObject();
JT808_CarDVR_Up_0x15_SpeedPerSecond jT808_CarDVR_Up_0X15_SpeedPerSecond = new JT808_CarDVR_Up_0x15_SpeedPerSecond();
if (j == 0)
{
jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed = reader.ReadByte();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed.ReadNumber()}]开始时间对应的记录速度", jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed);
jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed = reader.ReadByte();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed.ReadNumber()}]开始时间对应的参考速度", jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed);
}
else
{
jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed = reader.ReadByte();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed.ReadNumber()}]开始时间后第{j}秒对应的记录速度", jT808_CarDVR_Up_0X15_SpeedPerSecond.RecordSpeed);
jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed = reader.ReadByte();
writer.WriteNumber($"[{ jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed.ReadNumber()}]开始时间后第{j}秒对应的参考速度", jT808_CarDVR_Up_0X15_SpeedPerSecond.ReferenceSpeed);
}
writer.WriteEndObject();
}
writer.WriteEndArray();
writer.WriteEndObject();
writer.WriteEndObject();
}
writer.WriteEndArray();
string SpeedStatusDisplay(byte speedStatus) {
if (speedStatus == 0x01)
{
return "正常";
}
else if (speedStatus == 0x02)
{
return "异常";
}
else {
return "未知";
}
}
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x15 value, IJT808Config config)
@@ -36,10 +90,17 @@ namespace JT808.Protocol.MessageBody.CarDVR
writer.WriteByte(speedStatusLog.SpeedStatus);
writer.WriteDateTime6(speedStatusLog.SpeedStatusStartTime);
writer.WriteDateTime6(speedStatusLog.SpeedStatusEndTime);
foreach (var speedPerSecond in speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds)
for (int i = 0; i < 60; i++)
{
writer.WriteByte(speedPerSecond.RecordSpeed);
writer.WriteByte(speedPerSecond.ReferenceSpeed);
if (i < speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds.Count)
{
writer.WriteByte(speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds[i].RecordSpeed);
writer.WriteByte(speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds[i].ReferenceSpeed);
}
else {
writer.WriteByte(0xFF);
writer.WriteByte(0xFF);
}
}
}
}


+ 1
- 0
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs Parādīt failu

@@ -20,5 +20,6 @@ namespace JT808.Protocol.MessageBody.CarDVR
public override byte CommandId => JT808CarDVRCommandID.进入实时时间误差测量.ToByteValue();

public override string Description => "通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平)";
public override bool SkipSerialization { get; set; } = true;
}
}

+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0107.cs Parādīt failu

@@ -180,7 +180,7 @@ namespace JT808.Protocol.MessageBody
jT808_0X0107.TerminalId = reader.ReadString(7);
writer.WriteString($"[{terminalIdSpan.ToArray().ToHexString()}]终端ID", jT808_0X0107.TerminalId);
}
ReadOnlySpan<byte> iccidSpan = reader.ReadVirtualArray(20);
ReadOnlySpan<byte> iccidSpan = reader.ReadVirtualArray(10);
jT808_0X0107.Terminal_SIM_ICCID = reader.ReadBCD(20, config.Trim);
writer.WriteString($"[{iccidSpan.ToArray().ToHexString()}]终端SIM卡ICCID", jT808_0X0107.Terminal_SIM_ICCID);
jT808_0X0107.Terminal_Hardware_Version_Length = reader.ReadByte();


+ 15
- 4
src/JT808.Protocol/MessageBody/JT808_0x0700.cs Parādīt failu

@@ -1,4 +1,5 @@
using JT808.Protocol.Extensions;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
@@ -29,6 +30,15 @@ namespace JT808.Protocol.MessageBody
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x0700 value = new JT808_0x0700();
writer.WriteStartObject("行驶记录参数下传命令");
value.ReplyMsgNum = reader.ReadUInt16();
writer.WriteNumber($"[{value.ReplyMsgNum.ReadNumber()}]应答流水号", value.ReplyMsgNum);
value.CommandId = reader.ReadByte();
writer.WriteString($"[{value.CommandId.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString());
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString());
config.IJT808_CarDVR_Up_Package.Analyze(ref reader, writer, config);
writer.WriteEndObject();
writer.WriteEndObject();
}

public JT808_0x0700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
@@ -36,7 +46,7 @@ namespace JT808.Protocol.MessageBody
JT808_0x0700 value = new JT808_0x0700();
value.ReplyMsgNum = reader.ReadUInt16();
value.CommandId = reader.ReadByte();
object obj = config.GetMessagePackFormatterByType(typeof( JT808CarDVRUpPackage));
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Up_Package.GetType());
value.JT808CarDVRUpPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config);
return value;
}
@@ -45,8 +55,9 @@ namespace JT808.Protocol.MessageBody
{
writer.WriteUInt16(value.ReplyMsgNum);
writer.WriteByte(value.CommandId);
object obj = config.GetMessagePackFormatterByType(typeof(JT808CarDVRUpPackage));
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer,value.JT808CarDVRUpPackage, config);
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Up_Package.GetType());
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRUpPackage, config);

}
}
}

+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8003.cs Parādīt failu

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody
public override ushort MsgId { get; } = 0x8003;
public override string Description => "补传分包请求";
/// <summary>
/// 原始消息流水号
/// 原始消息流水号
/// 对应要求补传的原始消息第一包的消息流水号
/// </summary>
public ushort OriginalMsgNum { get; set; }


+ 12
- 4
src/JT808.Protocol/MessageBody/JT808_0x8700.cs Parādīt failu

@@ -1,4 +1,5 @@
using JT808.Protocol.Extensions;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
@@ -23,14 +24,21 @@ namespace JT808.Protocol.MessageBody

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
throw new NotImplementedException();
JT808_0x8700 value = new JT808_0x8700();
writer.WriteStartObject("行驶记录数据采集命令");
value.CommandId = reader.ReadByte();
writer.WriteString($"[{value.CommandId.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString());
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString());
config.IJT808_CarDVR_Down_Package.Analyze(ref reader, writer, config);
writer.WriteEndObject();
writer.WriteEndObject();
}

public JT808_0x8700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8700 value = new JT808_0x8700();
value.CommandId = reader.ReadByte();
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType());
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Down_Package.GetType());
value.JT808CarDVRDownPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config);
return value;
}
@@ -38,7 +46,7 @@ namespace JT808.Protocol.MessageBody
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8700 value, IJT808Config config)
{
writer.WriteByte(value.CommandId);
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType());
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Down_Package.GetType());
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRDownPackage, config);
}
}


+ 12
- 4
src/JT808.Protocol/MessageBody/JT808_0x8701.cs Parādīt failu

@@ -1,4 +1,5 @@
using JT808.Protocol.Extensions;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
@@ -26,14 +27,21 @@ namespace JT808.Protocol.MessageBody

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
throw new NotImplementedException();
JT808_0x8701 value = new JT808_0x8701();
writer.WriteStartObject("行驶记录参数下传命令");
value.CommandId = reader.ReadByte();
writer.WriteString($"[{value.CommandId.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString());
writer.WriteStartObject(((JT808CarDVRCommandID)value.CommandId).ToString());
config.IJT808_CarDVR_Down_Package.Analyze(ref reader, writer, config);
writer.WriteEndObject();
writer.WriteEndObject();
}

public JT808_0x8701 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8701 value = new JT808_0x8701();
value.CommandId = reader.ReadByte();
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType());
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Down_Package.GetType());
value.JT808CarDVRDownPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config);
return value;
}
@@ -41,7 +49,7 @@ namespace JT808.Protocol.MessageBody
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8701 value, IJT808Config config)
{
writer.WriteByte(value.CommandId);
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType());
object obj = config.GetMessagePackFormatterByType(config.IJT808_CarDVR_Down_Package.GetType());
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRDownPackage, config);
}
}


Notiek ielāde…
Atcelt
Saglabāt