using System.Diagnostics;
using System.Text.Json;
namespace XFEEDToolBox.Core.Navigation;
internal static class PhysicalInputPreparation
{
internal const string NativeDisabledContextPending="Original physical input sources unavailable: original-flight-contexts-disabled-unconfirmed";
internal static async Task RequireAsync(NavigationPipeClient pipe,CancellationToken token)
{
var watch=Stopwatch.StartNew();
while(true)
{
var result=await pipe.CallAsync(new{op="input.physical.read",prepare=true},token);
if(result.TryGetProperty("ready",out var ready)&&ready.ValueKind==JsonValueKind.True)
{
if(result.GetProperty("magnitude").GetDouble()>.18)throw new InvalidOperationException("检测到实际操纵输入,请松开操纵后再启动自动驾驶。");
return;
}
var issue=result.TryGetProperty("issue",out var value)?value.GetString():"unknown-source";
// A disabled original graph must stay empty across distinct real
// physics frames. No retry converts an unknown source to neutral.
if(issue=="original-flight-contexts-disabled-unconfirmed"&&watch.Elapsed<TimeSpan.FromSeconds(1))
{await Task.Delay(60,token);continue;}
throw new InvalidOperationException("原始物理操纵来源尚未完成验证,无法准备自动驾驶:"+issue);
}
}
}
using System.Diagnostics;
using System.Text.Json;
namespace XFEEDToolBox.Core.Navigation;
internal static class PhysicalInputPreparation
{
internal const string NativeDisabledContextPending="Original physical input sources unavailable: original-flight-contexts-disabled-unconfirmed";
internal static async Task RequireAsync(NavigationPipeClient pipe,CancellationToken token)
{
var watch=Stopwatch.StartNew();
while(true)
{
var result=await pipe.CallAsync(new{op="input.physical.read",prepare=true},token);
if(result.TryGetProperty("ready",out var ready)&&ready.ValueKind==JsonValueKind.True)
{
if(result.GetProperty("magnitude").GetDouble()>.18)throw new InvalidOperationException("检测到实际操纵输入,请松开操纵后再启动自动驾驶。");
return;
}
var issue=result.TryGetProperty("issue",out var value)?value.GetString():"unknown-source";
// A disabled original graph must stay empty across distinct real
// physics frames. No retry converts an unknown source to neutral.
if(issue=="original-flight-contexts-disabled-unconfirmed"&&watch.Elapsed<TimeSpan.FromSeconds(1))
{await Task.Delay(60,token);continue;}
throw new InvalidOperationException("原始物理操纵来源尚未完成验证,无法准备自动驾驶:"+issue);
}
}
}