From 7a7640f88a6c42e20a0d049cbd13fcd28e453631 Mon Sep 17 00:00:00 2001 From: cuicuiV5 Date: Tue, 1 Sep 2026 13:44:53 +0800 Subject: [PATCH] docs: overhaul README with architecture rationale, complete tutorial, and pc_companion guide --- README.md | 316 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 253 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 87f59a4..e0e3816 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,272 @@ -# RemoteMapper-ESP32 · 小米蓝牙语音遥控器 USB 复合硬件桥接固件 +# RemoteMapper-ESP32 · 小米蓝牙语音遥控器 2 Pro (RC003) ➔ USB 复合硬件桥接器 -> 🎯 **基于 ESP32-S3 N16R8 (16MB Flash + 8MB Octal PSRAM) 硬件方案** -> 彻底解决 Windows 内核键盘驱动丢弃按键、物理键盘冲突、虚拟声卡 (VB-Cable) 依赖等问题! +> 🎯 **基于 ESP32-S3 N16R8 的硬件级中间人协议桥接方案** +> 彻底解决 Windows 内核驱动丢弃「音量+ / 音量- / 返回键」的顽疾,告别 VB-Cable 虚拟声卡依赖,实现真·即插即用! +> ⚠️ **硬件型号限定**:目前固件**仅支持「小米蓝牙遥控器 2 Pro(型号:RC003)」**,暂不支持其他型号遥控器。 --- -## 🌟 核心特性与优势 +## 💡 为什么需要这个硬件项目?(背景与痛点) -1. 🎙️ **真·免驱动 USB 物理麦克风 (UAC 1.0)**: - - ESP32-S3 原生 USB OTG 模拟标准 16kHz 16-bit Mono 麦克风设备; - - 遥控器语音键按下即说话,松开即停止,即插即用,无需安装任何第三方声卡驱动。 -2. ⌨️ **独立硬件级 USB HID 键盘 & 多媒体控制器**: - - 小米遥控器音量加(`0x80`)、音量减(`0x81`)直接转换为 PC 标准 **Consumer Volume Up/Down**; - - 返回键(`0xF1`)转换为 **Consumer AC Back / Esc**(网页与播放器原生后退); - - 电源键(`Alt+Tab` / 长按关屏)、主页键(`Win+D`)、菜单键(`Space` 播放暂停)、TV 键(`F8` 语音唤醒); - - 与物理主键盘物理隔离,彻底规避软件钩子冲突。 -3. ⚡ **双核高吞吐实时 DSP 流水线**: - - **Core 0**:专门负责 NimBLE 5.0 协议栈、HOGP 按键监听、ATVV 语音流握手与 IMA-ADPCM 4-bit 解码 + Declip 尖峰消除 + 3-Tap FIR 低通平滑 + 动态 AGC; - - **Core 1**:负责 TinyUSB 复合设备(UAC 麦克风音频泵、HID 键盘派发、按键手势状态机与 CDC 诊断串口)。 -4. 🛡️ **健壮的保活与看门狗机制**: - - 450ms 音频静音看门狗:防止由于蓝牙丢包导致的语音键状态卡住; - - 自动重连与绑定恢复:NVS 存储配对信息,开机与遥控器唤醒时秒连。 -5. 🛠️ **完美规避 DWC2 Isochronous USB 缺陷**: - - 突破 TinyUSB 在 Arduino 预编译栈下缺乏 SOF 中断导致的 500Hz 丢帧降频魔咒; - - 采用独创的 **bInterval=2 / wMaxPacketSize=64** 降频缓冲方案,实现 1000Hz 零抖动 16kHz 完美音质。 +市面上的**小米蓝牙语音遥控器 2 Pro(型号:RC003)**采用精致的银色铝合金金属外壳,按键手感清脆、布局经典,并内置麦克风与拾音孔,非常适合作为 PC / HTPC 的全局多功能遥控器与 AI 语音助手控制器。 + +此前,开源社区作者 QL-4 曾开发过基于 C# 的纯软件方案([QL-4/RemoteMapper](https://github.com/QL-4/RemoteMapper)),通过 Windows BLE API 读取按键与音频。 + +但经过大量跨平台测试发现了一个非常核心的事实: +* 🍏 **在 macOS 与 🐧 Linux 系统下**:操作系统原生蓝牙 HID 协议栈极其开放,**完全没有所谓的按键屏蔽限制**,所有按键都能被正常捕获与映射,体验非常爽快! +* 🪟 **唯独在 Windows 系统下**:微软官方的蓝牙键盘驱动对非标 HID 做了极为死板的内核层过滤,导致纯软件方案在 Windows 上遭遇了无法逾越的系统级绝症——**必须依靠我们的硬件中转桥接器才能完美解决!** + +### Windows 平台下纯软件方案的致命局限: +1. **三个核心按键被 Windows 驱动直接丢弃(无法映射)**: + * **音量+(`0x80`)**、**音量-(`0x81`)**、**返回键(`0xF1`)**:这三个按键在 RC003 遥控器固件中采用的是 Android 专属非标 HID 编码; + * 当遥控器直接与 Windows 电脑蓝牙配对时,微软官方蓝牙键盘驱动 `kbdhid.sys` 在内核层将其识别为未知非法键码并**直接丢弃**! + * 结果就是:应用层(无论通过全局 Windows Hook、RawInput 还是 AutoHotkey)**完全收不到任何按键消息**,这三个键在 Windows 下彻底沦为“死键”。 +2. **纯软件若想在 Windows 捕获,必须付出惨痛代价(内核级驱动风险)**: + * 要在 Windows 层面拦截未进入 `kbdhid.sys` 的原始 HID 报文,唯一的软件途径是编写 Windows 内核过滤驱动(Kernel Filter Driver); + * 这要求操作系统必须永久开启**「测试签名模式(Test Mode)」或「禁用驱动程序签名强制」**; + * **严重负面后果**:直接导致主流游戏反作弊系统(如腾讯 ACE、拳头 Vanguard、Easy Anti-Cheat、BattlEye)判定系统存在内核作弊隐患并封禁游戏;同时破坏 Windows 内核完整性,带来极高的蓝屏(BSOD)与系统崩溃风险。 +3. **语音输入强依赖第三方虚拟声卡(VB-Cable)**: + * 虽然纯软件可以通过 Windows GATT API 接收 ATVV 语音流并解码为 PCM,但要让输入法(微信输入法、讯飞等)识别,用户**必须额外安装第三方虚拟声卡(如 VB-Cable)**; + * 繁琐的虚拟音频管道配置、难以避免的缓冲区延迟、偶尔出现的采样率抖动与破音,严重影响了语音输入的优雅体验。 --- -## 📁 目录结构 +## ⚡ 硬件桥接的基本原理 + +**软件在操作系统层无法优雅解决的问题,交给硬件中间人来做。** + +本项目通过一颗极低成本的 **ESP32-S3** 芯片充当**硬件中间人(Hardware Bridge)**: ```text -D:\tool\RemoteMapper-ESP32/ -├── default_16MB.csv # 16MB Flash 分区表 -├── platformio.ini # PlatformIO 编译与环境配置 -├── build.bat # 一键编译脚本 -├── flash.bat # 一键烧录脚本 -├── monitor.bat # 串口监控日志脚本 -├── test.bat # 单元测试运行脚本 -├── include/ -│ ├── app_config.h # 全局引脚、采样率、缓冲区容量宏定义 -│ └── version.h # 固件版本号 -├── src/ -│ ├── main.cpp # FreeRTOS 双核主入口与任务调度 -│ ├── audio/ # ADPCM 解码、Declip、FIR 平滑、AGC 与环形缓冲区 -│ ├── ble/ # NimBLE Central、HOGP 监听与 ATVV 协议客户端 -│ ├── usb/ # TinyUSB UAC 麦克风与 HID 键盘/多媒体控制器 -│ ├── keymap/ # 按键手势状态机与键码映射引擎 -│ └── cli/ # Serial CDC 诊断与 JSON 状态接口 -└── test/ - └── native/ # 算法与状态机原生验证单元测试 +┌────────────────────────┐ Bluetooth LE 5.0 (HOGP + ATVV) ┌────────────────────────┐ +│ │ ───────────────────────────────────────► │ │ +│ 小米蓝牙语音遥控器 │ │ ESP32-S3 N16R8 │ +│ (Peripheral 端) │ ◄─────────────────────────────────────── │ (Central 主机端) │ +└────────────────────────┘ 双向配对握手与私有音频协商 └───────────┬────────────┘ + │ + │ USB 2.0 Full-Speed + │ (TinyUSB 硬件复合设备) + ▼ + ┌────────────────────────┐ + │ PC 宿主机 (Win/Mac) │ + │ │ + │ • 标准 UAC 1.0 麦克风 │ + │ • 标准 USB HID 键盘 │ + │ • 标准 Consumer 多媒体 │ + └────────────────────────┘ ``` +1. **上游接管**:ESP32-S3 作为 BLE Central 主机端直连小米遥控器,在蓝牙空中信道原始层完整接收 HOGP 报文与私有 ATVV 协议,**绕过微软 `kbdhid.sys` 的过滤,100% 捕获包括「音量+、音量-、返回键」在内的全部 13 个物理按键**; +2. **边缘 DSP 音频处理**:遥控器传出的 4-bit IMA-ADPCM 压缩音频流,在 ESP32 内部实时解码为 16kHz 16-Bit PCM,并完成 Declip 防破音、FIR 低通滤波与动态 AGC 增益平滑; +3. **下游模拟物理硬件**:ESP32-S3 原生 USB OTG 直接向电脑模拟出符合 USB-IF 标准的**标准免驱硬件设备**: + * 将 `0x80` / `0x81` 映射为标准 USB Consumer 键码 `0x00E9` / `0x00EA`(原生调节系统音量); + * 将 `0xF1` 映射为标准 USB Consumer 键码 `0x0224`(网页与播放器原生后退); + * 将解码后的音频通过标准 UAC 1.0 Isochronous 管道实时推送给电脑; +4. **对电脑而言**:PC 认为接入的就是一个**正规的物理 USB 麦克风和物理 USB 键盘**,**无需安装任何驱动,无需配置虚拟声卡,无内核侵入,不触发反作弊,绝对稳定安全**。 + --- -## 🚀 编译与烧录 +## 🌟 项目核心特性 -### 1. 运行单元测试 -```cmd -test.bat -``` +### 1. 🎙️ 真·免驱 USB 物理麦克风(UAC 1.0) +* 基于 TinyUSB 栈模拟标准 USB Audio Class 1.0 设备,16kHz 16-Bit Mono 原生输入; +* **按住语音键说话,松开自动静音**,无缝对接 Windows 语音听写(`Win+H`)、豆包 AI、微信语音与各类会议软件; +* 独创 **bInterval=2 / wMaxPacketSize=64** 降频缓冲设计,彻底解决 DWC2 硬件 USB 缺失 SOF 中断导致的 500Hz 丢帧魔咒,音频平滑无底噪。 -### 2. 编译固件 -```cmd -build.bat -``` +### 2. 🎮 12 按键 $\times$ 3 触发模式(36+ 独立动作空间) +* 除专职语音键外,其余 12 个物理按键全部支持 **单击(Click)、长按(Long Press, 200~2000ms 可调)、双击(Double Click, 100~600ms 可调)**; +* 支持触发:单键、修饰键(Ctrl/Alt/Shift/Win)、复杂组合快捷键(如 `Win+D`、`Alt+Tab`)、脚本专用键(F13~F24 无冲突键码)。 -### 3. 烧录到 ESP32-S3 -将 ESP32-S3 开发板通过 USB 数据线连接到电脑(注意插在 `USB/OTG` 接口): -```cmd -flash.bat -``` +### 3. 🎵 原生标准 USB Consumer 多媒体控制 +* 音量增加(`0x00E9`)、音量减少(`0x00EA`)、静音(`0x00E2`)、播放/暂停(`0x00CD`)、曲目切换与系统休眠; +* 完美兼容 Windows、macOS 与 Linux 原生全局音量与媒体控制。 + +### 4. 🔢 全链路 16 进制 / 10 进制双模智能引擎 +* WebUI 所有选项、按键下拉菜单与微调输入框全面标清 `0x...` 标准 16 进制键码; +* 支持直接粘贴标准 16 进制键码(如 `0x2C`)或传统十进制数值,双向智能兼容。 + +### 5. 🛡️ 生产级 NVS 存储容灾与开机自愈 +* 紧凑型 JSON 序列化存储,所有配置写入仅占用 Flash NVS 扇区不足 35%; +* 采用局部原子事务,写入后立刻调用 `nvs_flash_commit()`,彻底杜绝异常断电丢数据; +* 具备开机自愈校验机制:若检测到 Flash 扇区数据损坏或非法修改,自动无缝降级回出厂安全配置,杜绝系统崩溃变砖。 + +### 6. 🌐 免客户端嵌入式 Web 可视化后台 +* 自带双模 Wi-Fi 管理器: + * **热点模式(AP)**:无需电脑连接局域网,手机或电脑直连热点 `RemoteMapper-AP`(192.168.4.1)并通过 Captive Portal 自动弹窗配置; + * **局域网模式(STA)**:连接家中 Wi-Fi,随时随地在浏览器中访问管理; +* 内置 1:1 遥控器真机动态交互面板、实体键盘敲击即录制改键、实时高频运行日志流与 Flash NVS 纯文本高级编辑器。 + +--- + +## 📋 预置按键映射表(出厂默认配置) + +| 遥控器按键 | 物理键码 | 单击行为 (Click) | 长按行为 (Long Press) | 双击行为 (Double Click) | +| :--- | :--- | :--- | :--- | :--- | +| **电源键** | `0x66` | `Alt + F4` (关闭窗口) | 🌙 系统休眠 (`0x0032`) | — | +| **语音键** | `0x04` | 🎙️ UAC 麦克风推流 + `Alt + ,` (AI语音助手) | 🎙️ 按住持续录音 | — | +| **方向上** | `0x52` | 键盘 `↑` (Arrow Up) | — | — | +| **方向下** | `0x51` | 键盘 `↓` (Arrow Down) | — | — | +| **方向左** | `0x50` | 键盘 `←` (Arrow Left) | — | — | +| **方向右** | `0x4F` | 键盘 `→` (Arrow Right) | — | — | +| **确定键** | `0x28` | 键盘 `Enter` (回车) | — | — | +| **返回键** | `0xF1` | 多媒体返回 (`0x0224` AC Back) | — | — | +| **主页键** | `0x24` | `Win + D` (显示/隐藏桌面) | — | — | +| **菜单键** | `0x5D` | 键盘 `Space` (空格 / 播放暂停) | — | — | +| **音量+** | `0x80` | 🔊 音量增加 (`0x00E9` Vol+) | — | — | +| **音量-** | `0x81` | 🔉 音量减少 (`0x00EA` Vol-) | — | — | +| **电视键** | `0xC0` | 键盘 `F8` | — | — | + +*注:以上按键均可在 Web 后台任意修改、互换或自定义为任何按键/多媒体功能。* + +--- + +## 🚀 完整使用教程(从零上手) + +整个使用流程简单清晰,分为以下六个核心步骤: + +### 步骤 1:硬件采购与接线 +1. **采购核心板**:购买 **ESP32-S3-DevKitC-1 N16R8** 开发板(淘宝约 25~35 元,务必选择带 **16MB Flash + 8MB Octal PSRAM** 的版本); +2. **准备遥控器**:小米蓝牙语音遥控器(标准红外/蓝牙双模或纯蓝牙版均可,常见型号如 XMRM-00A、XMRM-010、MI RC); +3. **关键数据线连接**: + * ESP32-S3 开发板通常有两个 Type-C 口:一个标注为 **`UART`**,另一个标注为 **`USB`**(或 **`OTG`**); + * **⚠️ 必须将数据线插在 `USB / OTG` 接口**(直连芯片内部原生 USB 控制器,才能模拟物理麦克风与键盘;UART 口仅用于串口烧录通信,无法模拟 USB 设备)。 + +--- + +### 步骤 2:一键刷入固件 +1. 将 ESP32-S3 通过 USB/OTG 口连接至电脑; +2. 在本项目根目录下,直接双击运行: + ```cmd + flash.bat + ``` +3. 脚本会自动调用 esptool 识别端口并烧录固件,等待提示 `Successfully created esp32s3 image` 烧录完成。 + +--- + +### 步骤 3:开机配网(连接家里 Wi-Fi) +1. 固件初次启动时,会自动广播一个开放式配置热点: + * **Wi-Fi 热点名称**:`RemoteMapper-AP` + * **热点默认密码**:无密码(直接连接) +2. 拿起手机或电脑,搜索并连接 `RemoteMapper-AP`; +3. 连接后系统通常会自动弹出强制门户配置页面;若未弹出,直接在浏览器中打开后台地址: + ```text + http://192.168.4.1/ + ``` +4. 切换到底部的 **「📶 Wi-Fi 与系统配置」** 选项卡,点击「🔍 搜索 Wi-Fi」,在列表中选定家里的 2.4GHz Wi-Fi 并输入密码,点击「💾 保存并连接 Wi-Fi」; +5. ESP32 连接成功后,以后只要电脑或手机在同一局域网下,直接在浏览器中访问分配的 IP(例如 `http://192.168.2.179`)或直接输入域名访问: + ```text + http://remotemapper.local/ + ``` + +--- + +### 步骤 4:遥控器蓝牙配对与绑定 +1. 在 Web 控制台顶部进入 **「📡 蓝牙配对管理」** 选项卡; +2. 拿起实体小米遥控器,**同时按住「主页键」与「菜单键」3 秒**,听到滴声或看到遥控器指示灯快闪,进入蓝牙配对广播状态; +3. 在网页上点击 **「🔍 扫描附近蓝牙设备」**,列表中会出现 `Xiaomi Voice Remote`(或 `小米蓝牙语音遥控器`); +4. 点击对应的 **「连接此设备」** 按钮,连接成功后遥控器 MAC 地址将自动写入 ESP32 Flash NVS; +5. **持久化自动回连**:绑定成功后,后续无论设备断电重启,还是遥控器深度休眠,按任意键即可在 **2~3 秒内秒级无感回连**! + +--- + +### 步骤 5:按键映射与手势自定义 +1. 进入 **「🎮 遥控器与改键测试」** 选项卡; +2. 随意按下实体遥控器的任意按键,屏幕上的 1:1 仿真遥控器模型会实时点亮高光绿框,并显示实时触发动作; +3. 点击模型上的任意按键卡片(例如点击「菜单键」或「电源键」),即可弹出改键弹窗; +4. 每个按键均可独立配置三个手势标签页: + * **单击(Click)**:瞬时点按或按下保持(Hold); + * **长按(Long Press)**:可自定 200ms ~ 2000ms 触发时长,长按自动阻止短按,互不干扰; + * **双击(Double Click)**:可自定 100ms ~ 600ms 双击判定间隔; +5. **改键极为简单**: + * **敲击即录制**:直接在物理电脑键盘上敲击目标按键(如敲一下 `Space` 或 `Ctrl+C`),网页自动捕捉录制; + * **快捷下拉选择**:菜单中预置了修饰键、F1~F24 专用键、快捷组合键(`Win+D` 回桌面、`Alt+Tab` 任务切换),以及原生多媒体功能(音量增减、静音、播放/暂停、休眠等); +6. 点击「💾 保存映射」,修改即刻生效并持久化至 Flash,断电不丢失。 + +--- + +### 步骤 6:配置语音输入法(让语音键满血工作) +遥控器的语音键出厂默认配置为:**按住时启动 UAC 麦克风音频推流,并注入快捷键 `右Alt + 逗号`**(这是微信输入法的默认语音快捷键)。 + +要让语音输入在 Windows 上完美工作,只需简单设置你的输入法(以微信输入法为例,搜狗、讯飞同理): +1. 打开输入法设置 ➔ 找到 **麦克风/音频输入源**,在下拉菜单中选择: + ```text + RemoteMapper Mic (设备管理器中免驱的原生物理麦克风) + ``` +2. 查看并确认输入法的 **语音输入唤醒快捷键** 与 ESP32 语音键派发的快捷键一致(默认即为 `右Alt + 逗号`;如果使用讯飞或搜狗,可把输入法快捷键设为 `F8` 或 `Ctrl+Shift+V`,并在 Web 后台同步修改语音键快捷键); +3. **开始体验**: + * 拿起遥控器,**按住语音键直接说话,说完松开按键**; + * 麦克风录音与快捷键完美无缝衔接,文字瞬间自动上屏打出! + +--- + +## 🎮 进阶可玩性:PC 本地伴侣程序 (`pc_companion`) 深度联动 + +> 💡 **解决痛点**:普通 USB 键盘只能模拟按键,无法执行「一键启动指定应用」、「一键运行复杂批处理」、「一键切换显示器信号源」或「一键运行 Python 脚本」。 + +我们随项目附带了极简、高性能的 PC 端伴侣后台服务:**`pc_companion`**。 + +### 🌟 核心原理:利用 F13 ~ F24 零冲突键码 +* Windows 原生支持 `F13` 到 `F24` 虚拟键码(VK_F13 ~ VK_F24),但现代实体键盘几乎没有这些按键; +* 本项目将遥控器动作映射为 `F13 ~ F24`,PC 伴侣通过原生 Win32 `RegisterHotKey` 监听,**待机 CPU 占用绝对 0.0%,内存占用仅几 MB,无任何钩子冲突与延迟**! + +### 🛠️ 快速配置与玩法示例: +1. **在 ESP32 Web 后台**:将任意遥控器按键(如双击 TV 键)映射为 `F13` 或 `F14`; +2. **在 PC 端编辑配置**:打开 `pc_companion/config.json`,为每个 F 键绑定任意本地动作: + ```json + { + "F13": { + "name": "一键打开抖音网页版", + "command": "start https://www.douyin.com/", + "enabled": true + }, + "F14": { + "name": "一键切换显示器信号源到 PS5", + "command": "C:\\Scripts\\切到ps5.bat", + "enabled": true + }, + "F15": { + "name": "运行自定义 Python 自动化脚本", + "command": "python scripts/demo_task.py", + "enabled": true + } + } + ``` +3. **启动与常驻**: + * **调试运行**:双击 `pc_companion/start_companion.bat`(前台黑框输出执行日志); + * **静默常驻**:双击 `pc_companion/silent_start.vbs`(无弹窗后台静默运行); + * **开机自启**:双击 `pc_companion/enable_autostart.bat`(自动注入 Windows 用户注册表启动项); + * **独立打包**:运行 `pc_companion/build_exe.bat`,即可一键打包生成独立的单文件绿色可执行程序 `RemoteMapperHost.exe`(无需安装 Python 环境)。 + +--- + +## 💖 鸣谢与致敬开源项目 (Special Thanks) + +本项目的诞生离不开开源社区先行者的无私探索与灵感启发,特此向以下优秀开源项目致以诚挚敬意: +* [QL-4/RemoteMapper](https://github.com/QL-4/RemoteMapper):启发了小米遥控器在 PC 端增强控制的应用场景,提供了宝贵的 Windows C# 软件实现方案与 ATVV 协议参考; +* [godarrenw/mi_remote_control](https://github.com/godarrenw/mi_remote_control):深入剖析了小米遥控器的蓝牙通信、逆向工程与 Linux 驱动底层细节,为本项目的协议实现提供了重要参考。 + +--- + +## 🤝 欢迎贡献 (Contributing & Roadmap) + +本项目完全开源,代码模块化且结构清晰,热烈欢迎各位极客与开发者提交 Issue 和 Pull Request! +我们非常期待社区共同完善以下方向: +* 📡 **支持更多遥控器型号**:扩展适配更多小米老款遥控器、天猫魔盒遥控器、Apple TV 遥控器、Google Chromecast 遥控器等; +* 🧠 **红外/蓝牙按键学习功能 (Key Learning)**:支持学习并模拟空调、电视、投影仪等红外/蓝牙码; +* 🎚️ **多层功能触发层 (Multi-Layer / Fn Chording)**:引入 Leader Key 前导键机制,实现按键层级切换; +* 📲 **WebUI 在线 OTA 固件升级**:免插拔数据线,直接在浏览器一键上传 `.bin` 固件无感更新。 + +--- + +## 📖 深入阅读与底层源码参考 + +* 📘 [开发者手册与系统技术全景文档 (DEVELOPMENT.md)](./DEVELOPMENT.md) +* 🐛 [蓝牙与 USB 复合设备稳定性深度修复报告](./BLE_HID_UAC_BUGS_POSTMORTEM.md) +* 🎧 [USB UAC 1.0 与 DWC2 驱动优化报告](./USB_UAC_BUG_POSTMORTEM.md) + +--- + +## 📄 开源许可证 +本项目遵循 [MIT License](./LICENSE) 开源许可协议。 -### 4. 查看实时串口日志 -```cmd -monitor.bat -``` -## 🐛 历史 Bug 与稳定性修复记录 -如果你对底层原理感兴趣,欢迎阅读: -- [蓝牙与 USB 复合设备稳定性深度 Bug 修复记录 (Session 2)](./BLE_HID_UAC_BUGS_POSTMORTEM.md) -- [UAC1.0 与 DWC2 驱动死锁 Bug 修复记录 (Session 1)](./USB_UAC_BUG_POSTMORTEM.md)