/*.$file${.::history.c} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ /* * Model: history.qm * File: ${.::history.c} * * This code has been generated by QM 5.0.0 . * 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. */ /*.$endhead${.::history.c} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ #include "qpn.h" /* QP-nano */ #include "bsp.h" /* Board Support Package */ #include "history.h" /* Application interface */ #include "safe_std.h" /* portable "safe" / facilities */ #include //Q_DEFINE_THIS_FILE /*.$declare${SMs::ToastOven} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ /*.${SMs::ToastOven} .......................................................*/ typedef struct ToastOven { /* protected: */ QHsm super; /* private state histories */ QStateHandler hist_doorClosed; } ToastOven; /* protected: */ static QState ToastOven_initial(ToastOven * const me); static QState ToastOven_doorClosed(ToastOven * const me); static QState ToastOven_heating(ToastOven * const me); static QState ToastOven_toasting(ToastOven * const me); static QState ToastOven_baking(ToastOven * const me); static QState ToastOven_off(ToastOven * const me); static QState ToastOven_doorOpen(ToastOven * const me); static QState ToastOven_final(ToastOven * const me); /*.$enddecl${SMs::ToastOven} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ static ToastOven l_oven; /* the only instance of the ToastOven class */ /* global-scope definitions -----------------------------------------*/ QHsm * const the_oven = (QHsm *)&l_oven; /* the opaque pointer */ /*.$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ /*. Check for the minimum required QP version */ #if (QP_VERSION < 670U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U)) #error qpn version 6.7.0 or higher required #endif /*.$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ /*.$define${SMs::ToastOven_ctor} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ /*.${SMs::ToastOven_ctor} ..................................................*/ void ToastOven_ctor(void) { ToastOven *me = &l_oven; QHsm_ctor(&me->super, Q_STATE_CAST(&ToastOven_initial)); } /*.$enddef${SMs::ToastOven_ctor} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ /*.$define${SMs::ToastOven} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ /*.${SMs::ToastOven} .......................................................*/ /*.${SMs::ToastOven::SM} ...................................................*/ static QState ToastOven_initial(ToastOven * const me) { /*.${SMs::ToastOven::SM::initial} */ /* state history attributes */ /* state history attributes */ me->hist_doorClosed = Q_STATE_CAST(&ToastOven_off); return Q_TRAN(&ToastOven_doorClosed); } /*.${SMs::ToastOven::SM::doorClosed} .......................................*/ static QState ToastOven_doorClosed(ToastOven * const me) { QState status_; switch (Q_SIG(me)) { /*.${SMs::ToastOven::SM::doorClosed} */ case Q_ENTRY_SIG: { PRINTF_S("%s;", "door-Closed"); status_ = Q_HANDLED(); break; } /*.${SMs::ToastOven::SM::doorClosed} */ case Q_EXIT_SIG: { /* save deep history */ me->hist_doorClosed = QHsm_state(me); status_ = Q_HANDLED(); break; } /*.${SMs::ToastOven::SM::doorClosed::initial} */ case Q_INIT_SIG: { status_ = Q_TRAN(&ToastOven_off); break; } /*.${SMs::ToastOven::SM::doorClosed::TERMINATE} */ case TERMINATE_SIG: { status_ = Q_TRAN(&ToastOven_final); break; } /*.${SMs::ToastOven::SM::doorClosed::OPEN} */ case OPEN_SIG: { status_ = Q_TRAN(&ToastOven_doorOpen); break; } /*.${SMs::ToastOven::SM::doorClosed::TOAST} */ case TOAST_SIG: { status_ = Q_TRAN(&ToastOven_toasting); break; } /*.${SMs::ToastOven::SM::doorClosed::BAKE} */ case BAKE_SIG: { status_ = Q_TRAN(&ToastOven_baking); break; } /*.${SMs::ToastOven::SM::doorClosed::OFF} */ case OFF_SIG: { status_ = Q_TRAN(&ToastOven_off); break; } default: { status_ = Q_SUPER(&QHsm_top); break; } } return status_; } /*.${SMs::ToastOven::SM::doorClosed::heating} ..............................*/ static QState ToastOven_heating(ToastOven * const me) { QState status_; switch (Q_SIG(me)) { /*.${SMs::ToastOven::SM::doorClosed::heating} */ case Q_ENTRY_SIG: { PRINTF_S("%s;", "heater-On"); status_ = Q_HANDLED(); break; } /*.${SMs::ToastOven::SM::doorClosed::heating} */ case Q_EXIT_SIG: { PRINTF_S("%s;", "heater-Off"); status_ = Q_HANDLED(); break; } /*.${SMs::ToastOven::SM::doorClosed::heating::initial} */ case Q_INIT_SIG: { status_ = Q_TRAN(&ToastOven_toasting); break; } default: { status_ = Q_SUPER(&ToastOven_doorClosed); break; } } return status_; } /*.${SMs::ToastOven::SM::doorClosed::heating::toasting} ....................*/ static QState ToastOven_toasting(ToastOven * const me) { QState status_; switch (Q_SIG(me)) { /*.${SMs::ToastOven::SM::doorClosed::heating::toasting} */ case Q_ENTRY_SIG: { PRINTF_S("%s;", "toasting"); status_ = Q_HANDLED(); break; } default: { status_ = Q_SUPER(&ToastOven_heating); break; } } return status_; } /*.${SMs::ToastOven::SM::doorClosed::heating::baking} ......................*/ static QState ToastOven_baking(ToastOven * const me) { QState status_; switch (Q_SIG(me)) { /*.${SMs::ToastOven::SM::doorClosed::heating::baking} */ case Q_ENTRY_SIG: { PRINTF_S("%s;", "baking"); status_ = Q_HANDLED(); break; } default: { status_ = Q_SUPER(&ToastOven_heating); break; } } return status_; } /*.${SMs::ToastOven::SM::doorClosed::off} ..................................*/ static QState ToastOven_off(ToastOven * const me) { QState status_; switch (Q_SIG(me)) { /*.${SMs::ToastOven::SM::doorClosed::off} */ case Q_ENTRY_SIG: { PRINTF_S("%s;", "toaster-Off"); status_ = Q_HANDLED(); break; } default: { status_ = Q_SUPER(&ToastOven_doorClosed); break; } } return status_; } /*.${SMs::ToastOven::SM::doorOpen} .........................................*/ static QState ToastOven_doorOpen(ToastOven * const me) { QState status_; switch (Q_SIG(me)) { /*.${SMs::ToastOven::SM::doorOpen} */ case Q_ENTRY_SIG: { PRINTF_S("%s;", "door-Open,lamp-On"); status_ = Q_HANDLED(); break; } /*.${SMs::ToastOven::SM::doorOpen} */ case Q_EXIT_SIG: { PRINTF_S("%s;", "lamp-Off"); status_ = Q_HANDLED(); break; } /*.${SMs::ToastOven::SM::doorOpen::CLOSE} */ case CLOSE_SIG: { status_ = Q_TRAN_HIST(me->hist_doorClosed); break; } /*.${SMs::ToastOven::SM::doorOpen::TERMINATE} */ case TERMINATE_SIG: { status_ = Q_TRAN(&ToastOven_final); break; } default: { status_ = Q_SUPER(&QHsm_top); break; } } return status_; } /*.${SMs::ToastOven::SM::final} ............................................*/ static QState ToastOven_final(ToastOven * const me) { QState status_; switch (Q_SIG(me)) { /*.${SMs::ToastOven::SM::final} */ case Q_ENTRY_SIG: { BSP_exit(); /* terminate the application */ status_ = Q_HANDLED(); break; } default: { status_ = Q_SUPER(&QHsm_top); break; } } return status_; } /*.$enddef${SMs::ToastOven} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/