红外遥控器协议简介

目前有如下几类标准

1. RC5

2. NEC

3. SAMSWNG

4. ......

5. SIRC (Sony Infrared Remote Control)

目前RK平台只支持 NEC 协议.

NEC 协议如下所示

NEC 默认协议采用32bit 帧格式来发送按键指令, 格式如下表

Address

Complement of Address

Command

Complement of Command

LSB-MSB(0-7)

LSB-MSB(8-15)

LSB-MSB(16-23)

LSB-MSB(24-31)

NEC 逻辑1和0波形如下图

逻辑0: 562us 的高电平, 跟随 526us的低电平, 周期为1.125ms(小数约掉)

逻辑1: 562us 的高电平, 跟随 1.675us的低电平, 周期为2.25ms(小数约掉)

NEC 协议接收按键时运行过程如下

1. 持续9ms 的高电平, 然后4.5ms 的低电平(帧头)

2. 发送设备8bits 地址, 如: 10110001

3. 发送设备8bits 地址的逻辑反向值, 如: 01001110 (在RK平台, 把address和invert address两个字节作为usercode, 部分遥控器并未把invert address按照协议规范发送反码, 而是作为独立的一个byte)

4. 发送指令command 8bits, 如: 10001101

5. 发送指令command 8bits的逻辑反向值, 如: 01110010

6. 发送截至位, 562us的高电平

红外接收头的原理

红外接接收头由 红外接收二极管/三极管/硅光电池组成, 它们将接收到的红外发射器的信号转换为电信号输出, 在通过PWM接收模块转换为数字信号.

RK3288 红外遥控器配置方法

使能驱动

RK3288 针对红外遥控器的驱动在 kernel/drivers/input/remotectl/rockchip_pwm_remotectl.c

在config 文件中对应的名称为 CONFIG_ROCKCHIP_REMOTECTL_PWM, 需要设置为buildin Mode

1631 # CONFIG_HALL_DEVICE is not set

1632 CONFIG_ROCKCHIP_REMOTECTL=y

1633 CONFIG_ROCKCHIP_REMOTECTL_PWM=y

在dts 中增加按键配置

一般配置前去要确认的信息:

1. 红外接收头连接的PWM 控制器序号, R800-P1 连接在PWM0

2. 配置的遥控器的用户码, 我们当前用的遥控器是 0xff00

3. 配置的遥控器的按键码, 我们当前用的遥控器按键码如下图

dts 中的节点如下, 关键配置项描述如下表

字段名称

字段描述

remote_pwd_id

红外接收头连接的PWM控制器id, 这里是0

handle_cpu_id

处理中断的cpu编号, 这里设置为cpu1

ir_key1

特定遥控器的配置信息

对于特定遥控器的配置信息, key_table的一项 <0xe7 KEY_POWER> 描述如下

0xe7: 遥控器特定按键的按键码

KEY_POWER: 按键码映射的Linux 内核input 系统定义的输入按键值, 定义在./include/dt-bindings/input/input.h

802 /*

803 * Due to not have the software of PWM for remotectrl.

804 * We can _*HACK*_ do that as the following.

805 * TODO Settings

806 */

