Преглед на файлове

完善记录仪,及添加单元测试

tags/v2.2.9
waterliu99 преди 5 години
родител
ревизия
e9443649ca
променени са 70 файла, в които са добавени 2124 реда и са изтрити 940 реда
  1. +1
    -0
      src/JT808.Protocol.Test/JT808.Protocol.Test.csproj
  2. +640
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs
  3. +5
    -1
      src/JT808.Protocol/Interfaces/GlobalConfigBase.cs
  4. +2
    -2
      src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Factory.cs
  5. +2
    -2
      src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Factory.cs
  6. +55
    -0
      src/JT808.Protocol/Internal/JT808_CarDVR_Down_Factory.cs
  7. +55
    -0
      src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs
  8. +255
    -59
      src/JT808.Protocol/JT808.Protocol.xml
  9. +0
    -2
      src/JT808.Protocol/JT808CarDVRDownBodies.cs
  10. +53
    -2
      src/JT808.Protocol/JT808CarDVRDownPackage.cs
  11. +0
    -2
      src/JT808.Protocol/JT808CarDVRUpBodies.cs
  12. +6
    -4
      src/JT808.Protocol/JT808CarDVRUpPackage.cs
  13. +0
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x00.cs
  14. +2
    -12
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x01.cs
  15. +0
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x02.cs
  16. +0
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x03.cs
  17. +0
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x04.cs
  18. +0
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x05.cs
  19. +0
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x06.cs
  20. +0
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x07.cs
  21. +9
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs
  22. +9
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs
  23. +9
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs
  24. +9
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs
  25. +10
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs
  26. +10
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs
  27. +10
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs
  28. +10
    -11
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs
  29. +29
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs
  30. +11
    -7
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs
  31. +66
    -6
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs
  32. +12
    -8
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs
  33. +24
    -8
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs
  34. +29
    -6
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs
  35. +26
    -0
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE0.cs
  36. +69
    -0
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs
  37. +26
    -0
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE2.cs
  38. +25
    -0
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE3.cs
  39. +25
    -0
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE4.cs
  40. +8
    -10
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs
  41. +9
    -8
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs
  42. +7
    -8
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs
  43. +10
    -11
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs
  44. +10
    -17
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs
  45. +17
    -16
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs
  46. +40
    -25
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs
  47. +21
    -14
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs
  48. +51
    -43
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs
  49. +62
    -53
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs
  50. +74
    -63
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs
  51. +59
    -60
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs
  52. +30
    -31
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs
  53. +23
    -25
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs
  54. +24
    -25
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs
  55. +50
    -51
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs
  56. +2
    -20
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x82.cs
  57. +2
    -16
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x83.cs
  58. +2
    -17
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x84.cs
  59. +2
    -18
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC2.cs
  60. +2
    -18
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC3.cs
  61. +2
    -17
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC4.cs
  62. +3
    -18
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE0.cs
  63. +2
    -17
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE1.cs
  64. +2
    -18
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE2.cs
  65. +1
    -18
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs
  66. +2
    -17
      src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE4.cs
  67. +52
    -0
      src/JT808.Protocol/MessageBody/JT808_0x0700.cs
  68. +12
    -3
      src/JT808.Protocol/MessageBody/JT808_0x8700.cs
  69. +48
    -0
      src/JT808.Protocol/MessageBody/JT808_0x8701.cs
  70. +1
    -1
      src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs

+ 1
- 0
src/JT808.Protocol.Test/JT808.Protocol.Test.csproj Целия файл

@@ -48,6 +48,7 @@
<Compile Include="MessageBody\JT808_0x0303Test.cs" />
<Compile Include="MessageBody\JT808_0x0500Test.cs" />
<Compile Include="MessageBody\JT808_0x0701BodiesImpl\JT808_0x0701TestBodiesImpl.cs" />
<Compile Include="MessageBody\JT808_0x0700Test.cs" />
<Compile Include="MessageBody\JT808_0x0701Test.cs" />
<Compile Include="MessageBody\JT808_0x0702Test.cs" />
<Compile Include="MessageBody\JT808_0x0704Test.cs" />


+ 640
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs Целия файл

@@ -0,0 +1,640 @@
using JT808.Protocol.Extensions;
using JT808.Protocol.Interfaces;
using JT808.Protocol.Internal;
using JT808.Protocol.MessageBody;
using JT808.Protocol.MessageBody.CarDVR;
using JT808.Protocol.Test.MessageBody.JT808_0x0701BodiesImpl;
using System;
using System.Collections.Generic;
using System.Reflection;
using Xunit;
using static JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08;
using static JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09;
using static JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10;
using static JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11;

namespace JT808.Protocol.Test.MessageBody
{
public class JT808_0x0700Test
{
JT808Serializer JT808Serializer;

public JT808_0x0700Test()
{
IJT808Config jT808Config = new DefaultGlobalConfig();
JT808Serializer = new JT808Serializer(jT808Config);
}
[Fact]
public void Test_Serialize_0x00()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x00;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x00
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x00
{
ModifyNumber = 1,
StandardYear = "19"
};

var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000200190135", hex);
}

[Fact]
public void Test_Deserilize_0x00()
{
byte[] bytes = "000100557A00000200190135".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var package = value.JT808CarDVRUpPackage as JT808CarDVRUpPackage;
Assert.Equal(0x557a, package.Begin);
Assert.Equal(0, package.KeepFields);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x00;
Assert.Equal(1, body.ModifyNumber);
Assert.Equal("19", body.StandardYear);
}

[Fact]
public void Test_Serialize_0x01()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x01;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x01
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x01
{
DriverLicenseNo = "430223199007126687"
};

var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000101557A0100120034333032323331393930303731323636383732", hex);
}

[Fact]
public void Test_Deserilize_0x01()
{
byte[] bytes = "000101557A0100120034333032323331393930303731323636383732".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x01;
Assert.Equal("430223199007126687", body.DriverLicenseNo);
}
[Fact]
public void Test_Serialize_0x02()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x02;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x02
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x02
{
RealTime = Convert.ToDateTime("2020-03-23 10:10:10")
};

var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000102557A020006002003231010103B", hex);
}

[Fact]
public void Test_Deserilize_0x02()
{
byte[] bytes = "000102557A020006002003231010103B".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x02;
Assert.Equal("2020-03-23 10:10:10", body.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
}
[Fact]
public void Test_Serialize_0x03()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x03;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x03
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x03
{
FirstInstallTime = Convert.ToDateTime("2020-03-23 10:10:10"),
RealTime = Convert.ToDateTime("2020-03-22 10:10:10"),
FirstMileage = "1000",
TotalMilage = "5000"
};

var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000103557A03001400200322101010200323101010000010000000500079", hex);
}

[Fact]
public void Test_Deserilize_0x03()
{
byte[] bytes = "000103557A03001400200322101010200323101010000010000000500079".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x03;
Assert.Equal("2020-03-22 10:10:10", body.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
Assert.Equal("2020-03-23 10:10:10", body.FirstInstallTime.ToString("yyyy-MM-dd HH:mm:ss"));
Assert.Equal("1000", body.FirstMileage);
Assert.Equal("5000", body.TotalMilage);
}
[Fact]
public void Test_Serialize_0x04()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x04;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x04
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x04
{
RealTime = Convert.ToDateTime("2020-03-23 10:10:10"),
PulseCoefficient = 50
};

var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000104557A04000800200323101010003201", hex);
}

[Fact]
public void Test_Deserilize_0x04()
{
byte[] bytes = "000104557A04000800200323101010003201".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x04;
Assert.Equal("2020-03-23 10:10:10", body.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
Assert.Equal(50, body.PulseCoefficient);
}
[Fact]
public void Test_Serialize_0x05()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x05;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x05
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x05
{
VehicleNo = "粤B12345",
VehicleType = "重型货车",
Vin = "12345678912345678"
};

var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000105557A050027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B5000009", hex);
}

[Fact]
public void Test_Deserilize_0x05()
{
byte[] bytes = "000105557A050027003132333435363738393132333435363738D4C142313233343500000000D6D8D0CDBBF5B3B5000009".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x05;
Assert.Equal("粤B12345", body.VehicleNo);
Assert.Equal("重型货车", body.VehicleType);
Assert.Equal("12345678912345678", body.Vin);
}
[Fact]
public void Test_Serialize_0x06()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x06;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x06
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x06
{
FarLight = "远光灯",
Brake = "制动",
D0 = "自定义1",
D1 = "自定义2",
D2 = "自定义3",
LeftTurn = "左转向",
NearLight = "近光灯",
RealTime = Convert.ToDateTime("2020-03-23 10:10:10"),
RightTurn = "右转向",
SignalOperate = 255,
};

var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000106557A06005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000084", hex);
}

[Fact]
public void Test_Deserilize_0x06()
{
byte[] bytes = "000106557A06005700200323101010FFD7D4B6A8D2E531000000D7D4B6A8D2E532000000D7D4B6A8D2E533000000BDFCB9E2B5C600000000D4B6B9E2B5C600000000D3D2D7AACFF200000000D7F3D7AACFF200000000D6C6B6AF00000000000084".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x06;
Assert.Equal("远光灯", body.FarLight);
Assert.Equal("制动", body.Brake);
Assert.Equal("自定义1", body.D0);
Assert.Equal("自定义2", body.D1);
Assert.Equal("自定义3", body.D2);
Assert.Equal("左转向", body.LeftTurn);
Assert.Equal("近光灯", body.NearLight);
Assert.Equal("2020-03-23 10:10:10", body.RealTime.ToString("yyyy-MM-dd HH:mm:ss"));
Assert.Equal("右转向", body.RightTurn);
Assert.Equal(255, body.SignalOperate);
}
[Fact]
public void Test_Serialize_0x07()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x07;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x07
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x07
{
CertifiedProductModels = "1234567891234567",
ProductionDate = Convert.ToDateTime("2020-03-23"),
ProductionPlantCCCCertificationCode = "1234567",
ProductProductionFlowNumber = "1234",
Reversed = "1234"
};

var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000107557A0700230031323334353637313233343536373839313233343536372003233132333431323334003A", hex);
}

