浏览代码

v1.3.0

1.增加父子命令字的静态序列化工厂
2.增加父子命令字的模板创建
3.修改头部序列化器的命名
4.修复0x1600_0x1601序列化器
5.增加父子命令字模板创建测试
6.修改基准测试的报告
tags/v1.3.0
SmallChi 6 年前
父节点
当前提交
9993737ad4
共有 24 个文件被更改,包括 1900 次插入119 次删除
  1. +45
    -35
      README.md
  2. +2
    -2
      src/JT809.Protocol.Benchmark/JT809.Protocol.Benchmark.csproj
  3. +2
    -2
      src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj
  4. +90
    -0
      src/JT809.Protocol.Test/JT809Extensions/JT809SubPackageExtensionsTest.cs
  5. +10
    -0
      src/JT809.Protocol/Extensions/JT809FormatterExtensions.cs
  6. +33
    -1
      src/JT809.Protocol/Extensions/JT809PackageExtensions.cs
  7. +711
    -0
      src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.cs
  8. +63
    -0
      src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.tt
  9. +16
    -0
      src/JT809.Protocol/Extensions/JT809SubPackageExtensions.cs
  10. +410
    -0
      src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.cs
  11. +51
    -0
      src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.tt
  12. +6
    -1
      src/JT809.Protocol/Formatters/IJT809FormatterOfT.cs
  13. +3
    -14
      src/JT809.Protocol/Formatters/JT809BodiesFormatter.cs
  14. +17
    -22
      src/JT809.Protocol/Formatters/JT809HeaderPackageFormatter.cs
  15. +21
    -29
      src/JT809.Protocol/Formatters/JT809PackageFormatter.cs
  16. +1
    -1
      src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x1600_0x1601_Formatter.cs
  17. +138
    -0
      src/JT809.Protocol/Internal/BusinessTypeSerializerFactory.cs
  18. +221
    -0
      src/JT809.Protocol/Internal/SubBodiesTypeSerializerFactory.cs
  19. +44
    -3
      src/JT809.Protocol/JT809.Protocol.csproj
  20. +1
    -1
      src/JT809.Protocol/JT809HeaderPackage.cs
  21. +12
    -5
      src/JT809.Protocol/JT809Serializer.cs
  22. +1
    -1
      src/JT809.Protocol/SubMessageBody/JT809_0x1600_0x1601.cs
  23. +1
    -1
      src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9204.cs
  24. +1
    -1
      src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x920B.cs

+ 45
- 35
README.md 查看文件

@@ -192,25 +192,35 @@ JT809GlobalConfig.Instance.SetHeaderOptions(new JT809HeaderOptions
});

// 根据业务类型创建对应包
JT809Package jT809Package = JT809BusinessType.从链路报警信息交互消息.Create(new JT809_0x9400
{
VehicleNo = "粤A12345",
VehicleColor = JT809VehicleColorType.黄色,
SubBusinessType = JT809SubBusinessType.报警督办请求消息,
JT809SubBodies = new JT809_0x9400_0x9401
JT809Package jT809Package = JT809BusinessType.从链路报警信息交互消息.Create_从链路报警信息交互消息(
new JT809Header
{
MsgSN = 1666,
EncryptKey = 9999,
EncryptFlag = JT809Header_Encrypt.None,
Version = new JT809Header_Version(1, 0, 0),
MsgGNSSCENTERID = 20180920,
}, new JT809_0x9400
{
WarnSrc = JT809WarnSrc.车载终端,
WarnType = JT809WarnType.疲劳驾驶报警,
WarnTime = DateTime.Parse("2018-09-27 10:24:00"),
SupervisionID = "123FFAA1",
SupervisionEndTime = DateTime.Parse("2018-09-27 11:24:00"),
SupervisionLevel = 3,
Supervisor = "smallchi",
SupervisorTel = "12345678901",
SupervisorEmail = "123456@qq.com"
VehicleNo = "粤A12345",
VehicleColor = JT809VehicleColorType.黄色,
SubBusinessType = JT809SubBusinessType.报警督办请求,
SubBodies = JT809SubBusinessType.报警督办请求.Create_报警督办请求(
new JT809_0x9400_0x9401
{
WarnSrc = JT809WarnSrc.车载终端,
WarnType = JT809WarnType.疲劳驾驶报警,
WarnTime = DateTime.Parse("2018-09-27 10:24:00"),
SupervisionID = "123FFAA1",
SupervisionEndTime = DateTime.Parse("2018-09-27 11:24:00"),
SupervisionLevel = 3,
Supervisor = "smallchi",
SupervisorTel = "12345678901",
SupervisorEmail = "123456@qq.com"
})
}
});
var hex = JT809Serializer.Serialize(jT809Package);
);
var hex = JT809Serializer.Serialize(jT809Package).ToHexString();
```

### 举个栗子3
@@ -296,29 +306,29 @@ static async Task Main(string[] args)

``` ini

