首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Raspberry Pi上设置gatttool的BLE连接超时?

如何在Raspberry Pi上设置gatttool的BLE连接超时?
EN

Stack Overflow用户
提问于 2015-02-03 12:28:49
回答 3查看 5.3K关注 0票数 2

我使用以下命令连接到蓝牙le外围设备:

  • gatttool -t随机-b xx:xx -I
  • 和连接

如果给定的MAC地址存在,我没有问题。

如果给定的MAC地址不存在,则gatttool尝试连接大约40秒,直到gatttool响应为“错误:连接错误:连接拒绝(111)”。

我的问题是,如何以及在何处更改gatttool的40秒连接超时?

EN

回答 3

Stack Overflow用户

发布于 2015-02-08 18:30:12

连接超时是在Linux内核(超时)的蓝牙模块中定义的,无法在用户空间中对其进行更改。(还有一个常数,超时,但我不认为它是用于此目的的。)但是,我认为,如果关闭连接或终止进程,内核应该发送正确的LE Create connection Cancel命令,以便在此后不久就可以连接到其他人。

票数 3
EN

Stack Overflow用户

发布于 2015-02-03 21:56:23

不幸的是,我不认为无论如何都要这样做,除非您想要更改gatttool代码。我以前看过,并可以在代码中看到gatttool执行阻塞套接字"connect“调用。

票数 1
EN

Stack Overflow用户

发布于 2016-05-02 22:54:08

如果您准备更改gatttool代码,则需要在Bluez中的连接套接字上添加超时。

当我编写GattLib以避免阻止重试时,我不得不做同样的解决方法。

您可以在以下提交中看到我的更改:https://github.com/labapart/gattlib/commit/ee58e4cb64af6c698dea1fabb5b6d5e0fc174883

但主要的变化是:

代码语言:javascript
复制
    if (setsockopt (sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
        fprintf(stderr, "l2cap_connect: Failed to setsockopt for receive timeout.\n");
        return -1;
    }

    if (setsockopt (sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
        fprintf(stderr, "l2cap_connect: Failed to setsockopt for sending timeout.\n");
        return -1;
    }

如果您想编写自己的代码,您可能对GattLib示例ble_scan感兴趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28298980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档