ifw-sup 5.0.0
Loading...
Searching...
No Matches
subsysFacade.hpp
Go to the documentation of this file.
1
9#ifndef SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
10#define SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
11
12// System headers
13#include <iostream>
14#include <list>
15#include <atomic>
16#include <type_traits>
17
18// Local headers
19#include <rad/smAdapter.hpp>
20#include <rad/topicPub.hpp>
21#include <rad/anyEvent.hpp>
22#include <rad/activity.hpp>
23#include <rad/mal/utils.hpp>
24
25
27#include <ifw/sup/syssup/common/events.rad.hpp>
28
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
45 template<typename T>
46 std::ostream& operator<<(typename std::enable_if<std::is_enum<T>::value, std::ostream>::type& stream, const T& e)
47 {
48 return stream << static_cast<typename std::underlying_type<T>::type>(e);
49 }
50
56 template<typename EVENT_TYPE>
58 public:
59 using Request = std::optional<typename EVENT_TYPE::payload_t>;
60 using RequestMap = std::map<std::string, Request>;
61 using RequestPair = std::pair<std::string, Request>;
62
63 public:
65 void ReplyOk(std::string req_id, std::string msg);
66 void ReplyError(std::string req_id, std::string msg);
67
69 };
70
71 class IConfig;
72 class ISubsys;
73
82 public:
89 SubsysFacade(rad::SMAdapter& sm,
90 DataContext& data_ctx);
91
95 virtual ~SubsysFacade();
96
114 void Connect();
115
124 void StartMonitoring();
125
136 void Init(rad::SMAdapter& sm, rad::ThreadActivity* activity);
137
145 void Enable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
146
158 void Disable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
159
171 void Recover(rad::SMAdapter& sm, rad::ThreadActivity* activity);
172
176 void DisableAccess();
177
178 void SetAccess(std::string subsys, bool access);
179
198 void Setup(const std::any& payload);
199
204 virtual void Stop();
205
210 virtual void Reset();
211
212
240 template<typename EVENT_TYPE, typename OBJECT>
241 void SubsysCommand(scxml4cpp::Context* c, OBJECT& obj);
242
247 void UpdateConfiguration();
248
257 void UpdateHandler();
258
286 virtual void EstimateState(std::vector<State::StateEnum>& states,
287 std::vector<State::SubstateEnum>& substates);
288
294 void SetSubsystemConnectionState(std::string name,
295 SubsysData::ConnectionEnum connection);
296
302 void SetSubsystemState(std::string name, std::string state);
303
310 void SetSubsystemStates(std::string name,
311 std::string state,
312 std::string substate);
313
319 void SetSubsystemSubstate(std::string name, std::string substate);
320
329 void GetSubsystemStatus(const std::string& payload, std::string& buffer);
330
331
338 void AddSubsys(std::unique_ptr<Subsys> subsys);
339
343 void ClearSubsys();
344
345
350 const int GetNumSubsys();
351
356 std::string GetSubsysNames();
357
368 void StartDaq(std::string daqid);
369
385 DaqInfo StopDaq(std::string daqid);
386
393 void AbortDaq(std::string daqid);
394
401 DaqInfo GetDaqStatus(std::string daqid) const;
402
403 private:
404
405 SubsysFacade(const SubsysFacade&) = delete;
406 SubsysFacade& operator= (const SubsysFacade&) = delete;
407
408
419 template <typename Iterator, typename EVENT_DONE, typename EVENT_ERR, typename EVENT_TOUT>
420 void ManageReply(Iterator& vec, rad::ThreadActivity* activity,
421 int wait_time_msecs, bool reply_on_success = true);
422
423
424 bool CheckSubsysName(const std::string& subsys) const;
425
426 std::vector<std::unique_ptr<Subsys> > m_subsyss;
427 std::vector<std::string> m_subsys_names;
428 boost::asio::io_service m_ios;
429 rad::SMAdapter& m_sm;
430 DataContext& m_data_ctx;
431 std::string m_dp_filename;
433 std::map<std::string, DaqInfo> m_daq;
434 log4cplus::Logger m_logger;
435
436
437 public:
442 };
443
444} // namespace devmgr::Common
445
446#include "subsysFacade.ipp"
447
448#endif // SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
Definition dataContext.hpp:67
Definition iSubsys.hpp:28
Definition subsysFacade.hpp:57
std::pair< std::string, Request > RequestPair
Definition subsysFacade.hpp:61
void ReplyOk(std::string req_id, std::string msg)
std::map< std::string, Request > RequestMap
Definition subsysFacade.hpp:60
std::optional< typename EVENT_TYPE::payload_t > Request
Definition subsysFacade.hpp:59
void ReplyError(std::string req_id, std::string msg)
void InsertRequest(RequestPair pair)
RequestMap m_req_map
Definition subsysFacade.hpp:68
Definition subsysFacade.hpp:81
virtual void Stop()
Abort all subsystems managed by the devmgr.
Definition subsysFacade.cpp:323
SingleReplier< Events::SubEnable > m_enable_replier
Definition subsysFacade.hpp:439
void Setup(const std::any &payload)
Executes a setup message.
Definition subsysFacade.cpp:658
void DisableAccess()
Disable Access for all subsystems.
Definition subsysFacade.cpp:621
SingleReplier< Events::SubDisable > m_disable_replier
Definition subsysFacade.hpp:440
void Connect()
Connect.
Definition subsysFacade.cpp:84
void Disable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Disable all subsystems managed by the Supervisor.
Definition subsysFacade.cpp:294
SingleReplier< Events::SubInit > m_init_replier
Definition subsysFacade.hpp:438
SingleReplier< Events::SubReset > m_reset_replier
Definition subsysFacade.hpp:441
std::string GetSubsysNames()
Get list of subsystems managed by the Supervisor.
Definition subsysFacade.cpp:403
void GetSubsystemStatus(const std::string &payload, std::string &buffer)
Get subsystem status.
Definition subsysFacade.cpp:454
const int GetNumSubsys()
Get the number of subsystems.
Definition subsysFacade.cpp:382
void SetAccess(std::string subsys, bool access)
Definition subsysFacade.cpp:630
void ClearSubsys()
Empty internal subsys map.
Definition subsysFacade.cpp:374
SubsysFacade(rad::SMAdapter &sm, DataContext &data_ctx)
Definition subsysFacade.cpp:71
virtual ~SubsysFacade()
~SubsysFacade
Definition subsysFacade.cpp:80
void UpdateConfiguration()
Triggers the update of the subsystem configuration.
Definition subsysFacade.cpp:469
void StartDaq(std::string daqid)
Start Data Acquisition.
Definition subsysFacade.cpp:670
void Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all subsystems managed by the Supervisor.
Definition subsysFacade.cpp:174
void StartMonitoring()
StartMonitoring.
Definition subsysFacade.cpp:165
void Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all subsystems managed by the Supervisor.
Definition subsysFacade.cpp:284
void AbortDaq(std::string daqid)
Abort Data Acquisition.
Definition subsysFacade.cpp:762
void SetSubsystemStates(std::string name, std::string state, std::string substate)
Set the subsystem states: state and substate.
Definition subsysFacade.cpp:434
void AddSubsys(std::unique_ptr< Subsys > subsys)
Add a subsystems instance to be managed by the facade.
Definition subsysFacade.cpp:368
void SetSubsystemSubstate(std::string name, std::string substate)
Set the subsystem substate.
Definition subsysFacade.cpp:446
void SetSubsystemConnectionState(std::string name, SubsysData::ConnectionEnum connection)
Get subsystem connection state.
Definition subsysFacade.cpp:417
void SubsysCommand(scxml4cpp::Context *c, OBJECT &obj)
Forward request to an specific subsystem.
virtual void Reset()
Reset subsystems.
Definition subsysFacade.cpp:345
DaqInfo StopDaq(std::string daqid)
Stop Data Acquisition.
Definition subsysFacade.cpp:712
virtual void EstimateState(std::vector< State::StateEnum > &states, std::vector< State::SubstateEnum > &substates)
EstimateState.
Definition subsysFacade.cpp:517
void Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all subsystems managed by the Supervisor.
Definition subsysFacade.cpp:210
void UpdateHandler()
Triggers the update of the estimated state/substate.
Definition subsysFacade.cpp:494
void SetSubsystemState(std::string name, std::string state)
Set the subsystem state.
Definition subsysFacade.cpp:426
DaqInfo GetDaqStatus(std::string daqid) const
Get Daq Status.
Definition subsysFacade.cpp:780
ActionsInit class source file.
Definition actionMgr.cpp:32
std::ostream & operator<<(typename std::enable_if< std::is_enum< T >::value, std::ostream >::type &stream, const T &e)
Definition subsysFacade.hpp:46
Definition subsysFacade.hpp:31
bool IsActive()
Definition subsysFacade.cpp:56
std::string m_msg
Definition subsysFacade.hpp:33
std::vector< std::string > m_files
Definition subsysFacade.hpp:34
void StartDaq(std::string filename)
Definition subsysFacade.cpp:40
double m_timestamp
Definition subsysFacade.hpp:35
void StopDaq(std::string filename)
Definition subsysFacade.cpp:45
bool IsStopped()
Definition subsysFacade.cpp:63
void AbortDaq(std::string msg)
Definition subsysFacade.cpp:50
::metadaqif::DaqState m_state
Definition subsysFacade.hpp:32
ConnectionEnum
Definition subsys.hpp:42
Subsys class header file.