ANDROID中按鍵的添加配置(linux按鍵到android處理)

出處: http://blog.sina.com.cn/s/blog_4b4b54da0102vocq.html

Linux kernel 中 input 子系統會負責從硬件獲取按鍵值根據按鍵的用戶碼來分類處理(當時 IR 的時候), linuxkernel 已經定義好了一些按鍵枚舉, input 中需要將這些枚舉和按鍵的鍵值對應。

Kernel/include/linux/input.h  可以看到按鍵的枚舉定義

hexdump/dev/input/event0  可以看到按鍵數據

 

Android  與 Linux 分隔線

Android 也定義了一套碼,叫作鍵盤碼,通過一個/system/usr/keylayout/ 來將兩套碼對應起來

例如: rkxx-remotectl.kl

定義了 linux  鍵值和 android 鍵碼的對應關係,如下:

key 28 ENTER

key 116 POWER WAKE

key 158 BACK

key 139 MENU

key 217 SEARCH

key 232 DPAD_CENTER

key 108 DPAD_DOWN

key 103 DPAD_UP

key 102 HOME

key 105 DPAD_LEFT

key 106 DPAD_RIGHT

key 115 VOLUME_UP

key 114 VOLUME_DOWN

key 143 NOTIFICATION WAKE

key 113 VOLUME_MUTE

 

數值就是 linux 上報的按鍵值,後面的按鍵名稱是 android 定義的。

在 framework/native/include/input/KeycodeLabels.h 中可以查到

KeycodeLabels.h 是 android 的 keycode 和 keyname 的對應表

在 keyevents.java 中有每個按鍵常量的定義,按鍵常量的值和 KeycodeLabels.h 中的keycode 是對應的。

例如: KEYCODE_POWER 值是  26 ,在 KeycodeLabels.h 中 26 對應的 keyname 是”POWER”, 在 rkxx-remotectl.kl 中 POWER 對應的是 linux 的 keyvalue 116 ,在Kernel/include/linux/input.h 中 116 對應的是 KEY_POWER 這個枚舉。

 

Keyevent.java KeycodeLabels.h rkxx-remotectl.kl Kernel/include/linux/input.h

KEYCODE_POWER 26 POWER 116 =KEY_POWER

未經允許不得轉載:GoMCU » ANDROID中按鍵的添加配置(linux按鍵到android處理)