[Fact]
public void Test_Deserilize_0x07()
{
byte[] bytes = "000107557A0700230031323334353637313233343536373839313233343536372003233132333431323334003A".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x07;
Assert.Equal("2020-03-23", body.ProductionDate.ToString("yyyy-MM-dd"));
Assert.Equal("1234567891234567", body.CertifiedProductModels);
Assert.Equal("1234567", body.ProductionPlantCCCCertificationCode);
Assert.Equal("1234", body.ProductProductionFlowNumber);
Assert.Equal("1234", body.Reversed);
}
[Fact]
public void Test_Serialize_0x08()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x08;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x08
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x08
{
JT808_CarDVR_Up_0x08_SpeedPerMinutes = new List<JT808_CarDVR_Up_0x08_SpeedPerMinute> {
new JT808_CarDVR_Up_0x08_SpeedPerMinute{
StartTime=Convert.ToDateTime("2020-03-23"),
JT808_CarDVR_Up_0x08_SpeedPerSeconds=new List<JT808_CarDVR_Up_0x08_SpeedPerSecond>{
new JT808_CarDVR_Up_0x08_SpeedPerSecond{
AvgSpeedAfterStartTime=10,
StatusSignalAfterStartTime=20
}
}
}
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000108557A08007E002003230000000A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47", hex);
}

[Fact]
public void Test_Deserilize_0x08()
{
byte[] bytes = "000108557A08007E002003230000000A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x08;
Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x08_SpeedPerMinutes[0].StartTime.ToString("yyyy-MM-dd"));
Assert.Equal(10, body.JT808_CarDVR_Up_0x08_SpeedPerMinutes[0].JT808_CarDVR_Up_0x08_SpeedPerSeconds[0].AvgSpeedAfterStartTime);
Assert.Equal(20, body.JT808_CarDVR_Up_0x08_SpeedPerMinutes[0].JT808_CarDVR_Up_0x08_SpeedPerSeconds[0].StatusSignalAfterStartTime);
}
[Fact]
public void Test_Serialize_0x09()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x09;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x09
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x09
{
JT808_CarDVR_Up_0x09_PositionPerHours = new List<JT808_CarDVR_Up_0x09_PositionPerHour> {
new JT808_CarDVR_Up_0x09_PositionPerHour{
StartTime=Convert.ToDateTime("2020-03-23"),
JT808_CarDVR_Up_0x09_PositionPerMinutes=new List<JT808_CarDVR_Up_0x09_PositionPerMinute>{
new JT808_CarDVR_Up_0x09_PositionPerMinute{
AvgSpeedAfterStartTime=10,
GpsLat=23665544,
GpsLng=113656598,
Height=50
}
}
}
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000109557A09029A0020032300000006C6431601691B8800320AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17", hex);
}

[Fact]
public void Test_Deserilize_0x09()
{
byte[] bytes = "000109557A09029A0020032300000006C6431601691B8800320AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x09;
Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x09_PositionPerHours[0].StartTime.ToString("yyyy-MM-dd"));
Assert.Equal(10, body.JT808_CarDVR_Up_0x09_PositionPerHours[0].JT808_CarDVR_Up_0x09_PositionPerMinutes[0].AvgSpeedAfterStartTime);
Assert.Equal(23665544, body.JT808_CarDVR_Up_0x09_PositionPerHours[0].JT808_CarDVR_Up_0x09_PositionPerMinutes[0].GpsLat);
Assert.Equal(113656598, body.JT808_CarDVR_Up_0x09_PositionPerHours[0].JT808_CarDVR_Up_0x09_PositionPerMinutes[0].GpsLng);
Assert.Equal(50, body.JT808_CarDVR_Up_0x09_PositionPerHours[0].JT808_CarDVR_Up_0x09_PositionPerMinutes[0].Height);
}
[Fact]
public void Test_Serialize_0x10()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x10;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x10
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x10
{
JT808_CarDVR_Up_0x10_AccidentSuspectins = new List<JT808_CarDVR_Up_0x10_AccidentSuspectin> {
new JT808_CarDVR_Up_0x10_AccidentSuspectin{
EndTime=Convert.ToDateTime("2020-03-23"),
GpsLat=23665544,
GpsLng=113656598,
Height=50,
DriverLicenseNo="430223199009203698",
JT808_CarDVR_Up_0x09_DrivingStatuss=new List<JT808_CarDVR_Up_0x10_DrivingStatus>
{
new JT808_CarDVR_Up_0x10_DrivingStatus{
Speed=10,
StatusSignal=20
}
}
}
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000110557A1000EA002003230000003433303232333139393030393230333639380A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06C6431601691B8800329D", hex);
}

[Fact]
public void Test_Deserilize_0x10()
{
byte[] bytes = "000110557A1000EA002003230000003433303232333139393030393230333639380A14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06C6431601691B8800329D".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x10;
Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].EndTime.ToString("yyyy-MM-dd"));
Assert.Equal(23665544, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].GpsLat);
Assert.Equal(113656598, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].GpsLng);
Assert.Equal(50, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].Height);
Assert.Equal("430223199009203698", body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].DriverLicenseNo);
Assert.Equal(10, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x09_DrivingStatuss[0].Speed);
Assert.Equal(20, body.JT808_CarDVR_Up_0x10_AccidentSuspectins[0].JT808_CarDVR_Up_0x09_DrivingStatuss[0].StatusSignal);
}
[Fact]
public void Test_Serialize_0x11()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x11;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x11
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x11
{
JT808_CarDVR_Up_0x11_DriveOverTimes = new List<JT808_CarDVR_Up_0x11_DriveOverTime>{
new JT808_CarDVR_Up_0x11_DriveOverTime{
ContinueDrivingEndTime=Convert.ToDateTime("2020-03-23"),
ContinueDrivingStartTime=Convert.ToDateTime("2020-03-22"),
GpsStartLat=23665544,
GpsStartLng=113656598,
GpsEndLat=23665545,
GpsEndLng=113656599,
StartHeight=50,
EndHeight=60,
DriverLicenseNo="430223199009203698"
}
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
}

[Fact]
public void Test_Deserilize_0x11()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x11;
Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].ContinueDrivingEndTime.ToString("yyyy-MM-dd"));
Assert.Equal("2020-03-22", body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].ContinueDrivingStartTime.ToString("yyyy-MM-dd"));
Assert.Equal(23665544, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].GpsStartLat);
Assert.Equal(113656598, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].GpsStartLng);
Assert.Equal(50, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].StartHeight);
Assert.Equal(23665545, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].GpsEndLat);
Assert.Equal(113656599, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].GpsEndLng);
Assert.Equal(60, body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].EndHeight);
Assert.Equal("430223199009203698", body.JT808_CarDVR_Up_0x11_DriveOverTimes[0].DriverLicenseNo);
}
[Fact]
public void Test_Serialize_0x12()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x12;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x12
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x12
{
JT808_CarDVR_Up_0x12_DriveLogins = new List<JT808_CarDVR_Up_0x12_DriveLogin>{
new JT808_CarDVR_Up_0x12_DriveLogin{
LoginTime=Convert.ToDateTime("2020-03-23"),
LoginType=1,
DriverLicenseNo="430223199009203698"
}
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
}

[Fact]
public void Test_Deserilize_0x12()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x12;
Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x12_DriveLogins[0].LoginTime.ToString("yyyy-MM-dd"));
Assert.Equal(1, body.JT808_CarDVR_Up_0x12_DriveLogins[0].LoginType);
Assert.Equal("430223199009203698", body.JT808_CarDVR_Up_0x12_DriveLogins[0].DriverLicenseNo);
}
[Fact]
public void Test_Serialize_0x13()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x13;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x13
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x13
{
JT808_CarDVR_Up_0x13_ExternalPowerSupplys = new List<JT808_CarDVR_Up_0x13_ExternalPowerSupply>{
new JT808_CarDVR_Up_0x13_ExternalPowerSupply{
EventTime=Convert.ToDateTime("2020-03-23"),
EventType=1
}
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
}

[Fact]
public void Test_Deserilize_0x13()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x13;
Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x13_ExternalPowerSupplys[0].EventTime.ToString("yyyy-MM-dd"));
Assert.Equal(1, body.JT808_CarDVR_Up_0x13_ExternalPowerSupplys[0].EventType);
}
[Fact]
public void Test_Serialize_0x14()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x14;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x14
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x14
{
JT808_CarDVR_Up_0x14_ParameterModifys = new List<JT808_CarDVR_Up_0x14_ParameterModify>{
new JT808_CarDVR_Up_0x14_ParameterModify{
EventTime=Convert.ToDateTime("2020-03-23"),
EventType=1
}
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
}

[Fact]
public void Test_Deserilize_0x14()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x14;
Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x14_ParameterModifys[0].EventTime.ToString("yyyy-MM-dd"));
Assert.Equal(1, body.JT808_CarDVR_Up_0x14_ParameterModifys[0].EventType);
}
[Fact]
public void Test_Serialize_0x15()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x15;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x15
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x15
{
JT808_CarDVR_Up_0x15_SpeedStatusLogs = new List<JT808_CarDVR_Up_0x15_SpeedStatusLog>{
new JT808_CarDVR_Up_0x15_SpeedStatusLog{
SpeedStatusStartTime=Convert.ToDateTime("2020-03-22"),
SpeedStatusEndTime=Convert.ToDateTime("2020-03-23"),
SpeedStatus=1,
JT808_CarDVR_Up_0x15_SpeedPerSeconds=new List<JT808_CarDVR_Up_0x15_SpeedPerSecond>{
new JT808_CarDVR_Up_0x15_SpeedPerSecond{
RecordSpeed=50,
ReferenceSpeed=40
}
}
}
}
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000100557A00000300190134", hex);
}

[Fact]
public void Test_Deserilize_0x15()
{
byte[] bytes = "000100557A00000300190134".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x15;
Assert.Equal("2020-03-22", body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].SpeedStatusStartTime.ToString("yyyy-MM-dd"));
Assert.Equal("2020-03-23", body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].SpeedStatusEndTime.ToString("yyyy-MM-dd"));
Assert.Equal(1, body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].SpeedStatus);
Assert.Equal(50, body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].JT808_CarDVR_Up_0x15_SpeedPerSeconds[0].RecordSpeed);
Assert.Equal(40, body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].JT808_CarDVR_Up_0x15_SpeedPerSeconds[0].ReferenceSpeed);
}
[Fact]
public void Test_Serialize_0x82()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0x82;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0x82
};
value.JT808CarDVRUpPackage.Bodies = new JT808_CarDVR_Up_0x82();
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("000182557A82000000AD", hex);
}

[Fact]
public void Test_Deserilize_0x82()
{
byte[] bytes = "000182557A82000000AD".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x82;
}
}
}

+ 5
- 1
src/JT808.Protocol/Interfaces/GlobalConfigBase.cs Целия файл

@@ -26,6 +26,8 @@ namespace JT808.Protocol.Interfaces
JT808_0x0900_Custom_Factory = new JT808_0x0900_Custom_Factory();
JT808_0x8900_Custom_Factory = new JT808_0x8900_Custom_Factory();
JT808_0x8500_2019_Factory = new JT808_0x8500_2019_Factory();
JT808_CarDVR_Up_Factory = new JT808_CarDVR_Up_Factory();
JT808_CarDVR_Down_Factory = new JT808_CarDVR_Down_Factory();
TerminalPhoneNoLength = 12;
Trim = true;
}
@@ -48,7 +50,7 @@ namespace JT808.Protocol.Interfaces
public virtual IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; }
public IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; }
public IJT808_CarDVR_Down_Factory JT808_CarDVR_Down_Factory { get; set; }
public bool SkipCarDVRCRCCode { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public bool SkipCarDVRCRCCode { get; set; }

public virtual IJT808Config Register(params Assembly[] externalAssemblies)
{
@@ -65,6 +67,8 @@ namespace JT808.Protocol.Interfaces
JT808_0x0900_Custom_Factory.Register(easb);
JT808_0x8900_Custom_Factory.Register(easb);
JT808_0x8500_2019_Factory.Register(easb);
JT808_CarDVR_Up_Factory.Register(easb);
JT808_CarDVR_Down_Factory.Register(easb);
}
}
return this;


+ 2
- 2
src/JT808.Protocol/Interfaces/IJT808_CarDVR_Down_Factory.cs Целия файл

@@ -9,7 +9,7 @@ namespace JT808.Protocol.Interfaces
/// </summary>
public interface IJT808_CarDVR_Down_Factory : IJT808ExternalRegister
{
IDictionary<byte, JT808CarDVRDownBodies> Map { get; }
IJT808_CarDVR_Down_Factory SetMap<JT808CarDVRDownBodies>() ;
IDictionary<byte, object> Map { get; }
IJT808_CarDVR_Down_Factory SetMap<TJT808CarDVRDownBodies>() where TJT808CarDVRDownBodies : JT808CarDVRDownBodies;
}
}

+ 2
- 2
src/JT808.Protocol/Interfaces/IJT808_CarDVR_Up_Factory.cs Целия файл

@@ -9,7 +9,7 @@ namespace JT808.Protocol.Interfaces
/// </summary>
public interface IJT808_CarDVR_Up_Factory : IJT808ExternalRegister
{
IDictionary<byte, JT808CarDVRUpBodies> Map { get; }
IJT808_CarDVR_Up_Factory SetMap<JT808CarDVRUpBodies>() ;
IDictionary<byte, object> Map { get; }
IJT808_CarDVR_Up_Factory SetMap<TJT808CarDVRUpBodies>() where TJT808CarDVRUpBodies : JT808CarDVRUpBodies;
}
}

+ 55
- 0
src/JT808.Protocol/Internal/JT808_CarDVR_Down_Factory.cs Целия файл

@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace JT808.Protocol.Interfaces
{
/// <summary>
/// 记录仪工厂
/// </summary>
public class JT808_CarDVR_Down_Factory:IJT808_CarDVR_Down_Factory
{
public IDictionary<byte, object> Map { get; }

public JT808_CarDVR_Down_Factory()
{
Map = new Dictionary<byte, object>();
Register(Assembly.GetExecutingAssembly());
}
public void Register(Assembly externalAssembly)
{
var types = externalAssembly.GetTypes().Where(w => w.BaseType == typeof(JT808CarDVRDownBodies)).ToList();
foreach (var type in types)
{
var instance = Activator.CreateInstance(type);
var commandId = (byte)type.GetProperty(nameof(JT808CarDVRDownBodies.CommandId)).GetValue(instance);
if (Map.ContainsKey(commandId))
{
throw new ArgumentException($"{type.FullName} {commandId} An element with the same key already exists.");
}
else
{
Map.Add(commandId, instance);
}
}
}

public IJT808_CarDVR_Down_Factory SetMap<TJT808CarDVRDownBodies>() where TJT808CarDVRDownBodies : JT808CarDVRDownBodies
{
Type type = typeof(TJT808CarDVRDownBodies);
var instance = Activator.CreateInstance(type);
var attachInfoId = (byte)type.GetProperty(nameof(JT808CarDVRDownBodies.CommandId)).GetValue(instance);
if (Map.ContainsKey(attachInfoId))
{
throw new ArgumentException($"{type.FullName} {attachInfoId} An element with the same key already exists.");
}
else
{
Map.Add(attachInfoId, instance);
}
return this;
}
}
}

+ 55
- 0
src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs Целия файл

@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace JT808.Protocol.Interfaces
{
/// <summary>
/// 记录仪工厂
/// </summary>
public class JT808_CarDVR_Up_Factory:IJT808_CarDVR_Up_Factory
{
public IDictionary<byte, object> Map { get; }

public JT808_CarDVR_Up_Factory()
{
Map = new Dictionary<byte, object>();
Register(Assembly.GetExecutingAssembly());
}
public void Register(Assembly externalAssembly)
{
var types = externalAssembly.GetTypes().Where(w => w.BaseType == typeof(JT808CarDVRUpBodies)).ToList();
foreach (var type in types)
{
var instance = Activator.CreateInstance(type);
var commandId = (byte)type.GetProperty(nameof(JT808CarDVRUpBodies.CommandId)).GetValue(instance);
if (Map.ContainsKey(commandId))
{
throw new ArgumentException($"{type.FullName} {commandId} An element with the same key already exists.");
}
else
{
Map.Add(commandId, instance);
}
}
}

public IJT808_CarDVR_Up_Factory SetMap<TJT808CarDVRUpBodies>() where TJT808CarDVRUpBodies : JT808CarDVRUpBodies
{
Type type = typeof(TJT808CarDVRUpBodies);
var instance = Activator.CreateInstance(type);
var attachInfoId = (byte)type.GetProperty(nameof(JT808CarDVRUpBodies.CommandId)).GetValue(instance);
if (Map.ContainsKey(attachInfoId))
{
throw new ArgumentException($"{type.FullName} {attachInfoId} An element with the same key already exists.");
}
else
{
Map.Add(attachInfoId, instance);
}
return this;
}
}
}

+ 255
- 59
src/JT808.Protocol/JT808.Protocol.xml Целия файл

