ifw-sup  2.1.0-pre1
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 <sup/syssup/common/events.rad.hpp>
28 
29 namespace sup {
30  namespace syssup {
31  namespace common {
32 
33  template<typename T>
34  std::ostream& operator<<(typename std::enable_if<std::is_enum<T>::value, std::ostream>::type& stream, const T& e)
35  {
37  }
38 
44  template<typename EVENT_TYPE>
45  class SingleReplier {
46  public:
47  using Request = std::optional<typename EVENT_TYPE::payload_t>;
48  using RequestMap = std::map<std::string, Request>;
49  using RequestPair = std::pair<std::string, Request>;
50 
51  public:
53  void ReplyOk(std::string req_id, std::string msg);
54  void ReplyError(std::string req_id, std::string msg);
55 
57  };
58 
59  class IConfig;
60  class ISubsys;
61 
69  class SubsysFacade {
70  public:
77  SubsysFacade(rad::SMAdapter& sm,
78  DataContext& data_ctx);
79 
83  virtual ~SubsysFacade();
84 
102  void Connect();
103 
112  void StartMonitoring();
113 
124  void Init(rad::SMAdapter& sm, rad::ThreadActivity* activity);
125 
133  void Enable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
134 
146  void Disable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
147 
159  void Recover(rad::SMAdapter& sm, rad::ThreadActivity* activity);
160 
164  void DisableAccess();
165 
184  void Setup(const std::any& payload);
185 
190  virtual void Stop();
191 
196  virtual void Reset();
197 
198 
226  template<typename EVENT_TYPE, typename OBJECT>
227  void SubsysCommand(scxml4cpp::Context* c, OBJECT& obj);
228 
233  void UpdateConfiguration();
234 
243  void UpdateHandler();
244 
272  virtual void EstimateState(std::vector<State::StateEnum>& states,
273  std::vector<State::SubstateEnum>& substates);
274 
280  void SetSubsystemConnectionState(std::string name,
281  SubsysData::ConnectionEnum connection);
282 
288  void SetSubsystemState(std::string name, std::string state);
289 
296  void SetSubsystemStates(std::string name,
297  std::string state,
298  std::string substate);
299 
305  void SetSubsystemSubstate(std::string name, std::string substate);
306 
315  void GetSubsystemStatus(const std::string& payload, std::string& buffer);
316 
317 
324  void AddSubsys(std::unique_ptr<Subsys> subsys);
325 
329  void ClearSubsys();
330 
331 
336  const int GetNumSubsys();
337 
342  std::string GetSubsysNames();
343 
344  private:
345 
346  SubsysFacade(const SubsysFacade&) = delete;
347  SubsysFacade& operator= (const SubsysFacade&) = delete;
348 
349 
360  template <typename Iterator, typename EVENT_DONE, typename EVENT_ERR, typename EVENT_TOUT>
361  void ManageReply(Iterator& vec, rad::ThreadActivity* activity,
362  int wait_time_msecs, bool reply_on_success = true);
363 
364 
365  bool CheckSubsysName(const std::string& subsys) const;
366 
367  std::vector<std::unique_ptr<Subsys> > m_subsyss;
368  std::vector<std::string> m_subsys_names;
369  boost::asio::io_service m_ios;
370  rad::SMAdapter& m_sm;
371  DataContext& m_data_ctx;
372  log4cplus::Logger m_logger;
373 
374  public:
379  };
380 
381 
382  }
383  }
384 } // namespace devmgr::Common
385 
386 #include "subsysFacade.ipp"
387 
388 #endif // SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
sup::syssup::common::SubsysFacade::GetNumSubsys
const int GetNumSubsys()
Get the number of subsystems.
Definition: subsysFacade.cpp:351
sup::syssup::common::SingleReplier::InsertRequest
void InsertRequest(RequestPair pair)
sup::syssup::common::SubsysFacade::SetSubsystemSubstate
void SetSubsystemSubstate(std::string name, std::string substate)
Set the subsystem substate.
Definition: subsysFacade.cpp:415
sup::syssup::common::DataContext
Definition: dataContext.hpp:68
sup::syssup::common::SingleReplier< Events::SubsysReset >::Request
std::optional< typename EVENT_TYPE::payload_t > Request
Definition: subsysFacade.hpp:47
sup::syssup::common::SubsysFacade::m_reset_replier
SingleReplier< Events::SubsysReset > m_reset_replier
Definition: subsysFacade.hpp:378
sup::syssup::common::SubsysFacade::ClearSubsys
void ClearSubsys()
Empty internal subsys map.
Definition: subsysFacade.cpp:345
subsys.hpp
Subsys class header file.
sup::syssup::common::SubsysFacade::m_enable_replier
SingleReplier< Events::SubsysEnable > m_enable_replier
Definition: subsysFacade.hpp:376
sup::syssup::common::SubsysFacade::Connect
void Connect()
Connect.
Definition: subsysFacade.cpp:59
sup::syssup::common::SubsysFacade::Reset
virtual void Reset()
Reset subsystems.
Definition: subsysFacade.cpp:316
sup::syssup::common::SubsysFacade::DisableAccess
void DisableAccess()
Disable Access for all subsystems.
Definition: subsysFacade.cpp:588
sup::syssup::common::SingleReplier< Events::SubsysReset >::RequestPair
std::pair< std::string, Request > RequestPair
Definition: subsysFacade.hpp:49
sup::syssup::common::SubsysFacade
Definition: subsysFacade.hpp:69
sup::syssup::common::SingleReplier::ReplyError
void ReplyError(std::string req_id, std::string msg)
sup::syssup::common::SubsysFacade::Stop
virtual void Stop()
Abort all subsystems managed by the devmgr.
Definition: subsysFacade.cpp:294
supsimcli.type
type
Definition: supsimcli.py:30
sup::syssup::common::ISubsys
Definition: iSubsys.hpp:32
sup::syssup::common::SubsysFacade::SubsysCommand
void SubsysCommand(scxml4cpp::Context *c, OBJECT &obj)
Forward request to an specific subsystem.
sup::syssup::common::SingleReplier< Events::SubsysReset >::RequestMap
std::map< std::string, Request > RequestMap
Definition: subsysFacade.hpp:48
sup::syssup::common::SingleReplier
Definition: subsysFacade.hpp:45
sup::syssup::common::SubsysFacade::SetSubsystemConnectionState
void SetSubsystemConnectionState(std::string name, SubsysData::ConnectionEnum connection)
Get subsystem connection state.
Definition: subsysFacade.cpp:386
sup::syssup::common::SubsysFacade::GetSubsystemStatus
void GetSubsystemStatus(const std::string &payload, std::string &buffer)
Get subsystem status.
Definition: subsysFacade.cpp:423
sup::syssup::common::SubsysFacade::AddSubsys
void AddSubsys(std::unique_ptr< Subsys > subsys)
Add a subsystems instance to be managed by the facade.
Definition: subsysFacade.cpp:339
sup
Definition: actionMgr.cpp:32
sup::syssup::common::SubsysFacade::Disable
void Disable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Disable all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:265
sup::syssup::common::SubsysFacade::m_disable_replier
SingleReplier< Events::SubsysDisable > m_disable_replier
Definition: subsysFacade.hpp:377
sup::syssup::common::SubsysFacade::~SubsysFacade
virtual ~SubsysFacade()
~SubsysFacade
Definition: subsysFacade.cpp:55
sup::syssup::common::SubsysData::ConnectionEnum
ConnectionEnum
Definition: subsys.hpp:44
sup::syssup::common::SubsysFacade::SubsysFacade
SubsysFacade(rad::SMAdapter &sm, DataContext &data_ctx)
Definition: subsysFacade.cpp:46
sup::syssup::common::SubsysFacade::Recover
void Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:255
sup::syssup::common::SubsysFacade::Enable
void Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:181
sup::syssup::common::SubsysFacade::EstimateState
virtual void EstimateState(std::vector< State::StateEnum > &states, std::vector< State::SubstateEnum > &substates)
EstimateState.
Definition: subsysFacade.cpp:484
sup::syssup::common::operator<<
std::ostream & operator<<(typename std::enable_if< std::is_enum< T >::value, std::ostream >::type &stream, const T &e)
Definition: subsysFacade.hpp:34
sup::syssup::common::SubsysFacade::GetSubsysNames
std::string GetSubsysNames()
Get list of subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:372
sup::syssup::common::SubsysFacade::StartMonitoring
void StartMonitoring()
StartMonitoring.
Definition: subsysFacade.cpp:136
sup::syssup::common::SubsysFacade::m_init_replier
SingleReplier< Events::SubsysInit > m_init_replier
Definition: subsysFacade.hpp:375
sup::syssup::common::SubsysFacade::Init
void Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:145
sup::syssup::common::SingleReplier::ReplyOk
void ReplyOk(std::string req_id, std::string msg)
sup::syssup::common::SubsysFacade::Setup
void Setup(const std::any &payload)
Executes a setup message.
Definition: subsysFacade.cpp:597
sup::syssup::common::SubsysFacade::SetSubsystemState
void SetSubsystemState(std::string name, std::string state)
Set the subsystem state.
Definition: subsysFacade.cpp:395
sup::syssup::common::SubsysFacade::UpdateHandler
void UpdateHandler()
Triggers the update of the estimated state/substate.
Definition: subsysFacade.cpp:461
sup::syssup::common::SingleReplier::m_req_map
RequestMap m_req_map
Definition: subsysFacade.hpp:56
sup::syssup::common::SubsysFacade::SetSubsystemStates
void SetSubsystemStates(std::string name, std::string state, std::string substate)
Set the subsystem states: state and substate.
Definition: subsysFacade.cpp:403
sup::syssup::common::SubsysFacade::UpdateConfiguration
void UpdateConfiguration()
Triggers the update of the subsystem configuration.
Definition: subsysFacade.cpp:438