...
This commit is contained in:
@@ -20,12 +20,8 @@ enum class MccSimpleTrackingModelErrorCode : int {
|
||||
ERROR_PCM_COMP,
|
||||
ERROR_GET_TELEMETRY,
|
||||
ERROR_DIST_TELEMETRY,
|
||||
ERROR_DIFF_TELEMETRY,
|
||||
ERROR_PZONE_CONTAINER_COMP,
|
||||
ERROR_IN_PZONE,
|
||||
ERROR_NEAR_PZONE,
|
||||
ERROR_TIMEOUT,
|
||||
ERROR_UNEXPECTED_AXIS_RATES,
|
||||
ERROR_ALREADY_TRACK,
|
||||
ERROR_ALREADY_STOPPED,
|
||||
ERROR_STOPPED
|
||||
@@ -49,6 +45,63 @@ class is_error_code_enum<mcc::MccSimpleTrackingModelErrorCode> : public true_typ
|
||||
namespace mcc
|
||||
{
|
||||
|
||||
|
||||
// error category
|
||||
struct MccSimpleTrackingModelCategory : public std::error_category {
|
||||
MccSimpleTrackingModelCategory() : std::error_category() {}
|
||||
|
||||
const char* name() const noexcept
|
||||
{
|
||||
return "SIMPLE-TRACKING-MODEL";
|
||||
}
|
||||
|
||||
std::string message(int ec) const
|
||||
{
|
||||
MccSimpleTrackingModelErrorCode err = static_cast<MccSimpleTrackingModelErrorCode>(ec);
|
||||
|
||||
switch (err) {
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_OK:
|
||||
return "OK";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_CCTE:
|
||||
return "coordinate transformation error";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_HW_GETSTATE:
|
||||
return "cannot get hardware state";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE:
|
||||
return "cannot set hardware state";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_PCM_COMP:
|
||||
return "PCM computation error";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_GET_TELEMETRY:
|
||||
return "cannot get telemetry";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_DIST_TELEMETRY:
|
||||
return "cannot get target-to-mount-position distance";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP:
|
||||
return "pzone container computation error";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_NEAR_PZONE:
|
||||
return "near prohibited zone";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_ALREADY_TRACK:
|
||||
return "already tracking";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_ALREADY_STOPPED:
|
||||
return "tracking is already stopped";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
|
||||
static const MccSimpleTrackingModelCategory& get()
|
||||
{
|
||||
static const MccSimpleTrackingModelCategory constInst;
|
||||
return constInst;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
inline std::error_code make_error_code(MccSimpleTrackingModelErrorCode ec)
|
||||
{
|
||||
return std::error_code(static_cast<int>(ec), MccSimpleTrackingModelCategory::get());
|
||||
}
|
||||
|
||||
|
||||
|
||||
class MccSimpleTrackingModel
|
||||
{
|
||||
public:
|
||||
@@ -83,7 +136,7 @@ public:
|
||||
auto t_err = controls->telemetryData(&tdata);
|
||||
if (t_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error<error_t>(t_err, MccSimpleTrackingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||
return mcc_deduce_error_code(t_err, MccSimpleTrackingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||
}
|
||||
|
||||
|
||||
@@ -95,8 +148,7 @@ public:
|
||||
// compute intersection points with the prohibited zones
|
||||
auto pz_err = mcc_find_closest_pzone(controls, tdata, &intsc_coords);
|
||||
if (pz_err) {
|
||||
return mcc_deduce_error<error_t>(pz_err,
|
||||
MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
return mcc_deduce_error_code(pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
}
|
||||
|
||||
if constexpr (mccIsEquatorialMount(CONTROLS_T::mountType)) {
|
||||
@@ -151,14 +203,14 @@ public:
|
||||
|
||||
auto ret = controls->transformCoordinates(std::move(pt), point);
|
||||
if (ret) {
|
||||
return mcc_deduce_error<error_t>(ret, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
|
||||
return mcc_deduce_error_code(ret, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
|
||||
} else {
|
||||
MccPCMResult pcm_inv_res;
|
||||
|
||||
// endpoint of the mount moving
|
||||
auto pcm_err = controls->computeInversePCM(target_in_future_pt, &pcm_inv_res, &hw_state);
|
||||
if (pcm_err) {
|
||||
return mcc_deduce_error<error_t>(pcm_err, MccSimpleTrackingModelErrorCode::ERROR_PCM_COMP);
|
||||
return mcc_deduce_error_code(pcm_err, MccSimpleTrackingModelErrorCode::ERROR_PCM_COMP);
|
||||
}
|
||||
|
||||
mcc_tp2tp(tdata.time_point, hw_state.time_point);
|
||||
@@ -171,7 +223,7 @@ public:
|
||||
auto pz_err = update_pzones_ipoint();
|
||||
if (pz_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error<error_t>(pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
return mcc_deduce_error_code(pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
}
|
||||
|
||||
hw_state.moving_state = CONTROLS_T::hardware_moving_state_t::HW_MOVE_Tracking;
|
||||
@@ -182,7 +234,7 @@ public:
|
||||
auto ccte_err = target_point(&target_in_future_pt);
|
||||
if (ccte_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
|
||||
return mcc_deduce_error_code(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
|
||||
}
|
||||
|
||||
if constexpr (mccIsEquatorialMount(CONTROLS_T::mountType)) {
|
||||
@@ -195,7 +247,7 @@ public:
|
||||
auto hw_err = controls->hardwareSetState(hw_state);
|
||||
if (hw_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error<error_t>(hw_err, MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE);
|
||||
return mcc_deduce_error_code(hw_err, MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE);
|
||||
}
|
||||
|
||||
|
||||
@@ -210,7 +262,7 @@ public:
|
||||
|
||||
if (t_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error<error_t>(t_err, MccSimpleTrackingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||
return mcc_deduce_error_code(t_err, MccSimpleTrackingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,8 +277,7 @@ public:
|
||||
}
|
||||
if (pz_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error<error_t>(pz_err,
|
||||
MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
return mcc_deduce_error_code(pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
}
|
||||
|
||||
if (*_stopTracking) {
|
||||
@@ -246,8 +297,8 @@ public:
|
||||
pz_err = update_pzones_ipoint();
|
||||
if (pz_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error<error_t>(
|
||||
pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
return mcc_deduce_error_code(pz_err,
|
||||
MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,7 +306,7 @@ public:
|
||||
auto ccte_err = target_point(&target_in_future_pt);
|
||||
if (ccte_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
|
||||
return mcc_deduce_error_code(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,7 +315,7 @@ public:
|
||||
hw_err = controls->hardwareSetState(hw_state);
|
||||
if (hw_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error<error_t>(hw_err, MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE);
|
||||
return mcc_deduce_error_code(hw_err, MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user