Browse Source

优化0107bug

tags/v2.7.1
waterliu99 5 months ago
parent
commit
0da7ef17e7
2 changed files with 31 additions and 11 deletions
  1. +7
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs
  2. +24
    -11
      src/JT808.Protocol/MessageBody/JT808_0x0107.cs

+ 7
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs View File

@@ -65,5 +65,12 @@ namespace JT808.Protocol.Test.MessageBody
byte[] bytes = "7E0107004111223344556622B8000531303630313130343535353435393535313033303030303030346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".ToHexBytes();
string json = JT808Serializer.Analyze(bytes);
}
[Fact]
public void Test4()
{
//2019版本JT808_0x0107解析制造商有误 #43
byte[] bytes = "7E010740660100000000010941000493000700FF3838383838434B31303043000000000000000000000000000000000000000000000000313030303439330000000000000000000000000000000000000000000000898603249475600329000748572D56322E350E434B313030432D4A542D5630323402209B7E".ToHexBytes();
string json = JT808Serializer.Analyze(bytes);
}
}
}

+ 24
- 11
src/JT808.Protocol/MessageBody/JT808_0x0107.cs View File

@@ -107,8 +107,16 @@ namespace JT808.Protocol.MessageBody
JT808_0x0107 jT808_0X0107 = new JT808_0x0107();
jT808_0X0107.TerminalType = reader.ReadUInt16();
jT808_0X0107.MakerId = reader.ReadString(5);
jT808_0X0107.TerminalModel = reader.ReadString(20);
jT808_0X0107.TerminalId = reader.ReadString(7);
if (reader.Version == JT808Version.JTT2019)
{
jT808_0X0107.TerminalModel = reader.ReadString(30);
jT808_0X0107.TerminalId = reader.ReadString(30);
}
else
{
jT808_0X0107.TerminalModel = reader.ReadString(20);
jT808_0X0107.TerminalId = reader.ReadString(7);
}
jT808_0X0107.Terminal_SIM_ICCID = reader.ReadBCD(20, config.Trim);
jT808_0X0107.Terminal_Hardware_Version_Length = reader.ReadByte();
jT808_0X0107.Terminal_Hardware_Version_Num = reader.ReadString(jT808_0X0107.Terminal_Hardware_Version_Length);
@@ -128,8 +136,16 @@ namespace JT808.Protocol.MessageBody
{
writer.WriteUInt16(value.TerminalType);
writer.WriteString(value.MakerId.PadRight(5, '\0').ValiString(nameof(value.MakerId), 5));
writer.WriteString(value.TerminalModel.PadRight(20, '\0').ValiString(nameof(value.TerminalModel), 20));
writer.WriteString(value.TerminalId.PadRight(7, '\0').ValiString(nameof(value.TerminalId), 7));
if (writer.Version == JT808Version.JTT2019)
{
writer.WriteString(value.TerminalModel.PadRight(30, '\0').ValiString(nameof(value.TerminalModel), 30));
writer.WriteString(value.TerminalId.PadRight(30, '\0').ValiString(nameof(value.TerminalId), 30));
}
else
{
writer.WriteString(value.TerminalModel.PadRight(20, '\0').ValiString(nameof(value.TerminalModel), 20));
writer.WriteString(value.TerminalId.PadRight(7, '\0').ValiString(nameof(value.TerminalId), 7));
}
writer.WriteBCD(value.Terminal_SIM_ICCID.ValiString(nameof(value.Terminal_SIM_ICCID), 20), 20);
writer.WriteByte((byte)value.Terminal_Hardware_Version_Num.Length);
writer.WriteString(value.Terminal_Hardware_Version_Num);
@@ -162,11 +178,11 @@ namespace JT808.Protocol.MessageBody
writer.WriteString("bit8", terminalTypeBits[8] == '0' ? "不适用挂车" : "适用挂车");
}
writer.WriteEndObject();
ReadOnlySpan<byte> makerIdSpan = reader.ReadVirtualArray(5);
jT808_0X0107.MakerId = reader.ReadString(5);
writer.WriteString($"[{makerIdSpan.ToArray().ToHexString()}]制造商ID", jT808_0X0107.MakerId);
if (reader.Version == JT808Version.JTT2019)
{
ReadOnlySpan<byte> makerIdSpan = reader.ReadVirtualArray(11);
jT808_0X0107.MakerId = reader.ReadString(11);
writer.WriteString($"[{makerIdSpan.ToArray().ToHexString()}]制造商ID", jT808_0X0107.MakerId);
ReadOnlySpan<byte> terminalModelSpan = reader.ReadVirtualArray(30);
jT808_0X0107.TerminalModel = reader.ReadString(30);
writer.WriteString($"[{terminalModelSpan.ToArray().ToHexString()}]终端型号", jT808_0X0107.TerminalModel);
@@ -175,10 +191,7 @@ namespace JT808.Protocol.MessageBody
writer.WriteString($"[{terminalIdSpan.ToArray().ToHexString()}]终端ID", jT808_0X0107.TerminalId);
}
else
{
ReadOnlySpan<byte> makerIdSpan = reader.ReadVirtualArray(5);
jT808_0X0107.MakerId = reader.ReadString(5);
writer.WriteString($"[{makerIdSpan.ToArray().ToHexString()}]制造商ID", jT808_0X0107.MakerId);
{
ReadOnlySpan<byte> terminalModelSpan = reader.ReadVirtualArray(20);
jT808_0X0107.TerminalModel = reader.ReadString(20);
writer.WriteString($"[{terminalModelSpan.ToArray().ToHexString()}]终端型号", jT808_0X0107.TerminalModel);


Loading…
Cancel
Save