#pragma once #include #include #include #include #include #include #include "asibfm700_common.h" #include "asibfm700_configfile.h" namespace asibfm700 { class Asibfm700Mount : public Asibfm700CCTE, public Asibfm700PCM, public mcc::MccGenericFsmMount> { typedef mcc::MccGenericMount gm_class_t; typedef mcc::MccGenericFsmMount> 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) { event.mount()->logWarn("The mount already in error state!"); } 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, std::pair>, std::pair>>; }; typedef base_gm_class_t::MccGenericFsmMountStartState 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 logger); ~Asibfm700Mount(); error_t initMount(); error_t updateMountConfig(Asibfm700MountConfig const&); Asibfm700MountConfig currentMountConfig(); protected: Asibfm700MountConfig _mountConfig; std::unique_ptr _mountConfigMutex; void errorLogging(const std::string&, const std::error_code&); }; static_assert(mcc::mcc_position_controls_c, ""); static_assert(mcc::mcc_all_controls_c, ""); static_assert(mcc::mcc_generic_mount_c, ""); } // namespace asibfm700