驅動_Input輸入子系統

 

 


 

 

 

 

 

 

 

<結構體>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.應用程序會根據設備號找到對應的緩衝隊列

相關文章
相關標籤/搜索