/*..........................................................................*/ void main() { Bomb4_ctor(&l_bomb, 0x0D); /* the secret defuse code, 1101 binary */ printf("Time Bomb (QEP QFsm class)\n" "Press 'u' for UP event\n" "Press 'd' for DOWN event\n" "Press 'a' for ARM event\n" "Press <Esc> to quit.\n"); QFsm_init((QFsm *)&l_bomb, (QEvent *)0); /* take the initial transition */ for (;;) { /* event loop */ static TickEvt tick_evt = { TICK_SIG, 0, 0}; delay(100); /* 100 ms delay */ if (++tick_evt.fine_time == 10) { tick_evt.fine_time = 0; } printf("T(%1d)%c", tick_evt.fine_time, (tick_evt.fine_time == 0) ? '\n' : ' '); QFsm_dispatch((QFsm *)&l_bomb, (QEvent *)&tick_evt); if (kbhit()) { static QEvent const up_evt = { UP_SIG, 0 }; static QEvent const down_evt = { DOWN_SIG, 0 }; static QEvent const arm_evt = { ARM_SIG, 0 }; QEvent const *e = (QEvent *)0; switch (getch()) { case 'u': { /* UP event */ printf("\nUP : "); e = &up_evt; /* generate the UP event */ break; } case 'd': { /* DOWN event */ printf("\nDOWN: "); e = &down_evt; /* generate the DOWN event */ break; } case 'a': { /* ARM event */ printf("\nARM : "); e = &arm_evt; /* generate the ARM event */ break; } case '\33': { /* <Esc> key */ printf("\nESC : Bye! Bye!"); exit(0); break; } } if (e != (QEvent *)0) { /* keyboard event available? */ QFsm_dispatch((QFsm *)&l_bomb, e); /* dispatch the event */ } } } }
void test_event_task2(void * pParam) { /*check whether MAX_IDLE_EVENT_TASK is valid*/ RAW_ASSERT((ARRAY_SIZE(active_idle_task)) == MAX_IDLE_EVENT_TASK); idle_event_init(); Bomb4_ctor(&l_bomb22, 0xd); /* the secret defuse code, 1101 binary */ l_bomb22.internal_priority = 1; fsm_init(&l_bomb22.a1.super, 0); idle_tick_start = 1; vc_port_printf("Time Bomb (raw os fsm case)\n" "Press 'u' for UP event\n" "Press 'd' for DOWN event\n" "Press 'a' for ARM event\n" "Press <Esc> to quit.\n"); while (1) { if (_kbhit()) { static STATE_EVENT up_evt = { UP_SIG, 0, 0 }; static STATE_EVENT down_evt = { DOWN_SIG, 0, 0 }; static STATE_EVENT arm_evt = { ARM_SIG, 0, 0 }; STATE_EVENT *e = 0; switch (_getch()) { case 'u': { /* UP event */ vc_port_printf("\nUP : "); e = &up_evt; /* generate the UP event */ break; } case 'd': { /* DOWN event */ vc_port_printf("\nDOWN: "); e = &down_evt; /* generate the DOWN event */ break; } case 'a': { /* ARM event */ vc_port_printf("\nARM : "); e = &arm_evt; /* generate the ARM event */ break; } case '\33': { /* <Esc> key */ vc_port_printf("\nESC : Bye! Bye!"); exit(0); break; } } if (e != 0) { /* keyboard event available? */ idle_event_end_post(&l_bomb22.a1, e->sig, &tick_evt); } } raw_sleep(10); } }