200 lines
8.5 KiB
C#
200 lines
8.5 KiB
C#
using Prism.Events;
|
|
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using XP.Hardware.Detector.Abstractions;
|
|
using XP.Hardware.Detector.Abstractions.Enums;
|
|
using XP.Hardware.Detector.Config;
|
|
|
|
namespace XP.Hardware.Detector.Implementations
|
|
{
|
|
/// <summary>
|
|
/// iRay 探测器实现 | iRay detector implementation
|
|
/// 继承抽象基类,实现 iRay 专属接口 | Inherits abstract base class, implements iRay specific interface
|
|
/// 注意:iRay 探测器实现待后续完成,当前为占位符 | Note: iRay detector implementation to be completed later, currently placeholder
|
|
/// </summary>
|
|
public class IRayDetector : AreaDetectorBase, IIRayDetector
|
|
{
|
|
private readonly IRayDetectorConfig _config;
|
|
private AcquisitionMode _acquisitionMode;
|
|
private double _gain;
|
|
|
|
/// <summary>
|
|
/// 探测器类型 | Detector type
|
|
/// </summary>
|
|
public override DetectorType Type => DetectorType.IRay;
|
|
|
|
/// <summary>
|
|
/// 构造函数 | Constructor
|
|
/// </summary>
|
|
/// <param name="config">iRay 探测器配置 | iRay detector configuration</param>
|
|
/// <param name="eventAggregator">事件聚合器 | Event aggregator</param>
|
|
public IRayDetector(IRayDetectorConfig config, IEventAggregator eventAggregator)
|
|
: base(eventAggregator)
|
|
{
|
|
_config = config ?? throw new ArgumentNullException(nameof(config));
|
|
_acquisitionMode = config.AcquisitionMode;
|
|
_gain = config.DefaultGain;
|
|
}
|
|
|
|
#region IAreaDetector 抽象方法实现 | IAreaDetector abstract method implementations
|
|
|
|
/// <summary>
|
|
/// 初始化探测器(内部实现)| Initialize detector (internal implementation)
|
|
/// </summary>
|
|
protected override Task<DetectorResult> InitializeInternalAsync(CancellationToken cancellationToken)
|
|
{
|
|
// TODO: 实现 iRay 探测器初始化逻辑 | Implement iRay detector initialization logic
|
|
throw new NotImplementedException("iRay 探测器初始化尚未实现 | iRay detector initialization not implemented yet");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 启动连续采集(内部实现)| Start continuous acquisition (internal implementation)
|
|
/// </summary>
|
|
protected override Task<DetectorResult> StartAcquisitionInternalAsync(CancellationToken cancellationToken)
|
|
{
|
|
// TODO: 实现 iRay 探测器启动采集逻辑 | Implement iRay detector start acquisition logic
|
|
throw new NotImplementedException("iRay 探测器启动采集尚未实现 | iRay detector start acquisition not implemented yet");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 停止采集(内部实现)| Stop acquisition (internal implementation)
|
|
/// </summary>
|
|
protected override Task<DetectorResult> StopAcquisitionInternalAsync(CancellationToken cancellationToken)
|
|
{
|
|
// TODO: 实现 iRay 探测器停止采集逻辑 | Implement iRay detector stop acquisition logic
|
|
throw new NotImplementedException("iRay 探测器停止采集尚未实现 | iRay detector stop acquisition not implemented yet");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 单帧采集(内部实现)| Single frame acquisition (internal implementation)
|
|
/// </summary>
|
|
protected override Task<DetectorResult> AcquireSingleFrameInternalAsync(CancellationToken cancellationToken)
|
|
{
|
|
// TODO: 实现 iRay 探测器单帧采集逻辑 | Implement iRay detector single frame acquisition logic
|
|
throw new NotImplementedException("iRay 探测器单帧采集尚未实现 | iRay detector single frame acquisition not implemented yet");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 暗场校正(内部实现)| Dark field correction (internal implementation)
|
|
/// </summary>
|
|
protected override Task<DetectorResult> DarkCorrectionInternalAsync(int frameCount, CancellationToken cancellationToken)
|
|
{
|
|
// TODO: 实现 iRay 探测器暗场校正逻辑 | Implement iRay detector dark correction logic
|
|
throw new NotImplementedException("iRay 探测器暗场校正尚未实现 | iRay detector dark correction not implemented yet");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 增益校正(内部实现)| Gain correction (internal implementation)
|
|
/// </summary>
|
|
protected override Task<DetectorResult> GainCorrectionInternalAsync(int frameCount, CancellationToken cancellationToken)
|
|
{
|
|
// TODO: 实现 iRay 探测器增益校正逻辑 | Implement iRay detector gain correction logic
|
|
throw new NotImplementedException("iRay 探测器增益校正尚未实现 | iRay detector gain correction not implemented yet");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 自动校正(内部实现)| Auto correction (internal implementation)
|
|
/// </summary>
|
|
protected override Task<DetectorResult> AutoCorrectionInternalAsync(int frameCount, CancellationToken cancellationToken)
|
|
{
|
|
// TODO: 实现 iRay 探测器自动校正逻辑 | Implement iRay detector auto correction logic
|
|
throw new NotImplementedException("iRay 探测器自动校正尚未实现 | iRay detector auto correction not implemented yet");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 坏像素校正(内部实现)| Bad pixel correction (internal implementation)
|
|
/// </summary>
|
|
protected override Task<DetectorResult> BadPixelCorrectionInternalAsync(CancellationToken cancellationToken)
|
|
{
|
|
// TODO: 实现 iRay 探测器坏像素校正逻辑 | Implement iRay detector bad pixel correction logic
|
|
throw new NotImplementedException("iRay 探测器坏像素校正尚未实现 | iRay detector bad pixel correction not implemented yet");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取探测器信息 | Get detector information
|
|
/// </summary>
|
|
public override DetectorInfo GetInfo()
|
|
{
|
|
// TODO: 实现 iRay 探测器信息查询逻辑 | Implement iRay detector info query logic
|
|
return new DetectorInfo
|
|
{
|
|
Type = DetectorType.IRay,
|
|
Model = "iRay (待实现 | To be implemented)",
|
|
SerialNumber = "N/A",
|
|
FirmwareVersion = "N/A",
|
|
MaxWidth = 0,
|
|
MaxHeight = 0,
|
|
PixelSize = 0.0,
|
|
BitDepth = 16
|
|
};
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IIRayDetector 接口实现 | IIRayDetector interface implementations
|
|
|
|
/// <summary>
|
|
/// 设置采集模式 | Set acquisition mode
|
|
/// </summary>
|
|
public Task<DetectorResult> SetAcquisitionModeAsync(AcquisitionMode mode)
|
|
{
|
|
// TODO: 实现 iRay 探测器设置采集模式逻辑 | Implement iRay detector set acquisition mode logic
|
|
_acquisitionMode = mode;
|
|
return Task.FromResult(DetectorResult.Success($"采集模式已设置为 {mode}(占位符实现)| Acquisition mode set to {mode} (placeholder implementation)"));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取采集模式 | Get acquisition mode
|
|
/// </summary>
|
|
public AcquisitionMode GetAcquisitionMode()
|
|
{
|
|
return _acquisitionMode;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置增益值 | Set gain value
|
|
/// </summary>
|
|
public Task<DetectorResult> SetGainAsync(double gain)
|
|
{
|
|
// TODO: 实现 iRay 探测器设置增益逻辑 | Implement iRay detector set gain logic
|
|
_gain = gain;
|
|
return Task.FromResult(DetectorResult.Success($"增益已设置为 {gain}(占位符实现)| Gain set to {gain} (placeholder implementation)"));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取增益值 | Get gain value
|
|
/// </summary>
|
|
public double GetGain()
|
|
{
|
|
return _gain;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 资源释放 | Resource disposal
|
|
|
|
/// <summary>
|
|
/// 释放资源 | Dispose resources
|
|
/// </summary>
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (!_disposed)
|
|
{
|
|
if (disposing)
|
|
{
|
|
// TODO: 释放 iRay 探测器托管资源 | Release iRay detector managed resources
|
|
}
|
|
|
|
// TODO: 释放 iRay 探测器非托管资源 | Release iRay detector unmanaged resources
|
|
|
|
_disposed = true;
|
|
}
|
|
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|