Android触摸屏输入系统

1.触摸屏硬件原理

1.1电阻触摸屏

中断产生。触摸屏芯片根据触摸按下时电阻分压值发生变化而产生中断,该中断输入给CPU。产生的条件很简单,主要有VDD,GND信号即可。因此,我们在调试时,可以在没有驱动的情况下去测量中断脚,是否在有触摸时发生变化,以前验证模块的好坏。

1.2电容触摸屏

中断产生和电阻屏类似,只不过电容屏是由于人体接触时形成耦合电容,从而电流发生变化。

电容屏的接口一般都会有一个nRST信号,便于驱动里对模块做复位操作。

2.Linux驱动

这里以i2c接口的电阻屏为例,并采用中断加轮询获取坐标值。

2.1注册i2c设备

注册i2c_board_info结构体。在machine_xxx_board_init(位于arch/arm/mach-xxx路径下)里面,包括type(driver name),Slave address,irq(中断引脚)和platform_data等。

注册i2c设备。在驱动文件先填充i2c_driver结构体,包括driver.name,id_table,probe。然后再调用i2c_add_driver即可以注册一个i2c设备。

2.2注册中断

接下来,我们要在probe函数里面做一些其他的初始化工作。

初始化一个delayed work。调用INIT_DELAYED_WORK。

探测设备。可以使用i2c_smbus_read_byte_data读取设备的ID寄存器,当然如果没有ID寄存器,也可以随便读取一个寄存器,如果返回值小于0,那可以认为该设备不存在。

注册中断。过程为申请GPIO(即中断引脚)-->设置GPIO方向-->设置GPIO上拉(或者下拉)-->申请irq。这里的调用接口为gpio_request-->gpio_direction_input-->gpio_pull_updown-->gpio_to_irq-->request_irq。

2.3注册输入子系统

分配内存。调用input_allocate_device。

设置触摸屏参数。调用input_set_abs_params,设置ABS_X,ABS_Y等参数。

注册input。调用input_register_device。

2.4校准参数初始化

2.5添加sysfs接口

可以按需求添加一个sysfs接口,如打印调试信息开关。调用driver_create_file。

2.6添加一级休眠处理

填充early_suspend结构体,调用接口register_early_suspend。

最后进行芯片的初始化,如配置设备的寄存器等。

3.Android层处理

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwyssx.html