蓝牙HID(Human Interface Device)的断开连接流程涉及从应用层到协议栈的多层交互。本文通过剖析Android Bluetooth协议栈代码,梳理从上层调用disconnect()
到最终物理链路断开的完整流程,涵盖状态检查、消息传递、L2CAP通道关闭、资源清理及回调通知等关键环节。流程中通过事件驱动机制协调各模块,确保安全断开并通知应用层状态变化。
一、流程概述
1.1 应用层触发断开
-
入口函数:
btif_hd.cc
中的disconnect()
首先检查应用注册和设备状态。-
若条件不满足(如未注册或未启用),直接返回错误状态。
-
条件满足时调用
BTA_HdDisconnect()
发起断开请求。
-
1.2 BTA层消息传递
-
BTA_HdDisconnect通过
bta_sys_sendmsg()
发送BTA_HD_API_DISCONNECT_EVT
事件,触发状态机处理,而非直接操作硬件。