Quellcode durchsuchen

Merge branch 'master' of https://github.com/SmallChi/JT809

tags/v2.2.0
yedajiang44 vor 4 Jahren
Ursprung
Commit
16b27b7b29
15 geänderte Dateien mit 301 neuen und 48 gelöschten Zeilen
  1. +1
    -1
      .github/workflows/dotnetcore.yml
  2. +2
    -2
      src/JT809.Protocol.Test/JT809.Protocol.Test.csproj
  3. +45
    -0
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs
  4. +45
    -0
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs
  5. +49
    -0
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs
  6. +1
    -0
      src/JT809.Protocol/Enums/JT809ErrorCode.cs
  7. +2
    -2
      src/JT809.Protocol/JT809.Protocol.csproj
  8. +27
    -6
      src/JT809.Protocol/JT809.Protocol.xml
  9. +5
    -0
      src/JT809.Protocol/JT809SubBodies.cs
  10. +35
    -12
      src/JT809.Protocol/MessageBody/JT809_0x1200.cs
  11. +53
    -9
      src/JT809.Protocol/MessageBody/JT809_0x9200.cs
  12. +6
    -2
      src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs
  13. +14
    -7
      src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs
  14. +7
    -7
      src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs
  15. +9
    -0
      src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs

+ 1
- 1
.github/workflows/dotnetcore.yml Datei anzeigen

@@ -12,7 +12,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@master
with:
dotnet-version: 3.1.101
dotnet-version: 3.1.302
- name: dotnet info
run: dotnet --info
- name: dotnet restore


+ 2
- 2
src/JT809.Protocol.Test/JT809.Protocol.Test.csproj Datei anzeigen

@@ -12,10 +12,10 @@
<ItemGroup>
<PackageReference Include="JT808" Version="2.2.10" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.6" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>


+ 45
- 0
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs Datei anzeigen

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
using JT809.Protocol;
using JT809.Protocol.Extensions;
using JT809.Protocol.MessageBody;
using JT809.Protocol.Exceptions;
using JT809.Protocol.SubMessageBody;
using JT809.Protocol.Enums;
using JT809.Protocol.Internal;

namespace JT809.Protocol.Test.JT809SubMessageBody
{
public class JT809_0x1200_0x1205Test
{
private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 });

/// <summary>
/// 1078qq群808432702:大兄弟提供的
/// </summary>
[Fact]
public void Test1()
{
var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD43131313100000000000000000000000000041205040000000400000000001B735D".ToHexBytes();
JT809Package jT809Package = JT809_2019_Serializer.Deserialize(bytes);
var body = jT809Package.Bodies as JT809_0x1200;
var subBody = body.SubBodies as JT809_0x1200_0x1205;
Assert.NotNull(body);
Assert.NotNull(subBody);
Assert.Equal("测试1111", body.VehicleNo);
Assert.Equal(JT809VehicleColorType.白色, body.VehicleColor);
Assert.Equal(1024u, subBody.SourceDataType);
Assert.Equal(1024u, subBody.SourceMsgSN);
Assert.Equal(0u, subBody.DataLength);
}

[Fact]
public void Test2()
{
var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD43131313100000000000000000000000000041205040000000400000000001B735D".ToHexBytes();
string json = JT809_2019_Serializer.Analyze(bytes);
}
}
}

+ 45
- 0
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs Datei anzeigen

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
using JT809.Protocol;
using JT809.Protocol.Extensions;
using JT809.Protocol.MessageBody;
using JT809.Protocol.Exceptions;
using JT809.Protocol.SubMessageBody;
using JT809.Protocol.Enums;
using JT809.Protocol.Internal;

namespace JT809.Protocol.Test.JT809SubMessageBody
{
public class JT809_0x1200_0x1206Test
{
private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 });

/// <summary>
/// 1078qq群808432702:大兄弟提供的
/// </summary>
[Fact]
public void Test1()
{
var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD431313131000000000000000000000000000412060400000004000000000063895D".ToHexBytes();
JT809Package jT809Package = JT809_2019_Serializer.Deserialize(bytes);
var body = jT809Package.Bodies as JT809_0x1200;
var subBody = body.SubBodies as JT809_0x1200_0x1206;
Assert.NotNull(body);
Assert.NotNull(subBody);
Assert.Equal("测试1111", body.VehicleNo);
Assert.Equal(JT809VehicleColorType.白色, body.VehicleColor);
Assert.Equal(1024u, subBody.SourceDataType);
Assert.Equal(1024u, subBody.SourceMsgSN);
Assert.Equal(0u, subBody.DataLength);
}

