Hello everyone,
I would like to change the name of my device with sd_ble_gap_device_name_set (). But the resulted name in the nRF Connect app is always "N/A".
Here's my code :
/**@brief Function for initializing the Advertising functionality. * * @details Encodes the required advertising data and passes it to the stack. * Also builds a structure to be passed to the stack when starting advertising. */ static void advertising_init(void) { uint32_t err_code; int8_t tx_power = 8; ble_gap_conn_sec_mode_t sec_mode; err_code = sd_ble_gap_tx_power_set(tx_power);//Set the radio's transmit power in dBm. sd_power_dcdc_mode_set(1); BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); err_code = sd_ble_gap_device_name_set(&sec_mode, (const uint8_t *) DEVICE_NAME, strlen(DEVICE_NAME)); APP_ERROR_CHECK(err_code); BLE_data[0] = 0x1E; BLE_data[1] = BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA; //able to have 29 bytes for custom data err_code = sd_ble_gap_adv_data_set(BLE_data,sizeof(BLE_data),NULL,0); // Initialize advertising parameters (used when starting advertising). memset(&m_adv_params, 0, sizeof(m_adv_params)); m_adv_params.type = BLE_GAP_ADV_TYPE_ADV_NONCONN_IND; m_adv_params.p_peer_addr = NULL; // Undirected advertisement. m_adv_params.fp = BLE_GAP_ADV_FP_ANY; m_adv_params.interval = NON_CONNECTABLE_ADV_INTERVAL; m_adv_params.timeout = 0; // Never time out. } /**@brief Function for starting advertising. */ static void advertising_start(void) { ret_code_t err_code; err_code = sd_ble_gap_adv_start(&m_adv_params, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK(err_code); }
Edit :
If I configure the BLE packet by myself, it's working fine. The code looks like this :
memset(&BLE_data, 0, sizeof(BLE_data)); BLE_data[0] = 0x0B; // Short Local Name length BLE_data[1] = BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME;// Short Local Name type BLE_data[2] = 'H'; BLE_data[3] = 'E'; BLE_data[4] = 'R'; BLE_data[5] = 'E'; BLE_data[6] = '''; BLE_data[7] = 'S'; BLE_data[8] = 'N'; BLE_data[9] = 'A'; BLE_data[10] ='M'; BLE_data[11] ='E'; BLE_data[12] = 0x04; //Specific data length BLE_data[13] = BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA; //Specific data type BLE_data[14] = 0xAA; BLE_data[15] = 0xBB; BLE_data[16] = 0xCC; err_code = sd_ble_gap_adv_data_set(BLE_data,sizeof(BLE_data),NULL,0);
Indeed, I don't know what does the sd_ble_gap_device_name_set function. I don't found its source code anywhere. Anyone know ?
Sincerely,
Sylvain.