@@ -12,7 +12,7 @@ jobs: | |||||
- name: Setup .NET Core | - name: Setup .NET Core | ||||
uses: actions/setup-dotnet@master | uses: actions/setup-dotnet@master | ||||
with: | with: | ||||
dotnet-version: 3.1.101 | |||||
dotnet-version: 3.1.401 | |||||
- name: dotnet info | - name: dotnet info | ||||
run: dotnet --info | run: dotnet --info | ||||
- name: dotnet restore | - name: dotnet restore | ||||
@@ -107,22 +107,22 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8"> | |||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0"> | |||||
<PrivateAssets>all</PrivateAssets> | <PrivateAssets>all</PrivateAssets> | ||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||
</PackageReference> | </PackageReference> | ||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" /> | |||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.0" /> | |||||
<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="Newtonsoft.Json" Version="12.0.3" /> | ||||
<PackageReference Include="System.Drawing.Common" Version="4.7.0" /> | <PackageReference Include="System.Drawing.Common" Version="4.7.0" /> | ||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.3" /> | |||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.7" /> | |||||
<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" /> | ||||
<PackageReference Include="xunit.runner.console" Version="2.4.1"> | <PackageReference Include="xunit.runner.console" Version="2.4.1"> | ||||
<PrivateAssets>all</PrivateAssets> | <PrivateAssets>all</PrivateAssets> | ||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> | <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> | ||||
</PackageReference> | </PackageReference> | ||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1"> | |||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> | |||||
<PrivateAssets>all</PrivateAssets> | <PrivateAssets>all</PrivateAssets> | ||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> | <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> | ||||
</PackageReference> | </PackageReference> | ||||
@@ -110,6 +110,48 @@ namespace JT808.Protocol.Test.MessageBody | |||||
{ | { | ||||
byte[] bytes = "7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E".ToHexBytes(); | byte[] bytes = "7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E".ToHexBytes(); | ||||
string json = JT808Serializer.Analyze<JT808Package>(bytes); | string json = JT808Serializer.Analyze<JT808Package>(bytes); | ||||
} | |||||
[Fact] | |||||
public void Test2019_4_1() | |||||
{ | |||||
var package = JT808MsgId.终端注册.Create2019("22222222222", new JT808_0x0100() | |||||
{ | |||||
PlateNo = "粤A12346", | |||||
PlateColor = 2, | |||||
AreaID = 0, | |||||
CityOrCountyId = 0, | |||||
MakerId = "Koike002", | |||||
TerminalId = "Koike002", | |||||
TerminalModel = "Koike002" | |||||
}); | |||||
var data = JT808Serializer.Serialize(package); | |||||
var hex = data.ToHexString(); | |||||
Assert.Equal("7e0100405401000000000222222222220001000000003030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b6530303202d4c1413132333436107e".ToUpper(), hex); | |||||
} | |||||
[Fact] | |||||
public void Test2019_4_2() | |||||
{ | |||||
byte[] bytes = "7e0100405401000000000222222222220001000000003030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b6530303202d4c1413132333436107e".ToHexBytes(); | |||||
JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes); | |||||
Assert.Equal("22222222222", jT808_0X0100.Header.TerminalPhoneNo); | |||||
Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion); | |||||
Assert.NotNull(jT808_0X0100.Bodies); | |||||
JT808_0x0100 body = jT808_0X0100.Bodies as JT808_0x0100; | |||||
Assert.Equal(0, body.AreaID); | |||||
Assert.Equal(2, body.PlateColor); | |||||
Assert.Equal(0, body.CityOrCountyId); | |||||
Assert.Equal("粤A12346", body.PlateNo.TrimStart()); | |||||
Assert.Equal("Koike002", body.MakerId.TrimStart('0')); | |||||
Assert.Equal("Koike002", body.TerminalId.TrimStart('0')); | |||||
Assert.Equal("Koike002", body.TerminalModel.TrimStart('0')); | |||||
} | |||||
[Fact] | |||||
public void Test2019_4_3() | |||||
{ | |||||
byte[] bytes = "7e0100405401000000000222222222220001000000003030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b6530303202d4c1413132333436107e".ToHexBytes(); | |||||
string json = JT808Serializer.Analyze<JT808Package>(bytes); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -14,7 +14,7 @@ | |||||
<licenseUrl>https://github.com/SmallChi/JT808/blob/master/LICENSE</licenseUrl> | <licenseUrl>https://github.com/SmallChi/JT808/blob/master/LICENSE</licenseUrl> | ||||
<license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | <license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | ||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | <GeneratePackageOnBuild>false</GeneratePackageOnBuild> | ||||
<Version>2.2.10</Version> | |||||
<Version>2.2.11</Version> | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | ||||
@@ -65,14 +65,14 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8"> | |||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0"> | |||||
<PrivateAssets>all</PrivateAssets> | <PrivateAssets>all</PrivateAssets> | ||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||
</PackageReference> | </PackageReference> | ||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> | <PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> | ||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.0" /> | |||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.3" /> | |||||
<PackageReference Include="System.Text.Json" Version="4.7.1" /> | |||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.1" /> | |||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.7" /> | |||||
<PackageReference Include="System.Text.Json" Version="4.7.2" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -269,6 +269,7 @@ namespace JT808.Protocol | |||||
writer.WriteNumber($"[{messageBodyPropertyReadOnlySpan.ToString()}]消息体属性", messageBodyPropertyValue); | writer.WriteNumber($"[{messageBodyPropertyReadOnlySpan.ToString()}]消息体属性", messageBodyPropertyValue); | ||||
if (headerMessageBodyProperty.VersionFlag) | if (headerMessageBodyProperty.VersionFlag) | ||||
{ | { | ||||
reader.Version = JT808Version.JTT2019; | |||||
writer.WriteNumber( "[bit15]保留", 0); | writer.WriteNumber( "[bit15]保留", 0); | ||||
writer.WriteBoolean("[bit14]协议版本标识", headerMessageBodyProperty.VersionFlag); | writer.WriteBoolean("[bit14]协议版本标识", headerMessageBodyProperty.VersionFlag); | ||||
writer.WriteBoolean("[bit13]是否分包", headerMessageBodyProperty.IsPackage); | writer.WriteBoolean("[bit13]是否分包", headerMessageBodyProperty.IsPackage); | ||||
@@ -285,6 +286,7 @@ namespace JT808.Protocol | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
reader.Version = JT808Version.JTT2013; | |||||
writer.WriteNumber("[bit15]保留", 0); | writer.WriteNumber("[bit15]保留", 0); | ||||
writer.WriteNumber("[bit14]保留", 0); | writer.WriteNumber("[bit14]保留", 0); | ||||
writer.WriteBoolean("[bit13]是否分包", headerMessageBodyProperty.IsPackage); | writer.WriteBoolean("[bit13]是否分包", headerMessageBodyProperty.IsPackage); | ||||
@@ -210,7 +210,7 @@ namespace JT808.Protocol.MessageBody | |||||
{ | { | ||||
JT808_0x0200 value = new JT808_0x0200(); | JT808_0x0200 value = new JT808_0x0200(); | ||||
value.AlarmFlag = reader.ReadUInt32(); | value.AlarmFlag = reader.ReadUInt32(); | ||||
writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag); | |||||
writer.WriteNumber($"[{value.AlarmFlag.ReadBinary().ToString()}]报警标志", value.AlarmFlag); | |||||
value.StatusFlag = reader.ReadUInt32(); | value.StatusFlag = reader.ReadUInt32(); | ||||
var alarmFlagBits = Convert.ToString(value.AlarmFlag, 2).PadLeft(32, '0').AsSpan(); | var alarmFlagBits = Convert.ToString(value.AlarmFlag, 2).PadLeft(32, '0').AsSpan(); | ||||
writer.WriteStartObject("报警标志对象"); | writer.WriteStartObject("报警标志对象"); | ||||
@@ -261,7 +261,7 @@ namespace JT808.Protocol.MessageBody | |||||
writer.WriteString($"[bit1]超速报警", $"{alarmFlagBits[1]}"); | writer.WriteString($"[bit1]超速报警", $"{alarmFlagBits[1]}"); | ||||
writer.WriteString($"[bit0]紧急报警,触动报警开关后触发", $"{alarmFlagBits[0]}"); | writer.WriteString($"[bit0]紧急报警,触动报警开关后触发", $"{alarmFlagBits[0]}"); | ||||
writer.WriteEndObject(); | writer.WriteEndObject(); | ||||
writer.WriteNumber($"[{value.StatusFlag.ReadNumber()}]状态位标志", value.StatusFlag); | |||||
writer.WriteNumber($"[{value.StatusFlag.ReadBinary().ToString()}]状态位标志", value.StatusFlag); | |||||
var StatusFlagBits = Convert.ToString(value.StatusFlag, 2).PadLeft(32, '0').AsSpan(); | var StatusFlagBits = Convert.ToString(value.StatusFlag, 2).PadLeft(32, '0').AsSpan(); | ||||
writer.WriteStartObject("状态标志对象"); | writer.WriteStartObject("状态标志对象"); | ||||
if (reader.Version == JT808Version.JTT2019) | if (reader.Version == JT808Version.JTT2019) | ||||