首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查BLE广告是否已启用(HCI)

如何检查BLE广告是否已启用(HCI)
EN

Stack Overflow用户
提问于 2020-01-30 10:23:40
回答 1查看 559关注 0票数 2

可以使用HCI_LE_Set_Advertising_Enable1命令启用布尔广告,如果0x00命令成功,则返回状态0x00;如果命令失败,则返回状态代码0x01 to 0xFF2。

如果广告已经启用(例如第二次调用此命令,并将Advertising_Enable参数设置为0x01),则此命令或HCI_LE_Set_Advertising_Data命令将返回状态0x0C (Command Disallowed)

这方面(至少)有两个问题:

  • 启用已启用的广告可能会导致随机地址的更改。当广告已经被禁用时,禁用它没有任何效果。1
  • BlueZ堆栈在大多数HCI库函数的末尾包含以下代码: if (status) { errno = EIO;返回-1;} 这将导致hci_le_set_advertise_enable函数返回泛型失败代码-1并将errno设置为EIO,这与任何其他BlueZ错误、HCI错误或实际IO错误(HCI层使用UART)都没有区别。

如何检查LE广告是否已启用以执行安全/严格的错误处理?我找不到在BT核心规格中获取广告状态的任何命令。我不能依赖这样的东西

代码语言:javascript
复制
if ((rc == -1) && (errno == EIO)) {
    /* Actually OK, advertising is already enabled */
    return 0;
}

谢谢。

参考文献:

  • 1 5.2第4卷E部分7.8.9节
  • 2 BT CS 5.2卷1 F部分,控制器错误码
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-31 23:54:37

这个想法是,主机端的蓝牙堆栈应该知道它是否已经开始做广告了。它应该是这样工作的。如果您手动绕过主机端的蓝牙堆栈(除非您正在调试或其他什么),发送您自己的hci命令,那么您不可能知道。

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

https://stackoverflow.com/questions/59983789

复制
相关文章

相似问题

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