@@ -2633,6 +2633,16 @@
记录仪工厂
</summary>
</member>
<member name="T:JT808.Protocol.Interfaces.JT808_CarDVR_Down_Factory">
<summary>
记录仪工厂
</summary>
</member>
<member name="T:JT808.Protocol.Interfaces.JT808_CarDVR_Up_Factory">
<summary>
记录仪工厂
</summary>
</member>
<member name="P:JT808.Protocol.IJT808Config.MsgSNDistributed">
<summary>
消息流水号
@@ -3682,36 +3692,200 @@
返回:车辆信息
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x82.Vin">
<summary>
车辆识别代号
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x82.VehicleNo">
<summary>
机动车号牌号码
后 3 个字节为备用字
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x82.VehicleType">
<summary>
机动车号牌分类
后 4 个字节为备用字
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x83">
<summary>
设置记录仪初次安装日期
返回:初次安装日期
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x83.RealTime">
<summary>
实时时间
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84">
<summary>
设置状态量配置信息
返回:状态量配置信息
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.RealTime">
<summary>
实时时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.SignalOperate">
<summary>
信号字节个数
单位字节的 D7~D0(由高到低)分别对应 8 个状态信号, 1 表示有操作,0表示无操作
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.D0">
<summary>
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.NearLight">
<summary>
近光 D3
10个字节,未使用或不足时,补0
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.FarLight">
<summary>
远光 D4
10个字节,未使用或不足时,补0
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.RightTurn">
<summary>
右转向 D5
10个字节,未使用或不足时,补0
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.LeftTurn">
<summary>
左转向 D6
10个字节,未使用或不足时,补0
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x84.Brake">
<summary>
制动 D7
10个字节,未使用或不足时,补0
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC2">
<summary>
设置记录仪时间
返回:北京时间的日期、时钟
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC2.RealTime">
<summary>
实时时间
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3">
<summary>
设置记录仪脉冲系数
返回:记录仪脉冲系数
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.RealTime">
<summary>
当前时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficientHighByte">
<summary>
脉冲系数高字节
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC3.PulseCoefficientLowByte">
<summary>
仪脉冲系数低字节
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4">
<summary>
设置初始里程
返回:记录仪初次安装时车辆已行驶的总里程
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4.RealTime">
<summary>
实时时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4.FirstInstallTime">
<summary>
初次安装时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4.FirstMileage">
<summary>
初始里程
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xC4.TotalMilage">
<summary>
累计里程
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE0">
<summary>
进入或保持检定状态
返回:进入或保持检定状态
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1">
<summary>
进入里程误差测量
返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平)
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.UniqueNumber">
<summary>
记录仪唯一性编号
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.PulseCoefficient">
<summary>
脉冲系数
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.Speed">
<summary>
当前速度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.TotalMileage">
<summary>
累计里程 单位为米
单位为 0.1 千米每小时
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE1.StatusSignal">
<summary>
状态信号
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE2">
<summary>
进入脉冲系数误差测量
返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE3">
<summary>
进入实时时间误差测量
返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0xE4">
<summary>
返回正常工作状态
返回:返回正常工作状态
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x00">
<summary>
采集记录仪执行标准版本
@@ -3790,16 +3964,11 @@
当前时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x04.PulseCoefficientHighByte">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x04.PulseCoefficient">
<summary>
脉冲系数高字节
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x04.PulseCoefficientLowByte">
<summary>
仪脉冲系数低字节
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x05">
<summary>
采集车辆信息
@@ -3918,34 +4087,34 @@
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerMinute">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerMinute">
<summary>
单位分钟行驶速度记录数据块格式
1.本数据块总长度为 126 个字节,不足部分以 FFH补齐;
2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerMinute.StartTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerMinute.StartTime">
<summary>
开始时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds">
<summary>
60s钟,每秒的信息
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerSecond">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerSecond">
<summary>
开始时间之后每秒钟的平均速度和状态信号
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerSecond.AvgSpeedAfterStartTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerSecond.AvgSpeedAfterStartTime">
<summary>
开始时间之后每秒钟的平均速度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08.JT808_CarDVR_Up_0x08_SpeedPerSecond.StatusSignalAfterStartTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x08_SpeedPerSecond.StatusSignalAfterStartTime">
<summary>
开始时间之后每秒钟的状态信号
</summary>
@@ -3962,44 +4131,44 @@
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerHour">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerHour">
<summary>
指定的结束时间之前最近的每 小时的位置信息记录
1.本数据块总长度为 666 个字节,不足部分以 FFH补齐;
2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerHour.StartTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerHour.StartTime">
<summary>
开始时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes">
<summary>
60s钟,每秒的信息
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute">
<summary>
开始时间之后每分钟的平均速度和位置信息
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute.GpsLng">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute.GpsLng">
<summary>
经度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute.GpsLat">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute.GpsLat">
<summary>
纬度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute.Height">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute.Height">
<summary>
高度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09.JT808_CarDVR_Up_0x09_PositionPerMinute.AvgSpeedAfterStartTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x09_PositionPerMinute.AvgSpeedAfterStartTime">
<summary>
开始时间之后每分钟的平均速度
</summary>
@@ -4016,54 +4185,54 @@
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin">
<summary>
指定的结束时间之前最近的每条事故疑点记录
1.本数据块总长度为 234 个字节;
2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.EndTime">
<summary>
行驶结束时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.DriverLicenseNo">
<summary>
机动车驾驶证号码
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss">
<summary>
每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng">
<summary>
经度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat">
<summary>
纬度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_AccidentSuspectin.Height">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_AccidentSuspectin.Height">
<summary>
高度
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_DrivingStatus">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_DrivingStatus">
<summary>
行驶结束时间前的状态
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_DrivingStatus.Speed">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_DrivingStatus.Speed">
<summary>
速度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10.JT808_CarDVR_Up_0x10_DrivingStatus.StatusSignal">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x10_DrivingStatus.StatusSignal">
<summary>
状态信号
</summary>
@@ -4079,52 +4248,52 @@
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime">
<summary>
单位超时驾驶记录数据块
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo">
<summary>
机动车驾驶证号码 18位
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime">
<summary>
连续驾驶开始时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime">
<summary>
连续驾驶结束时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng">
<summary>
经度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat">
<summary>
纬度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.StartHeight">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.StartHeight">
<summary>
高度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng">
<summary>
经度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat">
<summary>
纬度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11.JT808_CarDVR_Up_0x11_DriveOverTime.EndHeight">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x11_DriveOverTime.EndHeight">
<summary>
高度
</summary>
@@ -4140,22 +4309,22 @@
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12.JT808_CarDVR_Up_0x12_DriveLogin">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12_DriveLogin">
<summary>
单位驾驶人身份记录数据块格式
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12.JT808_CarDVR_Up_0x12_DriveLogin.LoginTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12_DriveLogin.LoginTime">
<summary>
登入登出时间发生时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12.JT808_CarDVR_Up_0x12_DriveLogin.DriverLicenseNo">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12_DriveLogin.DriverLicenseNo">
<summary>
机动车驾驶证号码 18位
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12.JT808_CarDVR_Up_0x12_DriveLogin.LoginType">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x12_DriveLogin.LoginType">
<summary>
事件类型
</summary>
@@ -4171,17 +4340,17 @@
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13.JT808_CarDVR_Up_0x13_ExternalPowerSupply">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13_ExternalPowerSupply">
<summary>
单位记录仪外部供电记录数据块格式
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13.JT808_CarDVR_Up_0x13_ExternalPowerSupply.EventTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13_ExternalPowerSupply.EventTime">
<summary>
事件发生时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13.JT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x13_ExternalPowerSupply.EventType">
<summary>
事件类型
</summary>
@@ -4197,17 +4366,17 @@
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14.JT808_CarDVR_Up_0x14_ParameterModify">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14_ParameterModify">
<summary>
单位记录仪外部供电记录数据块格式
单位参数修改记录数据块格式
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14.JT808_CarDVR_Up_0x14_ParameterModify.EventTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14_ParameterModify.EventTime">
<summary>
事件发生时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14.JT808_CarDVR_Up_0x14_ParameterModify.EventType">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x14_ParameterModify.EventType">
<summary>
事件类型
</summary>
@@ -4223,42 +4392,42 @@
请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog">
<summary>
单位速度状态日志数据块格式
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatus">
<summary>
记录仪的速度状态
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusStartTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusStartTime">
<summary>
速度状态判定的开始时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusEndTime">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog.SpeedStatusEndTime">
<summary>
速度状态判定的结束时间
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds">
<summary>
60组
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedPerSecond">
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedPerSecond">
<summary>
每秒速度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedPerSecond.RecordSpeed">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedPerSecond.RecordSpeed">
<summary>
记录速度
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15.JT808_CarDVR_Up_0x15_SpeedPerSecond.ReferenceSpeed">
<member name="P:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0x15_SpeedPerSecond.ReferenceSpeed">
<summary>
参考速度
</summary>
@@ -4303,6 +4472,7 @@
<summary>
进入或保持检定状态
返回:进入或保持检定状态
在检定状态下,检定装置以不大于2秒的时间间隔发送包含本命令字的命令帧,记录仪在6秒内未收到该命令帧,则自动返回正常工作状态。
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Up_0xE1">
@@ -4968,6 +5138,22 @@
查询类型为4
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.JT808_0x0700">
<summary>
行驶记录数据上传
0x0700
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.JT808_0x0700.ReplyMsgNum">
<summary>
应答流水号
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.JT808_0x0700.CommandId">
<summary>
命令字
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.JT808_0x0701">
<summary>
电子运单上报
@@ -7465,6 +7651,16 @@
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.JT808_0x8701">
<summary>
行驶记录参数下传命令
</summary>
</member>
<member name="P:JT808.Protocol.MessageBody.JT808_0x8701.CommandId">
<summary>
</summary>
</member>
<member name="T:JT808.Protocol.MessageBody.JT808_0x8702">
<summary>
上报驾驶员身份信息请求


+ 0
- 2
src/JT808.Protocol/JT808CarDVRDownBodies.cs Целия файл

@@ -22,7 +22,5 @@ namespace JT808.Protocol
public virtual bool SkipSerialization { get; set; } = false;

public abstract string Description { get; }
public abstract JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config);
public abstract void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config);
}
}

+ 53
- 2
src/JT808.Protocol/JT808CarDVRDownPackage.cs Целия файл

@@ -1,10 +1,15 @@
using System;
using JT808.Protocol.Enums;
using JT808.Protocol.Exceptions;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.Protocol
{
public class JT808CarDVRDownPackage
public class JT808CarDVRDownPackage : IJT808MessagePackFormatter<JT808CarDVRDownPackage>
{
public const ushort BeginFlag = 0x557A;
/// <summary>
@@ -31,5 +36,51 @@ namespace JT808.Protocol
/// 校验字
/// </summary>
public byte CheckCode { get; set; }

public void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownPackage value, IJT808Config config)
{
var currentPosition = writer.GetCurrentPosition();
writer.WriteUInt16(value.Begin);
writer.WriteByte(value.CommandId);
writer.Skip(2, out var datalengthPosition);
writer.WriteByte(value.KeepFields);
if (config.JT808_CarDVR_Down_Factory.Map.TryGetValue(value.CommandId, out var instance))
{
if (!value.Bodies.SkipSerialization)
{
//4.2.处理消息体
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(instance, ref writer, value.Bodies, config);
}
}
writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() -2-1- datalengthPosition), datalengthPosition);//此处-2:减去数据长度字段2位,-1:减去保留字长度
writer.WriteCarDVRCheckCode(currentPosition);
}

public JT808CarDVRDownPackage Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808CarDVRDownPackage value = new JT808CarDVRDownPackage();
int currentPosition = reader.ReaderCount;
value.Begin = reader.ReadUInt16();
value.CommandId = reader.ReadByte();
value.DataLength = reader.ReadUInt16();
value.KeepFields = reader.ReadByte();
if (value.DataLength > 0)
{
if (config.JT808_CarDVR_Down_Factory.Map.TryGetValue(value.CommandId, out var instance))
{
//4.2.处理消息体
dynamic attachImpl = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config);
value.Bodies = attachImpl;
}
}
var carDVRCheckCode = reader.ReadCarDVRCheckCode(currentPosition);
if (!config.SkipCarDVRCRCCode)
{
if (carDVRCheckCode.RealXorCheckCode != carDVRCheckCode.CalculateXorCheckCode)
throw new JT808Exception(JT808ErrorCode.CarDVRCheckCodeNotEqual, $"{reader.RealCheckXorCode}!={reader.CalculateCheckXorCode}");
}
value.CheckCode = reader.ReadByte();
return value;
}
}
}

+ 0
- 2
src/JT808.Protocol/JT808CarDVRUpBodies.cs Целия файл

@@ -22,7 +22,5 @@ namespace JT808.Protocol
public virtual bool SkipSerialization { get; set; } = false;

public abstract string Description { get; }
public abstract JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config);
public abstract void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies value, IJT808Config config);
}
}

+ 6
- 4
src/JT808.Protocol/JT808CarDVRUpPackage.cs Целия файл

@@ -1,5 +1,6 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Exceptions;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
@@ -59,7 +60,8 @@ namespace JT808.Protocol
if (config.JT808_CarDVR_Up_Factory.Map.TryGetValue(value.CommandId, out var instance))
{
//4.2.处理消息体
value.Bodies = instance.Deserialize(ref reader, config);
dynamic attachImpl = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config);
value.Bodies = attachImpl;
}
}
var carDVRCheckCode = reader.ReadCarDVRCheckCode(currentPosition);
@@ -81,13 +83,13 @@ namespace JT808.Protocol
writer.WriteByte(value.KeepFields);
if (config.JT808_CarDVR_Up_Factory.Map.TryGetValue(value.CommandId, out var instance))
{
if (!instance.SkipSerialization)
if (!value.Bodies.SkipSerialization)
{
//4.2.处理消息体
instance.Serialize(ref writer, value.Bodies, config);
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(instance, ref writer, value.Bodies, config);
}
}
writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() - datalengthPosition + 1), datalengthPosition);
writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() -2-1- datalengthPosition), datalengthPosition);//此处-2:减去数据长度字段2位,-1:减去保留字长度
writer.WriteCarDVRCheckCode(currentPosition);
}
}


