This commit is contained in:
2025-07-31 22:47:26 +03:00
parent 9fbd858086
commit 750d29ceb9
8 changed files with 240 additions and 415 deletions

View File

@@ -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;