//**************************************************************************** // Model: qmsmtst.qm // File: ./qmsmtst.cpp // // This code has been generated by QM tool (see state-machine.com/qm). // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost. // // This program is open source software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License // for more details. //**************************************************************************** // @(/2/1) ................................................................... #include "qp_port.h" #include "qmsmtst.h" namespace QMSMTST { // @(/1/0) ................................................................... class QMsmTst : public QP::QMsm { private: bool m_foo; public: QMsmTst() : QMsm(Q_STATE_CAST(&QMsmTst::initial)) {} protected: static QP::QState initial(QMsmTst * const me, QP::QEvt const * const e); static QP::QState s (QMsmTst * const me, QP::QEvt const * const e); static QP::QState s_e(QMsmTst * const me); static QP::QState s_x(QMsmTst * const me); static QP::QState s_i(QMsmTst * const me); static QP::QMState const s_s; static QP::QState s1 (QMsmTst * const me, QP::QEvt const * const e); static QP::QState s1_e(QMsmTst * const me); static QP::QState s1_x(QMsmTst * const me); static QP::QState s1_i(QMsmTst * const me); static QP::QMState const s1_s; static QP::QState s11 (QMsmTst * const me, QP::QEvt const * const e); static QP::QState s11_e(QMsmTst * const me); static QP::QState s11_x(QMsmTst * const me); static QP::QMState const s11_s; static QP::QState s2 (QMsmTst * const me, QP::QEvt const * const e); static QP::QState s2_e(QMsmTst * const me); static QP::QState s2_x(QMsmTst * const me); static QP::QState s2_i(QMsmTst * const me); static QP::QMState const s2_s; static QP::QState s21 (QMsmTst * const me, QP::QEvt const * const e); static QP::QState s21_e(QMsmTst * const me); static QP::QState s21_x(QMsmTst * const me); static QP::QState s21_i(QMsmTst * const me); static QP::QMState const s21_s; static QP::QState s211 (QMsmTst * const me, QP::QEvt const * const e); static QP::QState s211_e(QMsmTst * const me); static QP::QState s211_x(QMsmTst * const me); static QP::QMState const s211_s; }; static QMsmTst l_msmtst; // the only instance of the QMsmTst class // global-scope definitions ----------------------------------------- QP::QMsm * const the_msm = &l_msmtst; // the opaque pointer // @(/1/0) ................................................................... // @(/1/0/2) ................................................................. // @(/1/0/2/0) QP::QState QMsmTst::initial(QMsmTst * const me, QP::QEvt const * const e) { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s_e), Q_ACTION_CAST(&QMsmTst::s2_e), Q_ACTION_CAST(&QMsmTst::s2_i), Q_ACTION_CAST(0) }; (void)e; // avoid compiler warning me->m_foo = 0U; BSP_display("top-INIT;"); return QM_INITIAL(&QMsmTst::s2_s, act_); } // @(/1/0/2/1) ............................................................... QP::QMState const QMsmTst::s_s = { static_cast(0), Q_STATE_CAST(&QMsmTst::s), Q_ACTION_CAST(&QMsmTst::s_x) }; QP::QState QMsmTst::s_e(QMsmTst * const me) { BSP_display("s-ENTRY;"); return QM_ENTRY(&s_s); } QP::QState QMsmTst::s_x(QMsmTst * const me) { BSP_display("s-EXIT;"); return QM_EXIT(&s_s); } QP::QState QMsmTst::s_i(QMsmTst * const me) { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s1_e), Q_ACTION_CAST(&QMsmTst::s11_e), Q_ACTION_CAST(0) }; BSP_display("s-INIT;"); return QM_INITIAL(&QMsmTst::s11_s, act_); } QP::QState QMsmTst::s(QMsmTst * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/2/1/1) case I_SIG: { // @(/1/0/2/1/1/0) if (me->m_foo) { me->m_foo = 0U; BSP_display("s-I;"); status_ = QM_HANDLED(); } else { status_ = QM_UNHANDLED(); } break; } // @(/1/0/2/1/2) case E_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s1_e), Q_ACTION_CAST(&QMsmTst::s11_e), Q_ACTION_CAST(0) }; BSP_display("s-E;"); status_ = QM_TRAN(&s11_s, act_); break; } // @(/1/0/2/1/3) case TERMINATE_SIG: { BSP_terminate(0); status_ = QM_HANDLED(); break; } default: { status_ = QM_SUPER(); break; } } return status_; } // @(/1/0/2/1/4) ............................................................. QP::QMState const QMsmTst::s1_s = { &QMsmTst::s_s, Q_STATE_CAST(&QMsmTst::s1), Q_ACTION_CAST(&QMsmTst::s1_x) }; QP::QState QMsmTst::s1_e(QMsmTst * const me) { BSP_display("s1-ENTRY;"); return QM_ENTRY(&s1_s); } QP::QState QMsmTst::s1_x(QMsmTst * const me) { BSP_display("s1-EXIT;"); return QM_EXIT(&s1_s); } QP::QState QMsmTst::s1_i(QMsmTst * const me) { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s11_e), Q_ACTION_CAST(0) }; BSP_display("s1-INIT;"); return QM_INITIAL(&QMsmTst::s11_s, act_); } QP::QState QMsmTst::s1(QMsmTst * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/2/1/4/1) case I_SIG: { BSP_display("s1-I;"); status_ = QM_HANDLED(); break; } // @(/1/0/2/1/4/2) case D_SIG: { // @(/1/0/2/1/4/2/0) if (!me->m_foo) { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s1_x), Q_ACTION_CAST(&QMsmTst::s_i), Q_ACTION_CAST(0) }; me->m_foo = true; BSP_display("s1-D;"); status_ = QM_TRAN(&s_s, act_); } else { status_ = QM_UNHANDLED(); } break; } // @(/1/0/2/1/4/3) case A_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s1_x), Q_ACTION_CAST(&QMsmTst::s1_e), Q_ACTION_CAST(&QMsmTst::s1_i), Q_ACTION_CAST(0) }; BSP_display("s1-A;"); status_ = QM_TRAN(&s1_s, act_); break; } // @(/1/0/2/1/4/4) case B_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s11_e), Q_ACTION_CAST(0) }; BSP_display("s1-B;"); status_ = QM_TRAN(&s11_s, act_); break; } // @(/1/0/2/1/4/5) case F_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s1_x), Q_ACTION_CAST(&QMsmTst::s2_e), Q_ACTION_CAST(&QMsmTst::s21_e), Q_ACTION_CAST(&QMsmTst::s211_e), Q_ACTION_CAST(0) }; BSP_display("s1-F;"); status_ = QM_TRAN(&s211_s, act_); break; } // @(/1/0/2/1/4/6) case C_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s1_x), Q_ACTION_CAST(&QMsmTst::s2_e), Q_ACTION_CAST(&QMsmTst::s2_i), Q_ACTION_CAST(0) }; BSP_display("s1-C;"); status_ = QM_TRAN(&s2_s, act_); break; } default: { status_ = QM_SUPER(); break; } } return status_; } // @(/1/0/2/1/4/7) ........................................................... QP::QMState const QMsmTst::s11_s = { &QMsmTst::s1_s, Q_STATE_CAST(&QMsmTst::s11), Q_ACTION_CAST(&QMsmTst::s11_x) }; QP::QState QMsmTst::s11_e(QMsmTst * const me) { BSP_display("s11-ENTRY;"); return QM_ENTRY(&s11_s); } QP::QState QMsmTst::s11_x(QMsmTst * const me) { BSP_display("s11-EXIT;"); return QM_EXIT(&s11_s); } QP::QState QMsmTst::s11(QMsmTst * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/2/1/4/7/0) case H_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s11_x), Q_ACTION_CAST(&QMsmTst::s1_x), Q_ACTION_CAST(&QMsmTst::s_i), Q_ACTION_CAST(0) }; BSP_display("s11-H;"); status_ = QM_TRAN(&s_s, act_); break; } // @(/1/0/2/1/4/7/1) case D_SIG: { // @(/1/0/2/1/4/7/1/0) if (me->m_foo) { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s11_x), Q_ACTION_CAST(&QMsmTst::s1_i), Q_ACTION_CAST(0) }; me->m_foo = false; BSP_display("s11-D;"); status_ = QM_TRAN(&s1_s, act_); } else { status_ = QM_UNHANDLED(); } break; } // @(/1/0/2/1/4/7/2) case G_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s11_x), Q_ACTION_CAST(&QMsmTst::s1_x), Q_ACTION_CAST(&QMsmTst::s2_e), Q_ACTION_CAST(&QMsmTst::s21_e), Q_ACTION_CAST(&QMsmTst::s211_e), Q_ACTION_CAST(0) }; BSP_display("s11-G;"); status_ = QM_TRAN(&s211_s, act_); break; } default: { status_ = QM_SUPER(); break; } } return status_; } // @(/1/0/2/1/5) ............................................................. QP::QMState const QMsmTst::s2_s = { &QMsmTst::s_s, Q_STATE_CAST(&QMsmTst::s2), Q_ACTION_CAST(&QMsmTst::s2_x) }; QP::QState QMsmTst::s2_e(QMsmTst * const me) { BSP_display("s2-ENTRY;"); return QM_ENTRY(&s2_s); } QP::QState QMsmTst::s2_x(QMsmTst * const me) { BSP_display("s2-EXIT;"); return QM_EXIT(&s2_s); } QP::QState QMsmTst::s2_i(QMsmTst * const me) { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s21_e), Q_ACTION_CAST(&QMsmTst::s211_e), Q_ACTION_CAST(0) }; BSP_display("s2-INIT;"); return QM_INITIAL(&QMsmTst::s211_s, act_); } QP::QState QMsmTst::s2(QMsmTst * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/2/1/5/1) case I_SIG: { // @(/1/0/2/1/5/1/0) if (!me->m_foo) { me->m_foo = true; BSP_display("s2-I;"); status_ = QM_HANDLED(); } else { status_ = QM_UNHANDLED(); } break; } // @(/1/0/2/1/5/2) case F_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s2_x), Q_ACTION_CAST(&QMsmTst::s1_e), Q_ACTION_CAST(&QMsmTst::s11_e), Q_ACTION_CAST(0) }; BSP_display("s2-F;"); status_ = QM_TRAN(&s11_s, act_); break; } // @(/1/0/2/1/5/3) case C_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s2_x), Q_ACTION_CAST(&QMsmTst::s1_e), Q_ACTION_CAST(&QMsmTst::s1_i), Q_ACTION_CAST(0) }; BSP_display("s2-C;"); status_ = QM_TRAN(&s1_s, act_); break; } default: { status_ = QM_SUPER(); break; } } return status_; } // @(/1/0/2/1/5/4) ........................................................... QP::QMState const QMsmTst::s21_s = { &QMsmTst::s2_s, Q_STATE_CAST(&QMsmTst::s21), Q_ACTION_CAST(&QMsmTst::s21_x) }; QP::QState QMsmTst::s21_e(QMsmTst * const me) { BSP_display("s21-ENTRY;"); return QM_ENTRY(&s21_s); } QP::QState QMsmTst::s21_x(QMsmTst * const me) { BSP_display("s21-EXIT;"); return QM_EXIT(&s21_s); } QP::QState QMsmTst::s21_i(QMsmTst * const me) { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s211_e), Q_ACTION_CAST(0) }; BSP_display("s21-INIT;"); return QM_INITIAL(&QMsmTst::s211_s, act_); } QP::QState QMsmTst::s21(QMsmTst * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/2/1/5/4/1) case G_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s21_x), Q_ACTION_CAST(&QMsmTst::s2_x), Q_ACTION_CAST(&QMsmTst::s1_e), Q_ACTION_CAST(&QMsmTst::s1_i), Q_ACTION_CAST(0) }; BSP_display("s21-G;"); status_ = QM_TRAN(&s1_s, act_); break; } // @(/1/0/2/1/5/4/2) case A_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s21_x), Q_ACTION_CAST(&QMsmTst::s21_e), Q_ACTION_CAST(&QMsmTst::s21_i), Q_ACTION_CAST(0) }; BSP_display("s21-A;"); status_ = QM_TRAN(&s21_s, act_); break; } // @(/1/0/2/1/5/4/3) case B_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s211_e), Q_ACTION_CAST(0) }; BSP_display("s21-B;"); status_ = QM_TRAN(&s211_s, act_); break; } default: { status_ = QM_SUPER(); break; } } return status_; } // @(/1/0/2/1/5/4/4) ......................................................... QP::QMState const QMsmTst::s211_s = { &QMsmTst::s21_s, Q_STATE_CAST(&QMsmTst::s211), Q_ACTION_CAST(&QMsmTst::s211_x) }; QP::QState QMsmTst::s211_e(QMsmTst * const me) { BSP_display("s211-ENTRY;"); return QM_ENTRY(&s211_s); } QP::QState QMsmTst::s211_x(QMsmTst * const me) { BSP_display("s211-EXIT;"); return QM_EXIT(&s211_s); } QP::QState QMsmTst::s211(QMsmTst * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/2/1/5/4/4/0) case H_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s211_x), Q_ACTION_CAST(&QMsmTst::s21_x), Q_ACTION_CAST(&QMsmTst::s2_x), Q_ACTION_CAST(&QMsmTst::s_i), Q_ACTION_CAST(0) }; BSP_display("s211-H;"); status_ = QM_TRAN(&s_s, act_); break; } // @(/1/0/2/1/5/4/4/1) case D_SIG: { static QP::QActionHandler const act_[] = { Q_ACTION_CAST(&QMsmTst::s211_x), Q_ACTION_CAST(&QMsmTst::s21_i), Q_ACTION_CAST(0) }; BSP_display("s211-D;"); status_ = QM_TRAN(&s21_s, act_); break; } default: { status_ = QM_SUPER(); break; } } return status_; } } // namespace QMSMTST