MccSimpleSlewingModel: the code has been rewritten in accordance with the
changes in Eddy's LibSidServo
This commit is contained in:
parent
54419b8e60
commit
7c9612c3a2
@ -183,8 +183,8 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
mpars.brakingAccelX = _hardwareConfig.hwConfig.Yconf.accel; // Sidereal defines HA-axis as Y-axis
|
mpars.brakingAccelX = _hardwareConfig.hwConfig.Yconf.accel; // Sidereal defines HA-axis as Y-axis
|
||||||
mpars.brakingAccelY = _hardwareConfig.hwConfig.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
mpars.brakingAccelY = _hardwareConfig.hwConfig.Xconf.accel; // Sidereal defines DEC-axis as X-axis
|
||||||
} else {
|
} else {
|
||||||
mpars.brakingAccelX = MCC_Y_ACCELERATION; // Sidereal defines HA-axis as Y-axis
|
mpars.brakingAccelX = 0.165806; // Sidereal defines HA-axis as Y-axis
|
||||||
mpars.brakingAccelY = MCC_X_ACCELERATION; // Sidereal defines DEC-axis as X-axis
|
mpars.brakingAccelY = 0.219911; // Sidereal defines DEC-axis as X-axis
|
||||||
}
|
}
|
||||||
auto st_err = setSlewingParams(mpars);
|
auto st_err = setSlewingParams(mpars);
|
||||||
if (st_err) {
|
if (st_err) {
|
||||||
|
|||||||
@ -123,7 +123,7 @@ AsibFM700ServoController::error_t AsibFM700ServoController::hardwareSetState(har
|
|||||||
|
|
||||||
// according to"SiTech protocol notes" X is DEC-axis and Y is HA-axis
|
// according to"SiTech protocol notes" X is DEC-axis and Y is HA-axis
|
||||||
coordval_pair_t cvalpair{.X{.val = state.Y, .t = tp}, .Y{.val = state.X, .t = tp}};
|
coordval_pair_t cvalpair{.X{.val = state.Y, .t = tp}, .Y{.val = state.X, .t = tp}};
|
||||||
coordpair_t cpair{.X = state.endptY, .Y = state.endptX};
|
// coordpair_t cpair{.X = state.endptY, .Y = state.endptX};
|
||||||
|
|
||||||
|
|
||||||
// correctTo is asynchronous function!!!
|
// correctTo is asynchronous function!!!
|
||||||
|
|||||||
@ -83,7 +83,7 @@ public:
|
|||||||
// the movement vector (i.e. sign of movement speed)
|
// the movement vector (i.e. sign of movement speed)
|
||||||
// this point is needed as Sidereal controller commands require not only moving speed but
|
// this point is needed as Sidereal controller commands require not only moving speed but
|
||||||
// also 'target' point (point at which mount will stop)
|
// also 'target' point (point at which mount will stop)
|
||||||
double endptX, endptY;
|
// double endptX, endptY;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -80,7 +80,7 @@ set(MCC_LIBRARY mcc)
|
|||||||
add_library(${MCC_LIBRARY} INTERFACE ${MCC_LIBRARY_SRC})
|
add_library(${MCC_LIBRARY} INTERFACE ${MCC_LIBRARY_SRC})
|
||||||
target_compile_features(${MCC_LIBRARY} INTERFACE cxx_std_23)
|
target_compile_features(${MCC_LIBRARY} INTERFACE cxx_std_23)
|
||||||
target_compile_definitions(${MCC_LIBRARY} INTERFACE SPDLOG_USE_STD_FORMAT=1 SPDLOG_FMT_EXTERNAL=0)
|
target_compile_definitions(${MCC_LIBRARY} INTERFACE SPDLOG_USE_STD_FORMAT=1 SPDLOG_FMT_EXTERNAL=0)
|
||||||
target_link_libraries(${MCC_LIBRARY} INTERFACE spdlog Threads::Threads)
|
target_link_libraries(${MCC_LIBRARY} INTERFACE spdlog Threads::Threads atomic)
|
||||||
target_include_directories(${MCC_LIBRARY} INTERFACE ${ERFA_INCLUDE_DIR} ${BSPLINES_INCLUDE_DIR})
|
target_include_directories(${MCC_LIBRARY} INTERFACE ${ERFA_INCLUDE_DIR} ${BSPLINES_INCLUDE_DIR})
|
||||||
target_include_directories(${MCC_LIBRARY} INTERFACE
|
target_include_directories(${MCC_LIBRARY} INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||||
|
|||||||
@ -124,7 +124,7 @@ public:
|
|||||||
MccSimpleSlewingModel(CONTROLS_T* controls, LoggerT logger)
|
MccSimpleSlewingModel(CONTROLS_T* controls, LoggerT logger)
|
||||||
: _stopSlewing(new std::atomic_bool()),
|
: _stopSlewing(new std::atomic_bool()),
|
||||||
_currentParamsMutex(new std::mutex),
|
_currentParamsMutex(new std::mutex),
|
||||||
_lastError(MccSimpleSlewingModelErrorCode::ERROR_OK)
|
_lastError(new std::atomic<error_t>())
|
||||||
{
|
{
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << std::this_thread::get_id();
|
os << std::this_thread::get_id();
|
||||||
@ -132,6 +132,7 @@ public:
|
|||||||
logger.logDebug(std::format("Create MccSimpleSlewingModel class instance (thread: {})", os.str()));
|
logger.logDebug(std::format("Create MccSimpleSlewingModel class instance (thread: {})", os.str()));
|
||||||
|
|
||||||
*_stopSlewing = true;
|
*_stopSlewing = true;
|
||||||
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_OK;
|
||||||
|
|
||||||
_checkTargetFunc = [controls, logger, this]() mutable -> error_t {
|
_checkTargetFunc = [controls, logger, this]() mutable -> error_t {
|
||||||
typename CONTROLS_T::error_t t_err;
|
typename CONTROLS_T::error_t t_err;
|
||||||
@ -181,7 +182,7 @@ public:
|
|||||||
|
|
||||||
_slewingFunc = [controls, logger = std::move(logger), this](bool slew_and_stop) mutable -> error_t {
|
_slewingFunc = [controls, logger = std::move(logger), this](bool slew_and_stop) mutable -> error_t {
|
||||||
// reset error
|
// reset error
|
||||||
_lastError = MccSimpleSlewingModelErrorCode::ERROR_OK;
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_OK;
|
||||||
|
|
||||||
double braking_accelX, braking_accelY;
|
double braking_accelX, braking_accelY;
|
||||||
double min_time_to_pzone_in_secs;
|
double min_time_to_pzone_in_secs;
|
||||||
@ -226,7 +227,7 @@ public:
|
|||||||
t_err = controls->telemetryData(&tdata);
|
t_err = controls->telemetryData(&tdata);
|
||||||
|
|
||||||
if (t_err) {
|
if (t_err) {
|
||||||
return _lastError =
|
return *_lastError =
|
||||||
mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_GET_TELEMETRY);
|
mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -236,47 +237,6 @@ public:
|
|||||||
bool in_zone;
|
bool in_zone;
|
||||||
std::vector<bool> in_zone_vec;
|
std::vector<bool> in_zone_vec;
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
auto pz_err = controls->inPZone(tdata.target, &in_zone, &in_zone_vec);
|
|
||||||
if (pz_err) {
|
|
||||||
*_stopSlewing = true;
|
|
||||||
return _lastError =
|
|
||||||
mcc_deduce_error_code(pz_err, MccSimpleSlewingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_zone) {
|
|
||||||
*_stopSlewing = true;
|
|
||||||
|
|
||||||
size_t i = 0;
|
|
||||||
for (; i < in_zone_vec.size(); ++i) {
|
|
||||||
if (in_zone_vec[i]) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.logError("target point is in prohibited zone (zone index: {})! Entered target coordinates:", i);
|
|
||||||
logger.logError(std::format(" RA-APP, DEC-APP, HA, LST: {}, {}, {}, {}",
|
|
||||||
mcc::MccAngle{tdata.target.RA_APP}.sexagesimal(true),
|
|
||||||
mcc::MccAngle{tdata.target.DEC_APP}.sexagesimal(),
|
|
||||||
mcc::MccAngle{tdata.target.HA}.sexagesimal(true),
|
|
||||||
mcc::MccAngle{tdata.LST}.sexagesimal(true)));
|
|
||||||
logger.logError(std::format(" AZ, ZD, ALT: {}, {}, {}", mcc::MccAngle{tdata.target.AZ}.sexagesimal(),
|
|
||||||
mcc::MccAngle{tdata.target.ZD}.sexagesimal(),
|
|
||||||
mcc::MccAngle{tdata.target.ALT}.sexagesimal()));
|
|
||||||
|
|
||||||
logger.logError(std::format(" hardware X, Y: {}, {}", mcc::MccAngle{tdata.target.X}.sexagesimal(),
|
|
||||||
mcc::MccAngle{tdata.target.Y}.sexagesimal()));
|
|
||||||
|
|
||||||
return MccSimpleSlewingModelErrorCode::ERROR_TARGET_IN_PZONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*_stopSlewing) {
|
|
||||||
return _lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
MccCelestialPoint cpt;
|
MccCelestialPoint cpt;
|
||||||
|
|
||||||
if constexpr (mccIsEquatorialMount(CONTROLS_T::mountType)) {
|
if constexpr (mccIsEquatorialMount(CONTROLS_T::mountType)) {
|
||||||
@ -292,14 +252,14 @@ public:
|
|||||||
auto hw_err = controls->hardwareGetState(&hw_state);
|
auto hw_err = controls->hardwareGetState(&hw_state);
|
||||||
if (hw_err) {
|
if (hw_err) {
|
||||||
*_stopSlewing = true;
|
*_stopSlewing = true;
|
||||||
return _lastError = mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE);
|
return *_lastError = mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
hw_state.X = (double)tdata.target.X;
|
hw_state.X = (double)tdata.target.X;
|
||||||
hw_state.Y = (double)tdata.target.Y;
|
hw_state.Y = (double)tdata.target.Y;
|
||||||
hw_state.endptX = (double)tdata.target.X;
|
// hw_state.endptX = (double)tdata.target.X;
|
||||||
hw_state.endptY = (double)tdata.target.Y;
|
// hw_state.endptY = (double)tdata.target.Y;
|
||||||
|
|
||||||
{
|
{
|
||||||
std::lock_guard lock{*_currentParamsMutex};
|
std::lock_guard lock{*_currentParamsMutex};
|
||||||
@ -311,7 +271,7 @@ public:
|
|||||||
|
|
||||||
if (*_stopSlewing) {
|
if (*_stopSlewing) {
|
||||||
logger.logDebug("slewing was stopped!");
|
logger.logDebug("slewing was stopped!");
|
||||||
return _lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
return *_lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// start slewing
|
// start slewing
|
||||||
@ -336,15 +296,14 @@ public:
|
|||||||
hw_err = controls->hardwareSetState(hw_state);
|
hw_err = controls->hardwareSetState(hw_state);
|
||||||
if (hw_err) {
|
if (hw_err) {
|
||||||
*_stopSlewing = true;
|
*_stopSlewing = true;
|
||||||
return _lastError = mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_SETSTATE);
|
return *_lastError = mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_SETSTATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.logDebug(" the 'hardwareSetState' method performed successfully!");
|
logger.logDebug(" the 'hardwareSetState' method performed successfully!");
|
||||||
|
|
||||||
double dist, dx, dy;
|
// double dist, dx, dy;
|
||||||
|
double dist;
|
||||||
|
|
||||||
// bool adjust_mode = false;
|
|
||||||
// static constexpr auto sideral_rate2 = slewing_params_t::sideralRate * slewing_params_t::sideralRate;
|
|
||||||
|
|
||||||
std::chrono::steady_clock::time_point start_slewing_tp, last_adjust_tp;
|
std::chrono::steady_clock::time_point start_slewing_tp, last_adjust_tp;
|
||||||
start_slewing_tp = std::chrono::steady_clock::now();
|
start_slewing_tp = std::chrono::steady_clock::now();
|
||||||
@ -369,7 +328,7 @@ public:
|
|||||||
t_err = controls->waitForTelemetryData(&tdata, _currentParams.telemetryTimeout);
|
t_err = controls->waitForTelemetryData(&tdata, _currentParams.telemetryTimeout);
|
||||||
|
|
||||||
if (t_err) {
|
if (t_err) {
|
||||||
_lastError = mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_GET_TELEMETRY);
|
*_lastError = mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||||
break;
|
break;
|
||||||
// *_stopSlewing = true;
|
// *_stopSlewing = true;
|
||||||
// return mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_GET_TELEMETRY);
|
// return mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||||
@ -377,7 +336,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (*_stopSlewing) {
|
if (*_stopSlewing) {
|
||||||
_lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
||||||
break;
|
break;
|
||||||
// return MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
// return MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
||||||
}
|
}
|
||||||
@ -437,7 +396,7 @@ public:
|
|||||||
in_zone_vec.clear();
|
in_zone_vec.clear();
|
||||||
auto pz_err = controls->inPZone(cpt, &in_zone, &in_zone_vec);
|
auto pz_err = controls->inPZone(cpt, &in_zone, &in_zone_vec);
|
||||||
if (pz_err) {
|
if (pz_err) {
|
||||||
_lastError =
|
*_lastError =
|
||||||
mcc_deduce_error_code(pz_err, MccSimpleSlewingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
mcc_deduce_error_code(pz_err, MccSimpleSlewingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||||
break;
|
break;
|
||||||
// *_stopSlewing = true;
|
// *_stopSlewing = true;
|
||||||
@ -465,7 +424,7 @@ public:
|
|||||||
logger.logError(std::format(" hardware X, Y: {}, {}", mcc::MccAngle{tdata.X}.sexagesimal(),
|
logger.logError(std::format(" hardware X, Y: {}, {}", mcc::MccAngle{tdata.X}.sexagesimal(),
|
||||||
mcc::MccAngle{tdata.Y}.sexagesimal()));
|
mcc::MccAngle{tdata.Y}.sexagesimal()));
|
||||||
|
|
||||||
_lastError = MccSimpleSlewingModelErrorCode::ERROR_NEAR_PZONE;
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_NEAR_PZONE;
|
||||||
break;
|
break;
|
||||||
// *_stopSlewing = true;
|
// *_stopSlewing = true;
|
||||||
// return MccSimpleSlewingModelErrorCode::ERROR_NEAR_PZONE;
|
// return MccSimpleSlewingModelErrorCode::ERROR_NEAR_PZONE;
|
||||||
@ -478,7 +437,7 @@ public:
|
|||||||
|
|
||||||
if ((std::chrono::steady_clock::now() - start_slewing_tp) > _currentParams.slewTimeout) {
|
if ((std::chrono::steady_clock::now() - start_slewing_tp) > _currentParams.slewTimeout) {
|
||||||
logger.logError("slewing process timeout!");
|
logger.logError("slewing process timeout!");
|
||||||
_lastError = MccSimpleSlewingModelErrorCode::ERROR_TIMEOUT;
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_TIMEOUT;
|
||||||
break;
|
break;
|
||||||
// return MccSimpleSlewingModelErrorCode::ERROR_TIMEOUT;
|
// return MccSimpleSlewingModelErrorCode::ERROR_TIMEOUT;
|
||||||
}
|
}
|
||||||
@ -488,7 +447,7 @@ public:
|
|||||||
|
|
||||||
hw_err = controls->hardwareGetState(&hw_state);
|
hw_err = controls->hardwareGetState(&hw_state);
|
||||||
if (hw_err) {
|
if (hw_err) {
|
||||||
_lastError = mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE);
|
*_lastError = mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE);
|
||||||
break;
|
break;
|
||||||
// *_stopSlewing = true;
|
// *_stopSlewing = true;
|
||||||
// return mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE);
|
// return mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE);
|
||||||
@ -512,7 +471,8 @@ public:
|
|||||||
|
|
||||||
t_err = controls->targetToMountDist(&dist);
|
t_err = controls->targetToMountDist(&dist);
|
||||||
if (t_err) {
|
if (t_err) {
|
||||||
_lastError = mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_DIST_TELEMETRY);
|
*_lastError =
|
||||||
|
mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_DIST_TELEMETRY);
|
||||||
break;
|
break;
|
||||||
// *_stopSlewing = true;
|
// *_stopSlewing = true;
|
||||||
// return mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_DIST_TELEMETRY);
|
// return mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_DIST_TELEMETRY);
|
||||||
@ -530,7 +490,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
if (*_stopSlewing) {
|
if (*_stopSlewing) {
|
||||||
_lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
||||||
break;
|
break;
|
||||||
// return MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
// return MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
||||||
}
|
}
|
||||||
@ -560,7 +520,7 @@ public:
|
|||||||
|
|
||||||
hw_err = controls->hardwareSetState(hw_state);
|
hw_err = controls->hardwareSetState(hw_state);
|
||||||
if (hw_err) {
|
if (hw_err) {
|
||||||
_lastError = MccSimpleSlewingModelErrorCode::ERROR_HW_SETSTATE;
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_HW_SETSTATE;
|
||||||
break;
|
break;
|
||||||
// *_stopSlewing = true;
|
// *_stopSlewing = true;
|
||||||
// return mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_SETSTATE);
|
// return mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_SETSTATE);
|
||||||
@ -576,7 +536,7 @@ public:
|
|||||||
|
|
||||||
hw_err = controls->hardwareGetState(&hw_state);
|
hw_err = controls->hardwareGetState(&hw_state);
|
||||||
if (hw_err) {
|
if (hw_err) {
|
||||||
_lastError = MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE;
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE;
|
||||||
break;
|
break;
|
||||||
// *_stopSlewing = true;
|
// *_stopSlewing = true;
|
||||||
// return mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE);
|
// return mcc_deduce_error_code(hw_err, MccSimpleSlewingModelErrorCode::ERROR_HW_GETSTATE);
|
||||||
@ -587,7 +547,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (*_stopSlewing) {
|
if (*_stopSlewing) {
|
||||||
_lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
*_lastError = MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
||||||
break;
|
break;
|
||||||
// return MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
// return MccSimpleSlewingModelErrorCode::ERROR_STOPPED;
|
||||||
}
|
}
|
||||||
@ -607,7 +567,7 @@ public:
|
|||||||
t_err = controls->waitForTelemetryData(&tdata, _currentParams.telemetryTimeout);
|
t_err = controls->waitForTelemetryData(&tdata, _currentParams.telemetryTimeout);
|
||||||
|
|
||||||
if (t_err) {
|
if (t_err) {
|
||||||
return _lastError =
|
return *_lastError =
|
||||||
mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_GET_TELEMETRY);
|
mcc_deduce_error_code(t_err, MccSimpleSlewingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -628,7 +588,7 @@ public:
|
|||||||
mcc::MccAngle{tdata.ZD}.sexagesimal()));
|
mcc::MccAngle{tdata.ZD}.sexagesimal()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return _lastError = MccSimpleSlewingModelErrorCode::ERROR_OK;
|
return *_lastError = MccSimpleSlewingModelErrorCode::ERROR_OK;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -651,9 +611,9 @@ public:
|
|||||||
*_stopSlewing = false;
|
*_stopSlewing = false;
|
||||||
|
|
||||||
// check for target in p-zone
|
// check for target in p-zone
|
||||||
_lastError = _checkTargetFunc();
|
*_lastError = _checkTargetFunc();
|
||||||
if (_lastError) { // return here immidiately
|
if (_lastError->load()) { // return here immidiately
|
||||||
return _lastError;
|
return *_lastError;
|
||||||
}
|
}
|
||||||
|
|
||||||
// asynchronous slewing process
|
// asynchronous slewing process
|
||||||
@ -696,7 +656,7 @@ public:
|
|||||||
|
|
||||||
error_t slewingLastError() const
|
error_t slewingLastError() const
|
||||||
{
|
{
|
||||||
return _lastError;
|
return *_lastError;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -707,7 +667,7 @@ protected:
|
|||||||
slewing_params_t _currentParams{};
|
slewing_params_t _currentParams{};
|
||||||
std::unique_ptr<std::mutex> _currentParamsMutex{};
|
std::unique_ptr<std::mutex> _currentParamsMutex{};
|
||||||
|
|
||||||
error_t _lastError;
|
std::unique_ptr<std::atomic<error_t>> _lastError;
|
||||||
std::future<error_t> _slewFuncFuture{};
|
std::future<error_t> _slewFuncFuture{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user