1.HCI(HOST CONTROLLER INTERFACE):主机控制层接口
从字面意思不难理解,是沟通host和controller的接口,每个蓝牙设备都由host和controller组成,host为蓝牙协议栈,controller为厂商封装好的固件,host通过hci下发command给controller,controller返回固件自身信息或从远端controller接收到的信息通过event上报给host,两个设备之间的controller数据交互则为工作中常说的空中包,需要借助空包工具(ellisys frontline)抓取
2.开启蓝牙hci_reset,一般开启蓝牙的第一条command就是hci_reset ,如果不是将会打印hardware error,日常使用遇到蓝牙打不开的小伙伴,可以导出日志看下是不是硬件挂了
3.Command: HCI_Read_BD_ADDR 读取本机地址
4.Command: HCI_Read_Local_Version_Information 读取本机固件蓝牙版本信息
5. Command: HCI_Write_Inquiry_mode,设置inquiry模式 ,返回扫描结果的类型Inquiry_Mode: Inquiry Result with RSSI format or Extended Inquiry Result format,inquiry对于蓝牙来说是去扫描设备,inquiry scan是可以被其它设备扫描到
6.Command: HCI_Write_Page_Timeout 设置page timeout超时时间,page是去连接对方设备,page scan是可以被对方连接,连接失败常见page timeout,超时未连接成功
7. Command: HCI_Read_Local_Name Command: HCI_Write_Local_Name读写本机设备名
8. Command: HCI_LE_Set_Extended_Scan_Parameters 设置LE设备扫描window和interval,设置中发起的扫描,window被拉满
9. Command: HCI_Inquiry 发起扫描le和BR/EDR设备都会上报
10. Event: HCI_LE_Extended_Advertising_Report le设备广播包上报
11. Event: HCI_Extended_Inquiry_Result 传统设备EIR类型上报扫描结果
12. Command: HCI_Inquiry_Cancel 取消扫描
13. Command: HCI_Delete_Stored_Link_Key 取消配对删除link
14. Command: HCI_Remote_Name_Request 读取对端蓝牙设备名称
15. Command: HCI_Create_Connection 主动创建连接,主动发起连接的设备做master
16. Event: HCI_Connection_Complete 连接完成,ACL建立成功,Connection_Handle为链路标识
17. Command: HCI_Read_Remote_Version_Information Event: HCI_Read_Remote_Version_Information_Complete 读取对端信息,event返回厂商,固件版本,蓝牙版本信息
18. Command: HCI_Authentication_Requested 发起连接认证请求
19. Event: HCI_Link_Key_Request 请求是否有link
20. Command: HCI_Link_Key_Request_Negative_Reply 手机端无link key
21. Event: HCI_IO_Capability_Request 问询手机端io capability
22. Command: HCI_IO_Capability_Request_Reply 手机端回复 IO_Capability: DisplayYesNo
23. Event: HCI_IO_Capability_Response 耳机端回复 IO_Capability: NoInputNoOutput
24. Event: HCI_User_Confirmation_Request 耳机端确认连接请求并生成pin码
25. Command: HCI_User_Confirmation_Request_Reply 手机回复是否确认连接
26. Event: HCI_Simple_Pairing_Complete 以simple pairing方式配对完成
27. Event: HCI_Link_Key_Notification 生成link key,不同于pin码,是蓝牙链路的加密key,可用于解析空包数据
28. Event: HCI_Authentication_Complete 蓝牙认证流程结束
后面整理下认证完成后a2dp从SDP开始到音频流建立完成的流程