+ 0
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x00.cs Целия файл

@@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
public override string Description => "采集记录仪执行标准版本";

public override bool SkipSerialization { get; set; } = true;

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config)
{
throw new NotImplementedException();
}
}
}

+ 2
- 12
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x01.cs Целия файл

@@ -16,20 +16,10 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// </summary>
public class JT808_CarDVR_Down_0x01 : JT808CarDVRDownBodies
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的驾驶人身份记录.ToByteValue();
public override byte CommandId => JT808CarDVRCommandID.采集当前驾驶人信息.ToByteValue();
public override string Description => "采集机动车驾驶证号码";

public override bool SkipSerialization { get; set; } = true;

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config)
{
throw new NotImplementedException();
}
}
}

+ 0
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x02.cs Целия файл

@@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
public override string Description => "实时时间";

public override bool SkipSerialization { get; set; } = true;

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config)
{
throw new NotImplementedException();
}
}
}

+ 0
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x03.cs Целия файл

@@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
public override string Description => "实时时间、安装时的初始里程及安装后的累计行驶里程";

public override bool SkipSerialization { get; set; } = true;

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config)
{
throw new NotImplementedException();
}
}
}

+ 0
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x04.cs Целия файл

@@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
public override string Description => "实时时间及设定的脉冲系数";

public override bool SkipSerialization { get; set; } = true;

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config)
{
throw new NotImplementedException();
}
}
}

+ 0
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x05.cs Целия файл

@@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
public override string Description => "车辆识别代号、机动车号牌号码和机动车号牌分类";

public override bool SkipSerialization { get; set; } = true;

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config)
{
throw new NotImplementedException();
}
}
}

+ 0
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x06.cs Целия файл

@@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
public override string Description => "状态信号配置信息";

public override bool SkipSerialization { get; set; } = true;

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config)
{
throw new NotImplementedException();
}
}
}

+ 0
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x07.cs Целия файл

@@ -21,15 +21,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
public override string Description => "唯一性编号及初次安装日期";

public override bool SkipSerialization { get; set; } = true;

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies value, IJT808Config config)
{
throw new NotImplementedException();
}
}
}

+ 9
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x08.cs Целия файл

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

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x08 value, IJT808Config config)
{
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}

public JT808_CarDVR_Down_0x08 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x08 value = new JT808_CarDVR_Down_0x08();
value.StartTime = reader.ReadDateTime6();
@@ -40,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config)
{
JT808_CarDVR_Down_0x08 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x08;
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}
}
}

+ 9
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x09.cs Целия файл

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

@@ -33,7 +33,14 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// </summary>
public ushort Count { get; set; }

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x09 value, IJT808Config config)
{
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}

public JT808_CarDVR_Down_0x09 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x09 value = new JT808_CarDVR_Down_0x09();
value.StartTime = reader.ReadDateTime6();
@@ -41,13 +48,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config)
{
JT808_CarDVR_Down_0x09 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x09;
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}
}
}

+ 9
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x10.cs Целия файл

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

@@ -33,7 +33,14 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// </summary>
public ushort Count { get; set; }

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x10 value, IJT808Config config)
{
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}

public JT808_CarDVR_Down_0x10 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x10 value = new JT808_CarDVR_Down_0x10();
value.StartTime = reader.ReadDateTime6();
@@ -41,13 +48,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config)
{
JT808_CarDVR_Down_0x10 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x10;
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}
}
}

+ 9
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x11.cs Целия файл

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

@@ -32,7 +32,14 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// </summary>
public ushort Count { get; set; }

public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x11 value, IJT808Config config)
{
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}

public JT808_CarDVR_Down_0x11 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x11 value = new JT808_CarDVR_Down_0x11();
value.StartTime = reader.ReadDateTime6();
@@ -40,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config)
{
JT808_CarDVR_Down_0x11 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x11;
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}
}
}

+ 10
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x12.cs Целия файл

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

@@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 最大单位数据块个数
/// </summary>
public ushort Count { get; set; }
public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x12 value, IJT808Config config)
{
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}

public JT808_CarDVR_Down_0x12 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x12 value = new JT808_CarDVR_Down_0x12();
value.StartTime = reader.ReadDateTime6();
@@ -39,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config)
{
JT808_CarDVR_Down_0x12 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x12;
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}
}
}

+ 10
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x13.cs Целия файл

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

@@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 最大单位数据块个数
/// </summary>
public ushort Count { get; set; }
public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x13 value, IJT808Config config)
{
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}

public JT808_CarDVR_Down_0x13 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x13 value = new JT808_CarDVR_Down_0x13();
value.StartTime = reader.ReadDateTime6();
@@ -39,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config)
{
JT808_CarDVR_Down_0x13 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x13;
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}
}
}

+ 10
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x14.cs Целия файл

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

@@ -31,7 +31,15 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 最大单位数据块个数
/// </summary>
public ushort Count { get; set; }
public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x14 value, IJT808Config config)
{
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}

public JT808_CarDVR_Down_0x14 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x14 value = new JT808_CarDVR_Down_0x14();
value.StartTime = reader.ReadDateTime6();
@@ -39,13 +47,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.Count = reader.ReadUInt16();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config)
{
JT808_CarDVR_Down_0x14 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x14;
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}
}
}

+ 10
- 11
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x15.cs Целия файл

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

@@ -31,22 +31,21 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 最大单位数据块个数
/// </summary>
public ushort Count { get; set; }
public override JT808CarDVRDownBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x15 value = new JT808_CarDVR_Down_0x15();
value.StartTime = reader.ReadDateTime6();
value.EndTime = reader.ReadDateTime6();
value.Count = reader.ReadUInt16();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownBodies jT808CarDVRDownBodies, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x15 value, IJT808Config config)
{
JT808_CarDVR_Down_0x15 value = jT808CarDVRDownBodies as JT808_CarDVR_Down_0x15;
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt16(value.Count);
}

public JT808_CarDVR_Down_0x15 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0x15 value = new JT808_CarDVR_Down_0x15();
value.StartTime = reader.ReadDateTime6();
value.EndTime = reader.ReadDateTime6();
value.Count = reader.ReadUInt16();
return value;
}
}
}

+ 29
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x82.cs Целия файл

@@ -15,10 +15,23 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置车辆信息
/// 返回:车辆信息
/// </summary>
public class JT808_CarDVR_Down_0x82 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Down_0x82 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x82>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.设置车辆信息.ToByteValue();

/// <summary>
/// 车辆识别代号
/// </summary>
public string Vin { get; set; }
/// <summary>
/// 机动车号牌号码
/// 后 3 个字节为备用字
/// </summary>
public string VehicleNo { get; set; }
/// <summary>
/// 机动车号牌分类
/// 后 4 个字节为备用字
/// </summary>
public string VehicleType { get; set; }
public override string Description => "车辆信息";

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
@@ -26,18 +39,24 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x82 value, IJT808Config config)
{
JT808_CarDVR_Up_0x82 value = new JT808_CarDVR_Up_0x82();

return value;
writer.WriteASCII(value.Vin.PadRight(17, '0'));
writer.WriteASCII(value.VehicleNo.PadRight(9, '0'));
writer.Skip(3, out var reversed1);
writer.WriteString(value.VehicleType.PadRight(6, '0'));
writer.Skip(4, out var reversed2);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Down_0x82 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x82 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x82;

JT808_CarDVR_Down_0x82 value = new JT808_CarDVR_Down_0x82();
value.Vin = reader.ReadASCII(17);
value.VehicleNo = reader.ReadASCII(9);
reader.Skip(3);
value.VehicleType = reader.ReadString(6);
reader.Skip(4);
return value;
}

}
}

+ 11
- 7
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x83.cs Целия файл

@@ -15,10 +15,13 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置记录仪初次安装日期
/// 返回:初次安装日期
/// </summary>
public class JT808_CarDVR_Down_0x83 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Down_0x83 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x83>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.设置记录仪初次安装日期.ToByteValue();

/// <summary>
/// 实时时间
/// </summary>
public DateTime RealTime { get; set; }
public override string Description => "初次安装日期";

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
@@ -26,15 +29,16 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x83 value, IJT808Config config)
{
JT808_CarDVR_Up_0x83 value = new JT808_CarDVR_Up_0x83();
return value;
writer.WriteDateTime6(value.RealTime);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Down_0x83 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x83 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x83;
JT808_CarDVR_Down_0x83 value = new JT808_CarDVR_Down_0x83();
value.RealTime = reader.ReadDateTime6();
return value;
}
}
}

+ 66
- 6
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0x84.cs Целия файл

@@ -15,10 +15,51 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置状态量配置信息
/// 返回:状态量配置信息
/// </summary>
public class JT808_CarDVR_Down_0x84 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Down_0x84 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0x84>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.设置状态量配置信息.ToByteValue();
/// <summary>
/// 实时时间
/// </summary>
public DateTime RealTime { get; set; }
/// <summary>
/// 信号字节个数
/// 单位字节的 D7~D0(由高到低)分别对应 8 个状态信号, 1 表示有操作,0表示无操作
/// </summary>
public byte SignalOperate { get; set; }
/// <summary>
///
/// </summary>
public string D0 { get; set; }

public string D1 { get; set; }

public string D2 { get; set; }
/// <summary>
/// 近光 D3
/// 10个字节,未使用或不足时,补0
/// </summary>
public string NearLight { get; set; }
/// <summary>
/// 远光 D4
/// 10个字节,未使用或不足时,补0
/// </summary>
public string FarLight { get; set; }
/// <summary>
/// 右转向 D5
/// 10个字节,未使用或不足时,补0
/// </summary>
public string RightTurn { get; set; }
/// <summary>
/// 左转向 D6
/// 10个字节,未使用或不足时,补0
/// </summary>
public string LeftTurn { get; set; }
/// <summary>
/// 制动 D7
/// 10个字节,未使用或不足时,补0
/// </summary>
public string Brake { get; set; }
public override string Description => "状态量配置信息";

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
@@ -26,15 +67,34 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0x84 value, IJT808Config config)
{
JT808_CarDVR_Up_0x84 value = new JT808_CarDVR_Up_0x84();
return value;
writer.WriteDateTime6(value.RealTime);
writer.WriteByte(value.SignalOperate);
writer.WriteASCII(value.D0.PadRight(0));
writer.WriteASCII(value.D1.PadRight(0));
writer.WriteASCII(value.D2.PadRight(0));
writer.WriteASCII(value.NearLight.PadRight(0));
writer.WriteASCII(value.FarLight.PadRight(0));
writer.WriteASCII(value.RightTurn.PadRight(0));
writer.WriteASCII(value.LeftTurn.PadRight(0));
writer.WriteASCII(value.Brake.PadRight(0));
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Down_0x84 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x84 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x84;
JT808_CarDVR_Down_0x84 value = new JT808_CarDVR_Down_0x84();
value.RealTime = reader.ReadDateTime6();
value.SignalOperate = reader.ReadByte();
value.D0 = reader.ReadASCII(10);
value.D1 = reader.ReadASCII(10);
value.D2 = reader.ReadASCII(10);
value.NearLight = reader.ReadASCII(10);
value.FarLight = reader.ReadASCII(10);
value.RightTurn = reader.ReadASCII(10);
value.LeftTurn = reader.ReadASCII(10);
value.Brake = reader.ReadASCII(10);
return value;
}
}
}

+ 12
- 8
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC2.cs Целия файл

@@ -15,10 +15,13 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置记录仪时间
/// 返回:北京时间的日期、时钟
/// </summary>
public class JT808_CarDVR_Down_0xC2 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Down_0xC2 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0xC2>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.设置记录仪时间.ToByteValue();

/// <summary>
/// 实时时间
/// </summary>
public DateTime RealTime { get; set; }
public override string Description => "北京时间的日期、时钟";

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
@@ -26,16 +29,17 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC2 value, IJT808Config config)
{
JT808_CarDVR_Up_0xC2 value = new JT808_CarDVR_Up_0xC2();
return value;
writer.WriteDateTime6(value.RealTime);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Down_0xC2 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xC2 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC2;

JT808_CarDVR_Down_0xC2 value = new JT808_CarDVR_Down_0xC2();
value.RealTime = reader.ReadDateTime6();
return value;
}
}
}

+ 24
- 8
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC3.cs Целия файл

@@ -15,10 +15,21 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置记录仪脉冲系数
/// 返回:记录仪脉冲系数
/// </summary>
public class JT808_CarDVR_Down_0xC3 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Down_0xC3 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0xC3>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.设置记录仪脉冲系数.ToByteValue();

/// <summary>
/// 当前时间
/// </summary>
public DateTime RealTime { get; set; }
/// <summary>
/// 脉冲系数高字节
/// </summary>
public byte PulseCoefficientHighByte { get; set; }
/// <summary>
/// 仪脉冲系数低字节
/// </summary>
public byte PulseCoefficientLowByte { get; set; }
public override string Description => "记录仪脉冲系数";

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
@@ -26,16 +37,21 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC3 value, IJT808Config config)
{
JT808_CarDVR_Up_0xC3 value = new JT808_CarDVR_Up_0xC3();
return value;
writer.WriteDateTime6(value.RealTime);
writer.WriteByte(value.PulseCoefficientHighByte);
writer.WriteByte(value.PulseCoefficientLowByte);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Down_0xC3 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xC3 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC3;

JT808_CarDVR_Down_0xC3 value = new JT808_CarDVR_Down_0xC3();
value.RealTime = reader.ReadDateTime6();
value.PulseCoefficientHighByte = reader.ReadByte();
value.PulseCoefficientLowByte = reader.ReadByte();
return value;
}
}
}

