...
This commit is contained in:
@@ -23,7 +23,35 @@ constexpr std::string_view AsibFM700ServoController::hardwareName() const
|
||||
|
||||
AsibFM700ServoController::error_t AsibFM700ServoController::hardwareStop()
|
||||
{
|
||||
return static_cast<AsibFM700ServoControllerErrorCode>(Mount.stop());
|
||||
error_t err = static_cast<AsibFM700ServoControllerErrorCode>(Mount.stop());
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
hardware_state_t hw_state;
|
||||
|
||||
auto start_tp = std::chrono::steady_clock::now();
|
||||
|
||||
// poll hardware till stopped-state detected ...
|
||||
while (true) {
|
||||
err = hardwareGetState(&hw_state);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if (hw_state.moving_state == hardware_moving_state_t::HW_MOVE_STOPPED) {
|
||||
break;
|
||||
}
|
||||
|
||||
if ((std::chrono::steady_clock::now() - start_tp) > _hardwareConfig.pollingTimeout) {
|
||||
err = AsibFM700ServoControllerErrorCode::ERROR_POLLING_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
|
||||
std::this_thread::sleep_for(_hardwareConfig.pollingInterval);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
AsibFM700ServoController::error_t AsibFM700ServoController::hardwareInit()
|
||||
@@ -55,6 +83,10 @@ AsibFM700ServoController::error_t AsibFM700ServoController::hardwareSetState(har
|
||||
|
||||
AsibFM700ServoController::error_t AsibFM700ServoController::hardwareGetState(hardware_state_t* state)
|
||||
{
|
||||
if (state == nullptr) {
|
||||
return AsibFM700ServoControllerErrorCode::ERROR_NULLPTR;
|
||||
}
|
||||
|
||||
using tp_t = decltype(hardware_state_t::time_point);
|
||||
|
||||
mountdata_t mdata;
|
||||
@@ -75,6 +107,35 @@ AsibFM700ServoController::error_t AsibFM700ServoController::hardwareGetState(har
|
||||
|
||||
state->speedX = mdata.encYspeed.val;
|
||||
state->speedY = mdata.encXspeed.val;
|
||||
|
||||
state->stateX = mdata.Xstate;
|
||||
state->stateY = mdata.Ystate;
|
||||
|
||||
if (mdata.Xstate == AXIS_STOPPED) {
|
||||
if (mdata.Ystate == AXIS_STOPPED) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_STOPPED;
|
||||
} else if (mdata.Ystate == AXIS_SLEWING) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_SLEWING;
|
||||
} else if (mdata.Ystate == AXIS_POINTING) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_ADJUSTING;
|
||||
} else if (mdata.Ystate == AXIS_GUIDING) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_GUIDING;
|
||||
} else if (mdata.Ystate == AXIS_ERROR) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_ERROR;
|
||||
} else {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_UNKNOWN;
|
||||
}
|
||||
} else if (mdata.Xstate == AXIS_SLEWING) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_SLEWING;
|
||||
} else if (mdata.Xstate == AXIS_POINTING) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_ADJUSTING;
|
||||
} else if (mdata.Xstate == AXIS_GUIDING) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_GUIDING;
|
||||
} else if (mdata.Xstate == AXIS_ERROR) {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_ERROR;
|
||||
} else {
|
||||
state->moving_state = hardware_moving_state_t::HW_MOVE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
|
||||
@@ -20,6 +20,8 @@ enum class AsibFM700ServoControllerErrorCode : int {
|
||||
ERROR_MOUNTDEV = MCC_E_MOUNTDEV,
|
||||
ERROR_FAILED = MCC_E_FAILED,
|
||||
// my codes ...
|
||||
ERROR_POLLING_TIMEOUT,
|
||||
ERROR_NULLPTR
|
||||
};
|
||||
|
||||
// error category
|
||||
@@ -59,11 +61,13 @@ public:
|
||||
typedef std::error_code error_t;
|
||||
|
||||
enum class hardware_moving_state_t : int {
|
||||
HW_MOVE_STOPPED,
|
||||
HW_MOVE_ERROR = -1,
|
||||
HW_MOVE_STOPPED = 0,
|
||||
HW_MOVE_SLEWING,
|
||||
HW_MOVE_ADJUSTING,
|
||||
HW_MOVE_TRACKING,
|
||||
HW_MOVE_GUIDING
|
||||
HW_MOVE_GUIDING,
|
||||
HW_MOVE_UNKNOWN
|
||||
};
|
||||
|
||||
struct hardware_state_t {
|
||||
@@ -71,6 +75,7 @@ public:
|
||||
mcc::MccTimePoint time_point;
|
||||
|
||||
double X, Y, speedX, speedY;
|
||||
axis_status_t stateX, stateY; // Eddy's LibSidServo axis state
|
||||
|
||||
hardware_moving_state_t moving_state;
|
||||
};
|
||||
@@ -86,6 +91,9 @@ public:
|
||||
|
||||
conf_t devConfig;
|
||||
hardware_configuration_t hwConfig;
|
||||
|
||||
std::chrono::milliseconds pollingInterval{300}; // hardware polling interval
|
||||
std::chrono::milliseconds pollingTimeout{30000}; // hardware polling timeout
|
||||
};
|
||||
|
||||
/* constructors and destructor */
|
||||
|
||||
Reference in New Issue
Block a user