@@ -108,10 +108,10 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" /> | |||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" /> | |||||
<PackageReference Include="NETStandard.Library" Version="2.0.3" /> | <PackageReference Include="NETStandard.Library" Version="2.0.3" /> | ||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> | |||||
<PackageReference Include="System.Drawing.Common" Version="5.0.0" /> | |||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> | |||||
<PackageReference Include="System.Drawing.Common" Version="5.0.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" /> | <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" /> | ||||
<PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" /> | <PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" /> | ||||
<PackageReference Include="xunit" Version="2.4.1" /> | <PackageReference Include="xunit" Version="2.4.1" /> | ||||
@@ -32,13 +32,13 @@ namespace JT808.Protocol.Test.MessageBody | |||||
} | } | ||||
}; | }; | ||||
var hex = JT808Serializer.Serialize(jT808_0X0100).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0X0100).ToHexString(); | ||||
Assert.Equal("7E0100002D000123456789000A002800323132333430736D616C6C6368693132333030303030303030304348493132333001D4C1413132333435BA7E", hex); | |||||
Assert.Equal("7E0100002D000123456789000A002800323132333400736D616C6C6368693132330000000000000000004348493132330001D4C14131323334358A7E", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test1_1() | public void Test1_1() | ||||
{ | { | ||||
byte[] bytes = "7E 01 00 00 2D 00 01 23 45 67 89 00 0A 00 28 00 32 31 32 33 34 30 73 6D 61 6C 6C 63 68 69 31 32 33 30 30 30 30 30 30 30 30 30 43 48 49 31 32 33 30 01 D4 C1 41 31 32 33 34 35 BA 7E".ToHexBytes(); | |||||
byte[] bytes = "7E0100002D000123456789000A002800323132333400736D616C6C6368693132330000000000000000004348493132330001D4C14131323334358A7E".ToHexBytes(); | |||||
JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | ||||
Assert.Equal(Enums.JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId); | Assert.Equal(Enums.JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId); | ||||
Assert.Equal(10, jT808_0X0100.Header.MsgNum); | Assert.Equal(10, jT808_0X0100.Header.MsgNum); | ||||
@@ -47,11 +47,11 @@ namespace JT808.Protocol.Test.MessageBody | |||||
JT808_0x0100 JT808Bodies = (JT808_0x0100)jT808_0X0100.Bodies; | JT808_0x0100 JT808Bodies = (JT808_0x0100)jT808_0X0100.Bodies; | ||||
Assert.Equal(40, JT808Bodies.AreaID); | Assert.Equal(40, JT808Bodies.AreaID); | ||||
Assert.Equal(50, JT808Bodies.CityOrCountyId); | Assert.Equal(50, JT808Bodies.CityOrCountyId); | ||||
Assert.Equal("12340", JT808Bodies.MakerId); | |||||
Assert.Equal("1234", JT808Bodies.MakerId); | |||||
Assert.Equal(1, JT808Bodies.PlateColor); | Assert.Equal(1, JT808Bodies.PlateColor); | ||||
Assert.Equal("粤A12345", JT808Bodies.PlateNo); | Assert.Equal("粤A12345", JT808Bodies.PlateNo); | ||||
Assert.Equal("CHI1230", JT808Bodies.TerminalId); | |||||
Assert.Equal("smallchi123000000000", JT808Bodies.TerminalModel); | |||||
Assert.Equal("CHI123", JT808Bodies.TerminalId); | |||||
Assert.Equal("smallchi123", JT808Bodies.TerminalModel); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -80,13 +80,13 @@ namespace JT808.Protocol.Test.MessageBody | |||||
JT808HeaderMessageBodyProperty jT808HeaderMessageBodyProperty = new JT808HeaderMessageBodyProperty(true); | JT808HeaderMessageBodyProperty jT808HeaderMessageBodyProperty = new JT808HeaderMessageBodyProperty(true); | ||||
jT808_0X0100.Header.MessageBodyProperty = jT808HeaderMessageBodyProperty; | jT808_0X0100.Header.MessageBodyProperty = jT808HeaderMessageBodyProperty; | ||||
var hex = JT808Serializer.Serialize(jT808_0X0100).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0X0100).ToHexString(); | ||||
Assert.Equal("7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E", hex); | |||||
Assert.Equal("7E010040540100000000000123456789000A002800323132333400000000000000736D616C6C6368693132330000000000000000000000000000000000000043484931323300000000000000000000000000000000000000000000000001D4C1413132333435B27E", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2019_2() | public void Test2019_2() | ||||
{ | { | ||||
byte[] bytes = "7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E".ToHexBytes(); | |||||
byte[] bytes = "7E010040540100000000000123456789000A002800323132333400000000000000736D616C6C6368693132330000000000000000000000000000000000000043484931323300000000000000000000000000000000000000000000000001D4C1413132333435B27E".ToHexBytes(); | |||||
JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | ||||
Assert.Equal(JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId); | Assert.Equal(JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId); | ||||
Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion); | Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion); | ||||
@@ -98,11 +98,11 @@ namespace JT808.Protocol.Test.MessageBody | |||||
JT808_0x0100 JT808Bodies = (JT808_0x0100)jT808_0X0100.Bodies; | JT808_0x0100 JT808Bodies = (JT808_0x0100)jT808_0X0100.Bodies; | ||||
Assert.Equal(40, JT808Bodies.AreaID); | Assert.Equal(40, JT808Bodies.AreaID); | ||||
Assert.Equal(50, JT808Bodies.CityOrCountyId); | Assert.Equal(50, JT808Bodies.CityOrCountyId); | ||||
Assert.Equal("1234".PadLeft(11,'0'), JT808Bodies.MakerId); | |||||
Assert.Equal("1234", JT808Bodies.MakerId); | |||||
Assert.Equal(1, JT808Bodies.PlateColor); | Assert.Equal(1, JT808Bodies.PlateColor); | ||||
Assert.Equal("粤A12345", JT808Bodies.PlateNo); | Assert.Equal("粤A12345", JT808Bodies.PlateNo); | ||||
Assert.Equal("CHI123".PadLeft(30, '0'), JT808Bodies.TerminalId); | |||||
Assert.Equal("smallchi123".PadLeft(30, '0'), JT808Bodies.TerminalModel); | |||||
Assert.Equal("CHI123", JT808Bodies.TerminalId); | |||||
Assert.Equal("smallchi123", JT808Bodies.TerminalModel); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -126,7 +126,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
}); | }); | ||||
var data = JT808Serializer.Serialize(package); | var data = JT808Serializer.Serialize(package); | ||||
var hex = data.ToHexString(); | var hex = data.ToHexString(); | ||||
Assert.Equal("7e0100405401000000000222222222220001000000003030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b6530303202d4c1413132333436107e".ToUpper(), hex); | |||||
Assert.Equal("7E0100405401000000000222222222220001000000004B6F696B653030320000004B6F696B65303032000000000000000000000000000000000000000000004B6F696B653030320000000000000000000000000000000000000000000002D4C1413132333436207E".ToUpper(), hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -44,18 +44,18 @@ namespace JT808.Protocol.Test.MessageBody | |||||
SoftwareVersion="v2.0.0" | SoftwareVersion="v2.0.0" | ||||
}; | }; | ||||
string hex = JT808Serializer.Serialize(jT808LoginRequestProperty,JT808Version.JTT2019).ToHexString(); | string hex = JT808Serializer.Serialize(jT808LoginRequestProperty,JT808Version.JTT2019).ToHexString(); | ||||
Assert.Equal("05343536313231323334353637383930616263646576322E302E303030303030303030303030303030", hex); | |||||
Assert.Equal("05343536313231323334353637383930616263646576322E302E300000000000000000000000000000", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2019_2() | public void Test2019_2() | ||||
{ | { | ||||
byte[] bodys = "05343536313231323334353637383930616263646576322E302E303030303030303030303030303030".ToHexBytes(); | |||||
byte[] bodys = "05343536313231323334353637383930616263646576322E302E300000000000000000000000000000".ToHexBytes(); | |||||
JT808_0x0102 jT808LoginRequest = JT808Serializer.Deserialize<JT808_0x0102>(bodys, JT808Version.JTT2019); | JT808_0x0102 jT808LoginRequest = JT808Serializer.Deserialize<JT808_0x0102>(bodys, JT808Version.JTT2019); | ||||
Assert.Equal("45612", jT808LoginRequest.Code); | Assert.Equal("45612", jT808LoginRequest.Code); | ||||
Assert.Equal(5, jT808LoginRequest.CodeLength); | Assert.Equal(5, jT808LoginRequest.CodeLength); | ||||
Assert.Equal("1234567890abcde", jT808LoginRequest.IMEI); | Assert.Equal("1234567890abcde", jT808LoginRequest.IMEI); | ||||
Assert.Equal("v2.0.0".PadRight(20,'0'), jT808LoginRequest.SoftwareVersion); | |||||
Assert.Equal("v2.0.0", jT808LoginRequest.SoftwareVersion); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -36,14 +36,13 @@ namespace JT808.Protocol.Test.MessageBody | |||||
}; | }; | ||||
jT808Package.Bodies = jT808_0X0107; | jT808Package.Bodies = jT808_0X0107; | ||||
string hex = JT808Serializer.Serialize(jT808Package).ToHexString(); | string hex = JT808Serializer.Serialize(jT808Package).ToHexString(); | ||||
//"7E0107004111223344556622B8000531303630313130343535353435393535313033303030303030346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E | |||||
Assert.Equal("7E0107004111223344556622B8000531303630313130343535353435393535313033303030303030346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".Replace(" ", ""), hex); | |||||
Assert.Equal("7E0107004111223344556622B8000531303630313130343535353435393535313033000000000000346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".Replace(" ", ""), hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
byte[] bytes = "7E0107004111223344556622B8000531303630313130343535353435393535313033303030303030346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".ToHexBytes(); | |||||
byte[] bytes = "7E0107004111223344556622B8000531303630313130343535353435393535313033000000000000346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".ToHexBytes(); | |||||
JT808Package jT808Package = JT808Serializer.Deserialize(bytes); | JT808Package jT808Package = JT808Serializer.Deserialize(bytes); | ||||
JT808_0x0107 jT808_0X0107 = (JT808_0x0107)jT808Package.Bodies; | JT808_0x0107 jT808_0X0107 = (JT808_0x0107)jT808Package.Bodies; | ||||
Assert.Equal(8888, jT808Package.Header.MsgNum); | Assert.Equal(8888, jT808Package.Header.MsgNum); | ||||
@@ -51,7 +50,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Assert.Equal(Enums.JT808MsgId.查询终端属性应答.ToUInt16Value(), jT808Package.Header.MsgId); | Assert.Equal(Enums.JT808MsgId.查询终端属性应答.ToUInt16Value(), jT808Package.Header.MsgId); | ||||
Assert.Equal(5, jT808_0X0107.TerminalType); | Assert.Equal(5, jT808_0X0107.TerminalType); | ||||
Assert.Equal("10601", jT808_0X0107.MakerId); | Assert.Equal("10601", jT808_0X0107.MakerId); | ||||
Assert.Equal("10455545955103000000", jT808_0X0107.TerminalModel); | |||||
Assert.Equal("10455545955103", jT808_0X0107.TerminalModel); | |||||
Assert.Equal("4d6a130", jT808_0X0107.TerminalId); | Assert.Equal("4d6a130", jT808_0X0107.TerminalId); | ||||
Assert.Equal("12345678901234567890", jT808_0X0107.Terminal_SIM_ICCID); | Assert.Equal("12345678901234567890", jT808_0X0107.Terminal_SIM_ICCID); | ||||
Assert.Equal("abcdefg", jT808_0X0107.Terminal_Hardware_Version_Num); | Assert.Equal("abcdefg", jT808_0X0107.Terminal_Hardware_Version_Num); | ||||
@@ -15,7 +15,7 @@ | |||||
<license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | <license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | ||||
<DocumentationFile>JT808.Protocol.xml</DocumentationFile> | <DocumentationFile>JT808.Protocol.xml</DocumentationFile> | ||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | <GeneratePackageOnBuild>false</GeneratePackageOnBuild> | ||||
<Version>2.3.7</Version> | |||||
<Version>2.3.8</Version> | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
<AnalysisLevel>latest</AnalysisLevel> | <AnalysisLevel>latest</AnalysisLevel> | ||||
<EnableNETAnalyzers>true</EnableNETAnalyzers> | <EnableNETAnalyzers>true</EnableNETAnalyzers> | ||||
@@ -71,7 +71,7 @@ | |||||
<PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" /> | <PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" /> | ||||
<PackageReference Include="System.Memory" Version="4.5.4" /> | <PackageReference Include="System.Memory" Version="4.5.4" /> | ||||
<PackageReference Include="System.Reflection.Extensions" Version="4.3.0" /> | <PackageReference Include="System.Reflection.Extensions" Version="4.3.0" /> | ||||
<PackageReference Include="System.Text.Json" Version="5.0.1" /> | |||||
<PackageReference Include="System.Text.Json" Version="5.0.2" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.1' "> | <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.1' "> | ||||
@@ -111,15 +111,15 @@ namespace JT808.Protocol.MessageBody | |||||
writer.WriteUInt16(value.CityOrCountyId); | writer.WriteUInt16(value.CityOrCountyId); | ||||
if (writer.Version == JT808Version.JTT2019) | if (writer.Version == JT808Version.JTT2019) | ||||
{ | { | ||||
writer.WriteString(value.MakerId.PadLeft(11, '0').ValiString(nameof(value.MakerId),11)); | |||||
writer.WriteString(value.TerminalModel.PadLeft(30, '0').ValiString(nameof(value.TerminalModel), 30)); | |||||
writer.WriteString(value.TerminalId.PadLeft(30, '0').ValiString(nameof(value.TerminalId), 30)); | |||||
writer.WriteString(value.MakerId.PadRight(11, '\0').ValiString(nameof(value.MakerId),11)); | |||||
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 | else | ||||
{ | { | ||||
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)); | |||||
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)); | |||||
} | } | ||||
writer.WriteByte(value.PlateColor); | writer.WriteByte(value.PlateColor); | ||||
writer.WriteString(value.PlateNo); | writer.WriteString(value.PlateNo); | ||||
@@ -75,7 +75,7 @@ namespace JT808.Protocol.MessageBody | |||||
writer.WriteString(value.Code); | writer.WriteString(value.Code); | ||||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - CodeLengthPosition - 1), CodeLengthPosition); | writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - CodeLengthPosition - 1), CodeLengthPosition); | ||||
writer.WriteString(value.IMEI); | writer.WriteString(value.IMEI); | ||||
writer.WriteString(value.SoftwareVersion.PadRight(20,'0').ValiString(nameof(value.SoftwareVersion),20)); | |||||
writer.WriteString(value.SoftwareVersion.PadRight(20,'\0').ValiString(nameof(value.SoftwareVersion),20)); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
@@ -135,14 +135,14 @@ namespace JT808.Protocol.MessageBody | |||||
writer.WriteUInt16(value.TerminalType); | writer.WriteUInt16(value.TerminalType); | ||||
if (writer.Version == JT808Version.JTT2019) | if (writer.Version == JT808Version.JTT2019) | ||||
{ | { | ||||
writer.WriteString(value.MakerId.PadLeft(11, '0').ValiString(nameof(value.MakerId),11)); | |||||
writer.WriteString(value.TerminalModel.PadLeft(30, '0').ValiString(nameof(value.TerminalModel), 30)); | |||||
writer.WriteString(value.TerminalId.PadLeft(30, '0').ValiString(nameof(value.TerminalId), 30)); | |||||
writer.WriteString(value.MakerId.PadRight(11, '\0').ValiString(nameof(value.MakerId),11)); | |||||
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 | else | ||||
{ | { | ||||
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.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)); | 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.WriteBCD(value.Terminal_SIM_ICCID.ValiString(nameof(value.Terminal_SIM_ICCID), 20), 20); | ||||