Pārlūkot izejas kodu

1.完善车辆定位信息的组包解包

2.初步通过回调的方式注册808的分析器
3.升级809测试的808库
tags/v2.2.1
SmallChi(Koike) pirms 3 gadiem
vecāks
revīzija
f8128190d5
18 mainītis faili ar 622 papildinājumiem un 550 dzēšanām
  1. +3
    -3
      src/JT809.Protocol.Test/JT809.Protocol.Test.csproj
  2. +36
    -15
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1202Test.cs
  3. +10
    -10
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1203Test.cs
  4. +2
    -2
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1500_0x1502Test.cs
  5. +7
    -7
      src/JT809.Protocol.Test/Simples/Demo5.cs
  6. +2
    -1
      src/JT809.Protocol/Buffers/JT809BufferWriter.cs
  7. +4
    -0
      src/JT809.Protocol/Interfaces/IJT809Config.cs
  8. +3
    -1
      src/JT809.Protocol/Interfaces/JT809GlobalConfigBase.cs
  9. +1
    -1
      src/JT809.Protocol/JT809.Protocol.csproj
  10. +140
    -98
      src/JT809.Protocol/JT809.Protocol.xml
  11. +15
    -0
      src/JT809.Protocol/JT809DependencyInjectionExtensions.cs
  12. +9
    -0
      src/JT809.Protocol/JT809_JT808AnalyzeCallback.cs
  13. +162
    -77
      src/JT809.Protocol/Metadata/JT809VehiclePositionProperties.cs
  14. +120
    -52
      src/JT809.Protocol/Metadata/JT809VehiclePositionProperties_2019.cs
  15. +0
    -260
      src/JT809.Protocol/Metadata/VehiclePositionPropertieBase.cs
  16. +36
    -8
      src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1202.cs
  17. +36
    -7
      src/JT809.Protocol/SubMessageBody/JT809_0x1500_0x1502.cs
  18. +36
    -8
      src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9202.cs

+ 3
- 3
src/JT809.Protocol.Test/JT809.Protocol.Test.csproj Parādīt failu

@@ -11,9 +11,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="JT808" Version="2.3.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.0" />
<PackageReference Include="JT808" Version="2.4.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>


+ 36
- 15
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1202Test.cs Parādīt failu

@@ -9,6 +9,8 @@ using JT808.Protocol;
using JT808.Protocol.Interfaces; using JT808.Protocol.Interfaces;
using JT808.Protocol.MessageBody; using JT808.Protocol.MessageBody;
using JT809.Protocol.Metadata; using JT809.Protocol.Metadata;
using System.Text.Json;
using JT808.Protocol.MessagePack;


