2.完善一下9200_9201的协议 3.增加对应协议的测试tags/v2.2.0
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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> | ||||
@@ -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, | ||||
} | } | ||||
} | } |
@@ -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; } | ||||
@@ -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) | ||||
{ | { | ||||
@@ -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); | ||||
@@ -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) | ||||
{ | { | ||||
@@ -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); | ||||
} | } | ||||
} | } | ||||
@@ -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); | ||||
} | } | ||||
} | } | ||||
@@ -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); | ||||
} | } | ||||