rk3568 android13 适配 红外遥控器

当前网上讲android 按键流程的文章,要么专注在android收到事件后的处理流程。
要么只讲解底层红外硬件解码原理,没有能将android层和linux层面联合讲解的透彻而简单易懂的。

对android的 Generic.kl和底层红外解码到内核驱动的转换对应关系部分含糊不清,使人看来一头雾水
对那些想要弄清楚整系统完整流程全貌的人来说,不禁要问这写的什么玩意。

本文目的:

通过适配一款红外遥控器,完全讲清楚 按键事件从硬件--》驱动-》Android的转换流程,

祭奠这苦逼的爆肝12个小时。

在Android系统中,按键事件的转换对齐主要有两次,

第1次,在驱动底层的 通过dts ,红外解码到 linux 按键的对应:

rk 平台获取解码红外按键后的值的方法是:

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

按遥控器向右按键:

读取到 RMC_GETDATA=3e ,3e 修改到上面的 dts中。

经过这个对齐,在红外控制驱动中,解码到红外按键值为3e 的时候,调用内标准接口

input_event、input_sync。

input_event(ddata->input, EV_KEY, ddata->keycode, 1);
input_sync(ddata->input);

向设备节

点/dev/input/event0 写入dts中对齐好的KEY_RIGHT事件,从底层驱动的角度,可以理解为是向上层上报事件。

第2次 是Android上层的input 应用程序服务 通过遍历监听/dev/input/ 下的文件,获取到驱动底层上报的按键事件后,通过二次对齐文件 Generic.kl ,

 find frameworks/ -name Generic.kl
frameworks/base/data/keyboards/Generic.kl

格式:key <SCAN_CODE> <ANDROID_KEYCODE> [FLAGS]

将linux 标准定义的事件

转换为按Android标准定义的按键事件:

然后分发给Android系统进行处理。

至于纯Android 层面的按键分发处理流程也比较绕,

但不是本文描述的目的了

2025年3月18日01:45:18

在此吐槽下某思的Android红外按键流程,还引入了一个用户态的ir_user 应用程序,码红外文章后,
再通过应用程序中转然后再次通过vinput 注入内核态,然后再上报给Android,真的非常低效而无用又过度设计

上效果视频:

AOSP 13 rk3568红外操作效果视频