+ 29
- 6
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xC4.cs Целия файл

@@ -15,9 +15,25 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置初始里程
/// 返回:记录仪初次安装时车辆已行驶的总里程
/// </summary>
public class JT808_CarDVR_Down_0xC4 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Down_0xC4 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0xC4>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.设置初始里程.ToByteValue();
/// <summary>
/// 实时时间
/// </summary>
public DateTime RealTime { get; set; }
/// <summary>
/// 初次安装时间
/// </summary>
public DateTime FirstInstallTime { get; set; }
/// <summary>
/// 初始里程
/// </summary>
public string FirstMileage { get; set; }
/// <summary>
/// 累计里程
/// </summary>
public string TotalMilage { get; set; }
public override string Description => "车辆识别代号、机动车号牌号码和机动车号牌分类";

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
@@ -25,15 +41,22 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xC4 value, IJT808Config config)
{
JT808_CarDVR_Up_0xC4 value = new JT808_CarDVR_Up_0xC4();
return value;
writer.WriteDateTime6(value.RealTime);
writer.WriteDateTime6(value.FirstInstallTime);
writer.WriteBCD(value.FirstMileage, 8);
writer.WriteBCD(value.TotalMilage, 8);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Down_0xC4 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xC4 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC4;
JT808_CarDVR_Down_0xC4 value = new JT808_CarDVR_Down_0xC4();
value.RealTime = reader.ReadDateTime6();
value.FirstInstallTime = reader.ReadDateTime6();
value.FirstMileage = reader.ReadBCD(8);
value.TotalMilage = reader.ReadBCD(8);
return value;
}
}
}

+ 26
- 0
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE0.cs Целия файл

@@ -0,0 +1,26 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace JT808.Protocol.MessageBody.CarDVR
{
/// <summary>
/// 进入或保持检定状态
/// 返回:进入或保持检定状态
/// </summary>
public class JT808_CarDVR_Down_0xE0 : JT808CarDVRDownBodies
{
public override byte CommandId => JT808CarDVRCommandID.进入或保持检定状态.ToByteValue();

public override string Description => "进入或保持检定状态";
public override bool SkipSerialization { get; set; } = true;

}
}

+ 69
- 0
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE1.cs Целия файл

@@ -0,0 +1,69 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace JT808.Protocol.MessageBody.CarDVR
{
/// <summary>
/// 进入里程误差测量
/// 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平)
/// </summary>
public class JT808_CarDVR_Down_0xE1 : JT808CarDVRDownBodies, IJT808MessagePackFormatter<JT808_CarDVR_Down_0xE1>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.进入里程误差测量.ToByteValue();
/// <summary>
/// 记录仪唯一性编号
/// </summary>
public string UniqueNumber { get; set; }
/// <summary>
/// 脉冲系数
/// </summary>
public ushort PulseCoefficient { get; set; }
/// <summary>
/// 当前速度
/// </summary>
public ushort Speed { get; set; }
/// <summary>
/// 累计里程 单位为米
/// 单位为 0.1 千米每小时
/// </summary>
public uint TotalMileage { get; set; }
/// <summary>
/// 状态信号
/// </summary>
public byte StatusSignal { get; set; }
public override string Description => "通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平)";

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

}

public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Down_0xE1 value, IJT808Config config)
{
writer.WriteASCII(value.UniqueNumber.PadRight(35, '0'));
writer.WriteUInt16(value.PulseCoefficient);
writer.WriteUInt16(value.Speed);
writer.WriteUInt32(value.TotalMileage);
writer.WriteByte(value.StatusSignal);
}

public JT808_CarDVR_Down_0xE1 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Down_0xE1 value = new JT808_CarDVR_Down_0xE1();
value.UniqueNumber = reader.ReadASCII(35);
value.PulseCoefficient = reader.ReadUInt16();
value.Speed = reader.ReadUInt16();
value.TotalMileage = reader.ReadUInt32();
value.StatusSignal = reader.ReadByte();
return value;
}
}
}

+ 26
- 0
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE2.cs Целия файл

@@ -0,0 +1,26 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace JT808.Protocol.MessageBody.CarDVR
{
/// <summary>
/// 进入脉冲系数误差测量
/// 返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平)
/// </summary>
public class JT808_CarDVR_Down_0xE2 : JT808CarDVRDownBodies
{
public override byte CommandId => JT808CarDVRCommandID.进入脉冲系数误差测量.ToByteValue();

public override string Description => "通过 DB9 的 7 脚输出车速传感器信号(TTL 电平)";

public override bool SkipSerialization { get; set; } = true;
}
}

+ 25
- 0
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE3.cs Целия файл

@@ -0,0 +1,25 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace JT808.Protocol.MessageBody.CarDVR
{
/// <summary>
/// 进入实时时间误差测量
/// 返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平)
/// </summary>
public class JT808_CarDVR_Down_0xE3 : JT808CarDVRDownBodies
{
public override byte CommandId => JT808CarDVRCommandID.进入实时时间误差测量.ToByteValue();

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

+ 25
- 0
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Down_0xE4.cs Целия файл

@@ -0,0 +1,25 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace JT808.Protocol.MessageBody.CarDVR
{
/// <summary>
/// 返回正常工作状态
/// 返回:返回正常工作状态
/// </summary>
public class JT808_CarDVR_Down_0xE4 : JT808CarDVRDownBodies
{
public override byte CommandId => JT808CarDVRCommandID.返回正常工作状态.ToByteValue();
public override string Description => "返回正常工作状态";

public override bool SkipSerialization { get; set; } = true;
}
}

+ 8
- 10
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x00.cs Целия файл

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集记录仪执行标准版本
/// 返回:记录仪执行标准的年号及修改单号
/// </summary>
public class JT808_CarDVR_Up_0x00 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x00 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x00>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集记录仪执行标准版本.ToByteValue();
/// <summary>
@@ -35,20 +35,18 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x00 value, IJT808Config config)
{
writer.WriteBCD(value.StandardYear, 2);
writer.WriteByte(value.ModifyNumber);
}

public JT808_CarDVR_Up_0x00 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x00 value = new JT808_CarDVR_Up_0x00();
value.StandardYear = reader.ReadBCD(2);
value.ModifyNumber = reader.ReadByte();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x00 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x00;
writer.WriteBCD(value.StandardYear, 2);
writer.WriteByte(value.ModifyNumber);
}

}
}

+ 9
- 8
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x01.cs Целия файл

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 机动车驾驶证号码
/// 返回:当前驾驶人的机动车驾驶证号码
/// </summary>
public class JT808_CarDVR_Up_0x01 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x01 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x01>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集当前驾驶人信息.ToByteValue();
/// <summary>
@@ -30,17 +30,18 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x01 value, IJT808Config config)
{
JT808_CarDVR_Up_0x01 value = new JT808_CarDVR_Up_0x01();
value.DriverLicenseNo = reader.ReadASCII(18);
return value;
var currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(value.DriverLicenseNo);
writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Up_0x01 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x01 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x01;
writer.WriteASCII(value.DriverLicenseNo.PadRight(18,'0'));
JT808_CarDVR_Up_0x01 value = new JT808_CarDVR_Up_0x01();
value.DriverLicenseNo = reader.ReadASCII(18);
return value;
}
}
}

+ 7
- 8
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x02.cs Целия файл

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集记录仪实时时间
/// 返回:实时时间
/// </summary>
public class JT808_CarDVR_Up_0x02 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x02 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x02>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集记录仪实时时间.ToByteValue();
/// <summary>
@@ -29,17 +29,16 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x02 value, IJT808Config config)
{
JT808_CarDVR_Up_0x02 value = new JT808_CarDVR_Up_0x02();
value.RealTime = reader.ReadDateTime6();
return value;
writer.WriteDateTime6(value.RealTime);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Up_0x02 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x02 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x02;
writer.WriteDateTime6(value.RealTime);
JT808_CarDVR_Up_0x02 value = new JT808_CarDVR_Up_0x02();
value.RealTime = reader.ReadDateTime6();
return value;
}
}
}

+ 10
- 11
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x03.cs Целия файл

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集累计行驶里程
/// 返回:实时时间、安装时的初始里程及安装后的累计行驶里程
/// </summary>
public class JT808_CarDVR_Up_0x03 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x03 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x03>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集累计行驶里程.ToByteValue();
/// <summary>
@@ -41,7 +41,15 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x03 value, IJT808Config config)
{
writer.WriteDateTime6(value.RealTime);
writer.WriteDateTime6(value.FirstInstallTime);
writer.WriteBCD(value.FirstMileage, 8);
writer.WriteBCD(value.TotalMilage, 8);
}

public JT808_CarDVR_Up_0x03 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x03 value = new JT808_CarDVR_Up_0x03();
value.RealTime = reader.ReadDateTime6();
@@ -50,14 +58,5 @@ namespace JT808.Protocol.MessageBody.CarDVR
value.TotalMilage = reader.ReadBCD(8);
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x03 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x03;
writer.WriteDateTime6(value.RealTime);
writer.WriteDateTime6(value.FirstInstallTime);
writer.WriteBCD(value.FirstMileage, 8);
writer.WriteBCD(value.TotalMilage, 8);
}
}
}

+ 10
- 17
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x04.cs Целия файл

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集记录仪脉冲系数
/// 返回:实时时间及设定的脉冲系数
/// </summary>
public class JT808_CarDVR_Up_0x04 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x04 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x04>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集记录仪脉冲系数.ToByteValue();
/// <summary>
@@ -25,11 +25,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// <summary>
/// 脉冲系数高字节
/// </summary>
public byte PulseCoefficientHighByte { get; set; }
/// <summary>
/// 仪脉冲系数低字节
/// </summary>
public byte PulseCoefficientLowByte { get; set; }
public ushort PulseCoefficient { get; set; }

public override string Description => "实时时间及设定的脉冲系数";

@@ -38,21 +34,18 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x04 value, IJT808Config config)
{
JT808_CarDVR_Up_0x04 value = new JT808_CarDVR_Up_0x04();
value.RealTime= reader.ReadDateTime6();
value.PulseCoefficientHighByte = reader.ReadByte();
value.PulseCoefficientLowByte = reader.ReadByte();
return value;
writer.WriteDateTime6(value.RealTime);
writer.WriteUInt16(value.PulseCoefficient);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Up_0x04 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x04 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x04;
writer.WriteDateTime6(value.RealTime);
writer.WriteByte(value.PulseCoefficientHighByte);
writer.WriteByte(value.PulseCoefficientLowByte);
JT808_CarDVR_Up_0x04 value = new JT808_CarDVR_Up_0x04();
value.RealTime = reader.ReadDateTime6();
value.PulseCoefficient = reader.ReadUInt16();
return value;
}
}
}

+ 17
- 16
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x05.cs Целия файл

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集车辆信息
/// 返回:车辆识别代号、机动车号牌号码和机动车号牌分类
/// </summary>
public class JT808_CarDVR_Up_0x05 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x05 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x05>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集车辆信息.ToByteValue();
/// <summary>
@@ -39,25 +39,26 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x05 value, IJT808Config config)
{
JT808_CarDVR_Up_0x05 value = new JT808_CarDVR_Up_0x05();
value.Vin= reader.ReadASCII(17);
value.VehicleNo = reader.ReadASCII(9);
reader.Skip(3);
value.VehicleType = reader.ReadString(6);
reader.Skip(4);
return value;
var currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(value.Vin);
writer.Skip(17 - (writer.GetCurrentPosition()- currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.VehicleNo);
writer.Skip(12 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.VehicleType);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
public JT808_CarDVR_Up_0x05 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x05 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x05;
writer.WriteASCII(value.Vin.PadRight(17,'0'));
writer.WriteASCII(value.VehicleNo);
writer.Skip(12 - value.VehicleNo.Length, out var vehicleNo);
writer.WriteString(value.VehicleType);
writer.Skip(10 - value.VehicleType.Length, out var vehicleType);
JT808_CarDVR_Up_0x05 value = new JT808_CarDVR_Up_0x05();
value.Vin = reader.ReadASCII(17);
value.VehicleNo = reader.ReadString(12);
value.VehicleType = reader.ReadString(10);
return value;
}
}
}

+ 40
- 25
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x06.cs Целия файл

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集记录仪状态信号配置信息
/// 返回:状态信号配置信息
/// </summary>
public class JT808_CarDVR_Up_0x06 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x06 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x06>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集记录仪状态信号配置信息.ToByteValue();
/// <summary>
@@ -68,35 +68,50 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x06 value, IJT808Config config)
{
writer.WriteDateTime6(value.RealTime);
writer.WriteByte(value.SignalOperate);
var currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.D0);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.D1);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.D2);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.NearLight);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.FarLight);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.RightTurn);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.LeftTurn);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.Brake);
writer.Skip(10 - (writer.GetCurrentPosition() - currentPosition), out var _);
}

