|
在不调整app_adv.c 的情况下在外部增加状态来轮询检测当前adv state, 通过调用 appm_adv_start 和 appm_adv_stop 来实现广播更新。
具体代码实现: enum {
APPM_ADV_UPDATE_STARTING = 1,
APPM_ADV_UPDATE_UPDATING,
APPM_ADV_UPDATE_FINISHED,
};
static uint32_t adv_update_state = APPM_ADV_UPDATE_FINISHED;
void appm_update_adv_pararm(uint8_t fast, uint32_t interval);
void adv_update_fsm(void)
{
log_debug("adv state next: %u\n", adv_update_state);
switch (adv_update_state)
{
case APPM_ADV_UPDATE_STARTING:
/* 停止之前的广播并删除活动对象。 */
appm_adv_stop(1);
adv_update_state = APPM_ADV_UPDATE_UPDATING;
log_debug("update stop adv\r\n");
break;
case APPM_ADV_UPDATE_UPDATING:
/* 轮询等待广播停止 */
if (appm_adv_get_state() == APP_ADV_STATE_IDLE) {
/* 1. 更新广播需要调整的参数: 参考 appm_advertising_init 调整新的广播参数 */
appm_update_adv_pararm(1, 0x200);
/* 2. 重新启动广播 */
appm_adv_start();
adv_update_state = APPM_ADV_UPDATE_FINISHED;
log_debug("update start adv\r\n");
} else {
log_debug("appm_adv_get_state: %u\r\n", appm_adv_get_state());
}
break;
case APPM_ADV_UPDATE_FINISHED:
break;
}
} |

