Android系统利用uinput设备驱动实现虚拟输入设备

分类: 移动操作系统之Android   458人阅读  评论(0)  收藏  举报

一、内核配置

Device Drivers——>Input Device Support——>Miscellaneous devices——>User level driver support

drivers/input/misc/uinput.ko

CONFIG_INPUT_MISC=y

CONFIG_INPUT_UINPUT=y

二、以下是ubuntu下的测试用例:

1.testuinput.c

[cpp]  view plain copy
  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3. #include <string.h>  
  4. #include <fcntl.h>  
  5. #include <linux/uinput.h>  
  6.   
  7. int main(){  
  8.   struct uinput_user_dev device;  
  9.   memset(&device, 0, sizeof device);  
  10.   int uinputfd = open("/dev/uinput",O_WRONLY);  
  11.   strcpy(device.name, "Hillcrest Labs Virtual Pointer");  
  12.   device.id.bustype = BUS_USB;  
  13.   device.id.vendor = 0x1d5a; // Hillcrest Labs VID  
  14.   device.id.product = 0xc2b3; // FSM, but probably doesn't matter  
  15.   device.id.version = 1;  
  16.   int i = 0;  
  17.   for (i = 0; i < ABS_MAX; i++) {  
  18.     device.absmax[i] = -1;  
  19.     device.absmin[i] = -1;  
  20.     device.absfuzz[i] = -1;  
  21.     device.absflat[i] = -1;  
  22.   }  
  23.   if (write(uinputfd,&device,sizeof(device)) != sizeof(device)) {  
  24.     fprintf(stderr, "Error initializing the input device.\n");  
  25.     return 1;  
  26.   }  
  27.   if (ioctl(uinputfd, UI_SET_EVBIT, EV_REL) < 0 ||  
  28.     ioctl(uinputfd, UI_SET_RELBIT, REL_X) < 0 ||  
  29.     ioctl(uinputfd, UI_SET_RELBIT, REL_Y) < 0 ||  
  30.     ioctl(uinputfd, UI_SET_RELBIT, REL_WHEEL) < 0 ||  
  31.     ioctl(uinputfd, UI_SET_EVBIT, EV_KEY) < 0 ||  
  32.     ioctl(uinputfd, UI_SET_KEYBIT, BTN_LEFT) < 0 ||  
  33.     ioctl(uinputfd, UI_SET_KEYBIT, BTN_RIGHT) < 0 ||  
  34.     ioctl(uinputfd, UI_SET_KEYBIT, BTN_MIDDLE) < 0 ||  
  35.     ioctl(uinputfd,UI_DEV_CREATE) < 0) {  
  36.     fprintf(stderr, "Error configuring the input device.\n");  
  37.     return 1;  
  38.   }    
  39.   while(1){  
  40.   
  41.   
  42.   };  
  43.   return 0;  
  44. }  
2.gcc testuinput.c -o testuinput

3.执行

./testuinput

结果:

getevent

[plain]  view plain copy
  1. add device 1: /dev/input/event10  
  2.   name:     "Hillcrest Labs Virtual Pointer"  

你可能感兴趣的:(移动操作系统之Android)