public JT808_CarDVR_Up_0x06 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x06 value = new JT808_CarDVR_Up_0x06();
value.RealTime = reader.ReadDateTime6();
value.SignalOperate = reader.ReadByte();
value.D0 = reader.ReadASCII(10);
value.D1 = reader.ReadASCII(10);
value.D2 = reader.ReadASCII(10);
value.NearLight = reader.ReadASCII(10);
value.FarLight = reader.ReadASCII(10);
value.RightTurn = reader.ReadASCII(10);
value.LeftTurn = reader.ReadASCII(10);
value.Brake = reader.ReadASCII(10);
value.D0 = reader.ReadString(10);
value.D1 = reader.ReadString(10);
value.D2 = reader.ReadString(10);
value.NearLight = reader.ReadString(10);
value.FarLight = reader.ReadString(10);
value.RightTurn = reader.ReadString(10);
value.LeftTurn = reader.ReadString(10);
value.Brake = reader.ReadString(10);
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x06 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x06;
writer.WriteDateTime6(value.RealTime);
writer.WriteByte(value.SignalOperate);
writer.WriteASCII(value.D0.PadRight(0));
writer.WriteASCII(value.D1.PadRight(0));
writer.WriteASCII(value.D2.PadRight(0));
writer.WriteASCII(value.NearLight.PadRight(0));
writer.WriteASCII(value.FarLight.PadRight(0));
writer.WriteASCII(value.RightTurn.PadRight(0));
writer.WriteASCII(value.LeftTurn.PadRight(0));
writer.WriteASCII(value.Brake.PadRight(0));
}
}
}

+ 21
- 14
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x07.cs Целия файл

@@ -15,7 +15,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 采集记录仪唯一性编号
/// 返回:唯一性编号及初次安装日期
/// </summary>
public class JT808_CarDVR_Up_0x07 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x07 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x07>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集记录仪唯一性编号.ToByteValue();
/// <summary>
@@ -45,25 +45,32 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x07 value, IJT808Config config)
{
var currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(value.ProductionPlantCCCCertificationCode);
writer.Skip(7 - (writer.GetCurrentPosition()- currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(value.CertifiedProductModels);
writer.Skip(16 - (writer.GetCurrentPosition()- currentPosition), out var _);
writer.WriteDateTime3(value.ProductionDate);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.ProductProductionFlowNumber);
writer.Skip(4 - (writer.GetCurrentPosition() - currentPosition), out var _);
currentPosition = writer.GetCurrentPosition();
writer.WriteString(value.Reversed);
writer.Skip(5 - (writer.GetCurrentPosition() - currentPosition), out var _);
}

public JT808_CarDVR_Up_0x07 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x07 value = new JT808_CarDVR_Up_0x07();
value.ProductionPlantCCCCertificationCode = reader.ReadASCII(7);
value.CertifiedProductModels = reader.ReadASCII(16);
value.ProductionDate = reader.ReadDateTime3();
value.ProductProductionFlowNumber = reader.ReadASCII(4);
value.Reversed = reader.ReadASCII(5);
value.ProductProductionFlowNumber = reader.ReadString(4);
value.Reversed = reader.ReadString(5);
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x07 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x07;
writer.WriteASCII(value.ProductionPlantCCCCertificationCode.PadRight(7,'0'));
writer.WriteASCII(value.CertifiedProductModels.PadRight(16, '0'));
writer.WriteDateTime3(value.ProductionDate);
writer.WriteASCII(value.ProductProductionFlowNumber.PadRight(4,'0'));
writer.WriteASCII(value.Reversed.PadRight(5, '0'));
}
}
}

+ 51
- 43
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x08.cs Целия файл

@@ -16,7 +16,7 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 返回:符合条件的行驶速度记录
/// 如在指定的时间范围内无数据记录,则本数据块数据为空
/// </summary>
public class JT808_CarDVR_Up_0x08 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x08 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x08>, IJT808Analyze
{
public override byte CommandId => JT808CarDVRCommandID.采集指定的行驶速度记录.ToByteValue();
/// <summary>
@@ -30,10 +30,31 @@ namespace JT808.Protocol.MessageBody.CarDVR

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x08 value, IJT808Config config)
{
foreach (var speedPerMinute in value.JT808_CarDVR_Up_0x08_SpeedPerMinutes)
{
writer.WriteDateTime6(speedPerMinute.StartTime);
for (int i = 0; i < 60; i++)
{
if (i < speedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds.Count)
{
writer.WriteByte(speedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds[i].AvgSpeedAfterStartTime);
writer.WriteByte(speedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds[i].StatusSignalAfterStartTime);
}
else {
writer.WriteByte(0xFF);
writer.WriteByte(0xFF);
}
}
}
}

public JT808_CarDVR_Up_0x08 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x08 value = new JT808_CarDVR_Up_0x08();
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1)/126;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志
value.JT808_CarDVR_Up_0x08_SpeedPerMinutes = new List<JT808_CarDVR_Up_0x08_SpeedPerMinute>();
var count = (reader.ReadCurrentRemainContentLength() - 1) / 126;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x08_SpeedPerMinute jT808_CarDVR_Up_0X08_SpeedPerMinute = new JT808_CarDVR_Up_0x08_SpeedPerMinute()
@@ -49,53 +70,40 @@ namespace JT808.Protocol.MessageBody.CarDVR
StatusSignalAfterStartTime = reader.ReadByte()
});
}
value.JT808_CarDVR_Up_0x08_SpeedPerMinutes.Add(jT808_CarDVR_Up_0X08_SpeedPerMinute);
}
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x08 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x08;
foreach (var speedPerMinute in value.JT808_CarDVR_Up_0x08_SpeedPerMinutes)
{
writer.WriteDateTime6(speedPerMinute.StartTime);
foreach (var speedPerSecond in speedPerMinute.JT808_CarDVR_Up_0x08_SpeedPerSeconds)
{
writer.WriteByte(speedPerSecond.AvgSpeedAfterStartTime);
writer.WriteByte(speedPerSecond.StatusSignalAfterStartTime);
}
}
}
}
/// <summary>
/// 单位分钟行驶速度记录数据块格式
/// 1.本数据块总长度为 126 个字节,不足部分以 FFH补齐;
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
/// </summary>
public class JT808_CarDVR_Up_0x08_SpeedPerMinute
{
/// <summary>
/// 单位分钟行驶速度记录数据块格式
/// 1.本数据块总长度为 126 个字节,不足部分以 FFH补齐;
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
/// 开始时间
/// </summary>
public class JT808_CarDVR_Up_0x08_SpeedPerMinute
{
/// <summary>
/// 开始时间
/// </summary>
public DateTime StartTime { get; set; }
/// <summary>
/// 60s钟,每秒的信息
/// </summary>
public List<JT808_CarDVR_Up_0x08_SpeedPerSecond> JT808_CarDVR_Up_0x08_SpeedPerSeconds { get; set; }
public DateTime StartTime { get; set; }
/// <summary>
/// 60s钟,每秒的信息
/// </summary>
public List<JT808_CarDVR_Up_0x08_SpeedPerSecond> JT808_CarDVR_Up_0x08_SpeedPerSeconds { get; set; }

}
}
/// <summary>
/// 开始时间之后每秒钟的平均速度和状态信号
/// </summary>
public class JT808_CarDVR_Up_0x08_SpeedPerSecond
{
/// <summary>
/// 开始时间之后每秒钟的平均速度和状态信号
/// 开始时间之后每秒钟的平均速度
/// </summary>
public class JT808_CarDVR_Up_0x08_SpeedPerSecond
{
/// <summary>
/// 开始时间之后每秒钟的平均速度
/// </summary>
public byte AvgSpeedAfterStartTime { get; set; }
/// <summary>
/// 开始时间之后每秒钟的状态信号
/// </summary>
public byte StatusSignalAfterStartTime { get; set; }
}
public byte AvgSpeedAfterStartTime { get; set; }
/// <summary>
/// 开始时间之后每秒钟的状态信号
/// </summary>
public byte StatusSignalAfterStartTime { get; set; }
}
}

+ 62
- 53
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x09.cs Целия файл

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

}
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x09 value, IJT808Config config)
{
foreach (var positionPerHour in value.JT808_CarDVR_Up_0x09_PositionPerHours)
{
writer.WriteDateTime6(positionPerHour.StartTime);
for (int i = 0; i < 60; i++)
{
if (i < positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes.Count)
{
writer.WriteInt32(positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes[i].GpsLng);
writer.WriteInt32(positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes[i].GpsLat);
writer.WriteInt16(positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes[i].Height);
writer.WriteByte(positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes[i].AvgSpeedAfterStartTime);
}
else {
writer.WriteUInt32(0xFFFFFFFF);
writer.WriteUInt32(0xFFFFFFFF);
writer.WriteUInt16(0xFFFF);
writer.WriteByte(0xFF);
}
}
}
}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public JT808_CarDVR_Up_0x09 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x09 value = new JT808_CarDVR_Up_0x09();
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 666;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志
value.JT808_CarDVR_Up_0x09_PositionPerHours = new List<JT808_CarDVR_Up_0x09_PositionPerHour>();
var count = (reader.ReadCurrentRemainContentLength() - 1) / 666;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x09_PositionPerHour jT808_CarDVR_Up_0x09_PositionPerHour = new JT808_CarDVR_Up_0x09_PositionPerHour()
@@ -51,63 +75,48 @@ namespace JT808.Protocol.MessageBody.CarDVR
AvgSpeedAfterStartTime = reader.ReadByte()
});
}
value.JT808_CarDVR_Up_0x09_PositionPerHours.Add(jT808_CarDVR_Up_0x09_PositionPerHour);
}
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x09 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x09;
foreach (var positionPerHour in value.JT808_CarDVR_Up_0x09_PositionPerHours)
{
writer.WriteDateTime6(positionPerHour.StartTime);
foreach (var positionPerMinute in positionPerHour.JT808_CarDVR_Up_0x09_PositionPerMinutes)
{
writer.WriteInt32(positionPerMinute.GpsLng);
writer.WriteInt32(positionPerMinute.GpsLat);
writer.WriteInt16(positionPerMinute.Height);
writer.WriteByte(positionPerMinute.AvgSpeedAfterStartTime);
}
}
}
}
/// <summary>
/// 指定的结束时间之前最近的每 小时的位置信息记录
/// 1.本数据块总长度为 666 个字节,不足部分以 FFH补齐;
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
/// </summary>
public class JT808_CarDVR_Up_0x09_PositionPerHour
{
/// <summary>
/// 指定的结束时间之前最近的每 小时的位置信息记录
/// 1.本数据块总长度为 666 个字节,不足部分以 FFH补齐;
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
/// 开始时间
/// </summary>
public class JT808_CarDVR_Up_0x09_PositionPerHour
{
/// <summary>
/// 开始时间
/// </summary>
public DateTime StartTime { get; set; }
/// <summary>
/// 60s钟,每秒的信息
/// </summary>
public List<JT808_CarDVR_Up_0x09_PositionPerMinute> JT808_CarDVR_Up_0x09_PositionPerMinutes { get; set; }
public DateTime StartTime { get; set; }
/// <summary>
/// 60s钟,每秒的信息
/// </summary>
public List<JT808_CarDVR_Up_0x09_PositionPerMinute> JT808_CarDVR_Up_0x09_PositionPerMinutes { get; set; }

}
}
/// <summary>
/// 开始时间之后每分钟的平均速度和位置信息
/// </summary>
public class JT808_CarDVR_Up_0x09_PositionPerMinute
{
/// <summary>
/// 开始时间之后每分钟的平均速度和位置信息
/// 经度
/// </summary>
public class JT808_CarDVR_Up_0x09_PositionPerMinute
{
/// <summary>
/// 经度
/// </summary>
public int GpsLng { get; set; }
/// <summary>
/// 纬度
/// </summary>
public int GpsLat { get; set; }
/// <summary>
/// 高度
/// </summary>
public short Height { get; set; }
/// <summary>
/// 开始时间之后每分钟的平均速度
/// </summary>
public byte AvgSpeedAfterStartTime { get; set; }
}
public int GpsLng { get; set; }
/// <summary>
/// 纬度
/// </summary>
public int GpsLat { get; set; }
/// <summary>
/// 高度
/// </summary>
public short Height { get; set; }
/// <summary>
/// 开始时间之后每分钟的平均速度
/// </summary>
public byte AvgSpeedAfterStartTime { get; set; }
}
}

+ 74
- 63
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x10.cs Целия файл

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x10 value, IJT808Config config)
{
foreach (var accidentSuspectin in value.JT808_CarDVR_Up_0x10_AccidentSuspectins)
{
writer.WriteDateTime6(accidentSuspectin.EndTime);
var currentPosition = writer.GetCurrentPosition();
writer.WriteASCII(accidentSuspectin.DriverLicenseNo);
writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _);
for (int i = 0; i < 100; i++)
{
if (i < accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss.Count)
{
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss[i].Speed);
writer.WriteByte(accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss[i].StatusSignal);
}
else
{
writer.WriteByte(0xFF);
writer.WriteByte(0xFF);
}
}
writer.WriteInt32(accidentSuspectin.GpsLng);
writer.WriteInt32(accidentSuspectin.GpsLat);
writer.WriteInt16(accidentSuspectin.Height);
}
}

public JT808_CarDVR_Up_0x10 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x10 value = new JT808_CarDVR_Up_0x10();
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 234;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志
value.JT808_CarDVR_Up_0x10_AccidentSuspectins = new List<JT808_CarDVR_Up_0x10_AccidentSuspectin>();
var count = (reader.ReadCurrentRemainContentLength() - 1) / 234;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x10_AccidentSuspectin jT808_CarDVR_Up_0x10_AccidentSuspectin = new JT808_CarDVR_Up_0x10_AccidentSuspectin();
@@ -52,73 +80,56 @@ namespace JT808.Protocol.MessageBody.CarDVR
jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLng = reader.ReadInt32();
jT808_CarDVR_Up_0x10_AccidentSuspectin.GpsLat = reader.ReadInt32();
jT808_CarDVR_Up_0x10_AccidentSuspectin.Height = reader.ReadInt16();
value.JT808_CarDVR_Up_0x10_AccidentSuspectins.Add(jT808_CarDVR_Up_0x10_AccidentSuspectin);
}
return value;
}
public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x10 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x10;
foreach (var accidentSuspectin in value.JT808_CarDVR_Up_0x10_AccidentSuspectins)
{
writer.WriteDateTime6(accidentSuspectin.EndTime);
writer.WriteASCII(accidentSuspectin.DriverLicenseNo.PadRight(18, '0'));
foreach (var drivingStatus in accidentSuspectin.JT808_CarDVR_Up_0x09_DrivingStatuss)
{
writer.WriteByte(drivingStatus.Speed);
writer.WriteByte(drivingStatus.StatusSignal);
}
writer.WriteInt32(accidentSuspectin.GpsLng);
writer.WriteInt32(accidentSuspectin.GpsLat);
writer.WriteInt16(accidentSuspectin.Height);
}
}
}
/// <summary>
/// 指定的结束时间之前最近的每条事故疑点记录
/// 1.本数据块总长度为 234 个字节;
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
/// </summary>
public class JT808_CarDVR_Up_0x10_AccidentSuspectin
{
/// <summary>
/// 指定的结束时间之前最近的每条事故疑点记录
/// 1.本数据块总长度为 234 个字节;
/// 2.如单位分钟内无数据记录,则本数据块无效,数据长度为0,数据为空
/// 行驶结束时间
/// </summary>
public class JT808_CarDVR_Up_0x10_AccidentSuspectin
{
/// <summary>
/// 行驶结束时间
/// </summary>
public DateTime EndTime { get; set; }
/// <summary>
/// 机动车驾驶证号码
/// </summary>
public string DriverLicenseNo { get; set; }
/// <summary>
/// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列
/// </summary>
public List<JT808_CarDVR_Up_0x10_DrivingStatus> JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; }
/// <summary>
/// 经度
/// </summary>
public int GpsLng { get; set; }
/// <summary>
/// 纬度
/// </summary>
public int GpsLat { get; set; }
/// <summary>
/// 高度
/// </summary>
public short Height { get; set; }
public DateTime EndTime { get; set; }
/// <summary>
/// 机动车驾驶证号码
/// </summary>
public string DriverLicenseNo { get; set; }
/// <summary>
/// 每 0.2s 间隔采集 1 次,共 100组 20s 的事故疑点记录,按时间倒序排列
/// </summary>
public List<JT808_CarDVR_Up_0x10_DrivingStatus> JT808_CarDVR_Up_0x09_DrivingStatuss { get; set; }
/// <summary>
/// 经度
/// </summary>
public int GpsLng { get; set; }
/// <summary>
/// 纬度
/// </summary>
public int GpsLat { get; set; }
/// <summary>
/// 高度
/// </summary>
public short Height { get; set; }

}
}
/// <summary>
/// 行驶结束时间前的状态
/// </summary>
public class JT808_CarDVR_Up_0x10_DrivingStatus
{
/// <summary>
/// 行驶结束时间前的状态
/// 速度
/// </summary>
public class JT808_CarDVR_Up_0x10_DrivingStatus
{
/// <summary>
/// 速度
/// </summary>
public byte Speed { get; set; }
/// <summary>
/// 状态信号
/// </summary>
public byte StatusSignal { get; set; }
}
public byte Speed { get; set; }
/// <summary>
/// 状态信号
/// </summary>
public byte StatusSignal { get; set; }
}
}

+ 59
- 60
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x11.cs Целия файл

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x11 value, IJT808Config config)
{
foreach (var driveOverTime in value.JT808_CarDVR_Up_0x11_DriveOverTimes)
{
writer.WriteASCII(driveOverTime.DriverLicenseNo.PadRight(18, '0'));
writer.WriteDateTime6(driveOverTime.ContinueDrivingStartTime);
writer.WriteDateTime6(driveOverTime.ContinueDrivingEndTime);
writer.WriteInt32(driveOverTime.GpsStartLng);
writer.WriteInt32(driveOverTime.GpsStartLat);
writer.WriteInt16(driveOverTime.StartHeight);
writer.WriteInt32(driveOverTime.GpsEndLng);
writer.WriteInt32(driveOverTime.GpsStartLat);
writer.WriteInt16(driveOverTime.EndHeight);
}
}

public JT808_CarDVR_Up_0x11 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x11 value = new JT808_CarDVR_Up_0x11();
value.JT808_CarDVR_Up_0x11_DriveOverTimes = new List<JT808_CarDVR_Up_0x11_DriveOverTime>();
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 50;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志
var count = (reader.ReadCurrentRemainContentLength() - 1) / 50;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x11_DriveOverTime jT808_CarDVR_Up_0x11_DriveOverTime = new JT808_CarDVR_Up_0x11_DriveOverTime();
@@ -50,64 +66,47 @@ namespace JT808.Protocol.MessageBody.CarDVR
}
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x11 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x11;
foreach (var driveOverTime in value.JT808_CarDVR_Up_0x11_DriveOverTimes)
{
writer.WriteASCII(driveOverTime.DriverLicenseNo.PadRight(18, '0'));
writer.WriteDateTime6(driveOverTime.ContinueDrivingStartTime);
writer.WriteDateTime6(driveOverTime.ContinueDrivingEndTime);
writer.WriteInt32(driveOverTime.GpsStartLng);
writer.WriteInt32(driveOverTime.GpsStartLat);
writer.WriteInt16(driveOverTime.StartHeight);
writer.WriteInt32(driveOverTime.GpsEndLng);
writer.WriteInt32(driveOverTime.GpsStartLat);
writer.WriteInt16(driveOverTime.EndHeight);
}
}
}
/// <summary>
/// 单位超时驾驶记录数据块
/// </summary>
public class JT808_CarDVR_Up_0x11_DriveOverTime
{
/// <summary>
/// 单位超时驾驶记录数据块
/// 机动车驾驶证号码 18位
/// </summary>
public class JT808_CarDVR_Up_0x11_DriveOverTime
{
/// <summary>
/// 机动车驾驶证号码 18位
/// </summary>
public string DriverLicenseNo { get; set; }
/// <summary>
/// 连续驾驶开始时间
/// </summary>
public DateTime ContinueDrivingStartTime { get; set; }
/// <summary>
/// 连续驾驶结束时间
/// </summary>
public DateTime ContinueDrivingEndTime { get; set; }
/// <summary>
/// 经度
/// </summary>
public int GpsStartLng { get; set; }
/// <summary>
/// 纬度
/// </summary>
public int GpsStartLat { get; set; }
/// <summary>
/// 高度
/// </summary>
public short StartHeight { get; set; }
/// <summary>
/// 经度
/// </summary>
public int GpsEndLng { get; set; }
/// <summary>
/// 纬度
/// </summary>
public int GpsEndLat { get; set; }
/// <summary>
/// 高度
/// </summary>
public short EndHeight { get; set; }
}
public string DriverLicenseNo { get; set; }
/// <summary>
/// 连续驾驶开始时间
/// </summary>
public DateTime ContinueDrivingStartTime { get; set; }
/// <summary>
/// 连续驾驶结束时间
/// </summary>
public DateTime ContinueDrivingEndTime { get; set; }
/// <summary>
/// 经度
/// </summary>
public int GpsStartLng { get; set; }
/// <summary>
/// 纬度
/// </summary>
public int GpsStartLat { get; set; }
/// <summary>
/// 高度
/// </summary>
public short StartHeight { get; set; }
/// <summary>
/// 经度
/// </summary>
public int GpsEndLng { get; set; }
/// <summary>
/// 纬度
/// </summary>
public int GpsEndLat { get; set; }
/// <summary>
/// 高度
/// </summary>
public short EndHeight { get; set; }
}
}

+ 30
- 31
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x12.cs Целия файл

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x12 value, IJT808Config config)
{
foreach (var driveLogin in value.JT808_CarDVR_Up_0x12_DriveLogins)
{
writer.WriteDateTime6(driveLogin.LoginTime);
writer.WriteASCII(driveLogin.DriverLicenseNo.PadRight(18, '0'));
writer.WriteByte(driveLogin.LoginType);
}
}

public JT808_CarDVR_Up_0x12 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x12 value = new JT808_CarDVR_Up_0x12();
value.JT808_CarDVR_Up_0x12_DriveLogins= new List<JT808_CarDVR_Up_0x12_DriveLogin>();
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 25;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志
value.JT808_CarDVR_Up_0x12_DriveLogins = new List<JT808_CarDVR_Up_0x12_DriveLogin>();
var count = (reader.ReadCurrentRemainContentLength() - 1) / 25;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x12_DriveLogin jT808_CarDVR_Up_0x12_DriveLogin = new JT808_CarDVR_Up_0x12_DriveLogin();
@@ -44,34 +54,23 @@ namespace JT808.Protocol.MessageBody.CarDVR
}
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x12 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x12;
foreach (var driveLogin in value.JT808_CarDVR_Up_0x12_DriveLogins)
{
writer.WriteDateTime6(driveLogin.LoginTime);
writer.WriteASCII(driveLogin.DriverLicenseNo.PadRight(18, '0'));
writer.WriteByte(driveLogin.LoginType);
}
}
}
/// <summary>
/// 单位驾驶人身份记录数据块格式
/// </summary>
public class JT808_CarDVR_Up_0x12_DriveLogin
{
/// <summary>
/// 单位驾驶人身份记录数据块格式
/// 登入登出时间发生时间
/// </summary>
public class JT808_CarDVR_Up_0x12_DriveLogin
{
/// <summary>
/// 登入登出时间发生时间
/// </summary>
public DateTime LoginTime { get; set; }
/// <summary>
/// 机动车驾驶证号码 18位
/// </summary>
public string DriverLicenseNo { get; set; }
/// <summary>
/// 事件类型
/// </summary>
public byte LoginType { get; set; }
}
public DateTime LoginTime { get; set; }
/// <summary>
/// 机动车驾驶证号码 18位
/// </summary>
public string DriverLicenseNo { get; set; }
/// <summary>
/// 事件类型
/// </summary>
public byte LoginType { get; set; }
}
}

+ 23
- 25
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x13.cs Целия файл

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

}
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x13 value, IJT808Config config)
{
foreach (var externalPowerSupply in value.JT808_CarDVR_Up_0x13_ExternalPowerSupplys)
{
writer.WriteDateTime6(externalPowerSupply.EventTime);
writer.WriteByte(externalPowerSupply.EventType);
}
}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public JT808_CarDVR_Up_0x13 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x13 value = new JT808_CarDVR_Up_0x13();
value.JT808_CarDVR_Up_0x13_ExternalPowerSupplys = new List<JT808_CarDVR_Up_0x13_ExternalPowerSupply>();
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 7;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志
var count = (reader.ReadCurrentRemainContentLength() - 1) / 7;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x13_ExternalPowerSupply jT808_CarDVR_Up_0x13_ExternalPowerSupply = new JT808_CarDVR_Up_0x13_ExternalPowerSupply();
@@ -43,29 +51,19 @@ namespace JT808.Protocol.MessageBody.CarDVR
}
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x13 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x13;
foreach (var externalPowerSupply in value.JT808_CarDVR_Up_0x13_ExternalPowerSupplys)
{
writer.WriteDateTime6(externalPowerSupply.EventTime);
writer.WriteByte(externalPowerSupply.EventType);
}
}
}
/// <summary>
/// 单位记录仪外部供电记录数据块格式
/// </summary>
public class JT808_CarDVR_Up_0x13_ExternalPowerSupply
{
/// <summary>
/// 单位记录仪外部供电记录数据块格式
/// 事件发生时间
/// </summary>
public class JT808_CarDVR_Up_0x13_ExternalPowerSupply
{
/// <summary>
/// 事件发生时间
/// </summary>
public DateTime EventTime { get; set; }
/// <summary>
/// 事件类型
/// </summary>
public byte EventType { get; set; }
}
public DateTime EventTime { get; set; }
/// <summary>
/// 事件类型
/// </summary>
public byte EventType { get; set; }
}
}

+ 24
- 25
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x14.cs Целия файл

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x14 value, IJT808Config config)
{
foreach (var parameterModify in value.JT808_CarDVR_Up_0x14_ParameterModifys)
{
writer.WriteDateTime6(parameterModify.EventTime);
writer.WriteByte(parameterModify.EventType);
}
}

public JT808_CarDVR_Up_0x14 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x14 value = new JT808_CarDVR_Up_0x14();
value.JT808_CarDVR_Up_0x14_ParameterModifys = new List<JT808_CarDVR_Up_0x14_ParameterModify>();
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 7;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志
var count = (reader.ReadCurrentRemainContentLength() - 1) / 7;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x14_ParameterModify jT808_CarDVR_Up_0x14_ParameterModify = new JT808_CarDVR_Up_0x14_ParameterModify();
@@ -43,29 +52,19 @@ namespace JT808.Protocol.MessageBody.CarDVR
}
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x14 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x14;
foreach (var parameterModify in value.JT808_CarDVR_Up_0x14_ParameterModifys)
{
writer.WriteDateTime6(parameterModify.EventTime);
writer.WriteByte(parameterModify.EventType);
}
}
}
/// <summary>
/// 单位参数修改记录数据块格式
/// </summary>
public class JT808_CarDVR_Up_0x14_ParameterModify
{
/// <summary>
/// 单位记录仪外部供电记录数据块格式
/// 事件发生时间
/// </summary>
public class JT808_CarDVR_Up_0x14_ParameterModify
{
/// <summary>
/// 事件发生时间
/// </summary>
public DateTime EventTime { get; set; }
/// <summary>
/// 事件类型
/// </summary>
public byte EventType { get; set; }
}
public DateTime EventTime { get; set; }
/// <summary>
/// 事件类型
/// </summary>
public byte EventType { get; set; }
}
}

