Hi everyone,
My hw/sw configuration:
- nRF52840
- sdk 15.0.0
- softdevice: s140_nrf52_6.0.0
I would like to change the device name and update it in advertising packet, during a BLE connection.
void change_ble_device_name(uint8_t *device_name){ ble_gap_conn_sec_mode_t sec_mode; BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); uint32_t err_code = sd_ble_gap_device_name_set(&sec_mode, (const uint8_t *)device_name, strlen(device_name)); APP_ERROR_CHECK(err_code); /* Re-initialize advertising module */ advertising_init(); /* Start advertising */ ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST); APP_ERROR_CHECK(err_code); NRF_LOG_DEBUG("Ble name changed"); }
Reading this post:
https://devzone.nordicsemi.com/f/nordic-q-a/21702/renaming-device
I discovered that is sufficient to change device name using sd_ble_gap_device_name_set and re-init the advertising.
My advertising function:
static void advertising_init(void) { ret_code_t err_code; ble_advertising_init_t init; memset(&init, 0, sizeof(init)); /* Advertising Data */ init.advdata.name_type = BLE_ADVDATA_FULL_NAME; init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; /* Scan Response Data */ 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.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); }
I tried this solution, but It doesn't work and ble_advertising_init returns NO error.
I spent a lot of time surfing Nordic DevZone forum, but I didn't find a working solution.
Could you help me, please?
Thanks