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層處理