BLE HCI_EVT是否在连接间隔内占用了一个数据包插槽?

时间:2016-06-01 09:56:17

标签: android bluetooth bluetooth-lowenergy

我一直在几个Android设备上分析蓝牙窥探文件,其中Android设备是中央(客户端),对等设备是外围设备(服务器)。

当执行写入命令(WC)(从Android向外围设备发送数据)时,除了WC发送的数据包之外,wireshark还会识别标记为Number of Completed Packets的HCI事件。

由于HCI消息在同一设备的主机和控制器之间交换,这些事件会占用连接间隔(CI)上的数据包插槽吗?因为虽然我能够使用通知发送3个数据包/ CI,但在使用写命令时只发送1个数据包/ CI。

1 个答案:

答案 0 :(得分:0)

您可以在单个连接事件中发送多个Write Without Response数据包(在ATT层上称为Write Command)。蓝牙控制器有一个缓冲区,用于将输出数据包排入队列(称为ACL数据包)。您可以通过查找LE Read Buffer Size来查看snoop日志中此队列的大小。当蓝牙启动时,主机读取此值将跟踪某些计数器变量中当前可用的空间。当它向设备发送数据包(例如写命令)时,计数器减1。当主机收到Number of Completed Packets事件(这意味着数据包已通过无线方式发送)时,它会增加计数器。只要在发出无响应写入后此计数器仍然为正,您的GATT onCharacteristicWrite回调将被调用,因此您可以立即将另一个无响应写入数据包排入队列。发生下一个连接事件时,它会发送多个已入队的数据包。

如果仍然无法实现每个连接事件高于一个数据包的吞吐量,请确保已设置特性以使用WRITE_TYPE_NO_RESPONSE。