gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:24 25 4
gpt4 key购买 nike

我们目前正在开发一个连接到 BLE 设备(由我们开发)的 linux 应用程序(a.o. RasPi 运行最新的 Debian Jessie)。该工具是从 bluez (5.46) 堆栈中挑选文件并在顶部添加一个应用程序层发展而来的。这一切都很好,除了连接速度非常慢。从我们工具的输出中,我了解到需要交换大量消息来传达 GATT 服务和特性,并且每条消息都需要一个连接时间间隔。由于它是低功耗设备,我们希望连接间隔相对较高,因此延迟较高。

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

现在我想让我们的应用程序做同样的事情:将连接间隔设置为 8 毫秒,获取有关特征和服务的所有信息,然后重新设置连接间隔。在 Bluez 堆栈中,我什至在 HCI 层中为此找到了一个很好的函数:hci_le_conn_update。

但现在的挑战是:应用程序的其余部分构建在 GATT 功能之上,尽管 BLE 规范定义了这两者之间的层次结构(中间有一些层),但在代码中它们似乎完全独立于彼此.

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

正如我之前所说,并未完全考虑最小/最大值。所以当我将它设置为 6/10 时,我得到 11,当我将它设置为 6/50 时,我得到 60。这对我的口味来说有点太不确定了,我更喜欢直接改变连接间隔的函数给出一个几乎被忽略的范围。此外,我必须使用硬编码的魔数(Magic Number) 64 这一事实让我很不爽。我实际上可以在嵌入式设备端控制连接间隔,但我希望在客户端应用程序端进行控制。

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

最佳答案

在官方的dbus API中,没有改变连接参数的方法。 (参见 https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/gatt-api.txthttps://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/device-api.txt )。因此,关键是从外围设备发送连接参数更新请求。您当然可以尝试发送原始 hci 命令,但这有点“hacky”并且不能保证不会弄乱 BlueZ 守护进程。

如果您想讨论 BlueZ 的功能,例如连接参数更新请求 api,您应该在 BlueZ 邮件列表 (http://www.bluez.org/contact/) 而不是在这里讨论。

关于linux - 在基于 Bluez 的面向 GATT 的应用程序中更改连接间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45737594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com