public static async Task<ScannerAutoFocus> StartAsync(FocusControl control)
{
var autoFocus = new ScannerAutoFocus(control);
AutoFocusRange range;
if (control.SupportedFocusRanges.Contains(AutoFocusRange.FullRange))
{
range = AutoFocusRange.FullRange;
}
else if (control.SupportedFocusRanges.Contains(AutoFocusRange.Normal))
{
range = AutoFocusRange.Normal;
}
else
{
// Auto-focus disabled
return autoFocus;
}
FocusMode mode;
if (control.SupportedFocusModes.Contains(FocusMode.Continuous))
{
mode = FocusMode.Continuous;
}
else if (control.SupportedFocusModes.Contains(FocusMode.Single))
{
mode = FocusMode.Single;
}
else
{
// Auto-focus disabled
return autoFocus;
}
if (mode == FocusMode.Continuous)
{
// True continuous auto-focus
var settings = new FocusSettings()
{
AutoFocusRange = range,
Mode = mode,
WaitForFocus = false,
DisableDriverFallback = false
};
control.Configure(settings);
await control.FocusAsync();
}
else
{
// Simulated continuous auto-focus
var settings = new FocusSettings()
{
AutoFocusRange = range,
Mode = mode,
WaitForFocus = true,
DisableDriverFallback = false
};
control.Configure(settings);
var ignore = Task.Run(async () => { await autoFocus.DriveAutoFocusAsync(); });
}
return autoFocus;
}