namespace JT809.Protocol.Test.JT809SubMessageBody namespace JT809.Protocol.Test.JT809SubMessageBody
{ {
@@ -25,19 +27,25 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
{ {
private JT809Serializer JT809Serializer = new JT809Serializer(); private JT809Serializer JT809Serializer = new JT809Serializer();


private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 });
private JT809Serializer JT809_2019_Serializer;

private JT808Serializer JT808Serializer_2019; private JT808Serializer JT808Serializer_2019;

private IJT808Config jT808Config;
public JT809_0x1200_0x1202Test() public JT809_0x1200_0x1202Test()
{ {
IJT808Config jT808Config = new DefaultGlobal808_2019Config();
jT808Config = new DefaultGlobal808_2019Config();
JT808Serializer_2019 = new JT808Serializer(jT808Config); JT808Serializer_2019 = new JT808Serializer(jT808Config);
var config = new DefaultGlobalConfig() { Version = JT809Version.JTT2019 };
config.AnalyzeCallbacks.Add(0x0200, new JT808AnalyzeCallback(Test_2019_5_Callback));
JT809_2019_Serializer = new JT809Serializer(config);
} }


[Fact] [Fact]
public void Test1() public void Test1()
{ {
JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202(); JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202();
jT809_0X1200_0X1202.VehiclePosition = new VehiclePositionPropertieOf2011
jT809_0X1200_0X1202.VehiclePosition = new JT809VehiclePositionProperties
{ {
Day = 19, Day = 19,
Month = 7, Month = 7,
@@ -63,9 +71,9 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
[Fact] [Fact]
public void Test2() public void Test2()
{ {
var bytes = "00 13 07 07 DC 0F 0F 0F 07 EF 4D 80 01 70 18 40 00 32 00 33 00 00 00 96 00 2D 00 2D 00 00 00 03 00 00 01 01".ToHexBytes();
byte[] bytes = "00 13 07 07 DC 0F 0F 0F 07 EF 4D 80 01 70 18 40 00 32 00 33 00 00 00 96 00 2D 00 2D 00 00 00 03 00 00 01 01".ToHexBytes();
JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809Serializer.Deserialize<JT809_0x1200_0x1202>(bytes); JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809Serializer.Deserialize<JT809_0x1200_0x1202>(bytes);
var vehiclePosition = jT809_0X1200_0X1202.VehiclePosition as VehiclePositionPropertieOf2011;
var vehiclePosition = jT809_0X1200_0X1202.VehiclePosition;
Assert.Equal(19, vehiclePosition.Day); Assert.Equal(19, vehiclePosition.Day);
Assert.Equal(7, vehiclePosition.Month); Assert.Equal(7, vehiclePosition.Month);
Assert.Equal(2012, vehiclePosition.Year); Assert.Equal(2012, vehiclePosition.Year);
@@ -86,7 +94,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
public void Test_2019_1() public void Test_2019_1()
{ {
JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202(); JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202();
jT809_0X1200_0X1202.VehiclePosition = new VehiclePositionPropertieOf2019
jT809_0X1200_0X1202.VehiclePosition_2019 = new JT809VehiclePositionProperties_2019
{ {
Encrypt = JT809_VehiclePositionEncrypt.已加密, Encrypt = JT809_VehiclePositionEncrypt.已加密,
PlatformId1 = "11111111111", PlatformId1 = "11111111111",
@@ -106,7 +114,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
{ {
var bytes = "0100000000313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes(); var bytes = "0100000000313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes();
JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1202>(bytes); JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1202>(bytes);
var gnssData = jT809_0X1200_0X1202.VehiclePosition as VehiclePositionPropertieOf2019;
var gnssData = jT809_0X1200_0X1202.VehiclePosition_2019;
Assert.Equal(JT809_VehiclePositionEncrypt.已加密, gnssData.Encrypt); Assert.Equal(JT809_VehiclePositionEncrypt.已加密, gnssData.Encrypt);
Assert.Equal("11111111111", gnssData.PlatformId1); Assert.Equal("11111111111", gnssData.PlatformId1);
Assert.Equal(1u, gnssData.Alarm1); Assert.Equal(1u, gnssData.Alarm1);
@@ -132,20 +140,20 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
Speed = 60, Speed = 60,
Direction = 0, Direction = 0,
StatusFlag = 2, StatusFlag = 2,
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
}; };
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
{ {
Mileage = 100 Mileage = 100
}); });
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
{ {
Oil = 55 Oil = 55
}); });
var jt808_0x0200Hex = JT808Serializer_2019.Serialize(jT808UploadLocationRequest, JT808.Protocol.Enums.JT808Version.JTT2019); var jt808_0x0200Hex = JT808Serializer_2019.Serialize(jT808UploadLocationRequest, JT808.Protocol.Enums.JT808Version.JTT2019);


JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202(); JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202();
jT809_0X1200_0X1202.VehiclePosition = new VehiclePositionPropertieOf2019
jT809_0X1200_0X1202.VehiclePosition_2019 = new JT809VehiclePositionProperties_2019
{ {
Encrypt = JT809_VehiclePositionEncrypt.已加密, Encrypt = JT809_VehiclePositionEncrypt.已加密,
GnssData = jt808_0x0200Hex, GnssData = jt808_0x0200Hex,
@@ -158,7 +166,6 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
}; };
var hex = JT809_2019_Serializer.Serialize(jT809_0X1200_0X1202).ToHexString(); var hex = JT809_2019_Serializer.Serialize(jT809_0X1200_0X1202).ToHexString();
Assert.Equal("0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003", hex); Assert.Equal("0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003", hex);

} }


[Fact] [Fact]
@@ -166,7 +173,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
{ {
var bytes = "0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes(); var bytes = "0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes();
JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1202>(bytes); JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1202>(bytes);
var gnssData = jT809_0X1200_0X1202.VehiclePosition as VehiclePositionPropertieOf2019;
var gnssData = jT809_0X1200_0X1202.VehiclePosition_2019;
Assert.Equal(JT809_VehiclePositionEncrypt.已加密, gnssData.Encrypt); Assert.Equal(JT809_VehiclePositionEncrypt.已加密, gnssData.Encrypt);
Assert.Equal("11111111111", gnssData.PlatformId1); Assert.Equal("11111111111", gnssData.PlatformId1);
Assert.Equal(1u, gnssData.Alarm1); Assert.Equal(1u, gnssData.Alarm1);
@@ -183,9 +190,23 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
Assert.Equal(132444444, jt808_0x0200.Lng); Assert.Equal(132444444, jt808_0x0200.Lng);
Assert.Equal(60, jt808_0x0200.Speed); Assert.Equal(60, jt808_0x0200.Speed);
Assert.Equal((uint)2, jt808_0x0200.StatusFlag); Assert.Equal((uint)2, jt808_0x0200.StatusFlag);
Assert.Equal(100, ((JT808_0x0200_0x01)jt808_0x0200.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);
Assert.Equal(55, ((JT808_0x0200_0x02)jt808_0x0200.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);
Assert.Equal(100, ((JT808_0x0200_0x01)jt808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);
Assert.Equal(55, ((JT808_0x0200_0x02)jt808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);


} }

[Fact]
public void Test_2019_5()
{
var bytes = "0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes();
string json = JT809_2019_Serializer.Analyze<JT809_0x1200_0x1202>(bytes);
}

public void Test_2019_5_Callback(byte[] bytes, Utf8JsonWriter writer, IJT809Config jT809Config)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes);
JT808.Protocol.Extensions.JT808AnalyzeExtensions.Analyze(JT808.Protocol.JT808ConfigExtensions.GetMessagePackFormatter<JT808_0x0200>(jT808Config),
ref jT808MessagePackReader, writer, jT808Config);
}
} }
} }

+ 10
- 10
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1203Test.cs Parādīt failu

@@ -24,7 +24,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
jT809_0X1200_0X1203.GNSS = new List<JT809_0x1200_0x1202>(); jT809_0X1200_0X1203.GNSS = new List<JT809_0x1200_0x1202>();


JT809_0x1200_0x1202 jT809_0X1200_0X1202_1 = new JT809_0x1200_0x1202(); JT809_0x1200_0x1202 jT809_0X1200_0X1202_1 = new JT809_0x1200_0x1202();
jT809_0X1200_0X1202_1.VehiclePosition = new VehiclePositionPropertieOf2011
jT809_0X1200_0X1202_1.VehiclePosition = new JT809VehiclePositionProperties
{ {
Day = 19, Day = 19,
Month = 7, Month = 7,
@@ -44,7 +44,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
}; };


JT809_0x1200_0x1202 jT809_0X1200_0X1202_2 = new JT809_0x1200_0x1202(); JT809_0x1200_0x1202 jT809_0X1200_0X1202_2 = new JT809_0x1200_0x1202();
jT809_0X1200_0X1202_2.VehiclePosition = new VehiclePositionPropertieOf2011
jT809_0X1200_0X1202_2.VehiclePosition = new JT809VehiclePositionProperties
{ {
Day = 19, Day = 19,
Month = 7, Month = 7,
@@ -64,7 +64,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
}; };


JT809_0x1200_0x1202 jT809_0X1200_0X1202_3 = new JT809_0x1200_0x1202(); JT809_0x1200_0x1202 jT809_0X1200_0X1202_3 = new JT809_0x1200_0x1202();
jT809_0X1200_0X1202_3.VehiclePosition = new VehiclePositionPropertieOf2011
jT809_0X1200_0X1202_3.VehiclePosition = new JT809VehiclePositionProperties
{ {
Day = 19, Day = 19,
Month = 7, Month = 7,
@@ -101,9 +101,9 @@ namespace JT809.Protocol.Test.JT809SubMessageBody


Assert.Equal(3, jT809_0X1200_0X1203.GNSSCount); Assert.Equal(3, jT809_0X1200_0X1203.GNSSCount);


var vehiclePosition1 = jT809_0X1200_0X1203.GNSS[0].VehiclePosition as VehiclePositionPropertieOf2011;
var vehiclePosition2 = jT809_0X1200_0X1203.GNSS[1].VehiclePosition as VehiclePositionPropertieOf2011;
var vehiclePosition3 = jT809_0X1200_0X1203.GNSS[2].VehiclePosition as VehiclePositionPropertieOf2011;
var vehiclePosition1 = jT809_0X1200_0X1203.GNSS[0].VehiclePosition;
var vehiclePosition2 = jT809_0X1200_0X1203.GNSS[1].VehiclePosition;
var vehiclePosition3 = jT809_0X1200_0X1203.GNSS[2].VehiclePosition;
Assert.Equal(19, vehiclePosition1.Day); Assert.Equal(19, vehiclePosition1.Day);
Assert.Equal(7, vehiclePosition1.Month); Assert.Equal(7, vehiclePosition1.Month);
Assert.Equal(2012, vehiclePosition1.Year); Assert.Equal(2012, vehiclePosition1.Year);
@@ -157,7 +157,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
jT809_0X1200_0X1203.GNSS = new List<JT809_0x1200_0x1202>(){ jT809_0X1200_0X1203.GNSS = new List<JT809_0x1200_0x1202>(){
new JT809_0x1200_0x1202 new JT809_0x1200_0x1202
{ {
VehiclePosition = new VehiclePositionPropertieOf2019
VehiclePosition_2019 = new JT809VehiclePositionProperties_2019
{ {
Encrypt = JT809_VehiclePositionEncrypt.已加密, Encrypt = JT809_VehiclePositionEncrypt.已加密,
PlatformId1 = "11111111111", PlatformId1 = "11111111111",
@@ -169,7 +169,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
} }
}, },
new JT809_0x1200_0x1202{ new JT809_0x1200_0x1202{
VehiclePosition=new VehiclePositionPropertieOf2019{
VehiclePosition_2019=new JT809VehiclePositionProperties_2019{
Encrypt = JT809_VehiclePositionEncrypt.已加密, Encrypt = JT809_VehiclePositionEncrypt.已加密,
PlatformId1 = "11111111111", PlatformId1 = "11111111111",
Alarm1 = 1, Alarm1 = 1,
@@ -192,8 +192,8 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
var bytes = "0201000000003131313131313131313131000000013232323232323232323232000000023333333333333333333333000000030100000000313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes(); var bytes = "0201000000003131313131313131313131000000013232323232323232323232000000023333333333333333333333000000030100000000313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes();
JT809_0x1200_0x1203 jT809_0X1200_0X1203 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1203>(bytes); JT809_0x1200_0x1203 jT809_0X1200_0X1203 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1203>(bytes);


var vehiclePosition1 = jT809_0X1200_0X1203.GNSS[0].VehiclePosition as VehiclePositionPropertieOf2019;
var vehiclePosition2 = jT809_0X1200_0X1203.GNSS[1].VehiclePosition as VehiclePositionPropertieOf2019;
var vehiclePosition1 = jT809_0X1200_0X1203.GNSS[0].VehiclePosition_2019;
var vehiclePosition2 = jT809_0X1200_0X1203.GNSS[1].VehiclePosition_2019;
Assert.Equal(JT809_VehiclePositionEncrypt.已加密, vehiclePosition1.Encrypt); Assert.Equal(JT809_VehiclePositionEncrypt.已加密, vehiclePosition1.Encrypt);
Assert.Equal("11111111111", vehiclePosition1.PlatformId1); Assert.Equal("11111111111", vehiclePosition1.PlatformId1);
Assert.Equal(1u, vehiclePosition1.Alarm1); Assert.Equal(1u, vehiclePosition1.Alarm1);


+ 2
- 2
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1500_0x1502Test.cs Parādīt failu

@@ -21,7 +21,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
JT809_0x1500_0x1502 jT809_0x1500_0x1502 = new JT809_0x1500_0x1502 JT809_0x1500_0x1502 jT809_0x1500_0x1502 = new JT809_0x1500_0x1502
{ {
PhotoRspFlag = JT809_0x1502_PhotoRspFlag.完成拍照, PhotoRspFlag = JT809_0x1502_PhotoRspFlag.完成拍照,
VehiclePosition = new VehiclePositionPropertieOf2011
VehiclePosition = new JT809VehiclePositionProperties
{ {
Encrypt = JT809_VehiclePositionEncrypt.未加密, Encrypt = JT809_VehiclePositionEncrypt.未加密,
Day = 19, Day = 19,
@@ -55,7 +55,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
var bytes = "01 00 13 07 07 DC 0F 0F 0F 07 EF 4D 80 01 70 18 40 00 35 00 2D 00 00 04 D2 00 2D 00 2D 00 00 00 01 00 00 00 01 7B 00 00 00 00 01 01".ToHexBytes(); var bytes = "01 00 13 07 07 DC 0F 0F 0F 07 EF 4D 80 01 70 18 40 00 35 00 2D 00 00 04 D2 00 2D 00 2D 00 00 00 01 00 00 00 01 7B 00 00 00 00 01 01".ToHexBytes();
JT809_0x1500_0x1502 jT809_0x1500_0x1502 = JT809Serializer.Deserialize<JT809_0x1500_0x1502>(bytes); JT809_0x1500_0x1502 jT809_0x1500_0x1502 = JT809Serializer.Deserialize<JT809_0x1500_0x1502>(bytes);


var vehiclePosition = jT809_0x1500_0x1502.VehiclePosition as VehiclePositionPropertieOf2011;
var vehiclePosition = jT809_0x1500_0x1502.VehiclePosition;
Assert.Equal(JT809_0x1502_PhotoRspFlag.完成拍照, jT809_0x1500_0x1502.PhotoRspFlag); Assert.Equal(JT809_0x1502_PhotoRspFlag.完成拍照, jT809_0x1500_0x1502.PhotoRspFlag);
Assert.Equal(JT809_VehiclePositionEncrypt.未加密, vehiclePosition.Encrypt); Assert.Equal(JT809_VehiclePositionEncrypt.未加密, vehiclePosition.Encrypt);
Assert.Equal(19, vehiclePosition.Day); Assert.Equal(19, vehiclePosition.Day);


+ 7
- 7
src/JT809.Protocol.Test/Simples/Demo5.cs Parādīt failu

@@ -148,20 +148,20 @@ namespace JT809.Protocol.Test.Simples
Speed = 60, Speed = 60,
Direction = 0, Direction = 0,
StatusFlag = 2, StatusFlag = 2,
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
BasicLocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
}; };
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
{ {
Mileage = 100 Mileage = 100
}); });
jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
jT808UploadLocationRequest.BasicLocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
{ {
Oil = 55 Oil = 55
}); });
var jt808_0x0200Hex = JT808_2019_Serializer.Serialize(jT808UploadLocationRequest, JT808.Protocol.Enums.JT808Version.JTT2019); var jt808_0x0200Hex = JT808_2019_Serializer.Serialize(jT808UploadLocationRequest, JT808.Protocol.Enums.JT808Version.JTT2019);


JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202(); JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202();
jT809_0X1200_0X1202.VehiclePosition = new Metadata.VehiclePositionPropertieOf2019
jT809_0X1200_0X1202.VehiclePosition_2019 = new Metadata.JT809VehiclePositionProperties_2019
{ {
Encrypt = JT809_VehiclePositionEncrypt.已加密, Encrypt = JT809_VehiclePositionEncrypt.已加密,
GnssData = jt808_0x0200Hex, GnssData = jt808_0x0200Hex,
@@ -182,7 +182,7 @@ namespace JT809.Protocol.Test.Simples
{ {
var bytes = "0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes(); var bytes = "0100000026000000010000000200BA7F0E07E4F11C0028003C000018071510101001040000006402020037313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes();
JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1202>(bytes); JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1202>(bytes);
var GNSSData = jT809_0X1200_0X1202.VehiclePosition as Metadata.VehiclePositionPropertieOf2019;
var GNSSData = jT809_0X1200_0X1202.VehiclePosition_2019;
Assert.Equal(JT809_VehiclePositionEncrypt.已加密, GNSSData.Encrypt); Assert.Equal(JT809_VehiclePositionEncrypt.已加密, GNSSData.Encrypt);
Assert.Equal("11111111111", GNSSData.PlatformId1); Assert.Equal("11111111111", GNSSData.PlatformId1);
Assert.Equal(1u, GNSSData.Alarm1); Assert.Equal(1u, GNSSData.Alarm1);
@@ -199,8 +199,8 @@ namespace JT809.Protocol.Test.Simples
Assert.Equal(132444444, jt808_0x0200.Lng); Assert.Equal(132444444, jt808_0x0200.Lng);
Assert.Equal(60, jt808_0x0200.Speed); Assert.Equal(60, jt808_0x0200.Speed);
Assert.Equal((uint)2, jt808_0x0200.StatusFlag); Assert.Equal((uint)2, jt808_0x0200.StatusFlag);
Assert.Equal(100, ((JT808_0x0200_0x01)jt808_0x0200.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);
Assert.Equal(55, ((JT808_0x0200_0x02)jt808_0x0200.JT808LocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);
Assert.Equal(100, ((JT808_0x0200_0x01)jt808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x01]).Mileage);
Assert.Equal(55, ((JT808_0x0200_0x02)jt808_0x0200.BasicLocationAttachData[JT808Constants.JT808_0x0200_0x02]).Oil);


} }




+ 2
- 1
src/JT809.Protocol/Buffers/JT809BufferWriter.cs Parādīt failu

@@ -3,7 +3,8 @@
namespace JT809.Protocol.Buffers namespace JT809.Protocol.Buffers
{ {
/// <summary> /// <summary>
/// <see cref="System.Buffers.Writer"/>
///
/// see cref System.Buffers.Writer
/// </summary> /// </summary>
ref partial struct JT809BufferWriter ref partial struct JT809BufferWriter
{ {


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

@@ -43,6 +43,10 @@ namespace JT809.Protocol
IJT809FormatterFactory FormatterFactory { get; set; } IJT809FormatterFactory FormatterFactory { get; set; }
JT809Version Version { get; set; } JT809Version Version { get; set; }
/// <summary> /// <summary>
/// JT808回调消息分析器处理
/// </summary>
Dictionary<ushort, JT808AnalyzeCallback> AnalyzeCallbacks { get; set; }
/// <summary>
/// 全局注册外部程序集 /// 全局注册外部程序集
/// </summary> /// </summary>
/// <param name="externalAssemblies"></param> /// <param name="externalAssemblies"></param>


+ 3
- 1
src/JT809.Protocol/Interfaces/JT809GlobalConfigBase.cs Parādīt failu

@@ -5,6 +5,7 @@ using JT809.Protocol.Encrypt;
using JT809.Protocol.Enums; using JT809.Protocol.Enums;
using JT809.Protocol.Internal; using JT809.Protocol.Internal;
using System; using System;
using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;


@@ -20,6 +21,7 @@ namespace JT809.Protocol.Interfaces
SubBusinessTypeFactory = new JT809SubBusinessTypeFactory(); SubBusinessTypeFactory = new JT809SubBusinessTypeFactory();
FormatterFactory = new JT809FormatterFactory(); FormatterFactory = new JT809FormatterFactory();
Version = version; Version = version;
AnalyzeCallbacks = new Dictionary<ushort, JT808AnalyzeCallback>();
} }
public abstract string ConfigId { get; } public abstract string ConfigId { get; }
public IJT809MsgSNDistributed MsgSNDistributed { get; set; }= new DefaultMsgSNDistributedImpl(); public IJT809MsgSNDistributed MsgSNDistributed { get; set; }= new DefaultMsgSNDistributedImpl();
@@ -32,7 +34,7 @@ namespace JT809.Protocol.Interfaces
public IJT809SubBusinessTypeFactory SubBusinessTypeFactory { get; set ; } public IJT809SubBusinessTypeFactory SubBusinessTypeFactory { get; set ; }
public IJT809FormatterFactory FormatterFactory { get; set; } public IJT809FormatterFactory FormatterFactory { get; set; }
public JT809Version Version { get; set; } public JT809Version Version { get; set; }
public Dictionary<ushort, JT808AnalyzeCallback> AnalyzeCallbacks { get; set; }
public virtual IJT809Config Register(params Assembly[] externalAssemblies) public virtual IJT809Config Register(params Assembly[] externalAssemblies)
{ {
if (externalAssemblies != null) if (externalAssemblies != null)


+ 1
- 1
src/JT809.Protocol/JT809.Protocol.csproj Parādīt failu

@@ -34,12 +34,12 @@
<Pack>True</Pack> <Pack>True</Pack>
<PackagePath></PackagePath> <PackagePath></PackagePath>
</None> </None>
<None Include="..\.editorconfig" Link=".editorconfig" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Remove="Constants.cs" /> <Compile Remove="Constants.cs" />
<Compile Remove="IEscape.cs" /> <Compile Remove="IEscape.cs" />
<Compile Remove="Metadata\VehiclePositionPropertieBase.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>


+ 140
- 98
src/JT809.Protocol/JT809.Protocol.xml Parādīt failu

@@ -6,7 +6,8 @@
<members> <members>
<member name="T:JT809.Protocol.Buffers.JT809BufferWriter"> <member name="T:JT809.Protocol.Buffers.JT809BufferWriter">
<summary> <summary>
<see cref="!:System.Buffers.Writer"/>
see cref System.Buffers.Writer
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Buffers.JT809BufferWriter.BeforeCodingWrittenPosition"> <member name="P:JT809.Protocol.Buffers.JT809BufferWriter.BeforeCodingWrittenPosition">
@@ -1123,6 +1124,11 @@
加密选项 加密选项
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.IJT809Config.AnalyzeCallbacks">
<summary>
JT808回调消息分析器处理
</summary>
</member>
<member name="M:JT809.Protocol.IJT809Config.Register(System.Reflection.Assembly[])"> <member name="M:JT809.Protocol.IJT809Config.Register(System.Reflection.Assembly[])">
<summary> <summary>
全局注册外部程序集 全局注册外部程序集
@@ -1148,6 +1154,17 @@
日期限制于2000年 日期限制于2000年
</summary> </summary>
</member> </member>
<member name="M:JT809.Protocol.JT809DependencyInjectionExtensions.AddJT809_JT808AnalyzeCallback(JT809.Protocol.IJT809Builder,System.UInt16,JT809.Protocol.JT808AnalyzeCallback,JT809.Protocol.Enums.JT809Version)">
<summary>
目前只支持0x0200定位
0704需要拆分出来
</summary>
<param name="builder"></param>
<param name="jt808MsgId">0x0200</param>
<param name="jt808AnalyzeCallback"></param>
<param name="version"></param>
<returns></returns>
</member>
<member name="T:JT809.Protocol.JT809ExchangeMessageBodies"> <member name="T:JT809.Protocol.JT809ExchangeMessageBodies">
<summary> <summary>
交换信息体 交换信息体
@@ -1896,227 +1913,237 @@
系统UTC时间 系统UTC时间
</summary> </summary>
</member> </member>
<member name="T:JT809.Protocol.Metadata.JT809VehicleStaticInfo">
<member name="T:JT809.Protocol.Metadata.JT809VehiclePositionProperties">
<summary> <summary>
车辆静态信息数据体
车辆定位
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.Vin">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Encrypt">
<summary> <summary>
车牌号 必填
车牌号码中不设分隔符号。所有字母数字连续保存
该字段标识传输的定位信息是否使用国家测绘局批准的地图保密插件进行加密。
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.VehicleColor">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Day">
<summary> <summary>
车牌颜色 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.VehicleType">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Month">
<summary> <summary>
车辆类型 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.TransType">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Year">
<summary> <summary>
运输行业编码 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.VehicleNationnality">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Hour">
<summary> <summary>
车籍地 必填
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.OwersId">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Minute">
<summary> <summary>
业户ID 非必填 该业户ID为下级平台存储业户信息所采用的ID编号
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.OwersName">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Second">
<summary> <summary>
业户名称 必填 运输企业名称
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.OwersTel">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Lon">
<summary> <summary>
业户联系电话 非必填 运输企业名称
经度,单位为 1*10^-6 度。
</summary> </summary>
</member> </member>
<member name="T:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Lat">
<summary> <summary>
车辆静态信息数据体
纬度,单位为 1*10^-6 度。
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.Vin">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Vec1">
<summary> <summary>
车牌号 必填
车牌号码中不设分隔符号。所有字母数字连续保存
速度,指卫星定位车载终端设备上传的行车速度信息,为必填项。单位为千米每小时(km/h)。
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.VehicleColor">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Vec2">
<summary> <summary>
车牌颜色 必填 应该使用枚举
行驶记录速度,指车辆行驶记录设备上传的行车速度 信息,为必填项。单位为千米每小时(km/h)。
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.VehicleType">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Vec3">
<summary> <summary>
车辆类型 必填 应该使用枚举
车辆当前总里程数,值车辆上传的行车里程数。单位单位为千米(km)
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.TransType">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Direction">
<summary> <summary>
运输行业编码 必填 应该使用枚举
方向,0-359,单位为度(。),正北为 0,顺时针。
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.VehicleNationnality">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Altitude">
<summary> <summary>
车籍地 必填
海拔高度,单位为米(m)。
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.BusinessCopeCode">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.State">
<summary> <summary>
经营范围代码 必填 应该使用枚举
车辆状态,二进制表示,B31B30B29。。。。。。B2B1B0.具体定义按照 JT/T808-2011 中表 17 的规定
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.OwersId">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties.Alarm">
<summary> <summary>
业户ID 非必填 该业户ID为下级平台存储业户信息所采用的ID编号
报警状态,二进制表示,0 标识正常,1 表示报警: B31B30B29 。。。。。。 B2B1B0.具 体 定 义 按 照JT/T808-2011 中表 18 的规定
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.OwersName">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.Encrypt">
<summary> <summary>
业户名称 必填 运输企业名称
是否使用国测局批准的地图保密插件进行加密 1 已加密 0未加密
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.OwersTel">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.DataLength">
<summary> <summary>
业户联系电话 非必填 运输企业名称
车辆定位信息数据长度
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Encrypt">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.GnssData">
<summary> <summary>
该字段标识传输的定位信息是否使用国家测绘局批准的地图保密插件进行加密。
车辆定位信息内容,包括车辆位置基本信息和位置附加信息
其数据格式安装 808-2019中8.12要求
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Day">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.PlatformId1">
<summary> <summary>
监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 11位
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Month">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.Alarm1">
<summary> <summary>
报警状态,二进制标识 0 正常 1表示报警
具体定义按照808-2019中表18的规定
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Year">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.PlatformId2">
<summary> <summary>
市级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
未填写时,全填0,无市级平台应由省级平台全填1 11位
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Hour">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.Alarm2">
<summary> <summary>
报警状态,二进制标识 0 正常 1表示报警
具体定义按照808-2019中表18的规定
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Minute">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.PlatformId3">
<summary> <summary>
省级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
未填写时,全填0 11位
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Second">
<member name="P:JT809.Protocol.Metadata.JT809VehiclePositionProperties_2019.Alarm3">
<summary> <summary>
报警状态,二进制标识 0 正常 1表示报警
具体定义按照808-2019中表18的规定
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Lon">
<member name="T:JT809.Protocol.Metadata.JT809VehicleStaticInfo">
<summary> <summary>
经度,单位为 1*10^-6 度。
车辆静态信息数据体
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Lat">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.Vin">
<summary> <summary>
纬度,单位为 1*10^-6 度。
车牌号 必填
车牌号码中不设分隔符号。所有字母数字连续保存
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Vec1">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.VehicleColor">
<summary> <summary>
速度,指卫星定位车载终端设备上传的行车速度信息,为必填项。单位为千米每小时(km/h)。
车牌颜色 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Vec2">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.VehicleType">
<summary> <summary>
行驶记录速度,指车辆行驶记录设备上传的行车速度 信息,为必填项。单位为千米每小时(km/h)。
车辆类型 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Vec3">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.TransType">
<summary> <summary>
车辆当前总里程数,值车辆上传的行车里程数。单位单位为千米(km)
运输行业编码 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Direction">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.VehicleNationnality">
<summary> <summary>
方向,0-359,单位为度(。),正北为 0,顺时针。
车籍地 必填
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Altitude">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.OwersId">
<summary> <summary>
海拔高度,单位为米(m)。
业户ID 非必填 该业户ID为下级平台存储业户信息所采用的ID编号
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.State">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.OwersName">
<summary> <summary>
车辆状态,二进制表示,B31B30B29。。。。。。B2B1B0.具体定义按照 JT/T808-2011 中表 17 的规定
业户名称 必填 运输企业名称
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2011.Alarm">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo.OwersTel">
<summary> <summary>
报警状态,二进制表示,0 标识正常,1 表示报警: B31B30B29 。。。。。。 B2B1B0.具 体 定 义 按 照JT/T808-2011 中表 18 的规定
业户联系电话 非必填 运输企业名称
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2019.Encrypt">
<member name="T:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019">
<summary> <summary>
是否使用国测局批准的地图保密插件进行加密 1 已加密 0未加密
车辆静态信息数据体
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2019.GnssData">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.Vin">
<summary> <summary>
辆定位信息内容,包括车辆位置基本信息和位置附加信息
其数据格式安装 808-2019中8.12要求
牌号 必填
车牌号码中不设分隔符号。所有字母数字连续保存
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2019.PlatformId1">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.VehicleColor">
<summary> <summary>
监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 11位
车牌颜色 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2019.Alarm1">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.VehicleType">
<summary> <summary>
报警状态,二进制标识 0 正常 1表示报警
具体定义按照808-2019中表18的规定
车辆类型 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2019.PlatformId2">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.TransType">
<summary> <summary>
市级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
未填写时,全填0,无市级平台应由省级平台全填1 11位
运输行业编码 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2019.Alarm2">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.VehicleNationnality">
<summary> <summary>
报警状态,二进制标识 0 正常 1表示报警
具体定义按照808-2019中表18的规定
车籍地 必填
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2019.PlatformId3">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.BusinessCopeCode">
<summary> <summary>
省级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
未填写时,全填0 11位
经营范围代码 必填 应该使用枚举
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.Metadata.VehiclePositionPropertieOf2019.Alarm3">
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.OwersId">
<summary> <summary>
报警状态,二进制标识 0 正常 1表示报警
具体定义按照808-2019中表18的规定
业户ID 非必填 该业户ID为下级平台存储业户信息所采用的ID编号
</summary>
</member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.OwersName">
<summary>
业户名称 必填 运输企业名称
</summary>
</member>
<member name="P:JT809.Protocol.Metadata.JT809VehicleStaticInfo_2019.OwersTel">
<summary>
业户联系电话 非必填 运输企业名称
</summary> </summary>
</member> </member>
<member name="T:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201"> <member name="T:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201">
@@ -2168,7 +2195,12 @@
</member> </member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202.VehiclePosition"> <member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202.VehiclePosition">
<summary> <summary>
车辆定位信息
车辆定位信息 2011版本
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202.VehiclePosition_2019">
<summary>
车辆定位信息 2019版本
</summary> </summary>
</member> </member>
<member name="T:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203"> <member name="T:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203">
@@ -2815,7 +2847,12 @@
</member> </member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502.VehiclePosition"> <member name="P:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502.VehiclePosition">
<summary> <summary>
车辆定位信息
车辆定位信息 2011版本
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502.VehiclePosition_2019">
<summary>
车辆定位信息 2019版本
</summary> </summary>
</member> </member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502.LensID"> <member name="P:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502.LensID">
@@ -2997,7 +3034,12 @@
</member> </member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202.VehiclePosition"> <member name="P:JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202.VehiclePosition">
<summary> <summary>
车辆定位信息
车辆定位信息 2011版本
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202.VehiclePosition_2019">
<summary>
车辆定位信息 2019版本
</summary> </summary>
</member> </member>
<member name="T:JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203"> <member name="T:JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203">


+ 15
- 0
src/JT809.Protocol/JT809DependencyInjectionExtensions.cs Parādīt failu

@@ -24,5 +24,20 @@ namespace JT809.Protocol
services.AddSingleton<IJT809Config>(config); services.AddSingleton<IJT809Config>(config);
return new DefaultBuilder(services, config); return new DefaultBuilder(services, config);
} }

/// <summary>
/// 目前只支持0x0200定位
/// 0704需要拆分出来
/// </summary>
/// <param name="builder"></param>
/// <param name="jt808MsgId">0x0200</param>
/// <param name="jt808AnalyzeCallback"></param>
/// <param name="version"></param>
/// <returns></returns>
public static IJT809Builder AddJT809_JT808AnalyzeCallback(this IJT809Builder builder, ushort jt808MsgId, JT808AnalyzeCallback jt808AnalyzeCallback,JT809Version version = JT809Version.JTT2011)
{
builder.Config.AnalyzeCallbacks.Add(jt808MsgId, jt808AnalyzeCallback);
return builder;
}
} }
} }

+ 9
- 0
src/JT809.Protocol/JT809_JT808AnalyzeCallback.cs Parādīt failu

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

namespace JT809.Protocol
{
public delegate void JT808AnalyzeCallback(byte[] bytes, Utf8JsonWriter writer,IJT809Config jT809Config);
}

+ 162
- 77
src/JT809.Protocol/Metadata/JT809VehiclePositionProperties.cs Parādīt failu

@@ -1,78 +1,163 @@
// using JT809.Protocol.Enums;
// using System;
// using System.Collections.Generic;
// using System.Text;
using JT809.Protocol.Enums;
using JT809.Protocol.Extensions;
using JT809.Protocol.Formatters;
using JT809.Protocol.Interfaces;
using JT809.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;


// namespace JT809.Protocol.Metadata
// {
// /// <summary>
// /// 车辆定位
// /// </summary>
// public class JT809VehiclePositionProperties
// {
// /// <summary>
// /// 该字段标识传输的定位信息是否使用国家测绘局批准的地图保密插件进行加密。
// /// </summary>
// public JT809_VehiclePositionEncrypt Encrypt { get; set; }
// /// <summary>
// /// 日
// /// </summary>
// public byte Day { get; set; }
// /// <summary>
// /// 月
// /// </summary>
// public byte Month { get; set; }
// /// <summary>
// /// 年
// /// </summary>
// public ushort Year { get; set; }
// /// <summary>
// /// 时
// /// </summary>
// public byte Hour { get; set; }
// /// <summary>
// /// 分
// /// </summary>
// public byte Minute { get; set; }
// /// <summary>
// /// 秒
// /// </summary>
// public byte Second { get; set; }
// /// <summary>
// /// 经度,单位为 1*10^-6 度。
// /// </summary>
// public uint Lon { get; set; }
// /// <summary>
// /// 纬度,单位为 1*10^-6 度。
// /// </summary>
// public uint Lat { get; set; }
// /// <summary>
// /// 速度,指卫星定位车载终端设备上传的行车速度信息,为必填项。单位为千米每小时(km/h)。
// /// </summary>
// public ushort Vec1 { get; set; }
// /// <summary>
// /// 行驶记录速度,指车辆行驶记录设备上传的行车速度 信息,为必填项。单位为千米每小时(km/h)。
// /// </summary>
// public ushort Vec2 { get; set; }
// /// <summary>
// /// 车辆当前总里程数,值车辆上传的行车里程数。单位单位为千米(km)
// /// </summary>
// public uint Vec3 { get; set; }
// /// <summary>
// /// 方向,0-359,单位为度(。),正北为 0,顺时针。
// /// </summary>
// public ushort Direction { get; set; }
// /// <summary>
// /// 海拔高度,单位为米(m)。
// /// </summary>
// public ushort Altitude { get; set; }
// /// <summary>
// /// 车辆状态,二进制表示,B31B30B29。。。。。。B2B1B0.具体定义按照 JT/T808-2011 中表 17 的规定
// /// </summary>
// public uint State { get; set; }
// /// <summary>
// /// 报警状态,二进制表示,0 标识正常,1 表示报警: B31B30B29 。。。。。。 B2B1B0.具 体 定 义 按 照JT/T808-2011 中表 18 的规定
// /// </summary>
// public uint Alarm { get; set; }
// }
// }
namespace JT809.Protocol.Metadata
{
/// <summary>
/// 车辆定位
/// </summary>
public class JT809VehiclePositionProperties : IJT809MessagePackFormatter<JT809VehiclePositionProperties>, IJT809Analyze
{
/// <summary>
/// 该字段标识传输的定位信息是否使用国家测绘局批准的地图保密插件进行加密。
/// </summary>
public JT809_VehiclePositionEncrypt Encrypt { get; set; }
/// <summary>
/// 日
/// </summary>
public byte Day { get; set; }
/// <summary>
/// 月
/// </summary>
public byte Month { get; set; }
/// <summary>
/// 年
/// </summary>
public ushort Year { get; set; }
/// <summary>
/// 时
/// </summary>
public byte Hour { get; set; }
/// <summary>
/// 分
/// </summary>
public byte Minute { get; set; }
/// <summary>
/// 秒
/// </summary>
public byte Second { get; set; }
/// <summary>
/// 经度,单位为 1*10^-6 度。
/// </summary>
public uint Lon { get; set; }
/// <summary>
/// 纬度,单位为 1*10^-6 度。
/// </summary>
public uint Lat { get; set; }
/// <summary>
/// 速度,指卫星定位车载终端设备上传的行车速度信息,为必填项。单位为千米每小时(km/h)。
/// </summary>
public ushort Vec1 { get; set; }
/// <summary>
/// 行驶记录速度,指车辆行驶记录设备上传的行车速度 信息,为必填项。单位为千米每小时(km/h)。
/// </summary>
public ushort Vec2 { get; set; }
/// <summary>
/// 车辆当前总里程数,值车辆上传的行车里程数。单位单位为千米(km)
/// </summary>
public uint Vec3 { get; set; }
/// <summary>
/// 方向,0-359,单位为度(。),正北为 0,顺时针。
/// </summary>
public ushort Direction { get; set; }
/// <summary>
/// 海拔高度,单位为米(m)。
/// </summary>
public ushort Altitude { get; set; }
/// <summary>
/// 车辆状态,二进制表示,B31B30B29。。。。。。B2B1B0.具体定义按照 JT/T808-2011 中表 17 的规定
/// </summary>
public uint State { get; set; }
/// <summary>
/// 报警状态,二进制表示,0 标识正常,1 表示报警: B31B30B29 。。。。。。 B2B1B0.具 体 定 义 按 照JT/T808-2011 中表 18 的规定
/// </summary>
public uint Alarm { get; set; }
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{
writer.WriteStartObject("车辆定位信息");
var VehiclePosition = new JT809VehiclePositionProperties();
VehiclePosition.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte();
writer.WriteString($"[{VehiclePosition.Encrypt.ToByteValue()}]是否使用国家测绘局批准的地图保密插件进行加密", VehiclePosition.Encrypt.ToString());
VehiclePosition.Day = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Day.ReadNumber()}]日", VehiclePosition.Day);
VehiclePosition.Month = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Month.ReadNumber()}]月", VehiclePosition.Month);
VehiclePosition.Year = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Year.ReadNumber()}]年", VehiclePosition.Year);
VehiclePosition.Hour = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Hour.ReadNumber()}]时", VehiclePosition.Hour);
VehiclePosition.Minute = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Minute.ReadNumber()}]分", VehiclePosition.Minute);
VehiclePosition.Second = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Second.ReadNumber()}]秒", VehiclePosition.Second);
VehiclePosition.Lon = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.Lon.ReadNumber()}]经度", VehiclePosition.Lon);
VehiclePosition.Lat = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.Lat.ReadNumber()}]经度", VehiclePosition.Lat);
VehiclePosition.Vec1 = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Vec1.ReadNumber()}]速度", VehiclePosition.Vec1);
VehiclePosition.Vec2 = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Vec2.ReadNumber()}]行驶记录仪速度", VehiclePosition.Vec2);
VehiclePosition.Vec3 = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.Vec3.ReadNumber()}]车辆当前总里程数", VehiclePosition.Vec3);
VehiclePosition.Direction = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Direction.ReadNumber()}]方向", VehiclePosition.Direction);
VehiclePosition.Altitude = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Altitude.ReadNumber()}]海拔高度", VehiclePosition.Altitude);
VehiclePosition.State = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.State.ReadNumber()}]车辆状态", VehiclePosition.State);
VehiclePosition.Alarm = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.Alarm.ReadNumber()}]报警", VehiclePosition.Alarm);
writer.WriteEndObject();
}
public JT809VehiclePositionProperties Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
JT809VehiclePositionProperties value = new JT809VehiclePositionProperties
{
Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte(),
Day = reader.ReadByte(),
Month = reader.ReadByte(),
Year = reader.ReadUInt16(),
Hour = reader.ReadByte(),
Minute = reader.ReadByte(),
Second = reader.ReadByte(),
Lon = reader.ReadUInt32(),
Lat = reader.ReadUInt32(),
Vec1 = reader.ReadUInt16(),
Vec2 = reader.ReadUInt16(),
Vec3 = reader.ReadUInt32(),
Direction = reader.ReadUInt16(),
Altitude = reader.ReadUInt16(),
State = reader.ReadUInt32(),
Alarm = reader.ReadUInt32(),
};
return value;
}
public void Serialize(ref JT809MessagePackWriter writer, JT809VehiclePositionProperties value, IJT809Config config)
{
writer.WriteByte((byte)value.Encrypt);
writer.WriteByte(value.Day);
writer.WriteByte(value.Month);
writer.WriteUInt16(value.Year);
writer.WriteByte(value.Hour);
writer.WriteByte(value.Minute);
writer.WriteByte(value.Second);
writer.WriteUInt32(value.Lon);
writer.WriteUInt32(value.Lat);
writer.WriteUInt16(value.Vec1);
writer.WriteUInt16(value.Vec2);
writer.WriteUInt32(value.Vec3);
writer.WriteUInt16(value.Direction);
writer.WriteUInt16(value.Altitude);
writer.WriteUInt32(value.State);
writer.WriteUInt32(value.Alarm);
}
}
}

