RK3328新增按键keyboard键值

平台:RK3328

新增按键使得Android上层可以收到。

1、在使用的dts文件中:

rockchip-key {
/*/使用该module--- rockchip,key,可以同时支持gpio和saradc两种*/
  compatible = "rockchip,key";
  io-channels = <&saradc 1>;//原理图上确认是saradc1
  status = "okay";
  xxx1 {
    /*gpioX Y 表示io口。如果GPIO2_C6 则是gpio2 22
     *A0~7,B0~7,以此类推。linux,code根据下面第二点按顺序填,如轮到250
     */
    gpios = <&gpioX Y GPIO_ACTIVE_LOW>;
    linux,code = <250>;
    label = "xxx xxx";
    gpio-key,wakeup;
  };
  xxx2 {
    /*linux,code根据下面第二点按顺序填如251,V是adc的值,我取巧了,通过查看打印得到该值再填进去的*/
    linux,code = <251>;
    label = "power sar";
    rockchip,adc_value = <V>;
  };
}

2、在kernel\include\dt-bindings\input (实际是哪个文件我还没确定,例如其中一个项目是rk-input.h),按顺序添加相应的键值,(之前写kernel/include/uapi/linux/input-event-codes.h,但是发现要根据dts文件的头文件决定)

1 #define KEY_RESERVED        0
2 .
3 .
4 .
5 
6 #define KEY_XXX        250    /* xxx  */
7 #define KEY_WWW        251    /* www  */

3、在framework/base/core/res/res/values/attrs.xml中,按顺序新增键,但是注意,这个值与kernel的值是不一样的,第4点会将这个键与kernel的值对应起来:

 1     <!-- This enum provides the same keycode values as can be found in
 2         {@link android.view.KeyEvent}. -->
 3     <attr name="keycode">
 4         <enum name="KEYCODE_UNKNOWN" value="0" />
 5         <enum name="KEYCODE_SOFT_LEFT" value="1" />
 6         <enum name="KEYCODE_SOFT_RIGHT" value="2" />
 7 ......
 8 ......
 9 ......
10         <enum name="KEYCODE_XXX" value="290" />
11         <enum name="KEYCODE_WWW" value="291" />

4、在framework/base/data/keyboards/rk29-keypad.kl(具体看使用的是哪个kl文件,比如Generic.kl),写入该键,XXX必须与第三点的KEYCODE_XXX中的XXX一致,值250必须与第二点的linux,code一致:

key 250   XXX
key 251   WWW

5、在native层,framework/native/include/android/keycodes.h在enum中新增codes,值与第三点一致:

/**
 * Key codes.
 */
enum {
    AKEYCODE_XXX = 290,
    AKEYCODE_WWW =291,

6、在framework/native/include/input/InputEventLabels.h中:

static const InputEventLabel KEYCODES[] = {
...
...
...
DEFINE_KEYCODE(XXX),
DEFINE_KEYCODE(WWW),

7、在frameworks\base\core\java\android\view/KeyEvent.java中,class KeyEvent加入(之前漏掉了)

    public static final int KEYCODE_XXX = 290;
    public static final int KEYCODE_WWW = 291;
  .........
      public static final int LAST_KEYCODE = KEYCODE_WWW;//新增,由于我们最后添加了KEYCODE_WWW,所以需要将LAST_KEYCODE也修改了.

 有时候编译会报错

 

 此时要在3568目录下,执行命令 make update-api 

8、在framework/base/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java中,onKeyDown函数:

1          switch (keyCode) {
2             case KeyEvent.KEYCODE_XXX: //新增,功能实现

 

posted @ 2021-04-23 15:25  xahsxd1056  阅读(721)  评论(2)    收藏  举报