[Fact]
public void Test2()
{
var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD431313131000000000000000000000000000412060400000004000000000063895D".ToHexBytes();
string json = JT809_2019_Serializer.Analyze(bytes);
}
}
}

+ 49
- 0
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs Datei anzeigen

@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
using JT809.Protocol;
using JT809.Protocol.Extensions;
using JT809.Protocol.MessageBody;
using JT809.Protocol.Exceptions;
using JT809.Protocol.SubMessageBody;
using JT809.Protocol.Enums;
using JT809.Protocol.Internal;

namespace JT809.Protocol.Test.JT809SubMessageBody
{
public class JT809_0x9200_0x9201Test
{
private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 });

/// <summary>
/// 1078qq群808432702:大兄弟提供的
/// 由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
/// </summary>
[Fact]
public void Test1()
{
var bytes = "5B0000002F000004579200000004570101010000000000000000004EBC924F9201000000070400000004000189DA5D".ToHexBytes();
JT809Package jT809_0X9200_0X9201 = JT809_2019_Serializer.Deserialize(bytes);
var body = jT809_0X9200_0X9201.Bodies as JT809_0x9200;
var subBody = body.SubBodies as JT809_0x9200_0x9201;
Assert.NotNull(body);
Assert.NotNull(subBody);
Assert.Equal(JT809VehicleColorType.其他, body.VehicleColor);
Assert.Equal(JT809_0x9201_Result.审核通过_完成注册, subBody.Result);
Assert.Equal(1024u, subBody.MsgSn);
Assert.Equal(1024u, subBody.DataType);
}

/// <summary>
/// 1078qq群808432702:大兄弟提供的
/// 由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
/// </summary>
[Fact]
public void Test2()
{
var bytes = "5B0000002F000004579200000004570101010000000000000000004EBC924F9201000000070400000004000189DA5D".ToHexBytes();
string json = JT809_2019_Serializer.Analyze(bytes);
}
}
}

+ 1
- 0
src/JT809.Protocol/Enums/JT809ErrorCode.cs Datei anzeigen

@@ -15,6 +15,7 @@ namespace JT809.Protocol.Enums
BodiesParseError=1007,
SubBodiesParseError = 1008,
GetAttributeError=1009,
ReaderRemainContentLengthError = 1010,
NotGlobalRegisterFormatterAssembly=1011,
}
}

+ 2
- 2
src/JT809.Protocol/JT809.Protocol.csproj Datei anzeigen

@@ -14,7 +14,7 @@
<PackageProjectUrl>https://github.com/SmallChi/JT809</PackageProjectUrl>
<license>https://github.com/SmallChi/JT809/blob/master/LICENSE</license>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Version>2.1.4-preview4</Version>
<Version>2.1.4-preview5</Version>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
@@ -112,7 +112,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.6" />
<PackageReference Include="System.Text.Json" Version="4.7.2" />
</ItemGroup>


+ 27
- 6
src/JT809.Protocol/JT809.Protocol.xml Datei anzeigen

@@ -1333,6 +1333,12 @@
当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
</summary>
</member>
<member name="P:JT809.Protocol.JT809SubBodies.SkipDataLength">
<summary>
2019文档导致需要兼容
是否跳过后续的长度
</summary>
</member>
<member name="P:JT809.Protocol.JT809SubBodies.ReplaceInternalSubMsgId">
<summary>
当外部注册的扩展809的消息Id跟国标的消息Id冲突时可以使用该字段替换国标的消息Id
@@ -1663,6 +1669,11 @@
</summary>
</member>
<member name="P:JT809.Protocol.MessageBody.JT809_0x9007.ErrorCode">
<summary>
错误代码 2019版本
</summary>
</member>
<member name="P:JT809.Protocol.MessageBody.JT809_0x9007.ReasonCode">
<summary>
错误代码
</summary>
@@ -1680,11 +1691,11 @@
</member>
<member name="T:JT809.Protocol.MessageBody.JT809_0x9101">
<summary>
接收车辆定位信息数量通知消
<para>链路类型:链路</para>
发送车辆定位信息数量通知信
<para>链路类型:链路</para>
<para>消息方向:上级平台往下级平台</para>
<para>业务类型标识: DOWN_TOTAL_RECV_BACK_MSG</para>
<para>描述:上级平台向下级平台定星通知已经收到下级平台上传的车辆定位信息数量(如:每收到10,000 条车辆定位信息通知一次)</para>
<para>业务类型标识: UP_MANAGE_TOTAL_RECV_BACK_MSG</para>
<para>描述:下级平台向上级平台定量通知已经上传的车辆定位信息数量(如:每收到10,000 条车辆定位信息通知一次)</para>
<para>本条消息不需下级平台应答。</para>
</summary>
</member>
@@ -2220,12 +2231,17 @@
<para>描述:本条消息是下级平台对上级平台下发的 DOWN_EXG_MSG_RETURN_STARTUP 消息的应答消息</para>
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205.DataType">
<summary>
子业务类型标识
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205.SourceDataType">
<summary>
对应启动车辆定位信息交换请求消息源子业务类型标识
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205.SourceMsgSn">
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205.SourceMsgSN">
<summary>
对应启动车辆定位信息交换请求消息源报文序列号
</summary>
@@ -2247,7 +2263,7 @@
对应结束车辆定位信息交换请求消息源子业务类型标识
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206.SourceMsgSn">
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206.SourceMsgSN">
<summary>
对应结束车辆定位信息交换请求消息源报文序列号
</summary>
@@ -2971,6 +2987,11 @@
<para>描述:上级平台在收到下级平台上报的车辆注册信息后,向下级平台发送车辆注册应答消息</para>
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x9200_0x9201.DataType">
<summary>
车辆注册醒醒消息源子业务类型标识
</summary>
</member>
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x9200_0x9201.MsgSn">
<summary>
车辆注册信息消息源报文序号


