文章详情

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


相关阅读 更多 +
排行榜 更多 +
幸运硬币官方正版下载

幸运硬币官方正版下载

休闲益智 下载
宝宝来找茬手机版 v9.86.00.00 安卓版

宝宝来找茬手机版 v9.86.00.00 安卓版

休闲益智 下载
翻滚飞机大战最新版 v1.0.4 安卓版

翻滚飞机大战最新版 v1.0.4 安卓版

飞行射击 下载