1、第一步是在 dts 中对应的IR节点增加按键键值,注意文件中要#include对应的 input.h 头文件。

--- a/arch/arm/boot/dts/rk3288-evb-android-rk808-hdmi.dts
+++ b/arch/arm/boot/dts/rk3288-evb-android-rk808-hdmi.dts
@@ -43,6 +43,7 @@/dts-v1/;#include "rk3288-evb.dtsi"#include "rk3288-android.dtsi"
+#include <dt-bindings/input/input.h>  //添加加载头文件/ {compatible = "rockchip,rk3288-evb-android-rk808-hdmi", "rockchip,rk3288";
@@ -435,3 +436,71 @@pinctrl-0 = <&pwm1_pin_pull_down>;};//add by czd for support IR-Remote on start
&pwm2 {status = "okay";compatible = "rockchip,remotectl-pwm";pinctrl-names = "default";pinctrl-0 = <&pwm2_pin>;remote_pwm_id = <2>;handle_cpu_id = <1>;interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;remote_support_psci = <1>;ir_key1{rockchip,usercode = <0xbd02>;rockchip,key_table =<0x2f   KEY_BACK>,<0x35   KEY_UP>,<0x2d   KEY_DOWN>,
+           <0x1c   KEY_PAD>,<0x66   KEY_LEFT>,

2、在内核头文件 input.h 中增加按键定义,注意不能跟原有的按键键值重复,input.h 路径要与 dts 文件中头文件的一致。

 --- a/kernel/include/dt-bindings/input/input.h+++ b/kernel/include/dt-bindings/input/input.h@@ -619,6 +619,8 @@#define BTN_TRIGGER_HAPPY39            0x2e6#define BTN_TRIGGER_HAPPY40            0x2e7+ #define KEY_PAD                        0x2e8

3、在键值映射文件增加键值与上层对应的关系,一般是一个*.kl文件,可以通过dumpsys input来确认当前遥控使用的是哪个kl文件。

 130|rk3288:/ $ dumpsys input2: ff680020.pwmClasses: 0x00000401Path: /dev/input/event0Descriptor: d2c52ff0f656fac4cd7b7a118d575e0109a9fe1cLocation: gpio-keys/remotectlControllerNumber: 0UniqueId: Identifier: bus=0x0019, vendor=0x0001, product=0x0001, version=0x0100KeyLayoutFile: /system/usr/keylayout/ff680020_pwm.klKeyCharacterMapFile: /system/usr/keychars/Generic.kcmConfigurationFile: HaveKeyboardLayoutOverlay: false
 --- a/device/rockchip/common/ff680020_pwm.kl+++ b/device/rockchip/common/ff680020_pwm.kl@@ -35,6 +35,8 @@key 119   MEDIA_PAUSEkey 207   MEDIA_PLAY+key 744   PAD#key 400   TV_MEDIA_MULT_BACKWARD#key 401   TV_MEDIA_MULT_FORWARD

说明:
key – 是关键字。这个是固定值,不需要改变。
744 – 该按键在linux驱动中对应的键值,具体对应的是那个可以查看input.h查看。
PAD – 744按键映射到Android中的按键,它对应是“KeycodeLabels.h”文件中的KEYCODES表格元素的“literal”值。

4、在 KeyEvent.java 中定义按键Android上层的键值,定义按键值后面有提示,新按键需要更新哪些地方。
文件路径:frameworks/base/core/java/android/view/KeyEvent.java

    public static final int KEYCODE_PAD = 278;private static final int LAST_KEYCODE = KEYCODE_PAD;//  NOTE: If you add a new keycode here you must also add it to://  isSystem()//  isWakeKey()//  frameworks/native/include/android/keycodes.h//  frameworks/native/include/input/InputEventLabels.h//  frameworks/base/core/res/res/values/attrs.xml//  emulator?//  LAST_KEYCODE

在当前文件中定义键值,修改最后面的键值、isSystem 和 isWakeKey 两个方法。

 diff --git a/frameworks/base/core/java/android/view/KeyEvent.java b/frameworks/base/core/java/android/view/KeyEvent.javaindex bcf9a46..45f6ffb 100755--- a/frameworks/base/core/java/android/view/KeyEvent.java+++ b/frameworks/base/core/java/android/view/KeyEvent.java@@ -773,7 +773,9 @@ public class KeyEvent extends InputEvent implements Parcelable {public static final int KEYCODE_TV_MEDIA_PAUSE = 274;//$_rbox_$_modify_$ end-    private static final int LAST_KEYCODE = KEYCODE_TV_MEDIA_PAUSE;+    public static final int KEYCODE_PAD = 278;++    private static final int LAST_KEYCODE = KEYCODE_PAD;// NOTE: If you add a new keycode here you must also add it to://  isSystem()@@ -1818,6 +1820,7 @@ public class KeyEvent extends InputEvent implements Parcelable {case KeyEvent.KEYCODE_BRIGHTNESS_DOWN:case KeyEvent.KEYCODE_BRIGHTNESS_UP:case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK:+        case KeyEvent.KEYCODE_PAD:return true;}@@ -1833,6 +1836,7 @@ public class KeyEvent extends InputEvent implements Parcelable {case KeyEvent.KEYCODE_WAKEUP:case KeyEvent.KEYCODE_PAIRING:case KeyEvent.KEYCODE_NOTIFICATION:+        case KeyEvent.KEYCODE_PAD:return true;}

5、在 keycodes.h 文件中定义键值

 diff --git a/frameworks/native/include/android/keycodes.h b/frameworks/native/include/android/keycodes.hindex ff998df..212fef6 100755--- a/frameworks/native/include/android/keycodes.h+++ b/frameworks/native/include/android/keycodes.h@@ -307,6 +307,7 @@ enum {AKEYCODE_TV_KEYMOUSE_UP = 262,AKEYCODE_TV_KEYMOUSE_DOWN = 263,AKEYCODE_TV_KEYMOUSE_MODE_SWITCH = 264,+AKEYCODE_PAD = 278,AKEYCODE_HELP            = 259// NOTE: If you add a new keycode here you must also add it to several other files.

6、在 InputEventLabels.h 中添加按键标签

 diff --git a/frameworks/native/include/input/InputEventLabels.h b/frameworks/native/include/input/InputEventLabels.hindex d7a06dd..4359e3f 100755--- a/frameworks/native/include/input/InputEventLabels.h+++ b/frameworks/native/include/input/InputEventLabels.h@@ -304,6 +304,7 @@ static const InputEventLabel KEYCODES[] = {DEFINE_KEYCODE(TV_KEYMOUSE_DOWN),DEFINE_KEYCODE(TV_KEYMOUSE_MODE_SWITCH),DEFINE_KEYCODE(HELP),+DEFINE_KEYCODE(PAD),{ NULL, 0 }};

7、在 attrs.xml 中增加按键

diff --git a/frameworks/base/core/res/res/values/attrs.xml b/frameworks/base/core/res/res/values/attrs.xmlindex 75157be..e591fce 100755--- a/frameworks/base/core/res/res/values/attrs.xml+++ b/frameworks/base/core/res/res/values/attrs.xml@@ -1791,6 +1791,7 @@<enum name="KEYCODE_TV_MEDIA_MULT_BACKWARD" value="272" /><enum name="KEYCODE_TV_MEDIA_PLAY" value="273" /><enum name="KEYCODE_TV_MEDIA_PAUSE" value="274" />+   <enum name="KEYCODE_PAD" value="278" /><!--$_rbox_$_modify_$_end--></attr>

经过如上的步骤就将"744"按键和Android系统中的KEYCODE_PAD就对应起来了,注意这里的"744“键值并不是真正意义上的744键值,他只是linux驱动向上层抛出的键值。

8、在Android的framework层的键值处理函数中,捕获按键,并进行相应处理。
在framework层的input系统中,加入对按键的捕获。
添加的文件是: frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
添加的具体方法:在PhoneWindowManager.java的interceptKeyBeforeQueueing()函数中,捕获该键值。

这样新增加一个按键定义的流程就OK了,编译需要先使用命令make update-api,不然会编译出错。

RK3288_Android7.1增加自定义的红外遥控按键流程记录相关推荐

  1. 红外遥控按键16进制编码

    红外遥控按键16进制编码,前边 都要加 0X

  2. Linphone android去电增加自定义SIP消息头的流程分析

    一.首先看一下如何在发起去电的sip请求中添加自定义的消息头 增加自定义头消息发方法,so已经提供了native方法, 发起呼叫的示例如下: LinphoneCallParams params = l ...

  3. 遥控窗帘c语言程序,使用AT89C2051的红外遥控窗帘

    本文介绍一款使用微电脑管理的.红外遥控器控制的多功能窗帘控制器.该窗帘控制器采用89C2051单片机的最小系统设计,控制一个220V的可逆.变速电动机控制窗帘的拉开和关闭.窗帘控制器可以使用红外遥控器 ...

  4. 遥控汽车的编程c语言,智能小车循迹、避障、红外遥控C语言代码.docx

    //智能小车避障.循迹.红外遥控C语言代码 // 实现功能有超声波避障, 红外遥控智能小车, 红外传感器实现小车自动循迹, 1602 显示小 车的工作状态,另有三个独立按键分别控制三种状态的转换 // ...

  5. 循迹智能小车c语言主程序,智能小车循迹、避障、红外遥控C语言代码

    <智能小车循迹.避障.红外遥控C语言代码>由会员分享,可在线阅读,更多相关<智能小车循迹.避障.红外遥控C语言代码(13页珍藏版)>请在人人文库网上搜索. 1.智能小车避障.循 ...

  6. (含代码)基于51单片机的红外遥控(独立按键)舵机开关灯控制

    硬件说明: 采用STC89C51作为主控芯片,结合SG90舵机模块,红外遥控(独立按键),等电路模块实现远程控制舵机. 应用实例: 在不改变外部电路的情况下,实现远程开灯,关灯. 远程控制机器开关状态 ...

  7. Android蓝牙增加自定义按键

    Android蓝牙增加自定义按键 方式1 方式2 公司设备需要增加蓝牙手柄,直接使用可以连接但按键事件没反应,一番研究发现得增加自定义的按键. 说明: Android版本:6.0 蓝牙-设备协议:AV ...

  8. AutoLeaders控制组——51单片机学习笔记(AD/DA、红外遥控)

    本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...

  9. arduino 的红外遥控解码

    测试发现   遥控器的角度不一样  或者有反射  导致解析的码也不一样 程序 /** IRrecvDemo-LED* =====================功能说明================ ...

  10. 51单片机——红外遥控 C语言入门编程

    目录 红外发射装置: NEC码: 红外接收设备: 1.红外遥控:数码管上显示红外解码遥控器键值 红外遥控方法一:外部中断+延时 2.红外遥控:红外遥控控制LCD1602画面上的值 红外遥控方法二:外部 ...

最新文章

  1. 最前沿:大规模深度强化学习的发展
  2. FPGA从Xilinx的7系列学起(3)
  3. Netflix如何使用机器学习来提升流媒体质量?
  4. 团队作业—预则立他山之石
  5. 操作系统——文件的逻辑结构
  6. python描述器descriptor_Python 黑魔法 --- 描述器(descriptor)
  7. TeXstudio中文编码踩坑实录
  8. 计算机网络TCP与UDP的区别
  9. xib ? Interface Builder 中的 File's Owner 和 First Responder 分别是什么
  10. DIV下的DIV居中
  11. paip.cache 缓存架构以及性能提升总结
  12. 图像分割——超像素(Superpixels)分割(Matlab)
  13. 宝塔服务器之堡塔应用管理器的使用【php消息队列】
  14. Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内
  15. python循环语句打印输出1-10_python_不用循环打印1-1000
  16. php文件 怎么写韩文,php插入韩文txt文件内的数据,SQL-Front显示乱码
  17. 音频算法工程师发展前景
  18. git clone报错:SSL certificate problem: unable to get local issuer certificate
  19. 李飞飞又有新动向,斯坦福 AI 实验室由 Christopher Manning 接棒
  20. jav获取本地图片上传到数据库中

热门文章

  1. CSS2 及CSS3 在ie浏览器下的支持情况
  2. 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
  3. 如何搭建自己的开发环境
  4. 【招聘】浙江大学杨杰课题组-博士后招聘-医学人工智能
  5. 【每日一读】EMNLP2020: 面向多跳问答的分层图网络
  6. 惊叹 | 膜拜一下清华大学特等奖学金的学霸大佬们的简历! -- 我们没有理由不努力!...
  7. 初学者 | 分词的那些事儿
  8. 村上隆首场中国直播,火山同传打造“影院级字幕”
  9. 7.1 API:GaussianMixture
  10. 解读MySQL性能调优“金字塔”