ifw-fcf  5.0.0-pre2
deviceFacade.hpp
Go to the documentation of this file.
1 
9 #ifndef FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
10 #define FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
11 
12 // System headers
13 #include <list>
14 
15 // Local headers
16 #include <rad/smAdapter.hpp>
17 #include <rad/topicPub.hpp>
18 #include <rad/anyEvent.hpp>
19 #include <rad/activity.hpp>
20 #include <utils/bat/logger.hpp>
21 
22 #include <ifw/core/protocol/base/dispatcher.hpp>
24 #include <fcf/devmgr/common/events.rad.hpp>
25 
26 
27 namespace fcf {
28  namespace devmgr {
29  namespace common {
30 
31  struct DaqInfo {
32  ::metadaqif::DaqState m_state{::metadaqif::DaqState::Undefined};
33  std::string m_msg{""};
34  std::vector<std::string> m_files;
35  double m_timestamp{0};
36 
37  void StartDaq(std::string filename);
38  void StopDaq(std::string filename);
39  void AbortDaq(std::string msg);
40  bool IsActive();
41  bool IsStopped();
42  };
43 
44  class Config;
45  class IDevice;
46 
54  class DeviceFacade {
55  public:
64  DeviceFacade(rad::SMAdapter& sm,
65  Config& config,
66  protocol::base::Dispatcher<>& failure,
67  protocol::base::Dispatcher<>& normal);
68 
72  virtual ~DeviceFacade();
73 
78  virtual bool Init(rad::SMAdapter& sm, rad::ThreadActivity* activity);
79 
87  virtual bool Enable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
88 
96  virtual bool Recover(rad::SMAdapter& sm, rad::ThreadActivity* activity);
101  virtual bool Disable();
102 
124  virtual bool Setup(const std::any& payload, rad::ThreadActivity* activity);
129  virtual void Stop();
130 
135  virtual void Reset();
136 
143  virtual void Status(const std::any& payload, std::string& buffer);
144 
145 
150  virtual void Simulate(rad::AnyEvent const& last_event);
151 
156  virtual void StopSim(rad::AnyEvent const& last_event);
157 
162  virtual void Ignore(rad::AnyEvent const& last_event);
163 
168  virtual void StopIgn(rad::AnyEvent const& last_event);
169 
174  virtual void HwReset(rad::AnyEvent const& last_event);
175 
180  virtual void HwInit(rad::AnyEvent const& last_event);
181 
186  virtual void HwEnable(rad::AnyEvent const& last_event);
187 
192  virtual void HwDisable(rad::AnyEvent const& last_event);
193 
198  virtual std::string DevNames() const;
199 
204  virtual std::string DevInfo() const;
205 
210  virtual std::string DevConfig(const std::string devname) const;
211 
222  void StartDaq(std::string daqid);
223 
239  fcf::devmgr::common::DaqInfo StopDaq(std::string daqid);
240 
247  void AbortDaq(std::string daqid);
248 
255  fcf::devmgr::common::DaqInfo GetDaqStatus(std::string daqid) const;
256 
264  void TriggerInternalEvent(rad::SMAdapter& sm, rad::UniqueEvent&& e);
265 
272  void AddDevice(std::shared_ptr<IDevice> device);
273 
277  void ClearDevices();
278 
283  protocol::base::Dispatcher<>& GetFailureCB();
284 
289  protocol::base::Dispatcher<>& GetNormalCB();
290 
295  const int GetNumDevices() const noexcept;
296 
297  private:
298 
299  DeviceFacade(const DeviceFacade&) = delete;
300  DeviceFacade& operator= (const DeviceFacade&) = delete;
301 
310  void InitSync(rad::ThreadActivity* activity,
311  std::chrono::system_clock::time_point start_time,
312  bool& stopped,
313  bool& timeout);
314 
323  void EnableSync(rad::ThreadActivity* activity,
324  std::chrono::system_clock::time_point start_time,
325  bool& stopped,
326  bool& timeout);
327 
333  void DeviceFailureCB();
334 
341  void DeviceNormalCB();
342 
343  void CheckDeviceName(const std::vector<std::string>& devices) const;
344 
345  std::vector<std::shared_ptr<IDevice> > m_devices;
346  std::vector<std::string> m_device_names;
347  boost::asio::io_service m_ios;
348  rad::SMAdapter& m_sm;
349  Config& m_config;
350  std::string m_dp_filename;
352  std::map<std::string, fcf::devmgr::common::DaqInfo> m_daq;
356  protocol::base::Dispatcher<> m_failure;
357 
361  protocol::base::Dispatcher<> m_normal;
362  private:
363  log4cplus::Logger m_logger;
364  };
365  }
366  }
367 } // namespace devmgr::Common
368 
369 #endif // FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
Definition: config.hpp:56
Definition: deviceFacade.hpp:54
virtual std::string DevNames() const
Get list of managed devices.
Definition: deviceFacade.cpp:982
virtual void HwEnable(rad::AnyEvent const &last_event)
Enable hardware.
Definition: deviceFacade.cpp:588
virtual bool Disable()
Disable all devices managed by the devmgr.
Definition: deviceFacade.cpp:354
fcf::devmgr::common::DaqInfo GetDaqStatus(std::string daqid) const
Get Daq Status.
Definition: deviceFacade.cpp:726
virtual void StopIgn(rad::AnyEvent const &last_event)
Stop ignoring devices managed by the server.
Definition: deviceFacade.cpp:550
virtual void Reset()
Reset devices.
Definition: deviceFacade.cpp:489
void AbortDaq(std::string daqid)
Abort Data Acquisition.
Definition: deviceFacade.cpp:708
virtual bool Setup(const std::any &payload, rad::ThreadActivity *activity)
Executes a setup message.
Definition: deviceFacade.cpp:380
virtual ~DeviceFacade()
~DeviceFacade
Definition: deviceFacade.cpp:91
virtual void Simulate(rad::AnyEvent const &last_event)
Simulate devices managed by the server.
Definition: deviceFacade.cpp:514
virtual void HwDisable(rad::AnyEvent const &last_event)
Disable hardware.
Definition: deviceFacade.cpp:599
virtual void StopSim(rad::AnyEvent const &last_event)
Stop simulating devices managed by the server.
Definition: deviceFacade.cpp:526
void ClearDevices()
Empty internal device map.
Definition: deviceFacade.cpp:750
const int GetNumDevices() const noexcept
Get the number of devices.
Definition: deviceFacade.cpp:792
virtual void Stop()
Abort all devices managed by the devmgr.
Definition: deviceFacade.cpp:481
virtual std::string DevConfig(const std::string devname) const
Get configuration for a given device.
Definition: deviceFacade.cpp:1009
virtual void Status(const std::any &payload, std::string &buffer)
Get status from devices.
Definition: deviceFacade.cpp:501
virtual void Ignore(rad::AnyEvent const &last_event)
Ignore devices managed by the server.
Definition: deviceFacade.cpp:538
fcf::devmgr::common::DaqInfo StopDaq(std::string daqid)
Stop Data Acquisition.
Definition: deviceFacade.cpp:655
virtual void HwInit(rad::AnyEvent const &last_event)
Init hardware.
Definition: deviceFacade.cpp:574
virtual std::string DevInfo() const
Get information of managed devices.
Definition: deviceFacade.cpp:991
virtual bool Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all devices managed by the devmgr.
Definition: deviceFacade.cpp:141
DeviceFacade(rad::SMAdapter &sm, Config &config, protocol::base::Dispatcher<> &failure, protocol::base::Dispatcher<> &normal)
Definition: deviceFacade.cpp:70
void StartDaq(std::string daqid)
Start Data Acquisition.
Definition: deviceFacade.cpp:611
void TriggerInternalEvent(rad::SMAdapter &sm, rad::UniqueEvent &&e)
Trigger an internal event.
Definition: deviceFacade.cpp:738
protocol::base::Dispatcher & GetNormalCB()
Get reference to normal CB.
Definition: deviceFacade.cpp:760
void AddDevice(std::shared_ptr< IDevice > device)
Add a device instance to be managed by the facade.
Definition: deviceFacade.cpp:744
virtual bool Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all devices managed by the devmgr.
Definition: deviceFacade.cpp:262
protocol::base::Dispatcher & GetFailureCB()
Get reference to failure CB.
Definition: deviceFacade.cpp:756
virtual bool Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all devices managed by the devmgr.
Definition: deviceFacade.cpp:95
virtual void HwReset(rad::AnyEvent const &last_event)
Reset hardware.
Definition: deviceFacade.cpp:562
Device class header file.
Definition: actionMgr.cpp:29
Definition: deviceFacade.hpp:31
std::vector< std::string > m_files
Definition: deviceFacade.hpp:34
double m_timestamp
Definition: deviceFacade.hpp:35
void StopDaq(std::string filename)
Definition: deviceFacade.cpp:45
bool IsStopped()
Definition: deviceFacade.cpp:63
std::string m_msg
Definition: deviceFacade.hpp:33
void AbortDaq(std::string msg)
Definition: deviceFacade.cpp:50
void StartDaq(std::string filename)
Definition: deviceFacade.cpp:40
bool IsActive()
Definition: deviceFacade.cpp:56
::metadaqif::DaqState m_state
Definition: deviceFacade.hpp:32