Hi.
Environment : nrf52833, ncs v3.1.1
I am developing device that has PAwR Scanner Role and Extended Advertising for connecting Mobile Phone(nRF Connect APP).
PAwR is Fine. However when connect/disconnect several Times, bt_le_ext_adv_start return -12.
under code is prj.conf
## USER Config CONFIG_DTM_INCLUDE=y CONFIG_USER_LOG_ENABLE=n # LOG CONFIG_LOG=y CONFIG_RTT_CONSOLE=y CONFIG_USE_SEGGER_RTT=y CONFIG_LOG_DEFAULT_LEVEL=0 CONFIG_UART_CONSOLE=n CONFIG_CBPRINTF_FP_SUPPORT=y CONFIG_LOG_MODE_IMMEDIATE=y CONFIG_LOG_TIMESTAMP_64BIT=y ## DEBUG CONFIG_ASSERT=y CONFIG_RESET_ON_FATAL_ERROR=n CONFIG_DEBUG_THREAD_INFO=y CONFIG_DEBUG_OPTIMIZATIONS=y ## WATCH DOG CONFIG_WATCHDOG=y CONFIG_REBOOT=y ## Power Management CONFIG_PM_DEVICE=y CONFIG_PM_DEVICE_RUNTIME=y ##FLASH CONFIG_FLASH=y CONFIG_SOC_FLASH_NRF_UICR=y CONFIG_MPU_ALLOW_FLASH_WRITE=y ## UART CONFIG_SERIAL=y CONFIG_UART_ASYNC_API=y CONFIG_UART_USE_RUNTIME_CONFIGURE=y CONFIG_UART_CONSOLE=n ## AES CONFIG_NRF_SECURITY=y CONFIG_MBEDTLS_PSA_CRYPTO_C=y CONFIG_MBEDTLS_PSA_STATIC_KEY_SLOTS=y CONFIG_MBEDTLS_PSA_STATIC_KEY_SLOT_BUFFER_SIZE=32 CONFIG_PSA_WANT_GENERATE_RANDOM=y CONFIG_PSA_WANT_KEY_TYPE_AES=y CONFIG_PSA_WANT_ALG_CBC_PKCS7=y CONFIG_PSA_WANT_ALG_CCM=y ## BLE CONFIG_BT=y CONFIG_BT_PERIPHERAL=y CONFIG_BT_BUF_ACL_RX_SIZE=519 CONFIG_BT_BUF_ACL_TX_SIZE=519 CONFIG_BT_L2CAP_TX_MTU=512 CONFIG_BT_HCI_ERR_TO_STR=y CONFIG_BT_CTLR_DATA_LENGTH_MAX=251 CONFIG_BT_RX_STACK_SIZE=4096 CONFIG_BT_ID_MAX=3 CONFIG_BT_MAX_CONN=7 CONFIG_BT_CTLR_SDC_PERIPHERAL_COUNT=7 CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=n CONFIG_BT_USER_DATA_LEN_UPDATE=y CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y ## PAWR CONFIG_BT_OBSERVER=y CONFIG_BT_BROADCASTER=y CONFIG_BT_EXT_ADV=y CONFIG_BT_EXT_ADV_MAX_ADV_SET=5 CONFIG_BT_PER_ADV_SYNC=y CONFIG_BT_PER_ADV_SYNC_TRANSFER_SENDER=y CONFIG_BT_PER_ADV_SYNC_TRANSFER_RECEIVER=y CONFIG_BT_PER_ADV_SYNC_RSP=y CONFIG_BT_PER_ADV_SYNC_BUF_SIZE=255 CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=255 # #### BLE DTM START # #Configure assertions CONFIG_ASSERT=y CONFIG_ASSERT_NO_COND_INFO=y CONFIG_ASSERT_NO_MSG_INFO=y CONFIG_HW_STACK_PROTECTION=y # # Use necessary peripherals CONFIG_NRFX_TIMER0=y CONFIG_NRFX_TIMER1=y CONFIG_NRFX_TIMER2=y CONFIG_CLOCK_CONTROL=y CONFIG_FEM_AL_LIB=y
when increase CONFIG_BT_CTLR_SDC_PERIPHERAL_COUNT and Max_Conn, can more connect. but is is not solution.
I use create one ext adv. and reuse it.
I try restart extended advertising on recycled callback. and it execute that delayed after 3 seconds. delay execute function use k_work_schedule.
I checked Log about conn Ref Count. Count is normally increase and reduce when connected and disconnected
could you advice any solution?
start code is below
static void advStartRaw()
{
if (deviceInfo.advState)
return;
advParam.interval_min = deviceInfo.advInterval;
advParam.interval_max = deviceInfo.advInterval + 32; // + 20ms
int err = bt_le_ext_adv_set_data(extAdv, advData, ARRAY_SIZE(advData),
NULL, 0);
if (err)
{
LOG_INF("bt_le_ext_adv_set_data Fail %d", err);
return;
}
err = bt_le_ext_adv_update_param(extAdv, &advParam);
if (err)
{
LOG_INF("bt_le_ext_adv_update_param Fail %d", err);
return;
}
err = bt_le_ext_adv_start(extAdv, &extraStartAdvParam);
if (err)
{
LOG_INF("bt_le_ext_adv_start Fail %d", err);
return;
}
deviceInfo.advState = true;
LOG_INF("ADV Start");
}stop is below
static int advStopRaw()
{
if (!deviceInfo.advState)
return -1;
int err = bt_le_ext_adv_stop(extAdv);
if (err)
{
LOG_INF("BT ADV Stop Fail Code %d", err);
return err;
}
deviceInfo.advState = false;
LOG_INF("ADV Stop");
return 0;
}
onConnected is Below
static void onConnected(struct bt_conn *conn, uint8_t err)
{
if (err)
{
LOG_INF("Connection Error %d", err);
return;
}
advStopRaw();
connHandle = bt_conn_ref(conn);
connectedState = true;
deviceInfo.advState = false;
mtuSize = (int)bt_gatt_get_mtu(conn);
LOG_INF("Connected. Set MTU Size : %d", mtuSize);
bt_conn_le_param_update(conn, &updateConnParam);
}onDisconnected
static void onDisconnected(struct bt_conn *conn, uint8_t reason)
{
bt_conn_unref(conn);
connectedState = false;
connHandle = NULL;
//LOG_INF("Disconnected. Reason 0x%02X", reason);
// 0x19 Remote Term Conn
// 0x22 Local Term Conn
LOG_INF("Disconnected. Reason 0x%02x %s\n",reason, bt_hci_err_to_str(reason));
}