ifw-fcf 6.0.0
Loading...
Searching...
No Matches
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
27namespace 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
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
120 virtual bool AsyncSetup(const std::any& payload);
121
143 virtual bool Setup(const std::any& payload, rad::ThreadActivity* activity);
148 virtual void Stop();
149
154 virtual void Reset();
155
162 virtual void Status(const std::any& payload, std::string& buffer);
163
164
169 virtual void Simulate(rad::AnyEvent const& last_event);
170
175 virtual void StopSim(rad::AnyEvent const& last_event);
176
181 virtual void Ignore(rad::AnyEvent const& last_event);
182
187 virtual void StopIgn(rad::AnyEvent const& last_event);
188
193 virtual void HwReset(rad::AnyEvent const& last_event);
194
199 virtual void HwInit(rad::AnyEvent const& last_event);
200
205 virtual void HwEnable(rad::AnyEvent const& last_event);
206
211 virtual void HwDisable(rad::AnyEvent const& last_event);
212
217 virtual std::string DevNames() const;
218
223 virtual std::string DevInfo() const;
224
229 virtual std::string DevConfig(const std::string devname) const;
230
241 void StartDaq(std::string daqid);
242
258 fcf::devmgr::common::DaqInfo StopDaq(std::string daqid);
259
266 void AbortDaq(std::string daqid);
267
274 fcf::devmgr::common::DaqInfo GetDaqStatus(std::string daqid) const;
275
283 void TriggerInternalEvent(rad::SMAdapter& sm, rad::UniqueEvent&& e);
284
291 void AddDevice(std::shared_ptr<IDevice> device);
292
296 void ClearDevices();
297
302 protocol::base::Dispatcher<>& GetFailureCB();
303
308 protocol::base::Dispatcher<>& GetNormalCB();
309
314 const int GetNumDevices() const noexcept;
315
319 void CheckDeviceName(const std::vector<std::string>& devices) const;
320
321 private:
322
323 DeviceFacade(const DeviceFacade&) = delete;
324 DeviceFacade& operator= (const DeviceFacade&) = delete;
325
334 void InitSync(rad::ThreadActivity* activity,
335 std::chrono::system_clock::time_point start_time,
336 bool& stopped,
337 bool& timeout);
338
347 void EnableSync(rad::ThreadActivity* activity,
348 std::chrono::system_clock::time_point start_time,
349 bool& stopped,
350 bool& timeout);
351
357 void DeviceFailureCB();
358
365 void DeviceNormalCB();
366
367 std::vector<std::shared_ptr<IDevice> > m_devices;
368 std::vector<std::string> m_device_names;
369 boost::asio::io_service m_ios;
370 rad::SMAdapter& m_sm;
371 Config& m_config;
372 std::string m_dp_filename;
374 std::map<std::string, fcf::devmgr::common::DaqInfo> m_daq;
378 protocol::base::Dispatcher<> m_failure;
379
383 protocol::base::Dispatcher<> m_normal;
384 private:
385 log4cplus::Logger m_logger;
386 };
387 }
388 }
389} // namespace devmgr::Common
390
391#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:1003
virtual void HwEnable(rad::AnyEvent const &last_event)
Enable hardware.
Definition: deviceFacade.cpp:609
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:747
virtual void StopIgn(rad::AnyEvent const &last_event)
Stop ignoring devices managed by the server.
Definition: deviceFacade.cpp:571
virtual void Reset()
Reset devices.
Definition: deviceFacade.cpp:510
void AbortDaq(std::string daqid)
Abort Data Acquisition.
Definition: deviceFacade.cpp:729
virtual bool Setup(const std::any &payload, rad::ThreadActivity *activity)
Executes a setup message.
Definition: deviceFacade.cpp:401
virtual ~DeviceFacade()
~DeviceFacade
Definition: deviceFacade.cpp:91
virtual void Simulate(rad::AnyEvent const &last_event)
Simulate devices managed by the server.
Definition: deviceFacade.cpp:535
virtual void HwDisable(rad::AnyEvent const &last_event)
Disable hardware.
Definition: deviceFacade.cpp:620
virtual void StopSim(rad::AnyEvent const &last_event)
Stop simulating devices managed by the server.
Definition: deviceFacade.cpp:547
void ClearDevices()
Empty internal device map.
Definition: deviceFacade.cpp:771
const int GetNumDevices() const noexcept
Get the number of devices.
Definition: deviceFacade.cpp:813
virtual void Stop()
Abort all devices managed by the devmgr.
Definition: deviceFacade.cpp:502
virtual std::string DevConfig(const std::string devname) const
Get configuration for a given device.
Definition: deviceFacade.cpp:1030
virtual void Status(const std::any &payload, std::string &buffer)
Get status from devices.
Definition: deviceFacade.cpp:522
virtual void Ignore(rad::AnyEvent const &last_event)
Ignore devices managed by the server.
Definition: deviceFacade.cpp:559
fcf::devmgr::common::DaqInfo StopDaq(std::string daqid)
Stop Data Acquisition.
Definition: deviceFacade.cpp:676
virtual void HwInit(rad::AnyEvent const &last_event)
Init hardware.
Definition: deviceFacade.cpp:595
virtual bool AsyncSetup(const std::any &payload)
Executes a setup message.
Definition: deviceFacade.cpp:380
virtual std::string DevInfo() const
Get information of managed devices.
Definition: deviceFacade.cpp:1012
virtual bool Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all devices managed by the devmgr.
Definition: deviceFacade.cpp:141
void StartDaq(std::string daqid)
Start Data Acquisition.
Definition: deviceFacade.cpp:632
void CheckDeviceName(const std::vector< std::string > &devices) const
Check if list of devices are managed by the server.
Definition: deviceFacade.cpp:988
void TriggerInternalEvent(rad::SMAdapter &sm, rad::UniqueEvent &&e)
Trigger an internal event.
Definition: deviceFacade.cpp:759
protocol::base::Dispatcher & GetNormalCB()
Get reference to normal CB.
Definition: deviceFacade.cpp:781
void AddDevice(std::shared_ptr< IDevice > device)
Add a device instance to be managed by the facade.
Definition: deviceFacade.cpp:765
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:777
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:583
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