Chinaunix首页 | 论坛 | 博客
  • 博客访问: 507296
  • 博文数量: 197
  • 博客积分: 2071
  • 博客等级: 上尉
  • 技术积分: 1307
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-02 09:49
个人简介

prothes 专注嵌入式的ARM linux

文章分类

全部博文(197)

文章存档

2014年(3)

2013年(16)

2012年(108)

2011年(70)

分类:

2012-02-09 23:15:46

原文地址:Android Input系统之触摸屏 作者:Z-yalinux

最近开始在TI平台调试触摸屏,之前研究过Android的Event输入设备驱动,对键盘比较了解。Input驱动程序包含游戏杆、鼠标和事件设备3中驱动,而键盘和触摸屏都输入事件设备。
Input驱动程序的主设备号是13,3种驱动程序的设备号分配是:
  • 游戏杆:0~31
  • 鼠标:32~62
  • mice鼠标:63
  • 事件设备:64~95

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

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

其详细结构:

触摸屏驱动分析:

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_dev, ABS_MT_POSITION_X, 0, SCREEN_MAX_X, 0, 0);
  7.     input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, SCREEN_MAX_Y, 0, 0);
  8.     input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, PRESS_MAX, 0, 0)//相当于单点屏的ABS_PRESSURE
  9.     input_set_abs_params(input_dev, ABS_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_dev, ABS_PRESSURE, 0, PRESS_MAX, 0 , 0);
  18. #endif
阅读(455) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~