...
This commit is contained in:
184
asibfm700_mount.h
Normal file
184
asibfm700_mount.h
Normal file
@@ -0,0 +1,184 @@
|
||||
#pragma once
|
||||
|
||||
#include <mcc/mcc_generic_mount.h>
|
||||
#include <mcc/mcc_movement_controls.h>
|
||||
#include <mcc/mcc_pzone_container.h>
|
||||
#include <mcc/mcc_spdlog.h>
|
||||
#include <mcc/mcc_telemetry.h>
|
||||
|
||||
#include "asibfm700_common.h"
|
||||
#include "asibfm700_configfile.h"
|
||||
|
||||
namespace asibfm700
|
||||
{
|
||||
|
||||
|
||||
|
||||
class Asibfm700Mount : public mcc::impl::MccGenericMount<mcc::impl::MccTelemetry<AsibFM700ServoController>,
|
||||
Asibfm700PZoneContainer,
|
||||
mcc::impl::MccSimpleMovementControls,
|
||||
Asibfm700Logger>
|
||||
{
|
||||
typedef mcc::impl::MccGenericMount<mcc::impl::MccTelemetry<AsibFM700ServoController>,
|
||||
Asibfm700PZoneContainer,
|
||||
mcc::impl::MccSimpleMovementControls,
|
||||
Asibfm700Logger>
|
||||
gm_class_t;
|
||||
|
||||
public:
|
||||
using gm_class_t::error_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;
|
||||
|
||||
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;
|
||||
|
||||
AsibFM700ServoController _servolController;
|
||||
Asibfm700PCM _pcm;
|
||||
|
||||
void errorLogging(const std::string&, const std::error_code&);
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
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>, "");
|
||||
|
||||
} // namespace asibfm700
|
||||
Reference in New Issue
Block a user