소스 검색

1.去掉消息Id枚举依赖的特性,使用具体消息体生成T4模板

2.增加字段验证扩展,用于协议长度验证
3.完善部分方法注释
tags/v2.3.6
SmallChi(Koike) 4 년 전
부모
커밋
0e0b086ed0
100개의 변경된 파일4287개의 추가작업 그리고 2817개의 파일을 삭제
  1. +32
    -2
      src/JT808.Protocol.Test/Extensions/JT808EnumExtensionsTest.cs
  2. +77
    -0
      src/JT808.Protocol.Test/Extensions/JT808ValidationExtensionsTest.cs
  3. +1
    -0
      src/JT808.Protocol.Test/JT808.Protocol.Test.csproj
  4. +1
    -1
      src/JT808.Protocol.Test/JT808SerializerTest.cs
  5. +2
    -2
      src/JT808.Protocol.Test/MessageBody/JT808_0x0001Test.cs
  6. +1
    -1
      src/JT808.Protocol.Test/MessageBody/JT808_0x8103CustomIdExtensions/JT808_0x8103_0x0075.cs
  7. +1
    -1
      src/JT808.Protocol.Test/Simples/Demo4.cs
  8. +1
    -1
      src/JT808.Protocol.Test/Simples/Demo6.cs
  9. +0
    -14
      src/JT808.Protocol/Attributes/JT808BodiesTypeAttribute.cs
  10. +0
    -20
      src/JT808.Protocol/Attributes/JT808MsgIdDescriptionAttribute.cs
  11. +2
    -1
      src/JT808.Protocol/Buffers/JT808BufferWriter.cs
  12. +3
    -0
      src/JT808.Protocol/DependencyInjectionExtensions.cs
  13. +7
    -4
      src/JT808.Protocol/Enums/JT808ErrorCode.cs
  14. +16
    -159
      src/JT808.Protocol/Enums/JT808MsgId.cs
  15. +3
    -0
      src/JT808.Protocol/Enums/JT808PlatformResult.cs
  16. +15
    -0
      src/JT808.Protocol/Enums/JT808PositionType.cs
  17. +9
    -0
      src/JT808.Protocol/Enums/JT808UpgradeResult.cs
  18. +9
    -0
      src/JT808.Protocol/Enums/JT808UpgradeType.cs
  19. +9
    -0
      src/JT808.Protocol/Enums/JT808Version.cs
  20. +27
    -5
      src/JT808.Protocol/Exceptions/JT808Exception.cs
  21. +10
    -0
      src/JT808.Protocol/Extensions/JT808AnalyzeExtensions.cs
  22. +38
    -1
      src/JT808.Protocol/Extensions/JT808ConfigExtensions.cs
  23. +2
    -2
      src/JT808.Protocol/Extensions/JT808EnumExtensions.cs
  24. +124
    -30
      src/JT808.Protocol/Extensions/JT808HexExtensions.cs
  25. +2489
    -2380
      src/JT808.Protocol/Extensions/JT808PackageExtensionsTemplate.cs
  26. +44
    -39
      src/JT808.Protocol/Extensions/JT808PackageExtensionsTemplate.tt
  27. +67
    -0
      src/JT808.Protocol/Extensions/JT808ValidationExtensions.cs
  28. +11
    -0
      src/JT808.Protocol/Formatters/IJT808FormatterFactory.cs
  29. +20
    -4
      src/JT808.Protocol/Formatters/IJT808MessagePackFormatter.cs
  30. +3
    -0
      src/JT808.Protocol/Interfaces/IJT808Config.cs
  31. +7
    -0
      src/JT808.Protocol/Interfaces/IJT808ExternalRegister.cs
  32. +1
    -1
      src/JT808.Protocol/Internal/JT808FormatterFactory.cs
  33. +1
    -1
      src/JT808.Protocol/Internal/JT808MsgIdFactory.cs
  34. +5
    -2
      src/JT808.Protocol/JT808.Protocol.csproj
  35. +1165
    -74
      src/JT808.Protocol/JT808.Protocol.xml
  36. +2
    -2
      src/JT808.Protocol/JT808Constants.cs
  37. +1
    -1
      src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs
  38. +13
    -1
      src/JT808.Protocol/JT808Serializer.cs
  39. +3
    -3
      src/JT808.Protocol/MessageBody/JT808_0x0001.cs
  40. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0003.cs
  41. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0200_0x04.cs
  42. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0200_0x05.cs
  43. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0200_0x06.cs
  44. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0200_0x2B.cs
  45. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0200_0x30.cs
  46. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0302.cs
  47. +2
    -2
      src/JT808.Protocol/MessageBody/JT808_0x0700.cs
  48. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0900.cs
  49. +2
    -2
      src/JT808.Protocol/MessageBody/JT808_0x0901.cs
  50. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103.cs
  51. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0001.cs
  52. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0002.cs
  53. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0003.cs
  54. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0004.cs
  55. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0005.cs
  56. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0006.cs
  57. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0007.cs
  58. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0010.cs
  59. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0011.cs
  60. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0012.cs
  61. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0013.cs
  62. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0014.cs
  63. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0015.cs
  64. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0016.cs
  65. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0017.cs
  66. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0018.cs
  67. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0019.cs
  68. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x001A.cs
  69. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x001B.cs
  70. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x001C.cs
  71. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x001D.cs
  72. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0020.cs
  73. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0021.cs
  74. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0022.cs
  75. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0023.cs
  76. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0024.cs
  77. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0025.cs
  78. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0026.cs
  79. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0027.cs
  80. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0028.cs
  81. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0029.cs
  82. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x002C.cs
  83. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x002D.cs
  84. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x002E.cs
  85. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x002F.cs
  86. +3
    -3
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0030.cs
  87. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0031.cs
  88. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0032.cs
  89. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0040.cs
  90. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0041.cs
  91. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0042.cs
  92. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0043.cs
  93. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0044.cs
  94. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0045.cs
  95. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0046.cs
  96. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0047.cs
  97. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0048.cs
  98. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0049.cs
  99. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0050.cs
  100. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x8103_0x0051.cs

+ 32
- 2
src/JT808.Protocol.Test/Extensions/JT808EnumExtensionsTest.cs 파일 보기

