基于 HID 协议的扩展功能指令定义方案
前言
蓝牙HID是蓝牙联盟规定的,适用于键盘鼠标等设备标准交互规范,不同厂家的蓝牙设备可以互联互通的基础,本文归纳总结了蓝牙HID的进阶规范协议,适用于当HID协议不能满足要求时,如何扩展指令集及一些扩展功能。
目录
2. 主流 APP 操控(自定义 APP 指令 + 标准指令复用)
核心设计原则
- 兼容性优先:通用功能(翻页、音乐播放等)复用 USB HID 标准键值 / 鼠标指令,保证跨设备 / 系统兼容;
- 自定义扩展:非标功能(APP 专属操控、远程拍摄、家居控制等)通过自定义 HID 报告扩展,分配独立报告 ID 避免冲突;
- 精简高效:采用 BLE HID 模式,报告长度控制在 8 字节内,平衡低功耗与低延迟;
- 分层指令:区分「通用指令」(跨场景复用)和「专属指令」(单 APP / 场景定制)。
一、HID 报告 ID 与格式规划
| 报告 ID | 报告类型 | 用途 | 数据格式(字节) |
| 0x01 | 键盘报告 | 通用键盘模拟(翻页、点赞、音乐等) | [0x01][修饰键][保留][K1][K2][K3][K4][K5][K6](标准 8 字节) |
| 0x02 | 鼠标报告 | 翻页、界面滑动、点击 | [0x02][按键位][X 位移][Y 位移][滚轮][保留](6 字节) |
| 0x03 | 自定义 APP 指令 | 主流 APP 专属操控 | [0x03][APP 编号][操作指令][参数 1][参数 2][保留](6 字节) |
| 0x04 | 自定义功能指令 | 拍摄、直播、车机等 | [0x04][功能类型][操作指令][参数 1][参数 2][保留](6 字节) |
基础编码规则
- APP 编号(1 字节):0x01 = 无他相机、0x02=B612、0x03 = 美颜秀秀、0x04 = 轻颜、0x05=Faceu、0x06 = 微视、0x07 = 小红书、0x08 = 美拍、0x09 = 抖音、0x0A = 抖音火山版、0x0B=YouTube、0x0C = 醒图、0x0D = 剪映、0x0E = 西瓜视频、0x0F = 美图秀秀;
- 功能类型(1 字节):0x01 = 直播、0x02 = 短视频、0x03 = 拍摄、0x04 = 音乐、0x05 = 车机、0x06 = 会议、0x07 = 家居、0x08 = 多媒体教室;
- 操作指令(1 字节):各场景专属编码,见下文分模块定义。
二、分功能 HID 指令定义
1. 上下左右翻页(复用标准指令,兼容性最优)
| 操作 | 指令类型 | 报告 ID | 具体指令值 |
| 向上翻页 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x4B][0x00][0x00][0x00][0x00][0x00](PageUp 键,0x4B) |
| 向下翻页 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x4E][0x00][0x00][0x00][0x00][0x00](PageDown 键,0x4E) |
| 向左翻页 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x4D][0x00][0x00][0x00][0x00][0x00](Left 键,0x4D) |
| 向右翻页 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x4F][0x00][0x00][0x00][0x00][0x00](Right 键,0x4F) |
| 快速滑动翻页 | 鼠标报告 | 0x02 | 向上:[0x02][0x00][0x00][0x00][0x7F][0x00](滚轮 + 127)向下:[0x02][0x00][0x00][0x00][0x80][0x00](滚轮 - 128) |
2. 主流 APP 操控(自定义 APP 指令 + 标准指令复用)
2.1 通用 APP 操作(所有 APP 复用)
| 通用操作 | 指令类型 | 报告 ID | 具体指令值 |
| 返回上一级 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x28][0x00][0x00][0x00][0x00][0x00](ESC 键,0x28) |
| 确认 / 选中 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x28][0x00][0x00][0x00][0x00][0x00](Enter 键,0x28) |
| 切换前后置摄像头 | 自定义 APP 指令 | 0x03 | [0x03][APP 编号][0x01][0x00][0x00][0x00](0x01 = 切换摄像头) |
| 调节美颜强度 | 自定义 APP 指令 | 0x03 | [0x03][APP 编号][0x02][强度值][0x00][0x00](强度值:0x00-0x64,0-100) |
| 切换滤镜 | 自定义 APP 指令 | 0x03 | [0x03][APP 编号][0x03][滤镜编号][0x00][0x00](滤镜编号:0x01-0xFF) |
| 保存 / 导出作品 | 自定义 APP 指令 | 0x03 | [0x03][APP 编号][0x04][0x00][0x00][0x00](0x04 = 保存) |
| 切换全屏 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x32][0x00][0x00][0x00][0x00][0x00](F11 键,0x32) |
2.2 各 APP 专属操作(自定义 APP 指令)
| APP 名称 | 专属操作 | 报告 ID | 具体指令值 |
| 无他相机 (0x01) | 开启瘦脸 | 0x03 | [0x03][0x01][0x05][强度值][0x00][0x00](0x05 = 瘦脸,强度 0x00-0x64) |
| B612(0x02) | 开启萌系特效 | 0x03 | [0x03][0x02][0x06][特效编号][0x00][0x00](0x06 = 萌系特效,编号 0x01-0x10) |
| 抖音 (0x09) | 切换草稿箱 | 0x03 | [0x03][0x09][0x07][0x00][0x00][0x00](0x07 = 草稿箱) |
| YouTube(0x0B) | 调节播放速度 | 0x03 | [0x03][0x0B][0x08][速度值][0x00][0x00](速度值:0x01=0.5x,0x02=1x,0x03=1.5x) |
| 剪映 (0x0D) | 分割视频 | 0x03 | [0x03][0x0D][0x09][0x00][0x00][0x00](0x09 = 分割) |
| 醒图 (0x0C) | 调节滤镜透明度 | 0x03 | [0x03][0x0C][0x0A][透明度][0x00][0x00](透明度 0x00-0x64) |
3. 直播(自定义功能指令)
| 直播操作 | 报告 ID | 具体指令值 |
| 开启 / 关闭直播 | 0x04 | [0x04][0x01][0x01][0x01][0x00][0x00](0x01 = 开启,0x00 = 关闭) |
| 切换直播镜头 | 0x04 | [0x04][0x01][0x02][镜头编号][0x00][0x00](0x01 = 广角,0x02 = 特写) |
| 开启直播美颜 | 0x04 | [0x04][0x01][0x03][强度值][0x00][0x00](强度 0x00-0x64) |
| 禁言 / 解禁观众 | 0x04 | [0x04][0x01][0x04][用户 ID 低字节][用户 ID 高字节][0x00] |
| 切换直播背景音乐 | 0x04 | [0x04][0x01][0x05][音乐编号][0x00][0x00] |
4. 刷短视频(标准 + 自定义指令)
| 刷短视频操作 | 指令类型 | 报告 ID | 具体指令值 |
| 上一个短视频 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x4B][0x00][0x00][0x00][0x00][0x00](PageUp) |
| 下一个短视频 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x4E][0x00][0x00][0x00][0x00][0x00](PageDown) |
| 暂停 / 播放短视频 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x2C][0x00][0x00][0x00][0x00][0x00](Space 空格,0x2C) |
| 倍速播放 | 自定义功能指令 | 0x04 | [0x04][0x02][0x01][倍速值][0x00][0x00](0x01=1x,0x02=1.5x,0x03=2x) |
5. 点赞短视频(标准 + 自定义指令)
| 点赞操作 | 指令类型 | 报告 ID | 具体指令值 |
| 点赞(通用) | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x08][0x00][0x00][0x00][0x00][0x00](数字 8 / 点赞键,0x08) |
| 取消点赞 | 键盘报告 | 0x01 | [0x01][0x00][0x00][0x08][0x00][0x00][0x00][0x00][0x00](再次发送 8 键) |
| 抖音专属点赞 | 自定义功能指令 | 0x04 | [0x04][0x02][0x02][0x01][0x00][0x00](0x02 = 点赞,0x01 = 确认) |
6. 远程拍摄 / 拍照(自定义功能指令)
| 拍摄操作 | 报告 ID | 具体指令值 |
| 拍照(单张) | 0x04 | [0x04][0x03][0x01][0x01][0x00][0x00](0x01 = 拍照,0x01 = 单张) |
| 连拍 | 0x04 | [0x04][0x03][0x01][0x02][连拍张数][0x00](连拍张数 0x01-0x64) |
| 录像开始 | 0x04 | [0x04][0x03][0x02][0x01][0x00][0x00](0x02 = 录像,0x01 = 开始) |
| 录像结束 | 0x04 | [0x04][0x03][0x02][0x00][0x00][0x00](0x00 = 结束) |
| 延时拍摄 | 0x04 | [0x04][0x03][0x03][延时秒数][0x00][0x00](延时秒数 0x03=3s,0x05=5s,0x0A=10s) |
7. 播放音乐(复用媒体键 + 自定义指令)
| 音乐操作 | 指令类型 | 报告 ID | 具体指令值 |
| 播放 / 暂停 | 键盘报告 | 0x01 | [0x01][0xE0][0x00][0x00][0x00][0x00][0x00][0x00][0x00](媒体播放 / 暂停,0xE0 修饰键) |
| 上一曲 | 键盘报告 | 0x01 | [0x01][0xE1][0x00][0x00][0x00][0x00][0x00][0x00][0x00](媒体上一曲,0xE1) |
| 下一曲 | 键盘报告 | 0x01 | [0x01][0xE2][0x00][0x00][0x00][0x00][0x00][0x00][0x00](媒体下一曲,0xE2) |
| 调节音量 + | 键盘报告 | 0x01 | [0x01][0xE3][0x00][0x00][0x00][0x00][0x00][0x00][0x00](媒体音量 +,0xE3) |
| 调节音量 - | 键盘报告 | 0x01 | [0x01][0xE4][0x00][0x00][0x00][0x00][0x00][0x00][0x00](媒体音量 -,0xE4) |
| 切换播放模式 | 自定义功能指令 | 0x04 | [0x04][0x04][0x01][模式值][0x00][0x00](0x01 = 单曲循环,0x02 = 随机,0x03 = 顺序) |
8. 车机操作(自定义功能指令)
| 车机操作 | 报告 ID | 具体指令值 |
| 导航目的地切换 | 0x04 | [0x04][0x05][0x01][地址编号][0x00][0x00](地址编号 0x01-0xFF) |
| 空调温度 + | 0x04 | [0x04][0x05][0x02][0x01][0x00][0x00](0x01=+1℃) |
| 空调温度 - | 0x04 | [0x04][0x05][0x02][0x00][0x00][0x00](0x00=-1℃) |
| 车窗升降 | 0x04 | [0x04][0x05][0x03][车窗编号][升降值][0x00](车窗编号:0x01 = 主驾,0x02 = 副驾;升降值:0x01 = 升,0x00 = 降) |
| 车机切歌 | 0x04 | [0x04][0x05][0x04][0x01][0x00][0x00](0x01 = 下一曲,0x00 = 上一曲) |
9. 会议演讲(标准 + 自定义指令)
| 会议操作 | 指令类型 | 报告 ID | 具体指令值 |
| 会议翻页 | 键盘报告 | 0x01 | 向上:[0x01][0x00][0x00][0x4B][0x00][0x00][0x00][0x00][0x00]向下:[0x01][0x00][0x00][0x4E][0x00][0x00][0x00][0x00][0x00] |
| 静音 / 解除静音 | 自定义功能指令 | 0x04 | [0x04][0x06][0x01][0x01][0x00][0x00](0x01 = 静音,0x00 = 解除) |
| 开启 / 关闭摄像头 | 自定义功能指令 | 0x04 | [0x04][0x06][0x02][0x01][0x00][0x00](0x01 = 开启,0x00 = 关闭) |
| 共享屏幕 | 自定义功能指令 | 0x04 | [0x04][0x06][0x03][0x01][0x00][0x00](0x01 = 开启,0x00 = 关闭) |
| 会议录制 | 自定义功能指令 | 0x04 | [0x04][0x06][0x04][0x01][0x00][0x00](0x01 = 开始,0x00 = 结束) |
10. 家居控制(自定义功能指令)
| 家居操作 | 报告 ID | 具体指令值 |
| 灯光开关 | 0x04 | [0x04][0x07][0x01][设备 ID][开关值][0x00](设备 ID:0x01-0xFF;开关值:0x01 = 开,0x00 = 关) |
| 灯光亮度调节 | 0x04 | [0x04][0x07][0x02][设备 ID][亮度值][0x00](亮度值 0x00-0x64) |
| 窗帘开合 | 0x04 | [0x04][0x07][0x03][设备 ID][开合值][0x00](开合值:0x01 = 开,0x00 = 合,0x02 = 暂停) |
| 空调模式切换 | 0x04 | [0x04][0x07][0x04][设备 ID][模式值][0x00](模式值:0x01 = 制冷,0x02 = 制热,0x03 = 送风) |
11. 多媒体教室(标准 + 自定义指令)
| 教室操作 | 指令类型 | 报告 ID | 具体指令值 |
| 投影开关 | 自定义功能指令 | 0x04 | [0x04][0x08][0x01][0x01][0x00][0x00](0x01 = 开,0x00 = 关) |
| 投影信号切换 | 自定义功能指令 | 0x04 | [0x04][0x08][0x02][信号源编号][0x00][0x00](0x01 = 电脑,0x02 = 平板,0x03 = 手机) |
| 音量调节 | 键盘报告 | 0x01 | 音量 +:[0x01][0xE3][0x00][0x00][0x00][0x00][0x00][0x00][0x00]音量 -:[0x01][0xE4][0x00][0x00][0x00][0x00][0x00][0x00][0x00] |
| 课件翻页 | 键盘报告 | 0x01 | 向上:[0x01][0x00][0x00][0x4B][0x00][0x00][0x00][0x00][0x00]向下:[0x01][0x00][0x00][0x4E][0x00][0x00][0x00][0x00][0x00] |
| 屏幕标注 | 自定义功能指令 | 0x04 | [0x04][0x08][0x03][标注颜色][粗细值][0x00](颜色:0x01 = 红,0x02 = 蓝;粗细:0x01-0x05) |
三、自定义 HID 报告描述符示例(关键部分)
针对自定义 APP 指令(ID=0x03)和自定义功能指令(ID=0x04),需扩展报告描述符,核心片段如下:
| // 自定义APP指令报告(ID=0x03) 0x05, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x09, 0x03, // Usage (0x03 = APP Control) 0xA1, 0x01, // Collection (Application) 0x85, 0x03, // Report ID (0x03) 0x75, 0x08, // Report Size (8 bits) 0x95, 0x05, // Report Count (5 bytes: APP编号+操作指令+参数1+参数2+保留) 0x09, 0x00, // Usage (Undefined) 0x81, 0x02, // Input (Data, Var, Abs) 0xC0, // End Collection // 自定义功能指令报告(ID=0x04) 0x05, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x09, 0x04, // Usage (0x04 = Function Control) 0xA1, 0x01, // Collection (Application) 0x85, 0x04, // Report ID (0x04) 0x75, 0x08, // Report Size (8 bits) 0x95, 0x05, // Report Count (5 bytes: 功能类型+操作指令+参数1+参数2+保留) 0x09, 0x00, // Usage (Undefined) 0x81, 0x02, // Input (Data, Var, Abs) 0xC0, // End Collection |
四、实现注意事项
- 兼容性适配:
- 标准键盘 / 鼠标指令无需适配,系统原生支持;
- 自定义指令需在对应 APP 端开发适配层(如通过 HID 监听工具解析自定义报告,映射为 APP 内操作);
- 低功耗优化:
- 无操作时停止发送报告,进入 BLE HID 低功耗模式;
- 自定义报告长度控制在 6 字节内,减少传输功耗;
- 指令消抖:
- 按键类指令添加 10-30ms 消抖,避免重复触发;
- 多设备兼容:
- 车机 / 家居控制需兼容不同品牌设备,通过设备 ID 区分;
- APP 操控需适配 iOS/Android 系统差异(如 iOS 对自定义 HID 报告权限更严格,优先复用标准键);
- 权限处理:
- 远程拍摄 / 车机 / 家居控制需获取对应设备的操作权限(如相机权限、车机蓝牙权限)。
总结
本方案通过「标准 HID 指令复用 + 自定义 HID 报告扩展」的方式,覆盖所有 11 类功能需求:通用场景(翻页、音乐、点赞)复用标准键盘 / 鼠标指令保证兼容性,非标场景(APP 专属操控、直播、车机、家居)通过自定义 HID 报告实现专属指令,同时兼顾低功耗和跨设备适配性。实际落地时,需针对不同系统 / APP 补充适配层,将自定义 HID 报告解析为具体操作。
获取更多蓝牙知识文章,有想法请在评论区留言!敬请关注!

1462

被折叠的 条评论
为什么被折叠?



