Ejemplo n.º 1
0
// @(/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_;
}
Ejemplo n.º 2
0
// @(/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_;
}
Ejemplo n.º 3
0
// @(/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_;
}
Ejemplo n.º 4
0
// @(/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_;
}
Ejemplo n.º 5
0
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_;
}
Ejemplo n.º 6
0
// @(/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_;
}
Ejemplo n.º 7
0
/*..........................................................................*/
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_;
}
Ejemplo n.º 8
0
/* @(/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);
}
Ejemplo n.º 9
0
/* @(/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);
}
Ejemplo n.º 10
0
/* @(/1/0/1/1/2) ...........................................................*/
static QState Pelican_carsEnabled_x(Pelican * const me) {
    BSP_signalCars(CARS_RED);
    return QM_EXIT(&Pelican_carsEnabled_s);
}
Ejemplo n.º 11
0
/* @(/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);
}