mice、mouse和event设备:

/dev/input/下面主要有mice、mouse和event这3类设备。
mice为所有鼠标节点,可以得到所有鼠标的信息,而且是全局唯一且固定的,即使没有插入鼠标设备,它也是存在的

Input设备调试

  • 查看所有的input设备及相关信息,包括Input HandlersName等:
    cat /proc/bus/input/devices

  • input event事件分析工具:
    evtestgetevent(android中提取)

使用hexdump直接查看

命令:

cat /dev/input/eventX | hexdump

输出类似于:

//hexdump序列号      秒          微妙      type事件    Code     Value
0000000          692c 5e67   20ae 000a      0002      0000   0003 0000
0000010          692c 5e67   20ae 000a      0000      0000   0000 0000
0000020          692c 5e67   3fed 000a      0002      0000   0004 0000
0000030          692c 5e67   3fed 000a      0000      0000   0000 0000

扩展

  1. input_event数据结构:
    struct input_event {
    #if (__BITS_PER_LONG != 32 || !defined(__USE_TIME_BITS64)) && !defined(__KERNEL)
        struct timeval time;  //时间
    #define input_event_sec time.tv_sec
    #define input_event_usec time.tv_usec
    #else
        __kernel_ulong_t __sec;
        __kernel_ulong_t __usec;
    #define input_event_sec  __sec
    #define input_event_usec __usec
    #endif
        __u16 type;  // 事件类型, 比如键盘事件
        __u16 code;  // 对应事件里的变量,比如按键X
        __s32 value; // 对应变量的值, 比如松开则是1,反之为0
    };
  2. 触摸屏,键盘,鼠标等具体的type、code、value可参考内核源码:include/linux/input.h或者include/linux/input-event-codes.h,内核版本不一样位置可能不一样。
    例如事件类型定义为:
    /*
    * Event types
    */
    
    #define EV_SYN			0x00
    #define EV_KEY			0x01
    #define EV_REL			0x02
    #define EV_ABS			0x03
    #define EV_MSC			0x04
    #define EV_SW			0x05
    #define EV_LED			0x11
    #define EV_SND			0x12
    #define EV_REP			0x14
    #define EV_FF			0x15
    #define EV_PWR			0x16
    #define EV_FF_STATUS		0x17
    #define EV_MAX			0x1f
    #define EV_CNT			(EV_MAX+1)