Android平臺 遙控器修改按鍵映射流程

最近換了新工作,接觸了一些framework。記錄一下學(xué)習(xí)筆記
Android 平臺遙控器需要物理按鍵,把1-9-0的鍵改成a,b,c,d,e,f,g,h,i,j功能。
思考 點(diǎn)擊了一個(gè)按鈕后究竟發(fā)生了什么!先附上網(wǎng)上的一張流程圖


20180927221611712.png

首先是Linux內(nèi)核層上報(bào)按鍵碼,我在這里引用簡書作者天空汁橙在《Android物理按鍵輸入事件(一)》中所寫來描述Linux內(nèi)核層的操作:
① linux內(nèi)核通過掃碼,將硬件上按鍵按下電壓變換為數(shù)字電壓并映射到數(shù)組下標(biāo);
② 通過數(shù)組關(guān)系轉(zhuǎn)化將按鍵映射到內(nèi)核中預(yù)定義的鍵值;
③ 最終linux內(nèi)核上報(bào)給上層的就是這個(gè)整型值。
其中,這些上報(bào)的值反映在內(nèi)核\linux-3.10\include\uapi\linux/input.h中。

input.h 部分遙控器按鈕
#define KEY_HOME        102
#define KEY_UP          103
#define KEY_PAGEUP      104
#define KEY_LEFT        105
#define KEY_RIGHT       106
#define KEY_END         107
#define KEY_DOWN        108
#define KEY_PAGEDOWN        109
#define KEY_INSERT      110
#define KEY_DELETE      111
#define KEY_MACRO       112
#define KEY_MUTE        113
#define KEY_VOLUMEDOWN      114

如上圖所示鍵掃描碼后會在按鍵布局轉(zhuǎn)換也就是
kl配置文件對應(yīng)*
把kl文件造找出來,因?yàn)槲疫@邊已經(jīng)是編譯好的固件 地址如下 僅供參考
workspace\Android7.1\android\device\softwinner\固件名\custom_diff\固件分辨率類型名\sunxi_ir_recv.kl
kl配置文件內(nèi)存如下(ps:1-9-0按鍵已經(jīng)改為a,b,c,d、、)

key 103 DPAD_UP
key 108 DPAD_DOWN
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 28  DPAD_CENTER
key 113 VOLUME_MUTE
key 114 VOLUME_DOWN
key 115 VOLUME_UP
key 102 HOME
key 139 MENU
key 158 BACK
key 141 LYCOO_SETUP
key 2   A
key 3   B
key 4   C
key 5   D
key 6   E
key 7   F
key 8   G
key 9   H
key 10  I
key 11  J

kl文件中,key后面的數(shù)字就是kernel上報(bào)的按鍵碼,后面的字符標(biāo)簽就是該按鍵碼對應(yīng)的android中的按鍵標(biāo)簽,我們可以看到上面“103”對應(yīng)的是物理按鍵中的“上”,“108”對應(yīng)物理按鍵中的“下”。當(dāng)用戶按下按鍵后,kernel會上報(bào)對應(yīng)按鍵的按鍵碼,例如我們按下音量+鍵,kernel就會上報(bào)按鍵碼115,然后上層根據(jù)正確的kl文件中的對應(yīng)關(guān)系,將按鍵對應(yīng)到上層的VOLUME_UP標(biāo)簽上來。

其實(shí),這些標(biāo)簽也都對應(yīng)一個(gè)按鍵碼,與kernel上報(bào)的按鍵碼不同,按鍵標(biāo)簽所對應(yīng)的按鍵碼就是我們在上層代碼邏輯中使用的按鍵碼。我們可以在frameworks/native/include/input/InputEventLabels.h中看到:這里通過宏定義將標(biāo)簽字符與上層按鍵碼對應(yīng)起來,其中上層按鍵碼又是通過frameworks/native/include/android/Keycodes.h中枚舉的。我們在上層所使用的按鍵碼就是這個(gè)枚舉類型中所列出的整型值。

這樣就將物理按鍵、kernel、上層之間的映射關(guān)系確定了,點(diǎn)擊某個(gè)物理按鍵,上層就知道哪個(gè)按鍵被點(diǎn)擊了。
完了把1-9-0的鍵改成a,b,c,d,e,f,g,h,i,j功能。整編后將系統(tǒng)燒到手機(jī),重新開機(jī)就可以了。

感謝原作者 參考鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容