ifw-sup 4.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
29namespace 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 {
36 return stream << static_cast<typename std::underlying_type<T>::type>(e);
37 }
38
44 template<typename EVENT_TYPE>
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
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_
Definition: dataContext.hpp:69
Definition: iSubsys.hpp:32
Definition: subsysFacade.hpp:45
std::map< std::string, Request > RequestMap
Definition: subsysFacade.hpp:48
RequestMap m_req_map
Definition: subsysFacade.hpp:56
std::pair< std::string, Request > RequestPair
Definition: subsysFacade.hpp:49
std::optional< typename EVENT_TYPE::payload_t > Request
Definition: subsysFacade.hpp:47
void ReplyError(std::string req_id, std::string msg)
void InsertRequest(RequestPair pair)
void ReplyOk(std::string req_id, std::string msg)
Definition: subsysFacade.hpp:69
void GetSubsystemStatus(const std::string &payload, std::string &buffer)
Get subsystem status.
Definition: subsysFacade.cpp:423
void Disable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Disable all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:265
void Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:181
void SubsysCommand(scxml4cpp::Context *c, OBJECT &obj)
Forward request to an specific subsystem.
void SetSubsystemSubstate(std::string name, std::string substate)
Set the subsystem substate.
Definition: subsysFacade.cpp:415
void SetSubsystemConnectionState(std::string name, SubsysData::ConnectionEnum connection)
Get subsystem connection state.
Definition: subsysFacade.cpp:386
virtual void EstimateState(std::vector< State::StateEnum > &states, std::vector< State::SubstateEnum > &substates)
EstimateState.
Definition: subsysFacade.cpp:484
void ClearSubsys()
Empty internal subsys map.
Definition: subsysFacade.cpp:345
void Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:145
void AddSubsys(std::unique_ptr< Subsys > subsys)
Add a subsystems instance to be managed by the facade.
Definition: subsysFacade.cpp:339
std::string GetSubsysNames()
Get list of subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:372
virtual void Stop()
Abort all subsystems managed by the devmgr.
Definition: subsysFacade.cpp:294
void StartMonitoring()
StartMonitoring.
Definition: subsysFacade.cpp:136
void Setup(const std::any &payload)
Executes a setup message.
Definition: subsysFacade.cpp:597
SingleReplier< Events::SubReset > m_reset_replier
Definition: subsysFacade.hpp:378
void UpdateHandler()
Triggers the update of the estimated state/substate.
Definition: subsysFacade.cpp:461
void Connect()
Connect.
Definition: subsysFacade.cpp:59
const int GetNumSubsys()
Get the number of subsystems.
Definition: subsysFacade.cpp:351
SingleReplier< Events::SubDisable > m_disable_replier
Definition: subsysFacade.hpp:377
void SetSubsystemState(std::string name, std::string state)
Set the subsystem state.
Definition: subsysFacade.cpp:395
void UpdateConfiguration()
Triggers the update of the subsystem configuration.
Definition: subsysFacade.cpp:438
void SetSubsystemStates(std::string name, std::string state, std::string substate)
Set the subsystem states: state and substate.
Definition: subsysFacade.cpp:403
SingleReplier< Events::SubEnable > m_enable_replier
Definition: subsysFacade.hpp:376
SingleReplier< Events::SubInit > m_init_replier
Definition: subsysFacade.hpp:375
void Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:255
void DisableAccess()
Disable Access for all subsystems.
Definition: subsysFacade.cpp:588
virtual void Reset()
Reset subsystems.
Definition: subsysFacade.cpp:316
virtual ~SubsysFacade()
~SubsysFacade
Definition: subsysFacade.cpp:55
std::ostream & operator<<(typename std::enable_if< std::is_enum< T >::value, std::ostream >::type &stream, const T &e)
Definition: subsysFacade.hpp:34
Definition: actionMgr.cpp:32
ConnectionEnum
Definition: subsys.hpp:44
Subsys class header file.