Unable to advertise after connection

Hi,

We are working on migrating our SES SDK based code to NCS Zephyr.
Our board is nrf52833 based.
We have set up advertising for 1 Minute every time (via KCONFIG flag CONFIG_BT_LIM_ADV_TIMEOUT=60).
In addition (simply as a test) - we check via RTC if 2 minutes have passed since the last advertisement, and attempt to advertise again if so.
As long as the central does not connect - this continues successfully.
However - after the central connects (terminating with LOCAL_HOST_DISCONNECT from the central end, and therefore  REMOTE_DISCONNECT from the zephyr peripheral), subsequent advertisements all fails with:

00> [00:06:15.120,086] <wrn> bt_hci_core: bt_hci_cmd_send_sync: opcode 0x200a status 0x12
00> [00:06:15.120,117] <err> bt_adv: bt_le_adv_start_legacy: Failed to start advertiser
00> Advertising failed to start (err -5)

Our adv (from example code) is:

    int err;

    struct bt_le_adv_param *params = BT_LE_ADV_CONN_NAME;
    params->options = params->options;

    err = bt_le_adv_start(params, ad, ARRAY_SIZE(ad), NULL, 0);
where ad is:
static const struct bt_data ad[] = {
    BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR | BT_LE_AD_LIMITED)),
    BT_DATA_BYTES(BT_DATA_UUID16_ALL,
                  BT_UUID_16_ENCODE(BT_UUID_BAS_VAL),
                  BT_UUID_16_ENCODE(BT_UUID_DIS_VAL)),
    BT_DATA_BYTES(BT_DATA_UUID128_ALL, BT_UUID_CUSTOM_SERVICE_VAL)};
In addition - to stop the continuous advertising after disconnect, we have opted to stop adv after disconnect (which succeeds), via:
    int err = bt_le_adv_stop();
    if(err)
    {
        printk("Failed to stop adv after disconnect (%d)\n",err);
    }
At first, we had added BLE_ADV_OPT_ONCE to the adv params, but thinking that this was the cause of this current bug, we had removed it.
Is something configured incorrectly?
Thanks!
Roi
Parents Reply Children
Related