文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
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);


相关阅读 更多 +
排行榜 更多 +
飞翔之光手机版

飞翔之光手机版

冒险解谜 下载
飞翔之光手游

飞翔之光手游

冒险解谜 下载
月亮冲突英雄

月亮冲突英雄

飞行射击 下载