...
This commit is contained in:
@@ -49,6 +49,7 @@ enum class MccSimpleMovementControlsErrorCode : int {
|
|||||||
ERROR_OK,
|
ERROR_OK,
|
||||||
ERROR_HW_GETSTATE,
|
ERROR_HW_GETSTATE,
|
||||||
ERROR_HW_SETSTATE,
|
ERROR_HW_SETSTATE,
|
||||||
|
ERROR_HW_ERROR,
|
||||||
ERROR_PCM_COMP,
|
ERROR_PCM_COMP,
|
||||||
ERROR_CCTE_COMP,
|
ERROR_CCTE_COMP,
|
||||||
ERROR_GET_TELEMETRY,
|
ERROR_GET_TELEMETRY,
|
||||||
@@ -100,6 +101,8 @@ struct MccSimpleMovementControlsCategory : public std::error_category {
|
|||||||
return "cannot get hardware state";
|
return "cannot get hardware state";
|
||||||
case MccSimpleMovementControlsErrorCode::ERROR_HW_SETSTATE:
|
case MccSimpleMovementControlsErrorCode::ERROR_HW_SETSTATE:
|
||||||
return "cannot set hardware state";
|
return "cannot set hardware state";
|
||||||
|
case MccSimpleMovementControlsErrorCode::ERROR_HW_ERROR:
|
||||||
|
return "hardware error occured";
|
||||||
case MccSimpleMovementControlsErrorCode::ERROR_PCM_COMP:
|
case MccSimpleMovementControlsErrorCode::ERROR_PCM_COMP:
|
||||||
return "PCM computation error";
|
return "PCM computation error";
|
||||||
case MccSimpleMovementControlsErrorCode::ERROR_CCTE_COMP:
|
case MccSimpleMovementControlsErrorCode::ERROR_CCTE_COMP:
|
||||||
@@ -633,6 +636,8 @@ public:
|
|||||||
|
|
||||||
*_stopMoving = false;
|
*_stopMoving = false;
|
||||||
|
|
||||||
|
hw_state.movementState = HARDWARE_T::hardware_movement_state_t::HW_MOVE_ADJUSTING;
|
||||||
|
|
||||||
while (!*_stopMoving) {
|
while (!*_stopMoving) {
|
||||||
t_err = telemetry->telemetryData(&tdata);
|
t_err = telemetry->telemetryData(&tdata);
|
||||||
if (t_err) {
|
if (t_err) {
|
||||||
@@ -642,6 +647,10 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hw_state.XY.setX(tdata.targetXY.x());
|
||||||
|
hw_state.XY.setY(tdata.targetXY.y());
|
||||||
|
hw_state.XY.setEpoch(ep_t::now());
|
||||||
|
|
||||||
log_pos(tdata, dist);
|
log_pos(tdata, dist);
|
||||||
|
|
||||||
// logger->logInfo("\tMNT.XY {} {}; MNT.HADEC {} {}", (double)tdata.hwState.XY.x(),
|
// logger->logInfo("\tMNT.XY {} {}; MNT.HADEC {} {}", (double)tdata.hwState.XY.x(),
|
||||||
@@ -667,9 +676,45 @@ public:
|
|||||||
*_lastError = MccSimpleMovementControlsErrorCode::ERROR_TIMEOUT;
|
*_lastError = MccSimpleMovementControlsErrorCode::ERROR_TIMEOUT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (std::get<2>(dist) <= _currentParams.slewToleranceRadius) {
|
||||||
|
logger->logInfo("target-to-mount distance is lesser than slew acceptable radius - exit!");
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// start adjusting (precise pointing) the slewing
|
||||||
|
if (std::get<2>(dist) <= _currentParams.adjustCoordDiff) {
|
||||||
|
(*cb_sptr)(STATUS_T::MOUNT_STATUS_ADJUSTING);
|
||||||
|
*_lastError = send_to_hardware(hw_state);
|
||||||
|
if (_lastError->load()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tdata.hwState.movementState == HARDWARE_T::hardware_movement_state_t::HW_MOVE_STOPPED) {
|
||||||
|
// the mount stopped but still to far from target position!!!
|
||||||
|
if (std::get<2>(dist) > _currentParams.slewToleranceRadius) {
|
||||||
|
(*cb_sptr)(STATUS_T::MOUNT_STATUS_ADJUSTING);
|
||||||
|
|
||||||
|
*_lastError = send_to_hardware(hw_state);
|
||||||
|
if (_lastError->load()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tdata.hwState.movementState == HARDWARE_T::hardware_movement_state_t::HW_MOVE_ERROR) {
|
||||||
|
*_lastError = MccSimpleMovementControlsErrorCode::ERROR_HW_ERROR;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
if (slew_and_stop) { // just wait until the mount stops
|
if (slew_and_stop) { // just wait until the mount stops
|
||||||
if (tdata.hwState.movementState == HARDWARE_T::hardware_movement_state_t::HW_MOVE_STOPPED) {
|
if (tdata.hwState.movementState == HARDWARE_T::hardware_movement_state_t::HW_MOVE_STOPPED) {
|
||||||
// if (std::get<2>(dist) > _currentParams.slewToleranceRadius) {
|
// if (std::get<2>(dist) > _currentParams.slewToleranceRadius) {
|
||||||
@@ -696,23 +741,6 @@ public:
|
|||||||
|
|
||||||
last_hw_time = tdata.hwState.XY.epoch().UTC();
|
last_hw_time = tdata.hwState.XY.epoch().UTC();
|
||||||
|
|
||||||
// auto ccte_err = tdata.targetPos.toAtSameEpoch(tag_cp);
|
|
||||||
// if (ccte_err) {
|
|
||||||
// *_lastError = mcc_deduced_err(ccte_err, MccSimpleMovementControlsErrorCode::ERROR_CCTE_COMP);
|
|
||||||
// }
|
|
||||||
// ccte_err = tdata.mountPos.toAtSameEpoch(mnt_cp);
|
|
||||||
// if (ccte_err) {
|
|
||||||
// *_lastError = mcc_deduced_err(ccte_err, MccSimpleMovementControlsErrorCode::ERROR_CCTE_COMP);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// auto dist = utils::distanceOnSphere(tag_cp.x(), tag_cp.y(), mnt_cp.x(), mnt_cp.y());
|
|
||||||
|
|
||||||
// logger->logTrace(std::format(
|
|
||||||
// " target-to-mount distance: {} (dx = {}, dy = {})",
|
|
||||||
// MccAngleFancyString(std::get<2>(dist)), MccAngleFancyString(std::get<0>(dist)),
|
|
||||||
// MccAngleFancyString(std::get<1>(dist))));
|
|
||||||
|
|
||||||
|
|
||||||
// stop slewing and exit from the cycle?
|
// stop slewing and exit from the cycle?
|
||||||
if (std::get<2>(dist) <= _currentParams.slewToleranceRadius) {
|
if (std::get<2>(dist) <= _currentParams.slewToleranceRadius) {
|
||||||
if (tdata.hwState.movementState == HARDWARE_T::hardware_movement_state_t::HW_MOVE_STOPPED ||
|
if (tdata.hwState.movementState == HARDWARE_T::hardware_movement_state_t::HW_MOVE_STOPPED ||
|
||||||
@@ -744,6 +772,7 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// sleep here
|
// sleep here
|
||||||
std::this_thread::sleep_for(_currentParams.slewingTelemetryInterval);
|
std::this_thread::sleep_for(_currentParams.slewingTelemetryInterval);
|
||||||
@@ -776,27 +805,10 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// auto ccte_err = tdata.targetPos.to(tag_cp);
|
|
||||||
// if (ccte_err) {
|
|
||||||
// *_lastError = mcc_deduced_err(ccte_err, MccSimpleMovementControlsErrorCode::ERROR_CCTE_COMP);
|
|
||||||
// (*cb_sptr)(STATUS_T::MOUNT_STATUS_ERROR);
|
|
||||||
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// ccte_err = tdata.mountPos.to(mnt_cp);
|
|
||||||
// if (ccte_err) {
|
|
||||||
// *_lastError = mcc_deduced_err(ccte_err, MccSimpleMovementControlsErrorCode::ERROR_CCTE_COMP);
|
|
||||||
// (*cb_sptr)(STATUS_T::MOUNT_STATUS_ERROR);
|
|
||||||
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// auto dist = utils::distanceOnSphere(tag_cp.x(), tag_cp.y(), mnt_cp.x(), mnt_cp.y());
|
|
||||||
|
|
||||||
log_pos(tdata, dist);
|
log_pos(tdata, dist);
|
||||||
|
|
||||||
// logger->logDebug(
|
logger->logInfo(
|
||||||
// std::format(" target-to-mount distance {}", MccAngleFancyString(std::get<2>(dist))));
|
std::format(" final target-to-mount distance {}", MccAngleFancyString(std::get<2>(dist))));
|
||||||
|
|
||||||
if (!slew_and_stop) { // start tracking
|
if (!slew_and_stop) { // start tracking
|
||||||
_trackingFunc();
|
_trackingFunc();
|
||||||
|
|||||||
Reference in New Issue
Block a user