+ 120
- 52
src/JT809.Protocol/Metadata/JT809VehiclePositionProperties_2019.cs Parādīt failu

@@ -1,53 +1,121 @@
// using JT809.Protocol.Enums;
// using System;
// using System.Collections.Generic;
// using System.Text;
using JT809.Protocol.Enums;
using JT809.Protocol.Extensions;
using JT809.Protocol.Formatters;
using JT809.Protocol.Interfaces;
using JT809.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;


// namespace JT809.Protocol.Metadata
// {
// public class JT809VehiclePositionProperties_2019
// {
// /// <summary>
// /// 是否使用国测局批准的地图保密插件进行加密 1 已加密 0未加密
// /// </summary>
// public JT809_VehiclePositionEncrypt Encrypt { get; set; }
// /// <summary>
// /// 车辆定位信息数据长度
// /// </summary>
// public uint DataLength { get; set; }
// /// <summary>
// /// 车辆定位信息内容,包括车辆位置基本信息和位置附加信息
// /// 其数据格式安装 808-2019中8.12要求
// /// </summary>
// public byte[] GnssData { get; set; }
// /// <summary>
// /// 监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 11位
// /// </summary>
// public string PlatformId1 { get; set; }
// /// <summary>
// /// 报警状态,二进制标识 0 正常 1表示报警
// /// 具体定义按照808-2019中表18的规定
// /// </summary>
// public uint Alarm1 { get; set; }
// /// <summary>
// /// 市级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
// /// 未填写时,全填0,无市级平台应由省级平台全填1 11位
// /// </summary>
// public string PlatformId2 { get; set; }
// /// <summary>
// /// 报警状态,二进制标识 0 正常 1表示报警
// /// 具体定义按照808-2019中表18的规定
// /// </summary>
// public uint Alarm2 { get; set; }
// /// <summary>
// /// 省级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
// /// 未填写时,全填0 11位
// /// </summary>
// public string PlatformId3 { get; set; }
// /// <summary>
// /// 报警状态,二进制标识 0 正常 1表示报警
// /// 具体定义按照808-2019中表18的规定
// /// </summary>
// public uint Alarm3 { get; set; }
// }
// }
namespace JT809.Protocol.Metadata
{
public class JT809VehiclePositionProperties_2019:IJT809MessagePackFormatter<JT809VehiclePositionProperties_2019>, IJT809Analyze, IJT809_2019_Version
{
/// <summary>
/// 是否使用国测局批准的地图保密插件进行加密 1 已加密 0未加密
/// </summary>
public JT809_VehiclePositionEncrypt Encrypt { get; set; }
/// <summary>
/// 车辆定位信息数据长度
/// </summary>
public uint DataLength { get; set; }
/// <summary>
/// 车辆定位信息内容,包括车辆位置基本信息和位置附加信息
/// 其数据格式安装 808-2019中8.12要求
/// </summary>
public byte[] GnssData { get; set; }
/// <summary>
/// 监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 11位
/// </summary>
public string PlatformId1 { get; set; }
/// <summary>
/// 报警状态,二进制标识 0 正常 1表示报警
/// 具体定义按照808-2019中表18的规定
/// </summary>
public uint Alarm1 { get; set; }
/// <summary>
/// 市级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
/// 未填写时,全填0,无市级平台应由省级平台全填1 11位
/// </summary>
public string PlatformId2 { get; set; }
/// <summary>
/// 报警状态,二进制标识 0 正常 1表示报警
/// 具体定义按照808-2019中表18的规定
/// </summary>
public uint Alarm2 { get; set; }
/// <summary>
/// 省级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
/// 未填写时,全填0 11位
/// </summary>
public string PlatformId3 { get; set; }
/// <summary>
/// 报警状态,二进制标识 0 正常 1表示报警
/// 具体定义按照808-2019中表18的规定
/// </summary>
public uint Alarm3 { get; set; }

public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{
writer.WriteStartObject("车辆定位信息_2019");
var GNSSData = new JT809VehiclePositionProperties_2019();
GNSSData.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte();
writer.WriteString($"[{GNSSData.Encrypt.ToByteValue()}]是否使用国家测绘局批准的地图保密插件进行加密", GNSSData.Encrypt.ToString());
var gnssDataLength = reader.ReadUInt32();
writer.WriteNumber($"[{gnssDataLength.ReadNumber()}]车辆定位信息数据长度", gnssDataLength);
if(config.AnalyzeCallbacks.TryGetValue(0x0200,out JT808AnalyzeCallback jT808AnalyzeCallback))
{
jT808AnalyzeCallback(reader.ReadArray((int)gnssDataLength).ToArray(), writer, config);
}
else
{
GNSSData.GnssData = reader.ReadArray((int)gnssDataLength).ToArray();
writer.WriteString($"[{GNSSData.GnssData.ToHexString()}]车辆定位信息内容", GNSSData.GnssData.ToHexString());
}
var virtualHex = reader.ReadVirtualArray(11);
GNSSData.PlatformId1 = reader.ReadString(11);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]监控平台唯一编码", GNSSData.PlatformId1);
GNSSData.Alarm1 = reader.ReadUInt32();
writer.WriteNumber($"[{GNSSData.Alarm1.ReadNumber()}]报警状态1", GNSSData.Alarm1);
virtualHex = reader.ReadVirtualArray(11);
GNSSData.PlatformId2 = reader.ReadString(11);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]市级监控平台唯一编码", GNSSData.PlatformId2);
GNSSData.Alarm2 = reader.ReadUInt32();
writer.WriteNumber($"[{GNSSData.Alarm1.ReadNumber()}]报警状态2", GNSSData.Alarm2);
virtualHex = reader.ReadVirtualArray(11);
GNSSData.PlatformId3 = reader.ReadString(11);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]省级监控平台唯一编码", GNSSData.PlatformId3);
GNSSData.Alarm3 = reader.ReadUInt32();
writer.WriteNumber($"[{GNSSData.Alarm1.ReadNumber()}]报警状态3", GNSSData.Alarm3);
writer.WriteEndObject();
}
public JT809VehiclePositionProperties_2019 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
JT809VehiclePositionProperties_2019 value = new JT809VehiclePositionProperties_2019
{
Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte(),
GnssData = reader.ReadArray((int)reader.ReadUInt32()).ToArray(),
PlatformId1 = reader.ReadString(11),
Alarm1 = reader.ReadUInt32(),
PlatformId2 = reader.ReadString(11),
Alarm2 = reader.ReadUInt32(),
PlatformId3 = reader.ReadString(11),
Alarm3 = reader.ReadUInt32(),
};
return value;
}
public void Serialize(ref JT809MessagePackWriter writer, JT809VehiclePositionProperties_2019 value, IJT809Config config)
{
writer.WriteByte((byte)value.Encrypt);
writer.Skip(4, out int position);
writer.WriteArray(value.GnssData);
writer.WriteUInt32Return((uint)(writer.GetCurrentPosition() - position - 4), position);
writer.WriteStringPadRight(value.PlatformId1, 11);
writer.WriteUInt32(value.Alarm1);
writer.WriteStringPadRight(value.PlatformId2, 11);
writer.WriteUInt32(value.Alarm2);
writer.WriteStringPadRight(value.PlatformId3, 11);
writer.WriteUInt32(value.Alarm3);
}
}
}

