Android Input系統之觸摸屏

最近開始在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()函數設置方式不一樣:

  1. #ifdef CONFIG_MULTITOUCH

  2.     set_bit(ABS_MT_TOUCH_MAJOR, input_dev->absbit);

  3.     set_bit(ABS_MT_POSITION_X, input_dev->absbit);

  4.     set_bit(ABS_MT_POSITION_Y, input_dev->absbit);

  5.     set_bit(ABS_MT_WIDTH_MAJOR, input_dev->absbit);


  6.     input_set_abs_params(input_devABS_MT_POSITION_X, 0, SCREEN_MAX_X, 0, 0);

  7.     input_set_abs_params(input_devABS_MT_POSITION_Y, 0, SCREEN_MAX_Y, 0, 0);

  8.     input_set_abs_params(input_devABS_MT_TOUCH_MAJOR, 0, PRESS_MAX, 0, 0);  //至關於單點屏的ABS_PRESSURE

  9.     input_set_abs_params(input_devABS_MT_WIDTH_MAJOR, 0, 200, 0, 0);

  10. #else

  11.     set_bit(ABS_X, input_dev->absbit);

  12.     set_bit(ABS_Y, input_dev->absbit);

  13.     set_bit(ABS_PRESSURE, input_dev->absbit);

  14.     set_bit(BTN_TOUCH, input_dev->keybit);


  15.     input_set_abs_params(input_dev, ABS_X, 0, SCREEN_MAX_X, 0, 0);

  16.     input_set_abs_params(input_dev, ABS_Y, 0, SCREEN_MAX_Y, 0, 0);

  17.     input_set_abs_params(input_devABS_PRESSURE, 0, PRESS_MAX, 0 , 0);

  18. #endif

相關文章
相關標籤/搜索