1.增加父子命令字的静态序列化工厂 2.增加父子命令字的模板创建 3.修改头部序列化器的命名 4.修复0x1600_0x1601序列化器 5.增加父子命令字模板创建测试 6.修改基准测试的报告tags/v1.3.0
@@ -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协议消息对照表 | |||
@@ -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> | |||
@@ -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> | |||
@@ -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); | |||
} | |||
} | |||
} |
@@ -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; } | |||
} | |||
} |
@@ -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; | |||
} | |||
} | |||
} |
@@ -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); | |||
} | |||
} | |||
} |
@@ -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); | |||
} | |||
<# | |||
} | |||
#> | |||
} | |||
} |
@@ -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; | |||
} | |||
} | |||
} |
@@ -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); | |||
} | |||
} | |||
} |
@@ -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); | |||
} | |||
<# | |||
} | |||
#> | |||
} | |||
} |
@@ -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 | |||
{ | |||
} | |||
} |
@@ -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; | |||
} | |||
@@ -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; |
@@ -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. 写入数据体 | |||
@@ -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) | |||
{ |
@@ -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; | |||
} | |||
} | |||
} | |||
} |
@@ -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; | |||
} | |||
} | |||
} | |||
} |
@@ -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> |
@@ -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; | |||
@@ -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 _); | |||
} | |||
} | |||
} |
@@ -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> | |||
@@ -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> | |||
/// 车辆信息 | |||
@@ -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 | |||
{ | |||
} | |||
} |