驱动_Input输入子系统
?
?
?
?
?
?
?
?
?
<結構體>
struct input_dev {
const char *name;
const char *phys;
const char *uniq;
struct input_id id;
//位表
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; //鏈表的節點
};
?
struct input_event { //上報給用戶的輸入設備的數據包的類型
struct timeval time; //時間戳
__u16 type; //讀到的數據類型:EV_KEY,EV_ABS,EV_REL
__u16 code; //編碼值
__s32 value; //狀態
};
?
?
?<筆記>
?
1.input handler ? ?用戶交互,不知數據,只知上傳
2.input_core 維護了兩個鏈表,為上下層提供接口,他不是總線!!
3.input device ? ? ?硬件交互,知道數據,不知上傳
4.編程:
1,分配一個 input device對象
2,初始化input device對象
3,注冊input device對象
4,硬件初始化,獲取到硬件的數據,上報給input handler
?
5.代碼:
key:https://www.cnblogs.com/panda-w/p/10943249.html
? ts ?:https://www.cnblogs.com/panda-w/p/10949993.html
6.input_core層也實現了一個fops,但只實現了open,就回到了input_handler層,所以他第一個打開?
7.一個設備對應一個connect方法,對應一個設備節點,對應一個event對象,對應一個input_handle,對應一個event_client緩沖隊列,所以數據上報不會混亂
8.應用程序會根據設備號找到對應的緩沖隊列
?
?
?
轉載于:https://www.cnblogs.com/panda-w/p/10922744.html
總結
以上是生活随笔為你收集整理的驱动_Input输入子系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【AtCoder】AGC034
- 下一篇: SQL 除去数字中多于的0