+ 0
- 260
src/JT809.Protocol/Metadata/VehiclePositionPropertieBase.cs Parādīt failu

@@ -1,260 +0,0 @@
using System.Text.Json;
using JT809.Protocol.Enums;
using JT809.Protocol.Exceptions;
using JT809.Protocol.Extensions;
using JT809.Protocol.MessagePack;

namespace JT809.Protocol.Metadata
{
public abstract class VehiclePositionPropertieBase
{
public static void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{
if (config.Version == JT809Version.JTT2011)
{
var VehiclePosition = new VehiclePositionPropertieOf2011();
VehiclePosition.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte();
writer.WriteString($"[{VehiclePosition.Encrypt.ToByteValue()}]是否使用国家测绘局批准的地图保密插件进行加密", VehiclePosition.Encrypt.ToString());
VehiclePosition.Day = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Day.ReadNumber()}]日", VehiclePosition.Day);
VehiclePosition.Month = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Month.ReadNumber()}]月", VehiclePosition.Month);
VehiclePosition.Year = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Year.ReadNumber()}]年", VehiclePosition.Year);
VehiclePosition.Hour = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Hour.ReadNumber()}]时", VehiclePosition.Hour);
VehiclePosition.Minute = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Minute.ReadNumber()}]分", VehiclePosition.Minute);
VehiclePosition.Second = reader.ReadByte();
writer.WriteNumber($"[{VehiclePosition.Second.ReadNumber()}]秒", VehiclePosition.Second);
VehiclePosition.Lon = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.Lon.ReadNumber()}]经度", VehiclePosition.Lon);
VehiclePosition.Lat = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.Lat.ReadNumber()}]经度", VehiclePosition.Lat);
VehiclePosition.Vec1 = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Vec1.ReadNumber()}]速度", VehiclePosition.Vec1);
VehiclePosition.Vec2 = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Vec2.ReadNumber()}]行驶记录仪速度", VehiclePosition.Vec2);
VehiclePosition.Vec3 = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.Vec3.ReadNumber()}]车辆当前总里程数", VehiclePosition.Vec3);
VehiclePosition.Direction = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Direction.ReadNumber()}]方向", VehiclePosition.Direction);
VehiclePosition.Altitude = reader.ReadUInt16();
writer.WriteNumber($"[{VehiclePosition.Altitude.ReadNumber()}]海拔高度", VehiclePosition.Altitude);
VehiclePosition.State = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.State.ReadNumber()}]车辆状态", VehiclePosition.State);
VehiclePosition.Alarm = reader.ReadUInt32();
writer.WriteNumber($"[{VehiclePosition.Alarm.ReadNumber()}]报警", VehiclePosition.Alarm);
}
else
{
var GNSSData = new VehiclePositionPropertieOf2019();
GNSSData.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte();
writer.WriteString($"[{GNSSData.Encrypt.ToByteValue()}]是否使用国家测绘局批准的地图保密插件进行加密", GNSSData.Encrypt.ToString());
var gnssDataLength = reader.ReadUInt32();
writer.WriteNumber($"[{gnssDataLength.ReadNumber()}]车辆定位信息数据长度", gnssDataLength);
GNSSData.GnssData = reader.ReadArray((int)gnssDataLength).ToArray();
writer.WriteString($"[{GNSSData.GnssData.ToHexString()}]车辆定位信息内容", GNSSData.GnssData.ToHexString());
var virtualHex = reader.ReadVirtualArray(11);
GNSSData.PlatformId1 = reader.ReadString(11);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]监控平台唯一编码", GNSSData.PlatformId1);
GNSSData.Alarm1 = reader.ReadUInt32();
writer.WriteNumber($"[{GNSSData.Alarm1.ReadNumber()}]报警状态1", GNSSData.Alarm1);
virtualHex = reader.ReadVirtualArray(11);
GNSSData.PlatformId2 = reader.ReadString(11);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]市级监控平台唯一编码", GNSSData.PlatformId2);
GNSSData.Alarm2 = reader.ReadUInt32();
writer.WriteNumber($"[{GNSSData.Alarm1.ReadNumber()}]报警状态2", GNSSData.Alarm2);
virtualHex = reader.ReadVirtualArray(11);
GNSSData.PlatformId3 = reader.ReadString(11);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]省级监控平台唯一编码", GNSSData.PlatformId3);
GNSSData.Alarm3 = reader.ReadUInt32();
writer.WriteNumber($"[{GNSSData.Alarm1.ReadNumber()}]报警状态3", GNSSData.Alarm3);
}
}

