首页 / 操作系统 / Linux / 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层处理