From 006930dc0d0f5f923b09a1c8342d0c31d69dba53 Mon Sep 17 00:00:00 2001 From: "Timur A. Fatkhullin" Date: Fri, 27 Feb 2026 12:29:21 +0300 Subject: [PATCH] ... --- asibfm700_mount.cpp | 22 +++++++++++++++++++++- asibfm700_mount.h | 3 +++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/asibfm700_mount.cpp b/asibfm700_mount.cpp index 491de37..2e0c347 100644 --- a/asibfm700_mount.cpp +++ b/asibfm700_mount.cpp @@ -33,6 +33,10 @@ Asibfm700Mount::Asibfm700Mount(Asibfm700MountConfig const& config, std::shared_p Asibfm700Mount::~Asibfm700Mount() { + stoppingImpl(); + + Mount.quit(); + logDebug("Delete Asibfm700Mount class instance ({})", this->getThreadId()); } @@ -476,6 +480,16 @@ Asibfm700Mount::error_t Asibfm700Mount::checkPZone(typename telemetry_t::telemet Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop) { + // if mount is already slewing then stop and re-slew + if (_mountStatus->load() == mount_status_t::MOUNT_STATUS_SLEWING || + _mountStatus->load() == mount_status_t::MOUNT_STATUS_ADJUSTING) { + *_lastMountError = stoppingImpl(); + + if (_lastMountError->load()) { + return _lastMountError->load(); + } + } + _pathFile.clearPath(); _enteredBackupCoordinates = telemetry_t::getPointingTarget(); @@ -729,6 +743,10 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop) Asibfm700Mount::error_t Asibfm700Mount::trackingImpl() { + if (_mountStatus->load() == mount_status_t::MOUNT_STATUS_TRACKING) { // just ignore + return mcc::impl::MccGenericMovementControlsErrorCode::ERROR_OK; + } + *_mountStatus = mount_status_t::MOUNT_STATUS_TRACKING; _pathFile.clearPath(); @@ -859,9 +877,11 @@ Asibfm700Mount::error_t Asibfm700Mount::trackingImpl() Asibfm700Mount::error_t Asibfm700Mount::stoppingImpl() { + *_stopMovementRequest = true; + typename AsibFM700ServoController::hardware_state_t hw_state; - hw_state.movementState == AsibFM700ServoController::hardware_movement_state_t::HW_MOVE_STOPPING; + hw_state.movementState = AsibFM700ServoController::hardware_movement_state_t::HW_MOVE_STOPPING; *_lastMountError = sendToHardware(hw_state); diff --git a/asibfm700_mount.h b/asibfm700_mount.h index 9ae28b7..5fc0dde 100644 --- a/asibfm700_mount.h +++ b/asibfm700_mount.h @@ -19,12 +19,14 @@ class Asibfm700Mount : public mcc::impl::MccGenericMount, Asibfm700PZoneContainer, // mcc::impl::MccSimpleMovementControls, + // mcc::impl::MccGenericBlockingMovementControls, mcc::impl::MccGenericAsyncMovementControls, Asibfm700Logger> { typedef mcc::impl::MccGenericMount, Asibfm700PZoneContainer, // mcc::impl::MccSimpleMovementControls, + // mcc::impl::MccGenericBlockingMovementControls, mcc::impl::MccGenericAsyncMovementControls, Asibfm700Logger> gm_class_t; @@ -34,6 +36,7 @@ public: typedef mcc::impl::MccTelemetry telemetry_t; typedef mcc::impl::MccGenericAsyncMovementControls movement_controls_t; + // typedef mcc::impl::MccGenericBlockingMovementControls movement_controls_t; using typename gm_class_t::error_t; using typename movement_controls_t::movement_params_t;