閑聊linux中的input裝置(2)初次相識便好上

來源:互聯網
上載者:User

究竟何謂input裝置,相信武漢跳蚤市場上賣寵物小狗的大媽都能一口答出來,你能不知道嗎?對,就是我們傳說中的輸入裝置。說到輸入裝置,相信用過電腦的兄弟都不會陌生了,即按鍵、滑鼠、鍵盤、等一系列需要我們使用者“動手”產生資訊,然後丟給我們聰明絕頂的pc來處理的裝置。前面說了,linux核心input子系統中已經實現了input裝置的介面函數,這使得我們工作量大大的減輕了。我們以akm8973晶片(用於智能手機指南針的主功能晶片,實際上就一電子羅盤)為例,來簡單看一下寫一個input裝置我們需要做的工作。

首先,在驅動模組載入函數中申請一個input裝置,並告知input子系統它支援哪些事件,如下所示:

akm->input_dev = input_allocate_device();

set_bit(EV_ABS, akm->input_dev->evbit);

input_set_abs_params(akm->input_dev, ABS_RX, 0, 23040, 0, 0);

input_set_abs_params(akm->input_dev, ABS_RY, -11520, 11520, 0, 0);

input_set_abs_params(akm->input_dev, ABS_RZ, -5760, 5760, 0, 0);

input_set_abs_params(akm->input_dev, ABS_THROTTLE, -30, 85, 0, 0);

input_set_abs_params(akm->input_dev, ABS_RUDDER, 0, 3, 0, 0);

input_set_abs_params(akm->input_dev, ABS_HAT0X, -2048, 2032, 0, 0);

input_set_abs_params(akm->input_dev, ABS_HAT0Y, -2048, 2032, 0, 0);

input_set_abs_params(akm->input_dev, ABS_BRAKE, -2048, 2032, 0, 0);

以上這些都是為讓input子系統支援的某些參數而設定的,EV_ABS表示支援絕對值座標,後面都是針對這些座標的一些參數存取範圍設定。至於為什麼這樣設定,我們繼續往下走,到後面我們就明白了。

接著,在驅動模組函數中註冊輸入裝置:

err = input_register_device(akm->input_dev);

然後,報告發生的一些事件以及對應的座標。

input_report_abs(data->input_dev, ABS_RX, rbuf[0]);

input_report_abs(data->input_dev, ABS_RY, rbuf[1]);

input_report_abs(data->input_dev, ABS_RZ, rbuf[2]);

對應的三個方向的座標值就被驅動記錄下來了。

深入裡面跟蹤一下:

static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat)

{

       dev->absmin[axis] = min;

       dev->absmax[axis] = max;

       dev->absfuzz[axis] = fuzz;

       dev->absflat[axis] = flat;

 

       dev->absbit[BIT_WORD(axis)] |= BIT_MASK(axis);

}

這個函數用來幹嘛的呢?這個留到以後講,不過你得多個心眼,後面用得到的。

 

 

添加一個input裝置,我們要做的工作就這些了。接下來我們就可以通過input核心子系統提供的介面函數來處理這些座標值,把把他們傳到使用者空間。

看完這些,讓我想起來了食堂門前那些招行的辦信用卡活動。辦一個信用卡送一個U盾。沒辦法,現在的社會什麼事情都要收費,連上廁所也得給點小費,不給錢不讓進,哪怕你當眾尿褲子。所以更別說我們如此有技術含量的保護大家網上購物安全的U盾了。去銀行辦一個U盾,至少得花個50大洋以上。所以很多像我這樣的哥們,毫不猶豫的辦了一個信用卡。反正就填幾張表,然後就可以免費獲得一個u盾,多好啊。網名為“唐伯虎點蚊香”的兄弟馬上發話了:“這不就和我們的input裝置那個一樣的嗎,我們這些比較懶的傢伙為了避免去完善那些複雜的裝置介面函數集,所以乾脆把它註冊成一個input裝置,所以你就得先申請它,註冊它等一系列預備工作,(就如我們為了u盾而填的那些表格)做好這些之後,我們就實行魯迅先生的拿來主義,直接使用input子系統的的介面函數”。

不過不是什麼裝置都可以註冊成inpunt裝置的。就好比一兄弟隨便拿了一張紙,畫一隻小雞,然後頭上加個光圈,就號稱是唐伯虎的名畫“神鳥鳳凰圖”,然後遞給招行的工作人員說“我表格填好了,給我來一個U盾”,人家會以為這哥們肯定剛從精神病院出來的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.