+ 50
- 51
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x15.cs Целия файл

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x15 value, IJT808Config config)
{
foreach (var speedStatusLog in value.JT808_CarDVR_Up_0x15_SpeedStatusLogs)
{
writer.WriteByte(speedStatusLog.SpeedStatus);
writer.WriteDateTime6(speedStatusLog.SpeedStatusStartTime);
writer.WriteDateTime6(speedStatusLog.SpeedStatusEndTime);
foreach (var speedPerSecond in speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds)
{
writer.WriteByte(speedPerSecond.RecordSpeed);
writer.WriteByte(speedPerSecond.ReferenceSpeed);
}
}
}

public JT808_CarDVR_Up_0x15 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x15 value = new JT808_CarDVR_Up_0x15();
value.JT808_CarDVR_Up_0x15_SpeedStatusLogs = new List<JT808_CarDVR_Up_0x15_SpeedStatusLog>();
var count = (reader.ReadCurrentRemainContentLength() - 1 - 1) / 133;//记录块个数, -1 去掉808校验位,-1去掉808尾部标志
var count = (reader.ReadCurrentRemainContentLength() - 1) / 133;//记录块个数, -1 去掉校验位
for (int i = 0; i < count; i++)
{
JT808_CarDVR_Up_0x15_SpeedStatusLog jT808_CarDVR_Up_0x15_SpeedStatusLog = new JT808_CarDVR_Up_0x15_SpeedStatusLog();
@@ -52,57 +67,41 @@ namespace JT808.Protocol.MessageBody.CarDVR
}
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x15 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x15;
foreach (var speedStatusLog in value.JT808_CarDVR_Up_0x15_SpeedStatusLogs)
{
writer.WriteByte(speedStatusLog.SpeedStatus);
writer.WriteDateTime6(speedStatusLog.SpeedStatusStartTime);
writer.WriteDateTime6(speedStatusLog.SpeedStatusEndTime);
foreach (var speedPerSecond in speedStatusLog.JT808_CarDVR_Up_0x15_SpeedPerSeconds)
{
writer.WriteByte(speedPerSecond.RecordSpeed);
writer.WriteByte(speedPerSecond.ReferenceSpeed);
}
}
}
}
/// <summary>
/// 单位速度状态日志数据块格式
/// </summary>
public class JT808_CarDVR_Up_0x15_SpeedStatusLog
{
/// <summary>
/// 单位速度状态日志数据块格式
/// 记录仪的速度状态
/// </summary>
public class JT808_CarDVR_Up_0x15_SpeedStatusLog
{
/// <summary>
/// 记录仪的速度状态
/// </summary>
public byte SpeedStatus { get; set; }
/// <summary>
/// 速度状态判定的开始时间
/// </summary>
public DateTime SpeedStatusStartTime { get; set; }
/// <summary>
/// 速度状态判定的结束时间
/// </summary>
public DateTime SpeedStatusEndTime { get; set; }
/// <summary>
/// 60组
/// </summary>
public List<JT808_CarDVR_Up_0x15_SpeedPerSecond> JT808_CarDVR_Up_0x15_SpeedPerSeconds { get; set; }
}
public byte SpeedStatus { get; set; }
/// <summary>
/// 每秒速度
/// 速度状态判定的开始时间
/// </summary>
public class JT808_CarDVR_Up_0x15_SpeedPerSecond
{
/// <summary>
/// 记录速度
/// </summary>
public byte RecordSpeed { get; set; }
/// <summary>
/// 参考速度
/// </summary>
public byte ReferenceSpeed { get; set; }
}
public DateTime SpeedStatusStartTime { get; set; }
/// <summary>
/// 速度状态判定的结束时间
/// </summary>
public DateTime SpeedStatusEndTime { get; set; }
/// <summary>
/// 60组
/// </summary>
public List<JT808_CarDVR_Up_0x15_SpeedPerSecond> JT808_CarDVR_Up_0x15_SpeedPerSeconds { get; set; }
}
/// <summary>
/// 每秒速度
/// </summary>
public class JT808_CarDVR_Up_0x15_SpeedPerSecond
{
/// <summary>
/// 记录速度
/// </summary>
public byte RecordSpeed { get; set; }
/// <summary>
/// 参考速度
/// </summary>
public byte ReferenceSpeed { get; set; }
}
}

+ 2
- 20
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x82.cs Целия файл

@@ -15,29 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置车辆信息
/// 返回:车辆信息
/// </summary>
public class JT808_CarDVR_Up_0x82 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x82 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.设置车辆信息.ToByteValue();

public override string Description => "车辆信息";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x82 value = new JT808_CarDVR_Up_0x82();

return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x82 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x82;

}

public override bool SkipSerialization { get; set; } = true;
}
}

+ 2
- 16
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x83.cs Целия файл

@@ -15,26 +15,12 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置记录仪初次安装日期
/// 返回:初次安装日期
/// </summary>
public class JT808_CarDVR_Up_0x83 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x83 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.设置记录仪初次安装日期.ToByteValue();

public override string Description => "初次安装日期";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x83 value = new JT808_CarDVR_Up_0x83();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x83 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x83;
}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 2
- 17
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0x84.cs Целия файл

@@ -15,26 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置状态量配置信息
/// 返回:状态量配置信息
/// </summary>
public class JT808_CarDVR_Up_0x84 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0x84 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.设置状态量配置信息.ToByteValue();

public override string Description => "状态量配置信息";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0x84 value = new JT808_CarDVR_Up_0x84();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0x84 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0x84;
}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 2
- 18
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC2.cs Целия файл

@@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置记录仪时间
/// 返回:北京时间的日期、时钟
/// </summary>
public class JT808_CarDVR_Up_0xC2 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0xC2 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.设置记录仪时间.ToByteValue();

public override string Description => "北京时间的日期、时钟";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xC2 value = new JT808_CarDVR_Up_0xC2();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0xC2 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC2;

}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 2
- 18
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC3.cs Целия файл

@@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置记录仪脉冲系数
/// 返回:记录仪脉冲系数
/// </summary>
public class JT808_CarDVR_Up_0xC3 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0xC3 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.设置记录仪脉冲系数.ToByteValue();

public override string Description => "记录仪脉冲系数";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xC3 value = new JT808_CarDVR_Up_0xC3();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0xC3 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC3;

}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 2
- 17
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xC4.cs Целия файл

@@ -15,25 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 设置初始里程
/// 返回:记录仪初次安装时车辆已行驶的总里程
/// </summary>
public class JT808_CarDVR_Up_0xC4 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0xC4 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.设置初始里程.ToByteValue();
public override string Description => "车辆识别代号、机动车号牌号码和机动车号牌分类";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xC4 value = new JT808_CarDVR_Up_0xC4();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0xC4 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xC4;
}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 3
- 18
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE0.cs Целия файл

@@ -14,27 +14,12 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// <summary>
/// 进入或保持检定状态
/// 返回:进入或保持检定状态
/// 在检定状态下,检定装置以不大于2秒的时间间隔发送包含本命令字的命令帧,记录仪在6秒内未收到该命令帧,则自动返回正常工作状态。
/// </summary>
public class JT808_CarDVR_Up_0xE0 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0xE0 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.进入或保持检定状态.ToByteValue();

public override string Description => "进入或保持检定状态";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xE0 value = new JT808_CarDVR_Up_0xE0();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0xE0 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE0;
}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 2
- 17
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE1.cs Целия файл

@@ -15,26 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 进入里程误差测量
/// 返回:通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平)
/// </summary>
public class JT808_CarDVR_Up_0xE1 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0xE1 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.进入里程误差测量.ToByteValue();

public override string Description => "通过 DB9 的 7 脚接收标准速度脉冲测量信号(TTL 电平)";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xE1 value = new JT808_CarDVR_Up_0xE1();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0xE1 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE1;
}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 2
- 18
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE2.cs Целия файл

@@ -15,27 +15,11 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 进入脉冲系数误差测量
/// 返回:通过 DB9 的 7 脚输出车速传感器信号(TTL 电平)
/// </summary>
public class JT808_CarDVR_Up_0xE2 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0xE2 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.进入脉冲系数误差测量.ToByteValue();

public override string Description => "通过 DB9 的 7 脚输出车速传感器信号(TTL 电平)";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xE2 value = new JT808_CarDVR_Up_0xE2();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0xE2 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE2;

}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 1
- 18
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE3.cs Целия файл

@@ -15,27 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 进入实时时间误差测量
/// 返回:通过 DB9 的 7 脚输出实时时钟的秒脉冲信号(TTL 电平)
/// </summary>
public class JT808_CarDVR_Up_0xE3 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0xE3 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.进入实时时间误差测量.ToByteValue();

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

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xE3 value = new JT808_CarDVR_Up_0xE3();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0xE3 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE3;

}
}
}

+ 2
- 17
src/JT808.Protocol/MessageBody/CarDVR/JT808_CarDVR_Up_0xE4.cs Целия файл

@@ -15,25 +15,10 @@ namespace JT808.Protocol.MessageBody.CarDVR
/// 返回正常工作状态
/// 返回:返回正常工作状态
/// </summary>
public class JT808_CarDVR_Up_0xE4 : JT808CarDVRUpBodies, IJT808Analyze
public class JT808_CarDVR_Up_0xE4 : JT808CarDVRUpBodies
{
public override byte CommandId => JT808CarDVRCommandID.返回正常工作状态.ToByteValue();
public override string Description => "返回正常工作状态";

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

}

public override JT808CarDVRUpBodies Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_CarDVR_Up_0xE4 value = new JT808_CarDVR_Up_0xE4();
return value;
}

public override void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpBodies jT808CarDVRUpBodies, IJT808Config config)
{
JT808_CarDVR_Up_0xE4 value = jT808CarDVRUpBodies as JT808_CarDVR_Up_0xE4;
}
public override bool SkipSerialization { get; set; } = true;
}
}

+ 52
- 0
src/JT808.Protocol/MessageBody/JT808_0x0700.cs Целия файл

@@ -0,0 +1,52 @@
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Text.Json;

namespace JT808.Protocol.MessageBody
{
/// <summary>
/// 行驶记录数据上传
/// 0x0700
/// </summary>
public class JT808_0x0700 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0700>, IJT808Analyze
{
public override ushort MsgId { get; } = 0x0700;
public override string Description => "行驶记录数据上传";
/// <summary>
/// 应答流水号
/// </summary>
public ushort ReplyMsgNum { get; set; }
/// <summary>
/// 命令字
/// </summary>
public byte CommandId { get; set; }

public JT808CarDVRUpPackage JT808CarDVRUpPackage { get; set; }

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x0700 value = new JT808_0x0700();
}

public JT808_0x0700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x0700 value = new JT808_0x0700();
value.ReplyMsgNum = reader.ReadUInt16();
value.CommandId = reader.ReadByte();
object obj = config.GetMessagePackFormatterByType(typeof( JT808CarDVRUpPackage));
value.JT808CarDVRUpPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config);
return value;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0700 value, IJT808Config config)
{
writer.WriteUInt16(value.ReplyMsgNum);
writer.WriteByte(value.CommandId);
object obj = config.GetMessagePackFormatterByType(typeof(JT808CarDVRUpPackage));
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer,value.JT808CarDVRUpPackage, config);
}
}
}

+ 12
- 3
src/JT808.Protocol/MessageBody/JT808_0x8700.cs Целия файл

@@ -1,4 +1,5 @@
using JT808.Protocol.Formatters;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
@@ -18,6 +19,8 @@ namespace JT808.Protocol.MessageBody
/// </summary>
public byte CommandId { get; set; }

public JT808CarDVRDownPackage JT808CarDVRDownPackage { get; set; }

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
throw new NotImplementedException();
@@ -25,12 +28,18 @@ namespace JT808.Protocol.MessageBody

public JT808_0x8700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
throw new NotImplementedException();
JT808_0x8700 value = new JT808_0x8700();
value.CommandId = reader.ReadByte();
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType());
value.JT808CarDVRDownPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config);
return value;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8700 value, IJT808Config config)
{
throw new NotImplementedException();
writer.WriteByte(value.CommandId);
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType());
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRDownPackage, config);
}
}
}

+ 48
- 0
src/JT808.Protocol/MessageBody/JT808_0x8701.cs Целия файл

@@ -0,0 +1,48 @@
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace JT808.Protocol.MessageBody
{
/// <summary>
/// 行驶记录参数下传命令
/// </summary>
public class JT808_0x8701: JT808Bodies, IJT808MessagePackFormatter<JT808_0x8701>, IJT808_2019_Version, IJT808Analyze
{
public override ushort MsgId => 0x8701;

public override string Description => "行驶记录参数下传命令";
/// <summary>
///
/// </summary>
public byte CommandId { get; set; }

public JT808CarDVRDownPackage JT808CarDVRDownPackage { get; set; }

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
throw new NotImplementedException();
}

public JT808_0x8701 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8701 value = new JT808_0x8701();
value.CommandId = reader.ReadByte();
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType());
value.JT808CarDVRDownPackage = JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(obj, ref reader, config);
return value;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8701 value, IJT808Config config)
{
writer.WriteByte(value.CommandId);
object obj = config.GetMessagePackFormatterByType(value.JT808CarDVRDownPackage.GetType());
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.JT808CarDVRDownPackage, config);
}
}
}

+ 1
- 1
src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs Целия файл

@@ -420,7 +420,7 @@ namespace JT808.Protocol.MessagePack
{
calculateXorCheckCode = (byte)(calculateXorCheckCode ^ item);
}
var realXorCheckCode = Reader.Slice(ReaderCount + 1)[0];
var realXorCheckCode = Reader.Slice(ReaderCount)[0];
return (calculateXorCheckCode, realXorCheckCode);
}
}


Зареждане…
Отказ
Запис