首页 文章

在基于Bluez的面向GATT的应用程序中更改连接间隔

提问于
浏览
1

我们目前正在开发一个连接到BLE设备(由我们开发)的Linux(运行最新的Debian Jessie的RasPi)上的应用程序 . 这个工具已经从bluez(5.46)堆栈中的cherry-picking文件演变而来,并在顶部添加了一个应用程序层 . 除了连接速度非常慢之外,这一切都很有效 . 从我们工具的输出中,我了解到需要交换大量消息来传达GATT服务和特征,并且每个消息都需要一个连接时间间隔 . 由于它是低功率器件,我们希望连接间隔相对较高,因此需要高延迟 .

当连接Android BLE扫描仪时,我看到(在设备端)BLE扫描仪将连接间隔操作为较低值,获取所有请求的数据,然后将连接间隔设置回其原始值 . 请注意,顺便说一句,BLE扫描仪和我们的Bluez派生应用程序都没有考虑首选连接参数 .

现在我想让我们的应用程序执行相同的操作:将连接间隔设置为8ms,获取有关特性和服务的所有信息,并重新设置连接间隔 . 在Bluez堆栈中,我甚至在HCI层中找到了一个很好的函数:hci_le_conn_update .

但现在面临的挑战是:应用程序的其余部分是 Build 在GATT功能之上的,尽管BLE规范定义了这两者之间的层次结构(中间有一些层),但在代码中它们看起来完全相互独立 .

hci_le_conn_update函数有两个特定于HCI的参数:'dd'(文件描述符到设备)和'handle'(一些标识连接的值) . hcitool告诉我,当我创建连接时,第一个句柄是64,所以我尝试使用该值 . 对于'dd',我使用hci_dev_open来获取设备的文件描述符 . 这很有效 . 有点 .

正如我之前所说,最小/最大值并未完全考虑在内 . 因此,当我将其设置为6/10时,我得到11,当我将其设置为6/50时,我得到60.这对我的品味来说有点太不确定了,我更喜欢直接改变连接间隔的函数给出一个大多数被忽略的范围 . 此外,我必须使用硬编码的魔法数字64给我一个不好的痒 . 我实际上可以控制嵌入式设备端的连接间隔,但我希望控制器位于客户端应用程序的一侧 .

目标是更新基于Bluez-GATT的应用程序中的连接间隔 . 在一定限度内,我并不介意我如何到达那里 . 有什么建议?

1 回答

相关问题