@@ -12,7 +12,7 @@ using JT809.Protocol.Internal; | |||
namespace JT809.Protocol.Test.JT809SubMessageBody | |||
{ | |||
public class JT809_0x1500_0x1504Test | |||
public class JT809_0x1500_0x1504Test | |||
{ | |||
private JT809Serializer JT809Serializer = new JT809Serializer(); | |||
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 | |||
{ | |||
CommandType= JT809CommandType.记录仪唯一性编号, | |||
TraveldataInfo="123456", | |||
TraveldataInfo = "557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), | |||
}; | |||
var hex = JT809Serializer.Serialize(jT809_0x1500_0x1504).ToHexString(); | |||
Assert.Equal("0700000006313233343536", hex); | |||
Assert.Equal("0000001B557AC40014002003251026012003251026010000123400123456A9", hex); | |||
} | |||
[Fact] | |||
public void Test2() | |||
{ | |||
var bytes = "0700000006313233343536".ToHexBytes(); | |||
var bytes = "0000001B557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(); | |||
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] | |||
@@ -44,22 +42,22 @@ namespace JT809.Protocol.Test.JT809SubMessageBody | |||
JT809_0x1500_0x1504 jT809_0x1500_0x1504 = new JT809_0x1500_0x1504 | |||
{ | |||
CommandType = JT809CommandType.记录仪唯一性编号, | |||
TraveldataInfo = "123456", | |||
TraveldataInfo = "557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(), | |||
SourceMsgSn = 1, | |||
SourceDataType = 12, | |||
}; | |||
var hex = JT809_2019_Serializer.Serialize(jT809_0x1500_0x1504).ToHexString(); | |||
Assert.Equal("000C000000010700000006313233343536", hex); | |||
Assert.Equal("000C00000001070000001B557AC40014002003251026012003251026010000123400123456A9", hex); | |||
} | |||
[Fact] | |||
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); | |||
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(12, jT809_0x1500_0x1504.SourceDataType); | |||
} | |||
@@ -2912,6 +2912,7 @@ | |||
<member name="P:JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504.TraveldataInfo"> | |||
<summary> | |||
车辆行驶记录信息 | |||
<para>19056应答帧元数据</para> | |||
</summary> | |||
</member> | |||
<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>描述:下级平台应答上级平台下发的"上报车辆行驶记录请求"消息,将车辆行驶记录数据上传至上级平台</para> | |||
/// </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(); | |||
@@ -35,8 +35,9 @@ namespace JT809.Protocol.SubMessageBody | |||
public uint TraveldataLength { get; set; } | |||
/// <summary> | |||
/// 车辆行驶记录信息 | |||
/// <para>19056应答帧元数据</para> | |||
/// </summary> | |||
public string TraveldataInfo { get; set; } | |||
public byte[] TraveldataInfo { get; set; } | |||
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()); | |||
value.SourceMsgSn = reader.ReadUInt32(); | |||
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(); | |||
writer.WriteNumber($"[{value.TraveldataLength.ReadNumber()}]车辆行驶记录数据体长度", 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) | |||
@@ -64,10 +65,10 @@ namespace JT809.Protocol.SubMessageBody | |||
{ | |||
value.SourceDataType = reader.ReadUInt16(); | |||
value.SourceMsgSn = reader.ReadUInt32(); | |||
value.CommandType = (JT809CommandType)reader.ReadByte(); | |||
} | |||
value.CommandType = (JT809CommandType)reader.ReadByte(); | |||
value.TraveldataLength = reader.ReadUInt32(); | |||
value.TraveldataInfo = reader.ReadString((int)value.TraveldataLength); | |||
value.TraveldataInfo = reader.ReadArray((int)value.TraveldataLength).ToArray(); | |||
return value; | |||
} | |||
@@ -77,11 +78,11 @@ namespace JT809.Protocol.SubMessageBody | |||
{ | |||
writer.WriteUInt16(value.SourceDataType); | |||
writer.WriteUInt32(value.SourceMsgSn); | |||
writer.WriteByte((byte)value.CommandType); | |||
} | |||
writer.WriteByte((byte)value.CommandType); | |||
// 先计算内容长度(汉字为两个字节) | |||
writer.Skip(4, out int lengthPosition); | |||
writer.WriteString(value.TraveldataInfo); | |||
writer.WriteArray(value.TraveldataInfo); | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - lengthPosition - 4, lengthPosition); | |||
} | |||
} | |||