示例#1
0
文件: bomb4.c 项目: keke9036/tortoise
/*..........................................................................*/
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 */
            }
        }
    }
}
示例#2
0
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);
		 
	}


}