void Enable(uint8_t inst_id, bool enable, MultiAdvCb cb, uint16_t duration, uint8_t maxExtAdvEvents, MultiAdvCb timeout_cb) override { VLOG(1) << __func__ << " inst_id: " << +inst_id; if (inst_id >= inst_count) { LOG(ERROR) << "bad instance id " << +inst_id; return; } AdvertisingInstance* p_inst = &adv_inst[inst_id]; VLOG(1) << __func__ << " enable: " << enable << ", duration: " << +duration; if (!p_inst->in_use) { LOG(ERROR) << "Invalid or no active instance"; cb.Run(BTM_BLE_MULTI_ADV_FAILURE); return; } if (enable && (duration || maxExtAdvEvents)) { p_inst->timeout_cb = std::move(timeout_cb); } p_inst->duration = duration; p_inst->maxExtAdvEvents = maxExtAdvEvents; if (enable && p_inst->address_update_required) { p_inst->address_update_required = false; ConfigureRpa(p_inst, base::Bind(&BleAdvertisingManagerImpl::EnableFinish, weak_factory_.GetWeakPtr(), p_inst, enable, std::move(cb))); return; } EnableFinish(p_inst, enable, std::move(cb), 0); }
时间: 2024-03-29 08:40:33 浏览: 105
这段代码是一个 BLE 广播管理器的 Enable 函数。该函数用于启用或禁用指定实例的广播,并支持设置广播的持续时间、最大事件数和超时回调函数。
具体解释如下:
- 首先,函数接受四个参数:实例 ID、启用/禁用标志、广播持续时间、最大事件数和超时回调函数。
- 接下来,通过 inst_id 获取 AdvertisingInstance 对象指针 p_inst,用于存储广播实例的相关信息。
- 然后,检查 p_inst 是否已经被使用。如果没有被使用,直接返回错误信息,并调用回调函数 cb。
- 如果启用广播并且设置了持续时间或最大事件数,则将超时回调函数 timeout_cb 移动到 p_inst->timeout_cb 中。
- 接着,设置广播持续时间和最大事件数,并检查是否需要更新随机地址。如果需要,则调用 ConfigureRpa 函数更新随机地址,并在更新完成后调用 EnableFinish 函数完成启用广播的操作。
- 如果不需要更新随机地址,则直接调用 EnableFinish 函数完成启用广播的操作。其中,该函数将根据 enable 参数决定是启用广播还是停止广播,并调用回调函数 cb 通知结果。如果启用广播时设置了持续时间或最大事件数,则在广播结束后调用超时回调函数。
阅读全文