using System; using System.Threading; using System.Threading.Tasks; namespace HC_APTBS.Services.Impl { /// /// Delegates DFI calibration operations to , /// resolving the K-Line port from . /// public sealed class CalibrationService : ICalibrationService { private readonly IKwpService _kwp; private readonly IConfigurationService _config; /// K-Line protocol service. /// Provides the K-Line port setting. public CalibrationService(IKwpService kwpService, IConfigurationService configService) { _kwp = kwpService; _config = configService; } // ── ICalibrationService ──────────────────────────────────────────────────── /// public async Task ReadDfiAsync(CancellationToken ct = default) { string raw = await _kwp.ReadDfiAsync(Port, ct); return double.TryParse(raw, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out double v) ? v : 0; } /// public async Task WriteDfiAsync(double dfiDegrees, CancellationToken ct = default) { int version = _config.Settings.PidLoopMs; // pump version stored via config TODO: expose string raw = await _kwp.WriteDfiAsync(Port, (float)dfiDegrees, version, ct); return double.TryParse(raw, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out double v) ? v : 0; } /// public async Task WriteDfiAndRestartAsync(double dfiDegrees, CancellationToken ct = default) { int version = _config.Settings.PidLoopMs; // pump version string raw = await _kwp.WriteDfiAndRestartAsync(Port, (float)dfiDegrees, version, ct); return double.TryParse(raw, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out double v) ? v : 0; } private string Port => _kwp.DetectKLinePort() ?? string.Empty; } }