全部博文(395)
分类: LINUX
2011-05-22 09:53:55
实例分析
//按键中断中报告事件
static void button-interrupt(int irq, void * dummy, struct pt-regs * fp)
{
input_report_key(&button_dev, BTN_0,inb(BUTTON_PORTO));
input_report_key(& button_dev, BTN_1,inb(BUTTON_PORTI));
input_sync(&button_dev);
static int - -in it button-in it(void){
//用户申请中断
if (request-irq(BUTTON_IRQ, button_interrupt, 0, "button", NULL))
return -EBUSY;
set_bit(EV_KEY,button_dev.evbit)//支持EV_KEY事件
set_bit(BTN_0,button_dev.keybit);//设备支持两个键
set_bit(BTN_1, button_dev.keybit);
input_register_device(&button_dev);//注册input设备
}
应用程序
struct input_event{
struct timeval time;//按键时间
__ul6 type;//类型,在下面有定义
__ul6 code;//要模拟成什么按键
__s32 value;//是接下还是释放
}
struct input_event ev_mouse[2I;
fd = open {"devlinputlevent3".0_RDWR};
while(1){
count=read(fd,ev__mouse,sizeof(struct input_event}};
for{i=0;i<(int}count/sizeof{struct input-event};i++}
(
if(EV_REL== ev_mouse[ i]. type){
printf(“time:%ld, %d”,ev_mouse—.time.tv_sec,ev_mouse—.time.tv_usecl;
printf(“type:%d code:%d va[ue:%dln",ev_mouse—.type,ev_mouse[i].code,ev_mouse[i].va[ue};
if(EV_KEY== ev_mouse[i]. type ){
printf("time:%ld. %d",ev_mouse—.time.tv_sec,ev_mouse—.time.tv_usec};
printfl(" type:%d code:0'sd vaLue:%dtn",ev_mouse—.type,ev_mouser'1.code,ev_mouser'].va}ue}
}
}
}