#include #include #include #include //#include //#include //#include //#include // ----- forward declaration ----- // pthread_t thread; //=================================================================================== int read_kbd(void) //BOITE NOIRE { unsigned int long timeout; unsigned int stat; int data; for(timeout = 500000L; timeout != 0; timeout--) { stat = rtl_inb(0x64); /* loop until 8042 output buffer full */ if(stat & 0x01) { data = rtl_inb(0x60); /* loop if parity error or receive timeout */ if((stat & 0xC0) == 0) return data; } } /* rtl_printf("read_kbd: timeout\n"); */ return -1; } //end read_kbd() //=================================================================================== //=================================================================================== void* task_fcn(void* arg) { long sec1 = 1000000000L; int n =0; int data; //read from keyboard pthread_make_periodic_np( pthread_self(), gethrtime(), sec1 ); while (n<20) { ++n; pthread_wait_np(); data = read_kbd(); rtl_printf("n=%d data=%d\n", n, data); }//end while return 0; } //=================================================================================== int init_module(void) { rtl_printf("init_module()...\n"); return pthread_create( &thread, NULL, task_fcn, 0 ); } void cleanup_module(void) { rtl_printf("cleanup_module().\n"); pthread_delete_np (thread); }