Android的linux kernel本身有GPIO-keys驅(qū)動,代碼結(jié)構(gòu)和Android 4.x差異較大,在我的MSM8909上,測試表明增加GPIO按鍵需要如下操作: (轉(zhuǎn)載請注明原文網(wǎng)址 http://blog.csdn.net/tdstds/article/details/50920443) 1. 平臺相關(guān)配置文件msm8909-qrd-skue-項目名.dtsi文件中找到gpio_keys節(jié),增加藍(lán)字相關(guān)內(nèi)容 gpio_keys { compatible = 'gpio-keys'; input-name = 'gpio-keys'; pinctrl-names = 'tlmm_gpio_key_active','tlmm_gpio_key_suspend'; pinctrl-0 = <&gpio_key_active>; pinctrl-1 = <&gpio_key_suspend>; ... key_xxx { label = 'key_ptt'; gpios = <&msm_gpio 36 0x1>; // GPIO口一定要選帶中斷功能的引腳 linux,input-type = <1>; linux,code = <77>; // 這是驅(qū)動發(fā)出的鍵盤掃描碼 gpio-key,wakeup; debounce-interval = <15>; }; }; 2. 引腳相關(guān)配置文件msm8909-pinctrl-項目名.dtsi文件中找到tlmm_gpio_key節(jié),增加或更改紅字相關(guān)內(nèi)容 tlmm_gpio_key { qcom,pins = <&gp 90>, <&gp 91>, <&gp 36>; qcom,pin-func = <0>; qcom,num-grp-pins = <3>; label = 'tlmm_gpio_key'; gpio_key_active: gpio_key_active { drive-strength = <2>; bias-pull-up; }; gpio_key_suspend: gpio_key_suspend { drive-strength = <2>; bias-pull-up; }; }; 3. device\qcom\msm8909\gpio-keys.kl中增加鍵盤掃描碼對應(yīng)的鍵盤碼 鍵盤碼是Android系統(tǒng)收到底層驅(qū)動提交的掃描碼后,向App發(fā)送的鍵盤碼,比如本例 key 77 F7 #掃描碼對應(yīng)給App的鍵盤碼是F7,F(xiàn)7對應(yīng)的值在frameworks\base\core\java\android\view\KeyEvent.java有現(xiàn)成定義: public static final int KEYCODE_F7 =137; 另外,在root過的Android設(shè)備上直接更改system\usr\keylayout\gpio-keys.kl文件,可以為設(shè)備的按鍵直接更改功能。 總結(jié): Android 5.1.1中增加GPIO按鍵設(shè)計得還是很容易的,先選定帶中斷的GPIO口,設(shè)備樹增加相關(guān)的項目,鍵盤映射文件增加相關(guān)鍵盤映射項就OK了。 |
|
來自: 丿僅有的執(zhí)著 > 《充電》