目录
协议栈与内核通信:
Bluez协议栈与内核通信,是通过创建bluetooth类型的socket实现的。创建socket之后,可以通过它收发hci命令和事件,也可以收发mgmt类型消息,还可以通过ioctl控制controller,这几种方式在Bluez的代码中都是存在的,这也导致了我们阅读Bluez协议栈的时候总是感觉特别乱,因为它没有统一的访问Controller的接口,目前从bluetoothd守护进程的实现来看,mgmt是bluez主推的一种方式。
关于mgmt的详细介绍,参考:http://www.bluez.org/the-management-interface/
但是本人并不很喜欢mgmt,因为它过分封装了hci消息,并且阉割了它,一条mgmt消息发给kernel,kernel转换为多条hci命令发送给controller,导致通过mgmt编写的蓝牙程序,很多详细的hci数据拿不到(hci的原始消息是有这些数据的,但是mgmt却没有提供给我们,比如MGMT_EV_DEVICE_CONNECTED,拿不到conn_param的late