+ 5
- 0
src/JT809.Protocol/JT809SubBodies.cs Datei anzeigen

@@ -13,6 +13,11 @@ namespace JT809.Protocol
/// 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
/// </summary>
public virtual bool SkipSerialization { get; set; } = false;
/// <summary>
/// 2019文档导致需要兼容
/// 是否跳过后续的长度
/// </summary>
public virtual bool SkipDataLength { get; set; } = false;

public abstract ushort SubMsgId { get; }



+ 35
- 12
src/JT809.Protocol/MessageBody/JT809_0x1200.cs Datei anzeigen

@@ -5,6 +5,7 @@ using JT809.Protocol.Formatters;
using JT809.Protocol.Interfaces;
using JT809.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text.Json;

namespace JT809.Protocol.MessageBody
@@ -32,14 +33,17 @@ namespace JT809.Protocol.MessageBody
writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString());
value.SubBusinessType = reader.ReadUInt16();
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString());
value.DataLength = reader.ReadUInt32();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength);
try
{
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance))
{
if (instance is JT809SubBodies subBodies)
{
if (!subBodies.SkipDataLength)
{
value.DataLength = reader.ReadUInt32();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength);
}
if (!subBodies.SkipSerialization)
{
writer.WriteStartObject("子业务类型");
@@ -61,13 +65,16 @@ namespace JT809.Protocol.MessageBody
value.VehicleNo = reader.ReadString(21);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
value.SubBusinessType = reader.ReadUInt16();
value.DataLength = reader.ReadUInt32();
try
{
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance))
{
if (instance is JT809SubBodies subBodies)
{
if (!subBodies.SkipDataLength)
{
value.DataLength = reader.ReadUInt32();
}
if (!subBodies.SkipSerialization)
{
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize(
@@ -91,19 +98,35 @@ namespace JT809.Protocol.MessageBody
writer.WriteUInt16(value.SubBusinessType);
try
{
// 先写入内容,然后在根据内容反写内容长度
writer.Skip(4, out int subContentLengthPosition);
if (value.SubBodies != null)
if (value.SubBodies.SkipDataLength)
{
if (value.SubBodies != null)
{
if (!value.SubBodies.SkipSerialization)
{
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize(
value.SubBodies,
ref writer, value.SubBodies,
config);
}
}
}
else
{
if (!value.SubBodies.SkipSerialization)
// 先写入内容,然后在根据内容反写内容长度
writer.Skip(4, out int subContentLengthPosition);
if (value.SubBodies != null)
{
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize(
value.SubBodies,
ref writer, value.SubBodies,
config);
if (!value.SubBodies.SkipSerialization)
{
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize(
value.SubBodies,
ref writer, value.SubBodies,
config);
}
}
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition);
}
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition);
}
catch(Exception ex)
{


+ 53
- 9
src/JT809.Protocol/MessageBody/JT809_0x9200.cs Datei anzeigen

@@ -24,11 +24,28 @@ namespace JT809.Protocol.MessageBody
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{
JT809_0x9200 value = new JT809_0x9200();
var virtualHex = reader.ReadVirtualArray(21);
value.VehicleNo = reader.ReadString(21);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString());
//1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
if (config.Version == JT809Version.JTT2019)
{
var subBusinessType = reader.ReadVirtualUInt16();
if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
{
var virtualHex = reader.ReadVirtualArray(21);
value.VehicleNo = reader.ReadString(21);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString());
}
}
else
{
var virtualHex = reader.ReadVirtualArray(21);
value.VehicleNo = reader.ReadString(21);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString());
}
value.SubBusinessType = reader.ReadUInt16();
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString());
value.DataLength = reader.ReadUInt32();
@@ -57,8 +74,22 @@ namespace JT809.Protocol.MessageBody
public JT809_0x9200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
JT809_0x9200 value = new JT809_0x9200();
value.VehicleNo = reader.ReadString(21);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
//1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
if(config.Version== JT809Version.JTT2019)
{
var subBusinessType = reader.ReadVirtualUInt16();
if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
{
value.VehicleNo = reader.ReadString(21);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
}
}
else
{
value.VehicleNo = reader.ReadString(21);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
}
value.SubBusinessType = reader.ReadUInt16();
value.DataLength = reader.ReadUInt32();
try
@@ -85,8 +116,21 @@ namespace JT809.Protocol.MessageBody

public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9200 value, IJT809Config config)
{
writer.WriteStringPadRight(value.VehicleNo, 21);
writer.WriteByte((byte)value.VehicleColor);
//1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
if (config.Version == JT809Version.JTT2019)
{
if (value.SubBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
{
writer.WriteStringPadRight(value.VehicleNo, 21);
writer.WriteByte((byte)value.VehicleColor);
}
}
else
{
writer.WriteStringPadRight(value.VehicleNo, 21);
writer.WriteByte((byte)value.VehicleColor);
}
writer.WriteUInt16(value.SubBusinessType);
try
{


+ 6
- 2
src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs Datei anzeigen

@@ -1,4 +1,5 @@
using JT809.Protocol.Buffers;
using JT809.Protocol.Exceptions;
using JT809.Protocol.Extensions;
using System;
using System.Buffers;
@@ -445,15 +446,18 @@ namespace JT809.Protocol.MessagePack
}
public int ReadCurrentRemainContentLength()
{
int len = 0;
if (_decoded)
{
len = Reader.Length - ReaderCount - 3;
//内容长度=总长度-读取的长度-3(校验码2位+终止符1位)
return Reader.Length - ReaderCount - 3;
}
else
{
return Reader.Length - ReaderCount;
len= Reader.Length - ReaderCount;
}
if (len < 0) throw new JT809Exception(Enums.JT809ErrorCode.ReaderRemainContentLengthError);
return len;
}
public void Skip(int count=1)
{


+ 14
- 7
src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs Datei anzeigen

@@ -22,6 +22,11 @@ namespace JT809.Protocol.SubMessageBody
public override string Description => "启动车辆定位信息交换应答消息";

public override bool SkipSerialization => false;
public override bool SkipDataLength => true;
/// <summary>
/// 子业务类型标识
/// </summary>
public ushort DataType { get; set; }
/// <summary>
/// 对应启动车辆定位信息交换请求消息源子业务类型标识
/// </summary>
@@ -29,7 +34,7 @@ namespace JT809.Protocol.SubMessageBody
/// <summary>
/// 对应启动车辆定位信息交换请求消息源报文序列号
/// </summary>
public uint SourceMsgSn { get; set; }
public uint SourceMsgSN { get; set; }
/// <summary>
/// 后续数据长度 值为0x00
/// </summary>
@@ -42,8 +47,8 @@ namespace JT809.Protocol.SubMessageBody
{
value.SourceDataType = reader.ReadUInt16();
writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString());
value.SourceMsgSn = reader.ReadUInt32();
writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn);
value.SourceMsgSN = reader.ReadUInt32();
writer.WriteNumber($"[{value.SourceMsgSN.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSN);
value.DataLength = reader.ReadUInt32();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}后续数据长度]", value.DataLength);
}
@@ -52,9 +57,10 @@ namespace JT809.Protocol.SubMessageBody
public JT809_0x1200_0x1205 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
var value = new JT809_0x1200_0x1205();
if (config.Version == JT809Version.JTT2019) {
if (config.Version == JT809Version.JTT2019)
{
value.SourceDataType = reader.ReadUInt16();
value.SourceMsgSn = reader.ReadUInt32();
value.SourceMsgSN = reader.ReadUInt32();
value.DataLength = reader.ReadUInt32();
}
return value;
@@ -62,9 +68,10 @@ namespace JT809.Protocol.SubMessageBody

public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1200_0x1205 value, IJT809Config config)
{
if (config.Version == JT809Version.JTT2019) {
if (config.Version == JT809Version.JTT2019)
{
writer.WriteUInt16(value.SourceDataType);
writer.WriteUInt32(value.SourceMsgSn);
writer.WriteUInt32(value.SourceMsgSN);
writer.WriteUInt32(value.DataLength);
}
}


+ 7
- 7
src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs Datei anzeigen

@@ -20,7 +20,7 @@ namespace JT809.Protocol.SubMessageBody
public override ushort SubMsgId => JT809SubBusinessType.结束车辆定位信息交换应答消息.ToUInt16Value();

public override string Description => "结束车辆定位信息交换应答消息";
public override bool SkipDataLength => true;
public override bool SkipSerialization => false;
/// <summary>
/// 对应结束车辆定位信息交换请求消息源子业务类型标识
@@ -29,7 +29,7 @@ namespace JT809.Protocol.SubMessageBody
/// <summary>
/// 对应结束车辆定位信息交换请求消息源报文序列号
/// </summary>
public uint SourceMsgSn { get; set; }
public uint SourceMsgSN { get; set; }
/// <summary>
/// 后续数据长度 值为0x00
/// </summary>
@@ -41,9 +41,9 @@ namespace JT809.Protocol.SubMessageBody
if (config.Version == JT809Version.JTT2019)
{
value.SourceDataType = reader.ReadUInt16();
writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString());
value.SourceMsgSn = reader.ReadUInt32();
writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn);
writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应结束车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString());
value.SourceMsgSN = reader.ReadUInt32();
writer.WriteNumber($"[{value.SourceMsgSN.ReadNumber()}对应结束车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSN);
value.DataLength = reader.ReadUInt32();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}后续数据长度]", value.DataLength);
}
@@ -55,7 +55,7 @@ namespace JT809.Protocol.SubMessageBody
if (config.Version == JT809Version.JTT2019)
{
value.SourceDataType = reader.ReadUInt16();
value.SourceMsgSn = reader.ReadUInt32();
value.SourceMsgSN = reader.ReadUInt32();
value.DataLength = reader.ReadUInt32();
}
return value;
@@ -66,7 +66,7 @@ namespace JT809.Protocol.SubMessageBody
if (config.Version == JT809Version.JTT2019)
{
writer.WriteUInt16(value.SourceDataType);
writer.WriteUInt32(value.SourceMsgSn);
writer.WriteUInt32(value.SourceMsgSN);
writer.WriteUInt32(value.DataLength);
}
}


