Skip to content

支持在设置中选择遥控器并自动匹配协议参数 - #3

Merged
Kaliscuit merged 1 commit into
mainfrom
feat/remote-selection-settings
Sep 24, 2026
Merged

Kaliscuit merged 1 commit into
mainfrom
feat/remote-selection-settings

Conversation

@Kaliscuit

@Kaliscuit Kaliscuit commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

更换遥控器时原先需要管理员手动编辑地址、ATT 句柄和报告格式,语音连接还会选择第一个同名设备。本 PR 增加「遥控器设置…」:选择已连接的设备或输入地址,自动匹配已验证型号的参数,保存后同步切换按键与语音并保留映射。

兼容修复 #2 已合入 main;本 PR 在此基础上增加设备选择设置与自动识别,目标分支为 main。

使用流程与识别范围

  • 菜单栏和按键设置窗口均有入口,提供设备刷新、手动地址输入、厂商/型号/固件显示、自动识别和手动参数模式,中英文界面已补齐。
  • 从 IOKit 的已连接 HID 元数据读取地址和物理 UUID,将所选地址绑定到对应 CoreBluetooth 设备;原生 HID 路径也按地址过滤,不会误用另一只同名遥控器。
  • 已验证 VID/PID 与 ABBEY / 22.2 匹配 0x46 / indexed;VID/PID 与完整 zhuhai_jieli / hid_mouse / 0.0.1 身份匹配 0x2b / consumer16。未知身份不自动猜测格式或句柄,可输入已确认的手动参数。
  • 设备列表显示已经配对并连接的 Chromecast 遥控器,配对仍在 macOS 蓝牙设置完成。自动识别在选择/保存时应用,固件升级后需刷新并重新识别。

配置保存与连接生命周期

  • 辅助服务协议 v2 接受配置用户 UID 的一条最多 4096 字节的设备选择请求,严格限制字段、类型和取值;不允许修改 UID/GID、socket 或可执行文件路径,也不执行客户端命令。
  • 原子替换 root 所有的配置文件,保留系统字段,清除换地址后过期的语音标识。失败或配置冲突保留原文件。应用回读配置后重建按键和语音连接;丢失保存回执时也以回读结果判断。
  • 捕获在新连接上重新开始,以取得所选设备的连接元数据;旧语音控制器取消重试并断开,避免切换后再次连接旧设备。关闭设置时的空闲关麦回执不再覆盖就绪状态。
  • 旧配置继续可读;旧辅助服务会显示升级提示。首次使用新设置保存功能需更新辅助服务,不是只替换 .app。安装器增加旧服务移除期间的有界重试。

验证

  • 当前 Jieli 遥控器已通过设置页面完成识别和保存:配置含自动识别标记与对应语音 UUID,辅助服务和语音均重连成功;用户已确认普通按键与语音开始/停止均正常。
  • 中文手动配置与英文自动识别页面已渲染并检查。
  • 18 项 Python 测试通过,覆盖请求白名单、权限、错误配置、写入失败/冲突、实际 socket 消息及捕获关闭。
  • 独立 Swift runner 编译生产代码,执行 10 项设备识别/选择测试,以及延迟语音切换、长按和重复停止回归检查。本机仅有 Command Line Tools;分支的 macOS CI 已通过完整 XCTest、Python 测试、源码审查和应用构建。
  • 本机 Apple Silicon / Intel 双架构构建、签名校验、shell 语法、源码审查与 git diff --check 通过。

尚未在两只实体遥控器同时连接的情况下实测切换;同名设备选择、重新配对后的 UUID 更新以及旧/新型号参数由合成测试覆盖。

@Kaliscuit
Kaliscuit changed the base branch from fix/remote-device-compatibility to main September 24, 2026 05:27
@Kaliscuit
Kaliscuit merged commit 889255e into main Sep 24, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant