|
|
楼主 |
发表于 2026-7-31 19:03:40
|
显示全部楼层
来自 广东广州
不是RF初始化的问题,在acl_peripheral_demo上做测试,使用TL3218开发板C1T335A20_V1_3 TL3218x-EVK64D 2024-09-09测试,app_config.h配置:
#define BLE_APP_PM_ENABLE 1
#define PM_DEEPSLEEP_RETENTION_ENABLE 0
两个按键,一个按键控制关闭广播,一个按键开启广播;重新开启广播后,不允许进入休眠,此时无法在NRF Connect上扫描到广播。若重启开启广播后,并且允许进入休眠则广播正常。
按键控制key_change_proc内:
key_type = CONSUMER_KEY;
u16 consumer_key;
if (key0 == CR_VOL_UP) { //volume up
consumer_key = MKEY_VOL_UP;
tlkapi_send_string_data(APP_KEY_LOG_EN, "[UI][KEY] send Vol +", 0, 0);
uaer_app_ble_start();
} else if (key0 == CR_VOL_DN) { //volume down
consumer_key = MKEY_VOL_DN;
tlkapi_send_string_data(APP_KEY_LOG_EN, "[UI][KEY] send Vol -", 0, 0);
user_app_ble_stop();
}
其中:
static uint8_t adv_on = FALSE;
void user_app_ble_stop(void)
{
blc_ll_setAdvEnable(BLC_ADV_DISABLE);
adv_on = FALSE;
}
void uaer_app_ble_start(void)
{
blc_ll_setAdvEnable(BLC_ADV_DISABLE);
blc_ll_setAdvData(tbl_advData, sizeof(tbl_advData));
blc_ll_setScanRspData(tbl_scanRsp, sizeof(tbl_scanRsp));
blc_ll_setAdvParam(ADV_INTERVAL_200MS, ADV_INTERVAL_200MS, ADV_TYPE_CONNECTABLE_UNDIRECTED, OWN_ADDRESS_PUBLIC, 0, NULL, BLT_ENABLE_ADV_ALL, ADV_FP_NONE);
blc_ll_setAdvEnable(BLC_ADV_ENABLE);
adv_on = TRUE;
}
休眠:
void app_process_power_management(void)
{
#if (BLE_APP_PM_ENABLE)
//Log needs to be output ASAP, and UART invalid after suspend. So Log disable sleep.
//User tasks can go into suspend, but no deep sleep. So we use manual latency.
if (tlkapi_debug_isBusy() || adv_on) {
blc_pm_setSleepMask(PM_SLEEP_DISABLE);
} else {
int user_task_flg = 0;
blc_pm_setSleepMask(PM_SLEEP_LEG_ADV | PM_SLEEP_ACL_PERIPHR);
#if (BLE_OTA_SERVER_ENABLE)
user_task_flg |= ota_is_working;
#endif
#if (UI_KEYBOARD_ENABLE)
user_task_flg |= user_task_flg || scan_pin_need || key_not_released;
#endif
blc_pm_setDeepsleepRetentionEnable(PM_DeepRetn_Disable);
if (blc_ll_isBleTaskIdle()) {
cpu_sleep_wakeup(SUSPEND_MODE, PM_WAKEUP_PAD, 0);
}
else if (user_task_flg) {
bls_pm_setManualLatency(0);
}
}
#endif
} |
|