Ejemplo n.º 1
0
/*..........................................................................*/
QState Bomb_timing(Bomb *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC/4);
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC/4);
            if (me->ctr > (uint8_t)0) {
                if ((me->ctr & 0x01) != 0) {
                    LED_on();
                }
                else {
                    LED_off();
                }
                --me->ctr;
            }
            else {                                       /* timeout expired */
                return Q_TRAN(&Bomb_blast);
            }
            return Q_HANDLED();
        }
    }
    return Q_IGNORED();
}
Ejemplo n.º 2
0
/*..........................................................................*/
QState Sensor_polling(Sensor *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
                                                   /* timeout in 1/2 second */
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC/2);
            return Q_HANDLED();
        }
        case Q_EXIT_SIG: {
            QActive_disarm((QActive *)me);
            return Q_HANDLED();
        }
        case Q_INIT_SIG: {
            return Q_TRAN(&Sensor_processing);
        }
        case Q_TIMEOUT_SIG: {
                                                   /* timeout in 1/2 second */
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC/2);
            ++me->pollCtr;
            printf("poll %3d\n", me->pollCtr);
            if ((me->pollCtr & 0x3) == 0) {                     /* modulo 4 */
                QActive_post((QActive *)me, DATA_READY_SIG, 0);
            }
            return Q_HANDLED();
        }
        case TERMINATE_SIG: {
            return Q_TRAN(&Sensor_final);
        }
    }
    return Q_SUPER(&QHsm_top);
}
Ejemplo n.º 3
0
static QState mmi_busy(struct mmi_ao *me)
{
    static const char busy_char[] = ". ";
    static uint8_t busy_index;

    switch (Q_SIG(me)) {
    case Q_ENTRY_SIG:
        // Print hello message
        lcd_clear();
        lcd_write(0, 0, "Busy ...", 0);
        QActive_arm((QActive *) me, TIMEOUT_BUSY);
        return Q_HANDLED();
    case Q_EXIT_SIG:
        QActive_disarm((QActive *) me);
        return Q_HANDLED();
    case Q_TIMEOUT_SIG:
        lcd_char(15, 0, busy_char[busy_index]);
        busy_index = (busy_index + 1) % (sizeof(busy_char) - 1);
        QActive_arm((QActive *) me, TIMEOUT_BUSY);
        return Q_HANDLED();
    case SIG_KEY_PRESS:
        if (Q_PAR(me) == KEY_LEFT) {
            QActive_post((QActive *) &prog_ao, SIG_PROG_STOP, 0);
            return Q_TRAN(mmi_navigate);
        }
        return Q_HANDLED();
    case SIG_PROG_DONE:
        return Q_TRAN(mmi_navigate);
    }

    return Q_SUPER(&QHsm_top);
}
Ejemplo n.º 4
0
/*..........................................................................*/
QState Ped_wait(Ped *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            BSP_showState(me->super.prio, "wait");
            me->retryCtr = N_ATTEMPTS;
            QActive_arm((QActive *)me, WAIT_TOUT);
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            if ((--me->retryCtr) != 0) {
                QActive_arm((QActive *)me, WAIT_TOUT);
                QActive_post((QActive *)&AO_Pelican, PEDS_WAITING_SIG, 0);
            }
            else {
                return Q_TRAN(&Ped_off);
            }
            return Q_HANDLED();
        }
        case TERMINATE_SIG: {
            QF_stop();
            return Q_HANDLED();
        }
    }
    return Q_SUPER(&QHsm_top);
}
Ejemplo n.º 5
0
/*..........................................................................*/
QState AlarmClock_mode24hr(AlarmClock *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            printf("*** 24-hour mode\n");
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
                                                   /* timeout in one second */
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC);

            if (++me->current_time == 24*60) {  /* roll over in 24-hr mode? */
                me->current_time = 0;
            }
            printf("%02d:%02d\n",
                   me->current_time/60, me->current_time%60);

                      /* synchronously dispatch to the orthogonal component */
            Q_SIG(&me->alarm) = TIME_SIG;
            Q_PAR(&me->alarm) = me->current_time;
            Alarm_dispatch(&me->alarm);
            return Q_HANDLED();
        }
    }
    return Q_SUPER(&AlarmClock_timekeeping);
}
Ejemplo n.º 6
0
/*..........................................................................*/
QState AlarmClock_mode12hr(AlarmClock *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            printf("*** 12-hour mode\n");
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            uint32_t h;                  /* temporary variable to hold hour */
                                                   /* timeout in one second */
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC);

            if (++me->current_time == 12*60) {  /* roll over in 12-hr mode? */
                me->current_time = 0;
            }
            h = me->current_time/60;
            printf("%02d:%02d %s\n", (h % 12) ? (h % 12) : 12,
                   me->current_time % 60, (h / 12) ? "PM" : "AM");

                      /* synchronously dispatch to the orthogonal component */
            Q_SIG(&me->alarm) = TIME_SIG;
            Q_PAR(&me->alarm) = me->current_time;
            Alarm_dispatch(&me->alarm);
            return Q_HANDLED();
        }
    }
    return Q_SUPER(&AlarmClock_timekeeping);
}
Ejemplo n.º 7
0
/*${AOs::Blink::SM::OFF} ...................................................*/
static QState Blink_OFF(Blink * const me) {
    QState status_;
    switch (Q_SIG(me)) {
        /* ${AOs::Blink::SM::OFF} */
        case Q_ENTRY_SIG: {
            BSP_ledOff();
            QActive_arm((QActive *)me, BLINK_TOUT);
            status_ = Q_HANDLED();
            break;
        }
        /* ${AOs::Blink::SM::OFF} */
        case Q_EXIT_SIG: {
            QActive_disarm((QActive *)me);
            status_ = Q_HANDLED();
            break;
        }
        /* ${AOs::Blink::SM::OFF::Q_TIMEOUT} */
        case Q_TIMEOUT_SIG: {
            status_ = Q_TRAN(&Blink_ON);
            break;
        }
        default: {
            status_ = Q_SUPER(&QHsm_top);
            break;
        }
    }
    return status_;
}
Ejemplo n.º 8
0
/*..........................................................................*/
QState Bomb_blast(Bomb *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            QActive_arm((QActive *)me, 2 * BSP_TICKS_PER_SEC);
            LED_on();
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            return Q_TRAN(&Bomb_off);
        }
    }
    return Q_IGNORED();
}
Ejemplo n.º 9
0
/*..........................................................................*/
QState TServer_authorizing(TServer *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            printf("-> authorizing\n");
                                           /* one-shot timeout in 2 seconds */
            QActive_arm((QActive *)me, 2*BSP_TICKS_PER_SEC);
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            return Q_TRAN(&TServer_idle);
        }
    }
    return Q_SUPER(&TServer_operational);
}
Ejemplo n.º 10
0
static QState buzzerState(struct ExternalBell *me)
{
	switch (Q_SIG(me)) {
	case Q_ENTRY_SIG:
		BSP_buzzer(external_bell_buzz, 8);
		QActive_arm((QActive*)me, 7);
		return Q_HANDLED();
	case Q_TIMEOUT_SIG:
		return Q_TRAN(offState);
	case Q_EXIT_SIG:
		BSP_buzzer(0, 0);
		return Q_HANDLED();
	}
	return Q_SUPER(topState);
}
Ejemplo n.º 11
0
/*..........................................................................*/
QState Philo_thinking(Philo *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            QActive_arm((QActive *)me, THINK_TIME);
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            BSP_busyDelay();
            return Q_TRAN(&Philo_hungry);
        }
