Go to the documentation of this file.
9 #ifndef SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
10 #define SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
16 #include <type_traits>
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>
27 #include <sup/syssup/common/events.rad.hpp>
34 std::ostream&
operator<<(
typename std::enable_if<std::is_enum<T>::value, std::ostream>::type& stream,
const T& e)
36 return stream << static_cast<typename std::underlying_type<T>::type>(e);
44 template<
typename EVENT_TYPE>
47 using Request = std::optional<typename EVENT_TYPE::payload_t>;
53 void ReplyOk(std::string req_id, std::string msg);
124 void Init(rad::SMAdapter& sm, rad::ThreadActivity* activity);
133 void Enable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
146 void Disable(rad::SMAdapter& sm, rad::ThreadActivity* activity);
159 void Recover(rad::SMAdapter& sm, rad::ThreadActivity* activity);
180 void Setup(
const std::any& payload);
192 virtual void Reset();
222 template<
typename EVENT_TYPE,
typename OBJECT>
268 virtual void EstimateState(std::vector<State::StateEnum>& states,
269 std::vector<State::SubstateEnum>& substates);
310 void AddSubsys(std::unique_ptr<Subsys> subsys);
346 template <
typename Iterator,
typename EVENT_DONE,
typename EVENT_ERR,
typename EVENT_TOUT>
347 void ManageReply(Iterator& vec, rad::ThreadActivity* activity,
348 int wait_time_msecs,
bool reply_on_success =
true);
351 bool CheckSubsysName(
const std::string& subsys)
const;
353 std::vector<std::unique_ptr<Subsys> > m_subsyss;
354 std::vector<std::string> m_subsys_names;
355 boost::asio::io_service m_ios;
356 rad::SMAdapter& m_sm;
371 #include "subsysFacade.ipp"
373 #endif // SUP_SYSSUP_COMMON_SUBSYS_FACADE_HPP_
const int GetNumSubsys()
Get the number of subsystems.
Definition: subsysFacade.cpp:357
void InsertRequest(RequestPair pair)
void SetSubsystemSubstate(std::string name, std::string substate)
Get subsystem substate.
Definition: subsysFacade.cpp:409
Definition: dataContext.hpp:34
std::optional< typename EVENT_TYPE::payload_t > Request
Definition: subsysFacade.hpp:47
SingleReplier< Events::SubsysReset > m_reset_replier
Definition: subsysFacade.hpp:363
void ClearSubsys()
Empty internal subsys map.
Definition: subsysFacade.cpp:350
Subsys class header file.
SingleReplier< Events::SubsysEnable > m_enable_replier
Definition: subsysFacade.hpp:361
void Connect()
Connect.
Definition: subsysFacade.cpp:61
Definition: iConfig.hpp:32
virtual void Reset()
Reset subsystems.
Definition: subsysFacade.cpp:321
std::pair< std::string, Request > RequestPair
Definition: subsysFacade.hpp:49
Definition: subsysFacade.hpp:69
void ReplyError(std::string req_id, std::string msg)
virtual void Stop()
Abort all subsystems managed by the devmgr.
Definition: subsysFacade.cpp:299
Definition: iSubsys.hpp:32
void SubsysCommand(scxml4cpp::Context *c, OBJECT &obj)
Forward request to an specific subsystem.
std::map< std::string, Request > RequestMap
Definition: subsysFacade.hpp:48
Definition: subsysFacade.hpp:45
void SetSubsystemConnectionState(std::string name, SubsysData::ConnectionEnum connection)
Get subsystem connection state.
Definition: subsysFacade.cpp:392
void GetSubsystemStatus(const std::string &payload, std::string &buffer)
Get subsystem status.
Definition: subsysFacade.cpp:417
void AddSubsys(std::unique_ptr< Subsys > subsys)
Add a subsystems instance to be managed by the facade.
Definition: subsysFacade.cpp:344
Definition: actionMgr.cpp:32
void Disable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Disable all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:266
SingleReplier< Events::SubsysDisable > m_disable_replier
Definition: subsysFacade.hpp:362
virtual ~SubsysFacade()
~SubsysFacade
Definition: subsysFacade.cpp:57
ConnectionEnum
Definition: subsys.hpp:42
SubsysFacade(rad::SMAdapter &sm, DataContext &data_ctx)
Definition: subsysFacade.cpp:49
void Recover(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Recover all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:256
void Enable(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Enable all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:182
virtual void EstimateState(std::vector< State::StateEnum > &states, std::vector< State::SubstateEnum > &substates)
EstimateState.
Definition: subsysFacade.cpp:473
std::ostream & operator<<(typename std::enable_if< std::is_enum< T >::value, std::ostream >::type &stream, const T &e)
Definition: subsysFacade.hpp:34
std::string GetSubsysNames()
Get list of subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:378
void StartMonitoring()
StartMonitoring.
Definition: subsysFacade.cpp:135
SingleReplier< Events::SubsysInit > m_init_replier
Definition: subsysFacade.hpp:360
void Init(rad::SMAdapter &sm, rad::ThreadActivity *activity)
Init all subsystems managed by the Supervisor.
Definition: subsysFacade.cpp:144
void ReplyOk(std::string req_id, std::string msg)
void Setup(const std::any &payload)
Executes a setup message.
Definition: subsysFacade.cpp:569
void SetSubsystemState(std::string name, std::string state)
Get subsystem state.
Definition: subsysFacade.cpp:401
void UpdateHandler()
Triggers the update of the estimated state/substate.
Definition: subsysFacade.cpp:450
RequestMap m_req_map
Definition: subsysFacade.hpp:56
void UpdateConfiguration()
Triggers the update of the subsystem configuration.
Definition: subsysFacade.cpp:432