【Bluedroid】蓝牙HID Host virtual_unplug全流程源码解析
蓝牙 HID(Human Interface Device)协议中的虚拟拔插(Virtual UnPlug, VUP)是实现设备低功耗管理、状态重置的核心功能。本文基于 Android Bluedroid 源码,从上层应用触发virtual_unplug
接口开始,深入解析 VUP 的全流程实现,涵盖异步事件传递、设备能力适配(虚拟线缆支持与否)、定时器监控、协议栈消息封装、L2CAP 数据发送等关键环节,并对比不同设备的差异化处理策略(虚拟暂停 vs 物理断开)。
一、流程梳理
虚拟拔插流程可分为 6大阶段,涉及BTIF、BTA、HID Host三层模块交互,完整调用链如下:
1.1 上层触发与基础校验
-
入口函数:
virtual_unplug()
-
校验模块状态: 检查
BTIF_HH_INIT
确保HID主机模块已初始化,拒绝BTIF_HH_DISABLED
状态。 -
设备查找: 通过
btif_hh_find_dev_by_bda
验证
-