Android的linux kernel本身有GPIO-keys驅(qū)動(dòng),代碼結(jié)構(gòu)和Android 4.x差異較大,在我的MSM8909上,測(cè)試表明增加GPIO按鍵需要如下操作:
(轉(zhuǎn)載請(qǐng)注明原文網(wǎng)址 http://blog.csdn.net/tdstds/article/details/50920443)
1. 平臺(tái)相關(guān)配置文件msm8909-qrd-skue-項(xiàng)目名.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>&msm_gpio>36 0x1>; // GPIO口一定要選帶中斷功能的引腳
linux,input-type = <1>;
linux,code = 77>; // 這是驅(qū)動(dòng)發(fā)出的鍵盤掃描碼
gpio-key,wakeup;
debounce-interval = <15>;
};15>1> };
2. 引腳相關(guān)配置文件msm8909-pinctrl-項(xiàng)目名.dtsi文件中找到tlmm_gpio_key節(jié),增加或更改紅字相關(guān)內(nèi)容
tlmm_gpio_key {
qcom,pins = <&gp 90="">, <&gp 91="">
, <&gp 36="">&gp>;
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中增加鍵盤掃描碼對(duì)應(yīng)的鍵盤碼
鍵盤碼是Android系統(tǒng)收到底層驅(qū)動(dòng)提交的掃描碼后,向App發(fā)送的鍵盤碼,比如本例
key 77 F7 #掃描碼對(duì)應(yīng)給App的鍵盤碼是F7,F(xiàn)7對(duì)應(yīng)的值在frameworks\base\core\java\android\view\KeyEvent.java有現(xiàn)成定義: public static final int KEYCODE_F7 =
137;
另外,在root過(guò)的Android設(shè)備上直接更改system\usr\keylayout\gpio-keys.kl文件,可以為設(shè)備的按鍵直接更改功能。
總結(jié):
Android 5.1.1中增加GPIO按鍵設(shè)計(jì)得還是很容易的,先選定帶中斷的GPIO口,設(shè)備樹(shù)增加相關(guān)的項(xiàng)目,鍵盤映射文件增加相關(guān)鍵盤映射項(xiàng)就OK了。2>2>0>&gp>&gp>&gpio_key_suspend>&gpio_key_active>
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。