Input输入设备调试相关

mice、mouse和event设备:

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

Input设备调试

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

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

使用hexdump直接查看

命令:

1
cat /dev/input/eventX | hexdump

输出类似于:

1
2
3
4
5
//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数据结构:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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,内核版本不一样位置可能不一样。
    例如事件类型定义为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    /*
    * 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)
Donate comment here