// @(/1/0/3/1/2/1) ........................................................... QP::QState Pelican::carsGreen(Pelican * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/3/1/2/1) case Q_ENTRY_SIG: { BSP_signalCars(CARS_GREEN); me->m_timeout.postIn(me, CARS_GREEN_MIN_TOUT); status_ = Q_HANDLED(); break; } // @(/1/0/3/1/2/1) case Q_EXIT_SIG: { me->m_timeout.disarm(); status_ = Q_HANDLED(); break; } // @(/1/0/3/1/2/1/0) case Q_INIT_SIG: { status_ = Q_TRAN(&Pelican::carsGreenNoPed); break; } default: { status_ = Q_SUPER(&Pelican::carsEnabled); break; } } return status_; }
// @(/1/0/3/1) ............................................................... QP::QState Pelican::operational(Pelican * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/3/1) case Q_ENTRY_SIG: { BSP_signalCars(CARS_RED); BSP_signalPeds(PEDS_DONT_WALK); status_ = Q_HANDLED(); break; } // @(/1/0/3/1/0) case Q_INIT_SIG: { status_ = Q_TRAN(&Pelican::carsEnabled); break; } // @(/1/0/3/1/1) case OFF_SIG: { status_ = Q_TRAN(&Pelican::offline); break; } default: { status_ = Q_SUPER(&QHsm::top); break; } } return status_; }
// @(/1/0/3/1/2/2) ........................................................... QP::QState Pelican::carsYellow(Pelican * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/3/1/2/2) case Q_ENTRY_SIG: { BSP_showState("carsYellow"); BSP_signalCars(CARS_YELLOW); me->m_timeout.postIn(me, CARS_YELLOW_TOUT); status_ = Q_HANDLED(); break; } // @(/1/0/3/1/2/2) case Q_EXIT_SIG: { me->m_timeout.disarm(); status_ = Q_HANDLED(); break; } // @(/1/0/3/1/2/2/0) case TIMEOUT_SIG: { status_ = Q_TRAN(&Pelican::pedsEnabled); break; } default: { status_ = Q_SUPER(&Pelican::carsEnabled); break; } } return status_; }
// @(/1/0/3/2) ............................................................... QP::QState Pelican::offline(Pelican * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/3/2) case Q_ENTRY_SIG: { BSP_showState("offline"); me->m_timeout.postEvery(me, OFF_FLASH_TOUT); me->m_flashCtr = 0; status_ = Q_HANDLED(); break; } // @(/1/0/3/2) case Q_EXIT_SIG: { me->m_timeout.disarm(); status_ = Q_HANDLED(); break; } // @(/1/0/3/2/0) case TIMEOUT_SIG: { me->m_flashCtr ^= 1; // @(/1/0/3/2/0/0) if ((me->m_flashCtr & 1) == 0) { BSP_signalCars(CARS_RED); BSP_signalPeds(PEDS_DONT_WALK); status_ = Q_HANDLED(); } // @(/1/0/3/2/0/1) else { BSP_signalCars(CARS_BLANK); BSP_signalPeds(PEDS_BLANK); status_ = Q_HANDLED(); } break; } // @(/1/0/3/2/1) case ON_SIG: { status_ = Q_TRAN(&Pelican::operational); break; } default: { status_ = Q_SUPER(&QHsm::top); break; } } return status_; }
static QState Pelican_offline(Pelican * const me) { QState status_; switch (Q_SIG(me)) { /* @(/1/0/1/2/0) */ case Q_TIMEOUT_SIG: { QActive_armX(&me->super, 0U, OFF_FLASH_TOUT); me->flashCtr ^= 1U; /* @(/1/0/1/2/0/0) */ if ((me->flashCtr & 1U) == 0U) { BSP_signalCars(CARS_RED); BSP_signalPeds(PEDS_DONT_WALK); status_ = QM_HANDLED(); } /* @(/1/0/1/2/0/1) */ else { BSP_signalCars(CARS_BLANK); BSP_signalPeds(PEDS_BLANK); status_ = QM_HANDLED(); } break; } /* @(/1/0/1/2/1) */ case ON_SIG: { static QActionHandler const act_[] = { Q_ACTION_CAST(&Pelican_operational_e), Q_ACTION_CAST(&Pelican_operational_i), Q_ACTION_CAST(0) }; status_ = QM_TRAN(&Pelican_operational_s, &act_[0]); break; } default: { status_ = QM_SUPER(); break; } } return status_; }
// @(/1/0/3/1/2) ............................................................. QP::QState Pelican::carsEnabled(Pelican * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // @(/1/0/3/1/2) case Q_EXIT_SIG: { BSP_signalCars(CARS_RED); status_ = Q_HANDLED(); break; } // @(/1/0/3/1/2/0) case Q_INIT_SIG: { status_ = Q_TRAN(&Pelican::carsGreen); break; } default: { status_ = Q_SUPER(&Pelican::operational); break; } } return status_; }
/*..........................................................................*/ QState Pelican_operational(Pelican * const me) { /* a regular state handler */ QState status_; switch (Q_SIG(me)) { case Q_ENTRY_SIG: { BSP_signalCars(CARS_RED); BSP_signalPeds(PEDS_DONT_WALK); status_ = Q_HANDLED(); break; } case Q_INIT_SIG: { status_ = Q_TRAN(&Pelican_carsEnabled); /* regular transition */ break; } case OFF_SIG: { status_ = Q_TRAN(&Pelican_offline); /* regular transition */ break; } default: { status_ = Q_SUPER(&QHsm_top); /* the superstate */ break; } } return status_; }
/* @(/1/0/1/1/2/2) .........................................................*/ static QState Pelican_carsYellow_e(Pelican * const me) { BSP_showState(me->super.prio, "carsYellow"); BSP_signalCars(CARS_YELLOW); QActive_armX(&me->super, 0U, CARS_YELLOW_TOUT); return QM_ENTRY(&Pelican_carsYellow_s); }
/* @(/1/0/1/1/2/1) .........................................................*/ static QState Pelican_carsGreen_e(Pelican * const me) { BSP_signalCars(CARS_GREEN); QActive_armX(&me->super, 0U, CARS_GREEN_MIN_TOUT); return QM_ENTRY(&Pelican_carsGreen_s); }
/* @(/1/0/1/1/2) ...........................................................*/ static QState Pelican_carsEnabled_x(Pelican * const me) { BSP_signalCars(CARS_RED); return QM_EXIT(&Pelican_carsEnabled_s); }
/* @(/1/0/1/1) .............................................................*/ static QState Pelican_operational_e(Pelican * const me) { BSP_signalCars(CARS_RED); BSP_signalPeds(PEDS_DONT_WALK); return QM_ENTRY(&Pelican_operational_s); }