找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2569

积分

0

好友

355

主题
发表于 13 小时前 | 查看: 0| 回复: 0

续接前文内容...

修改 irkey.c

文件: irkey.c

路径: apps\common\key\

该文件需根据实际选用的遥控器编码进行修改。因此,首先需要了解遥控器的编码参数,然后将相关参数写入 irkey.c 文件中。

① 获取遥控器DataCode与按键的对应关系

常见的遥控器发送的信号中包含 UserCode(用户码)和 DataCode(按键码)。UserCode 用于区分不同遥控器以防止串扰,DataCode 则对应不同的功能按键。

三款常见红外遥控器外观

如何获取遥控器的 DataCode?方法有两种:向卖家索取,或自行检测。下图演示了使用 FNIRSI DSO-TC3 多功能示波器检测遥控器 DataCode 的过程。

使用示波器检测红外遥控编码

我们以“模式(Mode)、播放、上一曲、下一曲”这4个按键为例进行检测,得出 DataCode 值(16进制)与按键的对照表。在 SDK 相关程序中,只用到 DataCode 的前2位数字。

表 DataCode与按键对照表

# 按键 UserCode DataCode DataCode 前2位 Irkey table bt_key_ir_table 中的元素 Irkey table bt_key_ir_table 的索引[x]
1 模式 00FF 4689 46 KEY_CHANGE_MODE [3]
2 播放 00FF 44BB 44 KEY_MUSIC_PP [0]
3 上一曲 00FF 40BF 40 KEY_MUSIC_PREV [2]
4 下一曲 00FF 43BC 43 KEY_MUSIC_NEXT [1]

需要说明的是,当前 SDK 中没有提供处理 UserCode 的相关代码,因此不具备对遥控器进行身份鉴别(防止串扰)的功能。理论上,任何与 SDK 支持的红外编码协议兼容的遥控器,只要能正确解码出 DataCode,都可以使用。

② 初始化 IRTabFF00 数组

irkey.c 文件中找到 const u8 IRTabFF00[]。这个 IRTabFF00 数组里的元素是由“NKEY_ + DataCode前2位”组成的,是针对某款遥控器做的预设。

预设的IRTabFF00数组代码截图

现在,我们将图中原有的数组定义代码注释掉,然后重新编写这部分代码。新数组的元素需要被完全初始化——即数组元素从 NKEY_00 一直到 NKEY_5F。注意,“NKEY_”后面的数字是16进制,必须连续逐一递增,不能中断或跳跃。

为了方便后续修改,建议每个元素独占一行,如下所示(代码因篇幅未完整列出):

const u8 IRTabFF00[] = {
NKEY_00,
NKEY_01,
NKEY_02,
NKEY_03,
//......此处省略中间部分
NKEY_5E,
NKEY_5F,
};

③ 创建 IRTabFF00 与 DataCode 的映射关系表

为了清晰地进行映射关系替换,建议创建一个电子表格,包含以下列:“IRTabFF00、DataCode前2位、遥控器功能键、bt_key_ir_table中的元素、bt_key_irtable的索引[x]、IR+索引”。第一列“IRTabFF00”的内容从 NKEY_00 一直到 NKEY_5F

IRTabFF00映射关系表格(部分)

接下来,根据前面得到的“表 DataCode与按键对照表”进行填充。例如,“模式”按键的“DataCode前2位”是“46”。在表格中找到“NKEY_46”这一行,将“模式”对应的元素 KEY_CHANGE_MODE 和索引号 [3] 填入表格。由此,我们可以推导出“IR+索引”这一列对应的值为 IR_03

依此类推,我们得出 NKEY_40NKEY_43NKEY_44 分别对应 IR_02IR_01IR_00。这样就得到了“NKEY”与“IR”的最终对应关系。

根据对照表填充后的完整映射关系表格

最后,根据表格的映射关系,将 const u8 IRTabFF00[] 数组中的相应“NKEY”元素替换为“IR”元素。替换后的代码示例如下:

const u8 IRTabFF00[] = {
//......原代码略
NKEY_3F,
IR_02,  //NKEY_40,
NKEY_41,
NKEY_42,
IR_01,  //NKEY_43,
IR_00,  //NKEY_44,
NKEY_45,
IR_03,  //NKEY_46,
NKEY_47,
//......原代码略
NKEY_5F,
};

至此,针对 irkey.c 文件的修改就全部完成了。编译并烧录程序后,即可使用红外遥控器对设备进行控制。

由于音箱 PCB 板物理尺寸的限制,实体按键的数量往往受限,而遥控器的按键则不受此约束。通过上述方法,我们可以解锁 SDK 预设的更多功能按键,极大地丰富了产品的交互能力。关于 SDK 预设的所有功能按键定义,可以参考文件 apps\soundbox\include\key_event_deal.h。这类在特定芯片上进行底层开发和功能定制的经验,非常适合在 云栈社区 这类技术论坛与开发者们分享和讨论。




上一篇:程序员擅长营销:用Debug思维与算法优化转化路径
下一篇:Zurl:专为NAS设计的开源短链接系统,Docker部署与SQLite存储
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 17:28 , Processed in 0.229121 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表