namespace RobotNet10.RobotApp.Modules; /// /// No-op lift module used when hardware lift module is not enabled. /// public sealed class NoOpLiftModule : ILiftModule { public bool Enable => false; public bool IsReady => false; public LiftModuleState State => LiftModuleState.Uninitialized; public LiftPosition Position => LiftPosition.Bottom; public Task LiftUpAsync(CancellationToken cancellationToken = default) => Task.CompletedTask; public Task LiftDownAsync(CancellationToken cancellationToken = default) => Task.CompletedTask; public Task LiftStopAsync(CancellationToken cancellationToken = default) => Task.CompletedTask; public Task LiftToPositionAsync(int position, CancellationToken cancellationToken = default) => Task.CompletedTask; public Task GetCurrentPositionAsync(CancellationToken cancellationToken = default) => Task.FromResult(0); public Task IsHomedAsync(CancellationToken cancellationToken = default) => Task.FromResult(false); public Task HomeAsync(CancellationToken cancellationToken = default) => Task.CompletedTask; public int GetPositionFromHeightM(double heightM) => 0; } /// /// No-op rotation module used when hardware rotation module is not enabled. /// public sealed class NoOpRotationModule : IRotationModule { public bool Enable => false; public bool IsReady => false; public RotationModuleState State => RotationModuleState.Uninitialized; public Task RotateToAngleAsync(double angleDegrees, CancellationToken cancellationToken = default) => Task.CompletedTask; public Task RotateOffsetAsync(double angleOffsetDegrees, CancellationToken cancellationToken = default) => Task.CompletedTask; public Task GetCurrentAngleAsync(CancellationToken cancellationToken = default) => Task.FromResult(0.0); public Task IsHomedAsync(CancellationToken cancellationToken = default) => Task.FromResult(false); }