ifw-sup 5.1.0
 
Loading...
Searching...
No Matches
subsysFacade.hpp
Go to the documentation of this file.
1
7
8#ifndef SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
9#define SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
10
11// System headers
12#include <iostream>
13#include <list>
14#include <atomic>
15#include <type_traits>
16
17// Local headers
18#include <rad/smAdapter.hpp>
19#include <rad/topicPub.hpp>
20#include <rad/anyEvent.hpp>
21#include <rad/activity.hpp>
22#include <rad/mal/utils.hpp>
23
24
26#include <ifw/sup/syssup/common/events.rad.hpp>
27
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
44 template<typename T>
45 std::ostream& operator<<(typename std::enable_if<std::is_enum<T>::value, std::ostream>::type& stream, const T& e)
46 {
47 return stream << static_cast<typename std::underlying_type<T>::type>(e);
48 }
49
55 template<typename EVENT_TYPE>
57 public:
58 using Request = std::optional<typename EVENT_TYPE::payload_t>;
59 using RequestMap = std::map<std::string, Request>;
60 using RequestPair = std::pair<std::string, Request>;
61
62 public:
64 void ReplyOk(std::string req_id, std::string msg);
65 void ReplyError(std::string req_id, std::string msg);
66
68 };
69
70 class IConfig;
71 class ISubsys;
72
81 public:
88 SubsysFacade(rad::SMAdapter& sm,
89 DataContext& data_ctx);
90
94 virtual ~SubsysFacade();
95
113 void Connect();
114
123 void StartMonitoring();
124
135 void Init(rad::SMAdapter& sm, rad::ThreadActivity* activity);
136
144 void Enable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
145
157 void Disable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
158
170 void Recover(rad::SMAdapter& sm, rad::ThreadActivity* activity);
171
175 void DisableAccess();
176
177 void SetAccess(std::string subsys, bool access);
178
197 void Setup(const std::any& payload);
198
203 virtual void Stop();
204
209 virtual void Reset();
210
211
239 template<typename EVENT_TYPE, typename OBJECT>
240 void SubsysCommand(scxml4cpp::Context* c, OBJECT& obj);
241
246 void UpdateConfiguration();
247
256 void UpdateHandler();
257
285 virtual void EstimateState(std::vector<State::StateEnum>& states,
286 std::vector<State::SubstateEnum>& substates);
287
293 void SetSubsystemConnectionState(std::string name,
294 SubsysData::ConnectionEnum connection);
295
301 void SetSubsystemState(std::string name, std::string state);
302
309 void SetSubsystemStates(std::string name,
310 std::string state,
311 std::string substate);
312
318 void SetSubsystemSubstate(std::string name, std::string substate);
319
328 void GetSubsystemStatus(const std::string& payload, std::string& buffer);
329
330
337 void AddSubsys(std::unique_ptr<Subsys> subsys);
338
342 void ClearSubsys();
343
344
349 const int GetNumSubsys();
350
355 std::string GetSubsysNames();
356
367 void StartDaq(std::string daqid);
368
384 DaqInfo StopDaq(std::string daqid);
385
392 void AbortDaq(std::string daqid);
393
400 DaqInfo GetDaqStatus(std::string daqid) const;
401
402 private:
403
404 SubsysFacade(const SubsysFacade&) = delete;
405 SubsysFacade& operator= (const SubsysFacade&) = delete;
406
407
418 template <typename Iterator, typename EVENT_DONE, typename EVENT_ERR, typename EVENT_TOUT>
419 void ManageReply(Iterator& vec, rad::ThreadActivity* activity,
420 int wait_time_msecs, bool reply_on_success = true);
421
422
423 bool CheckSubsysName(const std::string& subsys) const;
424
425 std::vector<std::unique_ptr<Subsys> > m_subsyss;
426 std::vector<std::string> m_subsys_names;
427 boost::asio::io_service m_ios;
428 rad::SMAdapter& m_sm;
429 DataContext& m_data_ctx;
430 std::string m_dp_filename;
432 std::map<std::string, DaqInfo> m_daq;
433 log4cplus::Logger m_logger;
434
435
436 public:
441 };
442
443} // namespace devmgr::Common
444
445#include "subsysFacade.ipp"
446
447#endif // SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
Definition dataContext.hpp:66
Definition iSubsys.hpp:27
Definition subsysFacade.hpp:56
std::pair< std::string, Request > RequestPair
Definition subsysFacade.hpp:60
void ReplyOk(std::string req_id, std::string msg)
std::map< std::string, Request > RequestMap
Definition subsysFacade.hpp:59
std::optional< typename EVENT_TYPE::payload_t > Request
Definition subsysFacade.hpp:58
void ReplyError(std::string req_id, std::string msg)
void InsertRequest(RequestPair pair)
RequestMap m_req_map
Definition subsysFacade.hpp:67
virtual void Stop()
Abort all subsystems managed by the devmgr.
Definition subsysFacade.cpp:322
SingleReplier< Events::SubEnable > m_enable_replier
Definition subsysFacade.hpp:438
void Setup(const std::any &payload)
Executes a setup message.
Definition subsysFacade.cpp:665
void DisableAccess()
Disable Access for all subsystems.
Definition subsysFacade.cpp:627
SingleReplier< Events::SubDisable > m_disable_replier
Definition subsysFacade.hpp:439
void Connect()
Connect.
Definition subsysFacade.cpp:83
void Disable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Disable all subsystems managed by the Supervisor.
Definition subsysFacade.cpp:293
SingleReplier< Events::SubInit > m_init_replier
Definition subsysFacade.hpp:437
SingleReplier< Events::SubReset > m_reset_replier
Definition subsysFacade.hpp:440
std::string GetSubsysNames()
Get list of subsystems managed by the Supervisor.
Definition subsysFacade.cpp:402
void GetSubsystemStatus(const std::string &payload, std::string &buffer)
Get subsystem status.
Definition subsysFacade.cpp:453
const int GetNumSubsys()
Get the number of subsystems.
Definition subsysFacade.cpp:381
void SetAccess(std::string subsys, bool access)
Definition subsysFacade.cpp:636
void ClearSubsys()
Empty internal subsys map.
Definition subsysFacade.cpp:373
SubsysFacade(rad::SMAdapter &sm, DataContext &data_ctx)
Definition subsysFacade.cpp:70
virtual ~SubsysFacade()
~SubsysFacade
Definition subsysFacade.cpp:79
void UpdateConfiguration()
Triggers the update of the subsystem configuration.
Definition subsysFacade.cpp:468
void StartDaq(std::string daqid)
Start Data Acquisition.
Definition subsysFacade.cpp:677
void Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all subsystems managed by the Supervisor.
Definition subsysFacade.cpp:173
void StartMonitoring()
StartMonitoring.
Definition subsysFacade.cpp:164
void Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all subsystems managed by the Supervisor.
Definition subsysFacade.cpp:283
void AbortDaq(std::string daqid)
Abort Data Acquisition.
Definition subsysFacade.cpp:769
void SetSubsystemStates(std::string name, std::string state, std::string substate)
Set the subsystem states: state and substate.
Definition subsysFacade.cpp:433
void AddSubsys(std::unique_ptr< Subsys > subsys)
Add a subsystems instance to be managed by the facade.
Definition subsysFacade.cpp:367
void SetSubsystemSubstate(std::string name, std::string substate)
Set the subsystem substate.
Definition subsysFacade.cpp:445
void SetSubsystemConnectionState(std::string name, SubsysData::ConnectionEnum connection)
Get subsystem connection state.
Definition subsysFacade.cpp:416
void SubsysCommand(scxml4cpp::Context *c, OBJECT &obj)
Forward request to an specific subsystem.
virtual void Reset()
Reset subsystems.
Definition subsysFacade.cpp:344
DaqInfo StopDaq(std::string daqid)
Stop Data Acquisition.
Definition subsysFacade.cpp:719
virtual void EstimateState(std::vector< State::StateEnum > &states, std::vector< State::SubstateEnum > &substates)
EstimateState.
Definition subsysFacade.cpp:523
void Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all subsystems managed by the Supervisor.
Definition subsysFacade.cpp:209
void UpdateHandler()
Triggers the update of the estimated state/substate.
Definition subsysFacade.cpp:500
void SetSubsystemState(std::string name, std::string state)
Set the subsystem state.
Definition subsysFacade.cpp:425
DaqInfo GetDaqStatus(std::string daqid) const
Get Daq Status.
Definition subsysFacade.cpp:787
ActionMgr class source file.
Definition actionMgr.cpp:30
std::ostream & operator<<(typename std::enable_if< std::is_enum< T >::value, std::ostream >::type &stream, const T &e)
Definition subsysFacade.hpp:45
Definition subsysFacade.hpp:30
bool IsActive()
Definition subsysFacade.cpp:55
std::string m_msg
Definition subsysFacade.hpp:32
std::vector< std::string > m_files
Definition subsysFacade.hpp:33
void StartDaq(std::string filename)
Definition subsysFacade.cpp:39
double m_timestamp
Definition subsysFacade.hpp:34
void StopDaq(std::string filename)
Definition subsysFacade.cpp:44
bool IsStopped()
Definition subsysFacade.cpp:62
void AbortDaq(std::string msg)
Definition subsysFacade.cpp:49
::metadaqif::DaqState m_state
Definition subsysFacade.hpp:31
ConnectionEnum
Definition subsys.hpp:41