android手机红外代码HAL,Android 红外遥控器适配

红外遥控器协议简介

目前有如下几类标准1. RC5

2. NEC

3. SAMSWNG

4. ......

5. SIRC (Sony Infrared Remote Control)

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

NEC 协议如下所示

D6FAD1ABECE54498B787F3E571903887NEC 默认协议采用32bit 帧格式来发送按键指令, 格式如下表AddressComplement of AddressCommandComplement of CommandLSB-MSB(0-7)LSB-MSB(8-15)LSB-MSB(16-23)LSB-MSB(24-31)NEC 逻辑1和0波形如下图

D321AFEA29E54610B19B2B8450FE1622逻辑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 Mode1631 # 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. 配置的遥控器的按键码, 我们当前用的遥控器按键码如下图

9E45F19B76E341DC8CBC731D87529B83dts 中的节点如下, 关键配置项描述如下表字段名称字段描述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.h802 /*

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

2Linux 内核上报的key code, 如10

3映射为Android的key code,如ENTER

调试技巧

获取遥控器按键码通过如下指令开启驱动打印usercode 和 keycodeecho 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 codedts 配置好后, 按遥控器特定按键, 通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值