Update BLE extended advertisement data

Hello,

I would like to use the BLE5 Advertising Extension to be able to transmit more data during advertisements.
The extended advertisement works but, on the other hand, I cannot update the data sent in the advertisement: the function "bt_le_adv_update_data(...)" returns me the error -EINVAL because "adv" is NULL...
Do you know how to fix this problem?

Here is a summary of my code:

//Defines:
#define DEFAULT_DEVICE_NAME CONFIG_BT_DEVICE_NAME
#define DEVICE_NAME_LEN (sizeof(DEFAULT_DEVICE_NAME) - 1)
#define MY_BT_GAP_ADV_FAST_INT_MIN               0x0280  /* 400 ms   */
#define MY_BT_GAP_ADV_FAST_INT_MAX               0x03c0  /* 600 ms   */
#define DEFAULT_ADV_IDX 0

//Variables:
char advertising_name[32] = {DEFAULT_DEVICE_NAME};
struct ble_advdata_manuf_data_t
{
	uint16_t company_identifier;
	uint8_t manuf_data[9];
};
struct ble_advdata_manuf_data_t manuf_data = {.company_identifier = IMI_CONPANY_ID};
struct bt_data default_ad[] = { //Data in advertisements paquets
	BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
	BT_DATA(BT_DATA_NAME_COMPLETE, advertising_name, (sizeof(advertising_name) - 1)),//BT_DATA(BT_DATA_NAME_COMPLETE, DEFAULT_DEVICE_NAME, DEVICE_NAME_LEN),
	BT_DATA_BYTES(BT_DATA_UUID128_ALL, BT_UUID_IMI_US_VAL),
	BT_DATA(BT_DATA_MANUFACTURER_DATA, &manuf_data, sizeof(manuf_data)),
};
static const struct bt_le_adv_param *adv_param = BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_EXT_ADV,	MY_BT_GAP_ADV_FAST_INT_MIN, MY_BT_GAP_ADV_FAST_INT_MAX, NULL);
static struct bt_le_ext_adv *ext_adv[CONFIG_BT_EXT_ADV_MAX_ADV_SET];//CONFIG_BT_EXT_ADV_MAX_ADV_SET = 1

//Functions:
void advertise_init()
{
	...

	ret = bt_enable(NULL);
	if (ret) {
		LOG_ERR("Bluetooth initialization failed (error: %d)", ret);
		goto end;
	}

	ret = bt_set_name(CONFIG_BT_DEVICE_NAME);
	if (ret) {
		LOG_ERR("Failed to set device name (err %d)", ret);
		return ret;
	}

	ret = advertising_set_create(&ext_adv[DEFAULT_ADV_IDX], adv_param, default_ad, ARRAY_SIZE(default_ad), NULL, 0);
    if(ret!=0)
    {
        error = SDK_ERROR | (ret*(-1)); 
		LOG_ERR("Failed to start BLE advertising (error: %d)", ret);
		return error;
    }

    LOG_INF("BLE enabled!");
}

When I want to update my advertised data, I do:

...
ret = bt_set_name(p_advertising_data->cName);//Here the name shoud change for the test
ret = bt_le_adv_update_data(default_ad, ARRAY_SIZE(default_ad), NULL, 0);

I'm using the nRF Connect SDK V2.5.0.

Thank you

Related