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;
}
}