Linux input子系統

Linux事件上報的唯一標準通道-input子系統,有設備需要上報事件無需重複造輪子,只需要註冊一個input設備,使用input子系統的標準流程上報即可。

先簡單介紹input子系統的架構,input子系統主要分為3層:設備驅動層,核心層,事件層。

Linux input子系統

設備驅動層主要實現具體input設備的註冊,事件上報,例如觸摸屏驅動,鼠標驅動,鍵盤驅動等。

核心層主要起到承上啟下的作用,下為設備驅動層提供設備註冊,事件上報的統一接口;上為事件驅動層的接口,並提供上層handler和下層device之間的匹配函數。

事件層通過input_register_handler向核心層註冊,當input_device或input_handler註冊的時候,如果設備驅動層的input_device和事件處理層的input_handler有相匹配的話,input子系統就新建一個input_handle連聯繫它們。其實質就是:將新建的input_handle分別掛靠在input_dev和input_handler的h_list鏈表上去。這樣一個input_dev就可以根據它的它的input_handle鏈表找到它的事件處理方法。

具體流程如下圖

Linux input子系統

註冊一個input設備只需要以下三步:

1,使用input_allocate_device分配一塊input_dev結構體類型大小的內存

2,使用 input_set_capability設置輸入設備可以上報哪些輸入事件

3,使用input_register_device向input核心層註冊設備

input事件的上報也很簡單,核心層已經提供了標準的接口

input_report_abs()、input_report_key()和input_sync()等是最常用的時間上報接口,最後都是調用input_event()函數。


分享到:


相關文章: