<結構體>html
struct input_dev {
const char *name;
const char *phys;
const char *uniq;
struct input_id id;node
//位表
unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; //表示可以產生哪一種類型的數據:EV_KEY,EV_ABS
unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; //表示可以產生哪些按鍵數據
unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; //表示可以產生哪些相對座標數據
unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; //表示可以產生哪些絕對座標數據
unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
unsigned long swbit[BITS_TO_LONGS(SW_CNT)];編程
struct device dev; //父類編碼
struct list_head h_list;
struct list_head node; //鏈表的節點
}; spa
struct input_event { //上報給用戶的輸入設備的數據包的類型
struct timeval time; //時間戳
__u16 type; //讀到的數據類型:EV_KEY,EV_ABS,EV_REL
__u16 code; //編碼值
__s32 value; //狀態
};code
<筆記>htm
1.input handler 用戶交互,不知數據,只知上傳對象
2.input_core 維護了兩個鏈表,爲上下層提供接口,他不是總線!!blog
3.input device 硬件交互,知道數據,不知上傳接口
4.編程:
1,分配一個 input device對象
2,初始化input device對象
3,註冊input device對象
4,硬件初始化,獲取到硬件的數據,上報給input handler
5.代碼:
key:http://www.javashuo.com/article/p-gtejnwho-cn.html
ts :http://www.javashuo.com/article/p-ehpnoibg-cw.html
6.input_core層也實現了一個fops,但只實現了open,就回到了input_handler層,因此他第一個打開
7.一個設備對應一個connect方法,對應一個設備節點,對應一個event對象,對應一個input_handle,對應一個event_client緩衝隊列,因此數據上報不會混亂
8.應用程序會根據設備號找到對應的緩衝隊列