Android Input系统之触摸屏

最近开始在TI平台调试触摸屏,以前研究过Android的Event输入设备驱动,对键盘比较了解。Input驱动程序包含游戏杆、鼠标和事件设备3中驱动,而键盘和触摸屏都输入事件设备。php

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

  • 游戏杆:0~31架构

  • 鼠标:32~62函数

  • mice鼠标:63ui

  • 事件设备:64~95url

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

Android针对输入子系统设备有一套统一的架构,基本层次结构:.net

其详细结构:unix

触摸屏驱动分析:调试

Host端经过IIC总线,从芯片读出须要的数据,通常为X,Y的绝对坐标,还有数据的标志位。采用的触摸屏最多支持五点触摸,所以驱动代码相对单点触摸相对复杂些。

在probe函数的设备初始化阶段的input_set_abs_params()函数设置方式不一样:

  1. #ifdef CONFIG_MULTITOUCH

  2.     set_bit(ABS_MT_TOUCH_MAJOR, input_dev->absbit);

  3.     set_bit(ABS_MT_POSITION_X, input_dev->absbit);

  4.     set_bit(ABS_MT_POSITION_Y, input_dev->absbit);

  5.     set_bit(ABS_MT_WIDTH_MAJOR, input_dev->absbit);


  6.     input_set_abs_params(input_devABS_MT_POSITION_X, 0, SCREEN_MAX_X, 0, 0);

  7.     input_set_abs_params(input_devABS_MT_POSITION_Y, 0, SCREEN_MAX_Y, 0, 0);

  8.     input_set_abs_params(input_devABS_MT_TOUCH_MAJOR, 0, PRESS_MAX, 0, 0);  //至关于单点屏的ABS_PRESSURE

  9.     input_set_abs_params(input_devABS_MT_WIDTH_MAJOR, 0, 200, 0, 0);

  10. #else

  11.     set_bit(ABS_X, input_dev->absbit);

  12.     set_bit(ABS_Y, input_dev->absbit);

  13.     set_bit(ABS_PRESSURE, input_dev->absbit);

  14.     set_bit(BTN_TOUCH, input_dev->keybit);


  15.     input_set_abs_params(input_dev, ABS_X, 0, SCREEN_MAX_X, 0, 0);

  16.     input_set_abs_params(input_dev, ABS_Y, 0, SCREEN_MAX_Y, 0, 0);

  17.     input_set_abs_params(input_devABS_PRESSURE, 0, PRESS_MAX, 0 , 0);

  18. #endif

相关文章
相关标签/搜索