소스 검색

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>
<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="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="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" />
<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();
Assert.Equal("7E0100002D000123456789000A002800323132333430736D616C6C6368693132333030303030303030304348493132333001D4C1413132333435BA7E", hex);
Assert.Equal("7E0100002D000123456789000A002800323132333400736D616C6C6368693132330000000000000000004348493132330001D4C14131323334358A7E", hex);
}

[Fact]
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);
Assert.Equal(Enums.JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId);
Assert.Equal(10, jT808_0X0100.Header.MsgNum);
@@ -47,11 +47,11 @@ namespace JT808.Protocol.Test.MessageBody
JT808_0x0100 JT808Bodies = (JT808_0x0100)jT808_0X0100.Bodies;
Assert.Equal(40, JT808Bodies.AreaID);
Assert.Equal(50, JT808Bodies.CityOrCountyId);
Assert.Equal("12340", JT808Bodies.MakerId);
Assert.Equal("1234", JT808Bodies.MakerId);
Assert.Equal(1, JT808Bodies.PlateColor);
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]
@@ -80,13 +80,13 @@ namespace JT808.Protocol.Test.MessageBody
JT808HeaderMessageBodyProperty jT808HeaderMessageBodyProperty = new JT808HeaderMessageBodyProperty(true);
jT808_0X0100.Header.MessageBodyProperty = jT808HeaderMessageBodyProperty;
var hex = JT808Serializer.Serialize(jT808_0X0100).ToHexString();
Assert.Equal("7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E", hex);
Assert.Equal("7E010040540100000000000123456789000A002800323132333400000000000000736D616C6C6368693132330000000000000000000000000000000000000043484931323300000000000000000000000000000000000000000000000001D4C1413132333435B27E", hex);
}

[Fact]
public void Test2019_2()
{
byte[] bytes = "7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E".ToHexBytes();
byte[] bytes = "7E010040540100000000000123456789000A002800323132333400000000000000736D616C6C6368693132330000000000000000000000000000000000000043484931323300000000000000000000000000000000000000000000000001D4C1413132333435B27E".ToHexBytes();
JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes);
Assert.Equal(JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId);
Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion);
@@ -98,11 +98,11 @@ namespace JT808.Protocol.Test.MessageBody
JT808_0x0100 JT808Bodies = (JT808_0x0100)jT808_0X0100.Bodies;
Assert.Equal(40, JT808Bodies.AreaID);
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("粤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]
@@ -126,7 +126,7 @@ namespace JT808.Protocol.Test.MessageBody
});
var data = JT808Serializer.Serialize(package);
var hex = data.ToHexString();
Assert.Equal("7e0100405401000000000222222222220001000000003030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b6530303202d4c1413132333436107e".ToUpper(), hex);
Assert.Equal("7E0100405401000000000222222222220001000000004B6F696B653030320000004B6F696B65303032000000000000000000000000000000000000000000004B6F696B653030320000000000000000000000000000000000000000000002D4C1413132333436207E".ToUpper(), hex);
}

[Fact]


+ 3
- 3
src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs 파일 보기

@@ -44,18 +44,18 @@ namespace JT808.Protocol.Test.MessageBody
SoftwareVersion="v2.0.0"
};
string hex = JT808Serializer.Serialize(jT808LoginRequestProperty,JT808Version.JTT2019).ToHexString();
Assert.Equal("05343536313231323334353637383930616263646576322E302E303030303030303030303030303030", hex);
Assert.Equal("05343536313231323334353637383930616263646576322E302E300000000000000000000000000000", hex);
}

[Fact]
public void Test2019_2()
{
byte[] bodys = "05343536313231323334353637383930616263646576322E302E303030303030303030303030303030".ToHexBytes();
byte[] bodys = "05343536313231323334353637383930616263646576322E302E300000000000000000000000000000".ToHexBytes();
JT808_0x0102 jT808LoginRequest = JT808Serializer.Deserialize<JT808_0x0102>(bodys, JT808Version.JTT2019);
Assert.Equal("45612", jT808LoginRequest.Code);
Assert.Equal(5, jT808LoginRequest.CodeLength);
Assert.Equal("1234567890abcde", jT808LoginRequest.IMEI);
Assert.Equal("v2.0.0".PadRight(20,'0'), jT808LoginRequest.SoftwareVersion);
Assert.Equal("v2.0.0", jT808LoginRequest.SoftwareVersion);
}

[Fact]


+ 3
- 4
src/JT808.Protocol.Test/MessageBody/JT808_0x0107Test.cs 파일 보기

@@ -36,14 +36,13 @@ namespace JT808.Protocol.Test.MessageBody
};
jT808Package.Bodies = jT808_0X0107;
string hex = JT808Serializer.Serialize(jT808Package).ToHexString();
//"7E0107004111223344556622B8000531303630313130343535353435393535313033303030303030346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E
Assert.Equal("7E0107004111223344556622B8000531303630313130343535353435393535313033303030303030346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".Replace(" ", ""), hex);
Assert.Equal("7E0107004111223344556622B8000531303630313130343535353435393535313033000000000000346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".Replace(" ", ""), hex);
}

[Fact]
public void Test2()
{
byte[] bytes = "7E0107004111223344556622B8000531303630313130343535353435393535313033303030303030346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".ToHexBytes();
byte[] bytes = "7E0107004111223344556622B8000531303630313130343535353435393535313033000000000000346436613133301234567890123456789007616263646566670A706F69757974726577710709DA7E".ToHexBytes();
JT808Package jT808Package = JT808Serializer.Deserialize(bytes);
JT808_0x0107 jT808_0X0107 = (JT808_0x0107)jT808Package.Bodies;
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(5, jT808_0X0107.TerminalType);
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("12345678901234567890", jT808_0X0107.Terminal_SIM_ICCID);
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>
<DocumentationFile>JT808.Protocol.xml</DocumentationFile>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Version>2.3.7</Version>
<Version>2.3.8</Version>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<AnalysisLevel>latest</AnalysisLevel>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
@@ -71,7 +71,7 @@
<PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" />
<PackageReference Include="System.Memory" Version="4.5.4" />
<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 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);
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
{
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.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.WriteByteReturn((byte)(writer.GetCurrentPosition() - CodeLengthPosition - 1), CodeLengthPosition);
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
{


+ 5
- 5
src/JT808.Protocol/MessageBody/JT808_0x0107.cs 파일 보기

@@ -135,14 +135,14 @@ namespace JT808.Protocol.MessageBody
writer.WriteUInt16(value.TerminalType);
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
{
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.WriteBCD(value.Terminal_SIM_ICCID.ValiString(nameof(value.Terminal_SIM_ICCID), 20), 20);


불러오는 중...
취소
저장