BenchmarkDotNet=v0.11.3, OS=Windows 10.0.17134.472 (1803/April2018Update/Redstone4)
BenchmarkDotNet=v0.11.5, OS=Windows 10.0.17763.379 (1809/October2018Update/Redstone5)
Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
[Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3260.0
Job-FVMQGI : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3260.0
Job-LGLQDK : .NET Core 2.2.1 (CoreCLR 4.6.27207.03, CoreFX 4.6.27207.03), 64bit RyuJIT
[Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3362.0
Job-FVMQGI : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3362.0
Job-LGLQDK : .NET Core 2.2.5 (CoreCLR 4.6.27617.05, CoreFX 4.6.27618.01), 64bit RyuJIT

Platform=AnyCpu Runtime=Clr Server=False

```
| Method | Toolchain | N | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|---------------------------------------- |-------------- |------- |-------------:|-----------:|-----------:|------------:|------------:|------------:|--------------------:|
| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **100** | **3.401 ms** | **0.0665 ms** | **0.0792 ms** | **70.3125** | **-** | **-** | **447.72 KB** |
| JT809_0x9400_0x9401_Package_Serialize | Default | 100 | 3.809 ms | 0.0633 ms | 0.0592 ms | 74.2188 | - | - | 460.91 KB |
| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 100 | 2.571 ms | 0.0456 ms | 0.0427 ms | 62.5000 | - | - | 403.5 KB |
| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 100 | 2.830 ms | 0.0324 ms | 0.0271 ms | 66.4063 | - | - | 408.27 KB |
| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **10000** | **339.987 ms** | **4.6700 ms** | **4.3683 ms** | **7000.0000** | **-** | **-** | **44784.51 KB** |
| JT809_0x9400_0x9401_Package_Serialize | Default | 10000 | 381.159 ms | 7.0290 ms | 6.5749 ms | 7000.0000 | - | - | 46096.55 KB |
| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 10000 | 251.317 ms | 4.9186 ms | 4.6009 ms | 6000.0000 | - | - | 40374.08 KB |
| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 10000 | 280.964 ms | 4.4244 ms | 3.6946 ms | 6000.0000 | - | - | 40837.81 KB |
| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **100000** | **3,415.104 ms** | **66.8704 ms** | **68.6710 ms** | **72000.0000** | **-** | **-** | **447679.84 KB** |
| JT809_0x9400_0x9401_Package_Serialize | Default | 100000 | 3,866.718 ms | 26.2001 ms | 23.2257 ms | 75000.0000 | - | - | 460885.07 KB |
| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 100000 | 2,549.544 ms | 23.0695 ms | 20.4505 ms | 65000.0000 | - | - | 403220.45 KB |
| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 100000 | 2,747.892 ms | 36.6155 ms | 34.2502 ms | 66000.0000 | - | - | 407869.06 KB |
| Method | Toolchain | N | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---------------------------------------- |-------------- |------- |-------------:|--------------:|--------------:|-----------:|------:|------:|-------------:|
| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **100** | **203.8 us** | **0.5634 us** | **0.4995 us** | **21.9727** | **-** | **-** | **135.16 KB** |
| JT809_0x9400_0x9401_Package_Serialize | Default | 100 | 321.9 us | 1.4627 us | 1.2967 us | 20.5078 | - | - | 128.91 KB |
| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 100 | 142.8 us | 0.5950 us | 0.5274 us | 21.9727 | - | - | 135.16 KB |
| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 100 | 195.8 us | 0.6448 us | 0.5716 us | 20.7520 | - | - | 128.91 KB |
| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **10000** | **21,072.4 us** | **38.5387 us** | **32.1815 us** | **2187.5000** | **-** | **-** | **13515.94 KB** |
| JT809_0x9400_0x9401_Package_Serialize | Default | 10000 | 31,782.0 us | 117.6549 us | 91.8572 us | 2062.5000 | - | - | 12891.23 KB |
| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 10000 | 14,103.7 us | 39.9789 us | 35.4402 us | 2187.5000 | - | - | 13515.63 KB |
| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 10000 | 19,754.9 us | 63.4952 us | 56.2868 us | 2093.7500 | - | - | 12890.63 KB |
| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **100000** | **210,655.4 us** | **702.2667 us** | **586.4245 us** | **21666.6667** | **-** | **-** | **135159.23 KB** |
| JT809_0x9400_0x9401_Package_Serialize | Default | 100000 | 318,362.4 us | 1,623.0459 us | 1,518.1981 us | 20000.0000 | - | - | 128914.17 KB |
| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 100000 | 142,826.0 us | 611.7525 us | 572.2337 us | 21750.0000 | - | - | 135156.25 KB |
| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 100000 | 198,473.8 us | 585.6268 us | 519.1429 us | 20666.6667 | - | - | 128906.25 KB |

## JT809协议消息对照表



+ 2
- 2
src/JT809.Protocol.Benchmark/JT809.Protocol.Benchmark.csproj 查看文件

@@ -6,9 +6,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.11.3" />
<PackageReference Include="BenchmarkDotNet" Version="0.11.5" />
<PackageReference Include="System.Buffers" Version="4.5.0" />
<PackageReference Include="System.Memory" Version="4.5.2" />
<PackageReference Include="System.Memory" Version="4.5.3" />
</ItemGroup>

<ItemGroup>


+ 2
- 2
src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj 查看文件

@@ -12,9 +12,9 @@
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<RepositoryUrl>https://github.com/SmallChi/JT809</RepositoryUrl>
<PackageProjectUrl>https://github.com/SmallChi/JT809</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/SmallChi/JT809/blob/master/LICENSE</PackageLicenseUrl>
<license>https://github.com/SmallChi/JT809/blob/master/LICENSE</license>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.2.1</Version>
<Version>1.3.0</Version>
</PropertyGroup>

<ItemGroup>


+ 90
- 0
src/JT809.Protocol.Test/JT809Extensions/JT809SubPackageExtensionsTest.cs 查看文件

@@ -0,0 +1,90 @@
using JT809.Protocol.Attributes;
using JT809.Protocol.Enums;
using JT809.Protocol.Extensions;
using JT809.Protocol.MessageBody;
using JT809.Protocol.SubMessageBody;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xunit;

namespace JT809.Protocol.Test.JT809Extensions
{
public class JT809SubPackageExtensionsTest
{
[Fact]
public void Test1()
{
var types = Enum.GetNames(typeof(JT809SubBusinessType));
foreach (var item in types)
{
JT809SubBusinessType jT809SubBusinessType = item.ToEnum<JT809SubBusinessType>();
JT809BodiesTypeAttribute jT809SubBodiesTypeAttribute = jT809SubBusinessType.GetAttribute<JT809BodiesTypeAttribute>();
JT809SubBusinessTypeDescriptionAttribute jT809SubBusinessTypeDescriptionAttribute = jT809SubBusinessType.GetAttribute<JT809SubBusinessTypeDescriptionAttribute>();
if (jT809SubBusinessType == JT809SubBusinessType.None)
{
Assert.Null(jT809SubBodiesTypeAttribute);
Assert.Null(jT809SubBusinessTypeDescriptionAttribute);
continue;
}
Assert.NotNull(jT809SubBusinessTypeDescriptionAttribute.Code);
Assert.NotNull(jT809SubBusinessTypeDescriptionAttribute.Name);
}
}

[Fact]
public void Create_0x1001_Test()
{
JT809Package jT809Package= JT809BusinessType.主链路登录请求消息.Create_主链路登录请求消息(new JT809Header
{
MsgSN = 133,
EncryptKey = 9999,
MsgGNSSCENTERID = 20180920,
}, new MessageBody.JT809_0x1001
{
UserId = 20180920,
Password = "20180920",
DownLinkIP = "127.0.0.1",
DownLinkPort = 809
});
var hex = JT809Serializer.Serialize(jT809Package).ToHexString();
Assert.Equal("5B000000480000008510010133EFB8010000000000270F0133EFB832303138303932303132372E302E302E31000000000000000000000000000000000000000000000003296A915D", hex);
}

[Fact]
public void Create_JT809_0x9400_0x9401_Test()
{
JT809Package jT809Package = JT809BusinessType.从链路报警信息交互消息.Create_从链路报警信息交互消息(
new JT809Header
{
MsgSN = 1666,
EncryptKey = 9999,
EncryptFlag = JT809Header_Encrypt.None,
Version = new JT809Header_Version(1, 0, 0),
MsgGNSSCENTERID = 20180920,
}, new JT809_0x9400
{
VehicleNo = "粤A12345",
VehicleColor = JT809VehicleColorType.黄色,
SubBusinessType = JT809SubBusinessType.报警督办请求,
SubBodies = JT809SubBusinessType.报警督办请求.Create_报警督办请求(
new JT809_0x9400_0x9401
{
WarnSrc = JT809WarnSrc.车载终端,
WarnType = JT809WarnType.疲劳驾驶报警,
WarnTime = DateTime.Parse("2018-09-27 10:24:00"),
SupervisionID = "123FFAA1",
SupervisionEndTime = DateTime.Parse("2018-09-27 11:24:00"),
SupervisionLevel = 3,
Supervisor = "smallchi",
SupervisorTel = "12345678901",
SupervisorEmail = "123456@qq.com"
})
}
);
var hex = JT809Serializer.Serialize(jT809Package).ToHexString();
Assert.Equal("5B000000920000068294000133EFB8010000000000270FD4C1413132333435000000000000000000000000000294010000005C010002000000005A01AC3F40123FFAA1000000005A01AC4D5003736D616C6C636869000000000000000031323334353637383930310000000000000000003132333435364071712E636F6D00000000000000000000000000000000000000BAD85D", hex);
}
}
}

+ 10
- 0
src/JT809.Protocol/Extensions/JT809FormatterExtensions.cs 查看文件

@@ -46,5 +46,15 @@ namespace JT809.Protocol.Extensions
}
return formatter;
}

static JT809FormatterExtensions()
{
PackageFormatter = (JT809PackageFormatter)GetFormatter<JT809Package>();
HeaderPackageFormatter = (JT809HeaderPackageFormatter)GetFormatter<JT809HeaderPackage>();
HeaderFormatter = (JT809HeaderFormatter)GetFormatter<JT809Header>();
}
public static JT809PackageFormatter PackageFormatter { get; }
public static JT809HeaderPackageFormatter HeaderPackageFormatter { get; }
public static JT809HeaderFormatter HeaderFormatter { get; }
}
}

+ 33
- 1
src/JT809.Protocol/Extensions/JT809PackageExtensions.cs 查看文件

@@ -5,7 +5,7 @@ using System.Text;

namespace JT809.Protocol.Extensions
{
public static class JT809PackageExtensions
public static partial class JT809PackageExtensions
{
public static JT809Package Create<TJT809Bodies>(this JT809BusinessType jT809BusinessType, TJT809Bodies jT809Bodies)
where TJT809Bodies: JT809Bodies
@@ -38,5 +38,37 @@ namespace JT809.Protocol.Extensions
};
return jT809Package;
}

public static JT809Package Create<TJT809Bodies>(this JT809BusinessType jT809BusinessType, JT809Header jT809Header, TJT809Bodies jT809Bodies)
where TJT809Bodies : JT809Bodies
{
JT809Package jT809Package = new JT809Package();
jT809Package.Bodies = jT809Bodies;
jT809Package.Header = new JT809Header()
{
BusinessType = jT809BusinessType,
MsgSN = jT809Header.MsgSN,
EncryptFlag = jT809Header.EncryptFlag,
EncryptKey = jT809Header.EncryptKey,
MsgGNSSCENTERID = jT809Header.MsgGNSSCENTERID,
Version = jT809Header.Version
};
return jT809Package;
}

public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809Header jT809Header)
{
JT809Package jT809Package = new JT809Package();
jT809Package.Header = new JT809Header()
{
BusinessType = jT809BusinessType,
MsgSN = jT809Header.MsgSN,
EncryptFlag = jT809Header.EncryptFlag,
EncryptKey = jT809Header.EncryptKey,
MsgGNSSCENTERID = jT809Header.MsgGNSSCENTERID,
Version = jT809Header.Version
};
return jT809Package;
}
}
}

+ 711
- 0
src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.cs 查看文件

@@ -0,0 +1,711 @@

using JT809.Protocol.Enums;

namespace JT809.Protocol.Extensions
{
public static partial class JT809PackageExtensions
{
/// <summary>
/// UP_CONNECT_REQ - 主链路登录请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路登录请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1001 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1001>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_CONNECT_REQ - 主链路登录请求消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1001 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1001>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_CONNECT_REQ - 主链路登录请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路登录请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1001 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1001>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_CONNECT_RSP - 主链路登录应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路登录应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1002 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1002>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_CONNECT_RSP - 主链路登录应答消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1002 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1002>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_CONNECT_RSP - 主链路登录应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路登录应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1002 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1002>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_DISCONNECT_REQ - 主链路注销请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路注销请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1003 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1003>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_DISCONNECT_REQ - 主链路注销请求消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1003 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1003>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_DISCONNECT_REQ - 主链路注销请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路注销请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1003 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1003>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_DISCONNECT_RSP - 主链路注销应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路注销应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1004 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1004>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_DISCONNECT_RSP - 主链路注销应答消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1004 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1004>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_DISCONNECT_RSP - 主链路注销应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路注销应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1004 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1004>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_LINKTEST_REQ - 主链路连接保持请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路连接保持请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1005 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1005>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_LINKTEST_REQ - 主链路连接保持请求消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1005 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1005>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_LINKTEST_REQ - 主链路连接保持请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路连接保持请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1005 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1005>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_LINKTEST_RSP - 主链路连接保持应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路连接保持应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1006 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1006>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_LINKTEST_RSP - 主链路连接保持应答消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1006 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1006>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_LINKTEST_RSP - 主链路连接保持应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路连接保持应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1006 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1006>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_DISCONNECT_INFORM - 主链路断开通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路断开通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1007 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1007>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_DISCONNECT_INFORM - 主链路断开通知消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1007 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1007>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_DISCONNECT_INFORM - 主链路断开通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路断开通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1007 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1007>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_下级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1008 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1008>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1008 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1008>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_下级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1008 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1008>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_EXG_MSG - 主链路动态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1200 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1200>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_EXG_MSG - 主链路动态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1200 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1200>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_EXG_MSG - 主链路动态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1200 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1200>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_PLATFORM_MSG - 主链路平台间信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1300 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1300>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_PLATFORM_MSG - 主链路平台间信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1300 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1300>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_PLATFORM_MSG - 主链路平台间信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1300 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1300>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_WARN_MSG - 主链路报警信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路报警信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1400 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1400>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_WARN_MSG - 主链路报警信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1400 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1400>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_WARN_MSG - 主链路报警信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路报警信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1400 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1400>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_CTRL_MSG - 主链路车辆监管消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路车辆监管消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1500 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1500>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_CTRL_MSG - 主链路车辆监管消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1500 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1500>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_CTRL_MSG - 主链路车辆监管消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路车辆监管消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1500 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1500>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// UP_BASE_MSG - 主链路静态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路静态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1600 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1600>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_BASE_MSG - 主链路静态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1600 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1600>(jT809BusinessType,bodies);
}

/// <summary>
/// UP_BASE_MSG - 主链路静态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create_主链路静态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1600 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x1600>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_CONNECT_REQ - 从链路连接请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路连接请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9001 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9001>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_CONNECT_REQ - 从链路连接请求消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9001 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9001>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_CONNECT_REQ - 从链路连接请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路连接请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9001 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9001>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_CONNECT_RSP - 从链路连接应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路连接应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9002 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9002>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_CONNECT_RSP - 从链路连接应答消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9002 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9002>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_CONNECT_RSP - 从链路连接应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路连接应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9002 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9002>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_DISCONNECT_REQ - 从链路注销请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路注销请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9003 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9003>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_DISCONNECT_REQ - 从链路注销请求消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9003 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9003>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_DISCONNECT_REQ - 从链路注销请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路注销请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9003 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9003>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_DISCONNECT_RSP - 从链路注销应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路注销应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9004 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9004>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_DISCONNECT_RSP - 从链路注销应答消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9004 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9004>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_DISCONNECT_RSP - 从链路注销应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路注销应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9004 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9004>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_LINKTEST_REQ - 从链路连接保持请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路连接保持请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9005 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9005>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_LINKTEST_REQ - 从链路连接保持请求消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9005 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9005>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_LINKTEST_REQ - 从链路连接保持请求消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路连接保持请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9005 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9005>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_LINKTEST_RSP - 从链路连接保持应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路连接保持应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9006 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9006>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_LINKTEST_RSP - 从链路连接保持应答消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9006 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9006>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_LINKTEST_RSP - 从链路连接保持应答消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路连接保持应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9006 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9006>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_DISCONNECT_INFORM - 从链路断开通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路断开通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9007 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9007>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_DISCONNECT_INFORM - 从链路断开通知消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9007 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9007>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_DISCONNECT_INFORM - 从链路断开通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路断开通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9007 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9007>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_CLOSELINK_INFORM - 上级平台主动关闭链路通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_上级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9008 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9008>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_CLOSELINK_INFORM - 上级平台主动关闭链路通知消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9008 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9008>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_CLOSELINK_INFORM - 上级平台主动关闭链路通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_上级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9008 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9008>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_接收定位信息数量通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9101 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9101>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9101 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9101>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息
/// auto-generated
/// </summary>
public static JT809Package Create_接收定位信息数量通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9101 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9101>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_EXG_MSG - 从链路动态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9200 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9200>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_EXG_MSG - 从链路动态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9200 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9200>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_EXG_MSG - 从链路动态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9200 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9200>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9300 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9300>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9300 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9300>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9300 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9300>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_WARN_MSG - 从链路报警信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路报警信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9400 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9400>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_WARN_MSG - 从链路报警信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9400 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9400>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_WARN_MSG - 从链路报警信息交互消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路报警信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9400 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9400>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_CTRL_MSG - 从链路车辆监管消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路车辆监管消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9500 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9500>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_CTRL_MSG - 从链路车辆监管消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9500 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9500>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_CTRL_MSG - 从链路车辆监管消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路车辆监管消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9500 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9500>(jT809BusinessType,jT809Header,bodies);
}
/// <summary>
/// DOWN_BASE_MSG - 从链路静态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路静态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9600 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9600>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_BASE_MSG - 从链路静态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9600 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9600>(jT809BusinessType,bodies);
}

/// <summary>
/// DOWN_BASE_MSG - 从链路静态信息交换消息
/// auto-generated
/// </summary>
public static JT809Package Create_从链路静态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9600 bodies)
{
return Create<JT809.Protocol.MessageBody.JT809_0x9600>(jT809BusinessType,jT809Header,bodies);
}
}
}

+ 63
- 0
src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.tt 查看文件

@@ -0,0 +1,63 @@
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="netstandard" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System" #>
<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="JT809.Protocol" #>
<#@ import namespace="JT809.Protocol.Enums" #>
<#@ import namespace="JT809.Protocol.Extensions" #>
<#@ import namespace="JT809.Protocol.Attributes" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".cs" #>

<#
var types=Enum.GetNames(typeof(JT809BusinessType));
#>
using JT809.Protocol.Enums;

namespace JT809.Protocol.Extensions
{
public static partial class JT809PackageExtensions
{
<#
foreach (var item in types)
{
JT809BusinessType jT809BusinessType = item.ToEnum<JT809BusinessType>();
JT809BodiesTypeAttribute jT809BodiesTypeAttribute = jT809BusinessType.GetAttribute<JT809BodiesTypeAttribute>();
JT809BusinessTypeDescriptionAttribute jT809MsgIdDescriptionAttribute = jT809BusinessType.GetAttribute<JT809BusinessTypeDescriptionAttribute>();

#>
/// <summary>
/// <#= jT809MsgIdDescriptionAttribute.Code #> - <#= jT809MsgIdDescriptionAttribute.Name #>
/// auto-generated
/// </summary>
public static JT809Package Create_<#= jT809MsgIdDescriptionAttribute.Name #>(this JT809BusinessType jT809BusinessType,<#= jT809BodiesTypeAttribute.JT809BodiesType.FullName #> bodies)
{
return Create<<#= jT809BodiesTypeAttribute.JT809BodiesType.FullName#>>(jT809BusinessType,bodies);
}

/// <summary>
/// <#= jT809MsgIdDescriptionAttribute.Code #> - <#= jT809MsgIdDescriptionAttribute.Name #>
/// auto-generated
/// </summary>
public static JT809Package Create(this JT809BusinessType jT809BusinessType, <#= jT809BodiesTypeAttribute.JT809BodiesType.FullName #> bodies)
{
return Create<<#= jT809BodiesTypeAttribute.JT809BodiesType.FullName#>>(jT809BusinessType,bodies);
}

/// <summary>
/// <#= jT809MsgIdDescriptionAttribute.Code #> - <#= jT809MsgIdDescriptionAttribute.Name #>
/// auto-generated
/// </summary>
public static JT809Package Create_<#= jT809MsgIdDescriptionAttribute.Name #>(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, <#= jT809BodiesTypeAttribute.JT809BodiesType.FullName #> bodies)
{
return Create<<#= jT809BodiesTypeAttribute.JT809BodiesType.FullName#>>(jT809BusinessType,jT809Header,bodies);
}
<#
}
#>
}
}

+ 16
- 0
src/JT809.Protocol/Extensions/JT809SubPackageExtensions.cs 查看文件

@@ -0,0 +1,16 @@
using JT809.Protocol.Enums;
using System;
using System.Collections.Generic;
using System.Text;

namespace JT809.Protocol.Extensions
{
public static partial class JT809SubPackageExtensions
{
public static TJT809SubBodies Create<TJT809SubBodies>(this JT809SubBusinessType jT809SubBusinessType, TJT809SubBodies jT809SubBodies)
where TJT809SubBodies : JT809SubBodies
{
return jT809SubBodies;
}
}
}

+ 410
- 0
src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.cs 查看文件

@@ -0,0 +1,410 @@

using JT809.Protocol.Enums;

namespace JT809.Protocol.Extensions
{
/// <summary>
/// 子命令包
/// auto-generated
/// </summary>
public static partial class JT809SubPackageExtensions
{

/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_REGISTER - 上传车辆注册信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201 Create_上传车辆注册信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_REAL_LOCATION - 实时上传车辆定位信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202 Create_实时上传车辆定位信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_HISTORY_LOCATION - 车辆定位信息自动补报
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203 Create_车辆定位信息自动补报(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_RETURN_STARTUP_ACK - 启动车辆定位信息交换应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205 Create_启动车辆定位信息交换应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_RETURN_END_ACK - 结束车辆定位信息交换应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206 Create_结束车辆定位信息交换应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_APPLY_FOR_MONITOR_STARTUP - 申请交换指定车辆定位信息请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207 Create_申请交换指定车辆定位信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_APPLY_FOR_MONITOR_END - 取消交换指定车辆定位信息请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1208 Create_取消交换指定车辆定位信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1208 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1208>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_APPLY_HISGNSSDATA_REQ - 补发车辆定位信息请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1209 Create_补发车辆定位信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1209 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1209>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_REPORT_DRIVER_INFO_ACK - 上报车辆驾驶员身份识别信息应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A Create_上报车辆驾驶员身份识别信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_TAKE_EWAYBILL_ACK - 上报车辆电子运单应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B Create_上报车辆电子运单应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_REPORT_DRIVER_INFO - 主动上报驾驶员身份信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C Create_主动上报驾驶员身份信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路动态信息交换消息
/// UP_EXG_MSG_REPORT_EWAYBILL_INFO - 主动上报车辆电子运单信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120D Create_主动上报车辆电子运单信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120D subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x120D>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路平台间信息交互消息
/// UP_PLATFORM_MSG_POST_QUERY_ACK - 平台查岗应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301 Create_平台查岗应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路平台间信息交互消息
/// UP_PLATFORM_MSG_INFO_ACK - 下发平台间报文应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302 Create_下发平台间报文应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路报警信息交互消息
/// UP_WARN_MSG_URGE_TODO_ACK - 报警督办应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401 Create_报警督办应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路报警信息交互消息
/// UP_WARN_MSG_ADPT_INFO - 上报报警信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402 Create_上报报警信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路报警信息交互消息
/// UP_WARN_MSG_ADPT_TODO_INFO - 主动上报报警处理结果信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1403 Create_主动上报报警处理结果信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1403 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1400_0x1403>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路车辆监管消息
/// UP_CTRL_MSG_MONITOR_VEHICLE_ACK - 车辆单向监听应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1501 Create_车辆单向监听应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1501 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1501>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路车辆监管消息
/// UP_CTRL_MSG_TAKE_PHOTO_ACK - 车辆拍照应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502 Create_车辆拍照应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路车辆监管消息
/// UP_CTRL_MSG_TEXT_INFO_ACK - 下发车辆报文应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503 Create_下发车辆报文应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路车辆监管消息
/// UP_CTRL_MSG_TAKE_TRAVEL_ACK - 上报车辆行驶记录应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504 Create_上报车辆行驶记录应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路车辆监管消息
/// UP_CTRL_MSG_EMERGENCY_MONITORING_ACK - 车辆应急接入监管平台应答消息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505 Create_车辆应急接入监管平台应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 主链路静态信息交换消息
/// UP_BASE_MSG_VEHICLE_ADDED_ACK - 补报车辆静态信息应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x1600_0x1601 Create_补报车辆静态信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1600_0x1601 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x1600_0x1601>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_CAR_LOCATION - 交换车辆定位信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202 Create_交换车辆定位信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_HISTORY_ARCOSSAREA - 车辆定位信息交换补发
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203 Create_车辆定位信息交换补发(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_CAR_INFO - 交换车辆静态信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204 Create_交换车辆静态信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_RETURN_STARTUP - 启动车辆定位信息交换请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205 Create_启动车辆定位信息交换请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_RETURN_END - 结束车辆定位信息交换请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9206 Create_结束车辆定位信息交换请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9206 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9206>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_APPLY_FOR_MONITOR_STARTUP_ACK - 申请交换指定车辆定位信息应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9207 Create_申请交换指定车辆定位信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9207 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9207>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_APPLY_FOR_MONITOR_END_ACK - 取消交换指定车辆定位信息应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9208 Create_取消交换指定车辆定位信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9208 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9208>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_APPLY_HISGNSSDATA_ACK - 补发车辆定位信息应答
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9209 Create_补发车辆定位信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9209 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9209>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_REPORT_DRIVER_INFO - 上报车辆驾驶员身份识别信息请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x920A Create_上报车辆驾驶员身份识别信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920A subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x920A>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路动态信息交换消息
/// DOWN_EXG_MSG_TAKE_EWAYBILL_REQ - 上报车辆电子运单请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B Create_上报车辆电子运单请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路平台间信息交互消息
/// DOWN_PLATFORM_MSG_POST_QUERY_REQ - 平台查岗请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9300_0x9301 Create_平台查岗请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9300_0x9301 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9300_0x9301>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路平台间信息交互消息
/// DOWN_PLATFORM_MSG_INFO_REQ - 下发平台间报文请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9300_0x9302 Create_下发平台间报文请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9300_0x9302 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9300_0x9302>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路报警信息交互消息
/// DOWN_WARN_MSG_URGE_TODO_REQ - 报警督办请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401 Create_报警督办请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路报警信息交互消息
/// DOWN_WARN_MSG_INFORM_TIPS - 报警预警
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9400_0x9402 Create_报警预警(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9402 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9400_0x9402>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路报警信息交互消息
/// DOWN_WARN_MSG_EXG_INFORM - 实时交换报警信息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9400_0x9403 Create_实时交换报警信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9403 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9400_0x9403>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路车辆监管消息
/// DOWN_CTRL_MSG_MONITOR_VEHICLE_REQ - 车辆单向监听请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501 Create_车辆单向监听请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路车辆监管消息
/// DOWN_CTRL_MSG_TAKE_PHOTO_REQ - 车辆拍照请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502 Create_车辆拍照请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路车辆监管消息
/// DOWN_CTRL_MSG_TEXT_INFO - 下发车辆报文请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9503 Create_下发车辆报文请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9503 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9503>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路车辆监管消息
/// DOWN_CTRL_MSG_TAKE_TRAVEL_REQ - 上报车辆行驶记录请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504 Create_上报车辆行驶记录请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路车辆监管消息
/// DOWN_CTRL_MSG_EMERGENCY_MONITORING_REQ - 车辆应急接入监管平台请求消息
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9505 Create_车辆应急接入监管平台请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9505 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9505>(jT809SubBusinessType,subBodies);
}
/// <summary>
/// 从链路静态信息交换消息
/// DOWN_BASE_MSG_VEHICLE_ADDED - 补报车辆静态信息请求
/// auto-generated
/// </summary>
public static JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601 Create_补报车辆静态信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601 subBodies)
{
return Create<JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601>(jT809SubBusinessType,subBodies);
}
}
}

+ 51
- 0
src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.tt 查看文件

@@ -0,0 +1,51 @@
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="netstandard" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System" #>
<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="JT809.Protocol" #>
<#@ import namespace="JT809.Protocol.Enums" #>
<#@ import namespace="JT809.Protocol.Extensions" #>
<#@ import namespace="JT809.Protocol.Attributes" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".cs" #>

<#
var types=Enum.GetNames(typeof(JT809SubBusinessType));
#>
using JT809.Protocol.Enums;

namespace JT809.Protocol.Extensions
{
/// <summary>
/// 子命令包
/// auto-generated
/// </summary>
public static partial class JT809SubPackageExtensions
{

<#
foreach (var item in types)
{
JT809SubBusinessType jT809SubBusinessType = item.ToEnum<JT809SubBusinessType>();
if (jT809SubBusinessType == JT809SubBusinessType.None) continue;
JT809BodiesTypeAttribute jT809SubBodiesTypeAttribute = jT809SubBusinessType.GetAttribute<JT809BodiesTypeAttribute>();
JT809SubBusinessTypeDescriptionAttribute jT809SubBusinessTypeDescriptionAttribute = jT809SubBusinessType.GetAttribute<JT809SubBusinessTypeDescriptionAttribute>();
#>
/// <summary>
/// <#= jT809SubBusinessTypeDescriptionAttribute.BusinessType.ToString() #>
/// <#= jT809SubBusinessTypeDescriptionAttribute.Code #> - <#= jT809SubBusinessTypeDescriptionAttribute.Name #>
/// auto-generated
/// </summary>
public static <#= jT809SubBodiesTypeAttribute.JT809BodiesType.FullName #> Create_<#= jT809SubBusinessTypeDescriptionAttribute.Name #>(this JT809SubBusinessType jT809SubBusinessType,<#= jT809SubBodiesTypeAttribute.JT809BodiesType.FullName #> subBodies)
{
return Create<<#= jT809SubBodiesTypeAttribute.JT809BodiesType.FullName#>>(jT809SubBusinessType,subBodies);
}
<#
}
#>
}
}

+ 6
- 1
src/JT809.Protocol/Formatters/IJT809FormatterOfT.cs 查看文件

@@ -3,10 +3,15 @@ using System.Buffers;

namespace JT809.Protocol.Formatters
{
public interface IJT809Formatter<T>
public interface IJT809Formatter<T>: IJT809Formatter
{
T Deserialize(ReadOnlySpan<byte> bytes, out int readSize);

int Serialize(ref byte[] bytes, int offset, T value);
}

public interface IJT809Formatter
{

}
}

+ 3
- 14
src/JT809.Protocol/Formatters/JT809BodiesFormatter.cs 查看文件

@@ -6,6 +6,7 @@ using System;
using System.Buffers;
using System.Collections.Generic;
using System.Text;
using JT809.Protocol.Internal;

namespace JT809.Protocol.Formatters
{
@@ -20,15 +21,9 @@ namespace JT809.Protocol.Formatters
jT809Bodies.VehicleColor = (JT809VehicleColorType)JT809BinaryExtensions.ReadByteLittle(bytes, ref offset);
jT809Bodies.SubBusinessType = (JT809SubBusinessType)JT809BinaryExtensions.ReadUInt16Little(bytes, ref offset);
jT809Bodies.DataLength = JT809BinaryExtensions.ReadUInt32Little(bytes, ref offset);
//JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性
JT809BodiesTypeAttribute jT809SubBodiesTypeAttribute = jT809Bodies.SubBusinessType.GetAttribute<JT809BodiesTypeAttribute>();
if (jT809SubBodiesTypeAttribute == null)
{
throw new JT809Exception(JT809ErrorCode.GetAttributeError, $"JT809BodiesTypeAttribute Not Found>{jT809Bodies.SubBusinessType.ToString()}");
}
try
{
jT809Bodies.SubBodies = JT809FormatterResolverExtensions.JT809DynamicDeserialize(JT809FormatterExtensions.GetFormatter(jT809SubBodiesTypeAttribute.JT809BodiesType), bytes.Slice(offset, (int)jT809Bodies.DataLength), out readSize);
jT809Bodies.SubBodies = jT809Bodies.SubBusinessType.Deserialize(bytes.Slice(offset, (int)jT809Bodies.DataLength), out readSize);
}
catch
{
@@ -43,17 +38,11 @@ namespace JT809.Protocol.Formatters
offset += JT809BinaryExtensions.WriteStringLittle(bytes, offset, value.VehicleNo, 21);
offset += JT809BinaryExtensions.WriteByteLittle(bytes, offset, (byte)value.VehicleColor);
offset += JT809BinaryExtensions.WriteUInt16Little(bytes, offset, (ushort)value.SubBusinessType);
//JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性
JT809BodiesTypeAttribute jT809SubBodiesTypeAttribute = value.SubBusinessType.GetAttribute<JT809BodiesTypeAttribute>();
if (jT809SubBodiesTypeAttribute == null)
{
throw new JT809Exception(JT809ErrorCode.GetAttributeError, $"JT809BodiesTypeAttribute Not Found>{value.SubBusinessType.ToString()}");
}
try
{
// 先写入内容,然后在根据内容反写内容长度
offset = offset + 4;
int contentOffset = JT809FormatterResolverExtensions.JT809DynamicSerialize(JT809FormatterExtensions.GetFormatter(jT809SubBodiesTypeAttribute.JT809BodiesType), ref bytes, offset, value.SubBodies);
int contentOffset = value.SubBusinessType.Serialize(ref bytes, offset, value.SubBodies);
JT809BinaryExtensions.WriteUInt32Little(bytes, offset - 4, (uint)(contentOffset- offset));
offset = contentOffset;
}


src/JT809.Protocol/Formatters/JT809HeaderPackageFromatter.cs → src/JT809.Protocol/Formatters/JT809HeaderPackageFormatter.cs 查看文件

@@ -6,7 +6,7 @@ using System;

namespace JT809.Protocol.Formatters
{
public class JT809HeaderPackageFromatter : IJT809Formatter<JT809HeaderPackage>
public class JT809HeaderPackageFormatter : IJT809Formatter<JT809HeaderPackage>
{
public JT809HeaderPackage Deserialize(ReadOnlySpan<byte> bytes, out int readSize)
{
@@ -35,7 +35,7 @@ namespace JT809.Protocol.Formatters
// 3.初始化消息头
try
{
jT809HeaderPackage.Header = JT809FormatterExtensions.GetFormatter<JT809Header>().Deserialize(buffer.Slice(offset, JT809Header.FixedByteLength), out readSize);
jT809HeaderPackage.Header = JT809FormatterExtensions.HeaderFormatter.Deserialize(buffer.Slice(offset, JT809Header.FixedByteLength), out readSize);
}
catch (Exception ex)
{
@@ -46,30 +46,25 @@ namespace JT809.Protocol.Formatters
// 5.1 判断是否有数据体(总长度-固定长度)> 0
if ((jT809HeaderPackage.Header.MsgLength - JT809Package.FixedByteLength) > 0)
{
//JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性
JT809BodiesTypeAttribute jT809BodiesTypeAttribute = jT809HeaderPackage.Header.BusinessType.GetAttribute<JT809BodiesTypeAttribute>();
if (jT809BodiesTypeAttribute != null)
try
{
try
// 5.2 是否加密
switch (jT809HeaderPackage.Header.EncryptFlag)
{
// 5.2 是否加密
switch (jT809HeaderPackage.Header.EncryptFlag)
{
case JT809Header_Encrypt.None:
//5.3 处理消息体
jT809HeaderPackage.Bodies = buffer.Slice(offset, checkIndex - offset).ToArray();
break;
case JT809Header_Encrypt.Common:
byte[] bodiesData = JT809GlobalConfig.Instance.Encrypt.Decrypt(buffer.Slice(offset, checkIndex - offset).ToArray(), jT809HeaderPackage.Header.EncryptKey);
jT809HeaderPackage.Bodies = bodiesData;
break;
}
}
catch (Exception ex)
{
throw new JT809Exception(JT809ErrorCode.BodiesParseError, $"offset>{offset.ToString()}", ex);
case JT809Header_Encrypt.None:
//5.3 处理消息体
jT809HeaderPackage.Bodies = buffer.Slice(offset, checkIndex - offset).ToArray();
break;
case JT809Header_Encrypt.Common:
byte[] bodiesData = JT809GlobalConfig.Instance.Encrypt.Decrypt(buffer.Slice(offset, checkIndex - offset).ToArray(), jT809HeaderPackage.Header.EncryptKey);
jT809HeaderPackage.Bodies = bodiesData;
break;
}
}
catch (Exception ex)
{
throw new JT809Exception(JT809ErrorCode.BodiesParseError, $"offset>{offset.ToString()}", ex);
}
}
jT809HeaderPackage.EndFlag = buffer[buffer.Length - 1];
readSize = buffer.Length;

+ 21
- 29
src/JT809.Protocol/Formatters/JT809PackageFormatter.cs 查看文件

@@ -2,6 +2,7 @@
using JT809.Protocol.Enums;
using JT809.Protocol.Exceptions;
using JT809.Protocol.Extensions;
using JT809.Protocol.Internal;
using System;
using System.Buffers;
using System.Collections.Generic;
@@ -38,7 +39,7 @@ namespace JT809.Protocol.Formatters
// 3.初始化消息头
try
{
jT809Package.Header = JT809FormatterExtensions.GetFormatter<JT809Header>().Deserialize(buffer.Slice(offset, JT809Header.FixedByteLength), out readSize);
jT809Package.Header = JT809FormatterExtensions.HeaderFormatter.Deserialize(buffer.Slice(offset, JT809Header.FixedByteLength), out readSize);
}
catch (Exception ex)
{
@@ -49,30 +50,25 @@ namespace JT809.Protocol.Formatters
// 5.1 判断是否有数据体(总长度-固定长度)> 0
if ((jT809Package.Header.MsgLength - JT809Package.FixedByteLength) > 0)
{
//JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性
JT809BodiesTypeAttribute jT809BodiesTypeAttribute = jT809Package.Header.BusinessType.GetAttribute<JT809BodiesTypeAttribute>();
if (jT809BodiesTypeAttribute != null)
try
{
try
// 5.2 是否加密
switch (jT809Package.Header.EncryptFlag)
{
// 5.2 是否加密
switch (jT809Package.Header.EncryptFlag)
{
case JT809Header_Encrypt.None:
//5.3 处理消息体
jT809Package.Bodies = JT809FormatterResolverExtensions.JT809DynamicDeserialize(JT809FormatterExtensions.GetFormatter(jT809BodiesTypeAttribute.JT809BodiesType), buffer.Slice(offset, checkIndex - offset), out readSize);
break;
case JT809Header_Encrypt.Common:
byte[] bodiesData = JT809GlobalConfig.Instance.Encrypt.Decrypt(buffer.Slice(offset, checkIndex - offset).ToArray(), jT809Package.Header.EncryptKey);
jT809Package.Bodies = JT809FormatterResolverExtensions.JT809DynamicDeserialize(JT809FormatterExtensions.GetFormatter(jT809BodiesTypeAttribute.JT809BodiesType), bodiesData, out readSize);
break;
}
}
catch (Exception ex)
{
throw new JT809Exception(JT809ErrorCode.BodiesParseError,$"offset>{offset.ToString()}", ex);
case JT809Header_Encrypt.None:
//5.3 处理消息体
jT809Package.Bodies = jT809Package.Header.BusinessType.Deserialize(buffer.Slice(offset, checkIndex - offset), out readSize);
break;
case JT809Header_Encrypt.Common:
byte[] bodiesData = JT809GlobalConfig.Instance.Encrypt.Decrypt(buffer.Slice(offset, checkIndex - offset).ToArray(), jT809Package.Header.EncryptKey);
jT809Package.Bodies = jT809Package.Header.BusinessType.Deserialize(bodiesData, out readSize);
break;
}
}
catch (Exception ex)
{
throw new JT809Exception(JT809ErrorCode.BodiesParseError,$"offset>{offset.ToString()}", ex);
}
}
jT809Package.EndFlag = buffer[buffer.Length - 1];
readSize = buffer.Length;
@@ -83,14 +79,10 @@ namespace JT809.Protocol.Formatters
{
// 1. 先序列化数据体,根据数据体的长度赋值给头部,在序列化头部。
int messageBodyOffset = 0;
JT809BodiesTypeAttribute jT809BodiesTypeAttribute = value.Header.BusinessType.GetAttribute<JT809BodiesTypeAttribute>();
if (jT809BodiesTypeAttribute != null)
if (value.Bodies != null)
{
if (value.Bodies != null)
{
// 1.1 处理数据体
messageBodyOffset = JT809FormatterResolverExtensions.JT809DynamicSerialize(JT809FormatterExtensions.GetFormatter(jT809BodiesTypeAttribute.JT809BodiesType), ref bytes, messageBodyOffset, value.Bodies);
}
// 1.1 处理数据体
messageBodyOffset = value.Header.BusinessType.Serialize(ref bytes, messageBodyOffset, value.Bodies);
}
byte[] messageBodyData=null;
if (messageBodyOffset != 0)
@@ -119,7 +111,7 @@ namespace JT809.Protocol.Formatters
value.Header.MsgLength = JT809Package.FixedByteLength;
}
// 2.1写入头部数据
offset = JT809FormatterExtensions.GetFormatter<JT809Header>().Serialize(ref bytes, offset, value.Header);
offset = JT809FormatterExtensions.HeaderFormatter.Serialize(ref bytes, offset, value.Header);
if (messageBodyOffset != 0)
{
// 3. 写入数据体


src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x9600_0x1601_Formatter.cs → src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x1600_0x1601_Formatter.cs 查看文件

@@ -7,7 +7,7 @@ using System.Text;

namespace JT809.Protocol.Formatters.SubMessageBodyFormatters
{
public class JT809_0x9600_0x1601_Formatter : IJT809Formatter<JT809_0x1600_0x1601>
public class JT809_0x1600_0x1601_Formatter : IJT809Formatter<JT809_0x1600_0x1601>
{
public JT809_0x1600_0x1601 Deserialize(ReadOnlySpan<byte> bytes, out int readSize)
{

+ 138
- 0
src/JT809.Protocol/Internal/BusinessTypeSerializerFactory.cs 查看文件

@@ -0,0 +1,138 @@
using JT809.Protocol.Enums;
using JT809.Protocol.Formatters;
using JT809.Protocol.Formatters.MessageBodyFormatters;
using JT809.Protocol.MessageBody;
using System;
using System.Collections.Generic;
using System.Text;

namespace JT809.Protocol.Internal
{
static class BusinessTypeSerializerFactory
{
static JT809_0x1001_Formatter jT809_0x1001_Formatter = new JT809_0x1001_Formatter();
static JT809_0x1002_Formatter jT809_0x1002_Formatter = new JT809_0x1002_Formatter();
static JT809_0x1003_Formatter jT809_0x1003_Formatter = new JT809_0x1003_Formatter();
static JT809_0x1007_Formatter jT809_0x1007_Formatter = new JT809_0x1007_Formatter();
static JT809_0x1008_Formatter jT809_0x1008_Formatter = new JT809_0x1008_Formatter();
static JT809BodiesFormatter<JT809_0x1200> JT809_0x1200_Formatter = new JT809BodiesFormatter<JT809_0x1200>();
static JT809_0x1300_Formatter jT809_0x1300_Formatter = new JT809_0x1300_Formatter();
static JT809BodiesFormatter<JT809_0x1400> JT809_0x1400_Formatter = new JT809BodiesFormatter<JT809_0x1400>();
static JT809BodiesFormatter<JT809_0x1500> JT809_0x1500_Formatter = new JT809BodiesFormatter<JT809_0x1500>();
static JT809BodiesFormatter<JT809_0x1600> JT809_0x1600_Formatter = new JT809BodiesFormatter<JT809_0x1600>();
static JT809_0x9001_Formatter jT809_0x9001_Formatter = new JT809_0x9001_Formatter();
static JT809_0x9002_Formatter jT809_0x9002_Formatter = new JT809_0x9002_Formatter();
static JT809_0x9003_Formatter jT809_0x9003_Formatter = new JT809_0x9003_Formatter();
static JT809_0x9007_Formatter jT809_0x9007_Formatter = new JT809_0x9007_Formatter();
static JT809_0x9008_Formatter jT809_0x9008_Formatter = new JT809_0x9008_Formatter();
static JT809_0x9101_Formatter jT809_0x9101_Formatter = new JT809_0x9101_Formatter();
static JT809BodiesFormatter<JT809_0x9200> jT809_0x9200_Formatter = new JT809BodiesFormatter<JT809_0x9200>();
static JT809_0x9300_Formatter jT809_0x9300_Formatter = new JT809_0x9300_Formatter();
static JT809BodiesFormatter<JT809_0x9400> jT809_0x9400_Formatter = new JT809BodiesFormatter<JT809_0x9400>();
static JT809BodiesFormatter<JT809_0x9500> jT809_0x9500_Formatter = new JT809BodiesFormatter<JT809_0x9500>();
static JT809BodiesFormatter<JT809_0x9600> jT809_0x9600_Formatter = new JT809BodiesFormatter<JT809_0x9600>();

public static JT809Bodies Deserialize(this JT809BusinessType jT809BusinessType, ReadOnlySpan<byte> bytes, out int readSize)
{
switch (jT809BusinessType)
{
case JT809BusinessType.主链路登录请求消息:
return jT809_0x1001_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.主链路登录应答消息:
return jT809_0x1002_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.主链路注销请求消息:
return jT809_0x1003_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.主链路断开通知消息:
return jT809_0x1007_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.下级平台主动关闭链路通知消息:
return jT809_0x1008_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.主链路动态信息交换消息:
return JT809_0x1200_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.主链路平台间信息交互消息:
return jT809_0x1300_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.主链路报警信息交互消息:
return JT809_0x1400_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.主链路车辆监管消息:
return JT809_0x1500_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.主链路静态信息交换消息:
return JT809_0x1600_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路连接请求消息:
return jT809_0x9001_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路连接应答消息:
return jT809_0x9002_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路注销请求消息:
return jT809_0x9003_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路断开通知消息:
return jT809_0x9007_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.上级平台主动关闭链路通知消息:
return jT809_0x9008_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.接收定位信息数量通知消息:
return jT809_0x9101_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路动态信息交换消息:
return jT809_0x9200_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路平台间信息交互消息:
return jT809_0x9300_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路报警信息交互消息:
return jT809_0x9400_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路车辆监管消息:
return jT809_0x9500_Formatter.Deserialize(bytes, out readSize);
case JT809BusinessType.从链路静态信息交换消息:
return jT809_0x9600_Formatter.Deserialize(bytes, out readSize);
default:
readSize = 0;
return default;
}
}

public static int Serialize(this JT809BusinessType jT809BusinessType, ref byte[] bytes, int offset, dynamic value)
{
switch (jT809BusinessType)
{
case JT809BusinessType.主链路登录请求消息:
return jT809_0x1001_Formatter.Serialize(ref bytes,offset, value);
case JT809BusinessType.主链路登录应答消息:
return jT809_0x1002_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.主链路注销请求消息:
return jT809_0x1003_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.主链路断开通知消息:
return jT809_0x1007_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.下级平台主动关闭链路通知消息:
return jT809_0x1008_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.主链路动态信息交换消息:
return JT809_0x1200_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.主链路平台间信息交互消息:
return jT809_0x1300_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.主链路报警信息交互消息:
return JT809_0x1400_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.主链路车辆监管消息:
return JT809_0x1500_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.主链路静态信息交换消息:
return JT809_0x1600_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路连接请求消息:
return jT809_0x9001_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路连接应答消息:
return jT809_0x9002_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路注销请求消息:
return jT809_0x9003_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路断开通知消息:
return jT809_0x9007_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.上级平台主动关闭链路通知消息:
return jT809_0x9008_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.接收定位信息数量通知消息:
return jT809_0x9101_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路动态信息交换消息:
return jT809_0x9200_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路平台间信息交互消息:
return jT809_0x9300_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路报警信息交互消息:
return jT809_0x9400_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路车辆监管消息:
return jT809_0x9500_Formatter.Serialize(ref bytes, offset, value);
case JT809BusinessType.从链路静态信息交换消息:
return jT809_0x9600_Formatter.Serialize(ref bytes, offset, value);
default:
return offset;
}
}
}
}

+ 221
- 0
src/JT809.Protocol/Internal/SubBodiesTypeSerializerFactory.cs 查看文件

@@ -0,0 +1,221 @@
using JT809.Protocol.Enums;
using JT809.Protocol.Formatters.SubMessageBodyFormatters;
using System;

namespace JT809.Protocol.Internal
{
static class SubBodiesTypeSerializerFactory
{
static JT809_0x1200_0x1201_Formatter jT809_0X1200_0X1201_Formatter = new JT809_0x1200_0x1201_Formatter();
static JT809_0x1200_0x1202_Formatter jT809_0X1200_0X1202_Formatter = new JT809_0x1200_0x1202_Formatter();
static JT809_0x1200_0x1203_Formatter jT809_0X1200_0X1203_Formatter = new JT809_0x1200_0x1203_Formatter();
static JT809_0x1200_0x1207_Formatter jT809_0X1200_0X1207_Formatter = new JT809_0x1200_0x1207_Formatter();
static JT809_0x1200_0x1209_Formatter jT809_0X1200_0X1209_Formatter = new JT809_0x1200_0x1209_Formatter();
static JT809_0x1200_0x120A_Formatter jT809_0X1200_0X120A_Formatter = new JT809_0x1200_0x120A_Formatter();
static JT809_0x1200_0x120B_Formatter jT809_0X1200_0X120B_Formatter = new JT809_0x1200_0x120B_Formatter();
static JT809_0x1200_0x120C_Formatter jT809_0X1200_0X120C_Formatter = new JT809_0x1200_0x120C_Formatter();
static JT809_0x1200_0x120D_Formatter jT809_0X1200_0X120D_Formatter = new JT809_0x1200_0x120D_Formatter();
static JT809_0x1300_0x1301_Formatter jT809_0X1300_0X1301_Formatter = new JT809_0x1300_0x1301_Formatter();
static JT809_0x1300_0x1302_Formatter jT809_0X1300_0X1302_Formatter = new JT809_0x1300_0x1302_Formatter();
static JT809_0x1400_0x1401_Formatter jT809_0X1400_0X1401_Formatter = new JT809_0x1400_0x1401_Formatter();
static JT809_0x1400_0x1402_Formatter jT809_0X1400_0X1402_Formatter = new JT809_0x1400_0x1402_Formatter();
static JT809_0x1400_0x1403_Formatter jT809_0X1400_0X1403_Formatter = new JT809_0x1400_0x1403_Formatter();
static JT809_0x1500_0x1501_Formatter jT809_0X1500_0X1501_Formatter = new JT809_0x1500_0x1501_Formatter();
static JT809_0x1500_0x1502_Formatter jT809_0X1500_0X1502_Formatter = new JT809_0x1500_0x1502_Formatter();
static JT809_0x1500_0x1503_Formatter jT809_0X1500_0X1503_Formatter = new JT809_0x1500_0x1503_Formatter();
static JT809_0x1500_0x1504_Formatter jT809_0X1500_0X1504_Formatter = new JT809_0x1500_0x1504_Formatter();
static JT809_0x1500_0x1505_Formatter jT809_0X1500_0X1505_Formatter = new JT809_0x1500_0x1505_Formatter();
static JT809_0x1600_0x1601_Formatter jT809_0X1600_0X1601_Formatter = new JT809_0x1600_0x1601_Formatter();

static JT809_0x9200_0x9202_Formatter jT809_0X9200_0X9202_Formatter = new JT809_0x9200_0x9202_Formatter();
static JT809_0x9200_0x9203_Formatter jT809_0X9200_0X9203_Formatter = new JT809_0x9200_0x9203_Formatter();
static JT809_0x9200_0x9204_Formatter jT809_0X9200_0X9204_Formatter = new JT809_0x9200_0x9204_Formatter();
static JT809_0x9200_0x9205_Formatter jT809_0X9200_0X9205_Formatter = new JT809_0x9200_0x9205_Formatter();
static JT809_0x9200_0x9206_Formatter jT809_0X9200_0X9206_Formatter = new JT809_0x9200_0x9206_Formatter();
static JT809_0x9200_0x9207_Formatter jT809_0X9200_0X9207_Formatter = new JT809_0x9200_0x9207_Formatter();
static JT809_0x9200_0x9208_Formatter jT809_0X9200_0X9208_Formatter = new JT809_0x9200_0x9208_Formatter();
static JT809_0x9200_0x9209_Formatter jT809_0X9200_0X9209_Formatter = new JT809_0x9200_0x9209_Formatter();
static JT809_0x9300_0x9301_Formatter jT809_0X9300_0X9301_Formatter = new JT809_0x9300_0x9301_Formatter();
static JT809_0x9300_0x9302_Formatter jT809_0X9300_0X9302_Formatter = new JT809_0x9300_0x9302_Formatter();
static JT809_0x9400_0x9401_Formatter jT809_0X9400_0X9401_Formatter = new JT809_0x9400_0x9401_Formatter();
static JT809_0x9400_0x9402_Formatter jT809_0X9400_0X9402_Formatter = new JT809_0x9400_0x9402_Formatter();
static JT809_0x9400_0x9403_Formatter jT809_0X9400_0X9403_Formatter = new JT809_0x9400_0x9403_Formatter();
static JT809_0x9500_0x9501_Formatter jT809_0X9500_0X9501_Formatter = new JT809_0x9500_0x9501_Formatter();
static JT809_0x9500_0x9502_Formatter jT809_0X9500_0X9502_Formatter = new JT809_0x9500_0x9502_Formatter();
static JT809_0x9500_0x9503_Formatter jT809_0X9500_0X9503_Formatter = new JT809_0x9500_0x9503_Formatter();
static JT809_0x9500_0x9504_Formatter jT809_0X9500_0X9504_Formatter = new JT809_0x9500_0x9504_Formatter();
static JT809_0x9500_0x9505_Formatter jT809_0X9500_0X9505_Formatter = new JT809_0x9500_0x9505_Formatter();


public static JT809SubBodies Deserialize(this JT809SubBusinessType jT809SubBusinessType, ReadOnlySpan<byte> bytes, out int readSize)
{
switch (jT809SubBusinessType)
{
case JT809SubBusinessType.上传车辆注册信息:
return jT809_0X1200_0X1201_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.实时上传车辆定位信息:
return jT809_0X1200_0X1202_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.车辆定位信息自动补报:
return jT809_0X1200_0X1203_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.申请交换指定车辆定位信息请求:
return jT809_0X1200_0X1207_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.补发车辆定位信息请求:
return jT809_0X1200_0X1209_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.上报车辆驾驶员身份识别信息应答:
return jT809_0X1200_0X120A_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.上报车辆电子运单应答:
return jT809_0X1200_0X120B_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.主动上报驾驶员身份信息:
return jT809_0X1200_0X120C_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.主动上报车辆电子运单信息:
return jT809_0X1200_0X120D_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.平台查岗应答:
return jT809_0X1300_0X1301_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.下发平台间报文应答:
return jT809_0X1300_0X1302_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.报警督办应答:
return jT809_0X1400_0X1401_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.上报报警信息:
return jT809_0X1400_0X1402_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.主动上报报警处理结果信息:
return jT809_0X1400_0X1403_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.车辆单向监听应答:
return jT809_0X1500_0X1501_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.车辆拍照应答:
return jT809_0X1500_0X1502_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.下发车辆报文应答:
return jT809_0X1500_0X1503_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.上报车辆行驶记录应答:
return jT809_0X1500_0X1504_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.车辆应急接入监管平台应答消息:
return jT809_0X1500_0X1505_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.补报车辆静态信息应答:
return jT809_0X1600_0X1601_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.交换车辆定位信息:
return jT809_0X9200_0X9202_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.车辆定位信息交换补发:
return jT809_0X9200_0X9203_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.交换车辆静态信息:
return jT809_0X9200_0X9204_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.启动车辆定位信息交换请求:
return jT809_0X9200_0X9205_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.结束车辆定位信息交换请求:
return jT809_0X9200_0X9206_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.申请交换指定车辆定位信息应答:
return jT809_0X9200_0X9207_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.取消交换指定车辆定位信息应答:
return jT809_0X9200_0X9208_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.补发车辆定位信息应答:
return jT809_0X9200_0X9209_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.平台查岗请求:
return jT809_0X9300_0X9301_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.下发平台间报文请求:
return jT809_0X9300_0X9302_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.报警督办请求:
return jT809_0X9400_0X9401_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.报警预警:
return jT809_0X9400_0X9402_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.实时交换报警信息:
return jT809_0X9400_0X9403_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.车辆单向监听请求:
return jT809_0X9500_0X9501_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.车辆拍照请求:
return jT809_0X9500_0X9502_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.下发车辆报文请求:
return jT809_0X9500_0X9503_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.上报车辆行驶记录请求:
return jT809_0X9500_0X9504_Formatter.Deserialize(bytes, out readSize);
case JT809SubBusinessType.车辆应急接入监管平台请求消息:
return jT809_0X9500_0X9505_Formatter.Deserialize(bytes, out readSize);
default:
readSize = 0;
return default;
}
}

public static int Serialize(this JT809SubBusinessType jT809SubBusinessType, ref byte[] bytes, int offset, dynamic value)
{
switch (jT809SubBusinessType)
{
case JT809SubBusinessType.上传车辆注册信息:
return jT809_0X1200_0X1201_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.实时上传车辆定位信息:
return jT809_0X1200_0X1202_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.车辆定位信息自动补报:
return jT809_0X1200_0X1203_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.申请交换指定车辆定位信息请求:
return jT809_0X1200_0X1207_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.补发车辆定位信息请求:
return jT809_0X1200_0X1209_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.上报车辆驾驶员身份识别信息应答:
return jT809_0X1200_0X120A_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.上报车辆电子运单应答:
return jT809_0X1200_0X120B_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.主动上报驾驶员身份信息:
return jT809_0X1200_0X120C_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.主动上报车辆电子运单信息:
return jT809_0X1200_0X120D_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.平台查岗应答:
return jT809_0X1300_0X1301_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.下发平台间报文应答:
return jT809_0X1300_0X1302_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.报警督办应答:
return jT809_0X1400_0X1401_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.上报报警信息:
return jT809_0X1400_0X1402_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.主动上报报警处理结果信息:
return jT809_0X1400_0X1403_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.车辆单向监听应答:
return jT809_0X1500_0X1501_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.车辆拍照应答:
return jT809_0X1500_0X1502_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.下发车辆报文应答:
return jT809_0X1500_0X1503_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.上报车辆行驶记录应答:
return jT809_0X1500_0X1504_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.车辆应急接入监管平台应答消息:
return jT809_0X1500_0X1505_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.补报车辆静态信息应答:
return jT809_0X1600_0X1601_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.交换车辆定位信息:
return jT809_0X9200_0X9202_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.车辆定位信息交换补发:
return jT809_0X9200_0X9203_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.交换车辆静态信息:
return jT809_0X9200_0X9204_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.启动车辆定位信息交换请求:
return jT809_0X9200_0X9205_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.结束车辆定位信息交换请求:
return jT809_0X9200_0X9206_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.申请交换指定车辆定位信息应答:
return jT809_0X9200_0X9207_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.取消交换指定车辆定位信息应答:
return jT809_0X9200_0X9208_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.补发车辆定位信息应答:
return jT809_0X9200_0X9209_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.平台查岗请求:
return jT809_0X9300_0X9301_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.下发平台间报文请求:
return jT809_0X9300_0X9302_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.报警督办请求:
return jT809_0X9400_0X9401_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.报警预警:
return jT809_0X9400_0X9402_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.实时交换报警信息:
return jT809_0X9400_0X9403_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.车辆单向监听请求:
return jT809_0X9500_0X9501_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.车辆拍照请求:
return jT809_0X9500_0X9502_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.下发车辆报文请求:
return jT809_0X9500_0X9503_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.上报车辆行驶记录请求:
return jT809_0X9500_0X9504_Formatter.Serialize(ref bytes, offset, value);
case JT809SubBusinessType.车辆应急接入监管平台请求消息:
return jT809_0X9500_0X9505_Formatter.Serialize(ref bytes, offset, value);
default:
return offset;
}
}
}
}

+ 44
- 3
src/JT809.Protocol/JT809.Protocol.csproj 查看文件

@@ -12,9 +12,9 @@
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<RepositoryUrl>https://github.com/SmallChi/JT809</RepositoryUrl>
<PackageProjectUrl>https://github.com/SmallChi/JT809</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/SmallChi/JT809/blob/master/LICENSE</PackageLicenseUrl>
<license>https://github.com/SmallChi/JT809/blob/master/LICENSE</license>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.2.1</Version>
<Version>1.3.0</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
@@ -84,12 +84,53 @@
<Compile Include="Enums\JT809_VehiclePositionEncrypt.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Extensions\JT809PackageExtensionsTemplate.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>JT809PackageExtensionsTemplate.tt</DependentUpon>
</None>
<None Include="Extensions\JT809SubPackageExtensionsTemplate.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>JT809SubPackageExtensionsTemplate.tt</DependentUpon>
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
<PackageReference Include="System.Buffers" Version="4.5.0" />
<PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" />
<PackageReference Include="System.Memory" Version="4.5.2" />
<PackageReference Include="System.Memory" Version="4.5.3" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" />
</ItemGroup>
<ItemGroup>
<None Update="Extensions\JT809PackageExtensionsTemplate.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>JT809PackageExtensionsTemplate.cs</LastGenOutput>
</None>
<None Update="Extensions\JT809SubPackageExtensionsTemplate.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>JT809SubPackageExtensionsTemplate.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
<ItemGroup>
<Compile Update="Extensions\JT809PackageExtensionsTemplate.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>JT809PackageExtensionsTemplate.tt</DependentUpon>
</Compile>
<Compile Update="Extensions\JT809SubPackageExtensionsTemplate.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>JT809SubPackageExtensionsTemplate.tt</DependentUpon>
</Compile>
</ItemGroup>
</Project>

+ 1
- 1
src/JT809.Protocol/JT809HeaderPackage.cs 查看文件

@@ -9,7 +9,7 @@ namespace JT809.Protocol
/// <summary>
/// JT809头部数据包
/// </summary>
[JT809Formatter(typeof(JT809HeaderPackageFromatter))]
[JT809Formatter(typeof(JT809HeaderPackageFormatter))]
public class JT809HeaderPackage
{
public byte BeginFlag { get; set; } = JT809Package.BEGINFLAG;


+ 12
- 5
src/JT809.Protocol/JT809Serializer.cs 查看文件

@@ -14,12 +14,21 @@ namespace JT809.Protocol
{
public static byte[] Serialize(JT809Package jT809Package, int minBufferSize = 1024)
{
return Serialize<JT809Package>(jT809Package, minBufferSize);
byte[] buffer = JT809ArrayPool.Rent(minBufferSize);
try
{
var len = JT809FormatterExtensions.PackageFormatter.Serialize(ref buffer, 0, jT809Package);
return buffer.AsSpan(0, len).ToArray();
}
finally
{
JT809ArrayPool.Return(buffer);
}
}

public static JT809Package Deserialize(ReadOnlySpan<byte> bytes)
{
return Deserialize<JT809Package>(bytes);
return JT809FormatterExtensions.PackageFormatter.Deserialize(bytes, out _);
}

public static byte[] Serialize<T>(T obj, int minBufferSize = 1024)
@@ -39,9 +48,7 @@ namespace JT809.Protocol

public static T Deserialize<T>(ReadOnlySpan<byte> bytes)
{
var formatter = JT809FormatterExtensions.GetFormatter<T>();
int readSize;
return formatter.Deserialize(bytes, out readSize);
return JT809FormatterExtensions.GetFormatter<T>().Deserialize(bytes, out _);
}
}
}

+ 1
- 1
src/JT809.Protocol/SubMessageBody/JT809_0x1600_0x1601.cs 查看文件

@@ -11,7 +11,7 @@ namespace JT809.Protocol.SubMessageBody
/// <para>子业务类型标识:UP_BASE_MSG_VEHICLE_ADDED_ACK</para>
/// <para>描述:上级平台应答下级平台发送的补报车辆静态信息清求消息</para>
/// </summary>
[JT809Formatter(typeof(JT809_0x9600_0x1601_Formatter))]
[JT809Formatter(typeof(JT809_0x1600_0x1601_Formatter))]
public class JT809_0x1600_0x1601:JT809SubBodies
{
/// <summary>


+ 1
- 1
src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9204.cs 查看文件

@@ -12,7 +12,7 @@ namespace JT809.Protocol.SubMessageBody
/// <para>描述:在首次启动跨域车辆定位信息交换,或者以后交换过程中车辆静态信息有更新时,由上级平台向下级平台下发一次车辆静态信息。下.级平台接收后自行更新该车辆静态信息</para>
/// </summary>
[JT809Formatter(typeof(JT809_0x9200_0x9204_Formatter))]
public class JT809_0x9200_0x9204
public class JT809_0x9200_0x9204:JT809SubBodies
{
/// <summary>
/// 车辆信息


+ 1
- 1
src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x920B.cs 查看文件

@@ -8,7 +8,7 @@ namespace JT809.Protocol.SubMessageBody
/// 上报车辆电子运单请求消息
/// <para>子业务类型标识:DOWN_EXG_MSG_TAKE_EWAYBILL_REQ</para>
/// </summary>
public class JT809_0x9200_0x920B
public class JT809_0x9200_0x920B:JT809SubBodies
{
}
}

正在加载...
取消
保存