void SendDistanceFocusMove(float distance) { SetFocusSettingsStatus(FocusSettingsStatus.Waiting); panelPositionFocusMove.IsEnabled = false; var relative = new RelativeFocus() { distance = distance }; if (model.moveOptions.relative.speed != null) { relative.speed = model.moveOptions.relative.speed.max; relative.speedSpecified = true; } var focus = new FocusMove() { relative = relative }; //disposables += (IDisposable)null; disposables.Add(session.Move(model.sourceToken, focus).ObserveOnCurrentDispatcher().Subscribe( u => { ReceiveFocusPosition(); }, err => { SetFocusSettingsStatus(FocusSettingsStatus.Error, err.Message); panelPositionFocusMove.IsEnabled = true; } )); }
private async Task FocusMoveAsync(FocusMoveDirection focusMoveDirection) { IsBusy = true; var relativeFocus = new RelativeFocus(); switch (focusMoveDirection) { case FocusMoveDirection.None: break; case FocusMoveDirection.FocusIn: relativeFocus.Distance = 0.5f; break; case FocusMoveDirection.FocusOut: relativeFocus.Distance = -0.5f; break; default: throw new ArgumentOutOfRangeException(nameof(focusMoveDirection), focusMoveDirection, null); } try { await _onvifServiceAggregator.OnvifImagingService.SetImagingSettingsAsync(new SetImagingSettings { VideoSourceToken = VideoSourceToken, ImagingSettings = new ImagingSettings20 { Focus = new FocusConfiguration20 { AutoFocusMode = AutoFocusMode.MANUAL } } }); await _onvifServiceAggregator.OnvifImagingService.MoveAsync(new Move { VideoSourceToken = VideoSourceToken, Focus = new FocusMove { Relative = relativeFocus } }); } catch (OnvifServiceException e) { var toast = e.ToToastMessage(_parentViewModel); Messenger.Publish(toast); } catch (FaultException e) { var toast = e.ToToastMessage(_parentViewModel); Messenger.Publish(toast); } finally { IsBusy = false; } }