public static VehiclePositionPropertieBase Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
return config.Version switch
{
JT809Version.JTT2011 => new VehiclePositionPropertieOf2011
{
Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte(),
Day = reader.ReadByte(),
Month = reader.ReadByte(),
Year = reader.ReadUInt16(),
Hour = reader.ReadByte(),
Minute = reader.ReadByte(),
Second = reader.ReadByte(),
Lon = reader.ReadUInt32(),
Lat = reader.ReadUInt32(),
Vec1 = reader.ReadUInt16(),
Vec2 = reader.ReadUInt16(),
Vec3 = reader.ReadUInt32(),
Direction = reader.ReadUInt16(),
Altitude = reader.ReadUInt16(),
State = reader.ReadUInt32(),
Alarm = reader.ReadUInt32(),
},
JT809Version.JTT2019 => new VehiclePositionPropertieOf2019
{
Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte(),
GnssData = reader.ReadArray((int)reader.ReadUInt32()).ToArray(),
PlatformId1 = reader.ReadString(11),
Alarm1 = reader.ReadUInt32(),
PlatformId2 = reader.ReadString(11),
Alarm2 = reader.ReadUInt32(),
PlatformId3 = reader.ReadString(11),
Alarm3 = reader.ReadUInt32(),
},
_ => throw new JT809Exception(JT809ErrorCode.IllegalArgument, "根据版本解析车辆位置信息时检测到不支持的版本")
};
}
public static void Serialize(ref JT809MessagePackWriter writer, VehiclePositionPropertieBase value, IJT809Config config)
{
switch (value)
{
case VehiclePositionPropertieOf2011 vehiclePositionPropertieOf2011:

writer.WriteByte((byte)vehiclePositionPropertieOf2011.Encrypt);
writer.WriteByte(vehiclePositionPropertieOf2011.Day);
writer.WriteByte(vehiclePositionPropertieOf2011.Month);
writer.WriteUInt16(vehiclePositionPropertieOf2011.Year);
writer.WriteByte(vehiclePositionPropertieOf2011.Hour);
writer.WriteByte(vehiclePositionPropertieOf2011.Minute);
writer.WriteByte(vehiclePositionPropertieOf2011.Second);
writer.WriteUInt32(vehiclePositionPropertieOf2011.Lon);
writer.WriteUInt32(vehiclePositionPropertieOf2011.Lat);
writer.WriteUInt16(vehiclePositionPropertieOf2011.Vec1);
writer.WriteUInt16(vehiclePositionPropertieOf2011.Vec2);
writer.WriteUInt32(vehiclePositionPropertieOf2011.Vec3);
writer.WriteUInt16(vehiclePositionPropertieOf2011.Direction);
writer.WriteUInt16(vehiclePositionPropertieOf2011.Altitude);
writer.WriteUInt32(vehiclePositionPropertieOf2011.State);
writer.WriteUInt32(vehiclePositionPropertieOf2011.Alarm);
break;
case VehiclePositionPropertieOf2019 vehiclePositionPropertieOf2019:
writer.WriteByte((byte)vehiclePositionPropertieOf2019.Encrypt);
writer.Skip(4, out int position);
writer.WriteArray(vehiclePositionPropertieOf2019.GnssData);
writer.WriteUInt32Return((uint)(writer.GetCurrentPosition() - position - 4), position);
writer.WriteStringPadRight(vehiclePositionPropertieOf2019.PlatformId1, 11);
writer.WriteUInt32(vehiclePositionPropertieOf2019.Alarm1);
writer.WriteStringPadRight(vehiclePositionPropertieOf2019.PlatformId2, 11);
writer.WriteUInt32(vehiclePositionPropertieOf2019.Alarm2);
writer.WriteStringPadRight(vehiclePositionPropertieOf2019.PlatformId3, 11);
writer.WriteUInt32(vehiclePositionPropertieOf2019.Alarm3);
break;
default: throw new JT809Exception(JT809ErrorCode.IllegalArgument, "根据版本解析车辆位置信息时检测到不支持的版本");
}
}
}
public class VehiclePositionPropertieOf2011 : VehiclePositionPropertieBase
{
/// <summary>
/// 该字段标识传输的定位信息是否使用国家测绘局批准的地图保密插件进行加密。
/// </summary>
public JT809_VehiclePositionEncrypt Encrypt { get; set; }
/// <summary>
/// 日
/// </summary>
public byte Day { get; set; }
/// <summary>
/// 月
/// </summary>
public byte Month { get; set; }
/// <summary>
/// 年
/// </summary>
public ushort Year { get; set; }
/// <summary>
/// 时
/// </summary>
public byte Hour { get; set; }
/// <summary>
/// 分
/// </summary>
public byte Minute { get; set; }
/// <summary>
/// 秒
/// </summary>
public byte Second { get; set; }
/// <summary>
/// 经度,单位为 1*10^-6 度。
/// </summary>
public uint Lon { get; set; }
/// <summary>
/// 纬度,单位为 1*10^-6 度。
/// </summary>
public uint Lat { get; set; }
/// <summary>
/// 速度,指卫星定位车载终端设备上传的行车速度信息,为必填项。单位为千米每小时(km/h)。
/// </summary>
public ushort Vec1 { get; set; }
/// <summary>
/// 行驶记录速度,指车辆行驶记录设备上传的行车速度 信息,为必填项。单位为千米每小时(km/h)。
/// </summary>
public ushort Vec2 { get; set; }
/// <summary>
/// 车辆当前总里程数,值车辆上传的行车里程数。单位单位为千米(km)
/// </summary>
public uint Vec3 { get; set; }
/// <summary>
/// 方向,0-359,单位为度(。),正北为 0,顺时针。
/// </summary>
public ushort Direction { get; set; }
/// <summary>
/// 海拔高度,单位为米(m)。
/// </summary>
public ushort Altitude { get; set; }
/// <summary>
/// 车辆状态,二进制表示,B31B30B29。。。。。。B2B1B0.具体定义按照 JT/T808-2011 中表 17 的规定
/// </summary>
public uint State { get; set; }
/// <summary>
/// 报警状态,二进制表示,0 标识正常,1 表示报警: B31B30B29 。。。。。。 B2B1B0.具 体 定 义 按 照JT/T808-2011 中表 18 的规定
/// </summary>
public uint Alarm { get; set; }
}
public class VehiclePositionPropertieOf2019 : VehiclePositionPropertieBase
{
/// <summary>
/// 是否使用国测局批准的地图保密插件进行加密 1 已加密 0未加密
/// </summary>
public JT809_VehiclePositionEncrypt Encrypt { get; set; }
/// <summary>
/// 车辆定位信息内容,包括车辆位置基本信息和位置附加信息
/// 其数据格式安装 808-2019中8.12要求
/// </summary>
public byte[] GnssData { get; set; }
/// <summary>
/// 监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 11位
/// </summary>
public string PlatformId1 { get; set; }
/// <summary>
/// 报警状态,二进制标识 0 正常 1表示报警
/// 具体定义按照808-2019中表18的规定
/// </summary>
public uint Alarm1 { get; set; }
/// <summary>
/// 市级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
/// 未填写时,全填0,无市级平台应由省级平台全填1 11位
/// </summary>
public string PlatformId2 { get; set; }
/// <summary>
/// 报警状态,二进制标识 0 正常 1表示报警
/// 具体定义按照808-2019中表18的规定
/// </summary>
public uint Alarm2 { get; set; }
/// <summary>
/// 省级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成
/// 未填写时,全填0 11位
/// </summary>
public string PlatformId3 { get; set; }
/// <summary>
/// 报警状态,二进制标识 0 正常 1表示报警
/// 具体定义按照808-2019中表18的规定
/// </summary>
public uint Alarm3 { get; set; }
}
}

