...
This commit is contained in:
@@ -69,33 +69,6 @@ AsibFM700Hardware::AsibFM700Hardware(const hardware_config_t& conf)
|
||||
_hardwareConfig.devConfig.EncoderDevPath = const_cast<char*>(_hardwareConfig.EncoderDevPath.c_str());
|
||||
_hardwareConfig.devConfig.EncoderXDevPath = const_cast<char*>(_hardwareConfig.EncoderXDevPath.c_str());
|
||||
_hardwareConfig.devConfig.EncoderYDevPath = const_cast<char*>(_hardwareConfig.EncoderYDevPath.c_str());
|
||||
|
||||
_sideralRate2 *= _sideralRate2;
|
||||
_sideralRateEps2 = 0.01; // 1%
|
||||
|
||||
// start state polling
|
||||
|
||||
_statePollingThread = std::jthread([this](std::stop_token stoken) {
|
||||
mountdata_t data;
|
||||
|
||||
while (true) {
|
||||
if (stoken.stop_requested()) {
|
||||
return;
|
||||
}
|
||||
|
||||
error_t err = static_cast<AsibFM700HardwareErrorCode>(Mount.getMountData(&data));
|
||||
|
||||
|
||||
if (err == AsibFM700HardwareErrorCode::ERROR_OK) {
|
||||
// are both motors stopped?
|
||||
bool stop_motors =
|
||||
(data.extradata.ExtraBits & XMOTOR_STOP_BIT) && (data.extradata.ExtraBits & YMOTOR_STOP_BIT);
|
||||
if (stop_motors) {
|
||||
_state = hw_state_t::HW_STATE_STOP;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// AsibFM700Hardware::AsibFM700Hardware(AsibFM700Hardware&& other)
|
||||
@@ -118,52 +91,28 @@ std::string_view AsibFM700Hardware::id() const
|
||||
}
|
||||
|
||||
|
||||
AsibFM700Hardware::error_t AsibFM700Hardware::getState(AsibFM700Hardware::hw_state_t& state) const
|
||||
{
|
||||
mountdata_t data;
|
||||
error_t err = static_cast<AsibFM700HardwareErrorCode>(Mount.getMountData(&data));
|
||||
|
||||
if (err == AsibFM700HardwareErrorCode::ERROR_OK) {
|
||||
// are both motors stopped?
|
||||
bool stop_motors = (data.extradata.ExtraBits & XMOTOR_STOP_BIT) && (data.extradata.ExtraBits & YMOTOR_STOP_BIT);
|
||||
if (stop_motors) {
|
||||
state = hw_state_t::HW_STATE_STOP;
|
||||
return AsibFM700HardwareErrorCode::ERROR_OK;
|
||||
}
|
||||
|
||||
// compute current speed
|
||||
auto rate2 = data.encXspeed.val * data.encXspeed.val + data.encYspeed.val * data.encYspeed.val;
|
||||
auto ratio2 = rate2 / _sideralRate2;
|
||||
if (ratio2 <= _sideralRateEps2) { // tracking
|
||||
state = hw_state_t::HW_STATE_TRACK;
|
||||
} else {
|
||||
state = hw_state_t::HW_STATE_SLEW;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
AsibFM700Hardware::error_t AsibFM700Hardware::setPos(AsibFM700Hardware::axes_pos_t pos)
|
||||
{
|
||||
error_t err;
|
||||
|
||||
// according to"SiTech protocol notes" X is DEC-axis and Y is HA-axis
|
||||
coordpair_t hw_pos{.X = pos.y, .Y = pos.x};
|
||||
double tp = std::chrono::duration<double>(pos.time_point.time_since_epoch()).count();
|
||||
coordval_pair_t hw_posval{.X{.val = pos.x, .t = tp}, .Y{.val = pos.y, .t = tp}};
|
||||
|
||||
if (!pos.flags.slewNguide) {
|
||||
return static_cast<AsibFM700HardwareErrorCode>(Mount.slewTo(&hw_pos, pos.flags));
|
||||
}
|
||||
|
||||
switch (pos.state) {
|
||||
case hw_state_t::HW_STATE_SLEW: // slew mount
|
||||
err = static_cast<AsibFM700HardwareErrorCode>(Mount.slewTo(&hw_pos, pos.flags));
|
||||
switch (pos.moving_type) {
|
||||
case hw_moving_type_t::HW_MOVE_SLEWING: // slew mount
|
||||
if (pos.moveAndStop) {
|
||||
err = static_cast<AsibFM700HardwareErrorCode>(Mount.moveTo(&hw_pos));
|
||||
} else {
|
||||
err = static_cast<AsibFM700HardwareErrorCode>(Mount.slewTo(&hw_pos, pos.flags));
|
||||
}
|
||||
break;
|
||||
case hw_state_t::HW_STATE_TRACK: // interpretate as guiding correction
|
||||
err = static_cast<AsibFM700HardwareErrorCode>(Mount.correctBy(&hw_pos));
|
||||
case hw_moving_type_t::HW_MOVE_ADJUSTING: // corrections at the end of slewing
|
||||
err = static_cast<AsibFM700HardwareErrorCode>(Mount.correctTo(&hw_posval));
|
||||
break;
|
||||
case hw_state_t::HW_STATE_STOP:
|
||||
case hw_moving_type_t::HW_MOVE_GUIDING: // interpretate as guiding correction
|
||||
err = static_cast<AsibFM700HardwareErrorCode>(Mount.correctTo(&hw_posval));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -194,9 +143,6 @@ AsibFM700Hardware::error_t AsibFM700Hardware::getPos(AsibFM700Hardware::axes_pos
|
||||
|
||||
pos.xrate = data.encYspeed.val;
|
||||
pos.yrate = data.encXspeed.val;
|
||||
|
||||
// mount state
|
||||
err = getState(pos.state);
|
||||
}
|
||||
|
||||
return err;
|
||||
|
||||
Reference in New Issue
Block a user