24 #include <boost/bind.hpp> 25 #include <boost/tuple/tuple.hpp> 27 #include "core/MACoreTypes.hpp" 28 #include "core/MAContainerLocker.hpp" 29 #include "core/MASignal.hpp" 30 #include "types/skits/MASkitBase.hpp" 31 #include "types/MARobotStateUpdater.hpp" 41 #define MA_BIND_TRANSITION(_class, _action, _check) \ 42 _action##Str = #_action; \ 43 Transitions[#_action] = boost::make_tuple(boost::bind<MA::DeviceGeneratorsMap>(boost::mem_fn(&_class::_action), this), \ 44 boost::bind<bool>(boost::mem_fn(&_class::_check), this), \ 45 MA::DeviceGeneratorsMap()); 50 #define MA_BIND_TRANSITION_ACTION(_class, _action) \ 51 _action##Str = #_action; \ 52 Transitions[#_action] = boost::make_tuple(boost::bind<MA::DeviceGeneratorsMap>(boost::mem_fn(&_class::_action), this), \ 54 MA::DeviceGeneratorsMap()); 56 #define MA_DECLARE_TRANSITION(_action, _check) \ 58 MA::DeviceGeneratorsMap _action(); \ 60 std::string _action##Str; \ 63 #define MA_DECLARE_TRANSITION_ACTION(_action) \ 65 MA::DeviceGeneratorsMap _action(); \ 67 std::string _action##Str; 72 typedef boost::function<MA::DeviceGeneratorsMap ()> TransitionStartFuncPtr;
74 typedef boost::tuple<TransitionStartFuncPtr, BoolFuncPtr, DeviceGeneratorsMap> TransitionTuple;
79 typedef boost::unordered_map<std::string, TransitionTuple> TransitionMap;
108 explicit MAController(MA::ControllerType controller_type);
118 MC::StringList GetTransitionNames()
const;
129 MC::StringList GetActiveTransitionsByDevice(
const MADevice& device);
147 virtual int StartTransition(
const std::string& name);
156 virtual void StopTransition(
const std::string& name);
167 virtual MA::DeviceGeneratorsMap GetSkitTransitionGenerators(MA::SkitBaseSPtr skit) = 0;
178 bool IsTransitionActive(
const std::string& name);
187 bool IsAnyActiveTransition();
196 bool IsAnyActiveSkitTransition();
207 bool IsTransitionSuccessful(
const std::string& name);
218 bool TransitionHasCheck(
const std::string& name);
227 virtual MA::DeviceList GetMotors()
const = 0;
249 MA::TransitionMap::iterator RegisterSkitTransition(
const std::string& skit_name);
262 int GetDeviceGeneratorsDuration(MA::DeviceGeneratorsMap& device_generators);
273 static void SetVerbose(
bool new_state);
282 static bool IsVerbose();
Base class for the controllers.
#define MC_DISABLE_COPY(class_name)
Helper macro to disable the copy constructor and assignment operator of a class (object copying) ...
Generator container class.
Robot state updater base class.
#define MA_CONTAINER_LOCK_ID_VARIABLE(_container)
Declaring a variable ID for a container.
MA::ControllerType Type
Controller type.
MA::TransitionMap Transitions
The map of the transitions.