+ 36
- 8
src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1202.cs Parādīt failu

@@ -20,28 +20,56 @@ namespace JT809.Protocol.SubMessageBody


public override string Description => "实时上传车辆定位信息"; public override string Description => "实时上传车辆定位信息";
/// <summary> /// <summary>
/// 车辆定位信息
/// 车辆定位信息 2011版本
/// </summary> /// </summary>
public VehiclePositionPropertieBase VehiclePosition { get; set; }
public JT809VehiclePositionProperties VehiclePosition { get; set; }
/// <summary>
/// 车辆定位信息 2019版本
/// </summary>
public JT809VehiclePositionProperties_2019 VehiclePosition_2019 { get; set; }


public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{ {
JT809_0x1200_0x1202 value = new JT809_0x1200_0x1202();
writer.WriteStartObject("车辆定位信息");
VehiclePositionPropertieBase.Analyze(ref reader, writer, config);
writer.WriteEndObject();
if(config.Version== JT809Version.JTT2011)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Analyze(ref reader, writer, config);
}
else if(config.Version == JT809Version.JTT2019)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Analyze(ref reader, writer, config);
}
} }


public JT809_0x1200_0x1202 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) public JT809_0x1200_0x1202 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{ {
JT809_0x1200_0x1202 value = new JT809_0x1200_0x1202(); JT809_0x1200_0x1202 value = new JT809_0x1200_0x1202();
value.VehiclePosition = VehiclePositionPropertieBase.Deserialize(ref reader, config);
if (config.Version == JT809Version.JTT2011)
{
value.VehiclePosition = config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Deserialize(ref reader, config);
}
else if(config.Version == JT809Version.JTT2019)
{
value.VehiclePosition_2019 = config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Deserialize(ref reader, config);
}
return value; return value;
} }


