@@ -17,7 +17,7 @@ | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\JTTools\JTTools.csproj" /> | |||
<ProjectReference Include="..\JTTools.Bak\JTTools.csproj" /> | |||
</ItemGroup> | |||
</Project> |
@@ -21,8 +21,8 @@ namespace JTTools.Test | |||
public JTToolsControllerTest() | |||
{ | |||
serviceDescriptors.AddJT808Configure() | |||
.AddJT1078Configure(); | |||
serviceDescriptors.AddJT808Configure(); | |||
//.AddJT1078Configure(); | |||
serviceDescriptors.AddJT809Configure() | |||
.AddJT1078Configure(); | |||
serviceDescriptors.AddSingleton<JTToolsController>(); | |||
@@ -51,5 +51,15 @@ namespace JTTools.Test | |||
Assert.Equal("ÔÁSEB408²â", jT809_0X1200.VehicleNo); | |||
Assert.Equal(JT809VehicleColorType.»ÆÉ«, jT809_0X1200.VehicleColor); | |||
} | |||
[Fact] | |||
public void Parse808Test1() | |||
{ | |||
var result=jTToolsController.Parse808(new JT809RequestDto() | |||
{ | |||
IsEncrypt=true, | |||
HexData= "7E 02 00 00 57 00 00 00 00 77 77 62 F7 00 08 00 00 00 04 00 03 01 66 53 A7 06 A2 55 F8 00 9E 00 00 00 00 20 03 31 07 00 35 01 04 00 00 00 00 03 02 00 00 21 08 00 00 00 A0 00 05 6F 67 25 04 00 00 00 00 2B 04 00 00 00 00 30 01 03 31 01 0C 16 04 00 00 0B FE 17 01 02 18 04 01 1D 00 00 14 04 00 00 00 02 8A 7E" | |||
}); | |||
} | |||
} | |||
} |
@@ -26,15 +26,21 @@ namespace JTTools.Controllers | |||
private readonly IJT809Config jT809Config; | |||
private readonly IJT808Config jT808Config; | |||
private readonly JT808Serializer jT808Serializer; | |||
private readonly JT808Serializer jT808_JTAS_Serializer; | |||
private readonly JT808Serializer jT808_JT1078Serializer; | |||
private readonly JT809Serializer jT809Serializer; | |||
public JTToolsController( | |||
JT808_JTActiveSafety_Config jT808_JTActiveSafety_Config, | |||
JT808_JT1078_Config jT808_JT1078_Config, | |||
IJT809Config jT809Config, | |||
IJT808Config jT808Config) | |||
{ | |||
this.jT809Config = jT809Config; | |||
this.jT808Config = jT808Config; | |||
jT808Serializer = jT808Config.GetSerializer(); | |||
jT808_JTAS_Serializer = jT808_JTActiveSafety_Config.GetSerializer(); | |||
jT808_JT1078Serializer = jT808_JT1078_Config.GetSerializer(); | |||
jT809Serializer = jT809Config.GetSerializer(); | |||
} | |||
@@ -46,7 +52,8 @@ namespace JTTools.Controllers | |||
try | |||
{ | |||
jTResultDto.Code = 200; | |||
jTResultDto.Data =jT808Serializer.Deserialize(parameter.HexData.ToHexBytes()); | |||
var a = parameter.HexData.ToHexBytes(); | |||
jTResultDto.Data =jT808Serializer.Deserialize(a); | |||
} | |||
catch(JT808Exception ex) | |||
{ | |||
@@ -84,6 +91,52 @@ namespace JTTools.Controllers | |||
return jTResultDto; | |||
} | |||
[Route("Analyze808ExtJTAS")] | |||
[HttpPost] | |||
public ActionResult<JTResultDto> Analyze808ExtJTAS([FromBody]JTRequestDto parameter) | |||
{ | |||
JTResultDto jTResultDto = new JTResultDto(); | |||
try | |||
{ | |||
jTResultDto.Code = 200; | |||
jTResultDto.Data = jT808_JTAS_Serializer.Analyze(parameter.HexData.ToHexBytes()); | |||
} | |||
catch (JT808Exception ex) | |||
{ | |||
jTResultDto.Code = 500; | |||
jTResultDto.Message = $"{ex.ErrorCode}-{ex.Message}"; | |||
} | |||
catch (Exception ex) | |||
{ | |||
jTResultDto.Code = 500; | |||
jTResultDto.Message = ex.Message; | |||
} | |||
return jTResultDto; | |||
} | |||
[Route("Analyze808ExtJT1078")] | |||
[HttpPost] | |||
public ActionResult<JTResultDto> Analyze808ExtJT1078([FromBody]JTRequestDto parameter) | |||
{ | |||
JTResultDto jTResultDto = new JTResultDto(); | |||
try | |||
{ | |||
jTResultDto.Code = 200; | |||
jTResultDto.Data = jT808_JT1078Serializer.Analyze(parameter.HexData.ToHexBytes()); | |||
} | |||
catch (JT808Exception ex) | |||
{ | |||
jTResultDto.Code = 500; | |||
jTResultDto.Message = $"{ex.ErrorCode}-{ex.Message}"; | |||
} | |||
catch (Exception ex) | |||
{ | |||
jTResultDto.Code = 500; | |||
jTResultDto.Message = ex.Message; | |||
} | |||
return jTResultDto; | |||
} | |||
[Route("Parse809")] | |||
[HttpPost] | |||
public ActionResult<JTResultDto> Parse809([FromBody]JT809RequestDto parameter) | |||
@@ -13,8 +13,8 @@ | |||
<!--<PackageReference Include="JT1078" Version="1.0.0" />--> | |||
<PackageReference Include="JT1078" Version="1.0.2" /> | |||
<PackageReference Include="JT808" Version="2.2.9" /> | |||
<PackageReference Include="JT808.Protocol.Extensions.JT1078" Version="2.2.7" /> | |||
<PackageReference Include="JT808.Protocol.Extensions.JTActiveSafety" Version="1.0.2" /> | |||
<PackageReference Include="JT808.Protocol.Extensions.JT1078" Version="2.2.8" /> | |||
<PackageReference Include="JT808.Protocol.Extensions.JTActiveSafety" Version="1.0.3" /> | |||
<PackageReference Include="JT809" Version="2.1.3" /> | |||
<PackageReference Include="JT809.Protocol.Extensions.JT1078" Version="2.1.3" /> | |||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.3" /> | |||
@@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Builder; | |||
using Microsoft.AspNetCore.Mvc; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using JT808.Protocol; | |||
using JT808.Protocol.Interfaces; | |||
using JT809.Protocol; | |||
using JT808.Protocol.Extensions.JT1078; | |||
using JT808.Protocol.Extensions.JTActiveSafety; | |||
@@ -27,8 +28,6 @@ namespace JTTools | |||
{ | |||
webBuilder.ConfigureServices((hostingContext, services) => | |||
{ | |||
services.AddRazorPages(); | |||
services.AddServerSideBlazor(); | |||
services.AddControllers() | |||
//Microsoft.AspNetCore.Mvc.NewtonsoftJson | |||
.AddNewtonsoftJson(jsonOptions => | |||
@@ -79,16 +78,16 @@ namespace JTTools | |||
app.UseEndpoints(endpoints => | |||
{ | |||
endpoints.MapControllers(); | |||
endpoints.MapBlazorHub(); | |||
endpoints.MapFallbackToPage("/_Host"); | |||
}); | |||
}); | |||
}) | |||
.ConfigureServices(services => | |||
{ | |||
services.AddJT808Configure() | |||
.AddJT1078Configure() | |||
.AddJTActiveSafetyConfigure(); | |||
services.AddJT808Configure(); | |||
services.AddJT808Configure(new JT808_JTActiveSafety_Config()) | |||
.AddJTActiveSafetyConfigure(); | |||
services.AddJT808Configure(new JT808_JT1078_Config()) | |||
.AddJT1078Configure(); | |||
services.AddJT809Configure() | |||
.AddJT1078Configure(); | |||
}) | |||
@@ -96,4 +95,14 @@ namespace JTTools | |||
.Run(); | |||
} | |||
} | |||
public class JT808_JTActiveSafety_Config : GlobalConfigBase | |||
{ | |||
public override string ConfigId { get; protected set; } = "JT808_JTActiveSafety_Config"; | |||
} | |||
public class JT808_JT1078_Config : GlobalConfigBase | |||
{ | |||
public override string ConfigId { get; protected set; } = "JT808_JT1078_Config"; | |||
} | |||
} |
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 | |||
# Visual Studio Version 16 | |||
VisualStudioVersion = 16.0.29123.88 | |||
MinimumVisualStudioVersion = 10.0.40219.1 | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTTools", "JTTools\JTTools.csproj", "{BBDC3FB3-B267-4BFB-803E-71287D361300}" | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTTools", "JTTools\JTTools.csproj", "{295AB139-27E0-45AE-8E95-A3D0F1E4161F}" | |||
EndProject | |||
Global | |||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
@@ -11,10 +11,10 @@ Global | |||
Release|Any CPU = Release|Any CPU | |||
EndGlobalSection | |||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||
{BBDC3FB3-B267-4BFB-803E-71287D361300}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{BBDC3FB3-B267-4BFB-803E-71287D361300}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{BBDC3FB3-B267-4BFB-803E-71287D361300}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{BBDC3FB3-B267-4BFB-803E-71287D361300}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{295AB139-27E0-45AE-8E95-A3D0F1E4161F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{295AB139-27E0-45AE-8E95-A3D0F1E4161F}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{295AB139-27E0-45AE-8E95-A3D0F1E4161F}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{295AB139-27E0-45AE-8E95-A3D0F1E4161F}.Release|Any CPU.Build.0 = Release|Any CPU | |||
EndGlobalSection | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||
@@ -1,15 +0,0 @@ | |||
using System; | |||
namespace JTTools.Data | |||
{ | |||
public class WeatherForecast | |||
{ | |||
public DateTime Date { get; set; } | |||
public int TemperatureC { get; set; } | |||
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); | |||
public string Summary { get; set; } | |||
} | |||
} |
@@ -1,25 +0,0 @@ | |||
using System; | |||
using System.Linq; | |||
using System.Threading.Tasks; | |||
namespace JTTools.Data | |||
{ | |||
public class WeatherForecastService | |||
{ | |||
private static readonly string[] Summaries = new[] | |||
{ | |||
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" | |||
}; | |||
public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate) | |||
{ | |||
var rng = new Random(); | |||
return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast | |||
{ | |||
Date = startDate.AddDays(index), | |||
TemperatureC = rng.Next(-20, 55), | |||
Summary = Summaries[rng.Next(Summaries.Length)] | |||
}).ToArray()); | |||
} | |||
} | |||
} |
@@ -1,16 +0,0 @@ | |||
@page "/counter" | |||
<h1>Counter</h1> | |||
<p>Current count: @currentCount</p> | |||
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button> | |||
@code { | |||
private int currentCount = 0; | |||
private void IncrementCount() | |||
{ | |||
currentCount++; | |||
} | |||
} |
@@ -1,46 +0,0 @@ | |||
@page "/fetchdata" | |||
@using JTTools.Data | |||
@inject WeatherForecastService ForecastService | |||
<h1>Weather forecast</h1> | |||
<p>This component demonstrates fetching data from a service.</p> | |||
@if (forecasts == null) | |||
{ | |||
<p><em>Loading...</em></p> | |||
} | |||
else | |||
{ | |||
<table class="table"> | |||
<thead> | |||
<tr> | |||
<th>Date</th> | |||
<th>Temp. (C)</th> | |||
<th>Temp. (F)</th> | |||
<th>Summary</th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@foreach (var forecast in forecasts) | |||
{ | |||
<tr> | |||
<td>@forecast.Date.ToShortDateString()</td> | |||
<td>@forecast.TemperatureC</td> | |||
<td>@forecast.TemperatureF</td> | |||
<td>@forecast.Summary</td> | |||
</tr> | |||
} | |||
</tbody> | |||
</table> | |||
} | |||
@code { | |||
private WeatherForecast[] forecasts; | |||
protected override async Task OnInitializedAsync() | |||
{ | |||
forecasts = await ForecastService.GetForecastAsync(DateTime.Now); | |||
} | |||
} |
@@ -0,0 +1,30 @@ | |||
@page "/jt1078" | |||
@using JT1078.Protocol; | |||
@using JT1078.Protocol.Extensions; | |||
@using Newtonsoft.Json; | |||
<h3>JT1078Parse</h3> | |||
<p>Hex: @HexData</p> | |||
<button class="btn btn-primary" @onclick="Query">解析</button> | |||
<div class="right"> | |||
@Json | |||
</div> | |||
@code { | |||
private string HexData = "30 31 63 64 81 E2 10 88 01 12 34 56 78 10 01 10 00 00 01 6B B3 92 CA 7C 02 80 00 28 00 2E 00 00 00 01 61 E1 A2 BF 00 98 CF C0 EE 1E 17 28 34 07 78 8E 39 A4 03 FD DB D1 D5 46 BF B0 63 01 3F 59 AC 34 C9 7A 02 1A B9 6A 28 A4 2C 08"; | |||
private string Json; | |||
private void Query() | |||
{ | |||
var data = HexData.ToHexBytes(); | |||
Json = JsonConvert.SerializeObject(JT1078Serializer.Deserialize(data)); | |||
} | |||
} |
@@ -0,0 +1,48 @@ | |||
@page "/jt19056analyze" | |||
@using JT808.Protocol; | |||
@using JT808.Protocol.Extensions; | |||
@using Newtonsoft.Json; | |||
@inject IJT808Config Config | |||
<h3>jt808analyze</h3> | |||
<p>Up Hex: @UpHexData</p> | |||
<p>Down Hex: @DownHexData</p> | |||
<button class="btn btn-primary" @onclick="UpQuery">上行分析</button> | |||
<button class="btn btn-primary" @onclick="DownQuery">下行分析</button> | |||
<div class="right"> | |||
@UpJson | |||
<br /> | |||
@DownJson | |||
</div> | |||
@code { | |||
private JT808CarDVRSerializer Serializer; | |||
private string UpHexData = "7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E"; | |||
private string DownHexData = "7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E"; | |||
private string UpJson; | |||
private string DownJson; | |||
protected override void OnInitialized() | |||
{ | |||
Serializer = Config.GetCarDVRSerializer(); | |||
} | |||
private void UpQuery() | |||
{ | |||
var data = UpHexData.ToHexBytes(); | |||
UpJson = Serializer.UpAnalyze(data); | |||
} | |||
private void DownQuery() | |||
{ | |||
var data = DownHexData.ToHexBytes(); | |||
DownJson = Serializer.UpAnalyze(data); | |||
} | |||
} |
@@ -3,10 +3,17 @@ | |||
@using JT808.Protocol; | |||
@using JT808.Protocol.Extensions; | |||
@using Newtonsoft.Json; | |||
@inject IJT808Config JT808Config | |||
@inject IJT808Config Config | |||
<h3>jt808analyze</h3> | |||
@*<select class="btn-success" onchange=@DoStuff> | |||
<option value="JT808">国标</option> | |||
<option value="JT808_JT1078">国标扩展JT1078</option> | |||
<option value="JT808_JTAS">国标扩展主动安全(苏标)</option> | |||
</select>*@ | |||
<p>@protocolType</p> | |||
<p>Hex: @HexData</p> | |||
<button class="btn btn-primary" @onclick="Query">分析</button> | |||
@@ -15,16 +22,29 @@ | |||
@Json | |||
</div> | |||
@functions { | |||
string selectedString = "JT808"; | |||
void DoStuff(ChangeEventArgs e) | |||
{ | |||
selectedString = e.Value.ToString(); | |||
Console.WriteLine("It is definitely: " + selectedString); | |||
} | |||
} | |||
@code { | |||
private JT808Serializer Serializer; | |||
string protocolType = "JT808"; | |||
private string HexData = "7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E"; | |||
private string Json; | |||
protected override void OnInitialized() | |||
{ | |||
Serializer = JT808Config.GetSerializer(); | |||
Serializer = Config.GetSerializer(); | |||
} | |||
private void Query() | |||
@@ -3,7 +3,7 @@ | |||
@using JT808.Protocol; | |||
@using JT808.Protocol.Extensions; | |||
@using Newtonsoft.Json; | |||
@inject IJT808Config JT808Config | |||
@inject IJT808Config Config | |||
<h3>JT808Parse</h3> | |||
@@ -24,7 +24,7 @@ | |||
protected override void OnInitialized() | |||
{ | |||
Serializer = JT808Config.GetSerializer(); | |||
Serializer = Config.GetSerializer(); | |||
} | |||
private void Query() | |||
@@ -0,0 +1,35 @@ | |||
@page "/jt809" | |||
@using JT809.Protocol; | |||
@using JT809.Protocol.Extensions; | |||
@using Newtonsoft.Json; | |||
@inject IJT809Config Config | |||
<h3>JT809Parse</h3> | |||
<p>Hex: @HexData</p> | |||
<button class="btn btn-primary" @onclick="Query">解析</button> | |||
<div class="right"> | |||
@Json | |||
</div> | |||
@code { | |||
private JT809Serializer Serializer; | |||
private string HexData = "5B 00 00 00 92 00 00 06 82 94 00 01 33 EF B8 01 00 00 00 00 00 27 0F D4 C1 41 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 02 94 01 00 00 00 5C 01 00 02 00 00 00 00 5A 01 AC 3F 40 12 3F FA A1 00 00 00 00 5A 01 AC 4D 50 03 73 6D 61 6C 6C 63 68 69 00 00 00 00 00 00 00 00 31 32 33 34 35 36 37 38 39 30 31 00 00 00 00 00 00 00 00 00 31 32 33 34 35 36 40 71 71 2E 63 6F 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BA D8 5D"; | |||
private string Json; | |||
protected override void OnInitialized() | |||
{ | |||
Serializer = Config.GetSerializer(); | |||
} | |||
private void Query() | |||
{ | |||
var data = HexData.ToHexBytes(); | |||
Json = JsonConvert.SerializeObject(Serializer.Deserialize(data)); | |||
} | |||
} |
@@ -17,7 +17,6 @@ using Microsoft.AspNetCore.Builder; | |||
using Microsoft.AspNetCore.Components; | |||
using Microsoft.AspNetCore.HttpsPolicy; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using JTTools.Data; | |||
using Newtonsoft.Json.Serialization; | |||
namespace JTTools | |||
@@ -33,7 +32,6 @@ namespace JTTools | |||
{ | |||
services.AddRazorPages(); | |||
services.AddServerSideBlazor(); | |||
services.AddSingleton<WeatherForecastService>(); | |||
services.AddControllers() | |||
//Microsoft.AspNetCore.Mvc.NewtonsoftJson | |||
.AddNewtonsoftJson(jsonOptions => | |||
@@ -13,23 +13,23 @@ | |||
</NavLink> | |||
</li> | |||
<li class="nav-item px-3"> | |||
<NavLink class="nav-link" href="jt808"> | |||
<span class="oi oi-plus" aria-hidden="true"></span> JT808解析工具 | |||
<NavLink class="nav-link" href="jt808analyze"> | |||
<span class="oi oi-plus" aria-hidden="true"></span>JT808分析工具 | |||
</NavLink> | |||
</li> | |||
</li> | |||
<li class="nav-item px-3"> | |||
<NavLink class="nav-link" href="jt808analyze"> | |||
<span class="oi oi-plus" aria-hidden="true"></span> JT808分析工具 | |||
<NavLink class="nav-link" href="jt809"> | |||
<span class="oi oi-plus" aria-hidden="true"></span>JT809解析工具 | |||
</NavLink> | |||
</li> | |||
<li class="nav-item px-3"> | |||
<NavLink class="nav-link" href="counter"> | |||
<span class="oi oi-plus" aria-hidden="true"></span> Counter | |||
<NavLink class="nav-link" href="jt1078"> | |||
<span class="oi oi-plus" aria-hidden="true"></span>JT1078解析工具 | |||
</NavLink> | |||
</li> | |||
<li class="nav-item px-3"> | |||
<NavLink class="nav-link" href="fetchdata"> | |||
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data | |||
<NavLink class="nav-link" href="jt19056analyze"> | |||
<span class="oi oi-plus" aria-hidden="true"></span>JT19056分析工具 | |||
</NavLink> | |||
</li> | |||
</ul> | |||