Calc is the model of the Calculator described in Chapter 4 of PSiCC2
Calculator state machine
constructor
: QMsm(Q_STATE_CAST(&Calc::initial))
BSP_clear();
(void)e; // unused parameter
BSP_message("on-ENTRY;");
BSP_message("on-EXIT;");
BSP_message("on-INIT;");
BSP_clear();
BSP_message("ready-ENTRY;");
BSP_message("ready-EXIT;");
BSP_message("ready-INIT;");
BSP_clear();
BSP_clear();
BSP_insert(Q_EVT_CAST(CalcEvt)->key_code);
BSP_clear();
BSP_insert((int)'0');
BSP_insert((int)'.');
me->m_op1 = BSP_get_value();
me->m_oper = Q_EVT_CAST(CalcEvt)->key_code;
BSP_message("result-ENTRY;");
BSP_message("result-EXIT;");
BSP_message("begin-ENTRY;");
BSP_message("begin-EXIT;");
Q_EVT_CAST(CalcEvt)->key_code == KEY_MINUS
else
BSP_message("operand1-XP:ce;");
me->m_op1 = BSP_get_value();
me->m_oper = Q_EVT_CAST(CalcEvt)->key_code;
BSP_message("opEntered-ENTRY;");
BSP_message("opEntered-EXIT;");
BSP_clear();
BSP_clear();
BSP_insert(Q_EVT_CAST(CalcEvt)->key_code);
BSP_clear();
BSP_insert((int)'0');
BSP_insert((int)'.');
Q_EVT_CAST(CalcEvt)->key_code == KEY_MINUS
else
BSP_message("error-ENTRY;");
BSP_message("error-EXIT;");
BSP_message("operand2-XP:ce;");
else
BSP_eval(me->m_op1, me->m_oper, BSP_get_value())
else
BSP_eval(me->m_op1, me->m_oper, BSP_get_value())
BSP_message("final-ENTRY;");
BSP_exit();
BSP_message("operand-ENTRY;");
BSP_message("operand-EXIT;");
BSP_message("operand::zero-EP;");
BSP_message("operand::intgr-EP;");
BSP_message("operand::frac-EP;");
BSP_message("operand::neg-EP;");
BSP_message("operand-INIT;");
BSP_message("operand::CE;");
BSP_clear();
BSP_message("operand::zero-ENTRY;");
BSP_message("operand::zero-EXIT;");
;
BSP_insert(Q_EVT_CAST(CalcEvt)->key_code);
BSP_insert((int)'0');
BSP_insert((int)'.');
BSP_message("operand::intgr-ENTRY;");
BSP_message("operand::intgr-EXIT;");
BSP_insert((int)'.');
BSP_insert(Q_EVT_CAST(CalcEvt)->key_code);
BSP_message("operand::frac-ENTRY;");
BSP_message("operand::frac-EXIT;");
;
BSP_insert(Q_EVT_CAST(CalcEvt)->key_code);
BSP_message("operand::neg-ENTRY;");
BSP_negate();
BSP_message("operand::neg-EXIT;");
BSP_insert(Q_EVT_CAST(CalcEvt)->key_code);
BSP_insert(Q_EVT_CAST(CalcEvt)->key_code);
BSP_insert(Q_EVT_CAST(CalcEvt)->key_code);
else
Q_EVT_CAST(CalcEvt)->key_code == KEY_MINUS
;
#ifndef calc1_sub_h
#define calc1_sub_h
enum CalcSignals {
C_SIG = QP::Q_USER_SIG,
CE_SIG,
DIGIT_0_SIG,
DIGIT_1_9_SIG,
POINT_SIG,
OPER_SIG,
EQUALS_SIG,
OFF_SIG
};
$declare(Events::CalcEvt)
extern QP::QMsm * const the_calc; // "opaque" pointer to calculator MSM
#endif // calc1_sub_h
#include "qpcpp.h" // QP/C++
#include "bsp.h" // board support package
#include "calc1_sub.h" // application
$declare(SMs::Calc)
static Calc l_calc; // the only instance of the Calc class
// global-scope definitions --------------------------------------
QP::QMsm * const the_calc = &l_calc; // "opaque" pointer to MSM
$define(SMs::Calc)