Android 添加鍵值並上報從驅動到上層


轉載:https://blog.csdn.net/weixin_43854010/article/details/94390803

Android 添加鍵值並上報從驅動到上層

平台 :RK3288

OS:Android7.1

kernel部分添加鍵值:

1.在dts中(kernel/arch/arm/boot/dts/rk3288-android.dtsi)添加鍵值屬性,可以仿照power按鍵配置

 

因我們使用的鍵值操作是通過gpio觸發的,則配置成gpio-key。
linux,code 鍵碼可以查看內核自定義鍵碼來選擇。定義在kernel/include/uapi/linux/input-event-codes.h下。

 

 

 

因鍵值較多,就只列一部分出來,在定義鍵碼的時候,注意不要與現正在使用的鍵碼重復。如不確認哪些鍵碼是已經使用的,可以在該文件中添加自定義鍵碼。
在dts中添加鍵值屬性后,需要在驅動(我的是在/kernel/drivers/input/keyboard/rk_reys.c)里,做dts解析:

 

 

如該按鍵需要以中斷的方式觸發,則可以為這個按鍵申請中斷:

 

 

鍵值上報:
1.注冊input事件:
通過input_register_device()函數來向內核注冊input事件。
2.input事件上報:
input事件上報是通過input_event()或input_report_key()函數上報。

input_event()函數簡介:
函數原型:

 

 

參數介紹:
struct input_dev *dev:需要上報的事件
unsigned int type:上報的事件類型(在前面的input-event-codes.h文件中有定義)
unsigned int code:上報的鍵碼
int value :上報的鍵值

使用實例:

 

 

注意:input_event()上報按鍵事件必須先上報1(意為按下),再上報0(意為彈起),不能單獨上報1,或者上報0。

kernel部分添加完成后,可通過getevent命令來確認事件有無上報成功。

內核部分確認調試成功后,需要將鍵值上報至上層:
1.修改按鍵布局映射文件,都是以.kl結尾的文件,可通過
cat bus/input/devices 命令來查看我們系統目前正在使用的布局文件是哪個。
我使用的是/device/rockchip/common/rk29-keypad.kl布局文件
 

 

在這后面添加key 117 F1 則表示內核上報的117鍵值映射到系統的鍵值為F1
系統的鍵值定義在frameworks/base/core/java/android/view/KeyEvent.java下。

添加完成后可以在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java里添加打印信息,查看鍵值是否上報成功。

 

 上層APK可通過調用frameworks/base/core/java/android/view/KeyEvent.java中的接口去攔截鍵值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM