This commit is contained in:
2026-02-26 12:13:14 +03:00
parent 69e49283dd
commit b14b20e069
3 changed files with 350 additions and 141 deletions

View File

@@ -2,7 +2,7 @@
#include <mcc/mcc_generic_mount.h>
#include <mcc/mcc_generic_movecontrols.h>
#include <mcc/mcc_movement_controls.h>
// #include <mcc/mcc_movement_controls.h>
#include <mcc/mcc_pzone_container.h>
#include <mcc/mcc_spdlog.h>
#include <mcc/mcc_telemetry.h>
@@ -39,21 +39,11 @@ public:
using typename movement_controls_t::movement_params_t;
// using Asibfm700CCTE::setStateERFA;
// using Asibfm700CCTE::updateBulletinA;
// using Asibfm700CCTE::updateLeapSeconds;
// using Asibfm700CCTE::updateMeteoERFA;
using gm_class_t::logCritical;
using gm_class_t::logDebug;
using gm_class_t::logError;
using gm_class_t::logInfo;
using gm_class_t::logWarn;
// using Asibfm700Logger::logCritical;
// using Asibfm700Logger::logDebug;
// using Asibfm700Logger::logError;
// using Asibfm700Logger::logInfo;
// using Asibfm700Logger::logWarn;
// using Asibfm700PZoneContainer::addPZone;
@@ -84,126 +74,23 @@ protected:
// movement methods
mcc::impl::MccMovementPathFile _pathFile{};
decltype(telemetry_data_t::targetPos) _enteredBackupCoordinates;
error_t slewingImpl(bool);
error_t trackingImpl();
error_t stoppingImpl();
error_t sendToHardware(AsibFM700ServoController::hardware_state_t const& hw_state);
error_t checkPZone(typename telemetry_t::telemetry_data_t const& tdata);
// if predicted == true then the method checks the coordinates calculated for a point in time in the future, i.e.
// the predicted position if the movement is immediately stopped.
// if predicted == false then the method checks the current mount coordinates
error_t checkPZone(typename telemetry_t::telemetry_data_t const& tdata, bool predicted = true);
void logMountPos(telemetry_t::telemetry_data_t const& tdata);
std::unique_ptr<std::atomic<error_t>> _lastMountError{
new std::atomic<error_t>{mcc::impl::MccGenericMountErrorCode::ERROR_OK}};
};
/*
class Asibfm700Mount : public Asibfm700CCTE,
public Asibfm700PCM,
public mcc::MccGenericFsmMount<mcc::MccGenericMount<AsibFM700ServoController,
mcc::MccTelemetry,
Asibfm700PZoneContainer,
mcc::MccSimpleSlewingModel,
mcc::MccSimpleTrackingModel,
Asibfm700Logger>>
{
typedef mcc::MccGenericMount<AsibFM700ServoController,
mcc::MccTelemetry,
Asibfm700PZoneContainer,
mcc::MccSimpleSlewingModel,
mcc::MccSimpleTrackingModel,
Asibfm700Logger>
gm_class_t;
typedef mcc::MccGenericFsmMount<mcc::MccGenericMount<AsibFM700ServoController,
mcc::MccTelemetry,
Asibfm700PZoneContainer,
mcc::MccSimpleSlewingModel,
mcc::MccSimpleTrackingModel,
Asibfm700Logger>>
base_gm_class_t;
protected:
struct Asibfm700ErrorState : base_gm_class_t::MccGenericFsmMountBaseState {
static constexpr std::string_view ID{"ASIBFM700-MOUNT-ERROR-STATE"};
// void exit(MccGenericFsmMountErrorEvent& event)
// {
// event.mount()->logWarn("The mount already in error state!");
// }
void enter(MccGenericFsmMountErrorEvent& event)
{
enterLog(event);
// event.mount()->logWarn("The mount already in error state!");
auto err = event.eventData();
event.mount()->logError("An error occured: {} [{} {}]", err.message(), err.value(), err.category().name());
}
void exit(mcc::fsm::traits::fsm_event_c auto& event)
{
exitLog(event);
}
void enter(mcc::fsm::traits::fsm_event_c auto& event)
{
enterLog(event);
// ...
}
using transition_t = mcc::fsm::fsm_transition_table_t<
std::pair<MccGenericFsmMountErrorEvent, Asibfm700ErrorState>,
std::pair<MccGenericFsmMountInitEvent, MccGenericFsmMountInitState<Asibfm700ErrorState>>,
std::pair<MccGenericFsmMountIdleEvent, MccGenericFsmMountIdleState<Asibfm700ErrorState>>>;
};
typedef base_gm_class_t::MccGenericFsmMountStartState<Asibfm700ErrorState> Asibfm700StartState;
public:
using base_gm_class_t::error_t;
using Asibfm700CCTE::setStateERFA;
using Asibfm700CCTE::updateBulletinA;
using Asibfm700CCTE::updateLeapSeconds;
using Asibfm700CCTE::updateMeteoERFA;
using Asibfm700Logger::logCritical;
using Asibfm700Logger::logDebug;
using Asibfm700Logger::logError;
using Asibfm700Logger::logInfo;
using Asibfm700Logger::logWarn;
// using Asibfm700PZoneContainer::addPZone;
Asibfm700Mount(Asibfm700MountConfig const& config, std::shared_ptr<spdlog::logger> logger);
~Asibfm700Mount();
Asibfm700Mount(Asibfm700Mount&&) = default;
Asibfm700Mount& operator=(Asibfm700Mount&&) = default;
Asibfm700Mount(const Asibfm700Mount&) = delete;
Asibfm700Mount& operator=(const Asibfm700Mount&) = delete;
error_t initMount();
error_t updateMountConfig(Asibfm700MountConfig const&);
Asibfm700MountConfig currentMountConfig();
protected:
Asibfm700MountConfig _mountConfig;
std::unique_ptr<std::mutex> _mountConfigMutex;
void errorLogging(const std::string&, const std::error_code&);
};
*/
// static_assert(mcc::mcc_position_controls_c<Asibfm700Mount>, "");
// static_assert(mcc::mcc_all_controls_c<Asibfm700Mount>, "");
static_assert(mcc::mcc_generic_mount_c<Asibfm700Mount>, "");