最近開始在TI平臺調試觸摸屏,以前研究過Android的Event輸入設備驅動,對鍵盤比較瞭解。Input驅動程序包含遊戲杆、鼠標和事件設備3中驅動,而鍵盤和觸摸屏都輸入事件設備。php
Input驅動程序的主設備號是13,3種驅動程序的設備號分配是:html
遊戲杆:0~31架構
鼠標:32~62函數
mice鼠標:63ui
事件設備:64~95url
每種Input設備佔用5位,每種設備個數是32。Event設備在文件系統中的設備節點是:/dev/input/eventX。spa
Android針對輸入子系統設備有一套統一的架構,基本層次結構:.net
其詳細結構:unix
觸摸屏驅動分析:調試
Host端經過IIC總線,從芯片讀出須要的數據,通常爲X,Y的絕對座標,還有數據的標誌位。採用的觸摸屏最多支持五點觸摸,所以驅動代碼相對單點觸摸相對複雜些。
在probe函數的設備初始化階段的input_set_abs_params()函數設置方式不一樣:
#ifdef CONFIG_MULTITOUCH
set_bit(ABS_MT_TOUCH_MAJOR, input_dev->absbit);
set_bit(ABS_MT_POSITION_X, input_dev->absbit);
set_bit(ABS_MT_POSITION_Y, input_dev->absbit);
set_bit(ABS_MT_WIDTH_MAJOR, input_dev->absbit);
input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, SCREEN_MAX_X, 0, 0);
input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, SCREEN_MAX_Y, 0, 0);
input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, PRESS_MAX, 0, 0); //至關於單點屏的ABS_PRESSURE
input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, 200, 0, 0);
#else
set_bit(ABS_X, input_dev->absbit);
set_bit(ABS_Y, input_dev->absbit);
set_bit(ABS_PRESSURE, input_dev->absbit);
set_bit(BTN_TOUCH, input_dev->keybit);
input_set_abs_params(input_dev, ABS_X, 0, SCREEN_MAX_X, 0, 0);
input_set_abs_params(input_dev, ABS_Y, 0, SCREEN_MAX_Y, 0, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, PRESS_MAX, 0 , 0);
#endif