StateMachine.h 1.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/****************************************************************************
 *
 * (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

12 13 14
#include <QObject>

class StateMachine : public QObject
15
{
16 17
    Q_OBJECT

18 19 20 21 22 23 24 25 26 27 28 29 30 31
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);

32 33
    StateFn currentState(void);

34 35 36 37 38 39 40 41 42 43 44 45 46
    /// @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;
};