Bläddra i källkod

1.通过大兄弟提供的809的2019版本的1200下的1205和1206测试数据进行协议修复

2.完善一下9200_9201的协议
3.增加对应协议的测试
tags/v2.2.0
SmallChi(Koike) 4 år sedan
förälder
incheckning
0cf2dcf20a
11 ändrade filer med 207 tillägg och 33 borttagningar
  1. +45
    -0
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs
  2. +45
    -0
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs
  3. +8
    -0
      src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs
  4. +1
    -0
      src/JT809.Protocol/Enums/JT809ErrorCode.cs
  5. +5
    -0
      src/JT809.Protocol/JT809SubBodies.cs
  6. +35
    -12
      src/JT809.Protocol/MessageBody/JT809_0x1200.cs
  7. +32
    -5
      src/JT809.Protocol/MessageBody/JT809_0x9200.cs
  8. +6
    -2
      src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs
  9. +14
    -7
      src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs
  10. +7
    -7
      src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs
  11. +9
    -0
      src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs

+ 45
- 0
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs Visa fil

@@ -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 Visa fil

@@ -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);
}
}
}

+ 8
- 0
src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs Visa fil

@@ -25,6 +25,14 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
{ {
var bytes = "5B0000002F000004579200000004570101010000000000000000004EBC924F9201000000070400000004000189DA5D".ToHexBytes(); var bytes = "5B0000002F000004579200000004570101010000000000000000004EBC924F9201000000070400000004000189DA5D".ToHexBytes();
JT809Package jT809_0X9200_0X9201 = JT809_2019_Serializer.Deserialize(bytes); 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> /// <summary>


+ 1
- 0
src/JT809.Protocol/Enums/JT809ErrorCode.cs Visa fil

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

+ 5
- 0
src/JT809.Protocol/JT809SubBodies.cs Visa fil

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


public abstract ushort SubMsgId { get; } public abstract ushort SubMsgId { get; }




+ 35
- 12
src/JT809.Protocol/MessageBody/JT809_0x1200.cs Visa fil

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


namespace JT809.Protocol.MessageBody namespace JT809.Protocol.MessageBody
@@ -32,14 +33,17 @@ namespace JT809.Protocol.MessageBody
writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString()); writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString());
value.SubBusinessType = reader.ReadUInt16(); value.SubBusinessType = reader.ReadUInt16();
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString());
value.DataLength = reader.ReadUInt32();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength);
try try
{ {
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance))
{ {
if (instance is JT809SubBodies subBodies) if (instance is JT809SubBodies subBodies)
{ {
if (!subBodies.SkipDataLength)
{
value.DataLength = reader.ReadUInt32();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength);
}
if (!subBodies.SkipSerialization) if (!subBodies.SkipSerialization)
{ {
writer.WriteStartObject("子业务类型"); writer.WriteStartObject("子业务类型");
@@ -61,13 +65,16 @@ namespace JT809.Protocol.MessageBody
value.VehicleNo = reader.ReadString(21); value.VehicleNo = reader.ReadString(21);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
value.SubBusinessType = reader.ReadUInt16(); value.SubBusinessType = reader.ReadUInt16();
value.DataLength = reader.ReadUInt32();
try try
{ {
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance))
{ {
if (instance is JT809SubBodies subBodies) if (instance is JT809SubBodies subBodies)
{ {
if (!subBodies.SkipDataLength)
{
value.DataLength = reader.ReadUInt32();
}
if (!subBodies.SkipSerialization) if (!subBodies.SkipSerialization)
{ {
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize(
@@ -91,19 +98,35 @@ namespace JT809.Protocol.MessageBody
writer.WriteUInt16(value.SubBusinessType); writer.WriteUInt16(value.SubBusinessType);
try 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) catch(Exception ex)
{ {


+ 32
- 5
src/JT809.Protocol/MessageBody/JT809_0x9200.cs Visa fil

@@ -26,8 +26,19 @@ namespace JT809.Protocol.MessageBody
JT809_0x9200 value = new JT809_0x9200(); JT809_0x9200 value = new JT809_0x9200();
//1078qq群808432702:大兄弟提供的 //1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过 //由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
var subBusinessType = reader.ReadVirtualUInt16();
if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
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); var virtualHex = reader.ReadVirtualArray(21);
value.VehicleNo = reader.ReadString(21); value.VehicleNo = reader.ReadString(21);
@@ -63,10 +74,18 @@ namespace JT809.Protocol.MessageBody
public JT809_0x9200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) public JT809_0x9200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{ {
JT809_0x9200 value = new JT809_0x9200(); JT809_0x9200 value = new JT809_0x9200();
var subBusinessType = reader.ReadVirtualUInt16();
//1078qq群808432702:大兄弟提供的 //1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过 //由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
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.VehicleNo = reader.ReadString(21);
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
@@ -99,7 +118,15 @@ namespace JT809.Protocol.MessageBody
{ {
//1078qq群808432702:大兄弟提供的 //1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过 //由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
if (value.SubBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
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.WriteStringPadRight(value.VehicleNo, 21);
writer.WriteByte((byte)value.VehicleColor); writer.WriteByte((byte)value.VehicleColor);


+ 6
- 2
src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs Visa fil

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


+ 14
- 7
src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs Visa fil

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


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


public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1200_0x1205 value, IJT809Config config) 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.WriteUInt16(value.SourceDataType);
writer.WriteUInt32(value.SourceMsgSn);
writer.WriteUInt32(value.SourceMsgSN);
writer.WriteUInt32(value.DataLength); writer.WriteUInt32(value.DataLength);
} }
} }


+ 7
- 7
src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs Visa fil

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


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


+ 9
- 0
src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs Visa fil

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


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



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


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


Laddar…
Avbryt
Spara