//        case EAT_SIG:
//        case DONE_SIG: {
//            Q_ERROR();    /* these events should never arrive in this state */
//            return Q_HANDLED();
//        }
    }
    return Q_IGNORED();
}
Ejemplo n.º 12
0
/*..........................................................................*/
QState Ped_off(Ped *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            BSP_showState(me->super.prio, "off");
            QActive_arm((QActive *)me, OFF_TOUT);
            QActive_post((QActive *)&AO_Pelican, OFF_SIG, 0);
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            QActive_post((QActive *)&AO_Pelican, ON_SIG, 0);
            return Q_TRAN(&Ped_wait);
        }
        case TERMINATE_SIG: {
            QF_stop();
            return Q_HANDLED();
        }
    }
    return Q_SUPER(&QHsm_top);
}
Ejemplo n.º 13
0
static QState mmi_show_msg(struct mmi_ao *me)
{
    switch (Q_SIG(me)) {
    case Q_ENTRY_SIG:
        QActive_arm((QActive *) me, TICKS(Q_PAR(me) * 1000));
        return Q_HANDLED();
    case Q_EXIT_SIG:
        QActive_disarm((QActive *) me);
        return Q_HANDLED();
    case Q_TIMEOUT_SIG:
        return Q_TRAN(mmi_navigate);
    case SIG_KEY_PRESS:
        if (Q_PAR(me) == KEY_ENTER) {
            return Q_TRAN(mmi_navigate);
        }
        return Q_HANDLED();;
    }

    return Q_SUPER(&QHsm_top);
}
Ejemplo n.º 14
0
/*..........................................................................*/
QState Sensor_busy(Sensor *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            printf("-> busy\n");
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
                                                   /* timeout in 1/2 second */
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC/2);

            ++me->procCtr;
            printf("process %3d\n", me->procCtr);
            if ((me->procCtr & 0x1) == 0) {                     /* modulo 2 */
                return Q_TRAN(&Sensor_idle);
            }
            return Q_HANDLED();
        }
    }
    return Q_SUPER(&Sensor_processing);
}
Ejemplo n.º 15
0
/*..........................................................................*/
QState Philo_eating(Philo *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            QActive_arm((QActive *)me, EAT_TIME);
            return Q_HANDLED();
        }
        case Q_EXIT_SIG: {
            BSP_busyDelay();
            QActive_post((QActive *)&AO_Table, DONE_SIG, me->super.prio);
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            return Q_TRAN(&Philo_thinking);
        }
        case EAT_SIG:
        case DONE_SIG: {
            Q_ERROR();    /* these events should never arrive in this state */
        }
    }
    return Q_SUPER(&QHsm_top);
}
Ejemplo n.º 16
0
/*..........................................................................*/
QState Oper_run(Oper *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
            QActive_arm((QActive *)me, me->interval);
            return Q_HANDLED();
        }
        case Q_EXIT_SIG: {
            uint8_t timeout = me->bomb_prev + 1;
            if (timeout > me->bomb_max) {
                timeout = me->bomb_min;
            }
            me->bomb_prev = timeout;
            QActive_post((QActive *)&AO_Bomb, ARM_SIG, timeout);
            return Q_HANDLED();
        }
        case Q_TIMEOUT_SIG: {
            return Q_TRAN(&Oper_run);                 /* transition to self */
        }
    }
    return Q_IGNORED();
}
/*${components::aoGrinder::SM::settling} ...................................*/
static QState aoGrinder_settling(aoGrinder * const me) {
    QState status_;
    switch (Q_SIG(me)) {
        /* ${components::aoGrinder::SM::settling} */
        case Q_ENTRY_SIG: {
            QActive_arm((QActive *)me, GRINDER_SETTLING_TIME);
            status_ = Q_HANDLED();
            break;
        }
        /* ${components::aoGrinder::SM::settling::Q_TIMEOUT} */
        case Q_TIMEOUT_SIG: {
            status_ = Q_TRAN(&aoGrinder_done);
            break;
        }
        default: {
            status_ = Q_SUPER(&QHsm_top);
            break;
        }
    }
    return status_;
}
Ejemplo n.º 18
0
/*..........................................................................*/
QState AlarmClock_timekeeping(AlarmClock *me) {
    switch (Q_SIG(me)) {
        case Q_ENTRY_SIG: {
                                                   /* timeout in one second */
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC);
            return Q_HANDLED();
        }
        case Q_EXIT_SIG: {
            QActive_disarm((QActive *)me);
            return Q_HANDLED();
        }
        case Q_INIT_SIG: {
            return Q_TRAN(&AlarmClock_mode24hr);
        }
        case CLOCK_12H_SIG: {
            return Q_TRAN(&AlarmClock_mode12hr);
        }
        case CLOCK_24H_SIG: {
            return Q_TRAN(&AlarmClock_mode24hr);
        }
        case ALARM_SIG: {
            printf("Wake up!!!\n");
            return Q_HANDLED();
        }
        case ALARM_SET_SIG:
        case ALARM_ON_SIG:
        case ALARM_OFF_SIG: {
                      /* synchronously dispatch to the orthogonal component */
            Q_SIG(&me->alarm) = Q_SIG(me);
            Q_PAR(&me->alarm) = Q_PAR(me);
            Alarm_dispatch(&me->alarm);
            return Q_HANDLED();
        }
        case TERMINATE_SIG: {
            return Q_TRAN(&AlarmClock_final);
        }
    }
    return Q_SUPER(&QHsm_top);
}
Ejemplo n.º 19
0
/* @(/1/0/0/2) .............................................................*/
static QState Blinky_on(Blinky * const me) {
    QState status_;
    switch (Q_SIG(me)) {
        /* @(/1/0/0/2) */
        case Q_ENTRY_SIG: {
            QActive_arm((QActive *)me, BSP_TICKS_PER_SEC/2); /* 1/2 sec */
            BSP_ledOn();
            status_ = Q_HANDLED();
            break;
        }
        /* @(/1/0/0/2/0) */
        case Q_TIMEOUT_SIG: {
            status_ = Q_TRAN(&Blinky_off);
            break;
        }
        default: {
            status_ = Q_SUPER(&QHsm_top);
            break;
        }
    }
    return status_;
}
Ejemplo n.º 20
0
/**
 * Hello state.
 * Prints a hello message and waits for keypress or timeout to switch to main menu.
 */
static QState mmi_hello(struct mmi_ao *me)
{
    switch (Q_SIG(me)) {
    case Q_ENTRY_SIG:
        // Print hello message
        lcd_write(0, 0, " CamControl 0.1", 0);
        lcd_write(0, 1, "----------------", 0);
        QActive_post((QActive *) &backlight_ao, SIG_BACKLIGHT_ACTIVATE, 0);
        QActive_arm((QActive *) me, TIMEOUT_HELLO);
        return Q_HANDLED();
    case Q_EXIT_SIG:
        // Clear screen
        QActive_disarm((QActive *) me);
        return Q_HANDLED();
    case Q_TIMEOUT_SIG:
    case SIG_ENCODER:
    case SIG_KEY_PRESS:
    case SIG_KEY_RELEASE:
        return Q_TRAN(mmi_navigate);
    }

    return Q_SUPER(&QHsm_top);
}