文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux input subsystem 虚拟键盘和鼠标

linux input subsystem 虚拟键盘和鼠标

时间:2010-08-10  来源:wadahana

1  event device

in /dev/input/event?

cat data from /dev/input/event? the data format is :

struct input_event {

struct timeval time;

__u16 type;

__u16 code;

__s32 value;

};

e.g : 

xx xx xx xx yy yy yy yy tt tt cc cc vv vv vv vv

xx is usec

yy is sec

tt is type

cc is key code

vv is value, might be it means keyup or keydown

for mouse event, you can get the same message format

xx, yy is the same as keyboard

tt is EV_REL, it means the value feild is relative distance; 

cc is REL_X or REL_Y

vv is the value of relative distance

2 register input_dev

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

for virtual mouse

**/

static int  vkm_vmouse_register(void)

{

       struct input_dev *vmouse_dev;

  vmouse_dev = input_allocate_device();

if (!vmouse_dev)

return -ENOMEM;

vmouse_dev->name = "VMouse ";

vmouse_dev->phys = "xxmouse/input1";

vmouse_dev->id.bustype = BUS_HOST;

vmouse_dev->id.vendor = 0x0001;

vmouse_dev->id.product = 0x0002;

vmouse_dev->id.version = 0x0100;

vmouse_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);

vmouse_dev->keybit[BIT_WORD(BTN_MOUSE)] =

BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT);

vmouse_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);

/* error check */

error = input_register_device(vmouse_dev);

if (error) {

input_free_device(vmouse_dev);

return error;

}

}

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

for virtual keyboard

**/

static int  vkm_vkbd_register(void)

{

int i, error;

       struct input_dev *vkbd_dev;   

vkbd_dev = input_allocate_device();

if (!vkbd_dev)

return -ENOMEM;

vkbd_dev->name = "VKBD Keyboard";

vkbd_dev->phys = "atakbd/input0";

vkbd_dev->id.bustype = BUS_HOST;

vkbd_dev->id.vendor = 0x0001;

vkbd_dev->id.product = 0x0001;

vkbd_dev->id.version = 0x0100;

vkbd_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);

vkbd_dev->keycode = atakbd_keycode;

vkbd_dev->keycodesize = sizeof(unsigned char);

vkbd_dev->keycodemax = ARRAY_SIZE(atakbd_keycode);

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

set_bit(atakbd_keycode[i], vkbd_dev->keybit);

}

/* error check */

error = input_register_device(vkbd_dev);

if (error) {

input_free_device(vkbd_dev);

return error;

}

return 0;

}

send keyboard event to input handler like this:

    input_report_key(vkbd_dev,KEY_A,0);

    input_sync(vkbd_dev);

and send mouse event to input handler like this:

    input_report_rel(vmouse_dev, REL_X, 10);

 input_report_rel(vmouse_dev, REL_Y, 10);

    input_sync(vmouse_dev);


相关阅读 更多 +
排行榜 更多 +
声控忍者安卓版

声控忍者安卓版

冒险解谜 下载
Zombies Bang

Zombies Bang

冒险解谜 下载
海绵邻居5个朋友版

海绵邻居5个朋友版

冒险解谜 下载