標籤:檔案 存在 only type iic 自身 errors 進一步 android系統
1、多點觸摸驅動理論
驅動程式僅上報多個觸點的位置就可以,是放大還是縮小由應用程式控制
對於多點觸摸驅動在linux系統中有個輸入子系統,其已經實現了open/read/write等介面
我們只需要實現硬體相關的升級,有資料時上報硬體相關資料給輸入子系統
input.c//輸入子系統核心檔案
.open找到input_handler得到對應的fops,在調用真正的open
在android系統中用到evdev.c其來提供input_handler
裝置相關:
(1)構造input_device
(2設定
(3)註冊
(4)有資料時,通過input_event上報寫入buffer中,並喚醒read,在evdev.c中的read會去讀buffer中的資料
單點觸摸:
上報什麼資料?
按下:BTN_TOUCH,1
滑動:for(){ABS_X,x;ABS_Y,y;ABS_PRESSURE,1;BTN_TOUCH,1}
鬆開:BTN_TOUCH,0;ABS_PRESSURE,0
多點觸摸:(參考文檔multi-touch-protocol.txt多點觸摸協議)
同一時刻,上報所有觸點的位置
for(){t1時刻:上報p1、p2位置;t2時刻:上報p3、p4位置.......}
上報的資料分為AB兩類:
A類簡單,只上報觸點位置,不關心觸點關係
B類複雜,上報觸點的位置和觸點的關係,資料由多點觸摸控制IC提供(比如通過計算得到兩個點是一個滑動產生的(距離短))
觸摸控制IC提供的資料包括:觸點位置,觸點關係
2、多點觸摸驅動架構
參考:
drivers\input\touchscreen\ft5x06_ts.c
第一次:
git clone https://github.com/weidongshan/DRV_0005_MultiTouchPanel.git
或
git clone https://git.coding.net/weidongshan/DRV_0005_MultiTouchPanel.git
更新:
git pull origin
取出指定版本:
git checkout v1 // Demo driver for multi touch panel, it is only a Framework
git checkout v2 // There are some errors in v1
視頻堪誤:
a. 要設定input_dev的name, android根據這個name找到設定檔
b. 完全鬆開觸控螢幕後要上報: input_mt_sync, input_sync
c. input_set_abs_params(ts_dev, ABS_MT_TRACKING_ID, 0, 最大ID值, 0, 0);
其中的最大ID值沒有限制,是裝置自身定義的值,最大值一般由觸控螢幕控制IC決定。
一般電容屏最多支援10點觸摸,但是ID值跟"N點觸摸"無關
控制IC通過中斷管腳通知CPU有觸控螢幕資料了,然後CPU通過IIC或者SPI讀取資料
i2c_driver {
.probe
.id_table
.detect
.address_list
}
註冊i2c_driver 的時候,使用adapter遍曆address_list,如果發現裝置存在,調用detect函數做進一步判斷,會在detect函數中設定info結構體的type值並且返回0,返回0之後,會建立一個新的I2C裝置(i2c_new_device(adapter,&info)),這個裝置會使用info->type與id_table裡面的name相同的化就調用probe函數,我們在probe函數中讀取控制IC發送的資料並上報
10.13 android輸入系統_多點觸摸驅動理論與架構