Device: nRF52832
SoftDevice: S132, 7.0.1
SDK: 16.0.0
I want change DEVICE_NAME by nRF Connect APP, then I add below code, but I found it die here "wait_for_flash_ready".
Can't call nrf_fstorage_write functions in ble_evt_handler function?
Or is there a better way to modify the Bluetooth broadcast name?
Many thanks and best regards!
John
static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context) { ret_code_t err_code; switch (p_ble_evt->header.evt_id) { //Above omitted case BLE_GAP_EVT_DISCONNECTED: NRF_LOG_INFO("Disconnected"); bsp_board_led_off(CONNECTED_LED); m_conn_handle = BLE_CONN_HANDLE_INVALID; //err_code = app_button_disable(); //APP_ERROR_CHECK(err_code); if (name_change_flag == 1) { advertising_stop(&m_advertising); gap_params_init(); advertising_init(); name_change_flag = 0; } advertising_start(); break; //Add case BLE_GATTS_EVT_WRITE: NRF_LOG_INFO("Enter BLE_GATTS_EVT_WRITE."); if (p_ble_evt->evt.gatts_evt.params.write.uuid.uuid == BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME) { for(uint32_t counter=0;counter<p_ble_evt->evt.gatts_evt.params.write.len;counter++) { NRF_LOG_INFO("Get Server BLE_GATTS_EVT_WRITE Data."); CUSTOM_DEVICE_NAME[counter] = p_ble_evt->evt.gatts_evt.params.write.data[counter]; } err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); //store data to flash name_store(CUSTOM_DEVICE_NAME); NRF_LOG_WARNING("System reset"); NVIC_SystemReset(); } break; default: // No implementation needed. break; } }
void name_store(uint8_t *data) { ret_code_t rc; uint8_t *pDataRx; uint32_t str_data; uint8_t i; NRF_LOG_INFO("BLE Name Store Start!"); rc = nrf_fstorage_write(&fstorage, 0x3e100, &CUSTOM_DEVICE_NAME, 8, NULL); APP_ERROR_CHECK(rc); name_change_flag = 1; NRF_LOG_INFO("BLE Name Writing!"); //wait write flash finish wait_for_flash_ready(&fstorage);//Error while loop NRF_LOG_INFO("BLE Name Store End!"); }