可以使用HCI_LE_Set_Advertising_Enable1命令启用布尔广告,如果0x00命令成功,则返回状态0x00;如果命令失败,则返回状态代码0x01 to 0xFF2。
如果广告已经启用(例如第二次调用此命令,并将Advertising_Enable参数设置为0x01),则此命令或HCI_LE_Set_Advertising_Data命令将返回状态0x0C (Command Disallowed)。
这方面(至少)有两个问题:
hci_le_set_advertise_enable函数返回泛型失败代码-1并将errno设置为EIO,这与任何其他BlueZ错误、HCI错误或实际IO错误(HCI层使用UART)都没有区别。如何检查LE广告是否已启用以执行安全/严格的错误处理?我找不到在BT核心规格中获取广告状态的任何命令。我不能依赖这样的东西
if ((rc == -1) && (errno == EIO)) {
/* Actually OK, advertising is already enabled */
return 0;
}谢谢。
参考文献:
发布于 2020-01-31 23:54:37
这个想法是,主机端的蓝牙堆栈应该知道它是否已经开始做广告了。它应该是这样工作的。如果您手动绕过主机端的蓝牙堆栈(除非您正在调试或其他什么),发送您自己的hci命令,那么您不可能知道。
https://stackoverflow.com/questions/59983789
复制相似问题