歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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層處理

Copyright © Linux教程網 All Rights Reserved