8#ifndef FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
9#define FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
13#include <rad/smAdapter.hpp>
14#include <rad/topicPub.hpp>
15#include <rad/anyEvent.hpp>
16#include <rad/activity.hpp>
17#include <ifw/core/utils/bat/logger.hpp>
19#include <ifw/core/protocol/base/dispatcher.hpp>
21#include <ifw/fcf/devmgr/common/events.rad.hpp>
31 void StopDaq(std::string filename);
36 ::metadaqif::DaqState
GetState()
const noexcept;
37 void SetState(::metadaqif::DaqState state);
38 std::string
GetMsg()
const noexcept;
39 std::vector<std::string>
GetFiles()
const noexcept;
43 ::metadaqif::DaqState m_state{::metadaqif::DaqState::Undefined};
44 std::string m_msg{
""};
45 std::vector<std::string> m_files;
46 double m_timestamp{0};
71 ifw::core::protocol::base::Dispatcher<>& failure,
72 ifw::core::protocol::base::Dispatcher<>& normal);
83 virtual bool Init(rad::SMAdapter& sm, rad::ThreadActivity* activity);
92 virtual bool Enable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
101 virtual bool Recover(rad::SMAdapter& sm, rad::ThreadActivity* activity);
125 virtual bool AsyncSetup(
const std::any& payload);
148 virtual bool Setup(
const std::any& payload, rad::ThreadActivity* activity);
159 virtual void Reset();
167 virtual void Status(
const std::any& payload, std::string& buffer);
174 virtual void Simulate(rad::AnyEvent
const& last_event);
180 virtual void StopSim(rad::AnyEvent
const& last_event);
186 virtual void Ignore(rad::AnyEvent
const& last_event);
192 virtual void StopIgn(rad::AnyEvent
const& last_event);
198 virtual void HwReset(rad::AnyEvent
const& last_event);
204 virtual void HwInit(rad::AnyEvent
const& last_event);
210 virtual void HwEnable(rad::AnyEvent
const& last_event);
216 virtual void HwDisable(rad::AnyEvent
const& last_event);
222 virtual std::string
DevNames()
const;
228 virtual std::string
DevInfo()
const;
234 virtual std::string
DevConfig(
const std::string devname)
const;
254 std::shared_ptr<CCfits::FITS>& fits_handle);
279 std::shared_ptr<CCfits::FITS>& fits_handle);
312 void AddDevice(std::shared_ptr<IDevice> device);
323 ifw::core::protocol::base::Dispatcher<>&
GetFailureCB();
329 ifw::core::protocol::base::Dispatcher<>&
GetNormalCB();
355 void InitSync(rad::ThreadActivity* activity,
356 std::chrono::system_clock::time_point start_time,
368 void EnableSync(rad::ThreadActivity* activity,
369 std::chrono::system_clock::time_point start_time,
378 void DeviceFailureCB();
386 void DeviceNormalCB();
389 std::vector<std::shared_ptr<IDevice> > m_devices;
390 std::vector<std::string> m_device_names;
391 boost::asio::io_service m_ios;
392 rad::SMAdapter& m_sm;
394 std::string m_dp_filename;
396 std::map<std::string, fcf::devmgr::common::DaqInfo> m_daq;
400 ifw::core::protocol::base::Dispatcher<> m_failure;
405 ifw::core::protocol::base::Dispatcher<> m_normal;
407 log4cplus::Logger m_logger;
Definition deviceFacade.hpp:59
virtual bool Disable()
Disable all devices managed by the devmgr.
Definition deviceFacade.cpp:368
virtual void Reset()
Reset devices.
Definition deviceFacade.cpp:524
virtual std::string DevInfo() const
Get information of managed devices.
Definition deviceFacade.cpp:1041
ifw::fcf::devmgr::common::DaqInfo StopDaq(std::string daqid)
Stop Data Acquisition.
Definition deviceFacade.cpp:697
virtual void HwInit(rad::AnyEvent const &last_event)
Init hardware.
Definition deviceFacade.cpp:609
void AbortDaq(std::string daqid)
Abort Data Acquisition.
Definition deviceFacade.cpp:758
virtual bool AsyncSetup(const std::any &payload)
Executes a setup message.
Definition deviceFacade.cpp:394
ifw::core::protocol::base::Dispatcher & GetNormalCB()
Get reference to normal CB.
Definition deviceFacade.cpp:810
virtual bool Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all devices managed by the devmgr.
Definition deviceFacade.cpp:109
ifw::core::protocol::base::Dispatcher & GetFailureCB()
Get reference to failure CB.
Definition deviceFacade.cpp:806
virtual void AddCustomStopStatus(const ifw::core::dit::did::Did &dictionary, std::shared_ptr< CCfits::FITS > &fits_handle)
Add custom FITS keywords at the end of the daq.
Definition deviceFacade.cpp:752
void TriggerInternalEvent(rad::SMAdapter &sm, rad::UniqueEvent &&e)
Trigger an internal event.
Definition deviceFacade.cpp:788
virtual void Status(const std::any &payload, std::string &buffer)
Get status from devices.
Definition deviceFacade.cpp:536
virtual bool Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all devices managed by the devmgr.
Definition deviceFacade.cpp:276
virtual std::string DevConfig(const std::string devname) const
Get configuration for a given device.
Definition deviceFacade.cpp:1059
virtual void Stop()
Abort all devices managed by the devmgr.
Definition deviceFacade.cpp:516
virtual void Ignore(rad::AnyEvent const &last_event)
Ignore devices managed by the server.
Definition deviceFacade.cpp:573
ifw::fcf::devmgr::common::DaqInfo GetDaqStatus(std::string daqid) const
Get Daq Status.
Definition deviceFacade.cpp:776
virtual std::string DevNames() const
Get list of managed devices.
Definition deviceFacade.cpp:1032
virtual void AddCustomStartStatus(const ifw::core::dit::did::Did &dictionary, std::shared_ptr< CCfits::FITS > &fits_handle)
Add custom FITS keywords at the start of the daq.
Definition deviceFacade.cpp:691
virtual bool Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all devices managed by the devmgr.
Definition deviceFacade.cpp:155
DeviceFacade(rad::SMAdapter &sm, Config &config, ifw::core::protocol::base::Dispatcher<> &failure, ifw::core::protocol::base::Dispatcher<> &normal)
Definition deviceFacade.cpp:84
void StartDaq(std::string daqid)
Start Data Acquisition.
Definition deviceFacade.cpp:646
void ClearDevices()
Empty internal device map.
Definition deviceFacade.cpp:800
virtual void HwReset(rad::AnyEvent const &last_event)
Reset hardware.
Definition deviceFacade.cpp:597
virtual void StopSim(rad::AnyEvent const &last_event)
Stop simulating devices managed by the server.
Definition deviceFacade.cpp:561
void AddDevice(std::shared_ptr< IDevice > device)
Add a device instance to be managed by the facade.
Definition deviceFacade.cpp:794
virtual ~DeviceFacade()
~DeviceFacade
Definition deviceFacade.cpp:105
const int GetNumDevices() const noexcept
Get the number of devices.
Definition deviceFacade.cpp:842
virtual void HwDisable(rad::AnyEvent const &last_event)
Disable hardware.
Definition deviceFacade.cpp:634
void CheckDeviceName(const std::vector< std::string > &devices) const
Check if list of devices are managed by the server.
Definition deviceFacade.cpp:1017
virtual void HwEnable(rad::AnyEvent const &last_event)
Enable hardware.
Definition deviceFacade.cpp:623
virtual void StopIgn(rad::AnyEvent const &last_event)
Stop ignoring devices managed by the server.
Definition deviceFacade.cpp:585
virtual bool Setup(const std::any &payload, rad::ThreadActivity *activity)
Executes a setup message.
Definition deviceFacade.cpp:415
virtual void Simulate(rad::AnyEvent const &last_event)
Simulate devices managed by the server.
Definition deviceFacade.cpp:549
Definition iDevice.hpp:38
ActionsEnable class source file.
Definition actionMgr.cpp:28
Definition deviceFacade.hpp:28
void AbortDaq(std::string msg)
Definition deviceFacade.cpp:44
::metadaqif::DaqState GetState() const noexcept
Definition deviceFacade.cpp:64
bool IsActive()
Definition deviceFacade.cpp:50
void SetState(::metadaqif::DaqState state)
Definition deviceFacade.cpp:68
std::string GetMsg() const noexcept
Definition deviceFacade.cpp:72
std::vector< std::string > GetFiles() const noexcept
Definition deviceFacade.cpp:76
double GetTimestamp() const noexcept
Definition deviceFacade.cpp:80
bool IsStopped()
Definition deviceFacade.cpp:57
void StopDaq(std::string filename)
Definition deviceFacade.cpp:39
void StartDaq(std::string filename)
Definition deviceFacade.cpp:34