文章详情

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


相关阅读 更多 +
排行榜 更多 +
马里奥赛车世界游戏手机版下载

马里奥赛车世界游戏手机版下载

赛车竞速 下载
无畏契约皮肤开箱器手游下载

无畏契约皮肤开箱器手游下载

休闲益智 下载
旭日之城官方正版下载

旭日之城官方正版下载

策略塔防 下载