This library is designed to create and run state graphs. It supports hierarchical states and parallel states execution.
StateMachineLib/State.h
- Committer:
- martin13
- Date:
- 2017-10-03
- Revision:
- 0:f4fdca2c4c67
File content as of revision 0:f4fdca2c4c67:
//////////////////////////////////////////////////////////////////////////////// // Copyright Rottor SAS 2017 // All rigths reserved. // // File Name : State.h // Authors : Martin Matignon // // If you find any bug or if you have any question please contact // Martin Matignon <martin.matignon@rottor.fr> // Nicolas Forestier <nicolas.forestier@rottor.fr> // //////////////////////////////////////////////////////////////////////////////// #ifndef __SM_STATE_H__ #define __SM_STATE_H__ #include "mbed.h" #include "UserData.h" /** Global preempt state flag */ extern bool preempt_flag; /** A virtual class for executing a simple state into state machine */ class State { public: /** Standard outcomes */ static const char* SUCCEDED; static const char* ABORTED; static const char* PREEMPTED; /** State type definition */ enum StateType_t{ SIMPLE_STATE = 1, STATE_MACHINE }; /** Create a State * * @param uuid The state uuid * @param type The state type, default type is SIMPLE_STATE */ State(const char* uuid, StateType_t type = SIMPLE_STATE); /** Remap state uuid * * @param uuid The new state uuid */ void setUUID(const char* uuid); /** Provide state uuid * * @return uuid The state uuid */ const char* getUUID(); /** Remap state type * * @param type The new state type */ void setType(StateType_t type); /** Provide state type * * @return type The state type */ StateType_t getType(); /** Virtual method called by state machine before onExecute * (need to redefine into inherited object) */ virtual void onEntry() = 0; /** Virtual method called by state machine during execution * (need to redefine into inherited object) */ virtual const char* onExecute() = 0; /** Virtual method called by state machine after execution * (need to redefine into inherited object) */ virtual void onExit() = 0; /** This method call onExecute during thread execution * (method reserved for parallel state machine) */ void _onParallelExecute(); /** Provide state outcome * (method reserved for parallel state machine) * * @return outcome The parallel state outcome */ const char* getOutcome(); /** Method called if preempt requested by parent state machine */ void preempt(); /** Provide preempt state * (Use this method in while(!isPreempted()){// do }) * * @return bool The preempt state (true/false) */ bool isPreempted(); private: const char* m_uuid; /* State uuid */ StateType_t m_type; /* State type */ bool m_preempt; /* Preempt state */ const char* m_outcome; /* Parallel outcome state */ }; #endif /* #ifndef __SM_STATE_H__*/