@@ -1,6 +1,11 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Interfaces;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using Xunit;
namespace JT808.Protocol.Test.Extensions
{
@@ -8,8 +13,7 @@ namespace JT808.Protocol.Test.Extensions
{
[Fact]
public void Test1()
{
{
var list0 = JT808EnumExtensions.GetEnumTypes<JT808.Protocol.Enums.JT808Alarm>(5, 32);
var list1 = JT808EnumExtensions.GetEnumTypes<JT808.Protocol.Enums.JT808Alarm>(16, 32);
var list2 = JT808EnumExtensions.GetEnumTypes<JT808.Protocol.Enums.JT808Alarm>(18, 32);
@@ -24,5 +28,31 @@ namespace JT808.Protocol.Test.Extensions
Assert.Equal(list4, new List<JT808Alarm>() { JT808Alarm.紧急报警_触动报警开关后触发, JT808Alarm.超速报警,JT808Alarm.疲劳驾驶, JT808Alarm.危险预警, JT808Alarm.GNSS模块发生故障 });
Assert.Equal(list5, new List<JT808Alarm>() { JT808Alarm.紧急报警_触动报警开关后触发, JT808Alarm.超速报警, JT808Alarm.疲劳驾驶, JT808Alarm.危险预警, JT808Alarm.GNSS模块发生故障, JT808Alarm.非法开门报警 });
}

[Fact]
public void Test2()
{
var types = Enum.GetNames(typeof(JT808MsgId));
var bodyTypes = Assembly.GetAssembly(typeof(JT808Package)).GetTypes().Where(w => w.BaseType == typeof(JT808Bodies)).ToList();
Assert.Equal(types.Length, bodyTypes.Count);
}

[Fact]
public void Test3()
{
var types = Enum.GetNames(typeof(JT808MsgId));
var bodyTypes = Assembly.GetAssembly(typeof(JT808Package)).GetTypes().Where(w => w.BaseType == typeof(JT808Bodies)).ToList();
foreach (var type in bodyTypes)
{
var instance = Activator.CreateInstance(type);
if(instance is JT808Bodies jT808Bodies)
{
string code = $"0x{jT808Bodies.MsgId.ToString("X2").PadLeft(4, '0')}";
string name = jT808Bodies.Description;
Debug.WriteLine(type.FullName);
}
}
Assert.Equal(types.Length, bodyTypes.Count);
}
}
}

+ 77
- 0
src/JT808.Protocol.Test/Extensions/JT808ValidationExtensionsTest.cs 파일 보기

@@ -0,0 +1,77 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Exceptions;
using JT808.Protocol.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;

namespace JT808.Protocol.Test.Extensions
{
public class JT808ValidationExtensionsTest
{
[Fact]
public void Test1()
{
string str = "SmallChi";
str.ValiString(nameof(str), 8);
}

[Fact]
public void Test2()
{
string str = "SmallChi";
var ex=Assert.Throws<JT808Exception>(() =>
{
str.ValiString(nameof(str),4);
});
Assert.Equal(JT808ErrorCode.VailLength, ex.ErrorCode);
Assert.Equal("str:8>fixed[4]", ex.Message);
}

[Fact]
public void Test3()
{
string str = "SmallChi";
var ex = Assert.Throws<JT808Exception>(() =>
{
str.ValiString(nameof(str), 16);
});
Assert.Equal(JT808ErrorCode.NotEnoughLength, ex.ErrorCode);
Assert.Equal("str:8<fixed[16]", ex.Message);
}

[Fact]
public void Test4()
{
byte[] arr = new byte[7];
arr.ValiBytes(nameof(arr), 7);
}

[Fact]
public void Test5()
{
byte[] arr = new byte[7];
var ex = Assert.Throws<JT808Exception>(() =>
{
arr.ValiBytes(nameof(arr), 6);
});
Assert.Equal(JT808ErrorCode.VailLength, ex.ErrorCode);
Assert.Equal("arr:7>fixed[6]", ex.Message);
}

[Fact]
public void Test6()
{
byte[] arr = new byte[7];
var ex = Assert.Throws<JT808Exception>(() =>
{
arr.ValiBytes(nameof(arr), 8);
});
Assert.Equal(JT808ErrorCode.NotEnoughLength, ex.ErrorCode);
Assert.Equal("arr:7<fixed[8]", ex.Message);
}
}
}

+ 1
- 0
src/JT808.Protocol.Test/JT808.Protocol.Test.csproj 파일 보기

@@ -32,6 +32,7 @@
<Compile Include="Extensions\JT808EnumExtensionsTest.cs" />
<Compile Include="Extensions\JT808HexExtensionsTest.cs" />
<Compile Include="Extensions\JT808PackageExtensionsTest.cs" />
<Compile Include="Extensions\JT808ValidationExtensionsTest.cs" />
<Compile Include="MessageBody\JT808LocationAttachExtensions\JT808LocationAttachImpl0x06.cs" />
<Compile Include="MessageBody\JT808_0x0001Test.cs" />
<Compile Include="MessageBody\JT808_0x0002Test.cs" />


+ 1
- 1
src/JT808.Protocol.Test/JT808SerializerTest.cs 파일 보기

@@ -47,7 +47,7 @@ namespace JT808.Protocol.Test
{
ReplyMsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(),
ReplyMsgNum = 1000,
JT808TerminalResult = Enums.JT808TerminalResult.Success
TerminalResult = Enums.JT808TerminalResult.Success
}
};
var hexSpan = jT808Serializer.SerializeReadOnlySpan(jT808Package);


+ 2
- 2
src/JT808.Protocol.Test/MessageBody/JT808_0x0001Test.cs 파일 보기

@@ -23,7 +23,7 @@ namespace JT808.Protocol.Test.MessageBody
{
ReplyMsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(),
ReplyMsgNum = 1000,
JT808TerminalResult = Enums.JT808TerminalResult.Success
TerminalResult = Enums.JT808TerminalResult.Success
}
};
//"7E 00 01 00 05 01 23 45 67 89 00 04 B3 03 E8 00 02 00 D3 7E"
@@ -42,7 +42,7 @@ namespace JT808.Protocol.Test.MessageBody
JT808_0x0001 JT808Bodies = (JT808_0x0001)jT808Package.Bodies;
Assert.Equal(Enums.JT808MsgId.终端心跳.ToUInt16Value(), JT808Bodies.ReplyMsgId);
Assert.Equal(1000, JT808Bodies.ReplyMsgNum);
Assert.Equal(Enums.JT808TerminalResult.Success, JT808Bodies.JT808TerminalResult);
Assert.Equal(Enums.JT808TerminalResult.Success, JT808Bodies.TerminalResult);
}

[Fact]


+ 1
- 1
src/JT808.Protocol.Test/MessageBody/JT808_0x8103CustomIdExtensions/JT808_0x8103_0x0075.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.Extensions;


+ 1
- 1
src/JT808.Protocol.Test/Simples/Demo4.cs 파일 보기

@@ -9,7 +9,7 @@ using System.Text;
using Xunit;
using JT808.Protocol.Formatters;
using JT808.Protocol.MessagePack;
using JT808.Protocol.Attributes;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using JT808.Protocol.Internal;


+ 1
- 1
src/JT808.Protocol.Test/Simples/Demo6.cs 파일 보기

@@ -10,7 +10,7 @@ using Xunit;
using JT808.Protocol.Formatters;
using Microsoft.Extensions.DependencyInjection;
using JT808.Protocol.MessagePack;
using JT808.Protocol.Attributes;
using JT808.Protocol.Internal;

namespace JT808.Protocol.Test.Simples


+ 0
- 14
src/JT808.Protocol/Attributes/JT808BodiesTypeAttribute.cs 파일 보기

@@ -1,14 +0,0 @@
using System;

