qpcpp/examples/win32/history/history.cpp

241 lines
7.6 KiB
C++
Raw Normal View History

2013-10-10 20:01:51 -04:00
//****************************************************************************
2014-04-13 21:35:34 -04:00
// Model: history.qm
// File: ./history.cpp
2013-10-10 20:01:51 -04:00
//
2014-04-13 21:35:34 -04:00
// 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.
2013-10-10 20:01:51 -04:00
//
// 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
2014-04-13 21:35:34 -04:00
// by the Free Software Foundation.
2013-10-10 20:01:51 -04:00
//
2014-04-13 21:35:34 -04:00
// 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.
2013-10-10 20:01:51 -04:00
//****************************************************************************
2014-04-13 21:35:34 -04:00
//${.::history.cpp} ..........................................................
#include "qep_port.h"
2013-10-10 20:01:51 -04:00
#include "qassert.h"
2014-04-13 21:35:34 -04:00
#include "history.h"
2013-10-10 20:01:51 -04:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Q_DEFINE_THIS_FILE
2014-04-13 21:35:34 -04:00
//${SMs::ToastOven} ..........................................................
class ToastOven : public QP::QHsm {
2013-10-10 20:01:51 -04:00
public:
2014-04-13 21:35:34 -04:00
ToastOven();
protected:
static QP::QState initial(ToastOven * const me, QP::QEvt const * const e);
static QP::QState doorClosed(ToastOven * const me, QP::QEvt const * const e);
static QP::QState heating(ToastOven * const me, QP::QEvt const * const e);
static QP::QState toasting(ToastOven * const me, QP::QEvt const * const e);
static QP::QState baking(ToastOven * const me, QP::QEvt const * const e);
static QP::QState off(ToastOven * const me, QP::QEvt const * const e);
static QP::QState doorOpen(ToastOven * const me, QP::QEvt const * const e);
static QP::QState final(ToastOven * const me, QP::QEvt const * const e);
2013-10-10 20:01:51 -04:00
private:
2014-04-13 21:35:34 -04:00
QP::QStateHandler his_doorClosed;
2013-10-10 20:01:51 -04:00
};
2014-04-13 21:35:34 -04:00
static ToastOven l_oven; // the only instance of the ToastOven class
// global-scope definitions ------------------------------------
QP::QHsm * const the_oven = &l_oven; // the opaque pointer
//${SMs::ToastOven} ..........................................................
//${SMs::ToastOven::ToastOven} ...............................................
ToastOven::ToastOven()
: QHsm(Q_STATE_CAST(&ToastOven::initial))
{}
//${SMs::ToastOven::SM} ......................................................
QP::QState ToastOven::initial(ToastOven * const me, QP::QEvt const * const e) {
// ${SMs::ToastOven::SM::initial}
(void)e; /* avoid compiler warning */
// state history attributes
me->his_doorClosed = Q_STATE_CAST(&off);
return Q_TRAN(&doorOpen);
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
//${SMs::ToastOven::SM::doorClosed} ..........................................
QP::QState ToastOven::doorClosed(ToastOven * const me, QP::QEvt const * const e) {
QP::QState status_;
2013-10-10 20:01:51 -04:00
switch (e->sig) {
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed}
2013-10-10 20:01:51 -04:00
case Q_ENTRY_SIG: {
printf("door-Closed;");
2014-04-13 21:35:34 -04:00
status_ = Q_HANDLED();
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed}
2013-10-10 20:01:51 -04:00
case Q_EXIT_SIG: {
me->his_doorClosed = me->state(); // save history
2014-04-13 21:35:34 -04:00
status_ = Q_HANDLED();
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::initial}
2013-10-10 20:01:51 -04:00
case Q_INIT_SIG: {
status_ = Q_TRAN(&off);
2014-04-13 21:35:34 -04:00
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::TERMINATE}
case TERMINATE_SIG: {
status_ = Q_TRAN(&final);
break;
}
// ${SMs::ToastOven::SM::doorClosed::OPEN}
2013-10-10 20:01:51 -04:00
case OPEN_SIG: {
2014-04-13 21:35:34 -04:00
status_ = Q_TRAN(&doorOpen);
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::TOAST}
2013-10-10 20:01:51 -04:00
case TOAST_SIG: {
2014-04-13 21:35:34 -04:00
status_ = Q_TRAN(&toasting);
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::BAKE}
2013-10-10 20:01:51 -04:00
case BAKE_SIG: {
2014-04-13 21:35:34 -04:00
status_ = Q_TRAN(&baking);
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::OFF}
2013-10-10 20:01:51 -04:00
case OFF_SIG: {
2014-04-13 21:35:34 -04:00
status_ = Q_TRAN(&off);
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
default: {
status_ = Q_SUPER(&QP::QHsm::top);
break;
2013-10-10 20:01:51 -04:00
}
}
2014-04-13 21:35:34 -04:00
return status_;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
//${SMs::ToastOven::SM::doorClosed::heating} .................................
QP::QState ToastOven::heating(ToastOven * const me, QP::QEvt const * const e) {
QP::QState status_;
2013-10-10 20:01:51 -04:00
switch (e->sig) {
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::heating}
2013-10-10 20:01:51 -04:00
case Q_ENTRY_SIG: {
printf("heater-On;");
2014-04-13 21:35:34 -04:00
status_ = Q_HANDLED();
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::heating}
2013-10-10 20:01:51 -04:00
case Q_EXIT_SIG: {
printf("heater-Off;");
2014-04-13 21:35:34 -04:00
status_ = Q_HANDLED();
break;
}
default: {
status_ = Q_SUPER(&doorClosed);
2014-04-13 21:35:34 -04:00
break;
2013-10-10 20:01:51 -04:00
}
}
2014-04-13 21:35:34 -04:00
return status_;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
//${SMs::ToastOven::SM::doorClosed::heating::toasting} .......................
QP::QState ToastOven::toasting(ToastOven * const me, QP::QEvt const * const e) {
QP::QState status_;
2013-10-10 20:01:51 -04:00
switch (e->sig) {
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::heating::toasting}
2013-10-10 20:01:51 -04:00
case Q_ENTRY_SIG: {
printf("toasting;");
2014-04-13 21:35:34 -04:00
status_ = Q_HANDLED();
break;
}
default: {
status_ = Q_SUPER(&heating);
2014-04-13 21:35:34 -04:00
break;
2013-10-10 20:01:51 -04:00
}
}
2014-04-13 21:35:34 -04:00
return status_;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
//${SMs::ToastOven::SM::doorClosed::heating::baking} .........................
QP::QState ToastOven::baking(ToastOven * const me, QP::QEvt const * const e) {
QP::QState status_;
2013-10-10 20:01:51 -04:00
switch (e->sig) {
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::heating::baking}
2013-10-10 20:01:51 -04:00
case Q_ENTRY_SIG: {
printf("baking;");
2014-04-13 21:35:34 -04:00
status_ = Q_HANDLED();
break;
}
default: {
status_ = Q_SUPER(&heating);
2014-04-13 21:35:34 -04:00
break;
2013-10-10 20:01:51 -04:00
}
}
2014-04-13 21:35:34 -04:00
return status_;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
//${SMs::ToastOven::SM::doorClosed::off} .....................................
QP::QState ToastOven::off(ToastOven * const me, QP::QEvt const * const e) {
QP::QState status_;
2013-10-10 20:01:51 -04:00
switch (e->sig) {
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorClosed::off}
case Q_ENTRY_SIG: {
printf("toaster-Off;");
status_ = Q_HANDLED();
break;
}
default: {
status_ = Q_SUPER(&doorClosed);
2014-04-13 21:35:34 -04:00
break;
}
}
return status_;
}
//${SMs::ToastOven::SM::doorOpen} ............................................
QP::QState ToastOven::doorOpen(ToastOven * const me, QP::QEvt const * const e) {
QP::QState status_;
switch (e->sig) {
// ${SMs::ToastOven::SM::doorOpen}
2013-10-10 20:01:51 -04:00
case Q_ENTRY_SIG: {
printf("door-Open,lamp-On;");
2014-04-13 21:35:34 -04:00
status_ = Q_HANDLED();
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorOpen}
2013-10-10 20:01:51 -04:00
case Q_EXIT_SIG: {
printf("lamp-Off;");
2014-04-13 21:35:34 -04:00
status_ = Q_HANDLED();
break;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
// ${SMs::ToastOven::SM::doorOpen::CLOSE}
2013-10-10 20:01:51 -04:00
case CLOSE_SIG: {
2014-04-13 21:35:34 -04:00
status_ = Q_TRAN_HIST(me->his_doorClosed);
break;
}
default: {
status_ = Q_SUPER(&QP::QHsm::top);
break;
2013-10-10 20:01:51 -04:00
}
}
2014-04-13 21:35:34 -04:00
return status_;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
//${SMs::ToastOven::SM::final} ...............................................
QP::QState ToastOven::final(ToastOven * const me, QP::QEvt const * const e) {
QP::QState status_;
switch (e->sig) {
// ${SMs::ToastOven::SM::final}
case Q_ENTRY_SIG: {
printf("-> final\nBye!Bye!\n");
_exit(0);
status_ = Q_HANDLED();
break;
}
default: {
status_ = Q_SUPER(&QP::QHsm::top);
break;
}
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00
return status_;
2013-10-10 20:01:51 -04:00
}
2014-04-13 21:35:34 -04:00