加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

使用Linux和Bluez 5.0的多个BLE连接

发布时间:2020-12-26 04:37:03 所属栏目:Linux 来源:网络整理
导读:我目前正在尝试使用BlueZ 5.0和 Linux连接到多个BLE设备.我有一个主机BLE适配器,我修改了gatttool连接并执行此功能.如果我运行修改后的gatttool的实例,我成功连接并接收来自BLE设备的通知数据.如果我运行修改后的gatttool的另一个实例并连接到另一个BLE设

我目前正在尝试使用BlueZ 5.0和 Linux连接到多个BLE设备.我有一个主机BLE适配器,我修改了gatttool连接并执行此功能.如果我运行修改后的gatttool的实例,我成功连接并接收来自BLE设备的通知数据.如果我运行修改后的gatttool的另一个实例并连接到另一个BLE设备,则此应用程序开始从两个BLE设备接收通知数据,并且初始应用程序不再接收任何数据.我相信这是由于套接字设置,其中两个应用程序都将其套接字配置为相同的地址和PSM(最新的实例接收数据而另一个实例是饥饿的).有没有办法防止这种情况?理想情况下,我希望一个应用程序连接到多个设备.我假设应用程序只能有一个套接字,因为多个套接字与上面的多个实例具有相同的问题.我的BLE设备是TI CC2540密钥卡,用作心率监视器.

解决方法

我开始回答所以我可以有更多的空间……

我正在使用Python和C的组合来使我的代码工作,所以我的“代码”可能看起来很有趣,因为它可能来自其中之一.另外,我使用Bluez 4,因为5不支持我正在使用的内核.如果有问题请告诉我,我可以澄清一下.

似乎有几种做法,但我最终为不同的任务打开了单独的套接字.您可以打开一个插槽,然后设置套接字选项以进行过滤,您应该在一个地方获取所有数据包.然而,这是我最初的做法,我发现我的连接会在几秒钟内死亡.

为了扫描连接,我打开了一个套接字(AF_BLUETOOTH,SOCK_RAW,BTPROTO_HCI),然后在设备0上进行了绑定.(有一个名为hci_get_route的函数来获取可用的设备编号)然后可以调用hci_le_set_scan_parameters来设置选项,setsockopt(SOL_HCI,HCI_FILTER),过滤)获得LE扫描事件,然后调用hci_le_set_scan_enable打开扫描.

每个设备连接都使用一个套接字(AF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_L2CAP),然后通过在套接字上调用具有特定设备地址的struct sockaddr_l2来连接到特定设备.在该套接字上,您应该只从该设备获取数据包. (一个警告……我发现我的加密狗在进行主动扫描时不允许连接..我必须在连接之前暂时将其关闭然后重新打开.否则我从errno得到一个BUSY错误)

在说了所有这些之后,虽然……我认为你应该在Bluez 5中做所有事情的方式是使用DBUS.不幸的是,这对我所做的事情来说并不是一个真正的选择.我提到的功能是在共享库中,默认情况下显然没有安装在5中(您必须明确要求使用configure安装它).他们默认停止安装共享库,因为他们希望鼓励人们使用DBUS.

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读