public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1200_0x1202 value, IJT809Config config) public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1200_0x1202 value, IJT809Config config)
{ {
VehiclePositionPropertieBase.Serialize(ref writer, value.VehiclePosition, config);
if (config.Version == JT809Version.JTT2011)
{
if (value.VehiclePosition != null)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Serialize(ref writer, value.VehiclePosition, config);
}
}
else if (config.Version == JT809Version.JTT2019)
{
if (value.VehiclePosition_2019 != null)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Serialize(ref writer, value.VehiclePosition_2019, config);
}
}
} }
} }
} }

+ 36
- 7
src/JT809.Protocol/SubMessageBody/JT809_0x1500_0x1502.cs Parādīt failu

@@ -27,9 +27,13 @@ namespace JT809.Protocol.SubMessageBody
public JT809_0x1502_PhotoRspFlag PhotoRspFlag { get; set; } public JT809_0x1502_PhotoRspFlag PhotoRspFlag { get; set; }


/// <summary> /// <summary>
/// 车辆定位信息
/// 车辆定位信息 2011版本
/// </summary> /// </summary>
public VehiclePositionPropertieBase VehiclePosition { get; set; }
public JT809VehiclePositionProperties VehiclePosition { get; set; }
/// <summary>
/// 车辆定位信息 2019版本
/// </summary>
public JT809VehiclePositionProperties_2019 VehiclePosition_2019 { get; set; }
/// <summary> /// <summary>
/// 镜头ID /// 镜头ID
/// </summary> /// </summary>
@@ -56,9 +60,14 @@ namespace JT809.Protocol.SubMessageBody
JT809_0x1500_0x1502 value = new JT809_0x1500_0x1502(); JT809_0x1500_0x1502 value = new JT809_0x1500_0x1502();
value.PhotoRspFlag = (JT809_0x1502_PhotoRspFlag)reader.ReadByte(); value.PhotoRspFlag = (JT809_0x1502_PhotoRspFlag)reader.ReadByte();
writer.WriteString($"[{value.PhotoRspFlag.ToByteValue()}]拍照应答标识", value.PhotoRspFlag.ToString()); writer.WriteString($"[{value.PhotoRspFlag.ToByteValue()}]拍照应答标识", value.PhotoRspFlag.ToString());
writer.WriteStartObject("车辆定位信息");
VehiclePositionPropertieBase.Analyze(ref reader, writer, config);
writer.WriteEndObject();
if (config.Version == JT809Version.JTT2011)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Analyze(ref reader, writer, config);
}
else if (config.Version == JT809Version.JTT2019)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Analyze(ref reader, writer, config);
}
value.LensID = reader.ReadByte(); value.LensID = reader.ReadByte();
writer.WriteNumber($"[{value.LensID}]镜头ID", value.LensID); writer.WriteNumber($"[{value.LensID}]镜头ID", value.LensID);
value.PhotoLen = reader.ReadUInt32(); value.PhotoLen = reader.ReadUInt32();
@@ -78,7 +87,14 @@ namespace JT809.Protocol.SubMessageBody
{ {
JT809_0x1500_0x1502 value = new JT809_0x1500_0x1502(); JT809_0x1500_0x1502 value = new JT809_0x1500_0x1502();
value.PhotoRspFlag = (JT809_0x1502_PhotoRspFlag)reader.ReadByte(); value.PhotoRspFlag = (JT809_0x1502_PhotoRspFlag)reader.ReadByte();
value.VehiclePosition = VehiclePositionPropertieBase.Deserialize(ref reader, config);
if (config.Version == JT809Version.JTT2011)
{
value.VehiclePosition = config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Deserialize(ref reader, config);
}
else if (config.Version == JT809Version.JTT2019)
{
value.VehiclePosition_2019 = config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Deserialize(ref reader, config);
}
value.LensID = reader.ReadByte(); value.LensID = reader.ReadByte();
value.PhotoLen = reader.ReadUInt32(); value.PhotoLen = reader.ReadUInt32();
value.SizeType = (JT809__0x9502_SizeType)reader.ReadByte(); value.SizeType = (JT809__0x9502_SizeType)reader.ReadByte();
@@ -93,7 +109,20 @@ namespace JT809.Protocol.SubMessageBody
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1500_0x1502 value, IJT809Config config) public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1500_0x1502 value, IJT809Config config)
{ {
writer.WriteByte((byte)value.PhotoRspFlag); writer.WriteByte((byte)value.PhotoRspFlag);
VehiclePositionPropertieBase.Serialize(ref writer, value.VehiclePosition, config);
if (config.Version == JT809Version.JTT2011)
{
if (value.VehiclePosition != null)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Serialize(ref writer, value.VehiclePosition, config);
}
}
else if (config.Version == JT809Version.JTT2019)
{
if (value.VehiclePosition_2019 != null)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Serialize(ref writer, value.VehiclePosition_2019, config);
}
}
writer.WriteByte(value.LensID); writer.WriteByte(value.LensID);
bool isPhoto = (value.Photo != null && value.Photo.Length > 0); bool isPhoto = (value.Photo != null && value.Photo.Length > 0);
writer.WriteUInt32(isPhoto ? (uint)value.Photo.Length : 0); writer.WriteUInt32(isPhoto ? (uint)value.Photo.Length : 0);


