1事件的装置



在{输入/输入/事件}中



数据的格式是:



结构input_event {



当前的时间结构;



__u16型;



__u16代码;



__s32价值;



};



例如:



XX XX XX



XX是微秒



YY秒



TT型



cc是关键代码



VV是价值,可能是KEYUP或者KeyDown



对于鼠标事件,您可以得到相同的消息格式。



XX,YY和键盘一样。



这是ev_rel,这意味着价值领域是相对的距离;



CC是rel_x或rel_y



VV是相对距离的值。



2登记input_dev



/ **************************



虚拟鼠标



**



静态变量vkm_vmouse_register(void)



{



结构input_dev * vmouse_dev;



vmouse_dev = input_allocate_device();



如果(!vmouse_dev)



返回enomem;



vmouse_dev ->名称=vmouse ;



vmouse_dev ->物理=xxmouse / input1 ;



vmouse_dev -> id.bustype = bus_host;



vmouse_dev -> id.vendor =端口;



vmouse_dev -> id.product = 0x0002;



vmouse_dev -> id.version = 0x0100;



vmouse_dev -> evbit { 0 } = bit_mask(ev_key)bit_mask(ev_rel)|;



vmouse_dev ->意大利键盘bit_word(btn_mouse)} = {



bit_mask(btn_left)bit_mask(btn_right)|;



vmouse_dev -> relbit { 0 } = bit_mask(rel_x)bit_mask(rel_y)|;



错误检查



误差= input_register_device(vmouse_dev);



如果(错误){



input_free_device(vmouse_dev);



返回错误;



}



}



/ **************************



虚拟键盘



**



静态变量vkm_vkbd_register(void)



{



i,错误;



结构input_dev * vkbd_dev;



vkbd_dev = input_allocate_device();



如果(!vkbd_dev)



返回enomem;



vkbd_dev ->名称=vkbd键盘;



vkbd_dev ->物理=atakbd / input0 ;



vkbd_dev -> id.bustype = bus_host;



vkbd_dev -> id.vendor =端口;



vkbd_dev -> id.product =端口;



vkbd_dev -> id.version = 0x0100;



vkbd_dev -> evbit { 0 } = bit_mask(ev_key)bit_mask(ev_rep)|;



vkbd_dev ->密码= atakbd_keycode;



vkbd_dev -> keycodesize = sizeof(char);



vkbd_dev -> keycodemax = array_size(atakbd_keycode);



为(i = 1;i < 0x72;i++){



set_bit(atakbd_keycode {我},vkbd_dev ->意大利键盘);



}



错误检查



误差= input_register_device(vkbd_dev);



如果(错误){



input_free_device(vkbd_dev);



返回错误;



}



返回0;



}



像这样发送键盘事件给输入处理程序:



input_report_key(vkbd_dev,key_a,0);



input_sync(vkbd_dev);



并将鼠标事件发送给输入处理程序,如下所示:



input_report_rel(vmouse_dev,rel_x,10);



input_report_rel(vmouse_dev,rel_y,10);



input_sync(vmouse_dev);