Android TouchPanel reference document

因工作需要,现重点了解了一下android TouchPanel的相关资料,现在此做个笔记,以备后用。

查看当前系统的输入设备详细信息可通过命令:

$cat /proc/bus/input/devices

cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="rk29-keypad"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/rk29-keypad/input/input0
U: Uniq=
H: Handlers=event0 keychord
B: PROP=0
B: EV=3
B: KEY=100000 0 40008000 1c0040 0 8000000 0

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="gslX680"
P: Phys=
S: Sysfs=/devices/platform/rk30_i2c.2/i2c-2/2-0040/input/input1
U: Uniq=
H: Handlers=event1
B: PROP=2
B: EV=10000b
B: KEY=0
B: ABS=2658000 0

可以发现,触摸屏的信息为gslx680, 由Handlers=event1表示该设备位于:/dev/input/event1;

如果想查看所有input的数据,则可通过命令:

root@rkpx2:/ # getevent
getevent
add device 1: /dev/input/event0
  name:     "rk29-keypad"
add device 2: /dev/input/event1
  name:     "gslX680"
/dev/input/event1: 0003 0039 00000001
/dev/input/event1: 0003 0035 0000028e
/dev/input/event1: 0003 0036 000000cb
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0003 0035 0000028a
/dev/input/event1: 0000 0000 00000000

表明系统有两个event设备,分别对应着input设备keyboard及touchscreen。

如果想查看当前触摸时所接收的数据,则可通过命令:

root@rkpx2:/dev/input # getevent event1
getevent event1
0003 0039 00000001
0003 0035 000001b2
0003 0036 000000d3
0000 0000 00000000
0003 0035 000001ac

其中:getevent及sendevent这两个命令的源码在system/core/toolbox/下 getevent.c、sendevent.c

 

Android中的input设备驱动主要包括:游戏杆(joystick)、鼠标(mouse)和事件设备(Event)。

Input驱动程序的主设备号是13,3种驱动程序的设备号分配是:

 

  • 游戏杆:0~31
  • 鼠标:32~62
  • mice鼠标:63
  • 事件设备:64~95

 

每种Input设备占用5位,每种设备个数是32。Event设备在文件系统中的设备节点是:/dev/input/eventX。

 

1、Input输入子系统的构架图如下:

 

    Android TouchPanel reference document

 

        为更直观的看出input型输入子系统,体现出用户空间、内核空间、驱动程序的关联方式,请看下图:

    Android TouchPanel reference document

 

          Event设备在用户空间大多使用read、ioctl、poll等文件系统的接口进行操作,read用于读取输入信息,ioctl用于获得和设置信 息,poll调用可以进行用户空间的阻塞,当内核有按键等中断时,通过在中断中唤醒poll的内核实现,这样在用户空间的poll调用也可以返回。

你可能感兴趣的:(reference)