From 76df05c637c187ad24d4d181316fb2c2c2a8dc65 Mon Sep 17 00:00:00 2001
From: "SmallChi(Koike)" <564952747@qq.com>
Date: Mon, 8 Feb 2021 20:31:52 +0800
Subject: [PATCH] =?UTF-8?q?1.=E5=AE=8C=E5=96=84=E7=BB=84=E5=8C=85=E7=9A=84?=
=?UTF-8?q?=E9=95=BF=E5=BA=A6=E6=A0=A1=E9=AA=8C=202.=E5=AE=8C=E5=96=84?=
=?UTF-8?q?=E6=8C=87=E4=BB=A4=E6=B6=88=E6=81=AF=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../MessageBody/JT808_0x0608Test.cs | 2 +-
.../DependencyInjectionExtensions.cs | 35 +-
src/JT808.Protocol/Enums/JT808Alarm.cs | 9 +
src/JT808.Protocol/Enums/JT808CallBackType.cs | 6 +
.../Enums/JT808CameraResolutionType.cs | 24 +
.../Enums/JT808DirectionType.cs | 6 +
src/JT808.Protocol/Enums/JT808ErrorCode.cs | 3 +
.../Enums/JT808TelephoneBookContactType.cs | 9 +
.../Enums/JT808TerminalRegisterResult.cs | 18 +
.../Enums/JT808TerminalResult.cs | 3 +
...8MessagePackFormatterResolverExtensions.cs | 14 +
.../Extensions/JT808ValidationExtensions.cs | 4 +-
src/JT808.Protocol/IJT808Builder.cs | 9 +
.../Interfaces/GlobalConfigBase.cs | 73 +
.../Interfaces/IJT808Analyze.cs | 9 +
.../Interfaces/IJT808Compress.cs | 10 +
src/JT808.Protocol/Interfaces/IJT808Config.cs | 3 +
.../Interfaces/IJT808Description.cs | 6 +
.../Interfaces/IJT808MsgIdFactory.cs | 17 +
.../Interfaces/IJT808MsgSNDistributed.cs | 8 +
.../Interfaces/IJT808SplitPackageStrategy.cs | 5 +
.../IJT808_0x0200_Custom_Factory.cs | 11 +
.../Interfaces/IJT808_0x0200_Factory.cs | 12 +-
.../IJT808_0x0900_Custom_Factory.cs | 11 +
.../IJT808_0x8103_Custom_Factory.cs | 11 +
.../Interfaces/IJT808_0x8103_Factory.cs | 11 +
.../Interfaces/IJT808_0x8500_2019_Factory.cs | 11 +
.../IJT808_0x8900_Custom_Factory.cs | 11 +
src/JT808.Protocol/Internal/DefaultBuilder.cs | 14 +
.../Internal/DefaultGlobalConfig.cs | 10 +
.../Internal/JT808_CarDVR_Up_Factory.cs | 17 +-
src/JT808.Protocol/JT808.Protocol.xml | 2989 +++++++++++++++--
src/JT808.Protocol/JT808ArrayPool.cs | 15 +-
src/JT808.Protocol/JT808Bodies.cs | 11 +-
src/JT808.Protocol/JT808CarDVRDownBodies.cs | 9 +-
src/JT808.Protocol/JT808CarDVRDownPackage.cs | 27 +-
src/JT808.Protocol/JT808CarDVRSerializer.cs | 152 +-
src/JT808.Protocol/JT808CarDVRUpBodies.cs | 9 +-
src/JT808.Protocol/JT808CarDVRUpPackage.cs | 24 +-
src/JT808.Protocol/JT808Constants.cs | 51 +
src/JT808.Protocol/JT808Header.cs | 14 +-
.../JT808HeaderMessageBodyProperty.cs | 34 +-
src/JT808.Protocol/JT808HeaderPackage.cs | 6 +-
src/JT808.Protocol/JT808Package.cs | 21 +-
src/JT808.Protocol/JT808Serializer.cs | 105 +-
.../MessageBody/JT808_0x0704.cs | 6 +
.../MessageBody/JT808_0x8004.cs | 4 +-
.../MessageBody/JT808_0x8103_0x0018.cs | 2 +-
.../MessageBody/JT808_0x8103_0x0101.cs | 6 +-
.../MessageBody/JT808_0x8103_0x0110.cs | 21 +-
.../MessageBody/JT808_0x8600.cs | 27 +-
.../MessageBody/JT808_0x8601.cs | 27 +-
.../MessageBody/JT808_0x8602.cs | 27 +-
.../MessageBody/JT808_0x8603.cs | 27 +-
.../MessageBody/JT808_0x8604.cs | 27 +-
.../MessageBody/JT808_0x8605.cs | 26 +-
.../MessageBody/JT808_0x8606.cs | 27 +-
.../MessageBody/JT808_0x8607.cs | 27 +-
.../MessageBody/JT808_0x8608.cs | 27 +-
.../MessageBody/JT808_0x8700.cs | 37 +-
.../MessageBody/JT808_0x8701.cs | 34 +-
.../MessageBody/JT808_0x8702.cs | 6 +
.../MessageBody/JT808_0x8800.cs | 27 +-
.../MessageBody/JT808_0x8801.cs | 27 +-
.../MessageBody/JT808_0x8802.cs | 27 +-
.../MessageBody/JT808_0x8803.cs | 27 +-
.../MessageBody/JT808_0x8804.cs | 26 +-
.../MessageBody/JT808_0x8805.cs | 28 +-
.../MessageBody/JT808_0x8900.cs | 27 +-
.../MessageBody/JT808_0x8A00.cs | 27 +-
70 files changed, 4031 insertions(+), 402 deletions(-)
diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0608Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0608Test.cs
index a4c35e1..f465451 100644
--- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0608Test.cs
+++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0608Test.cs
@@ -295,7 +295,7 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(DateTime.Parse("2020-01-07 00:00:12"), jT808_0X8606.StartTime);
Assert.Equal(DateTime.Parse("2020-01-07 00:00:12"), jT808_0X8606.EndTime);
- Assert.Equal(1, jT808_0X8606.InflectionPointItems.Count);
+ Assert.Single(jT808_0X8606.InflectionPointItems);
Assert.Equal((uint)1000, jT808_0X8606.InflectionPointItems[0].InflectionPointId);
Assert.Equal((uint)123456789, jT808_0X8606.InflectionPointItems[0].InflectionPointLat);
diff --git a/src/JT808.Protocol/DependencyInjectionExtensions.cs b/src/JT808.Protocol/DependencyInjectionExtensions.cs
index 85c46e2..2c21686 100644
--- a/src/JT808.Protocol/DependencyInjectionExtensions.cs
+++ b/src/JT808.Protocol/DependencyInjectionExtensions.cs
@@ -8,36 +8,61 @@ using System.Text;
namespace JT808.Protocol
{
///
- ///
+ /// DI扩展
///
public static class DependencyInjectionExtensions
{
+ ///
+ /// 注册808配置
+ ///
+ ///
+ ///
+ ///
public static IJT808Builder AddJT808Configure(this IServiceCollection services, IJT808Config jT808Config)
{
services.AddSingleton(jT808Config.GetType(), jT808Config);
return new DefaultBuilder(services, jT808Config);
}
-
+ ///
+ /// 注册808配置
+ ///
+ ///
+ ///
+ ///
public static IJT808Builder AddJT808Configure(this IJT808Builder builder, IJT808Config jT808Config)
{
builder.Services.AddSingleton(jT808Config.GetType(), jT808Config);
return builder;
}
-
+ ///
+ /// 注册808配置
+ ///
+ ///
+ ///
+ ///
public static IJT808Builder AddJT808Configure(this IServiceCollection services)where TJT808Config : IJT808Config,new()
{
var config = new TJT808Config();
services.AddSingleton(typeof(TJT808Config), config);
return new DefaultBuilder(services, config);
}
-
+ ///
+ /// 注册808配置
+ ///
+ ///
+ ///
+ ///
public static IJT808Builder AddJT808Configure(this IJT808Builder builder) where TJT808Config : IJT808Config, new()
{
var config = new TJT808Config();
builder.Services.AddSingleton(typeof(TJT808Config), config);
return builder;
}
-
+ ///
+ /// 注册808配置
+ ///
+ ///
+ ///
public static IJT808Builder AddJT808Configure(this IServiceCollection services)
{
DefaultGlobalConfig config = new DefaultGlobalConfig();
diff --git a/src/JT808.Protocol/Enums/JT808Alarm.cs b/src/JT808.Protocol/Enums/JT808Alarm.cs
index 33bc2e3..8ebe5ff 100644
--- a/src/JT808.Protocol/Enums/JT808Alarm.cs
+++ b/src/JT808.Protocol/Enums/JT808Alarm.cs
@@ -85,8 +85,17 @@ namespace JT808.Protocol.Enums
/// 标志维持至报警条件解除
///
疲劳驾驶预警 = 16384,
+ ///
+ /// 保留1
+ ///
保留1 = 32768,
+ ///
+ /// 保留2
+ ///
保留2 = 65536,
+ ///
+ /// 保留3
+ ///
保留3 = 131072,
///
/// 当天累计驾驶超时
diff --git a/src/JT808.Protocol/Enums/JT808CallBackType.cs b/src/JT808.Protocol/Enums/JT808CallBackType.cs
index 53c3151..125c2e8 100644
--- a/src/JT808.Protocol/Enums/JT808CallBackType.cs
+++ b/src/JT808.Protocol/Enums/JT808CallBackType.cs
@@ -5,7 +5,13 @@
///
public enum JT808CallBackType : byte
{
+ ///
+ /// 普通通话
+ ///
普通通话 = 0,
+ ///
+ /// 监听
+ ///
监听 = 1
}
}
diff --git a/src/JT808.Protocol/Enums/JT808CameraResolutionType.cs b/src/JT808.Protocol/Enums/JT808CameraResolutionType.cs
index 3bdf2b9..049684a 100644
--- a/src/JT808.Protocol/Enums/JT808CameraResolutionType.cs
+++ b/src/JT808.Protocol/Enums/JT808CameraResolutionType.cs
@@ -9,13 +9,37 @@ namespace JT808.Protocol.Enums
///
public enum JT808CameraResolutionType:byte
{
+ ///
+ /// x320_240
+ ///
x320_240 = 0x01,
+ ///
+ /// x640_480
+ ///
x640_480 = 0x02,
+ ///
+ /// x800_600
+ ///
x800_600 = 0x03,
+ ///
+ /// x1020_768
+ ///
x1020_768 = 0x04,
+ ///
+ /// x176_144_Qcif
+ ///
x176_144_Qcif = 0x05,
+ ///
+ /// x352_288_Cif
+ ///
x352_288_Cif = 0x06,
+ ///
+ /// x704_288_HALF_D1
+ ///
x704_288_HALF_D1 = 0x07,
+ ///
+ /// x704_576_D1
+ ///
x704_576_D1 = 0x07,
}
}
diff --git a/src/JT808.Protocol/Enums/JT808DirectionType.cs b/src/JT808.Protocol/Enums/JT808DirectionType.cs
index 7982773..71e6daf 100644
--- a/src/JT808.Protocol/Enums/JT808DirectionType.cs
+++ b/src/JT808.Protocol/Enums/JT808DirectionType.cs
@@ -5,7 +5,13 @@
///
public enum JT808DirectionType : byte
{
+ ///
+ /// 进
+ ///
进 = 0,
+ ///
+ /// 出
+ ///
出 = 1
}
}
diff --git a/src/JT808.Protocol/Enums/JT808ErrorCode.cs b/src/JT808.Protocol/Enums/JT808ErrorCode.cs
index 8d4e85a..3124fe9 100644
--- a/src/JT808.Protocol/Enums/JT808ErrorCode.cs
+++ b/src/JT808.Protocol/Enums/JT808ErrorCode.cs
@@ -1,5 +1,8 @@
namespace JT808.Protocol.Enums
{
+ ///
+ /// 异常错误码
+ ///
public enum JT808ErrorCode
{
///
diff --git a/src/JT808.Protocol/Enums/JT808TelephoneBookContactType.cs b/src/JT808.Protocol/Enums/JT808TelephoneBookContactType.cs
index b091082..5781fcd 100644
--- a/src/JT808.Protocol/Enums/JT808TelephoneBookContactType.cs
+++ b/src/JT808.Protocol/Enums/JT808TelephoneBookContactType.cs
@@ -5,8 +5,17 @@
///
public enum JT808TelephoneBookContactType : byte
{
+ ///
+ /// 呼入
+ ///
呼入 = 1,
+ ///
+ /// 呼出
+ ///
呼出 = 2,
+ ///
+ /// 呼入_呼出
+ ///
呼入_呼出 = 3
}
}
diff --git a/src/JT808.Protocol/Enums/JT808TerminalRegisterResult.cs b/src/JT808.Protocol/Enums/JT808TerminalRegisterResult.cs
index 8cd5ea3..bc25a68 100644
--- a/src/JT808.Protocol/Enums/JT808TerminalRegisterResult.cs
+++ b/src/JT808.Protocol/Enums/JT808TerminalRegisterResult.cs
@@ -1,11 +1,29 @@
namespace JT808.Protocol.Enums
{
+ ///
+ /// 终端注册返回结果
+ ///
public enum JT808TerminalRegisterResult : byte
{
+ ///
+ /// 成功
+ ///
成功 = 0x00,
+ ///
+ /// 车辆已被注册
+ ///
车辆已被注册 = 0x01,
+ ///
+ /// 数据库中无该车辆
+ ///
数据库中无该车辆 = 0x02,
+ ///
+ /// 终端已被注册
+ ///
终端已被注册 = 0x03,
+ ///
+ /// 数据库中无该终端
+ ///
数据库中无该终端 = 0x04
}
}
diff --git a/src/JT808.Protocol/Enums/JT808TerminalResult.cs b/src/JT808.Protocol/Enums/JT808TerminalResult.cs
index e777c30..e602767 100644
--- a/src/JT808.Protocol/Enums/JT808TerminalResult.cs
+++ b/src/JT808.Protocol/Enums/JT808TerminalResult.cs
@@ -1,5 +1,8 @@
namespace JT808.Protocol.Enums
{
+ ///
+ /// 通用应答返回
+ ///
public enum JT808TerminalResult : byte
{
///
diff --git a/src/JT808.Protocol/Extensions/JT808MessagePackFormatterResolverExtensions.cs b/src/JT808.Protocol/Extensions/JT808MessagePackFormatterResolverExtensions.cs
index 2bdf6c8..f6e5fd2 100644
--- a/src/JT808.Protocol/Extensions/JT808MessagePackFormatterResolverExtensions.cs
+++ b/src/JT808.Protocol/Extensions/JT808MessagePackFormatterResolverExtensions.cs
@@ -23,6 +23,13 @@ namespace JT808.Protocol.Extensions
static readonly ConcurrentDictionary jT808Serializers = new ConcurrentDictionary();
static readonly ConcurrentDictionary jT808Deserializes = new ConcurrentDictionary();
+ ///
+ /// JT808动态序列化
+ ///
+ ///
+ ///
+ ///
+ ///
public static void JT808DynamicSerialize(object objFormatter, ref JT808MessagePackWriter writer, object value, IJT808Config config)
{
Type type = value.GetType();
@@ -51,6 +58,13 @@ namespace JT808.Protocol.Extensions
}
formatterAndDelegate.SerializeMethod(formatterAndDelegate.Value, ref writer, value, config);
}
+ ///
+ /// JT808动态反序列化
+ ///
+ ///
+ ///
+ ///
+ ///
public static dynamic JT808DynamicDeserialize(object objFormatter, ref JT808MessagePackReader reader, IJT808Config config)
{
var type = objFormatter.GetType();
diff --git a/src/JT808.Protocol/Extensions/JT808ValidationExtensions.cs b/src/JT808.Protocol/Extensions/JT808ValidationExtensions.cs
index 95b97d9..5754d8e 100644
--- a/src/JT808.Protocol/Extensions/JT808ValidationExtensions.cs
+++ b/src/JT808.Protocol/Extensions/JT808ValidationExtensions.cs
@@ -32,9 +32,9 @@ namespace JT808.Protocol.Extensions
///
public static string ValiMaxString(this string value, in string fieldName, in int maxLength)
{
- if (length > maxLength)
+ if (value.Length > maxLength)
{
- throw new JT808Exception(JT808ErrorCode.VailLength, $"{fieldName}:{length}>max length[{maxLength}]");
+ throw new JT808Exception(JT808ErrorCode.VailLength, $"{fieldName}:{value.Length}>max length[{maxLength}]");
}
return value;
}
diff --git a/src/JT808.Protocol/IJT808Builder.cs b/src/JT808.Protocol/IJT808Builder.cs
index 25ef952..5846031 100644
--- a/src/JT808.Protocol/IJT808Builder.cs
+++ b/src/JT808.Protocol/IJT808Builder.cs
@@ -6,9 +6,18 @@ using System.Text;
namespace JT808.Protocol
{
+ ///
+ /// JT808构造器
+ ///
public interface IJT808Builder
{
+ ///
+ /// JT808配置
+ ///
IJT808Config Config { get; }
+ ///
+ /// 服务注册
+ ///
IServiceCollection Services { get; }
}
}
diff --git a/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs b/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs
index d83fb12..9df1cac 100644
--- a/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs
+++ b/src/JT808.Protocol/Interfaces/GlobalConfigBase.cs
@@ -7,8 +7,14 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 全局配置基类
+ ///
public abstract class GlobalConfigBase : IJT808Config
{
+ ///
+ ///
+ ///
protected GlobalConfigBase()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
@@ -31,26 +37,93 @@ namespace JT808.Protocol.Interfaces
TerminalPhoneNoLength = 12;
Trim = true;
}
+ ///
+ /// 配置Id
+ ///
public abstract string ConfigId { get; protected set; }
+ ///
+ /// 分布式消息自增流水号
+ ///
public virtual IJT808MsgSNDistributed MsgSNDistributed { get; set; }
+ ///
+ /// 压缩
+ ///
public virtual IJT808Compress Compress { get; set; }
+ ///
+ /// 808分包策略
+ ///
public virtual IJT808SplitPackageStrategy SplitPackageStrategy { get; set; }
+ ///
+ /// 808消息Id工厂
+ ///
public virtual IJT808MsgIdFactory MsgIdFactory { get; set; }
+ ///
+ /// GBK编码
+ ///
public virtual Encoding Encoding { get; set; }
+ ///
+ /// 跳过校验码验证
+ /// 默认false
+ ///
public virtual bool SkipCRCCode { get; set; }
+ ///
+ /// 序列化器工厂
+ ///
public virtual IJT808FormatterFactory FormatterFactory { get; set; }
+ ///
+ /// 0x0200自定义附加信息工厂
+ ///
public virtual IJT808_0x0200_Custom_Factory JT808_0X0200_Custom_Factory { get; set; }
+ ///
+ /// 0x0200附加信息工厂
+ ///
public virtual IJT808_0x0200_Factory JT808_0X0200_Factory { get; set; }
+ ///
+ /// 0x8103自定义终端参数设置自定义消息工厂
+ ///
public virtual IJT808_0x8103_Custom_Factory JT808_0X8103_Custom_Factory { get; set; }
+ ///
+ /// 0x8103终端参数设置消息工厂
+ ///
public virtual IJT808_0x8103_Factory JT808_0X8103_Factory { get; set; }
+ ///
+ /// 终端SIM卡长度
+ ///
public virtual int TerminalPhoneNoLength { get; set; }
+ ///
+ /// 是否去掉头尾空格
+ ///
public virtual bool Trim { get; set; }
+ ///
+ /// 自定义数据上行透传消息工厂
+ ///
public virtual IJT808_0x0900_Custom_Factory JT808_0x0900_Custom_Factory { get; set; }
+ ///
+ /// 自定义数据下行透传消息工厂
+ ///
public virtual IJT808_0x8900_Custom_Factory JT808_0x8900_Custom_Factory { get; set; }
+ ///
+ /// 车辆控制消息工厂
+ ///
public virtual IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; }
+ ///
+ /// JT19056上行消息工厂
+ ///
public IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; }
+ ///
+ /// JT19056下行消息工厂
+ ///
public IJT808_CarDVR_Down_Factory JT808_CarDVR_Down_Factory { get; set; }
+ ///
+ /// 跳过校验码验证
+ /// 默认false
+ ///
public bool SkipCarDVRCRCCode { get; set; }
+ ///
+ /// 外部扩展程序集注册
+ ///
+ ///
+ ///
public virtual IJT808Config Register(params Assembly[] externalAssemblies)
{
if (externalAssemblies != null)
diff --git a/src/JT808.Protocol/Interfaces/IJT808Analyze.cs b/src/JT808.Protocol/Interfaces/IJT808Analyze.cs
index 0aae2b9..98d196b 100644
--- a/src/JT808.Protocol/Interfaces/IJT808Analyze.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808Analyze.cs
@@ -4,8 +4,17 @@ using System.Text.Json;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// JT808分析器
+ ///
public interface IJT808Analyze
{
+ ///
+ /// 分析器
+ ///
+ ///
+ ///
+ ///
void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config);
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808Compress.cs b/src/JT808.Protocol/Interfaces/IJT808Compress.cs
index 235461b..97c823f 100644
--- a/src/JT808.Protocol/Interfaces/IJT808Compress.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808Compress.cs
@@ -5,7 +5,17 @@
///
public interface IJT808Compress
{
+ ///
+ /// 压缩
+ ///
+ ///
+ ///
byte[] Compress(byte[] data);
+ ///
+ /// 解压缩
+ ///
+ ///
+ ///
byte[] Decompress(byte[] compressData);
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808Config.cs b/src/JT808.Protocol/Interfaces/IJT808Config.cs
index 4681fa4..5c5f59a 100644
--- a/src/JT808.Protocol/Interfaces/IJT808Config.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808Config.cs
@@ -8,6 +8,9 @@ using System.Text;
namespace JT808.Protocol
{
+ ///
+ /// JT808接口配置
+ ///
public interface IJT808Config
{
///
diff --git a/src/JT808.Protocol/Interfaces/IJT808Description.cs b/src/JT808.Protocol/Interfaces/IJT808Description.cs
index 0c80379..6d9f559 100644
--- a/src/JT808.Protocol/Interfaces/IJT808Description.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808Description.cs
@@ -4,8 +4,14 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 消息描述接口
+ ///
public interface IJT808Description
{
+ ///
+ /// 消息描述
+ ///
string Description { get;}
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808MsgIdFactory.cs b/src/JT808.Protocol/Interfaces/IJT808MsgIdFactory.cs
index 0f200ad..3c728a5 100644
--- a/src/JT808.Protocol/Interfaces/IJT808MsgIdFactory.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808MsgIdFactory.cs
@@ -3,10 +3,27 @@ using System.Collections.Generic;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// JT808消息工厂接口
+ ///
public interface IJT808MsgIdFactory:IJT808ExternalRegister
{
+ ///
+ ///
+ ///
IDictionary Map { get; }
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
bool TryGetValue(ushort msgId, out object instance);
+ ///
+ ///
+ ///
+ ///
+ ///
IJT808MsgIdFactory SetMap() where TJT808Bodies : JT808Bodies;
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808MsgSNDistributed.cs b/src/JT808.Protocol/Interfaces/IJT808MsgSNDistributed.cs
index af23512..f22511c 100644
--- a/src/JT808.Protocol/Interfaces/IJT808MsgSNDistributed.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808MsgSNDistributed.cs
@@ -1,7 +1,15 @@
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// JT808分布式自增流水号
+ ///
public interface IJT808MsgSNDistributed
{
+ ///
+ /// 根据终端SIM号自增
+ ///
+ ///
+ ///
ushort Increment(string terminalPhoneNo);
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808SplitPackageStrategy.cs b/src/JT808.Protocol/Interfaces/IJT808SplitPackageStrategy.cs
index 1cba18a..f9a6954 100644
--- a/src/JT808.Protocol/Interfaces/IJT808SplitPackageStrategy.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808SplitPackageStrategy.cs
@@ -10,6 +10,11 @@ namespace JT808.Protocol.Interfaces
///
public interface IJT808SplitPackageStrategy
{
+ ///
+ /// 分包处理器
+ ///
+ ///
+ ///
IEnumerable Processor(ReadOnlySpan bigData);
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808_0x0200_Custom_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_0x0200_Custom_Factory.cs
index 3f8c487..e8936c6 100644
--- a/src/JT808.Protocol/Interfaces/IJT808_0x0200_Custom_Factory.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808_0x0200_Custom_Factory.cs
@@ -5,9 +5,20 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 自定义0x0200附加信息工厂
+ ///
public interface IJT808_0x0200_Custom_Factory: IJT808ExternalRegister
{
+ ///
+ ///
+ ///
IDictionary Map { get; }
+ ///
+ ///
+ ///
+ ///
+ ///
IJT808_0x0200_Custom_Factory SetMap() where TJT808_0x0200_CustomBody : JT808_0x0200_CustomBodyBase;
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808_0x0200_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_0x0200_Factory.cs
index 43782e0..b2b0de2 100644
--- a/src/JT808.Protocol/Interfaces/IJT808_0x0200_Factory.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808_0x0200_Factory.cs
@@ -6,10 +6,20 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 0x0200附加信息工厂
+ ///
public interface IJT808_0x0200_Factory: IJT808ExternalRegister
{
+ ///
+ ///
+ ///
IDictionary Map { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
IJT808_0x0200_Factory SetMap() where TJT808_0x0200_Body : JT808_0x0200_BodyBase;
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808_0x0900_Custom_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_0x0900_Custom_Factory.cs
index e7bc91c..78af794 100644
--- a/src/JT808.Protocol/Interfaces/IJT808_0x0900_Custom_Factory.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808_0x0900_Custom_Factory.cs
@@ -5,9 +5,20 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 自定义数据上行透传
+ ///
public interface IJT808_0x0900_Custom_Factory : IJT808ExternalRegister
{
+ ///
+ ///
+ ///
IDictionary Map { get; }
+ ///
+ ///
+ ///
+ ///
+ ///
IJT808_0x0900_Custom_Factory SetMap() where TJT808_0x0900_BodyBase : JT808_0x0900_BodyBase;
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808_0x8103_Custom_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_0x8103_Custom_Factory.cs
index a75eead..16b204d 100644
--- a/src/JT808.Protocol/Interfaces/IJT808_0x8103_Custom_Factory.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808_0x8103_Custom_Factory.cs
@@ -5,9 +5,20 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 自定义设置终端参数消息工厂
+ ///
public interface IJT808_0x8103_Custom_Factory : IJT808ExternalRegister
{
+ ///
+ ///
+ ///
IDictionary Map { get;}
+ ///
+ ///
+ ///
+ ///
+ ///
IJT808_0x8103_Custom_Factory SetMap() where TJT808_0x8103_CustomBody : JT808_0x8103_CustomBodyBase;
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808_0x8103_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_0x8103_Factory.cs
index b3b983f..009b75a 100644
--- a/src/JT808.Protocol/Interfaces/IJT808_0x8103_Factory.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808_0x8103_Factory.cs
@@ -6,9 +6,20 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 设置终端参数消息工厂
+ ///
public interface IJT808_0x8103_Factory: IJT808ExternalRegister
{
+ ///
+ ///
+ ///
IDictionary Map { get; }
+ ///
+ ///
+ ///
+ ///
+ ///
IJT808_0x8103_Factory SetMap() where TJT808_0x8103_Body : JT808_0x8103_BodyBase;
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808_0x8500_2019_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_0x8500_2019_Factory.cs
index a14bd47..c7cd696 100644
--- a/src/JT808.Protocol/Interfaces/IJT808_0x8500_2019_Factory.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808_0x8500_2019_Factory.cs
@@ -5,9 +5,20 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 车辆控制
+ ///
public interface IJT808_0x8500_2019_Factory : IJT808ExternalRegister
{
+ ///
+ ///
+ ///
IDictionary Map { get; }
+ ///
+ ///
+ ///
+ ///
+ ///
IJT808_0x8500_2019_Factory SetMap() where TJT808_0x8500_ControlType : JT808_0x8500_ControlType;
}
}
diff --git a/src/JT808.Protocol/Interfaces/IJT808_0x8900_Custom_Factory.cs b/src/JT808.Protocol/Interfaces/IJT808_0x8900_Custom_Factory.cs
index 7a36f88..970efcf 100644
--- a/src/JT808.Protocol/Interfaces/IJT808_0x8900_Custom_Factory.cs
+++ b/src/JT808.Protocol/Interfaces/IJT808_0x8900_Custom_Factory.cs
@@ -5,9 +5,20 @@ using System.Text;
namespace JT808.Protocol.Interfaces
{
+ ///
+ /// 自定义数据下行透传消息工厂
+ ///
public interface IJT808_0x8900_Custom_Factory : IJT808ExternalRegister
{
+ ///
+ ///
+ ///
IDictionary Map { get; }
+ ///
+ ///
+ ///
+ ///
+ ///
IJT808_0x8900_Custom_Factory SetMap() where TJT808_0x8900_BodyBase : JT808_0x8900_BodyBase;
}
}
diff --git a/src/JT808.Protocol/Internal/DefaultBuilder.cs b/src/JT808.Protocol/Internal/DefaultBuilder.cs
index f57b170..2205cae 100644
--- a/src/JT808.Protocol/Internal/DefaultBuilder.cs
+++ b/src/JT808.Protocol/Internal/DefaultBuilder.cs
@@ -6,10 +6,24 @@ using System.Text;
namespace JT808.Protocol.Internal
{
+ ///
+ /// 默认JT808构造器
+ ///
class DefaultBuilder : IJT808Builder
{
+ ///
+ /// DI服务
+ ///
public IServiceCollection Services { get; }
+ ///
+ /// JT808配置
+ ///
public IJT808Config Config { get; }
+ ///
+ ///
+ ///
+ ///
+ ///
public DefaultBuilder(IServiceCollection services, IJT808Config config)
{
Services = services;
diff --git a/src/JT808.Protocol/Internal/DefaultGlobalConfig.cs b/src/JT808.Protocol/Internal/DefaultGlobalConfig.cs
index 565b380..8a072fb 100644
--- a/src/JT808.Protocol/Internal/DefaultGlobalConfig.cs
+++ b/src/JT808.Protocol/Internal/DefaultGlobalConfig.cs
@@ -2,9 +2,19 @@
namespace JT808.Protocol.Internal
{
+ ///
+ /// 默认全局配置
+ ///
class DefaultGlobalConfig : GlobalConfigBase
{
+ ///
+ /// 配置Id
+ ///
public override string ConfigId { get; protected set; }
+ ///
+ ///
+ ///
+ ///
public DefaultGlobalConfig(string configId= "Default")
{
ConfigId = configId;
diff --git a/src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs b/src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs
index a812f92..bbb9a08 100644
--- a/src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs
+++ b/src/JT808.Protocol/Internal/JT808_CarDVR_Up_Factory.cs
@@ -11,13 +11,22 @@ namespace JT808.Protocol.Interfaces
///
public class JT808_CarDVR_Up_Factory:IJT808_CarDVR_Up_Factory
{
+ ///
+ ///
+ ///
public IDictionary Map { get; }
-
+ ///
+ ///
+ ///
public JT808_CarDVR_Up_Factory()
{
Map = new Dictionary();
Register(Assembly.GetExecutingAssembly());
}
+ ///
+ ///
+ ///
+ ///
public void Register(Assembly externalAssembly)
{
var types = externalAssembly.GetTypes().Where(w => w.BaseType == typeof(JT808CarDVRUpBodies)).ToList();
@@ -35,7 +44,11 @@ namespace JT808.Protocol.Interfaces
}
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
public IJT808_CarDVR_Up_Factory SetMap() where TJT808CarDVRUpBodies : JT808CarDVRUpBodies
{
Type type = typeof(TJT808CarDVRUpBodies);
diff --git a/src/JT808.Protocol/JT808.Protocol.xml b/src/JT808.Protocol/JT808.Protocol.xml
index b4d8645..55a08f4 100644
--- a/src/JT808.Protocol/JT808.Protocol.xml
+++ b/src/JT808.Protocol/JT808.Protocol.xml
@@ -17,8 +17,47 @@
-
+ DI扩展
+
+
+
+
+ 注册808配置
+
+
+
+
+
+
+
+ 注册808配置
+
+
+
+
+
+
+
+ 注册808配置
+
+
+
+
+
+
+
+ 注册808配置
+
+
+
+
+
+
+
+ 注册808配置
+
+
@@ -115,6 +154,21 @@
标志维持至报警条件解除
+
+
+ 保留1
+
+
+
+
+ 保留2
+
+
+
+
+ 保留3
+
+
当天累计驾驶超时
@@ -204,11 +258,61 @@
电话回拨类型
+
+
+ 普通通话
+
+
+
+
+ 监听
+
+
摄像头分辨率
+
+
+ x320_240
+
+
+
+
+ x640_480
+
+
+
+
+ x800_600
+
+
+
+
+ x1020_768
+
+
+
+
+ x176_144_Qcif
+
+
+
+
+ x352_288_Cif
+
+
+
+
+ x704_288_HALF_D1
+
+
+
+
+ x704_576_D1
+
+
行车记录仪命令字
@@ -219,11 +323,26 @@
方向类型
+
+
+ 进
+
+
+
+
+ 出
+
+
路线行驶返回结果
+
+
+ 异常错误码
+
+
JT808校验和不相等
@@ -882,6 +1001,56 @@
电话本联系人标志
+
+
+ 呼入
+
+
+
+
+ 呼出
+
+
+
+
+ 呼入_呼出
+
+
+
+
+ 终端注册返回结果
+
+
+
+
+ 成功
+
+
+
+
+ 车辆已被注册
+
+
+
+
+ 数据库中无该车辆
+
+
+
+
+ 终端已被注册
+
+
+
+
+ 数据库中无该终端
+
+
+
+
+ 通用应答返回
+
+
成功/确认
@@ -1270,6 +1439,24 @@
ref:MessagePack.Formatters.DynamicObjectTypeFallbackFormatter
+
+
+ JT808动态序列化
+
+
+
+
+
+
+
+
+ JT808动态反序列化
+
+
+
+
+
+
todo:source-generators正式发布以后将T4模板换掉
@@ -2993,6 +3180,14 @@
+
+
+ 验证字符串最大长度
+
+
+
+
+
验证数组长度
@@ -3112,582 +3307,1356 @@
-
+
- 压缩接口
+ JT808构造器
-
+
- 外部注册
+ JT808配置
-
+
-
+ 服务注册
-
-
+
- 分包策略
- 注意:处理808的分包读取完流需要先进行转义在进行分包
+ 全局配置基类
-
+
- 只用来标识2019版本增删改情况
+
-
+
- 记录仪工厂
+ 配置Id
-
+
- 记录仪工厂
+ 分布式消息自增流水号
-
+
- 记录仪工厂
+ 压缩
-
+
- 记录仪工厂
+ 808分包策略
-
+
- 配置ID
+ 808消息Id工厂
-
+
- 消息流水号
+ GBK编码
-
+
- 消息工厂
+ 跳过校验码验证
+ 默认false
-
+
- 压缩接口
+ 序列化器工厂
-
+
- 分包策略
- 注意:处理808的分包读取完流需要先进行转义在进行分包
+ 0x0200自定义附加信息工厂
-
+
- 序列化器工厂
+ 0x0200附加信息工厂
-
+
- 自定义附加信息工厂
+ 0x8103自定义终端参数设置自定义消息工厂
-
+
- 附加信息工厂
+ 0x8103终端参数设置消息工厂
-
-
- 自定义设置终端参数工厂
-
-
-
-
- 设置终端参数工厂
-
-
-
-
- 数据上行透传工厂
-
-
-
-
- 数据下行透传工厂
-
-
-
+
- 控制类型工厂
+ 终端SIM卡长度
-
+
- 记录仪上行命令字工厂
+ 是否去掉头尾空格
-
+
- 记录仪下行命令字工厂
+ 自定义数据上行透传消息工厂
-
+
- 统一编码
+ 自定义数据下行透传消息工厂
-
+
- 跳过校验码
- 测试的时候需要手动修改值,避免验证
- 默认:false
+ 车辆控制消息工厂
-
+
- 跳过行车记录仪校验码
- 测试的时候需要手动修改值,避免验证
- 默认:false
+ JT19056上行消息工厂
-
+
- ReadBCD是否需要去0操作
- 默认是去0
- 注意:有时候对协议来说是有意义的0
+ JT19056下行消息工厂
-
+
- 设备终端号(默认12位)
+ 跳过校验码验证
+ 默认false
-
+
- 全局注册外部程序集
+ 外部扩展程序集注册
-
+
- 跳过数据体序列化
- 默认不跳过
- 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
+ JT808分析器
-
+
- 记录仪上行数据体
+ 分析器
+
+
+
-
+
- 命令字
+ 压缩接口
-
+
- 跳过数据体序列化
- 默认不跳过
- 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
+ 压缩
+
+
-
+
- 起始字头
+ 解压缩
+
+
-
+
- 命令字
+ 消息描述接口
-
+
- 保留字段
+ 消息描述
-
+
- 数据块长度
+ 外部注册
-
+
- 记录仪体下行数据体
+
+
-
+
- 校验字
+ JT808消息工厂接口
-
+
- 记录仪上行数据体
+
-
+
- 命令字
+
+
+
+
-
+
- 跳过数据体序列化
- 默认不跳过
- 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
+
+
+
-
+
- 行车记录仪上行数据包
+ JT808分布式自增流水号
-
+
- 起始字头
+ 根据终端SIM号自增
+
+
-
+
- 命令字
+ 分包策略
+ 注意:处理808的分包读取完流需要先进行转义在进行分包
-
+
- 数据块长度
+ 分包处理器
+
+
-
+
- 保留字段
+ 自定义0x0200附加信息工厂
-
+
- 记录仪体上行数据体
+
-
+
- 校验字
+
+
+
-
+
- 日期限制于2000年
+ 0x0200附加信息工厂
-
+
- 终端心跳发送间隔,单位为秒(s)
+
-
+
- TCP 消息应答超时时间,单位为秒(s)
+
+
+
-
+
- TCP 消息重传次数
+ 自定义数据上行透传
-
+
- UDP 消息应答超时时间,单位为秒(s)
+
-
+
- UDP 消息重传次数
+
+
+
-
+
- SMS 消息应答超时时间,单位为秒(s)
+ 自定义设置终端参数消息工厂
-
+
- SMS 消息重传次数
+
-
+
- 主服务器 APN,无线通信拨号访问点。若网络制式为 CDMA,则该处为PPP 拨号号码
+
+
+
-
+
- 主服务器无线通信拨号用户名
+ 设置终端参数消息工厂
-
+
- 主服务器无线通信拨号密码
+
-
+
- 主服务器地址,IP 或域名
+
+
+
-
+
- 主服务器地址,IP 或域名
+ 车辆控制
-
+
- 备份服务器无线通信拨号用户名
+
-
+
- 备份服务器无线通信拨号密码
+
+
+
-
+
- 备份服务器地址,IP 或域名
+ 自定义数据下行透传消息工厂
-
+
- 服务器 TCP 端口
+
-
+
- 服务器 UDP 端口
+
+
+
-
+
- 道路运输证 IC 卡认证主服务器 IP 地址或域名
+ 只用来标识2019版本增删改情况
-
+
- 道路运输证 IC 卡认证主服务器 TCP 端口
+ 记录仪工厂
-
+
- 道路运输证 IC 卡认证主服务器 UDP 端口
+ 记录仪工厂
-
+
- 道路运输证 IC 卡认证备份服务器 IP 地址或域名,端口同主服务器
+ 记录仪工厂
-
+
- 位置汇报策略,0:定时汇报;1:定距汇报;2:定时和定距汇报
+ 记录仪工厂
-
+
- 位置汇报方案,0:根据 ACC 状态; 1:根据登录状态和 ACC 状态,先判断登录状态,若登录再根据 ACC 状态
+
-
+
- 驾驶员未登录汇报时间间隔,单位为秒(s),>0
+
-
+
- 休眠时汇报时间间隔,单位为秒(s),>0
+
+
-
+
- 紧急报警时汇报时间间隔,单位为秒(s),>0
+
+
+
-
+
- 缺省时间汇报间隔,单位为秒(s),>0
+ JT808接口配置
-
+
- 缺省距离汇报间隔,单位为米(m),>0
+ 配置ID
-
+
- 驾驶员未登录汇报距离间隔,单位为米(m),>0
+ 消息流水号
-
+
- 休眠时汇报距离间隔,单位为米(m),>0
+ 消息工厂
-
+
- 紧急报警时汇报距离间隔,单位为米(m)>0
+ 压缩接口
-
+
- 拐点补传角度小于180
+ 分包策略
+ 注意:处理808的分包读取完流需要先进行转义在进行分包
-
+
- 电子围栏半径(非法位移阈值),单位为米
+ 序列化器工厂
-
+
- 电子围栏半径(非法位移阈值),单位为米
+ 自定义附加信息工厂
-
+
- 监控平台电话号码
+ 附加信息工厂
-
+
+
+ 自定义设置终端参数工厂
+
+
+
+
+ 设置终端参数工厂
+
+
+
+
+ 数据上行透传工厂
+
+
+
+
+ 数据下行透传工厂
+
+
+
- 复位电话号码,可采用此电话号码拨打终端电话让终端复位
+ 控制类型工厂
-
+
- 恢复出厂设置电话号码,可采用此电话号码拨打终端电话让终端恢复出厂设置
+ 记录仪上行命令字工厂
-
+
- 监控平台 SMS 电话号码
+ 记录仪下行命令字工厂
-
+
- 接收终端 SMS 文本报警号码
+ 统一编码
-
+
- 终端电话接听策略,0:自动接听;1:ACC ON 时自动接听,OFF 时手动接听
+ 跳过校验码
+ 测试的时候需要手动修改值,避免验证
+ 默认:false
-
+
- 每次最长通话时间,单位为秒(s),0 为不允许通话,0xFFFFFFFF 为不限制
+ 跳过行车记录仪校验码
+ 测试的时候需要手动修改值,避免验证
+ 默认:false
-
+
- 当月最长通话时间,单位为秒(s),0 为不允许通话,0xFFFFFFFF 为不限制
+ ReadBCD是否需要去0操作
+ 默认是去0
+ 注意:有时候对协议来说是有意义的0
-
+
- 监听电话号码
+ 设备终端号(默认12位)
-
+
- 监管平台特权短信号码
+ 全局注册外部程序集
+
+
-
+
- 报警屏蔽字,与位置信息汇报消息中的报警标志相对应,相应位为 1则相应报警被屏蔽
+ 默认JT808构造器
-
+
- 报警发送文本 SMS 开关,与位置信息汇报消息中的报警标志相对应,相应位为 1 则相应报警时发送文本 SMS
+ DI服务
-
+
- 报警拍摄开关,与位置信息汇报消息中的报警标志相对应,相应位为1 则相应报警时摄像头拍摄
+ JT808配置
-
+
- 报警拍摄存储标志,与位置信息汇报消息中的报警标志相对应,相应位为 1 则对相应报警时拍的照片进行存储,否则实时上传
+
+
+
-
+
- 关键标志,与位置信息汇报消息中的报警标志相对应,相应位为 1 则对相应报警为关键报警
+ 默认全局配置
-
+
- 最高速度,单位为公里每小时(km/h)
+ 配置Id
-
+
- 超速持续时间,单位为秒(s)
+
+
-
+
- 连续驾驶时间门限,单位为秒(s)
+ 内存池
-
+
- 当天累计驾驶时间门限,单位为秒(s)
+ 申请
+
+
-
+
- 最小休息时间,单位为秒(s)
+ 回收
+
+
-
+
- 最长停车时间,单位为秒(s)
+ JT808抽象数据体
-
+
- 超速报警预警差值,单位为 1/10Km/h
+ 跳过数据体序列化
+ 默认不跳过
+ 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
-
+
- 疲劳驾驶预警差值,单位为秒(s),>0
+ 消息Id
-
+
- 碰撞报警参数设置
- b7-b0: 碰撞时间,单位 4ms;
- b15-b8:碰撞加速度,单位 0.1g,设置范围在:0-79 之间,默认为10。
+ 消息描述
-
+
- 侧翻报警参数设置:
- 侧翻角度,单位 1 度,默认为 30 度
+ 记录仪上行数据体
-
+
- 定时拍照控制,见 表 13
+ 命令字
-
+
+
+ 跳过数据体序列化
+ 默认不跳过
+ 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
+
+
+
+
+ 消息描述
+
+
+
+
+ 行车记录仪下行数据包
+
+
+
+
+ 头标识
+
+
+
+
+ 起始字头
+
+
+
+
+ 命令字
+
+
+
+
+ 保留字段
+
+
+
+
+ 数据块长度
+
+
+
+
+ 记录仪体下行数据体
+
+
+
+
+ 校验字
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JT19056序列化器
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 记录仪上行数据体
+
+
+
+
+ 命令字
+
+
+
+
+ 跳过数据体序列化
+ 默认不跳过
+ 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
+
+
+
+
+ 消息描述
+
+
+
+
+ 行车记录仪上行数据包
+
+
+
+
+ 起始字头
+
+
+
+
+ 起始字头
+
+
+
+
+ 命令字
+
+
+
+
+ 数据块长度
+
+
+
+
+ 保留字段
+
+
+
+
+ 记录仪体上行数据体
+
+
+
+
+ 校验字
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JT808常量
+
+
+
+
+ 日期限制于2000年
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JT808_0x0200_0x01
+
+
+
+
+ JT808_0x0200_0x02
+
+
+
+
+ JT808_0x0200_0x03
+
+
+
+
+ JT808_0x0200_0x04
+
+
+
+
+ JT808_0x0200_0x05
+
+
+
+
+ JT808_0x0200_0x06
+
+
+
+
+ JT808_0x0200_0x11
+
+
+
+
+ JT808_0x0200_0x12
+
+
+
+
+ JT808_0x0200_0x13
+
+
+
+
+ JT808_0x0200_0x25
+
+
+
+
+ JT808_0x0200_0x2A
+
+
+
+
+ JT808_0x0200_0x2B
+
+
+
+
+ JT808_0x0200_0x30
+
+
+
+
+ JT808_0x0200_0x31
+
+
+
+
+ 终端心跳发送间隔,单位为秒(s)
+
+
+
+
+ TCP 消息应答超时时间,单位为秒(s)
+
+
+
+
+ TCP 消息重传次数
+
+
+
+
+ UDP 消息应答超时时间,单位为秒(s)
+
+
+
+
+ UDP 消息重传次数
+
+
+
+
+ SMS 消息应答超时时间,单位为秒(s)
+
+
+
+
+ SMS 消息重传次数
+
+
+
+
+ 主服务器 APN,无线通信拨号访问点。若网络制式为 CDMA,则该处为PPP 拨号号码
+
+
+
+
+ 主服务器无线通信拨号用户名
+
+
+
+
+ 主服务器无线通信拨号密码
+
+
+
+
+ 主服务器地址,IP 或域名
+
+
+
+
+ 主服务器地址,IP 或域名
+
+
+
+
+ 备份服务器无线通信拨号用户名
+
+
+
+
+ 备份服务器无线通信拨号密码
+
+
+
+
+ 备份服务器地址,IP 或域名
+
+
+
+
+ 服务器 TCP 端口
+
+
+
+
+ 服务器 UDP 端口
+
+
+
+
+ 道路运输证 IC 卡认证主服务器 IP 地址或域名
+
+
+
+
+ 道路运输证 IC 卡认证主服务器 TCP 端口
+
+
+
+
+ 道路运输证 IC 卡认证主服务器 UDP 端口
+
+
+
+
+ 道路运输证 IC 卡认证备份服务器 IP 地址或域名,端口同主服务器
+
+
+
+
+ 位置汇报策略,0:定时汇报;1:定距汇报;2:定时和定距汇报
+
+
+
+
+ 位置汇报方案,0:根据 ACC 状态; 1:根据登录状态和 ACC 状态,先判断登录状态,若登录再根据 ACC 状态
+
+
+
+
+ 驾驶员未登录汇报时间间隔,单位为秒(s),>0
+
+
+
+
+ 休眠时汇报时间间隔,单位为秒(s),>0
+
+
+
+
+ 紧急报警时汇报时间间隔,单位为秒(s),>0
+
+
+
+
+ 缺省时间汇报间隔,单位为秒(s),>0
+
+
+
+
+ 缺省距离汇报间隔,单位为米(m),>0
+
+
+
+
+ 驾驶员未登录汇报距离间隔,单位为米(m),>0
+
+
+
+
+ 休眠时汇报距离间隔,单位为米(m),>0
+
+
+
+
+ 紧急报警时汇报距离间隔,单位为米(m)>0
+
+
+
+
+ 拐点补传角度小于180
+
+
+
+
+ 电子围栏半径(非法位移阈值),单位为米
+
+
+
+
+ 电子围栏半径(非法位移阈值),单位为米
+
+
+
+
+ 监控平台电话号码
+
+
+
+
+ 复位电话号码,可采用此电话号码拨打终端电话让终端复位
+
+
+
+
+ 恢复出厂设置电话号码,可采用此电话号码拨打终端电话让终端恢复出厂设置
+
+
+
+
+ 监控平台 SMS 电话号码
+
+
+
+
+ 接收终端 SMS 文本报警号码
+
+
+
+
+ 终端电话接听策略,0:自动接听;1:ACC ON 时自动接听,OFF 时手动接听
+
+
+
+
+ 每次最长通话时间,单位为秒(s),0 为不允许通话,0xFFFFFFFF 为不限制
+
+
+
+
+ 当月最长通话时间,单位为秒(s),0 为不允许通话,0xFFFFFFFF 为不限制
+
+
+
+
+ 监听电话号码
+
+
+
+
+ 监管平台特权短信号码
+
+
+
+
+ 报警屏蔽字,与位置信息汇报消息中的报警标志相对应,相应位为 1则相应报警被屏蔽
+
+
+
+
+ 报警发送文本 SMS 开关,与位置信息汇报消息中的报警标志相对应,相应位为 1 则相应报警时发送文本 SMS
+
+
+
+
+ 报警拍摄开关,与位置信息汇报消息中的报警标志相对应,相应位为1 则相应报警时摄像头拍摄
+
+
+
+
+ 报警拍摄存储标志,与位置信息汇报消息中的报警标志相对应,相应位为 1 则对相应报警时拍的照片进行存储,否则实时上传
+
+
+
+
+ 关键标志,与位置信息汇报消息中的报警标志相对应,相应位为 1 则对相应报警为关键报警
+
+
+
+
+ 最高速度,单位为公里每小时(km/h)
+
+
+
+
+ 超速持续时间,单位为秒(s)
+
+
+
+
+ 连续驾驶时间门限,单位为秒(s)
+
+
+
+
+ 当天累计驾驶时间门限,单位为秒(s)
+
+
+
+
+ 最小休息时间,单位为秒(s)
+
+
+
+
+ 最长停车时间,单位为秒(s)
+
+
+
+
+ 超速报警预警差值,单位为 1/10Km/h
+
+
+
+
+ 疲劳驾驶预警差值,单位为秒(s),>0
+
+
+
+
+ 碰撞报警参数设置
+ b7-b0: 碰撞时间,单位 4ms;
+ b15-b8:碰撞加速度,单位 0.1g,设置范围在:0-79 之间,默认为10。
+
+
+
+
+ 侧翻报警参数设置:
+ 侧翻角度,单位 1 度,默认为 30 度
+
+
+
+
+ 定时拍照控制,见 表 13
+
+
+
定距拍照控制,见 表 14
@@ -3877,6 +4846,62 @@
报序号 从1开始
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 头部消息体属性
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
版本标识(默认为1=true)
@@ -3902,6 +4927,12 @@
消息体长度
+
+
+
+
+
+
JT808头部数据包
@@ -3943,6 +4974,13 @@
原数据
+
+
+
+
+
+
+
JT808数据包
@@ -3994,6 +5032,30 @@
808版本号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JT808序列化器
@@ -4015,12 +5077,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
用于负载或者分布式的时候,在网关只需要解到头部。
根据头部的消息Id进行分发处理,可以防止小部分性能损耗。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4045,6 +5204,27 @@
默认65535
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
采集记录仪执行标准版本
@@ -7014,6 +8194,16 @@
位置数据类型
+
+
+ 正常位置批量汇报
+
+
+
+
+ 盲区补报
+
+
@@ -7673,6 +8863,11 @@
查询服务器时间应答
+
+
+ 服务器时间
+
+
@@ -8490,6 +9685,7 @@
服务器 TCP 端口
+ 2019版本已作为保留
@@ -11532,9 +12728,15 @@
CAN 总线通道 1 上传时间间隔(s),0 表示不上传
+
+
+ 0x0101
+
+
- 数据 长度
+ 数据长度
+ 2 byte
@@ -11702,6 +12904,30 @@
bit28-bit0 表示 CAN 总线 ID。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
终端参数设置
@@ -11737,6 +12963,16 @@
查询终端参数
+
+
+ 0x8104
+
+
+
+
+ 查询终端参数
+
+
跳过数据体序列化
@@ -11747,6 +12983,16 @@
终端控制
+
+
+ 0x8105
+
+
+
+
+ 终端控制
+
+
命令字
@@ -11754,8 +13000,32 @@
- 命令参数
+ 命令参数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11840,12 +13110,34 @@
若值为 0,则表示一直连接指 定服务器
+
+
+
+
+
+
+
+
+
+
+
+
查询指定终端参数
0x8106
+
+
+ 0x8106
+
+
+
+
+ 查询指定终端参数
+
+
参数总数
@@ -11858,21 +13150,65 @@
参数顺序排列,如“参数 ID1 参数 ID2......参数IDn”。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
查询终端属性
+
+
+ 0x8107
+
+
跳过数据体序列化
+
+
+ 查询终端属性
+
+
下发终端升级包
+
+
+ 0x8108
+
+
+
+
+ 下发终端升级包
+
+
升级类型
@@ -11905,21 +13241,65 @@
升级数据包
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
位置信息查询
+
+
+ 0x8201
+
+
跳过数据体序列化
+
+
+ 位置信息查询
+
+
临时位置跟踪控制
+
+
+ 0x8202
+
+
+
+
+ 临时位置跟踪控制
+
+
时间间隔
@@ -11932,12 +13312,46 @@
单位为秒(s),终端在接收到位置跟踪控制消息后,在有效期截止时间之前,依据消息中的时间间隔发送位置汇报
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
人工确认报警消息
0x8203
+
+
+ 0x8203
+
+
+
+
+ 人工确认报警消息
+
+
报警消息流水号
@@ -11949,17 +13363,66 @@
人工确认报警类型
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
链路检测
2019版本
+
+
+ 0x8204
+
+
+
+
+ 跳过序列化器
+
+
+
+
+ 链路检测
+
+
文本信息下发
+
+
+ 0x8300
+
+
+
+
+ 文本信息下发
+
+
文本信息标志位含义见 表 38
@@ -11978,10 +13441,45 @@
最长为 1024 字节,经GBK编码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
事件设置
0x8301
+ 2019版本已作删除
+
+
+
+
+ 0x8301
+
+
+
+
+ 事件设置
@@ -12000,10 +13498,45 @@
事件项
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
提问下发
0x8302
+ 2019版本已作删除
+
+
+
+
+ 0x8302
+
+
+
+
+ 提问下发
@@ -12028,27 +13561,66 @@
候选答案列表
-
+
+
+ 候选答案信息
+
+
+
+
+ 答案 ID
+
+
+
+
+ 答案内容长度
+ 答案内容字段字节长度
+
+
+
+
+ 答案内容
+ 答案内容,经 GBK 编码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 答案 ID
+
+
+
+
-
+
- 答案内容长度
- 答案内容字段字节长度
+ 信息点播菜单设置
+ 0x8303
-
+
- 答案内容
- 答案内容,经 GBK 编码
+ 0x8303
-
+
信息点播菜单设置
- 0x8303
@@ -12068,10 +13640,45 @@
信息项列表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
信息服务
0x8304
+ 2019版本已作删除
+
+
+
+
+ 0x8304
+
+
+
+
+ 信息服务
@@ -12090,11 +13697,45 @@
经 GBK 编码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
电话回拨
+
+
+ 0x8400
+
+
+
+
+ 电话回拨
+
+
0:普通通话;1:监听
@@ -12106,11 +13747,45 @@
最长为 20 字节
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
设置电话本
+
+
+ 0x8401
+
+
+
+
+ 设置电话本
+
+
设置类型
@@ -12126,11 +13801,45 @@
联系人项
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
车辆控制
+
+
+ 0x8500
+
+
+
+
+ 车辆控制
+
+
控制标志
@@ -12154,16 +13863,79 @@
用于序列化的时候,由于厂家自定义类型比较多,所以直接用JT808_0x8500_ControlType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
控制类型
+
+
+ 0x0001
+
+
+
+
+ 控制类型参数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
控制类型
+
+
+ 控制类型Id
+
+
设置圆形区域
@@ -12171,6 +13943,16 @@
注:本条消息协议支持周期时间范围,如要限制每天的8:30-18:00,起始/结束时间设为:00-00-00-08-30-00/00-00-00-18-00-00,其他以此类推
+
+
+ 0x8600
+
+
+
+
+ 设置圆形区域
+
+
设置属性
@@ -12187,12 +13969,46 @@
区域项
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
删除圆形区域
0x8601
+
+
+ 0x8601
+
+
+
+
+ 删除圆形区域
+
+
区域数
@@ -12204,10 +14020,44 @@
区域ID集合
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
设置矩形区域
- 0x8602
+ 0x8602
+
+
+
+
+ 0x8602
+
+
+
+
+ 设置矩形区域
@@ -12226,12 +14076,46 @@
区域项
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
删除矩形区域
0x8603
+
+
+
+
+
+
+
+
+
+
区域数
@@ -12243,12 +14127,46 @@
区域ID集合
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
设置多边形区域
0x8604
+
+
+ 0x8604
+
+
+
+
+ 设置多边形区域
+
+
区域 ID
@@ -12312,12 +14230,46 @@
2019版本
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
删除多边形区域
0x8605
+
+
+ 0x8605
+
+
+
+
+ 删除多边形区域
+
+
区域数
@@ -12329,12 +14281,46 @@
区域ID集合
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
设置路线
0x8606
+
+
+ 0x8606
+
+
+
+
+ 设置路线
+
+
路线 ID
@@ -12378,12 +14364,46 @@
路线名称
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
删除路线
0x8607
+
+
+ 0x8607
+
+
+
+
+ 删除路线
+
+
区域数
@@ -12395,6 +14415,30 @@
区域ID集合
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
查询区域或线路数据
@@ -12402,6 +14446,16 @@
2019版本
+
+
+ 0x8608
+
+
+
+
+ 查询区域或线路数据
+
+
查询类型
@@ -12413,31 +14467,148 @@
0表示查询所有区域或线路数据,大于0表示后面跟随要查询的区域或线路的ID数量
-
+
+
+ 查询的区域或线路的ID
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 行驶记录数据采集命令
+
+
+
+
+ 0x8700
+
+
+
+
+ 行驶记录数据采集命令
+
+
+
+
+ 命令Id
+
+
+
+
+ 行车记录仪下行数据包
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 行驶记录参数下传命令
+
+
+
+
+ 0x8701
+
+
+
+
+ 行驶记录参数下传命令
+
+
+
+
+ 命令Id
+
+
+
- 查询的区域或线路的ID
+ 行驶记录参数下传命令包
-
+
+
+
+
-
+
- 行驶记录参数下传命令
+
+
+
+
-
+
+
+
+
上报驾驶员身份信息请求
+
+
+ 0x8702
+
+
+
+
+ 上报驾驶员身份信息请求
+
+
跳过数据体序列化
@@ -12449,6 +14620,16 @@
0x8800
+
+
+ 0x8800
+
+
+
+
+ 多媒体数据上传应答
+
+
多媒体ID
@@ -12465,12 +14646,46 @@
重传包序号顺序排列,如“包 ID1 包 ID2......包 IDn”。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
摄像头立即拍摄命令
0x8801
+
+
+ 0x8801
+
+
+
+
+ 摄像头立即拍摄命令
+
+
通道 ID
@@ -12530,12 +14745,46 @@
0-255
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
存储多媒体数据检索
0x8802
+
+
+ 0x8802
+
+
+
+
+ 存储多媒体数据检索
+
+
多媒体类型
@@ -12566,12 +14815,46 @@
YY-MM-DD-hh-mm-ss
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
存储多媒体数据上传命令
0x8803
+
+
+ 0x8803
+
+
+
+
+ 存储多媒体数据上传命令
+
+
多媒体类型
@@ -12609,11 +14892,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
录音开始命令
+
+
+ 0x8804
+
+
+
+
+ 录音开始命令
+
+
录音命令
@@ -12637,11 +14954,45 @@
0:8K;1:11K;2:23K;3:32K;其他保留
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
单条存储多媒体数据检索上传命令
+
+
+ 0x8805
+
+
+
+
+ 单条存储多媒体数据检索上传命令
+
+
多媒体ID
@@ -12653,11 +15004,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
数据下行透传
+
+
+ 0x8900
+
+
+
+
+ 数据下行透传
+
+
透传消息类型
@@ -12674,6 +15059,30 @@
透传消息内容
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
数据下行透传
@@ -12691,6 +15100,16 @@
0x8A00
+
+
+ 0x8A00
+
+
+
+
+ 平台RSA公钥
+
+
e
@@ -12703,6 +15122,30 @@
RSA 公钥{e,n}中的 n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JT808消息读取器
diff --git a/src/JT808.Protocol/JT808ArrayPool.cs b/src/JT808.Protocol/JT808ArrayPool.cs
index 076e606..974afa0 100644
--- a/src/JT808.Protocol/JT808ArrayPool.cs
+++ b/src/JT808.Protocol/JT808ArrayPool.cs
@@ -2,6 +2,9 @@
namespace JT808.Protocol
{
+ ///
+ /// 内存池
+ ///
internal static class JT808ArrayPool
{
private readonly static ArrayPool ArrayPool;
@@ -10,12 +13,20 @@ namespace JT808.Protocol
{
ArrayPool = ArrayPool.Create();
}
-
+ ///
+ /// 申请
+ ///
+ ///
+ ///
public static byte[] Rent(int minimumLength)
{
return ArrayPool.Rent(minimumLength);
}
-
+ ///
+ /// 回收
+ ///
+ ///
+ ///
public static void Return(byte[] array, bool clearArray = false)
{
ArrayPool.Return(array, clearArray);
diff --git a/src/JT808.Protocol/JT808Bodies.cs b/src/JT808.Protocol/JT808Bodies.cs
index 953b4fd..72d0d51 100644
--- a/src/JT808.Protocol/JT808Bodies.cs
+++ b/src/JT808.Protocol/JT808Bodies.cs
@@ -2,6 +2,9 @@
namespace JT808.Protocol
{
+ ///
+ /// JT808抽象数据体
+ ///
public abstract class JT808Bodies: IJT808Description
{
///
@@ -10,9 +13,13 @@ namespace JT808.Protocol
/// 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
///
public virtual bool SkipSerialization { get; set; } = false;
-
+ ///
+ /// 消息Id
+ ///
public abstract ushort MsgId { get;}
-
+ ///
+ /// 消息描述
+ ///
public abstract string Description { get; }
}
}
diff --git a/src/JT808.Protocol/JT808CarDVRDownBodies.cs b/src/JT808.Protocol/JT808CarDVRDownBodies.cs
index cd06b68..2dc9ec2 100644
--- a/src/JT808.Protocol/JT808CarDVRDownBodies.cs
+++ b/src/JT808.Protocol/JT808CarDVRDownBodies.cs
@@ -1,4 +1,5 @@
-using JT808.Protocol.MessagePack;
+using JT808.Protocol.Interfaces;
+using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
@@ -8,7 +9,7 @@ namespace JT808.Protocol
///
/// 记录仪上行数据体
///
- public abstract class JT808CarDVRDownBodies
+ public abstract class JT808CarDVRDownBodies : IJT808Description
{
///
/// 命令字
@@ -20,7 +21,9 @@ namespace JT808.Protocol
/// 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
///
public virtual bool SkipSerialization { get; set; } = false;
-
+ ///
+ /// 消息描述
+ ///
public abstract string Description { get; }
}
}
diff --git a/src/JT808.Protocol/JT808CarDVRDownPackage.cs b/src/JT808.Protocol/JT808CarDVRDownPackage.cs
index f16638d..00a3082 100644
--- a/src/JT808.Protocol/JT808CarDVRDownPackage.cs
+++ b/src/JT808.Protocol/JT808CarDVRDownPackage.cs
@@ -11,8 +11,14 @@ using System.Text.Json;
namespace JT808.Protocol
{
+ ///
+ /// 行车记录仪下行数据包
+ ///
public class JT808CarDVRDownPackage : IJT808_CarDVR_Down_Package,IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 头标识
+ ///
public const ushort BeginFlag = 0x557A;
///
/// 起始字头
@@ -38,7 +44,12 @@ namespace JT808.Protocol
/// 校验字
///
public byte CheckCode { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRDownPackage value, IJT808Config config)
{
var currentPosition = writer.GetCurrentPosition();
@@ -57,7 +68,12 @@ namespace JT808.Protocol
writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() -2-1- datalengthPosition), datalengthPosition);//此处-2:减去数据长度字段2位,-1:减去保留字长度
writer.WriteCarDVRCheckCode(currentPosition);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808CarDVRDownPackage Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808CarDVRDownPackage value = new JT808CarDVRDownPackage();
@@ -84,7 +100,12 @@ namespace JT808.Protocol
value.CheckCode = reader.ReadByte();
return value;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808CarDVRDownPackage value = new JT808CarDVRDownPackage();
diff --git a/src/JT808.Protocol/JT808CarDVRSerializer.cs b/src/JT808.Protocol/JT808CarDVRSerializer.cs
index 566e303..ce048f4 100644
--- a/src/JT808.Protocol/JT808CarDVRSerializer.cs
+++ b/src/JT808.Protocol/JT808CarDVRSerializer.cs
@@ -11,26 +11,54 @@ using System.Text.Json;
namespace JT808.Protocol
{
+ ///
+ /// JT19056序列化器
+ ///
public class JT808CarDVRSerializer
{
+ ///
+ ///
+ ///
public readonly static JT808CarDVRUpPackage JT808CarDVRUpPackage = new JT808CarDVRUpPackage();
+ ///
+ ///
+ ///
public readonly static JT808CarDVRDownPackage JT808CarDVRDownPackage = new JT808CarDVRDownPackage();
+ ///
+ ///
+ ///
+ ///
public JT808CarDVRSerializer(IJT808Config jT808Config)
{
this.jT808Config = jT808Config;
}
+ ///
+ ///
+ ///
public JT808CarDVRSerializer():this(new DefaultGlobalConfig())
{
}
+ ///
+ ///
+ ///
public string SerializerId => jT808Config.ConfigId;
+ ///
+ ///
+ ///
private readonly IJT808Config jT808Config;
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte[] Serialize(JT808CarDVRUpPackage package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -45,7 +73,13 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public ReadOnlySpan SerializeReadOnlySpan(JT808CarDVRUpPackage package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -60,7 +94,13 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte[] Serialize(JT808CarDVRDownPackage package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -75,7 +115,13 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public ReadOnlySpan SerializeReadOnlySpan(JT808CarDVRDownPackage package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -90,19 +136,36 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808CarDVRUpPackage UpDeserialize(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
return JT808CarDVRUpPackage.Deserialize(ref jT808MessagePackReader, jT808Config);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808CarDVRDownPackage DownDeserialize(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
return JT808CarDVRDownPackage.Deserialize(ref jT808MessagePackReader, jT808Config);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte [] Serialize(T obj, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -118,7 +181,14 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public ReadOnlySpan SerializeReadOnlySpan(T obj, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -134,21 +204,39 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public T Deserialize(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
var formatter = jT808Config.GetMessagePackFormatter();
return formatter.Deserialize(ref jT808MessagePackReader, jT808Config);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public dynamic Deserialize(ReadOnlySpan bytes, Type type, JT808Version version = JT808Version.JTT2013)
{
var formatter = jT808Config.GetMessagePackFormatterByType(type);
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
return JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(formatter,ref jT808MessagePackReader, jT808Config);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public string UpAnalyze(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
@@ -163,7 +251,13 @@ namespace JT808.Protocol
return value;
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public string DownAnalyze(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
@@ -178,7 +272,14 @@ namespace JT808.Protocol
return value;
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public string Analyze(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
@@ -194,7 +295,13 @@ namespace JT808.Protocol
return value;
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte[] UpAnalyzeJsonBuffer(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
@@ -208,7 +315,13 @@ namespace JT808.Protocol
return memoryStream.ToArray();
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte[] DownAnalyzeJsonBuffer(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
@@ -222,7 +335,14 @@ namespace JT808.Protocol
return memoryStream.ToArray();
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte[] AnalyzeJsonBuffer(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default)
{
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
diff --git a/src/JT808.Protocol/JT808CarDVRUpBodies.cs b/src/JT808.Protocol/JT808CarDVRUpBodies.cs
index 4382b1b..508398e 100644
--- a/src/JT808.Protocol/JT808CarDVRUpBodies.cs
+++ b/src/JT808.Protocol/JT808CarDVRUpBodies.cs
@@ -1,4 +1,5 @@
-using JT808.Protocol.MessagePack;
+using JT808.Protocol.Interfaces;
+using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
@@ -8,7 +9,7 @@ namespace JT808.Protocol
///
/// 记录仪上行数据体
///
- public abstract class JT808CarDVRUpBodies
+ public abstract class JT808CarDVRUpBodies: IJT808Description
{
///
/// 命令字
@@ -20,7 +21,9 @@ namespace JT808.Protocol
/// 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
///
public virtual bool SkipSerialization { get; set; } = false;
-
+ ///
+ /// 消息描述
+ ///
public abstract string Description { get; }
}
}
diff --git a/src/JT808.Protocol/JT808CarDVRUpPackage.cs b/src/JT808.Protocol/JT808CarDVRUpPackage.cs
index 4bf6bf1..07ef21e 100644
--- a/src/JT808.Protocol/JT808CarDVRUpPackage.cs
+++ b/src/JT808.Protocol/JT808CarDVRUpPackage.cs
@@ -16,6 +16,9 @@ namespace JT808.Protocol
///
public class JT808CarDVRUpPackage : IJT808_CarDVR_Up_Package,IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 起始字头
+ ///
public const ushort BeginFlag = 0x557A;
///
/// 起始字头
@@ -41,7 +44,12 @@ namespace JT808.Protocol
/// 校验字
///
public byte CheckCode { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808CarDVRUpPackage value = new JT808CarDVRUpPackage();
@@ -77,7 +85,12 @@ namespace JT808.Protocol
}
writer.WriteEndObject();
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808CarDVRUpPackage Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808CarDVRUpPackage value = new JT808CarDVRUpPackage();
@@ -104,7 +117,12 @@ namespace JT808.Protocol
value.CheckCode = reader.ReadByte();
return value;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808CarDVRUpPackage value, IJT808Config config)
{
var currentPosition = writer.GetCurrentPosition();
diff --git a/src/JT808.Protocol/JT808Constants.cs b/src/JT808.Protocol/JT808Constants.cs
index 2c5db09..411b782 100644
--- a/src/JT808.Protocol/JT808Constants.cs
+++ b/src/JT808.Protocol/JT808Constants.cs
@@ -4,6 +4,9 @@ using System.Text;
namespace JT808.Protocol
{
+ ///
+ /// JT808常量
+ ///
public static class JT808Constants
{
static JT808Constants()
@@ -15,22 +18,70 @@ namespace JT808.Protocol
/// 日期限制于2000年
///
public const int DateLimitYear = 2000;
+ ///
+ ///
+ ///
public static readonly DateTime UTCBaseTime = new DateTime(1970, 1, 1);
+ ///
+ ///
+ ///
public static Encoding Encoding { get;}
+ ///
+ /// JT808_0x0200_0x01
+ ///
public const byte JT808_0x0200_0x01 = 0x01;
+ ///
+ /// JT808_0x0200_0x02
+ ///
public const byte JT808_0x0200_0x02 = 0x02;
+ ///
+ /// JT808_0x0200_0x03
+ ///
public const byte JT808_0x0200_0x03 = 0x03;
+ ///
+ /// JT808_0x0200_0x04
+ ///
public const byte JT808_0x0200_0x04 = 0x04;
+ ///
+ /// JT808_0x0200_0x05
+ ///
public const byte JT808_0x0200_0x05 = 0x05;
+ ///
+ /// JT808_0x0200_0x06
+ ///
public const byte JT808_0x0200_0x06 = 0x06;
+ ///
+ /// JT808_0x0200_0x11
+ ///
public const byte JT808_0x0200_0x11 = 0x11;
+ ///
+ /// JT808_0x0200_0x12
+ ///
public const byte JT808_0x0200_0x12 = 0x12;
+ ///
+ /// JT808_0x0200_0x13
+ ///
public const byte JT808_0x0200_0x13 = 0x13;
+ ///
+ /// JT808_0x0200_0x25
+ ///
public const byte JT808_0x0200_0x25 = 0x25;
+ ///
+ /// JT808_0x0200_0x2A
+ ///
public const byte JT808_0x0200_0x2A = 0x2A;
+ ///
+ /// JT808_0x0200_0x2B
+ ///
public const byte JT808_0x0200_0x2B = 0x2B;
+ ///
+ /// JT808_0x0200_0x30
+ ///
public const byte JT808_0x0200_0x30 = 0x30;
+ ///
+ /// JT808_0x0200_0x31
+ ///
public const byte JT808_0x0200_0x31 = 0x31;
///
/// 终端心跳发送间隔,单位为秒(s)
diff --git a/src/JT808.Protocol/JT808Header.cs b/src/JT808.Protocol/JT808Header.cs
index 8d11bed..e6a767f 100644
--- a/src/JT808.Protocol/JT808Header.cs
+++ b/src/JT808.Protocol/JT808Header.cs
@@ -49,7 +49,12 @@ namespace JT808.Protocol
/// 报序号 从1开始
///
public ushort PackageIndex { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808Header Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808Header jT808Header = new JT808Header();
@@ -82,7 +87,12 @@ namespace JT808.Protocol
}
return jT808Header;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808Header value, IJT808Config config)
{
// 1.消息ID
diff --git a/src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs b/src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs
index 5ca730a..88cb0df 100644
--- a/src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs
+++ b/src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs
@@ -5,8 +5,18 @@ using System;
namespace JT808.Protocol
{
+ ///
+ /// 头部消息体属性
+ ///
public class JT808HeaderMessageBodyProperty
{
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808HeaderMessageBodyProperty(int dataLength,bool isPackage, bool versionFlag= false, JT808EncryptMethod jT808EncryptMethod= JT808EncryptMethod.None)
{
IsPackage = isPackage;
@@ -14,7 +24,12 @@ namespace JT808.Protocol
DataLength = dataLength;
VersionFlag = versionFlag;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808HeaderMessageBodyProperty(bool isPackage, bool versionFlag, JT808EncryptMethod jT808EncryptMethod = JT808EncryptMethod.None)
{
IsPackage = isPackage;
@@ -22,7 +37,11 @@ namespace JT808.Protocol
DataLength = 0;
VersionFlag = versionFlag;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808HeaderMessageBodyProperty(bool versionFlag, JT808EncryptMethod jT808EncryptMethod = JT808EncryptMethod.None)
{
IsPackage = false;
@@ -30,7 +49,14 @@ namespace JT808.Protocol
DataLength = 0;
VersionFlag = versionFlag;
}
+ ///
+ ///
+ ///
public JT808HeaderMessageBodyProperty(){}
+ ///
+ ///
+ ///
+ ///
public JT808HeaderMessageBodyProperty(ushort value)
{
VersionFlag = (value >> 14 & 0x01) == 1;
@@ -70,6 +96,10 @@ namespace JT808.Protocol
/// 消息体长度
///
public int DataLength { get; set; } = 0;
+ ///
+ ///
+ ///
+ ///
public ushort Wrap()
{
// 1.是否分包
diff --git a/src/JT808.Protocol/JT808HeaderPackage.cs b/src/JT808.Protocol/JT808HeaderPackage.cs
index 07ba465..886024f 100644
--- a/src/JT808.Protocol/JT808HeaderPackage.cs
+++ b/src/JT808.Protocol/JT808HeaderPackage.cs
@@ -64,7 +64,11 @@ namespace JT808.Protocol
/// 原数据
///
public byte[] OriginalData { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808HeaderPackage(ref JT808MessagePackReader reader, IJT808Config config)
{
// 1. 验证校验和
diff --git a/src/JT808.Protocol/JT808Package.cs b/src/JT808.Protocol/JT808Package.cs
index 9896b53..1b8ce34 100644
--- a/src/JT808.Protocol/JT808Package.cs
+++ b/src/JT808.Protocol/JT808Package.cs
@@ -78,7 +78,12 @@ namespace JT808.Protocol
}
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808Package Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
// 1. 验证校验和
@@ -164,7 +169,12 @@ namespace JT808.Protocol
// ---------------解包完成--------------
return jT808Package;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808Package value, IJT808Config config)
{
// ---------------开始组包--------------
@@ -243,7 +253,12 @@ namespace JT808.Protocol
writer.WriteEncode();
// ---------------组包结束--------------
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
// ---------------开始解析对象--------------
diff --git a/src/JT808.Protocol/JT808Serializer.cs b/src/JT808.Protocol/JT808Serializer.cs
index 57d4768..0b08b4b 100644
--- a/src/JT808.Protocol/JT808Serializer.cs
+++ b/src/JT808.Protocol/JT808Serializer.cs
@@ -40,7 +40,13 @@ namespace JT808.Protocol
public string SerializerId => jT808Config.ConfigId;
private readonly IJT808Config jT808Config;
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte[] Serialize(JT808Package package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -55,7 +61,13 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public ReadOnlySpan SerializeReadOnlySpan(JT808Package package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -70,7 +82,13 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808Package Deserialize(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -85,7 +103,14 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte [] Serialize(T obj, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -101,7 +126,14 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public ReadOnlySpan SerializeReadOnlySpan(T obj, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -117,7 +149,14 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public T Deserialize(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -134,7 +173,11 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
private static bool CheckPackageType(Type type)
{
return type == typeof(JT808Package) || type == typeof(JT808HeaderPackage);
@@ -145,6 +188,8 @@ namespace JT808.Protocol
/// 根据头部的消息Id进行分发处理,可以防止小部分性能损耗。
///
///
+ ///
+ ///
///
public JT808HeaderPackage HeaderDeserialize(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
@@ -160,6 +205,14 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public dynamic Deserialize(ReadOnlySpan bytes, Type type, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -176,7 +229,14 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public string Analyze(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -198,7 +258,15 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public string Analyze(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -303,7 +371,14 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte[] AnalyzeJsonBuffer(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -324,7 +399,15 @@ namespace JT808.Protocol
JT808ArrayPool.Return(buffer);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public byte[] AnalyzeJsonBuffer(ReadOnlySpan bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
{
byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0704.cs b/src/JT808.Protocol/MessageBody/JT808_0x0704.cs
index 632888a..18026e4 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x0704.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x0704.cs
@@ -41,7 +41,13 @@ namespace JT808.Protocol.MessageBody
///
public enum BatchLocationType : byte
{
+ ///
+ /// 正常位置批量汇报
+ ///
正常位置批量汇报 = 0x00,
+ ///
+ /// 盲区补报
+ ///
盲区补报 = 0x01
}
///
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8004.cs b/src/JT808.Protocol/MessageBody/JT808_0x8004.cs
index b750ecc..8643a23 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8004.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8004.cs
@@ -20,7 +20,9 @@ namespace JT808.Protocol.MessageBody
/// 查询服务器时间应答
///
public override string Description => "查询服务器时间应答";
-
+ ///
+ /// 服务器时间
+ ///
public DateTime Time { get; set; } = DateTime.Now;
///
///
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0018.cs b/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0018.cs
index a10a7be..42c6c89 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0018.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0018.cs
@@ -10,8 +10,8 @@ namespace JT808.Protocol.MessageBody
{
///
/// 服务器 TCP 端口
+ /// 2019版本已作为保留
///
- [Obsolete("2019版本已作为保留")]
public class JT808_0x8103_0x0018 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter, IJT808_2019_Version, IJT808Analyze
{
///
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0101.cs b/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0101.cs
index e7dc463..0aea963 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0101.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0101.cs
@@ -12,9 +12,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8103_0x0101 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x0101
+ ///
public override uint ParamId { get; set; } = 0x0101;
///
- /// 数据 长度
+ /// 数据长度
+ /// 2 byte
///
public override byte ParamLength { get; set; } = 2;
///
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0110.cs b/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0110.cs
index b35be6f..74d745c 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0110.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8103_0x0110.cs
@@ -48,7 +48,12 @@ namespace JT808.Protocol.MessageBody
/// bit28-bit0 表示 CAN 总线 ID。
///
public long BusId { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8103_0x0110 jT808_0x8103_0x0110 = new JT808_0x8103_0x0110();
@@ -71,7 +76,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteNumber($"[{ jT808_0x8103_0x0110.BusId.ReadNumber()}]CAN 总线 ID", jT808_0x8103_0x0110.BusId);
writer.WriteEndObject();
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8103_0x0110 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8103_0x0110 jT808_0x8103_0x0110 = new JT808_0x8103_0x0110();
@@ -85,7 +95,12 @@ namespace JT808.Protocol.MessageBody
jT808_0x8103_0x0110.BusId = temp & 0x01FFFFFF;
return jT808_0x8103_0x0110;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0x0110 value, IJT808Config config)
{
writer.WriteUInt32(value.ParamId);
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8600.cs b/src/JT808.Protocol/MessageBody/JT808_0x8600.cs
index b5265ac..b5f89a0 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8600.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8600.cs
@@ -18,7 +18,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8600 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
+ ///
+ /// 0x8600
+ ///
public override ushort MsgId { get; } = 0x8600;
+ ///
+ /// 设置圆形区域
+ ///
public override string Description => "设置圆形区域";
///
/// 设置属性
@@ -33,7 +39,12 @@ namespace JT808.Protocol.MessageBody
/// 区域项
///
public List AreaItems { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8600 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8600 jT808_0X8600 = new JT808_0x8600();
@@ -74,7 +85,12 @@ namespace JT808.Protocol.MessageBody
}
return jT808_0X8600;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8600 value, IJT808Config config)
{
writer.WriteByte(value.SettingAreaProperty);
@@ -126,7 +142,12 @@ namespace JT808.Protocol.MessageBody
}
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8600 value = new JT808_0x8600();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8601.cs b/src/JT808.Protocol/MessageBody/JT808_0x8601.cs
index 8bd06ea..e5bcb8a 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8601.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8601.cs
@@ -13,7 +13,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8601 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x8601
+ ///
public override ushort MsgId { get; } = 0x8601;
+ ///
+ /// 删除圆形区域
+ ///
public override string Description => "删除圆形区域";
///
/// 区域数
@@ -24,7 +30,12 @@ namespace JT808.Protocol.MessageBody
/// 区域ID集合
///
public List AreaIds { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8601 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8601 jT808_0X8601 = new JT808_0x8601();
@@ -36,7 +47,12 @@ namespace JT808.Protocol.MessageBody
}
return jT808_0X8601;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8601 value, IJT808Config config)
{
if (value.AreaIds != null)
@@ -48,7 +64,12 @@ namespace JT808.Protocol.MessageBody
}
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8601 value = new JT808_0x8601();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8602.cs b/src/JT808.Protocol/MessageBody/JT808_0x8602.cs
index 546ecb7..91ec73a 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8602.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8602.cs
@@ -17,7 +17,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8602 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
+ ///
+ /// 0x8602
+ ///
public override ushort MsgId { get; } = 0x8602;
+ ///
+ /// 设置矩形区域
+ ///
public override string Description => "设置矩形区域";
///
/// 设置属性
@@ -32,7 +38,12 @@ namespace JT808.Protocol.MessageBody
/// 区域项
///
public List AreaItems { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8602 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8602 jT808_0X8602 = new JT808_0x8602();
@@ -74,7 +85,12 @@ namespace JT808.Protocol.MessageBody
}
return jT808_0X8602;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8602 value, IJT808Config config)
{
writer.WriteByte(value.SettingAreaProperty);
@@ -127,7 +143,12 @@ namespace JT808.Protocol.MessageBody
}
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8602 value = new JT808_0x8602();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8603.cs b/src/JT808.Protocol/MessageBody/JT808_0x8603.cs
index 93e8c9f..62198c5 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8603.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8603.cs
@@ -13,7 +13,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8603 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ ///
+ ///
public override ushort MsgId { get; } = 0x8603;
+ ///
+ ///
+ ///
public override string Description => "删除矩形区域";
///
/// 区域数
@@ -24,7 +30,12 @@ namespace JT808.Protocol.MessageBody
/// 区域ID集合
///
public List AreaIds { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8603 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8603 jT808_0X8603 = new JT808_0x8603();
@@ -36,7 +47,12 @@ namespace JT808.Protocol.MessageBody
}
return jT808_0X8603;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8603 value, IJT808Config config)
{
if (value.AreaIds != null)
@@ -48,7 +64,12 @@ namespace JT808.Protocol.MessageBody
}
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8603 value = new JT808_0x8603();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8604.cs b/src/JT808.Protocol/MessageBody/JT808_0x8604.cs
index e0d35bd..fe6f623 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8604.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8604.cs
@@ -17,7 +17,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8604 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
+ ///
+ /// 0x8604
+ ///
public override ushort MsgId { get; } = 0x8604;
+ ///
+ /// 设置多边形区域
+ ///
public override string Description => "设置多边形区域";
///
/// 区域 ID
@@ -71,7 +77,12 @@ namespace JT808.Protocol.MessageBody
/// 2019版本
///
public string AreaName { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8604 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8604 jT808_0X8604 = new JT808_0x8604();
@@ -110,7 +121,12 @@ namespace JT808.Protocol.MessageBody
}
return jT808_0X8604;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8604 value, IJT808Config config)
{
writer.WriteUInt32(value.AreaId);
@@ -160,7 +176,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() - AreaNameLengthPosition - 2), AreaNameLengthPosition);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8604 value = new JT808_0x8604();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8605.cs b/src/JT808.Protocol/MessageBody/JT808_0x8605.cs
index b9c2acc..a5ab486 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8605.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8605.cs
@@ -13,7 +13,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8605 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x8605
+ ///
public override ushort MsgId { get; } = 0x8605;
+ ///
+ /// 删除多边形区域
+ ///
public override string Description => "删除多边形区域";
///
/// 区域数
@@ -24,6 +30,12 @@ namespace JT808.Protocol.MessageBody
/// 区域ID集合
///
public List AreaIds { get; set; }
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8605 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8605 jT808_0X8605 = new JT808_0x8605();
@@ -35,7 +47,12 @@ namespace JT808.Protocol.MessageBody
}
return jT808_0X8605;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8605 value, IJT808Config config)
{
if (value.AreaIds != null)
@@ -47,7 +64,12 @@ namespace JT808.Protocol.MessageBody
}
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8605 value = new JT808_0x8605();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8606.cs b/src/JT808.Protocol/MessageBody/JT808_0x8606.cs
index 752239c..d176686 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8606.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8606.cs
@@ -17,7 +17,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8606 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
+ ///
+ /// 0x8606
+ ///
public override ushort MsgId { get; } = 0x8606;
+ ///
+ /// 设置路线
+ ///
public override string Description => "设置路线";
///
/// 路线 ID
@@ -54,7 +60,12 @@ namespace JT808.Protocol.MessageBody
/// 路线名称
///
public string RouteName { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8606 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8606 jT808_0X8606 = new JT808_0x8606();
@@ -102,7 +113,12 @@ namespace JT808.Protocol.MessageBody
}
return jT808_0X8606;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8606 value, IJT808Config config)
{
writer.WriteUInt32(value.RouteId);
@@ -161,7 +177,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() - RouteNameLengthPosition - 2), RouteNameLengthPosition);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8606 value = new JT808_0x8606();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8607.cs b/src/JT808.Protocol/MessageBody/JT808_0x8607.cs
index e23e45f..11cbf12 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8607.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8607.cs
@@ -13,7 +13,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8607 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x8607
+ ///
public override ushort MsgId { get; } = 0x8607;
+ ///
+ /// 删除路线
+ ///
public override string Description => "删除路线";
///
/// 区域数
@@ -24,7 +30,12 @@ namespace JT808.Protocol.MessageBody
/// 区域ID集合
///
public List AreaIds { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8607 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8607 jT808_0X8607 = new JT808_0x8607();
@@ -36,7 +47,12 @@ namespace JT808.Protocol.MessageBody
}
return jT808_0X8607;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8607 value, IJT808Config config)
{
if (value.AreaIds != null)
@@ -48,7 +64,12 @@ namespace JT808.Protocol.MessageBody
}
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8607 value = new JT808_0x8607();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8608.cs b/src/JT808.Protocol/MessageBody/JT808_0x8608.cs
index 59ea22a..6c1e754 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8608.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8608.cs
@@ -14,7 +14,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8608 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
+ ///
+ /// 0x8608
+ ///
public override ushort MsgId { get; } = 0x8608;
+ ///
+ /// 查询区域或线路数据
+ ///
public override string Description => "查询区域或线路数据";
///
/// 查询类型
@@ -30,7 +36,12 @@ namespace JT808.Protocol.MessageBody
/// 查询的区域或线路的ID
///
public List Ids { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8608 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8608 value = new JT808_0x8608();
@@ -46,7 +57,12 @@ namespace JT808.Protocol.MessageBody
}
return value;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8608 value, IJT808Config config)
{
writer.WriteByte(value.QueryType);
@@ -63,7 +79,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteUInt32(0);
}
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8608 value = new JT808_0x8608();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8700.cs b/src/JT808.Protocol/MessageBody/JT808_0x8700.cs
index 500f706..d07100d 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8700.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8700.cs
@@ -10,18 +10,33 @@ using System.Text.Json;
namespace JT808.Protocol.MessageBody
{
+ ///
+ /// 行驶记录数据采集命令
+ ///
public class JT808_0x8700 : JT808Bodies, IJT808MessagePackFormatter, IJT808_2019_Version, IJT808Analyze
{
+ ///
+ /// 0x8700
+ ///
public override ushort MsgId => 0x8700;
-
+ ///
+ /// 行驶记录数据采集命令
+ ///
public override string Description => "行驶记录数据采集命令";
///
- ///
+ /// 命令Id
///
public byte CommandId { get; set; }
-
+ ///
+ /// 行车记录仪下行数据包
+ ///
public JT808CarDVRDownPackage JT808CarDVRDownPackage { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8700 value = new JT808_0x8700();
@@ -33,7 +48,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteEndObject();
writer.WriteEndObject();
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8700 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8700 value = new JT808_0x8700();
@@ -41,7 +61,12 @@ namespace JT808.Protocol.MessageBody
value.JT808CarDVRDownPackage = JT808CarDVRSerializer.JT808CarDVRDownPackage.Deserialize(ref reader, config);
return value;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8700 value, IJT808Config config)
{
writer.WriteByte(value.CommandId);
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8701.cs b/src/JT808.Protocol/MessageBody/JT808_0x8701.cs
index df76cbc..7a1809b 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8701.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8701.cs
@@ -15,16 +15,28 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8701: JT808Bodies, IJT808MessagePackFormatter, IJT808_2019_Version, IJT808Analyze
{
+ ///
+ /// 0x8701
+ ///
public override ushort MsgId => 0x8701;
-
+ ///
+ /// 行驶记录参数下传命令
+ ///
public override string Description => "行驶记录参数下传命令";
///
- ///
+ /// 命令Id
///
public byte CommandId { get; set; }
-
+ ///
+ /// 行驶记录参数下传命令包
+ ///
public JT808CarDVRDownPackage JT808CarDVRDownPackage { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8701 value = new JT808_0x8701();
@@ -36,7 +48,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteEndObject();
writer.WriteEndObject();
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8701 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8701 value = new JT808_0x8701();
@@ -44,7 +61,12 @@ namespace JT808.Protocol.MessageBody
value.JT808CarDVRDownPackage = JT808CarDVRSerializer.JT808CarDVRDownPackage.Deserialize(ref reader, config);
return value;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8701 value, IJT808Config config)
{
writer.WriteByte(value.CommandId);
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8702.cs b/src/JT808.Protocol/MessageBody/JT808_0x8702.cs
index 374b9f9..9aacbac 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8702.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8702.cs
@@ -5,7 +5,13 @@
///
public class JT808_0x8702 : JT808Bodies
{
+ ///
+ /// 0x8702
+ ///
public override ushort MsgId { get; } = 0x8702;
+ ///
+ /// 上报驾驶员身份信息请求
+ ///
public override string Description => "上报驾驶员身份信息请求";
///
/// 跳过数据体序列化
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8800.cs b/src/JT808.Protocol/MessageBody/JT808_0x8800.cs
index bb219ab..8471652 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8800.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8800.cs
@@ -13,7 +13,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8800 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x8800
+ ///
public override ushort MsgId { get; } = 0x8800;
+ ///
+ /// 多媒体数据上传应答
+ ///
public override string Description => "多媒体数据上传应答";
///
/// 多媒体ID
@@ -28,7 +34,12 @@ namespace JT808.Protocol.MessageBody
/// 重传包序号顺序排列,如“包 ID1 包 ID2......包 IDn”。
///
public byte[] RetransmitPackageIds { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8800 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8800 jT808_0X8800 = new JT808_0x8800();
@@ -37,14 +48,24 @@ namespace JT808.Protocol.MessageBody
jT808_0X8800.RetransmitPackageIds = reader.ReadArray(jT808_0X8800.RetransmitPackageCount * 2).ToArray();
return jT808_0X8800;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8800 value, IJT808Config config)
{
writer.WriteUInt32(value.MultimediaId);
writer.WriteByte((byte)(value.RetransmitPackageIds.Length / 2));
writer.WriteArray(value.RetransmitPackageIds);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8800 value = new JT808_0x8800();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8801.cs b/src/JT808.Protocol/MessageBody/JT808_0x8801.cs
index a1b582a..9605151 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8801.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8801.cs
@@ -13,7 +13,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8801 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
+ ///
+ /// 0x8801
+ ///
public override ushort MsgId { get; } = 0x8801;
+ ///
+ /// 摄像头立即拍摄命令
+ ///
public override string Description => "摄像头立即拍摄命令";
///
/// 通道 ID
@@ -64,7 +70,12 @@ namespace JT808.Protocol.MessageBody
/// 0-255
///
public byte Chroma { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8801 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8801 jT808_0X8801 = new JT808_0x8801();
@@ -80,7 +91,12 @@ namespace JT808.Protocol.MessageBody
jT808_0X8801.Chroma = reader.ReadByte();
return jT808_0X8801;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8801 value, IJT808Config config)
{
writer.WriteByte(value.ChannelId);
@@ -94,7 +110,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteByte(value.Saturability);
writer.WriteByte(value.Chroma);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8801 value = new JT808_0x8801();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8802.cs b/src/JT808.Protocol/MessageBody/JT808_0x8802.cs
index c70e549..c35843e 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8802.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8802.cs
@@ -14,7 +14,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8802 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x8802
+ ///
public override ushort MsgId { get; } = 0x8802;
+ ///
+ /// 存储多媒体数据检索
+ ///
public override string Description => "存储多媒体数据检索";
///
/// 多媒体类型
@@ -41,7 +47,12 @@ namespace JT808.Protocol.MessageBody
/// YY-MM-DD-hh-mm-ss
///
public DateTime EndTime { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8802 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8802 jT808_0X8802 = new JT808_0x8802();
@@ -52,7 +63,12 @@ namespace JT808.Protocol.MessageBody
jT808_0X8802.EndTime = reader.ReadDateTime6();
return jT808_0X8802;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8802 value, IJT808Config config)
{
writer.WriteByte(value.MultimediaType);
@@ -61,7 +77,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteDateTime6(value.StartTime);
writer.WriteDateTime6(value.EndTime);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8802 value = new JT808_0x8802();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8803.cs b/src/JT808.Protocol/MessageBody/JT808_0x8803.cs
index 2b8bd34..af8492a 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8803.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8803.cs
@@ -14,7 +14,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8803 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x8803
+ ///
public override ushort MsgId { get; } = 0x8803;
+ ///
+ /// 存储多媒体数据上传命令
+ ///
public override string Description => "存储多媒体数据上传命令";
///
/// 多媒体类型
@@ -47,7 +53,12 @@ namespace JT808.Protocol.MessageBody
///
///
public byte MultimediaDeleted { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8803 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8803 jT808_0X8803 = new JT808_0x8803();
@@ -59,7 +70,12 @@ namespace JT808.Protocol.MessageBody
jT808_0X8803.MultimediaDeleted = reader.ReadByte();
return jT808_0X8803;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8803 value, IJT808Config config)
{
writer.WriteByte(value.MultimediaType);
@@ -69,7 +85,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteDateTime6(value.EndTime);
writer.WriteByte(value.MultimediaDeleted);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8803 value = new JT808_0x8803();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8804.cs b/src/JT808.Protocol/MessageBody/JT808_0x8804.cs
index c015eae..88b0596 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8804.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8804.cs
@@ -12,7 +12,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8804 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x8804
+ ///
public override ushort MsgId { get; } = 0x8804;
+ ///
+ /// 录音开始命令
+ ///
public override string Description => "录音开始命令";
///
/// 录音命令
@@ -33,7 +39,12 @@ namespace JT808.Protocol.MessageBody
/// 0:8K;1:11K;2:23K;3:32K;其他保留
///
public byte AudioSampleRate { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8804 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8804 jT808_0X8804 = new JT808_0x8804();
@@ -43,6 +54,12 @@ namespace JT808.Protocol.MessageBody
jT808_0X8804.AudioSampleRate = reader.ReadByte();
return jT808_0X8804;
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8804 value, IJT808Config config)
{
writer.WriteByte((byte)value.RecordCmd);
@@ -50,7 +67,12 @@ namespace JT808.Protocol.MessageBody
writer.WriteByte((byte)value.RecordSave);
writer.WriteByte(value.AudioSampleRate);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8804 value = new JT808_0x8804();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8805.cs b/src/JT808.Protocol/MessageBody/JT808_0x8805.cs
index 93bbdcf..30cf132 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8805.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8805.cs
@@ -12,7 +12,14 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8805 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
+ ///
+ /// 0x8805
+ ///
public override ushort MsgId { get; } = 0x8805;
+
+ ///
+ /// 单条存储多媒体数据检索上传命令
+ ///
public override string Description => "单条存储多媒体数据检索上传命令";
///
/// 多媒体ID
@@ -23,7 +30,12 @@ namespace JT808.Protocol.MessageBody
///
///
public byte MultimediaDeleted { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8805 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8805 jT808_0X8805 = new JT808_0x8805();
@@ -31,13 +43,23 @@ namespace JT808.Protocol.MessageBody
jT808_0X8805.MultimediaDeleted = reader.ReadByte();
return jT808_0X8805;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8805 value, IJT808Config config)
{
writer.WriteUInt32(value.MultimediaId);
writer.WriteByte(value.MultimediaDeleted);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8805 value = new JT808_0x8805();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8900.cs b/src/JT808.Protocol/MessageBody/JT808_0x8900.cs
index 0dc56e0..cf6cf05 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8900.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8900.cs
@@ -11,7 +11,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8900 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
+ ///
+ /// 0x8900
+ ///
public override ushort MsgId { get; } = 0x8900;
+ ///
+ /// 数据下行透传
+ ///
public override string Description => "数据下行透传";
///
/// 透传消息类型
@@ -28,7 +34,12 @@ namespace JT808.Protocol.MessageBody
/// 透传消息内容
///
public JT808_0x8900_BodyBase JT808_0X8900_BodyBase { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8900 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8900 value = new JT808_0x8900();
@@ -43,13 +54,23 @@ namespace JT808.Protocol.MessageBody
}
return value;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8900 value, IJT808Config config)
{
writer.WriteByte(value.PassthroughType);
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(value.JT808_0X8900_BodyBase, ref writer, value.JT808_0X8900_BodyBase, config);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8900 value = new JT808_0x8900();
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x8A00.cs b/src/JT808.Protocol/MessageBody/JT808_0x8A00.cs
index 56fc9ea..a114d14 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x8A00.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x8A00.cs
@@ -13,7 +13,13 @@ namespace JT808.Protocol.MessageBody
///
public class JT808_0x8A00 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
+ ///
+ /// 0x8A00
+ ///
public override ushort MsgId { get; } = 0x8A00;
+ ///
+ /// 平台RSA公钥
+ ///
public override string Description => "平台RSA公钥";
///
/// e
@@ -25,7 +31,12 @@ namespace JT808.Protocol.MessageBody
/// RSA 公钥{e,n}中的 n
///
public byte[] N { get; set; }
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public JT808_0x8A00 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8A00 jT808_0X8A00 = new JT808_0x8A00();
@@ -33,7 +44,12 @@ namespace JT808.Protocol.MessageBody
jT808_0X8A00.N = reader.ReadArray(128).ToArray();
return jT808_0X8A00;
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8A00 value, IJT808Config config)
{
writer.WriteUInt32(value.E);
@@ -43,7 +59,12 @@ namespace JT808.Protocol.MessageBody
}
writer.WriteArray(value.N);
}
-
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8A00 jT808_0X8A00 = new JT808_0x8A00();