<think>好的,我现在需要帮助用户解决在RK3566芯片上基于Android 14实现红外遥控器鼠标适配功能的问题。首先,我需要回顾已有的信息,看看之前的引用内容是否提供了有用的线索。 根据用户提供的引用,之前有在RK3288 Android11、RK3588 Android12和RK3568 Android11上适配红外遥控的案例。这些案例提到设备树配置、驱动文件路径(如kernel/drivers/input/remotectl/rockchip_pwm_remotectl.c)、键值映射以及输入设备的查看等步骤。这些步骤可能是通用的,但需要针对RK3566和Android 14进行调整。 首先,适配红外遥控通常涉及硬件配置、驱动支持、设备树修改、键值映射和系统配置。但这次用户的需求是红外遥控器作为鼠标,这可能涉及到将红外信号转换为鼠标事件,比如移动指针或点击。这需要不同于普通遥控器的处理,可能需要修改驱动或添加新的输入处理逻辑。 接下来,我需要考虑RK3566芯片的硬件是否支持PWM红外遥控,这在之前的RK3288和RK3568中都有使用。设备树配置是关键,需要确认PWM控制器的节点是否正确配置,并且红外接收器的GPIO引脚是否正确定义。同时,Android 14的内核版本可能不同,需要确保驱动兼容性,比如rockchip_pwm_remotectl.c是否适用于新内核,或者是否需要更新驱动代码。 然后,输入子系统的处理可能需要调整。普通的红外遥控通常生成按键事件,而作为鼠标需要生成相对位移事件(如REL_X, REL_Y)或绝对坐标,这取决于需求。可能需要修改驱动中的事件上报类型,从按键事件改为指针事件。同时,可能需要处理连续的红外信号来模拟鼠标移动,比如根据信号的时间或强度来计算移动距离。 另外,用户可能需要配置Android的输入设备策略,确保系统将红外设备识别为鼠标,并分配适当的权限。可能需要修改配置文件,如usr/idc/下的输入设备配置,设置输入设备的类型为鼠标,并调整触摸事件的处理。 测试和调试也是重要环节,通过getevent或dumpsys input查看输入事件,确认红外信号是否正确解析为鼠标事件,并根据需要调整键值映射或灵敏度。此外,系统日志(logcat、dmesg)可以帮助排查驱动加载或事件处理的问题。 考虑到用户可能需要具体的步骤,我需要将这些思路转化为具体的操作指南,参考之前的案例但针对RK3566和Android 14进行调整,并指出可能的不同之处,比如内核版本差异、设备树路径变化等。同时,需要提醒用户注意驱动兼容性和Android输入子系统的配置,确保事件正确传递和应用处理。 最后,生成相关问题,帮助用户深入理解可能遇到的挑战,如驱动兼容性、事件类型转换、坐标计算等,以及优化和应用场景的问题。</think>### RK3566 Android 14 红外遥控器鼠标适配指南 #### 1. 硬件与驱动支持验证 - **确认红外接收器硬件接口**:RK3566的红外遥控功能通常通过PWM控制器实现,需检查硬件原理图中红外接收器的GPIO引脚定义,例如PWM端口配置[^1]。 - **驱动文件定位**:Rockchip平台通用红外驱动路径为`kernel/drivers/input/remotectl/rockchip_pwm_remotectl.c`,需确认该驱动是否在RK3566的Android 14内核中被编译(检查`Kconfig`和`Makefile`配置)[^1][^3]。 #### 2. 设备树配置 ```dts // 在设备树文件(如rk3566.dtsi)中添加PWM红外节点 &pwm5 { status = "okay"; compatible = "rockchip,remotectl-pwm"; pinctrl-names = "default"; pinctrl-0 = <&pwm5_pin>; remote_pwm_id = <5>; handle_cpu_id = <1>; // 红外接收器GPIO引脚配置 ir_rx_gpio = <&gpio3 12 GPIO_ACTIVE_LOW>; }; ``` 注:需根据实际硬件修改PWM编号和GPIO引脚[^2]。 #### 3. 红外信号映射为鼠标事件 - **修改驱动逻辑**:在`rockchip_pwm_remotectl.c`中,将红外键值解析从按键事件(`EV_KEY`)改为鼠标事件(`EV_REL`或`EV_ABS`),例如: ```c // 示例:上报相对位移(模拟方向键控制鼠标移动) input_event(dev, EV_REL, REL_X, x_offset); input_event(dev, EV_REL, REL_Y, y_offset); input_sync(dev); ``` - **键值映射表调整**:根据遥控器协议(如NEC)定义位移量,例如: ```c static struct rkxx_remote_key_table remote_key_table[] = { {0x48, REL_X, -10}, // 左移 {0x49, REL_X, 10}, // 右移 {0x50, REL_Y, -10}, // 上移 {0x51, REL_Y, 10}, // 下移 {0x5a, BTN_LEFT, 1} // 左键点击 }; ``` #### 4. Android输入子系统配置 - **输入设备类型声明**:在`/vendor/usr/idc/`目录下创建红外设备配置文件(如`Vendor_1234_Product_5678.idc`),指定设备为鼠标: ```ini touch.deviceType = pointer touch.orientationAware = 0 ``` - **权限配置**:确保`ueventd.rc`中红外设备节点权限为`0666`,允许应用层访问。 #### 5. 调试与测试 - **查看输入事件**:通过`adb shell getevent -l`验证是否上报`REL_X/Y`事件。 - **日志分析**:使用`dmesg | grep remotectl`检查驱动加载状态,`logcat | grep InputReader`查看事件解析情况。 #### 6. 已知适配问题 - **Android 14输入策略变更**:若系统拦截自定义鼠标事件,需在`frameworks/base/services/core/java/com/android/server/input/InputManagerService.java`中添加白名单。 - **PWM时钟干扰**:若红外信号不稳定,需调整PWM时钟分频值(修改驱动中的`clk_set_rate`调用)[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值