@@ -104,5 +104,12 @@ namespace JT808.Protocol.Test.MessageBody | |||
Assert.Equal("CHI123".PadLeft(30, '0'), JT808Bodies.TerminalId); | |||
Assert.Equal("smallchi123".PadLeft(30, '0'), JT808Bodies.TerminalModel); | |||
} | |||
[Fact] | |||
public void Test2019_3() | |||
{ | |||
byte[] bytes = "7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E".ToHexBytes(); | |||
string json = JT808Serializer.Analyze<JT808Package>(bytes); | |||
} | |||
} | |||
} |
@@ -27,6 +27,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
Assert.Equal("45612", jT808LoginRequest.Code); | |||
} | |||
[Fact] | |||
public void Test5() | |||
{ | |||
byte[] bodys = "34 35 36 31 32".ToHexBytes(); | |||
string json = JT808Serializer.Analyze<JT808_0x0102>(bodys); | |||
} | |||
[Fact] | |||
public void Test2019_1() | |||
{ | |||
@@ -51,6 +58,13 @@ namespace JT808.Protocol.Test.MessageBody | |||
Assert.Equal("v2.0.0".PadRight(20,'0'), jT808LoginRequest.SoftwareVersion); | |||
} | |||
[Fact] | |||
public void Test2019_3() | |||
{ | |||
byte[] bodys = "05343536313231323334353637383930616263646576322E302E303030303030303030303030303030".ToHexBytes(); | |||
string json = JT808Serializer.Analyze<JT808_0x0102>(bodys, JT808Version.JTT2019); | |||
} | |||
[Fact] | |||
public void Test3() | |||
{ | |||
@@ -1,14 +1,18 @@ | |||
using JT808.Protocol.Enums; | |||
using JT808.Protocol.Extensions; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
using System.Text.Json; | |||
using System.Buffers; | |||
using System; | |||
namespace JT808.Protocol.MessageBody | |||
{ | |||
/// <summary> | |||
/// 终端注册 | |||
/// </summary> | |||
public class JT808_0x0100 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0100>, IJT808_2019_Version | |||
public class JT808_0x0100 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0100>, IJT808_2019_Version,IJT808Analyze | |||
{ | |||
public override ushort MsgId { get; } = 0x0100; | |||
public override string Description => "终端注册"; | |||
@@ -104,5 +108,42 @@ namespace JT808.Protocol.MessageBody | |||
writer.WriteByte(value.PlateColor); | |||
writer.WriteString(value.PlateNo); | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0100 jT808_0X0100 = new JT808_0x0100(); | |||
jT808_0X0100.AreaID = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{jT808_0X0100.AreaID.ReadNumber()}]省域ID", jT808_0X0100.AreaID); | |||
jT808_0X0100.CityOrCountyId = reader.ReadUInt16(); | |||
writer.WriteNumber($"[{jT808_0X0100.CityOrCountyId.ReadNumber()}]市县域ID", jT808_0X0100.CityOrCountyId); | |||
if (reader.Version == JT808Version.JTT2019) | |||
{ | |||
ReadOnlySpan<byte> midSpan = reader.ReadVirtualArray(11); | |||
jT808_0X0100.MakerId = reader.ReadString(11); | |||
writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(11)", jT808_0X0100.MakerId); | |||
ReadOnlySpan<byte> tmSpan = reader.ReadVirtualArray(30); | |||
jT808_0X0100.TerminalModel = reader.ReadString(30); | |||
writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(30)", jT808_0X0100.TerminalModel); | |||
ReadOnlySpan<byte> tidSpan = reader.ReadVirtualArray(30); | |||
jT808_0X0100.TerminalId = reader.ReadString(30); | |||
writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端型号(30)", jT808_0X0100.TerminalId); | |||
} | |||
else | |||
{ | |||
ReadOnlySpan<byte> midSpan = reader.ReadVirtualArray(5); | |||
jT808_0X0100.MakerId = reader.ReadString(5); | |||
writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(5)", jT808_0X0100.MakerId); | |||
ReadOnlySpan<byte> tmSpan = reader.ReadVirtualArray(20); | |||
jT808_0X0100.TerminalModel = reader.ReadString(20); | |||
writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(20)", jT808_0X0100.TerminalModel); | |||
ReadOnlySpan<byte> tidSpan = reader.ReadVirtualArray(7); | |||
jT808_0X0100.TerminalId = reader.ReadString(7); | |||
writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端型号(7)", jT808_0X0100.TerminalId); | |||
} | |||
jT808_0X0100.PlateColor = reader.ReadByte(); | |||
writer.WriteNumber($"[{jT808_0X0100.PlateColor.ReadNumber()}]车牌颜色", jT808_0X0100.PlateColor); | |||
ReadOnlySpan<byte> vnoSpan = reader.ReadVirtualArray(reader.ReadCurrentRemainContentLength()); | |||
jT808_0X0100.PlateNo = reader.ReadRemainStringContent(); | |||
writer.WriteString($"[{vnoSpan.ToArray().ToHexString()}]车牌颜色", jT808_0X0100.PlateNo); | |||
} | |||
} | |||
} |
@@ -1,14 +1,17 @@ | |||
using JT808.Protocol.Enums; | |||
using JT808.Protocol.Extensions; | |||
using JT808.Protocol.Formatters; | |||
using JT808.Protocol.Interfaces; | |||
using JT808.Protocol.MessagePack; | |||
using System; | |||
using System.Text.Json; | |||
namespace JT808.Protocol.MessageBody | |||
{ | |||
/// <summary> | |||
/// 终端鉴权 | |||
/// </summary> | |||
public class JT808_0x0102 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0102>, IJT808_2019_Version | |||
public class JT808_0x0102 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0102>, IJT808_2019_Version, IJT808Analyze | |||
{ | |||
public override ushort MsgId { get; } = 0x0102; | |||
public override string Description => "终端鉴权"; | |||
@@ -63,5 +66,30 @@ namespace JT808.Protocol.MessageBody | |||
writer.WriteString(value.Code); | |||
} | |||
} | |||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | |||
{ | |||
JT808_0x0102 jT808_0X0102 = new JT808_0x0102(); | |||
if (reader.Version == JT808Version.JTT2019) | |||
{ | |||
jT808_0X0102.CodeLength = reader.ReadByte(); | |||
writer.WriteNumber($"[{ jT808_0X0102.CodeLength.ReadNumber()}]鉴权码长度", jT808_0X0102.CodeLength); | |||
ReadOnlySpan<byte> codeSpan = reader.ReadVirtualArray(jT808_0X0102.CodeLength); | |||
jT808_0X0102.Code = reader.ReadString(jT808_0X0102.CodeLength); | |||
writer.WriteString($"[{codeSpan.ToArray().ToHexString()}]鉴权码", jT808_0X0102.Code); | |||
ReadOnlySpan<byte> imeiSpan = reader.ReadVirtualArray(15); | |||
jT808_0X0102.IMEI = reader.ReadString(15); | |||
writer.WriteString($"[{imeiSpan.ToArray().ToHexString()}]IMEI", jT808_0X0102.IMEI); | |||
ReadOnlySpan<byte> svSpan = reader.ReadVirtualArray(20); | |||
jT808_0X0102.SoftwareVersion = reader.ReadString(20); | |||
writer.WriteString($"[{svSpan.ToArray().ToHexString()}]软件版本号", jT808_0X0102.SoftwareVersion); | |||
} | |||
else | |||
{ | |||
ReadOnlySpan<byte> codeSpan = reader.ReadVirtualArray(reader.ReadCurrentRemainContentLength()); | |||
jT808_0X0102.Code = reader.ReadRemainStringContent(); | |||
writer.WriteString($"[{codeSpan.ToArray().ToHexString()}]鉴权码", jT808_0X0102.Code); | |||
} | |||
} | |||
} | |||
} |