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

How to check if BLE advertisement is already enabled (HCI)

可以使用 HCI_LE_Set_Advertising_Enable[1] 命令启用 BLE 广告,如果 HCI_LE_Set_Advertising_Enable 命令成功 return 状态 0x00 或状态代码 0x01 to 0xFF[2] 如果命令失败。

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

这有(至少)两个问题:

如何检查 LE 广告是否已启用,以便能够执行 safe/strict 错误处理?我在 BT 核心规范中找不到 Get Advertising Status 的任何命令。我不能依赖

if ((rc == -1) && (errno == EIO)) {
    /* Actually OK, advertising is already enabled */
    return 0;
}

谢谢。

参考文献:

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