最近換了新工作恨闪,接觸了一些framework徘公。記錄一下學(xué)習(xí)筆記
Android 平臺(tái)遙控器需要物理按鍵竣贪,把1-9-0的鍵改成a,b,c,d,e,f,g,h,i,j功能帚湘。
思考 點(diǎn)擊了一個(gè)按鈕后究竟發(fā)生了什么玫荣!先附上網(wǎng)上的一張流程圖
首先是Linux內(nèi)核層上報(bào)按鍵碼,我在這里引用簡(jiǎn)書(shū)作者天空汁橙在《Android物理按鍵輸入事件(一)》中所寫(xiě)來(lái)描述Linux內(nèi)核層的操作:
① linux內(nèi)核通過(guò)掃碼大诸,將硬件上按鍵按下電壓變換為數(shù)字電壓并映射到數(shù)組下標(biāo)捅厂;
② 通過(guò)數(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
如上圖所示鍵掃描碼后會(huì)在按鍵布局轉(zhuǎn)換也就是
kl配置文件對(duì)應(yīng)*
把kl文件造找出來(lái),因?yàn)槲疫@邊已經(jīng)是編譯好的固件 地址如下 僅供參考
workspace\Android7.1\android\device\softwinner\固件名\custom_diff\固件分辨率類(lèi)型名\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)簽就是該按鍵碼對(duì)應(yīng)的android中的按鍵標(biāo)簽,我們可以看到上面“103”對(duì)應(yīng)的是物理按鍵中的“上”注簿,“108”對(duì)應(yīng)物理按鍵中的“下”契吉。當(dāng)用戶按下按鍵后,kernel會(huì)上報(bào)對(duì)應(yīng)按鍵的按鍵碼诡渴,例如我們按下音量+鍵捐晶,kernel就會(huì)上報(bào)按鍵碼115,然后上層根據(jù)正確的kl文件中的對(duì)應(yīng)關(guān)系妄辩,將按鍵對(duì)應(yīng)到上層的VOLUME_UP標(biāo)簽上來(lái)惑灵。
其實(shí),這些標(biāo)簽也都對(duì)應(yīng)一個(gè)按鍵碼眼耀,與kernel上報(bào)的按鍵碼不同英支,按鍵標(biāo)簽所對(duì)應(yīng)的按鍵碼就是我們?cè)谏蠈哟a邏輯中使用的按鍵碼。我們可以在frameworks/native/include/input/InputEventLabels.h中看到:這里通過(guò)宏定義將標(biāo)簽字符與上層按鍵碼對(duì)應(yīng)起來(lái)哮伟,其中上層按鍵碼又是通過(guò)frameworks/native/include/android/Keycodes.h中枚舉的干花。我們?cè)谏蠈铀褂玫陌存I碼就是這個(gè)枚舉類(lèi)型中所列出的整型值。
這樣就將物理按鍵楞黄、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ī)碎税,重新開(kāi)機(jī)就可以了尤慰。
感謝原作者 參考鏈接