前段时间遇到一个情况,一个手机端应用要操控电视端应用,其将手机端的操作在电视端转换为uinput模拟的鼠标事件。后来想想,很多远程操作都应该用到了这个方法,因此也决定看看具体是怎么做的。
uinputde 的使用还是比较简单的,主要步骤如下:
1.打开设备
int fd = open("/dev/uinput", O_WRONLY | O_NDELAY);
2.通过ioctl函数设置参数
ioctl(fd,UI_SET_EVBIT,EV_XXX);
3.写入设备信息
struct uinput_user_dev mouse;
mouse.id.bustype = BUS_USB;
......
write(fd, &mouse, sizeof(struct uinput_user_dev));
4.创建设备
ioctl(fd, UI_DEV_CREATE);
5.向设备发送event
struct input_event ev;
ev.type = EV_KEY;
......
write(fd, &ev, sizeof(struct input_event)
其中,eventtype主要包括:
#define EV_SYN 0x00 表示设备支持所有的事件
#define EV_KEY 0x01 键盘或者按键,表示一个键码
#define EV_REL 0x02 鼠标设备,表示一个相对的光标位置结果
#define EV_ABS 0x03 手写板产生的值,其是一个绝对整数值
#define EV_MSC 0x04 其他类型
#define EV_LED 0x11 LED灯设备
#define EV_SND 0x12 蜂鸣器,输入声音
#define EV_REP 0x14 允许