+ 36
- 8
src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9202.cs Parādīt failu

@@ -26,28 +26,56 @@ namespace JT809.Protocol.SubMessageBody


public override string Description => "交换车辆定位信息消息"; public override string Description => "交换车辆定位信息消息";
/// <summary> /// <summary>
/// 车辆定位信息
/// 车辆定位信息 2011版本
/// </summary> /// </summary>
public VehiclePositionPropertieBase VehiclePosition { get; set; }
public JT809VehiclePositionProperties VehiclePosition { get; set; }
/// <summary>
/// 车辆定位信息 2019版本
/// </summary>
public JT809VehiclePositionProperties_2019 VehiclePosition_2019 { get; set; }


public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{ {
JT809_0x9200_0x9202 value = new JT809_0x9200_0x9202();
writer.WriteStartObject("车辆定位信息");
VehiclePositionPropertieBase.Analyze(ref reader, writer, config);
writer.WriteEndObject();
if (config.Version == JT809Version.JTT2011)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Analyze(ref reader, writer, config);
}
else if (config.Version == JT809Version.JTT2019)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Analyze(ref reader, writer, config);
}
} }


public JT809_0x9200_0x9202 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) public JT809_0x9200_0x9202 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{ {
JT809_0x9200_0x9202 value = new JT809_0x9200_0x9202(); JT809_0x9200_0x9202 value = new JT809_0x9200_0x9202();
value.VehiclePosition = VehiclePositionPropertieBase.Deserialize(ref reader, config);
if (config.Version == JT809Version.JTT2011)
{
value.VehiclePosition = config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Deserialize(ref reader, config);
}
else if (config.Version == JT809Version.JTT2019)
{
value.VehiclePosition_2019 = config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Deserialize(ref reader, config);
}
return value; return value;
} }


public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9200_0x9202 value, IJT809Config config) public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9200_0x9202 value, IJT809Config config)
{ {
VehiclePositionPropertieBase.Serialize(ref writer, value.VehiclePosition, config);
if (config.Version == JT809Version.JTT2011)
{
if (value.VehiclePosition != null)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties>().Serialize(ref writer, value.VehiclePosition, config);
}
}
else if (config.Version == JT809Version.JTT2019)
{
if (value.VehiclePosition_2019 != null)
{
config.GetMessagePackFormatter<JT809VehiclePositionProperties_2019>().Serialize(ref writer, value.VehiclePosition_2019, config);
}
}
} }
} }
} }

Notiek ielāde…
Atcelt
Saglabāt