This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

not able to switch Advertise from connectable to non connectable

i am using ble_app_gatts example as beacon observer ,till 10 sec after powering up device i  need  connectable advertise after that period ,as i switch the advertising from connectable to non-Connectable i got error    ERROR 16 [NRF_ERROR_INVALID_ADDR]   from  sd_ble_gap_adv_set_configure().

my connectable and non Connectable advertising init are .


static void Nonconnectable_Advertise(void)
{
uint32_t err_code;
ble_advertising_init_t init;
ble_advdata_manuf_data_t manuf_specific_data1;
manuf_specific_data1.company_identifier =0xFFFF;
manuf_specific_data1.data.p_data = (uint8_t *)Tag_broadcastig_data;
manuf_specific_data1.data.size =BEACON_DATA_LENGTH;//APP_BEACON_INFO_LENGTH;
memset(&init, 0, sizeof(init));
// init.advdata.name_type = BLE_ADVDATA_SHORT_NAME;//BLE_ADVDATA_NO_NAME;
// init.advdata.short_name_len =2;
init.advdata.p_manuf_specific_data = &manuf_specific_data1; //p_manuf_specific_data
memset(&m_adv_params, 0, sizeof(m_adv_params));
m_adv_params.properties.type = BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED;//BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED;
m_adv_params.p_peer_addr = NULL; // Undirected advertisement.
m_adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; // allow the scan responce
m_adv_params.interval = NON_CONNECTABLE_ADV_INTERVAL;
m_adv_params.duration = 0; // Never time out.
err_code = ble_advdata_encode(&init.advdata, m_adv_data.adv_data.p_data, &m_adv_data.adv_data.len);
APP_ERROR_CHECK(err_code);

err_code = sd_ble_gap_adv_set_configure(&m_advertising.adv_handle, &m_adv_data, &m_adv_params);
APP_ERROR_CHECK(err_code);
// ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}

static void Nonconnectable_Advertise_start(void)
{
   ret_code_t err_code;
   err_code = sd_ble_gap_adv_start(m_advertising.adv_handle, APP_BLE_CONN_CFG_TAG);  
   APP_ERROR_CHECK(err_code);

}

static void ConnectableAdvertising_init(void)
{

uint32_t err_code;
ble_advertising_init_t init;
ble_advdata_manuf_data_t manuf_specific_data1; //
manuf_specific_data1.data.p_data = (uint8_t *) manufacture_data;
manuf_specific_data1.data.size = 9;
memset(&init, 0, sizeof(init));
init.advdata.name_type = BLE_ADVDATA_FULL_NAME;
init.advdata.include_appearance = false;
init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE;
init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
init.srdata.uuids_complete.p_uuids = m_adv_uuids;
init.advdata.p_manuf_specific_data = &manuf_specific_data1; //p_manuf_specific_data
init.config.ble_adv_fast_enabled = true;
init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
init.config.ble_adv_fast_timeout = APP_ADV_DURATION;
init.evt_handler = on_adv_evt;
err_code = ble_advertising_init(&m_advertising, &init);
APP_ERROR_CHECK(err_code);
ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);

}

static void ConnectableAdvertising_start(void)
{
      ret_code_t err_code;
     err_code = ble_advertising_start(&

     m_advertising,BLE_ADV_MODE_FAST);
     APP_ERROR_CHECK(err_code);

}

Related