ソースを参照

v2.3.8

修复0x0100、0x0102、0x0107组包补\0操作
tags/v2.3.8
SmallChi(Koike) 4年前
コミット
af53d7ee1b
8個のファイルの変更34行の追加35行の削除
  1. +3
    -3
      src/JT808.Protocol.Test/JT808.Protocol.Test.csproj
  2. +11
    -11
      src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs
  3. +3
    -3
      src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs
  4. +3
    -4
      src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs
  5. +2
    -2
      src/JT808.Protocol/JT808.Protocol.csproj
  6. +6
    -6
      src/JT808.Protocol/MessageBody/JT808_0x0100.cs
  7. +1
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0102.cs
  8. +5
    -5
      src/JT808.Protocol/MessageBody/JT808_0x0107.cs

+ 3
- 3
src/JT808.Protocol.Test/JT808.Protocol.Test.csproj ファイルの表示

@@ -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" />


+ 11
- 11
src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs ファイルの表示

@@ -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]


+ 3
- 3
src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs ファイルの表示

@@ -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]


+ 3
- 4
src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs ファイルの表示

@@ -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);


+ 2
- 2
src/JT808.Protocol/JT808.Protocol.csproj ファイルの表示

@@ -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' ">


+ 6
- 6
src/JT808.Protocol/MessageBody/JT808_0x0100.cs ファイルの表示

@@ -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);


+ 1
- 1
src/JT808.Protocol/MessageBody/JT808_0x0102.cs ファイルの表示

@@ -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
{ {


+ 5
- 5
src/JT808.Protocol/MessageBody/JT808_0x0107.cs ファイルの表示

@@ -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);


読み込み中…
キャンセル
保存