从原始字节获取EVDEV事件代码?

时间:2014-05-05 19:59:25

标签: java linux input byte evdev

在之前的question中,我询问了如何解释/ dev / input / mice中的事件字节。现在意识到/ dev / input / mice并没有提供我需要的信息,因为我正在使用stmpe-ts驱动程序使用触摸屏。它是在EVDEV节点/ dev / input / event2下设置的,并且使用我构建的个人程序,我可以从该文件中获取必要的字节。我唯一的问题是将其转换为事件代码。使用evtest,我得到了这个输出:

    Input driver version is 1.0.1
    Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
    Input device name: "stmpe-ts"
    Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
   Event code 330 (BTN_TOUCH)
Event type 3 (EV_ABS)
   Event code 0 (ABS_X)
     Value   2486
     Min        0
     Max     4095
   Event code 1 (ABS_Y)
     Value   1299
     Min        0
     Max     4095
   Event code 24 (ABS_PRESSURE)
     Value      0
     Min        0
     Max      255
Properties:
Testing ... (interrupt to exit)

我需要那些事件代码,来自直接从/ dev / input / event2读取的原始数据。具体如下:

236 21 100 83 63 223 11 0 3 0 0 0 124 8 0 0 236 21 100 83 72 223 11 0 3 0 1 0 237 7 
0 0 236 21 100 83 76 223 11 0 3 0 24 0 60 0 0 0 236 21 100 83 80 223 11 0 1 0 74      
1 1 0 0 0 236 21 100 83 84 223 11 0 0 0 0 0 0 0 0 0 236 21 100 83 251 247 11 0 3 0 0 0 
123 8 0 0 236 21 100 83 6 248 11 0 3 0 1 0 242 7 0 0 236 21 100 83 10 248 11 0 3 0 24 
0 142 0 0 0 236 21 100 83 16 248 11 0 0 0 0 0 0 0 0 0 236 21 100 83 137 16 12 0 3 0 0 
0 121 8 0 0 236 21 100 83 147 16 12 0 3 0 1 0 7 8 0 0 236 21 100 83 150 16 12 0 3 0 24 
0 163 0 0 0 236 21 100 83 156 16 12 0 0 0 0 0 0 0 0 0 

这甚至可以吗?如果是这样,有人可以帮助我吗? (另外,我已经确定每16个字节左右出现一个模式,我还确定236和237是字节,说明事件是触摸事件,236是没有点击的触摸,237是点击触摸)

1 个答案:

答案 0 :(得分:1)

evdev节点的输出是一系列struct input_event,在linux / input.h中定义。

  struct input_event {
          struct timeval time;
          __u16 type;
          __u16 code;
          __s32 value;
  };

所以你需要做的就是读入这些结构的数组,然后根据需要访问每个类型/代码。不知道如何用Java做到这一点,但它可能并不那么难。

evtest是免费软件btw,所以你可以查看代码,看看它的作用。 另外看看libevdev,这是麻省理工学院的许可证,所以你不会因为看到它而受到“污染”。 http://www.freedesktop.org/wiki/Software/libevdev/