ifw-fcf 8.0.2
 
Loading...
Searching...
No Matches
deviceFacade.hpp
Go to the documentation of this file.
1
7
8#ifndef FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
9#define FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
10
11#include <functional>
12#include <list>
13
14#include <rad/smAdapter.hpp>
15#include <rad/topicPub.hpp>
16#include <rad/anyEvent.hpp>
17#include <rad/activity.hpp>
18#include <ifw/core/utils/bat/logger.hpp>
19
21#include <ifw/fcf/devmgr/common/events.rad.hpp>
22
23
24namespace ifw::fcf {
25 namespace devmgr {
26 namespace common {
27
28 struct DaqInfo {
29
30 void StartDaq(std::string filename);
31 void StopDaq(std::string filename);
32 void AbortDaq(std::string msg);
33 bool IsActive();
34 bool IsStopped();
35
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;
40 double GetTimestamp() const noexcept;
41
42 private:
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};
47 };
48
49 class Config;
50 class IDevice;
51
60 public:
69 DeviceFacade(rad::SMAdapter& sm,
70 Config& config,
71 std::function<void()> on_failure,
72 std::function<void()> on_normal);
73
77 virtual ~DeviceFacade();
78
83 virtual bool Init(rad::SMAdapter& sm, rad::ThreadActivity* activity);
84
92 virtual bool Enable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
93
101 virtual bool Recover(rad::SMAdapter& sm, rad::ThreadActivity* activity);
106 virtual bool Disable();
107
125 virtual bool AsyncSetup(const std::any& payload);
126
148 virtual bool Setup(const std::any& payload, rad::ThreadActivity* activity);
153 virtual void Stop();
154
159 virtual void Reset();
160
167 virtual void Status(const std::any& payload, std::string& buffer);
168
169
174 virtual void Simulate(rad::AnyEvent const& last_event);
175
180 virtual void StopSim(rad::AnyEvent const& last_event);
181
186 virtual void Ignore(rad::AnyEvent const& last_event);
187
192 virtual void StopIgn(rad::AnyEvent const& last_event);
193
198 virtual void HwReset(rad::AnyEvent const& last_event);
199
204 virtual void HwInit(rad::AnyEvent const& last_event);
205
210 virtual void HwEnable(rad::AnyEvent const& last_event);
211
216 virtual void HwDisable(rad::AnyEvent const& last_event);
217
222 virtual std::string DevNames() const;
223
228 std::string GetDeviceType(const std::string& devname) const;
229
234 virtual std::string DevInfo() const;
235
240 virtual std::string DevConfig(const std::string devname) const;
241
252 void StartDaq(std::string daqid);
253
259 virtual void AddCustomStartStatus(const ifw::core::dit::did::Did& dictionary,
260 std::shared_ptr<CCfits::FITS>& fits_handle);
261
278
284 virtual void AddCustomStopStatus(const ifw::core::dit::did::Did& dictionary,
285 std::shared_ptr<CCfits::FITS>& fits_handle);
286
293 void AbortDaq(std::string daqid);
294
301 ifw::fcf::devmgr::common::DaqInfo GetDaqStatus(std::string daqid) const;
302
310 void TriggerInternalEvent(rad::SMAdapter& sm, rad::UniqueEvent&& e);
311
318 void AddDevice(std::shared_ptr<IDevice> device);
319
323 void ClearDevices();
324
330 std::function<void()> GetFailureCB();
331
336 std::function<void()> GetNormalCB();
337
342 const int GetNumDevices() const noexcept;
343
347 void CheckDeviceName(const std::vector<std::string>& devices) const;
348
349 private:
350
351 DeviceFacade(const DeviceFacade&) = delete;
352 DeviceFacade& operator= (const DeviceFacade&) = delete;
353
362 void InitSync(rad::ThreadActivity* activity,
363 std::chrono::system_clock::time_point start_time,
364 bool& stopped,
365 bool& timeout);
366
375 void EnableSync(rad::ThreadActivity* activity,
376 std::chrono::system_clock::time_point start_time,
377 bool& stopped,
378 bool& timeout);
379
385 void DeviceFailureCB();
386
393 void DeviceNormalCB();
394
395 private:
396 std::vector<std::shared_ptr<IDevice> > m_devices;
397 std::vector<std::string> m_device_names;
398 boost::asio::io_service m_ios;
399 rad::SMAdapter& m_sm;
400 Config& m_config;
401 std::string m_dp_filename;
403 std::map<std::string, fcf::devmgr::common::DaqInfo> m_daq;
407 std::function<void()> m_on_failure;
408
412 std::function<void()> m_on_normal;
413 private:
414 log4cplus::Logger m_logger;
415 };
416 }
417 }
418} // namespace devmgr::Common
419
420#endif // FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
Definition config.hpp:55
virtual bool Disable()
Disable all devices managed by the devmgr.
Definition deviceFacade.cpp:372
virtual void Reset()
Reset devices.
Definition deviceFacade.cpp:528
virtual std::string DevInfo() const
Get information of managed devices.
Definition deviceFacade.cpp:1069
ifw::fcf::devmgr::common::DaqInfo StopDaq(std::string daqid)
Stop Data Acquisition.
Definition deviceFacade.cpp:701
virtual void HwInit(rad::AnyEvent const &last_event)
Init hardware.
Definition deviceFacade.cpp:613
std::function< void()> GetFailureCB()
Return the failure callback hook (replaces GetFailureCB which returned a Dispatcher<>&)....
Definition deviceFacade.cpp:810
void AbortDaq(std::string daqid)
Abort Data Acquisition.
Definition deviceFacade.cpp:762
virtual bool AsyncSetup(const std::any &payload)
Executes a setup message.
Definition deviceFacade.cpp:398
virtual bool Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all devices managed by the devmgr.
Definition deviceFacade.cpp:113
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:756
void TriggerInternalEvent(rad::SMAdapter &sm, rad::UniqueEvent &&e)
Trigger an internal event.
Definition deviceFacade.cpp:792
virtual void Status(const std::any &payload, std::string &buffer)
Get status from devices.
Definition deviceFacade.cpp:540
virtual bool Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all devices managed by the devmgr.
Definition deviceFacade.cpp:280
std::string GetDeviceType(const std::string &devname) const
Get type of device managed by the server.
Definition deviceFacade.cpp:1046
virtual std::string DevConfig(const std::string devname) const
Get configuration for a given device.
Definition deviceFacade.cpp:1087
virtual void Stop()
Abort all devices managed by the devmgr.
Definition deviceFacade.cpp:520
virtual void Ignore(rad::AnyEvent const &last_event)
Ignore devices managed by the server.
Definition deviceFacade.cpp:577
ifw::fcf::devmgr::common::DaqInfo GetDaqStatus(std::string daqid) const
Get Daq Status.
Definition deviceFacade.cpp:780
DeviceFacade(rad::SMAdapter &sm, Config &config, std::function< void()> on_failure, std::function< void()> on_normal)
Definition deviceFacade.cpp:84
virtual std::string DevNames() const
Get list of managed devices.
Definition deviceFacade.cpp:1060
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:695
virtual bool Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all devices managed by the devmgr.
Definition deviceFacade.cpp:159
void StartDaq(std::string daqid)
Start Data Acquisition.
Definition deviceFacade.cpp:650
void ClearDevices()
Empty internal device map.
Definition deviceFacade.cpp:804
virtual void HwReset(rad::AnyEvent const &last_event)
Reset hardware.
Definition deviceFacade.cpp:601
virtual void StopSim(rad::AnyEvent const &last_event)
Stop simulating devices managed by the server.
Definition deviceFacade.cpp:565
void AddDevice(std::shared_ptr< IDevice > device)
Add a device instance to be managed by the facade.
Definition deviceFacade.cpp:798
virtual ~DeviceFacade()
~DeviceFacade
Definition deviceFacade.cpp:109
const int GetNumDevices() const noexcept
Get the number of devices.
Definition deviceFacade.cpp:846
virtual void HwDisable(rad::AnyEvent const &last_event)
Disable hardware.
Definition deviceFacade.cpp:638
void CheckDeviceName(const std::vector< std::string > &devices) const
Check if list of devices are managed by the server.
Definition deviceFacade.cpp:1031
virtual void HwEnable(rad::AnyEvent const &last_event)
Enable hardware.
Definition deviceFacade.cpp:627
std::function< void()> GetNormalCB()
Return the recovery callback hook (replaces GetNormalCB which returned a Dispatcher<>&).
Definition deviceFacade.cpp:814
virtual void StopIgn(rad::AnyEvent const &last_event)
Stop ignoring devices managed by the server.
Definition deviceFacade.cpp:589
virtual bool Setup(const std::any &payload, rad::ThreadActivity *activity)
Executes a setup message.
Definition deviceFacade.cpp:419
virtual void Simulate(rad::AnyEvent const &last_event)
Simulate devices managed by the server.
Definition deviceFacade.cpp:553
Definition iDevice.hpp:41
ActionMgr class source file.
Definition actionMgr.cpp:28
actuatorLcsIf class header file.
Definition actionMgr.cpp:28
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