+ 9
- 0
src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs Datei anzeigen

@@ -18,6 +18,10 @@ namespace JT809.Protocol.SubMessageBody

public override string Description => "车辆注册信息应答消息";
/// <summary>
/// 车辆注册醒醒消息源子业务类型标识
/// </summary>
public ushort DataType { get; set; }
/// <summary>
/// 车辆注册信息消息源报文序号
/// </summary>
public uint MsgSn { get; set; }
@@ -26,9 +30,12 @@ namespace JT809.Protocol.SubMessageBody
/// </summary>
public JT809_0x9201_Result Result { get; set; }


public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{
var value = new JT809_0x9200_0x9201();
value.DataType = reader.ReadUInt16();
writer.WriteNumber($"[{value.DataType.ReadNumber()}]车辆注册醒醒消息源子业务类型标识", value.DataType);
value.MsgSn = reader.ReadUInt32();
writer.WriteNumber($"[{value.MsgSn.ReadNumber()}]车辆注册信息消息源报文序号", value.MsgSn);
value.Result = (JT809_0x9201_Result)reader.ReadByte();
@@ -38,6 +45,7 @@ namespace JT809.Protocol.SubMessageBody
public JT809_0x9200_0x9201 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
var value = new JT809_0x9200_0x9201();
value.DataType = reader.ReadUInt16();
value.MsgSn = reader.ReadUInt32();
value.Result = (JT809_0x9201_Result)reader.ReadByte();
return value;
@@ -45,6 +53,7 @@ namespace JT809.Protocol.SubMessageBody

public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9200_0x9201 value, IJT809Config config)
{
writer.WriteUInt16(value.DataType);
writer.WriteUInt32(value.MsgSn);
writer.WriteByte((byte)value.Result);
}


Laden…
Abbrechen
Speichern