ifw-fcf  4.1.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 <fcf/common/dispatcher.hpp>
24 #include <fcf/devmgr/common/events.rad.hpp>
25 
26 namespace fcf {
27  namespace devmgr {
28  namespace common {
29 
30  struct DaqInfo {
31  ::metadaqif::DaqState m_state{::metadaqif::DaqState::Undefined};
32  std::string m_msg{""};
33  std::vector<std::string> m_files;
34  double m_timestamp{0};
35 
36  void StartDaq(std::string filename);
37  void StopDaq(std::string filename);
38  void AbortDaq(std::string msg);
39  bool IsActive();
40  bool IsStopped();
41  };
42 
43  class Config;
44  class IDevice;
45 
53  class DeviceFacade {
54  public:
63  DeviceFacade(rad::SMAdapter& sm,
64  Config& config,
65  fcf::common::Dispatcher<>& failure,
66  fcf::common::Dispatcher<>& normal);
67 
71  virtual ~DeviceFacade();
72 
77  virtual bool Init(rad::SMAdapter& sm, rad::ThreadActivity* activity);
78 
86  virtual bool Enable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
87 
95  virtual bool Recover(rad::SMAdapter& sm, rad::ThreadActivity* activity);
100  virtual bool Disable();
101 
123  virtual bool Setup(const std::any& payload, rad::ThreadActivity* activity);
128  virtual void Stop();
129 
134  virtual void Reset();
135 
142  virtual void Status(const std::any& payload, std::string& buffer);
143 
144 
149  virtual void Simulate(rad::AnyEvent const& last_event);
150 
155  virtual void StopSim(rad::AnyEvent const& last_event);
156 
161  virtual void Ignore(rad::AnyEvent const& last_event);
162 
167  virtual void StopIgn(rad::AnyEvent const& last_event);
168 
173  virtual void HwReset(rad::AnyEvent const& last_event);
174 
179  virtual void HwInit(rad::AnyEvent const& last_event);
180 
185  virtual void HwEnable(rad::AnyEvent const& last_event);
186 
191  virtual void HwDisable(rad::AnyEvent const& last_event);
192 
197  virtual std::string DevNames() const;
198 
203  virtual std::string DevInfo() const;
204 
209  virtual std::string DevConfig(const std::string devname) const;
210 
221  void StartDaq(std::string daqid);
222 
238  fcf::devmgr::common::DaqInfo StopDaq(std::string daqid);
239 
246  void AbortDaq(std::string daqid);
247 
254  fcf::devmgr::common::DaqInfo GetDaqStatus(std::string daqid) const;
255 
263  void TriggerInternalEvent(rad::SMAdapter& sm, rad::UniqueEvent&& e);
264 
271  void AddDevice(std::shared_ptr<IDevice> device);
272 
276  void ClearDevices();
277 
282  fcf::common::Dispatcher<>& GetFailureCB();
283 
288  fcf::common::Dispatcher<>& GetNormalCB();
289 
294  const int GetNumDevices() const noexcept;
295 
296  private:
297 
298  DeviceFacade(const DeviceFacade&) = delete;
299  DeviceFacade& operator= (const DeviceFacade&) = delete;
300 
309  void InitSync(rad::ThreadActivity* activity,
310  std::chrono::system_clock::time_point start_time,
311  bool& stopped,
312  bool& timeout);
313 
322  void EnableSync(rad::ThreadActivity* activity,
323  std::chrono::system_clock::time_point start_time,
324  bool& stopped,
325  bool& timeout);
326 
332  void DeviceFailureCB();
333 
340  void DeviceNormalCB();
341 
342  void CheckDeviceName(const std::vector<std::string>& devices) const;
343 
344  std::vector<std::shared_ptr<IDevice> > m_devices;
345  std::vector<std::string> m_device_names;
346  boost::asio::io_service m_ios;
347  rad::SMAdapter& m_sm;
348  Config& m_config;
349  std::string m_dp_filename;
350  std::map<std::string, fcf::devmgr::common::DaqInfo> m_daq;
355  fcf::common::Dispatcher<> m_failure;
356 
360  fcf::common::Dispatcher<> m_normal;
361 
362  private:
363  log4cplus::Logger m_logger;
364  };
365  }
366  }
367 } // namespace devmgr::Common
368 
369 #endif // FCF_DEVMGR_COMMON_DEVICE_FACADE_HPP_
fcf::devmgr::common::DeviceFacade::Init
virtual bool Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all devices managed by the devmgr.
Definition: deviceFacade.cpp:95
fcf::devmgr::common::DaqInfo::IsActive
bool IsActive()
Definition: deviceFacade.cpp:57
fcf::devmgr::common::DeviceFacade::~DeviceFacade
virtual ~DeviceFacade()
~DeviceFacade
Definition: deviceFacade.cpp:91
fcf::devmgr::common::DeviceFacade::ClearDevices
void ClearDevices()
Empty internal device map.
Definition: deviceFacade.cpp:741
fcf::devmgr::common::DeviceFacade::TriggerInternalEvent
void TriggerInternalEvent(rad::SMAdapter &sm, rad::UniqueEvent &&e)
Trigger an internal event.
Definition: deviceFacade.cpp:729
fcf::devmgr::common::DeviceFacade::StopIgn
virtual void StopIgn(rad::AnyEvent const &last_event)
Stop ignoring devices managed by the server.
Definition: deviceFacade.cpp:542
device.hpp
Device class header file.
fcf::devmgr::common::DeviceFacade::HwReset
virtual void HwReset(rad::AnyEvent const &last_event)
Reset hardware.
Definition: deviceFacade.cpp:554
fcf::devmgr::common::DeviceFacade::Simulate
virtual void Simulate(rad::AnyEvent const &last_event)
Simulate devices managed by the server.
Definition: deviceFacade.cpp:506
fcf::devmgr::common::DeviceFacade::Status
virtual void Status(const std::any &payload, std::string &buffer)
Get status from devices.
Definition: deviceFacade.cpp:493
fcf::devmgr::common::DeviceFacade::StopDaq
fcf::devmgr::common::DaqInfo StopDaq(std::string daqid)
Stop Data Acquisition.
Definition: deviceFacade.cpp:646
fcf::devmgr::common::DeviceFacade::GetDaqStatus
fcf::devmgr::common::DaqInfo GetDaqStatus(std::string daqid) const
Get Daq Status.
Definition: deviceFacade.cpp:717
fcf::devmgr::common::DeviceFacade::AddDevice
void AddDevice(std::shared_ptr< IDevice > device)
Add a device instance to be managed by the facade.
Definition: deviceFacade.cpp:735
fcf::devmgr::common::DeviceFacade::StopSim
virtual void StopSim(rad::AnyEvent const &last_event)
Stop simulating devices managed by the server.
Definition: deviceFacade.cpp:518
fcf::devmgr::common::DeviceFacade::DevInfo
virtual std::string DevInfo() const
Get information of managed devices.
Definition: deviceFacade.cpp:982
fcf::devmgr::common::DaqInfo::m_msg
std::string m_msg
Definition: deviceFacade.hpp:32
fcf::devmgr::common::DaqInfo
Definition: deviceFacade.hpp:30
fcf::devmgr::common::DeviceFacade::GetNormalCB
fcf::common::Dispatcher & GetNormalCB()
Get reference to normal CB.
Definition: deviceFacade.cpp:751
fcf::devmgr::common::DeviceFacade::GetNumDevices
const int GetNumDevices() const noexcept
Get the number of devices.
Definition: deviceFacade.cpp:783
fcf::devmgr::common::DaqInfo::AbortDaq
void AbortDaq(std::string msg)
Definition: deviceFacade.cpp:51
fcf::devmgr::common::DeviceFacade::Setup
virtual bool Setup(const std::any &payload, rad::ThreadActivity *activity)
Executes a setup message.
Definition: deviceFacade.cpp:380
fcf::devmgr::common::DeviceFacade::HwDisable
virtual void HwDisable(rad::AnyEvent const &last_event)
Disable hardware.
Definition: deviceFacade.cpp:592
fcf::devmgr::common::DeviceFacade
Definition: deviceFacade.hpp:53
fcf::devmgr::common::DeviceFacade::Recover
virtual bool Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all devices managed by the devmgr.
Definition: deviceFacade.cpp:262
fcf
Definition: actionMgr.cpp:29
fcf::devmgr::common::DeviceFacade::HwInit
virtual void HwInit(rad::AnyEvent const &last_event)
Init hardware.
Definition: deviceFacade.cpp:566
fcf::devmgr::common::Config
Definition: config.hpp:56
fcf::devmgr::common::DeviceFacade::DeviceFacade
DeviceFacade(rad::SMAdapter &sm, Config &config, fcf::common::Dispatcher<> &failure, fcf::common::Dispatcher<> &normal)
Definition: deviceFacade.cpp:71
fcf::devmgr::common::DeviceFacade::AbortDaq
void AbortDaq(std::string daqid)
Abort Data Acquisition.
Definition: deviceFacade.cpp:699
fcf::devmgr::common::DeviceFacade::DevConfig
virtual std::string DevConfig(const std::string devname) const
Get configuration for a given device.
Definition: deviceFacade.cpp:1000
fcf::devmgr::common::DaqInfo::m_timestamp
double m_timestamp
Definition: deviceFacade.hpp:34
fcf::devmgr::common::DaqInfo::StartDaq
void StartDaq(std::string filename)
Definition: deviceFacade.cpp:41
fcf::devmgr::common::DaqInfo::m_files
std::vector< std::string > m_files
Definition: deviceFacade.hpp:33
fcf::devmgr::common::DaqInfo::StopDaq
void StopDaq(std::string filename)
Definition: deviceFacade.cpp:46
fcf::devmgr::common::DeviceFacade::Ignore
virtual void Ignore(rad::AnyEvent const &last_event)
Ignore devices managed by the server.
Definition: deviceFacade.cpp:530
fcf::devmgr::common::DeviceFacade::Reset
virtual void Reset()
Reset devices.
Definition: deviceFacade.cpp:481
fcf::devmgr::common::DeviceFacade::DevNames
virtual std::string DevNames() const
Get list of managed devices.
Definition: deviceFacade.cpp:973
fcf::devmgr::common::DaqInfo::IsStopped
bool IsStopped()
Definition: deviceFacade.cpp:64
fcf::devmgr::common::DeviceFacade::Stop
virtual void Stop()
Abort all devices managed by the devmgr.
Definition: deviceFacade.cpp:473
fcf::devmgr::common::DaqInfo::m_state
::metadaqif::DaqState m_state
Definition: deviceFacade.hpp:31
fcf::devmgr::common::DeviceFacade::StartDaq
void StartDaq(std::string daqid)
Start Data Acquisition.
Definition: deviceFacade.cpp:604
fcf::devmgr::common::DeviceFacade::GetFailureCB
fcf::common::Dispatcher & GetFailureCB()
Get reference to failure CB.
Definition: deviceFacade.cpp:747
fcf::devmgr::common::DeviceFacade::Disable
virtual bool Disable()
Disable all devices managed by the devmgr.
Definition: deviceFacade.cpp:354
fcf::devmgr::common::DeviceFacade::HwEnable
virtual void HwEnable(rad::AnyEvent const &last_event)
Enable hardware.
Definition: deviceFacade.cpp:580
fcf::devmgr::common::DeviceFacade::Enable
virtual bool Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all devices managed by the devmgr.
Definition: deviceFacade.cpp:141