/*..........................................................................*/ 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); }
/*${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_; }
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); }
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); }
/*..........................................................................*/ 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); }
/** * 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); }