namespace JT808.Protocol.Attributes
{
[AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
public sealed class JT808BodiesTypeAttribute : Attribute
{
public JT808BodiesTypeAttribute(Type jT808BodiesType)
{
JT808BodiesType = jT808BodiesType;
}
public Type JT808BodiesType { get; }
}
}

+ 0
- 20
src/JT808.Protocol/Attributes/JT808MsgIdDescriptionAttribute.cs 파일 보기

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

namespace JT808.Protocol.Attributes
{
[AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
public sealed class JT808MsgIdDescriptionAttribute : Attribute
{
public string Code { get; set; }

public string Name { get; set; }

public JT808MsgIdDescriptionAttribute(string code, string name)
{
Code = code;
Name = name;
}
}
}

+ 2
- 1
src/JT808.Protocol/Buffers/JT808BufferWriter.cs 파일 보기

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


+ 3
- 0
src/JT808.Protocol/DependencyInjectionExtensions.cs 파일 보기

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

namespace JT808.Protocol
{
/// <summary>
///
/// </summary>
public static class DependencyInjectionExtensions
{
public static IJT808Builder AddJT808Configure(this IServiceCollection services, IJT808Config jT808Config)


+ 7
- 4
src/JT808.Protocol/Enums/JT808ErrorCode.cs 파일 보기

@@ -3,11 +3,11 @@
public enum JT808ErrorCode
{
/// <summary>
/// 校验和不相等
/// JT808校验和不相等
/// </summary>
CheckCodeNotEqual = 1001,
/// <summary>
/// 校验和不相等
/// JT19056校验和不相等
/// </summary>
CarDVRCheckCodeNotEqual = 1002,
/// <summary>
@@ -18,7 +18,10 @@
/// 消息体解析错误
/// </summary>
BodiesParseError = 1004,
GetAttributeError = 1005,
/// <summary>
/// 验证长度
/// </summary>
VailLength = 1005,
/// <summary>
/// 没有实现对应的类型
/// </summary>
@@ -29,7 +32,7 @@
NotEnoughLength = 1007,
/// <summary>
/// 没有全局注册格式化器
/// <see cref="JT808.Protocol.Formatters.IJT808MessagePackFormatter<T>"/>
/// IJT808MessagePackFormatter
/// </summary>
NotGlobalRegisterFormatterAssembly = 1008,
/// <summary>


+ 16
- 159
src/JT808.Protocol/Enums/JT808MsgId.cs 파일 보기

@@ -1,5 +1,4 @@
using JT808.Protocol.Attributes;
using JT808.Protocol.MessageBody;
using JT808.Protocol.MessageBody;

namespace JT808.Protocol.Enums
{
@@ -12,498 +11,356 @@ namespace JT808.Protocol.Enums
/// 终端通用应答
/// 0x0001
/// </summary>
[JT808BodiesType(typeof(JT808_0x0001))]
[JT808MsgIdDescription("0x0001", "终端通用应答")]
终端通用应答 = 0x0001,
/// <summary>
/// 平台通用应答
/// 0x8001
/// </summary>
[JT808BodiesType(typeof(JT808_0x8001))]
[JT808MsgIdDescription("0x8001", "平台通用应答")]
平台通用应答 = 0x8001,
/// <summary>
/// 终端心跳
/// 0x0002
/// </summary>
[JT808BodiesType(typeof(JT808_0x0002))]
[JT808MsgIdDescription("0x0002", "终端心跳")]
终端心跳 = 0x0002,
/// <summary>
/// 补传分包请求
/// 0x8003
/// </summary>
[JT808BodiesType(typeof(JT808_0x8003))]
[JT808MsgIdDescription("0x8003", "补传分包请求")]
补传分包请求 = 0x8003,
/// <summary>
/// 终端注册
/// 0x0100
/// </summary>
[JT808BodiesType(typeof(JT808_0x0100))]
[JT808MsgIdDescription("0x0100", "终端注册")]
终端注册 = 0x0100,
/// <summary>
/// 终端注册应答
/// 0x8100
/// </summary>
[JT808BodiesType(typeof(JT808_0x8100))]
[JT808MsgIdDescription("0x8100", "终端注册应答")]
终端注册应答 = 0x8100,
/// <summary>
/// 终端注销
/// 0x0003
/// </summary>
[JT808BodiesType(typeof(JT808_0x0003))]
[JT808MsgIdDescription("0x0003", "终端注销")]
终端注销 = 0x0003,
/// <summary>
/// 终端鉴权
/// 0x0102
/// </summary>
[JT808BodiesType(typeof(JT808_0x0102))]
[JT808MsgIdDescription("0x0102", "终端鉴权")]
终端鉴权 = 0x0102,
/// <summary>
/// 设置终端参数
/// 0x8103
/// </summary>
[JT808BodiesType(typeof(JT808_0x8103))]
[JT808MsgIdDescription("0x8103", "设置终端参数")]
设置终端参数 = 0x8103,
/// <summary>
/// 查询终端参数
/// 0x8104
/// </summary>
[JT808BodiesType(typeof(JT808_0x8104))]
[JT808MsgIdDescription("0x8104", "查询终端参数")]
查询终端参数 = 0x8104,
/// <summary>
/// 查询终端参数应答
/// 0x0104
/// </summary>
[JT808BodiesType(typeof(JT808_0x0104))]
[JT808MsgIdDescription("0x0104", "查询终端参数应答")]
查询终端参数应答 = 0x0104,
/// <summary>
/// 终端控制
/// 0x8105
/// </summary>
[JT808BodiesType(typeof(JT808_0x8105))]
[JT808MsgIdDescription("0x8105", "终端控制")]
终端控制 = 0x8105,
/// <summary>
/// 查询指定终端参数
/// 0x8106
/// </summary>
[JT808BodiesType(typeof(JT808_0x8106))]
[JT808MsgIdDescription("0x8106", "查询指定终端参数")]
查询指定终端参数 = 0x8106,
/// <summary>
/// 查询终端属性
/// 0x8107
/// </summary>
[JT808BodiesType(typeof(JT808_0x8107))]
[JT808MsgIdDescription("0x8107", "查询终端属性")]
查询终端属性 = 0x8107,
/// <summary>
/// 查询终端属性应答
/// 0x0107
/// </summary>
[JT808BodiesType(typeof(JT808_0x0107))]
[JT808MsgIdDescription("0x0107", "查询终端属性应答")]
查询终端属性应答 = 0x0107,
/// <summary>
/// 下发终端升级包
/// 0x8108
/// </summary>
[JT808BodiesType(typeof(JT808_0x8108))]
[JT808MsgIdDescription("0x8108", "下发终端升级包")]
下发终端升级包 = 0x8108,
/// <summary>
/// 终端升级结果通知
/// 0x0108
/// </summary>
[JT808BodiesType(typeof(JT808_0x0108))]
[JT808MsgIdDescription("0x0108", "终端升级结果通知")]
终端升级结果通知 = 0x0108,
/// <summary>
/// 位置信息汇报
/// 0x0200
/// </summary>
[JT808BodiesType(typeof(JT808_0x0200))]
[JT808MsgIdDescription("0x0200", "位置信息汇报")]
位置信息汇报 = 0x0200,
/// <summary>
/// 位置信息查询
/// 0x8201
/// </summary>
[JT808BodiesType(typeof(JT808_0x8201))]
[JT808MsgIdDescription("0x8201", "位置信息查询")]
位置信息查询 = 0x8201,
/// <summary>
/// 位置信息查询应答
/// 0x0201
/// </summary>
[JT808BodiesType(typeof(JT808_0x0201))]
[JT808MsgIdDescription("0x0201", "位置信息查询应答")]
位置信息查询应答 = 0x0201,
/// <summary>
/// 临时位置跟踪控制
/// 0x8202
/// </summary>
[JT808BodiesType(typeof(JT808_0x8202))]
[JT808MsgIdDescription("0x8202", "临时位置跟踪控制")]
临时位置跟踪控制 = 0x8202,
/// <summary>
/// 人工确认报警消息
/// 0x8203
/// </summary>
[JT808BodiesType(typeof(JT808_0x8203))]
[JT808MsgIdDescription("0x8203", "人工确认报警消息")]
人工确认报警消息 = 0x8203,
/// <summary>
/// 文本信息下发
/// 0x8300
/// </summary>
[JT808BodiesType(typeof(JT808_0x8300))]
[JT808MsgIdDescription("0x8300", "文本信息下发")]
文本信息下发 = 0x8300,
/// <summary>
/// 事件设置
/// 0x8301
/// </summary>
[JT808BodiesType(typeof(JT808_0x8301))]
[JT808MsgIdDescription("0x8301", "事件设置")]
事件设置 = 0x8301,
/// <summary>
/// 事件报告
/// 0x0301
/// </summary>
[JT808BodiesType(typeof(JT808_0x0301))]
[JT808MsgIdDescription("0x0301", "事件报告")]
事件报告 = 0x0301,
/// <summary>
/// 提问下发
/// 0x8302
/// </summary>
[JT808BodiesType(typeof(JT808_0x8302))]
[JT808MsgIdDescription("0x8302", "提问下发")]
提问下发 = 0x8302,
/// <summary>
/// 提问应答
/// 0x0302
/// </summary>
[JT808BodiesType(typeof(JT808_0x0302))]
[JT808MsgIdDescription("0x8302", "提问应答")]
提问应答 = 0x0302,
/// <summary>
/// 信息点播菜单设置
/// 0x8303
/// </summary>
[JT808BodiesType(typeof(JT808_0x8303))]
[JT808MsgIdDescription("0x8303", "信息点播菜单设置")]
信息点播菜单设置 = 0x8303,
/// <summary>
/// 信息点播/取消
/// 0x0303
/// </summary>
[JT808BodiesType(typeof(JT808_0x0303))]
[JT808MsgIdDescription("0x0303", "信息点播或取消")]
信息点播_取消 = 0x0303,
/// <summary>
/// 信息服务
/// 0x8304
/// </summary>
[JT808BodiesType(typeof(JT808_0x8304))]
[JT808MsgIdDescription("0x8304", "信息服务")]
信息服务 = 0x8304,
/// <summary>
/// 电话回拨
/// 0x8400
/// </summary>
[JT808BodiesType(typeof(JT808_0x8400))]
[JT808MsgIdDescription("0x8400", "电话回拨")]
电话回拨 = 0x8400,
/// <summary>
/// 设置电话本
/// 0x8401
/// </summary>
[JT808BodiesType(typeof(JT808_0x8401))]
[JT808MsgIdDescription("0x8401", "设置电话本")]
设置电话本 = 0x8401,
/// <summary>
/// 车辆控制
/// 0x8500
/// </summary>
[JT808BodiesType(typeof(JT808_0x8500))]
[JT808MsgIdDescription("0x8500", "车辆控制")]
车辆控制 = 0x8500,
/// <summary>
/// 车辆控制应答
/// 0x0500
/// </summary>
[JT808BodiesType(typeof(JT808_0x0500))]
[JT808MsgIdDescription("0x0500", "车辆控制应答")]
车辆控制应答 = 0x0500,
/// <summary>
/// 设置圆形区域
/// 0x8600
/// </summary>
[JT808BodiesType(typeof(JT808_0x8600))]
[JT808MsgIdDescription("0x8600", "设置圆形区域")]
设置圆形区域 = 0x8600,
/// <summary>
/// 删除圆形区域
/// 0x8601
/// </summary>
[JT808BodiesType(typeof(JT808_0x8601))]
[JT808MsgIdDescription("0x8601", "删除圆形区域")]
删除圆形区域 = 0x8601,
/// <summary>
/// 设置矩形区域
/// 0x8602
/// </summary>
[JT808BodiesType(typeof(JT808_0x8602))]
[JT808MsgIdDescription("0x8602", "设置矩形区域")]
设置矩形区域 = 0x8602,
/// <summary>
/// 删除矩形区域
/// 0x8603
/// </summary>
[JT808BodiesType(typeof(JT808_0x8603))]
[JT808MsgIdDescription("0x8603", "删除矩形区域")]
删除矩形区域 = 0x8603,
/// <summary>
/// 设置多边形区域
/// 0x8604
/// </summary>
[JT808BodiesType(typeof(JT808_0x8604))]
[JT808MsgIdDescription("0x8604", "设置多边形区域")]
设置多边形区域 = 0x8604,
/// <summary>
/// 删除多边形区域
/// 0x8605
/// </summary>
[JT808BodiesType(typeof(JT808_0x8605))]
[JT808MsgIdDescription("0x8605", "删除多边形区域")]
删除多边形区域 = 0x8605,
/// <summary>
/// 设置路线
/// 0x8606
/// </summary>
[JT808BodiesType(typeof(JT808_0x8606))]
[JT808MsgIdDescription("0x8606", "设置路线")]
设置路线 = 0x8606,
/// <summary>
/// 删除路线
/// 0x8607
/// </summary>
[JT808BodiesType(typeof(JT808_0x8607))]
[JT808MsgIdDescription("0x8607", "删除路线")]
删除路线 = 0x8607,
///// <summary>
///// 行驶记录仪数据采集命令
///// 0x8700
///// </summary>
//[JT808BodiesType(typeof(JT808_0x8700))]
//[JT808MsgIdDescription("0x8700", "行驶记录仪数据采集命令")]
//行驶记录仪数据采集命令 = 0x8700,
///// <summary>
///// 行驶记录仪数据上传
///// 0x0700
///// </summary>
//[JT808BodiesType(typeof(JT808_0x0700))]
//[JT808MsgIdDescription("0x0700", "行驶记录仪数据上传")]
//行驶记录仪数据上传 = 0x0700,
///// <summary>
///// 行驶记录仪参数下传命令
///// 0x8701
///// </summary>
//[JT808BodiesType(typeof(JT808_0x8701))]
//[JT808MsgIdDescription("0x8701", "行驶记录仪参数下传命令")]
//行驶记录仪参数下传命令 = 0x8701,
/// <summary>
/// 行驶记录仪数据采集命令
/// 0x8700
/// </summary>
行驶记录仪数据采集命令 = 0x8700,
/// <summary>
/// 行驶记录仪数据上传
/// 0x0700
/// </summary>
行驶记录仪数据上传 = 0x0700,
/// <summary>
/// 行驶记录仪参数下传命令
/// 0x8701
/// </summary>
行驶记录仪参数下传命令 = 0x8701,
/// <summary>
/// 电子运单上报
/// 0x0701
/// </summary>
[JT808BodiesType(typeof(JT808_0x0701))]
[JT808MsgIdDescription("0x0701", "电子运单上报")]
电子运单上报 = 0x0701,
/// <summary>
/// 驾驶员身份信息采集上报
/// 0x0702
/// </summary>
[JT808BodiesType(typeof(JT808_0x0702))]
[JT808MsgIdDescription("0x0702", "驾驶员身份信息采集上报")]
驾驶员身份信息采集上报 = 0x0702,
/// <summary>
/// 上报驾驶员身份信息请求
/// 0x8702
/// </summary>
[JT808BodiesType(typeof(JT808_0x8702))]
[JT808MsgIdDescription("0x8702", "上报驾驶员身份信息请求")]
上报驾驶员身份信息请求 = 0x8702,
/// <summary>
/// 定位数据批量上传
/// 0x0704
/// </summary>
[JT808BodiesType(typeof(JT808_0x0704))]
[JT808MsgIdDescription("0x0704", "定位数据批量上传")]
定位数据批量上传 = 0x0704,
/// <summary>
/// CAN总线数据上传
/// 0x0705
/// </summary>
[JT808BodiesType(typeof(JT808_0x0705))]
[JT808MsgIdDescription("0x0705", "CAN总线数据上传")]
CAN总线数据上传 = 0x0705,
/// <summary>
/// 多媒体事件信息上传
/// 0x0800
/// </summary>
[JT808BodiesType(typeof(JT808_0x0800))]
[JT808MsgIdDescription("0x0800", "多媒体事件信息上传")]
多媒体事件信息上传 = 0x0800,
/// <summary>
/// 多媒体数据上传
/// 0x0801
/// </summary>
[JT808BodiesType(typeof(JT808_0x0801))]
[JT808MsgIdDescription("0x0801", "多媒体数据上传")]
多媒体数据上传 = 0x0801,
/// <summary>
/// 多媒体数据上传应答
/// 0x8800
/// </summary>
[JT808BodiesType(typeof(JT808_0x8800))]
[JT808MsgIdDescription("0x8800", "多媒体数据上传应答")]
多媒体数据上传应答 = 0x8800,
/// <summary>
/// 摄像头立即拍摄命令
/// 0x8801
/// </summary>
[JT808BodiesType(typeof(JT808_0x8801))]
[JT808MsgIdDescription("0x8801", "摄像头立即拍摄命令")]
摄像头立即拍摄命令 = 0x8801,
/// <summary>
/// 摄像头立即拍摄命令应答
/// 0x0805
/// </summary>
[JT808BodiesType(typeof(JT808_0x0805))]
[JT808MsgIdDescription("0x0805", "摄像头立即拍摄命令应答")]
摄像头立即拍摄命令应答 = 0x0805,
/// <summary>
/// 存储多媒体数据检索
/// 0x8802
/// </summary>
[JT808BodiesType(typeof(JT808_0x8802))]
[JT808MsgIdDescription("0x8802", "存储多媒体数据检索")]
存储多媒体数据检索 = 0x8802,
/// <summary>
/// 存储多媒体数据上传
/// 0x8803
/// </summary>
[JT808BodiesType(typeof(JT808_0x8803))]
[JT808MsgIdDescription("0x8803", "存储多媒体数据上传")]
存储多媒体数据上传 = 0x8803,
/// <summary>
/// 录音开始命令
/// 0x8804
/// </summary>
[JT808BodiesType(typeof(JT808_0x8804))]
[JT808MsgIdDescription("0x8804", "录音开始命令")]
录音开始命令 = 0x8804,
/// <summary>
/// 单条存储多媒体数据检索上传命令
/// 0x8805
/// </summary>
[JT808BodiesType(typeof(JT808_0x8805))]
[JT808MsgIdDescription("0x8804", "单条存储多媒体数据检索上传命令")]
单条存储多媒体数据检索上传命令 = 0x8805,
/// <summary>
/// 数据下行透传
/// 0x8900
/// </summary>
[JT808BodiesType(typeof(JT808_0x8900))]
[JT808MsgIdDescription("0x8900", "数据下行透传")]
数据下行透传 = 0x8900,
/// <summary>
/// 数据上行透传
/// 0x0900
/// </summary>
[JT808BodiesType(typeof(JT808_0x0900))]
[JT808MsgIdDescription("0x0900", "数据上行透传")]
数据上行透传 = 0x0900,
/// <summary>
/// 数据压缩上报
/// 0x0901
/// </summary>
[JT808BodiesType(typeof(JT808_0x0901))]
[JT808MsgIdDescription("0x0901", "数据压缩上报")]
数据压缩上报 = 0x0901,
/// <summary>
/// 平台RSA公钥
/// 0x8A00
/// </summary>
[JT808BodiesType(typeof(JT808_0x8A00))]
[JT808MsgIdDescription("0x8A00", "平台RSA公钥")]
平台RSA公钥 = 0x8A00,
/// <summary>
/// 终端RSA公钥
/// 0x0A00
/// </summary>
[JT808BodiesType(typeof(JT808_0x0A00))]
[JT808MsgIdDescription("0x0A00", "终端RSA公钥")]
终端RSA公钥 = 0x0A00,
/// <summary>
/// 查询服务器时间请求
/// 0x0004
/// </summary>
[JT808BodiesType(typeof(JT808_0x0004))]
[JT808MsgIdDescription("0x0004", "查询服务器时间请求")]
查询服务器时间请求 = 0x0004,
/// <summary>
/// 查询服务器时间应答
/// 0x8004
/// </summary>
[JT808BodiesType(typeof(JT808_0x8004))]
[JT808MsgIdDescription("0x8004", "查询服务器时间应答")]
查询服务器时间应答 = 0x8004,
/// <summary>
/// 终端补传分包请求
/// 0x0005
/// </summary>
[JT808BodiesType(typeof(JT808_0x0005))]
[JT808MsgIdDescription("0x0005", "终端补传分包请求")]
终端补传分包请求 = 0x0005,
/// <summary>
/// 链路检测
/// 0x8204
/// </summary>
[JT808BodiesType(typeof(JT808_0x8204))]
[JT808MsgIdDescription("0x8204", "链路检测")]
链路检测 = 0x8204,
/// <summary>
/// 查询区域或线路数据
/// 0x8608
/// </summary>
[JT808BodiesType(typeof(JT808_0x8608))]
[JT808MsgIdDescription("0x8608", "查询区域或线路数据")]
查询区域或线路数据 = 0x8608,
/// <summary>
/// 查询区域或线路数据应答
/// 0x0608
/// </summary>
[JT808BodiesType(typeof(JT808_0x0608))]
[JT808MsgIdDescription("0x0608", "查询区域或线路数据应答")]
查询区域或线路数据应答 = 0x0608,
/// <summary>
/// 存储多媒体数据检索应答
/// 0x0802
/// </summary>
[JT808BodiesType(typeof(JT808_0x0802))]
[JT808MsgIdDescription("0x0802", "存储多媒体数据检索应答")]
存储多媒体数据检索应答 = 0x0802,
}
}

+ 3
- 0
src/JT808.Protocol/Enums/JT808PlatformResult.cs 파일 보기

@@ -1,5 +1,8 @@
namespace JT808.Protocol.Enums
{
/// <summary>
/// 返回结果
/// </summary>
public enum JT808PlatformResult : byte
{
/// <summary>


+ 15
- 0
src/JT808.Protocol/Enums/JT808PositionType.cs 파일 보기

@@ -5,10 +5,25 @@
/// </summary>
public enum JT808PositionType : byte
{
/// <summary>
/// 无特定位置
/// </summary>
无特定位置 = 0x00,
/// <summary>
/// 圆形区域
/// </summary>
圆形区域 = 0x01,
/// <summary>
/// 矩形区域
/// </summary>
矩形区域 = 0x02,
/// <summary>
/// 多边形区域
/// </summary>
多边形区域 = 0x03,
/// <summary>
/// 路段
/// </summary>
路段 = 0x04
}
}

+ 9
- 0
src/JT808.Protocol/Enums/JT808UpgradeResult.cs 파일 보기

@@ -5,8 +5,17 @@
/// </summary>
public enum JT808UpgradeResult : byte
{
/// <summary>
/// 成功
/// </summary>
成功 = 0,
/// <summary>
/// 失败
/// </summary>
失败 = 1,
/// <summary>
/// 取消
/// </summary>
取消 = 2,
}
}

+ 9
- 0
src/JT808.Protocol/Enums/JT808UpgradeType.cs 파일 보기

@@ -5,8 +5,17 @@
/// </summary>
public enum JT808UpgradeType : byte
{
/// <summary>
/// 终端
/// </summary>
终端 = 0,
/// <summary>
/// 道路运输证IC卡读卡器
/// </summary>
道路运输证IC卡读卡器 = 12,
/// <summary>
/// 北斗卫星定位模块
/// </summary>
北斗卫星定位模块 = 52,
}
}

+ 9
- 0
src/JT808.Protocol/Enums/JT808Version.cs 파일 보기

@@ -4,9 +4,18 @@ using System.Text;

namespace JT808.Protocol.Enums
{
/// <summary>
/// JT808版本号
/// </summary>
public enum JT808Version:byte
{
/// <summary>
/// 2013
/// </summary>
JTT2013=1,
/// <summary>
/// 2019
/// </summary>
JTT2019=2,
}
}

+ 27
- 5
src/JT808.Protocol/Exceptions/JT808Exception.cs 파일 보기

@@ -3,29 +3,51 @@ using System;

namespace JT808.Protocol.Exceptions
{
/// <summary>
/// JT808异常处理类
/// </summary>
[Serializable]
public class JT808Exception : Exception
{
/// <summary>
///
/// </summary>
/// <param name="errorCode"></param>
public JT808Exception(JT808ErrorCode errorCode) : base(errorCode.ToString())
{
ErrorCode = errorCode;
}

/// <summary>
///
/// </summary>
/// <param name="errorCode"></param>
/// <param name="message"></param>
public JT808Exception(JT808ErrorCode errorCode, string message) : base(message)
{
ErrorCode = errorCode;
}

/// <summary>
///
/// </summary>
/// <param name="errorCode"></param>
/// <param name="ex"></param>
public JT808Exception(JT808ErrorCode errorCode, Exception ex) : base(ex.Message, ex)
{
ErrorCode = errorCode;
}

public JT808Exception(JT808ErrorCode errorCode, string message, Exception ex) : base(ex.Message, ex)
/// <summary>
///
/// </summary>
/// <param name="errorCode"></param>
/// <param name="message"></param>
/// <param name="ex"></param>
public JT808Exception(JT808ErrorCode errorCode, string message, Exception ex) : base(message, ex)
{
ErrorCode = errorCode;
}

/// <summary>
/// JT808统一错误码
/// </summary>
public JT808ErrorCode ErrorCode { get; }
}
}

+ 10
- 0
src/JT808.Protocol/Extensions/JT808AnalyzeExtensions.cs 파일 보기

@@ -7,8 +7,18 @@ using System.Text.Json;

namespace JT808.Protocol.Extensions
{
/// <summary>
/// JT808分析器扩展
/// </summary>
public static class JT808AnalyzeExtensions
{
/// <summary>
///
/// </summary>
/// <param name="instance"></param>
/// <param name="reader"></param>
/// <param name="writer"></param>
/// <param name="config"></param>
public static void Analyze(this object instance, ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
if(instance is IJT808Analyze analyze)


+ 38
- 1
src/JT808.Protocol/Extensions/JT808ConfigExtensions.cs 파일 보기

@@ -7,10 +7,19 @@ using System.Collections.Concurrent;

namespace JT808.Protocol
{
/// <summary>
/// JT808配置扩展
/// </summary>
public static class JT808ConfigExtensions
{
private readonly static ConcurrentDictionary<string, JT808Serializer> jT808SerializerDict = new ConcurrentDictionary<string, JT808Serializer>(StringComparer.OrdinalIgnoreCase);
private readonly static ConcurrentDictionary<string, JT808CarDVRSerializer> jT808CarDVRSerializer = new ConcurrentDictionary<string, JT808CarDVRSerializer>(StringComparer.OrdinalIgnoreCase);
/// <summary>
/// 通过类型获取对应的消息序列化器
/// </summary>
/// <param name="jT808Config"></param>
/// <param name="type"></param>
/// <returns></returns>
public static object GetMessagePackFormatterByType(this IJT808Config jT808Config,Type type)
{
if (!jT808Config.FormatterFactory.FormatterDict.TryGetValue(type.GUID, out var formatter))
@@ -19,6 +28,12 @@ namespace JT808.Protocol
}
return formatter;
}
/// <summary>
/// 通过类型获取对应的消息分析器
/// </summary>
/// <param name="jT808Config"></param>
/// <param name="type"></param>
/// <returns></returns>
public static object GetAnalyzeByType(this IJT808Config jT808Config, Type type)
{
if (!jT808Config.FormatterFactory.FormatterDict.TryGetValue(type.GUID, out var analyze))
@@ -27,14 +42,31 @@ namespace JT808.Protocol
}
return analyze;
}
/// <summary>
/// 获取对应的消息序列化器
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jT808Config"></param>
/// <returns></returns>
public static IJT808MessagePackFormatter<T> GetMessagePackFormatter<T>(this IJT808Config jT808Config)
{
return (IJT808MessagePackFormatter<T>)GetMessagePackFormatterByType(jT808Config,typeof(T));
}
/// <summary>
/// 获取对应的消息分析器
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jT808Config"></param>
/// <returns></returns>
public static IJT808Analyze GetAnalyze<T>(this IJT808Config jT808Config)
{
return (IJT808Analyze)GetAnalyzeByType(jT808Config, typeof(T));
}
/// <summary>
/// 获取JT19056序列化器
/// </summary>
/// <param name="jT808Config"></param>
/// <returns></returns>
public static JT808CarDVRSerializer GetCarDVRSerializer(this IJT808Config jT808Config)
{
if(!jT808CarDVRSerializer.TryGetValue(jT808Config.ConfigId,out var serializer))
@@ -43,7 +75,12 @@ namespace JT808.Protocol
jT808CarDVRSerializer.TryAdd(jT808Config.ConfigId, serializer);
}
return serializer;
}
}
/// <summary>
/// 获取JT808序列化器
/// </summary>
/// <param name="jT808Config"></param>
/// <returns></returns>
public static JT808Serializer GetSerializer(this IJT808Config jT808Config)
{
if(!jT808SerializerDict.TryGetValue(jT808Config.ConfigId,out var serializer))


+ 2
- 2
src/JT808.Protocol/Extensions/JT808EnumExtensions.cs 파일 보기

@@ -116,7 +116,7 @@ namespace JT808.Protocol.Extensions
/// <summary>
/// 获取DisplayNameAttribute特性枚举值的描述
/// </summary>
/// <param name="obj">枚举值</param>
/// <param name="value">枚举值</param>
/// <returns></returns>
public static string GetDisplayName(this Enum value)
{
@@ -127,7 +127,7 @@ namespace JT808.Protocol.Extensions
/// <summary>
/// 获取DisplayNameAttribute特性枚举及描述
/// </summary>
/// <param name="type"></param>
/// <param name="value"></param>
/// <returns></returns>
public static Dictionary<string, string> GetDisplayNameAttributeDictionary(this Enum value)
{


+ 124
- 30
src/JT808.Protocol/Extensions/JT808HexExtensions.cs 파일 보기

@@ -8,11 +8,59 @@ namespace JT808.Protocol.Extensions
/// </summary>
public static partial class JT808BinaryExtensions
{
/// <summary>
/// 16进制数组转16进制字符串
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static string ToHexString(this byte[] source)
{
return HexUtil.DoHexDump(source, 0, source.Length).ToUpper();
}

/// <summary>
/// 16进制字符串转16进制数组
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] ToHexBytes(this string hexString)
{
hexString = hexString.Replace(" ", "");
byte[] buf = new byte[hexString.Length / 2];
ReadOnlySpan<char> readOnlySpan = hexString.AsSpan();
for (int i = 0; i < hexString.Length; i++)
{
if (i % 2 == 0)
{
buf[i / 2] = Convert.ToByte(readOnlySpan.Slice(i, 2).ToString(), 16);
}
}
return buf;
}

/// <summary>
/// 从内存块中读取16进制字符串
/// </summary>
/// <param name="read"></param>
/// <param name="offset"></param>
/// <param name="len"></param>
/// <returns></returns>
public static string ReadHexStringLittle(ReadOnlySpan<byte> read, ref int offset, int len)
{
//ReadOnlySpan<byte> source = read.Slice(offset, len);
string hex = HexUtil.DoHexDump(read, offset, len);
offset += len;
return hex;
}

/// <summary>
/// 将16进制字符串写入对应数组中
/// </summary>
/// <param name="bytes"></param>
/// <param name="offset"></param>
/// <param name="data"></param>
/// <param name="len"></param>
/// <returns></returns>
public static int WriteHexStringLittle(byte[] bytes, int offset, string data, int len)
{
if (data == null) data = "";
@@ -41,86 +89,120 @@ namespace JT808.Protocol.Extensions
}
return length;
}

/// <summary>
/// 16进制字符串转16进制数组
///
/// </summary>
/// <param name="hexString"></param>
/// <param name="separator"></param>
/// <param name="value"></param>
/// <param name="format"></param>
/// <returns></returns>
public static byte[] ToHexBytes(this string hexString)
{
hexString = hexString.Replace(" ", "");
byte[] buf = new byte[hexString.Length / 2];
ReadOnlySpan<char> readOnlySpan = hexString.AsSpan();
for (int i = 0; i < hexString.Length; i++)
{
if (i % 2 == 0)
{
buf[i / 2] = Convert.ToByte(readOnlySpan.Slice(i, 2).ToString(), 16);
}
}
return buf;
}

public static string ReadHexStringLittle(ReadOnlySpan<byte> read, ref int offset, int len)
{
//ReadOnlySpan<byte> source = read.Slice(offset, len);
string hex = HexUtil.DoHexDump(read, offset, len);
offset += len;
return hex;
}

public static string ReadNumber(this byte value, string format = "X2")
{
return value.ToString(format);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="format"></param>
/// <returns></returns>
public static string ReadNumber(this int value, string format = "X8")
{
return value.ToString(format);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="format"></param>
public static string ReadNumber(this uint value, string format = "X8")
{
return value.ToString(format);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="format"></param>
public static string ReadNumber(this long value, string format = "X16")
{
return value.ToString(format);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="format"></param>
public static string ReadNumber(this ulong value, string format="X16")
{
return value.ToString(format);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="format"></param>
public static string ReadNumber(this short value, string format = "X4")
{
return value.ToString(format);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="format"></param>
public static string ReadNumber(this ushort value, string format = "X4")
{
return value.ToString(format);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static ReadOnlySpan<char> ReadBinary(this ushort value)
{
return System.Convert.ToString(value, 2).PadLeft(16, '0').AsSpan();
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static ReadOnlySpan<char> ReadBinary(this short value)
{
return System.Convert.ToString(value, 2).PadLeft(16, '0').AsSpan();
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static ReadOnlySpan<char> ReadBinary(this uint value)
{
return System.Convert.ToString(value, 2).PadLeft(32, '0').AsSpan();
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static ReadOnlySpan<char> ReadBinary(this int value)
{
return System.Convert.ToString(value, 2).PadLeft(32, '0').AsSpan();
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static ReadOnlySpan<char> ReadBinary(this byte value)
{
return System.Convert.ToString(value, 2).PadLeft(8, '0').AsSpan();
}
}

/// <summary>
///
/// </summary>
public static class HexUtil
{
static readonly char[] HexdumpTable = new char[256 * 4];
@@ -133,7 +215,13 @@ namespace JT808.Protocol.Extensions
HexdumpTable[(i << 1) + 1] = digits[i & 0x0F];
}
}

/// <summary>
///
/// </summary>
/// <param name="buffer"></param>
/// <param name="fromIndex"></param>
/// <param name="length"></param>
/// <returns></returns>
public static string DoHexDump(ReadOnlySpan<byte> buffer, int fromIndex, int length)
{
if (length == 0)
@@ -150,7 +238,13 @@ namespace JT808.Protocol.Extensions
}
return new string(buf);
}

/// <summary>
///
/// </summary>
/// <param name="array"></param>
/// <param name="fromIndex"></param>
/// <param name="length"></param>
/// <returns></returns>
public static string DoHexDump(byte[] array, int fromIndex, int length)
{
if (length == 0)


+ 2489
- 2380
src/JT808.Protocol/Extensions/JT808PackageExtensionsTemplate.cs
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 44
- 39
src/JT808.Protocol/Extensions/JT808PackageExtensionsTemplate.tt 파일 보기

@@ -6,65 +6,70 @@
<#@ import namespace="JT808.Protocol" #>
<#@ import namespace="JT808.Protocol.Enums" #>
<#@ import namespace="JT808.Protocol.Extensions" #>
<#@ import namespace="JT808.Protocol.Attributes" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".cs" #>
<#
var types=Enum.GetNames(typeof(JT808MsgId));
var types=Assembly.GetAssembly(typeof(JT808Package)).GetTypes().Where(w => w.BaseType == typeof(JT808Bodies)).ToList();
#>
using JT808.Protocol.Enums;

namespace JT808.Protocol.Extensions
{
/// <summary>
/// todo:source-generators正式发布以后将T4模板换掉
/// https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/
/// </summary>
public static partial class JT808PackageExtensions
{
<#
foreach (var item in types)
foreach (var type in types)
{
JT808MsgId msgId = item.ToEnum<JT808MsgId>();
JT808BodiesTypeAttribute jT808BodiesTypeAttribute = msgId.GetAttribute<JT808BodiesTypeAttribute>();
JT808MsgIdDescriptionAttribute jT808MsgIdDescriptionAttribute = msgId.GetAttribute<JT808MsgIdDescriptionAttribute>();

var instance = Activator.CreateInstance(type);
if(instance is JT808Bodies jT808Bodies)
{
string code = $"0x{jT808Bodies.MsgId.ToString("X2").PadLeft(4, '0')}";
string name = jT808Bodies.Description;
#>
/// <summary>
/// <#= jT808MsgIdDescriptionAttribute.Code #> - <#= jT808MsgIdDescriptionAttribute.Name #>
/// auto-generated
/// </summary>
public static JT808Package Create_<#= jT808MsgIdDescriptionAttribute.Name #>(this JT808MsgId msgId, string terminalPhoneNo,<#= jT808BodiesTypeAttribute.JT808BodiesType.FullName #> bodies)
{
return Create<<#= jT808BodiesTypeAttribute.JT808BodiesType.FullName#>>(msgId,terminalPhoneNo,bodies);
}
/// <summary>
/// <#= code #> - <#= name #>
/// auto-generated
/// </summary>
public static JT808Package Create_<#= name #>(this JT808MsgId msgId, string terminalPhoneNo,<#= type.FullName #> bodies)
{
return Create<<#= type.FullName#>>(msgId,terminalPhoneNo,bodies);
}

/// <summary>
/// <#= jT808MsgIdDescriptionAttribute.Code #> - <#= jT808MsgIdDescriptionAttribute.Name #>
/// auto-generated
/// </summary>
public static JT808Package Create(this JT808MsgId msgId, string terminalPhoneNo,<#= jT808BodiesTypeAttribute.JT808BodiesType.FullName #> bodies)
{
return Create<<#= jT808BodiesTypeAttribute.JT808BodiesType.FullName#>>(msgId,terminalPhoneNo,bodies);
}
/// <summary>
/// <#= code #> - <#= name #>
/// auto-generated
/// </summary>
public static JT808Package Create(this JT808MsgId msgId, string terminalPhoneNo,<#= type.FullName #> bodies)
{
return Create<<#= type.FullName#>>(msgId,terminalPhoneNo,bodies);
}

/// <summary>
/// <#= jT808MsgIdDescriptionAttribute.Code #> - <#= jT808MsgIdDescriptionAttribute.Name #>
/// auto-generated 2019 version
/// </summary>
public static JT808Package Create_<#= jT808MsgIdDescriptionAttribute.Name #>_2019(this JT808MsgId msgId, string terminalPhoneNo,<#= jT808BodiesTypeAttribute.JT808BodiesType.FullName #> bodies)
{
return Create2019<<#= jT808BodiesTypeAttribute.JT808BodiesType.FullName#>>(msgId,terminalPhoneNo,bodies);
}
/// <summary>
/// <#= code #> - <#= name #>
/// auto-generated 2019 version
/// </summary>
public static JT808Package Create_<#= name #>_2019(this JT808MsgId msgId, string terminalPhoneNo,<#= type.FullName #> bodies)
{
return Create2019<<#= type.FullName#>>(msgId,terminalPhoneNo,bodies);
}

/// <summary>
/// <#= jT808MsgIdDescriptionAttribute.Code #> - <#= jT808MsgIdDescriptionAttribute.Name #>
/// auto-generated 2019 version
/// </summary>
public static JT808Package Create2019(this JT808MsgId msgId, string terminalPhoneNo,<#= jT808BodiesTypeAttribute.JT808BodiesType.FullName #> bodies)
{
return Create2019<<#= jT808BodiesTypeAttribute.JT808BodiesType.FullName#>>(msgId,terminalPhoneNo,bodies);
}
/// <summary>
/// <#= code #> - <#= name #>
/// auto-generated 2019 version
/// </summary>
public static JT808Package Create2019(this JT808MsgId msgId, string terminalPhoneNo,<#= type.FullName #> bodies)
{
return Create2019<<#= type.FullName#>>(msgId,terminalPhoneNo,bodies);
}
<#
}
}
#>
}

+ 67
- 0
src/JT808.Protocol/Extensions/JT808ValidationExtensions.cs 파일 보기

@@ -0,0 +1,67 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Exceptions;
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace JT808.Protocol.Extensions
{
/// <summary>
/// 验证长度扩展方法
/// </summary>
public static partial class JT808ValidationExtensions
{
/// <summary>
/// 验证字符串长度
/// </summary>
/// <param name="value"></param>
/// <param name="fieldName"></param>
/// <param name="fixedLength"></param>
public static void ValiString(this string value,in string fieldName, in int fixedLength)
{
vali(value.Length, fieldName, fixedLength);
}

/// <summary>
/// 验证数组长度
/// </summary>
/// <param name="value"></param>
/// <param name="fieldName"></param>
/// <param name="fixedLength"></param>
public static void ValiBytes(this byte[] value,in string fieldName, in int fixedLength)
{
vali(value.Length, fieldName, fixedLength);
}


/// <summary>
/// 验证集合长度
/// </summary>
/// <param name="value"></param>
/// <param name="fieldName"></param>
/// <param name="fixedLength"></param>
public static void ValiList<T>(this IEnumerable<T> value, in string fieldName, in int fixedLength)
{
vali(value.Count(), fieldName, fixedLength);
}

/// <summary>
/// 验证
/// </summary>
/// <param name="length"></param>
/// <param name="fieldName"></param>
/// <param name="fixedLength"></param>
private static void vali(in int length,in string fieldName, in int fixedLength)
{
if (length > fixedLength)
{
throw new JT808Exception(JT808ErrorCode.VailLength, $"{fieldName}:{length}>fixed[{fixedLength}]");
}
else if (length < fixedLength)
{
throw new JT808Exception(JT808ErrorCode.NotEnoughLength, $"{fieldName}:{length}<fixed[{fixedLength}]");
}
}
}
}

+ 11
- 0
src/JT808.Protocol/Formatters/IJT808FormatterFactory.cs 파일 보기

@@ -6,9 +6,20 @@ using System.Text;

namespace JT808.Protocol.Formatters
{
/// <summary>
/// 序列化工厂
/// </summary>
public interface IJT808FormatterFactory: IJT808ExternalRegister
{
/// <summary>
///
/// </summary>
IDictionary<Guid,object> FormatterDict { get;}
/// <summary>
///
/// </summary>
/// <typeparam name="TIJT808Formatter"></typeparam>
/// <returns></returns>
IJT808FormatterFactory SetMap<TIJT808Formatter>()
where TIJT808Formatter : IJT808Formatter;
}


+ 20
- 4
src/JT808.Protocol/Formatters/IJT808MessagePackFormatter.cs 파일 보기

@@ -1,15 +1,31 @@
using System;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using JT808.Protocol.MessagePack;

namespace JT808.Protocol.Formatters
{
/// <summary>
/// 序列化器接口
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IJT808MessagePackFormatter<T> : IJT808Formatter
{
/// <summary>
///
/// </summary>
/// <param name="writer"></param>
/// <param name="value"></param>
/// <param name="config"></param>
void Serialize(ref JT808MessagePackWriter writer, T value, IJT808Config config);
/// <summary>
///
/// </summary>
/// <param name="reader"></param>
/// <param name="config"></param>
/// <returns></returns>
T Deserialize(ref JT808MessagePackReader reader, IJT808Config config);
}

/// <summary>
///
/// </summary>
public interface IJT808Formatter
{



+ 3
- 0
src/JT808.Protocol/Interfaces/IJT808Config.cs 파일 보기

@@ -10,6 +10,9 @@ namespace JT808.Protocol
{
public interface IJT808Config
{
/// <summary>
/// 配置ID
/// </summary>
string ConfigId { get; }
/// <summary>
/// 消息流水号


+ 7
- 0
src/JT808.Protocol/Interfaces/IJT808ExternalRegister.cs 파일 보기

@@ -5,8 +5,15 @@ using System.Text;

namespace JT808.Protocol.Interfaces
{
/// <summary>
/// 外部注册
/// </summary>
public interface IJT808ExternalRegister
{
/// <summary>
///
/// </summary>
/// <param name="externalAssembly"></param>
void Register(Assembly externalAssembly);
}
}

+ 1
- 1
src/JT808.Protocol/Internal/JT808FormatterFactory.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Enums;
using JT808.Protocol.Exceptions;
using JT808.Protocol.Formatters;


+ 1
- 1
src/JT808.Protocol/Internal/JT808MsgIdFactory.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;


+ 5
- 2
src/JT808.Protocol/JT808.Protocol.csproj 파일 보기

@@ -15,7 +15,7 @@
<license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license>
<DocumentationFile>JT808.Protocol.xml</DocumentationFile>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Version>2.3.5</Version>
<Version>2.3.6</Version>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<AnalysisLevel>latest</AnalysisLevel>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
@@ -67,7 +67,7 @@
<PackageReference Include="System.Text.Json" Version="5.0.1" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net5' ">
<ItemGroup Condition=" '$(TargetFramework)' == 'net5.0' ">

</ItemGroup>

@@ -91,4 +91,7 @@
</Compile>
</ItemGroup>

<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
</Project>

+ 1165
- 74
src/JT808.Protocol/JT808.Protocol.xml
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 2
- 2
src/JT808.Protocol/JT808Constants.cs 파일 보기

@@ -153,11 +153,11 @@ namespace JT808.Protocol
/// </summary>
public const uint JT808_0x8103_0x002E = 0x002E;
/// <summary>
/// 紧急报警时汇报距离间隔,单位为米(m)>0
/// 紧急报警时汇报距离间隔,单位为米(m)>0
/// </summary>
public const uint JT808_0x8103_0x002F = 0x002F;
/// <summary>
/// 拐点补传角度,<180
/// 拐点补传角度小于180
/// </summary>
public const uint JT808_0x8103_0x0030 = 0x0030;
/// <summary>


+ 1
- 1
src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Enums;
using JT808.Protocol.Formatters;
using System;


+ 13
- 1
src/JT808.Protocol/JT808Serializer.cs 파일 보기

@@ -11,20 +11,32 @@ using System.Text.Json;

namespace JT808.Protocol
{
/// <summary>
/// JT808序列化器
/// </summary>
public class JT808Serializer
{
private readonly static JT808Package jT808Package = new JT808Package();

/// <summary>
///
/// </summary>
/// <param name="jT808Config"></param>
public JT808Serializer(IJT808Config jT808Config)
{
this.jT808Config = jT808Config;
}

/// <summary>
///
/// </summary>
public JT808Serializer():this(new DefaultGlobalConfig())
{

}

/// <summary>
///
/// </summary>
public string SerializerId => jT808Config.ConfigId;

private readonly IJT808Config jT808Config;


+ 3
- 3
src/JT808.Protocol/MessageBody/JT808_0x0001.cs 파일 보기

@@ -30,14 +30,14 @@ namespace JT808.Protocol.MessageBody
/// 结果
/// 0:成功/确认;1:失败;2:消息有误;3:不支持
/// </summary>
public JT808TerminalResult JT808TerminalResult { get; set; }
public JT808TerminalResult TerminalResult { get; set; }

public JT808_0x0001 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x0001 jT808_0X0001 = new JT808_0x0001();
jT808_0X0001.ReplyMsgNum = reader.ReadUInt16();
jT808_0X0001.ReplyMsgId = reader.ReadUInt16();
jT808_0X0001.JT808TerminalResult = (JT808TerminalResult)reader.ReadByte();
jT808_0X0001.TerminalResult = (JT808TerminalResult)reader.ReadByte();
return jT808_0X0001;
}

@@ -45,7 +45,7 @@ namespace JT808.Protocol.MessageBody
{
writer.WriteUInt16(value.ReplyMsgNum);
writer.WriteUInt16(value.ReplyMsgId);
writer.WriteByte((byte)value.JT808TerminalResult);
writer.WriteByte((byte)value.TerminalResult);
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0003.cs 파일 보기

@@ -12,6 +12,6 @@

public override ushort MsgId { get; } = 0x0003;

public override string Description => "终端注销请求";
public override string Description => "终端注销";
}
}

+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0200_0x04.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0200_0x05.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0200_0x06.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0200_0x2B.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0200_0x30.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0302.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 2
- 2
src/JT808.Protocol/MessageBody/JT808_0x0700.cs 파일 보기

@@ -9,13 +9,13 @@ using System.Text.Json;
namespace JT808.Protocol.MessageBody
{
/// <summary>
/// 行驶记录数据上传
/// 行驶记录数据上传
/// 0x0700
/// </summary>
public class JT808_0x0700 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0700>, IJT808Analyze
{
public override ushort MsgId { get; } = 0x0700;
public override string Description => "行驶记录数据上传";
public override string Description => "行驶记录数据上传";
/// <summary>
/// 应答流水号
/// </summary>


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0900.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 2
- 2
src/JT808.Protocol/MessageBody/JT808_0x0901.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
@@ -22,7 +22,7 @@ namespace JT808.Protocol.MessageBody
/// <summary>
/// 未压缩消息体
/// 压缩消息体为需要压缩的消息经过 GZIP 压缩算法后的消息
/// 可实现 <see cref="JT808.Protocol.IJT808ICompress"/>自定义压缩算法
/// 可实现 refJT808.Protocol.IJT808ICompress 自定义压缩算法
/// </summary>
public byte[] UnCompressMessage { get; set; }



+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0001.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0002.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0003.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0004.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0005.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0006.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0007.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0010.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0011.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0012.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0013.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0014.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0015.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0016.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0017.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0018.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0019.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x001A.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x001B.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x001C.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x001D.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0020.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0021.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0022.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0023.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0024.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0025.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0026.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0027.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0028.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0029.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x002C.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x002D.cs 파일 보기

@@ -1,4 +1,4 @@
using JT808.Protocol.Attributes;

using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x002E.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x002F.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 3
- 3
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0030.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
@@ -8,7 +8,7 @@ using JT808.Protocol.MessagePack;
namespace JT808.Protocol.MessageBody
{
/// <summary>
/// 拐点补传角度,<180
/// 拐点补传角度,小于180
/// </summary>
public class JT808_0x8103_0x0030 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter<JT808_0x8103_0x0030>, IJT808Analyze
{
@@ -18,7 +18,7 @@ namespace JT808.Protocol.MessageBody
/// </summary>
public override byte ParamLength { get; set; } = 4;
/// <summary>
/// 拐点补传角度,<180
/// 拐点补传角度,小于180
/// </summary>
public uint ParamValue { get; set; }



+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0031.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0032.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0040.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0041.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0042.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0043.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0044.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0045.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0046.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0047.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0048.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0049.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0050.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x8103_0x0051.cs 파일 보기

@@ -1,5 +1,5 @@
using System.Text.Json;
using JT808.Protocol.Attributes;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.

불러오는 중...
취소
저장