/*..........................................................................*/ static RAW_U16 Bomb4_timing(Bomb4 *me, STATE_EVENT *e) { switch (e->sig) { case STM_ENTRY_SIG: { idle_tick_arm(&l_bomb22.a1, 50); vc_port_printf("timing state enter\n"); me->code = 0; /* clear the defuse code */ return STM_RET_HANDLED; } case STM_EXIT_SIG: { vc_port_printf("timing state exit\n"); return STM_RET_HANDLED; } case UP_SIG: { me->code <<= 1; me->code |= 1; return STM_RET_HANDLED; } case DOWN_SIG: { me->code <<= 1; return STM_RET_HANDLED; } case ARM_SIG: { if (me->code == me->defuse) { return STM_TRAN(&Bomb4_setting); } return STM_RET_HANDLED; } case STM_TIMEOUT_SIG: { idle_tick_arm(&l_bomb22.a1, 50); --me->timeout; vc_port_printf("me->timeout is %d\n", me->timeout); if (me->timeout == 0) { vc_port_printf("boom aaaaaa^^^^^^%%%%%$$$$$$\n"); exit(0); } return STM_RET_HANDLED; } } return STM_RET_IGNORED; }
/*..........................................................................*/ static RAW_U16 Bomb4_setting(Bomb4 *me, STATE_EVENT *e) { switch (e->sig) { case STM_ENTRY_SIG: { //vc_port_printf("STM_ENTRY_SIG\n"); //idle_tick_arm(&l_bomb22.a1, 100); me->code = 0; /* clear the defuse code */ return STM_RET_HANDLED; } case UP_SIG: { ++me->timeout; //vc_port_printf("internal priority is %d\n", me->internal_priority); vc_port_printf("me->timeout is %d\n", me->timeout); vc_port_printf("event data is %p\n", e->which_pool); return STM_RET_HANDLED; } case DOWN_SIG: { if (me->timeout > 1) { --me->timeout; vc_port_printf("me->timeout is %d\n", me->timeout); } return STM_RET_HANDLED; } case ARM_SIG: { return STM_TRAN(&Bomb4_timing); /* transition to "timing" */ } case STM_TIMEOUT_SIG: //test_count++; //vc_port_printf("STM_TIMEOUT_SIG i %d\n", test_count); //vc_port_printf("timeout\n"); //idle_tick_arm(&l_bomb22.a1, 100); return STM_RET_HANDLED; case STM_EXIT_SIG: vc_port_printf("setting state exit\n"); return STM_RET_HANDLED; } return STM_RET_IGNORED; }
/*..........................................................................*/ static RAW_U16 Bomb4_initial(Bomb4 *me, STATE_EVENT *e) { (void)e; me->timeout = INIT_TIMEOUT; return STM_TRAN(&Bomb4_setting); }
uint8_t block_init(stm_t *me, msg_t *e) { return STM_TRAN(block_idle); }