
Flipper Zero 红外遥控增强插件 ir_remote配置文件映射、短按/长按机制与源码级实现解析【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper本篇技术指南围绕 Flipper Zero 的开源红外遥控插件ir_remoteAlternative Infrared Remote展开该插件以 官方文档 为核心源码位于 Applications/Official/source-OLDER/xMasterX/ir_remote/。ir_remote 用一份纯文本映射文件把 Flipper 的物理按键上/下/左/右/OK/返回直接绑定到.ir遥控文件中的具体红外按钮并同时支持短按与长按两套映射。读完本文你将掌握该插件的配置文件编写规范、安装与使用流程、编译构建方法以及其配置解析 → 信号加载 → 按键触发的完整内部实现原理。插件定位为什么需要 ir_remoteFlipper Zero 自带的红外应用在使用电视、电视盒子等设备遥控时需要在设备菜单里逐级进入Button列表、再为每个物理按键反复切换目标按钮对于 Up、Down、Left、Right、Back 这类方向键操作相当繁琐。ir_remote 正是为解决这一痛点而生——它把固定设备的常用按钮一次性映射到 Flipper 的物理按键上让遥控器变成即开即用的直通面板。该插件定位上与著名的 UniversalRF Remix 插件类似区别在于后者针对 Sub-GHz 射频文件而 ir_remote 专门处理红外Infrared.ir文件。作者在 README 中说明其适用于电视TV与电视盒子TV box场景并在Unleashed 固件 unlshd-023 版本上完成过测试。核心能力一览按键直通映射无需逐级菜单导航UP/DOWN/LEFT/RIGHT/OK/BACK 六个物理按键直接发射预设的红外信号短按 长按双映射每个物理按键可通过HOLD后缀配置第二套映射一个按键最多承载两个红外按钮纯文本配置以.txt文件描述映射关系文件放在 SD 卡的ir_remote文件夹下应用启动时通过文件浏览器选择空值容错未配置的按键在界面上显示为N/A并被禁用不影响其他按键工作应用内退出长按 Back 键即可退出应用。源码结构与启动流程插件源码规模很小共 5 个 C 文件、2 个头文件外加 1 份应用清单 application.fam文件职责infrared_remote_app.c应用入口、GUI 绘制、输入事件循环infrared_remote.c.ir遥控文件的加载与按钮容器管理infrared_remote_button.c单个按钮名称 信号的数据结构infrared_signal.c红外信号解析、校验与发射infrared_remote.h 等头文件对外 API 声明应用清单 application.fam 给出了插件在构建系统中的注册信息appidir_remote显示名IR RemoteapptypeFlipperAppType.EXTERNAL即以.fap外部应用形式分发需由用户手动放入 SD 卡入口函数infrared_remote_app栈大小3 * 1024字节依赖gui与dialogs两个系统模块安装后归类到Misc_Extra应用类别图标为ir_10px.png。应用启动流程入口函数 infrared_remote_app 的启动流程可拆解为以下步骤分配输入事件队列与IRApp结构体内含 11 个FuriString*分别存放 6 个短按键名与 5 个长按键名创建 ViewPort 并注册到 GUI 全屏层GuiLayerFullscreen设置绘制回调和输入回调打开存储与对话框服务用文件浏览器过滤.txt扩展名让用户从默认路径/ext/ir_remote选择配置文件若用户取消选择则释放全部资源并返回退出码 255打开配置文件并依次解析各键值加载对应的.ir遥控文件进入主事件循环根据短按/长按事件发射对应红外信号直到长按 Back 退出。其中界面绘制逻辑infrared_remote_app.c把 128x64 像素的屏幕分成上下两区上半区为短按映射下半区为长按映射两区之间用一条水平线分隔。左侧绘制方向/功能图标右侧以FontSecondary字体居中显示按钮名称。配置文件详解插件的核心ir_remote 的使用高度依赖一份纯文本映射文件。其格式设计成键名: 值的简单键值对用REMOTE指定红外遥控文件路径用按键名可带HOLD后缀指定对应.ir文件中的按钮名。配置格式说明带HOLD后缀的键表示长按不带则对应短按值为空表示该物理按键不需要映射界面显示为N/A每个键的取值必须是所引用.ir文件中真实存在的按钮名name字段否则该按键不会被启用。完整示例仓库自带的示例配置 example.txt 完整内容如下REMOTE: /ext/infrared/Philips_32PFL4208T.ir UP: Up DOWN: Down LEFT: Left RIGHT: Right OK: BACK: Back UPHOLD: VOL DOWNHOLD: VOL- LEFTHOLD: Source RIGHTHOLD: SmartTV OKHOLD: POWER这个示例对应一台飞利浦电视遥控器物理按键短按原键长按HOLD 键UPUp方向键上VOL音量加DOWNDown方向键下VOL-音量减LEFTLeft方向键左Source信号源RIGHTRight方向键右SmartTV智能电视OK空N/A禁用POWER电源BACKBack返回长按 Back 用于退出应用可见通过HOLD后缀单个物理按键实现了短按导航 长按快捷功能的组合这正是该插件相比官方红外应用最实用的差异点。键名速查表配置文件共支持 11 个键对应源码中 11 次flipper_format_read_string调用infrared_remote_app.c键名含义REMOTE.ir遥控文件的绝对路径必填UP/DOWN/LEFT/RIGHT/OK/BACK对应物理按键的短按映射UPHOLD/DOWNHOLD/LEFTHOLD/RIGHTHOLD/OKHOLD对应物理按键的长按映射注意BACK键的短按映射会发射配置的红外返回信号而无论是否配置长按 Back 键都会退出应用见下文输入事件处理。配置文件的保存位置将内容保存为.txt文件后在 SD 卡根目录创建ir_remote文件夹即/ext/ir_remote把.txt放入其中。应用启动时文件浏览器会以该目录为起点、过滤.txt文件供选择。安装与使用安装步骤将 Flipper Zero 固件升级到Unleashed unlshd-023版本README 中标注的测试版本从项目发布页下载ir_remote.fap文件把ir_remote.fap放入 SD 卡的apps文件夹或按固件约定放入apps/Misc_Extra等分类目录取决于固件版本按上文格式准备配置文件并放入 SD 卡ir_remote文件夹。注意当前仓库 xMasterX/ir_remote 目录中仅保留源码与文档并不包含预编译的.fap二进制如需获取现成应用请自行编译或从发布渠道获取。使用步骤打开应用进入文件浏览器选择 SD 卡ir_remote文件夹下的一份.txt配置文件应用读取配置并加载对应的.ir文件随后进入全屏遥控界面短按各物理按键发射对应红外信号长按发射HOLD映射信号长按 Back 键退出应用。界面效果以下两张截图来自仓库 xMasterX/ir_remote第一张 ir.png 为启动后的配置文件选择界面列出ir_remote目录下的各份.txt映射文件图中可见example、tu、astro等条目。第二张 ir2.png 为加载成功后的遥控主界面上半区显示短按映射的按钮名Up、Down、Left、Right、N/A、Back下半区显示长按映射的按钮名VOL、VOL-、Source、SmartTV、POWER、Exit App与示例配置一一对应。若配置文件无法解析或.ir文件加载失败界面会显示Config is incorrect.与Please configure map.的错误提示并提示按 Back 退出。源码级实现解析配置解析与按键映射启动后应用以flipper_format_file_open_existing打开所选.txt依次执行读取REMOTE键获得.ir文件路径随后调用infrared_remote_load加载遥控文件依次读取 10 个按键键名UP 至 OKHOLD对每个键名调用infrared_remote_find_button_by_nameinfrared_remote.c在已加载的遥控文件中线性查找同名按钮并取回索引找到则把对应按钮的InfraredSignal赋给信号槽并置xxx_enabled true找不到或键缺失则显示N/A、保持禁用状态。每个按键都有独立的*_enabled布尔开关因此在事件循环中只有成功映射的按键才会真正发射信号。.ir文件加载与校验infrared_remote_loadinfrared_remote.c是理解.ir文件格式的关键入口以缓冲模式打开.ir文件读取文件头并校验类型串必须为IR signals file且版本为 1不符合则加载失败加载成功后循环调用infrared_signal_read读取文件中每一段信号每段包含name字段 信号体把每个按钮包装为InfraredRemoteButton存入动态数组InfraredButtonArray。这也解释了配置文件里REMOTE路径为什么必须指向合法.ir文件——它本质上是一个符合 Flipper 红外文件规范的按钮集合。红外信号的两种形态infrared_signal_read_bodyinfrared_signal.c根据信号体中的type字段区分两种形态parsed解析型由protocol协议名、address、command组成属于协议级编码信号。保存格式见 infrared_signal.craw原始型由frequency载波频率、duty_cycle占空比0~1和data定时时序数组组成属于波形级原始数据适合学习而来、无标准协议的信号。加载时对两种形态都会做合法性校验infrared_signal.c协议必须有效、address/command 必须在协议位宽范围内raw 信号的频率须在红外有效范围、占空比须在 (0, 1]、时序条数须小于MAX_TIMINGS_AMOUNT。信号发射短按与长按的分流主事件循环infrared_remote_app.c按输入事件类型分流InputTypeShort短按按InputKeyUp/Down/Right/Left/Ok/Back分支若对应*_enabled为真则调用infrared_signal_transmit发射短按信号InputTypeLong长按按 UP/DOWN/LEFT/RIGHT/OK 分支发射对应*HOLD信号其余按键含 Back落入default分支将running置为 false即长按 Back 退出应用InputTypeRelease松开停止之前触发的 LED 闪烁提示。发射前的提示逻辑统一调用notification_message(notification, sequence_blink_start_magenta)即每次发射时 LED 闪烁品红色作为视觉反馈。最终信号通过infrared_signal_transmitinfrared_signal.c发射对raw信号调用infrared_send_raw_ext(timings, timings_size, true, frequency, duty_cycle)按原始时序逐段发送对parsed信号调用infrared_send(message, 2)其中参数 2 表示重复发送次数以提高接收端识别成功率。编译构建若要在本仓库源码基础上自行编译该插件官方 README 给出了两种方式。前提是将 ir_remote 源码放入固件工程的applications_user目录然后在固件根目录执行./fbt fap_ir_remote该命令构建名为ir_remote的.fap外部应用。也可以构建并直接部署运行到已连接的 Flipper./fbt launch_app APPSRCapplications_user/ir_remote两种方式都依赖 Flipper 官方构建工具链fbt且需要与目标固件如 Unleashed配套的源码工程环境。构建产物对应 application.fam 中声明的应用定义。使用限制与注意事项固件兼容性README 标注的测试环境为 Unleashed unlshd-023其他固件版本含官方固件未在文档中声明可能存在 API 差异实际使用时需自行验证按钮名必须精确匹配配置文件中的按钮名需要与.ir文件内的name字段完全一致区分大小写否则该键会静默禁用并显示N/A一个文件一套映射每份.txt对应一台设备的映射方案多台设备需准备多份配置文件并在启动时切换退出方式只能通过长按 Back 键退出没有其他退出入口本仓库仅含源码xMasterX/ir_remote目录下没有预编译.fap需要按上文流程自行构建。总结ir_remote 是一个小而精的 Flipper Zero 红外遥控增强插件它以一份 11 键的纯文本配置文件为核心把物理按键短按/长按分别映射到.ir文件中的按钮省去了官方红外应用的菜单导航开销特别适合电视、电视盒子等方向键密集的遥控场景。其源码结构清晰——配置文件解析、遥控文件加载、信号校验发射三层职责分明是学习 Flipper Zero 外部应用开发GUI 绘制、事件循环、FlipperFormat 配置读写、红外协议栈调用的极佳参考样例。如需深入阅读实现细节可继续浏览 infrared_remote_app.c、infrared_remote.c 与 infrared_signal.c。【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考