linux 系統(tǒng)編程 input子系統(tǒng)
input子系統(tǒng)就是針對于各種輸入的一種框架.
框架可以認為是,一種實現(xiàn)方法,linux中有很多框架,很多子系統(tǒng).
比如之前沒有框架的時候,大家各寫各的,隨意定義函數(shù).
后來有個人寫的很好,得到認可,他寫的就是模板,大家都模仿他,之后他寫的代碼就是框架了.
輸入設(shè)備: 鼠標,鍵盤,觸摸屏 ...
輸入設(shè)備通用的特點就是,會向linux輸入數(shù)據(jù).
input子系統(tǒng)就是為了統(tǒng)一所有的交互設(shè)備而產(chǎn)生的.
它規(guī)定了輸入設(shè)備接入linux,linux識別后會在哪個文件中產(chǎn)生節(jié)點.
它規(guī)定了操作輸入設(shè)備的步驟.
它規(guī)定了輸入的數(shù)據(jù)會填充到哪個結(jié)構(gòu)體.

第一步: linux識別設(shè)備
操作目標之前,要知道設(shè)備在哪里.
基于input子系統(tǒng)注冊成功的輸入設(shè)備,都會在 /dev/input 目錄下生成相應(yīng)的設(shè)備節(jié)點(設(shè)備文件).設(shè)備節(jié)點名稱通常為eventX(X為0.1.2.3...).通過讀取這些設(shè)備節(jié)點,可以獲取輸入設(shè)備上報的數(shù)據(jù).

第二步: 打開設(shè)備
打開/dev/input/event0 設(shè)備文件;
獲取fd;


第三步: 根據(jù)fd讀設(shè)備
應(yīng)用程序發(fā)起讀操作(譬如調(diào)用 read),刷新結(jié)構(gòu)體;
如果沒有數(shù)據(jù)可讀則會進入休眠(阻塞 I/O 情況下);?
當有數(shù)據(jù)可讀時,應(yīng)用程序會被喚醒,讀操作獲取到數(shù)據(jù)返回;


第四步: 獲取設(shè)備輸入數(shù)據(jù)
應(yīng)用程序從結(jié)構(gòu)體中得到輸入的數(shù)據(jù)。


如何獲取數(shù)據(jù):
每次read,都會刷新一下結(jié)構(gòu)體.
struct input_event.
該結(jié)構(gòu)體在<linux/input.h>中.

測試一個usb鍵盤程序.
1,首先是讓系統(tǒng)識別到usb鍵盤
把鍵盤按到linux板子上.
板子終端就會打印出信息.(表示板子已經(jīng)識別到usb鍵盤了)

可以查看ubs鍵盤對應(yīng)的設(shè)備節(jié)點,
使用命令: cat /proc/bus/input/devices


現(xiàn)象:
運行程序 ./testApp /dev/input/event3

鍵盤的上下左右,分別是:103, 108 ,105, 106