807 &pwm0 {

808 compatible = "rockchip,remotectl-pwm";

809 remote_pwm_id = <0>;

810

811 handle_cpu_id = <1>;

812 status = "okay";

813 ir_key1{

814 rockchip,usercode = <0xff00>;

815 rockchip,key_table =

816 <0xe7 KEY_POWER>,

817 <0xa4 KEY_MUTE>,

818 <0xa5 KEY_RED>,

819 <0xf2 KEY_GREEN>,

820 <0xf9 KEY_YELLOW>,

821 <0xfd KEY_BLUE>,

822 <0xad KEY_PAGEUP>,

823 <0xaf KEY_PAGEDOWN>,

824 <0xeb KEY_VOLUMEUP>,

825 <0xef KEY_VOLUMEDOWN>,

826

827 <0xfb KEY_MENU>,

828 <0xb8 KEY_LEFT>,

829 <0xb9 KEY_UP>,

830 <0xb0 KEY_SETUP>,

831 <0xea KEY_RIGHT>,

832 <0xe9 KEY_DOWN>,

833 <0xaa KEY_OK>,

834 <0xb1 KEY_HOME>,

835 <0xbf KEY_BACK>,

836 <0xf0 KEY_1>, // 1

837 <0xee KEY_2>, // 2

838 <0xed KEY_3>, // 3

839 <0xb3 KEY_4>, // 4

840 <0xa7 KEY_5>, // 5

841 <0xe4 KEY_6>, // 6

842 <0xe8 KEY_7>, // 7

843 <0xb2 KEY_8>, // 8

844 <0xf5 KEY_9>, // 9

845 <0xe2 KEY_0>, // 0

846 <0xe3 KEY_ENTER>,

847 <0xe1 KEY_DELETE>;

848 };

849 };

Android ir 映射配置文件

通过以上两步, 驱动层已经配置完毕, 但Android APP接收到的key code与驱动上报给 user space的 linux event key code 并不相同, 还需要增加Android input hal层的一个map 配置文件, 对于RK3288, 这个配置文件位于device/rockchip/common/ff680000_pwm.kl

详细配置如下

key 116 POWER

key 113 VOLUME_MUTE

key 0x18e PROG_RED

key 0x18f PROG_GREEN

key 0x190 PROG_YELLOW

key 0x191 PROG_BLUE

key 104 PAGE_UP

key 109 PAGE_DOWN

key 115 VOLUME_UP

key 114 VOLUME_DOWN

key 139 MENU

key 105 DPAD_LEFT

key 103 DPAD_UP

key 106 DPAD_RIGHT

key 108 DPAD_DOWN

key 0x160 DPAD_CENTER

key 102 HOME

key 158 BACK

key 141 SETTINGS

key 2 1

key 3 2

key 4 3

key 5 4

key 6 5

key 7 6

key 8 7

key 9 8

key 10 9

key 11 0

key 28 ENTER

key 111 DEL

以上的配置项描述

列编号

描述

1

描述此配置为按键, 均为: key

2

Linux 内核上报的key code, 如10

3

映射为Android的key code,如ENTER

调试技巧

获取遥控器按键码

通过如下指令开启驱动打印usercode 和 keycode

echo 1 > sys/module/rockchip_pwm_remotectl/parameters/code_print

打印日志如下, 从日志总看, usercode为0xff00, 按键码为aa

<6>[156027.207783] USERCODE=0xff00

<6>[156027.234413] RMC_GETDATA=aa

获取驱动上报的linux key code

dts 配置好后, 按遥控器特定按键, 通过getevent指令, 获取按键上报的linux key code, 日志如下

其中的0160 是上报的linux key code, 最后一个字段的1/0分别代表按键按下和松开

130|root@rk3288_box:/ # getevent

add device 1: /dev/input/event5

name: "Weida Hi-Tech CoolTouch® System"

add device 2: /dev/input/event1

name: "rk29-keypad"

add device 3: /dev/input/event0

name: "ff680000.pwm"

/dev/input/event0: 0001 0160 00000001

/dev/input/event0: 0000 0000 00000000

/dev/input/event0: 0001 0160 00000000

/dev/input/event0: 0000 0000 00000000

