@@ -12,7 +12,7 @@ using JT809.Protocol.Internal; | |||||
namespace JT809.Protocol.Test.JT809SubMessageBody | namespace JT809.Protocol.Test.JT809SubMessageBody | ||||
{ | { | ||||
public class JT809_0x1500_0x1504Test | |||||
public class JT809_0x1500_0x1504Test | |||||
{ | { | ||||
private JT809Serializer JT809Serializer = new JT809Serializer(); | private JT809Serializer JT809Serializer = new JT809Serializer(); | ||||
private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 }); | private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 }); | ||||
@@ -21,21 +21,19 @@ namespace JT809.Protocol.Test.JT809SubMessageBody | |||||
{ | { | ||||
JT809_0x1500_0x1504 jT809_0x1500_0x1504 = new JT809_0x1500_0x1504 | JT809_0x1500_0x1504 jT809_0x1500_0x1504 = new JT809_0x1500_0x1504 | ||||
{ | { | ||||
CommandType= JT809CommandType.记录仪唯一性编号, | |||||
TraveldataInfo="123456", | |||||
TraveldataInfo = "557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), | |||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_0x1500_0x1504).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_0x1500_0x1504).ToHexString(); | ||||
Assert.Equal("0700000006313233343536", hex); | |||||
Assert.Equal("0000001B557AC40014002003251026012003251026010000123400123456A9", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var bytes = "0700000006313233343536".ToHexBytes(); | |||||
var bytes = "0000001B557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(); | |||||
JT809_0x1500_0x1504 jT809_0x1500_0x1504 = JT809Serializer.Deserialize<JT809_0x1500_0x1504>(bytes); | JT809_0x1500_0x1504 jT809_0x1500_0x1504 = JT809Serializer.Deserialize<JT809_0x1500_0x1504>(bytes); | ||||
Assert.Equal(JT809CommandType.记录仪唯一性编号, jT809_0x1500_0x1504.CommandType); | |||||
Assert.Equal("123456", jT809_0x1500_0x1504.TraveldataInfo); | |||||
Assert.Equal(6u, jT809_0x1500_0x1504.TraveldataLength); | |||||
Assert.Equal("557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), jT809_0x1500_0x1504.TraveldataInfo); | |||||
Assert.Equal(0x1bu, jT809_0x1500_0x1504.TraveldataLength); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -44,22 +42,22 @@ namespace JT809.Protocol.Test.JT809SubMessageBody | |||||
JT809_0x1500_0x1504 jT809_0x1500_0x1504 = new JT809_0x1500_0x1504 | JT809_0x1500_0x1504 jT809_0x1500_0x1504 = new JT809_0x1500_0x1504 | ||||
{ | { | ||||
CommandType = JT809CommandType.记录仪唯一性编号, | CommandType = JT809CommandType.记录仪唯一性编号, | ||||
TraveldataInfo = "123456", | |||||
TraveldataInfo = "557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), | |||||
SourceMsgSn = 1, | SourceMsgSn = 1, | ||||
SourceDataType = 12, | SourceDataType = 12, | ||||
}; | }; | ||||
var hex = JT809_2019_Serializer.Serialize(jT809_0x1500_0x1504).ToHexString(); | var hex = JT809_2019_Serializer.Serialize(jT809_0x1500_0x1504).ToHexString(); | ||||
Assert.Equal("000C000000010700000006313233343536", hex); | |||||
Assert.Equal("000C00000001070000001B557AC40014002003251026012003251026010000123400123456A9", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test_2019_2() | public void Test_2019_2() | ||||
{ | { | ||||
var bytes = "000C000000010700000006313233343536".ToHexBytes(); | |||||
var bytes = "000C00000001070000001B557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(); | |||||
JT809_0x1500_0x1504 jT809_0x1500_0x1504 = JT809_2019_Serializer.Deserialize<JT809_0x1500_0x1504>(bytes); | JT809_0x1500_0x1504 jT809_0x1500_0x1504 = JT809_2019_Serializer.Deserialize<JT809_0x1500_0x1504>(bytes); | ||||
Assert.Equal(JT809CommandType.记录仪唯一性编号, jT809_0x1500_0x1504.CommandType); | Assert.Equal(JT809CommandType.记录仪唯一性编号, jT809_0x1500_0x1504.CommandType); | ||||
Assert.Equal("123456", jT809_0x1500_0x1504.TraveldataInfo); | |||||
Assert.Equal(6u, jT809_0x1500_0x1504.TraveldataLength); | |||||
Assert.Equal("557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), jT809_0x1500_0x1504.TraveldataInfo); | |||||
Assert.Equal(0x1bu, jT809_0x1500_0x1504.TraveldataLength); | |||||
Assert.Equal(1u, jT809_0x1500_0x1504.SourceMsgSn); | Assert.Equal(1u, jT809_0x1500_0x1504.SourceMsgSn); | ||||
Assert.Equal(12, jT809_0x1500_0x1504.SourceDataType); | Assert.Equal(12, jT809_0x1500_0x1504.SourceDataType); | ||||
} | } | ||||
@@ -2912,6 +2912,7 @@ | |||||
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504.TraveldataInfo"> | <member name="P:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504.TraveldataInfo"> | ||||
<summary> | <summary> | ||||
车辆行驶记录信息 | 车辆行驶记录信息 | ||||
<para>19056应答帧元数据</para> | |||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="T:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505"> | <member name="T:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505"> | ||||
@@ -12,7 +12,7 @@ namespace JT809.Protocol.SubMessageBody | |||||
/// <para>子业务类型标识:UP_CTRL_MSG_TAKE_TRAVEL_ACK</para> | /// <para>子业务类型标识:UP_CTRL_MSG_TAKE_TRAVEL_ACK</para> | ||||
/// <para>描述:下级平台应答上级平台下发的"上报车辆行驶记录请求"消息,将车辆行驶记录数据上传至上级平台</para> | /// <para>描述:下级平台应答上级平台下发的"上报车辆行驶记录请求"消息,将车辆行驶记录数据上传至上级平台</para> | ||||
/// </summary> | /// </summary> | ||||
public class JT809_0x1500_0x1504:JT809SubBodies, IJT809MessagePackFormatter<JT809_0x1500_0x1504>, IJT809Analyze, IJT809_2019_Version | |||||
public class JT809_0x1500_0x1504 : JT809SubBodies, IJT809MessagePackFormatter<JT809_0x1500_0x1504>, IJT809Analyze, IJT809_2019_Version | |||||
{ | { | ||||
public override ushort SubMsgId => JT809SubBusinessType.上报车辆行驶记录应答消息.ToUInt16Value(); | public override ushort SubMsgId => JT809SubBusinessType.上报车辆行驶记录应答消息.ToUInt16Value(); | ||||
@@ -35,8 +35,9 @@ namespace JT809.Protocol.SubMessageBody | |||||
public uint TraveldataLength { get; set; } | public uint TraveldataLength { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 车辆行驶记录信息 | /// 车辆行驶记录信息 | ||||
/// <para>19056应答帧元数据</para> | |||||
/// </summary> | /// </summary> | ||||
public string TraveldataInfo { get; set; } | |||||
public byte[] TraveldataInfo { get; set; } | |||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | ||||
{ | { | ||||
@@ -47,14 +48,14 @@ namespace JT809.Protocol.SubMessageBody | |||||
writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString()); | writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString()); | ||||
value.SourceMsgSn = reader.ReadUInt32(); | value.SourceMsgSn = reader.ReadUInt32(); | ||||
writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn); | writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn); | ||||
value.CommandType = (JT809CommandType)reader.ReadByte(); | |||||
writer.WriteString($"[{value.CommandType.ToByteValue()}]命令字", value.CommandType.ToString()); | |||||
} | } | ||||
value.CommandType = (JT809CommandType)reader.ReadByte(); | |||||
writer.WriteString($"[{value.CommandType.ToByteValue()}]命令字", value.CommandType.ToString()) ; | |||||
value.TraveldataLength = reader.ReadUInt32(); | value.TraveldataLength = reader.ReadUInt32(); | ||||
writer.WriteNumber($"[{value.TraveldataLength.ReadNumber()}]车辆行驶记录数据体长度", value.TraveldataLength); | writer.WriteNumber($"[{value.TraveldataLength.ReadNumber()}]车辆行驶记录数据体长度", value.TraveldataLength); | ||||
var virtualHex = reader.ReadVirtualArray((int)value.TraveldataLength); | var virtualHex = reader.ReadVirtualArray((int)value.TraveldataLength); | ||||
value.TraveldataInfo = reader.ReadString((int)value.TraveldataLength); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆行驶记录信息", value.TraveldataInfo); | |||||
value.TraveldataInfo = reader.ReadArray((int)value.TraveldataLength).ToArray(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆行驶记录信息", value.TraveldataInfo.ToHexString()); | |||||
} | } | ||||
public JT809_0x1500_0x1504 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_0x1500_0x1504 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
@@ -64,10 +65,10 @@ namespace JT809.Protocol.SubMessageBody | |||||
{ | { | ||||
value.SourceDataType = reader.ReadUInt16(); | value.SourceDataType = reader.ReadUInt16(); | ||||
value.SourceMsgSn = reader.ReadUInt32(); | value.SourceMsgSn = reader.ReadUInt32(); | ||||
value.CommandType = (JT809CommandType)reader.ReadByte(); | |||||
} | } | ||||
value.CommandType = (JT809CommandType)reader.ReadByte(); | |||||
value.TraveldataLength = reader.ReadUInt32(); | value.TraveldataLength = reader.ReadUInt32(); | ||||
value.TraveldataInfo = reader.ReadString((int)value.TraveldataLength); | |||||
value.TraveldataInfo = reader.ReadArray((int)value.TraveldataLength).ToArray(); | |||||
return value; | return value; | ||||
} | } | ||||
@@ -77,11 +78,11 @@ namespace JT809.Protocol.SubMessageBody | |||||
{ | { | ||||
writer.WriteUInt16(value.SourceDataType); | writer.WriteUInt16(value.SourceDataType); | ||||
writer.WriteUInt32(value.SourceMsgSn); | writer.WriteUInt32(value.SourceMsgSn); | ||||
writer.WriteByte((byte)value.CommandType); | |||||
} | } | ||||
writer.WriteByte((byte)value.CommandType); | |||||
// 先计算内容长度(汉字为两个字节) | // 先计算内容长度(汉字为两个字节) | ||||
writer.Skip(4, out int lengthPosition); | writer.Skip(4, out int lengthPosition); | ||||
writer.WriteString(value.TraveldataInfo); | |||||
writer.WriteArray(value.TraveldataInfo); | |||||
writer.WriteInt32Return(writer.GetCurrentPosition() - lengthPosition - 4, lengthPosition); | writer.WriteInt32Return(writer.GetCurrentPosition() - lengthPosition - 4, lengthPosition); | ||||
} | } | ||||
} | } | ||||