linux input subsystem虚拟键盘和鼠标
- 2023-04-23 05:12:48
- 来源:未知
- 在手机上看
扫一扫立即进入手机端
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);
相关资讯
更多-
三角洲漫游者游戏
中文|82.3M
-
joytokey电脑安装版
中文|4.5M
-
中国兰花交易网最新版
中文|61.5M
-
月子食谱怀孕育儿
中文|13.1M
-
罗技gpw鼠标驱动2022最新版
中文|
-
华硕rog armoury鼠标通用驱动程序
中文|
-
Oracle Database 12c数据库软件
中文|2.44G
-
Oracle Database 12c数据库软件
中文|2.44G
-
Oracle Database 12c数据库软件
中文|2.44G