android红外遥控器代码剖析,Android 红外遥控器适配相关推荐

  1. android 人脸检测代码,在Android实现人脸识别的详细过程

    照相时,在预览画面上提示用户人脸的位置,并完成自动对焦等,是个错的应用; 下面是实现细节 我们知道在android的代码中已有人脸识别的底层算法代码,而且在framework层也封了调用的API函数 ...

  2. android怎么导出代码吗,Android studio代码怎么导出为HTML格式?

    Android studio的开发的过程中,而想把的代码文件进行发送给别人看,是不可能直接把拷贝给被人的话,直接拷贝给别人话,格式会发生变化的,那么直接查看代码是不直观的,那么就需要进行导出HTML的 ...

  3. android图片晃动动画,剖析Android动画(图片闪烁、左右摇摆、上下晃动等效果)

    通常我们需要一个item连续的播放某一段动画或者循环的执行某个动画,这里我们就可以用到一下技巧. 一.续播(不知道取什么名字好,就是先播放动画A, 接着播放动画B) 有两种方式: 第一种: 分别定义两 ...

  4. android studio同步代码块,Android Studio快捷键大全

    Ctrl+P 提示有效说明参数 Ait + Enter 提示 Ctrl+Ait+L 格式化 Ctrl+Y 删除本行 Alt + Shift + Up/Down 上下移动本行代码 Alt + Ctrl ...

  5. android php 项目代码混淆,Android Studio配置反混淆的实现

    Android Studio如何混淆 为什么要混淆 了解安卓程序编译的会知道 其实我们的apk并不是很安全,从apk从可以解包出,步骤: 将apk文件改成zip结尾 然后解压zip 然后就会发现里面有 ...

  6. android 事件分发 代码解析,Android事件分发之源码分析

    原文首发于微信公众号:躬行之,欢迎关注交流! 上篇文章中叙述了 Android 事件分发的大致流程,下面从 Activity.ViewGroup.View 三个方面介绍事件的相关方法,小节如下: Ac ...

  7. android 短信 代码错误,android – Firebase手机身份验证错误:短信代码已过期

    根据文档实施FireBase手机身份验证后,我遇到了一些问题. >某些号码无法通过身份验证:我使用Airtel作为我的服务提供商. 在日志中,我可以确认代码已经发送但我没有在手机上收到它: D/ ...

  8. android自动拨号 代码,在Android上,是否有一种方法可以强行自动自动拨号?_android_开发99编程知识库...

    我一直在研究一个 Android 应用 概念,在用户启动服务时,应用程序必须自动拨号. 我发现,当应用程序尝试自动拨号时,手机( 还是叫 Intent ) 不会自动拨号,而用户必须手动启动服务. 目前 ...

  9. android锁屏代码分析,Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android. ...

最新文章

  1. 无法远程分发安装软件原因
  2. OSPF中的frame-relay(3) 点到多点非广播
  3. UBOOT启动内核过程
  4. 物理学家发现粒子是如何自我组装的
  5. [转]C#多线程学习(四) 多线程的自动管理(线程池)
  6. 记一次JVM Metaspace溢出排查
  7. jQuery框架风云榜案例
  8. Java 8系列之重构和定制收集器
  9. Windows Phone 的后台代理不支持的 API
  10. OpenShift 之 Quarkus(4)用集成的Prometheus监控Quarkus应用
  11. 除法运算、商、余数与取模
  12. 使用loadrunner录制winsock协议的程序(原创)
  13. SQL报错:this is incompatible with sql_mode=only_full_group_by
  14. 示例项目:简单的六足步行者
  15. 【CSS】:国际色彩标准名称与色值
  16. php 499,nginx499错误
  17. thinkphp5配置完成后,遇到禁止访问!
  18. [MOOC]物联网技术笔记-2.物联网的概念和特征
  19. 计算机基础题选择题,计算机基础知识题库选择题.doc
  20. Token一般存放在哪里

热门文章

  1. 微信小程序云开发 初学者入门教程二
  2. 一度智信:目前拼多多的无货源模式怎么样?
  3. QQ小程序图片内容安全检测
  4. iOS客户端节日换肤的思考与实现
  5. java模拟登陆系统_Java模拟登录系统抓取内容【转载】
  6. 学1个月爬虫就月赚6000?别被骗了,老师傅告诉你爬虫的真实情况.。
  7. html5读取运动传感器,详解五种类型的运动传感器
  8. 实现超低延迟(毫秒级)的VR直播
  9. (三)完成页面布局——vue-cli3实例:电商分类网页
  10. 机器学习超全的学习资料,适合新手入门