歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

按鍵從Linux到Android

現在的普通按鍵也集成到Linux Input子系統中了,只需要把按鍵對應的IO端口配置好,按鍵就可以工作了。所以一般提供的BSP(或者叫作解決方案)中,已經完善了按鍵驅動。關鍵是快速的了解按鍵的映射。所以這裡不作源碼級分析。源碼分析可以參考這裡:《基於S3C2440的Linux-3.6.6移植——按鍵驅動》 http://www.linuxidc.com/Linux/2013-10/91993p3.htm
  
Linux按鍵的掃描碼
  掃描碼是Linux Input系統中規定的碼值,好比PC鍵盤上每個鍵的鍵值。都是數字。
在設備上輸入一下命令後,按鍵可以探測到得到每個按鍵的掃描碼Code.
  root@Android:/ # busybox hexdump /dev/input/event0


  
Android 與 Linux分隔線
  Android也定義了一套碼,叫作鍵盤碼,通過一個/system/usr/keylayout/來將兩套碼對應起來。目前調試的是全志的A10的BSP包。這裡用的是sun4i-keyboard.kl。(如果沒有其它*.kl,則是默認的qwerty.kl)
  
  Linux上傳的Code是0x00d9對應10進制217,打開sun4i-keyboard.kl後可以看到映射關系:


  
  可以看出對應的是BRIGHTNESS_DOWN,Android中只認BRIGHTNESS_DOWN(這裡成為字串),Linux中的Code至此為止。  (在Android源碼中也能找到這個映射文件可以依名字搜索找到其位置)
  
Android源碼中添加該按鍵
  如果Android中frameworks/base/core/java/android/view/KeyEvent.java有要添加的功能,比如HOME,則只修改*.kl映射按鍵即可修改或者添加映射。
  
  如果KeyEvent.java中本沒有要添加按鍵的功能,就可以在KeyEvent.java的KeyEvent類最後依葫蘆畫瓢添加:
  
  如不知道功能的鍵盤碼是多少可以到這裡找到。
  
  然後根據KeyEvent類最後的添加鍵提示,每個文件都添加上:
    // NOTE: If you add a new keycode here you must also add it to:
    //  isSystem()
    //  frameworks/base/native/include/android/keycodes.h
    //  frameworks/base/include/ui/KeycodeLabels.h
    //  external/webkit/Source/WebKit/android/plugins/ANPKeyCodes.h
    //  frameworks/base/core/res/res/values/attrs.xml
    //  emulator?
    //  LAST_KEYCODE
    //  KEYCODE_SYMBOLIC_NAMES
    //
    //  Also Android currently does not reserve code ranges for vendor-
    //  specific key codes.  If you have new key codes to have, you
    //  MUST contribute a patch to the open source project to define
    //  those new codes.  This is intended to maintain a consistent
  //  set of key code definitions across all Android devices.
  添加後,Android應用程序就可以通過onKeyDown檢測到了檢測到這個按鍵了。至於這個按鍵具體功能的實現比如這裡的BRIGHTNESS_DOWN(亮度減)功能,要修改frameworks/base/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java。根據具體需求實現。
  
關於重啟(Reset)鍵

這個“按鍵”一般是通過直接連接CPU芯片上的復位實現重啟功能的。這個直接操作的是CPU,Android(或者Linux)是無法去檢測和控制這個“按鍵”的。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved