// using System; // using System.Collections.Generic; // using System.Threading; // using ClumsyCore.Pilot; // namespace MultiWheelC // { // public class Sleep : MovementDefinition // { // public float Second = 2f; // public override IEnumerable Get() // { // if (Second <= 0) // { // yield return false; // yield break; // } // var endTime = DateTime.UtcNow.AddSeconds(Second); // while (DateTime.UtcNow < endTime) // { // Thread.Sleep(50); // yield return true; // } // yield return false; // } // } // public class DriverAble : MovementDefinition // { // public int WaitTimeoutMs = 2000; // public int PollIntervalMs = 50; // // C层单车硬件:请求全部驱动轮复位并恢复使能。 // public override IEnumerable Get() // { // PilotDefinition.Self.ResetFromC = true; // try // { // var start = DateTime.Now; // var timeoutMs = Math.Max(0, WaitTimeoutMs); // var pollMs = Math.Max(1, PollIntervalMs); // // 至少保留一个调度周期,确保M层能收到复位请求。 // yield return true; // while (!PilotDefinition.Self.WheelAbleState && // (DateTime.Now - start).TotalMilliseconds < timeoutMs) // { // Thread.Sleep(pollMs); // yield return true; // } // } // finally // { // PilotDefinition.Self.ResetFromC = false; // } // } // } // public class DriverDisable : MovementDefinition // { // public int WaitTimeoutMs = 3000; // public int PollIntervalMs = 20; // // C层单车硬件:请求驱动轮退出使能,并等待M层状态反馈。 // public override IEnumerable Get() // { // var timeoutMs = Math.Max(0, WaitTimeoutMs); // var pollMs = Math.Max(1, PollIntervalMs); // var startTime = DateTime.UtcNow; // var success = false; // PilotDefinition.Self.DisableFromC = true; // try // { // // 至少保持一个C层调度周期,确保M层能收到下使能请求。 // yield return true; // success = !PilotDefinition.Self.WheelAbleState; // while (!success && // (DateTime.UtcNow - startTime).TotalMilliseconds < // timeoutMs) // { // Thread.Sleep(pollMs); // success = // !PilotDefinition.Self.WheelAbleState; // if (!success) // { // yield return true; // } // } // } // finally // { // // 无论正常完成、超时、异常还是任务被停止,都撤销请求。 // PilotDefinition.Self.DisableFromC = false; // } // if (success) // { // Console.WriteLine( // $"驱动器下使能完成," + // $"WheelAbleState=" + // $"{PilotDefinition.Self.WheelAbleState}"); // } // else // { // Console.WriteLine( // $"驱动器下使能超时," + // $"WheelAbleState=" + // $"{PilotDefinition.Self.WheelAbleState}," + // $"等待{timeoutMs}ms"); // } // yield return false; // } // } // }