Skip to content
Snippets Groups Projects
StateMachine.h 1.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • DonLakeFlyer's avatar
    DonLakeFlyer committed
    /****************************************************************************
     *
     * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
     *
     * QGroundControl is licensed according to the terms in the file
     * COPYING.md in the root of the source code directory.
     *
     ****************************************************************************/
    
    #pragma once
    
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
    #include <QObject>
    
    class StateMachine : public QObject
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
    {
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        Q_OBJECT
    
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
    public:
        typedef void (*StateFn)(StateMachine* stateMachine);
    
        StateMachine(void);
    
        /// Start the state machine with the first step
        void start(void);
    
        /// Advance the state machine to the next state and call the state function
        void advance(void);
    
        /// Move the state machine to the specified state and call the state function
        void move(StateFn stateFn);
    
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        StateFn currentState(void);
    
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
        /// @return The number of states in the rgStates array
        virtual int stateCount(void) const = 0;
    
        /// @return Array of states to execute
        virtual const StateFn* rgStates(void) const = 0;
    
        /// Called when all states have completed
        virtual void statesCompleted(void) const;
    
    protected:
        bool    _active = false;
        int     _stateIndex  = -1;
    };