探测器XP.Hardware.Detector类库为了更好集成新的探测器,统一接口方法,DetectorService重构为通过统一接口;

新增暗场校正和亮场校正帧数配置属性(默认 64,范围 1-128),config 加载校正帧数;
修正探测器IsConnected连接状态的判断逻辑。
This commit is contained in:
QI Mingxuan
2026-05-21 13:19:30 +08:00
parent 119d03a02b
commit 2d7cf17a3b
12 changed files with 333 additions and 69 deletions
@@ -386,6 +386,44 @@ namespace XP.Hardware.Detector.Abstractions
/// </summary>
public abstract DetectorInfo GetInfo();
/// <summary>
/// 应用探测器参数 | Apply detector parameters
/// </summary>
public async Task<DetectorResult> ApplyParametersAsync(int binningIndex, int pga, decimal frameRate, CancellationToken cancellationToken = default)
{
if (Status != DetectorStatus.Ready)
{
return DetectorResult.Failure($"探测器状态不正确,当前状态:{Status} | Detector status incorrect, current status: {Status}");
}
try
{
return await ApplyParametersInternalAsync(binningIndex, pga, frameRate, cancellationToken);
}
catch (Exception ex)
{
var errorResult = DetectorResult.Failure($"应用参数异常 | Apply parameters exception: {ex.Message}", ex);
PublishError(errorResult);
return errorResult;
}
}
/// <summary>
/// 获取校正能力描述(子类可重写)| Get correction capabilities (subclass can override)
/// </summary>
public virtual CorrectionCapabilities GetCorrectionCapabilities()
{
return new CorrectionCapabilities();
}
/// <summary>
/// 显式失效校正数据(子类可重写)| Explicitly invalidate correction data (subclass can override)
/// </summary>
public virtual void InvalidateCorrectionData()
{
// 默认空实现,子类按需重写 | Default empty implementation, subclass overrides as needed
}
// 模板方法,由子类实现 | Template methods, implemented by derived classes
protected abstract Task<DetectorResult> InitializeInternalAsync(CancellationToken cancellationToken);
protected abstract Task<DetectorResult> StartAcquisitionInternalAsync(CancellationToken cancellationToken);
@@ -395,6 +433,7 @@ namespace XP.Hardware.Detector.Abstractions
protected abstract Task<DetectorResult> GainCorrectionInternalAsync(int frameCount, CancellationToken cancellationToken);
protected abstract Task<DetectorResult> AutoCorrectionInternalAsync(int frameCount, CancellationToken cancellationToken);
protected abstract Task<DetectorResult> BadPixelCorrectionInternalAsync(CancellationToken cancellationToken);
protected abstract Task<DetectorResult> ApplyParametersInternalAsync(int binningIndex, int pga, decimal frameRate, CancellationToken cancellationToken);
/// <summary>
/// 更新状态并发布事件 | Update status and publish event