fix stopping

This commit is contained in:
2026-06-10 17:49:32 +03:00
parent 4ed2a93cdd
commit 981a9ef074
2 changed files with 24 additions and 11 deletions

View File

@@ -551,11 +551,11 @@ 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();
// *_lastMountError = stoppingImpl();
if (_lastMountError->load()) {
return _lastMountError->load();
}
// if (_lastMountError->load()) {
// return _lastMountError->load();
// }
}
*_stopMovementRequest = false;
@@ -623,14 +623,17 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
typename hardware_t::hardware_state_t hw_state;
using ep_t = decltype(hw_state.XY.epoch());
hw_state.movementState = hardware_t::hardware_movement_state_t::HW_MOVE_SLEWING;
// hw_state.movementState = hardware_t::hardware_movement_state_t::HW_MOVE_ADJUSTING;
if (slew_and_stop){
hw_state.movementState = hardware_t::hardware_movement_state_t::HW_MOVE_SLEWING;
} else { // set to "HW_MOVE_ADJUSTING" to call LibSidServo's 'correctTo' function
hw_state.movementState = hardware_t::hardware_movement_state_t::HW_MOVE_ADJUSTING;
}
hw_state.XY.setX(tdata.targetXY.x());
hw_state.XY.setY(tdata.targetXY.y());
hw_state.XY.setEpoch(ep_t::now());
// start slewing (LibSidServo.moveTo) ...
// start slewing (LibSidServo.moveTo or LibSidServo.correctTo) ...
*_lastMountError = sendToHardware(hw_state);
@@ -981,6 +984,8 @@ Asibfm700Mount::error_t Asibfm700Mount::stoppingImpl()
typename AsibFM700ServoController::hardware_state_t hw_state;
const auto timeout = _mountConfig.getValue<std::chrono::seconds>("stopTimeout").value();
hw_state.movementState = AsibFM700ServoController::hardware_movement_state_t::HW_MOVE_STOPPING;
*_lastMountError = sendToHardware(hw_state);
@@ -992,15 +997,20 @@ Asibfm700Mount::error_t Asibfm700Mount::stoppingImpl()
*_lastMountError = _servolController.hardwareGetState(&hw_state);
logDebug(" wait for mount stopping (timeout is {} seconds) ...",
_mountConfig.getValue<std::chrono::seconds>("stopTimeout").value().count());
logDebug(" wait for mount stopping (timeout is {} seconds) ...", timeout.count());
// logDebug(" wait for mount stopping (timeout is {} seconds) ...",
// _mountConfig.getValue<std::chrono::seconds>("stopTimeout").value().count());
while (hw_state.movementState != AsibFM700ServoController::hardware_movement_state_t::HW_MOVE_STOPPED &&
!_lastMountError->load()) {
if ((std::chrono::steady_clock::now() - start_tp) >
_mountConfig.getValue<std::chrono::seconds>("stopTimeout").value()) {
if ((std::chrono::steady_clock::now() - start_tp) > timeout) {
*_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_STOP_TIMEOUT;
break;
}
// if ((std::chrono::steady_clock::now() - start_tp) >
// _mountConfig.getValue<std::chrono::seconds>("stopTimeout").value()) {
// *_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_STOP_TIMEOUT;
// break;
// }
std::this_thread::sleep_for(std::chrono::milliseconds(300));

View File

@@ -117,6 +117,8 @@ AsibFM700ServoController::error_t AsibFM700ServoController::hardwareSetState(har
if (state.movementState == hardware_movement_state_t::HW_MOVE_STOPPING) { // stop!
err = static_cast<AsibFM700ServoControllerErrorCode>(Mount.stop());
/*
if (err) {
return err;
}
@@ -144,6 +146,7 @@ AsibFM700ServoController::error_t AsibFM700ServoController::hardwareSetState(har
std::this_thread::sleep_for(_hardwareConfig.pollingInterval);
}
*/
return err;
}