• Android 添加键值并上报从驱动到上层


    转载:https://blog.csdn.net/weixin_43854010/article/details/94390803

    Android 添加键值并上报从驱动到上层

    平台 :RK3288

    OS:Android7.1

    kernel部分添加键值:

    1.在dts中(kernel/arch/arm/boot/dts/rk3288-android.dtsi)添加键值属性,可以仿照power按键配置

    因我们使用的键值操作是通过gpio触发的,则配置成gpio-key。
    linux,code 键码可以查看内核自定义键码来选择。定义在kernel/include/uapi/linux/input-event-codes.h下。

    因键值较多,就只列一部分出来,在定义键码的时候,注意不要与现正在使用的键码重复。如不确认哪些键码是已经使用的,可以在该文件中添加自定义键码。
    在dts中添加键值属性后,需要在驱动(我的是在/kernel/drivers/input/keyboard/rk_reys.c)里,做dts解析:

    如该按键需要以中断的方式触发,则可以为这个按键申请中断:

    键值上报:
    1.注册input事件:
    通过input_register_device()函数来向内核注册input事件。
    2.input事件上报:
    input事件上报是通过input_event()或input_report_key()函数上报。

    input_event()函数简介:
    函数原型:

    参数介绍:
    struct input_dev *dev:需要上报的事件
    unsigned int type:上报的事件类型(在前面的input-event-codes.h文件中有定义)
    unsigned int code:上报的键码
    int value :上报的键值

    使用实例:

    注意:input_event()上报按键事件必须先上报1(意为按下),再上报0(意为弹起),不能单独上报1,或者上报0。

    kernel部分添加完成后,可通过getevent命令来确认事件有无上报成功。

    内核部分确认调试成功后,需要将键值上报至上层:
    1.修改按键布局映射文件,都是以.kl结尾的文件,可通过
    cat bus/input/devices 命令来查看我们系统目前正在使用的布局文件是哪个。
    我使用的是/device/rockchip/common/rk29-keypad.kl布局文件
     

     

    在这后面添加key 117 F1 则表示内核上报的117键值映射到系统的键值为F1
    系统的键值定义在frameworks/base/core/java/android/view/KeyEvent.java下。

    添加完成后可以在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java里添加打印信息,查看键值是否上报成功。

     上层APK可通过调用frameworks/base/core/java/android/view/KeyEvent.java中的接口去拦截键值

  • 相关阅读:
    NOIP2015 D1 解题报告
    2017.10.2 国庆清北 D2T2 树上抢男主
    2017.10.6 国庆清北 D6T3 字符串
    2017.10.1 国庆清北 D1T2 两个逗比捉迷藏
    电压驱动和电流驱动
    电子管
    点亮板载LED
    ESP8266——一般控制方法
    ESP8266——CPU频率更改和深度睡眠模式
    ESP8266——ADC
  • 原文地址:https://www.cnblogs.com/cyqx/p/12699220.html
Copyright © 2020-2023  润新知