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();