Dear all,
I have been struggling with updating my advertisement data package in SDK15. Using Jimmy Wongs's example (https://github.com/jimmywong2003/nrf5-modify-device-parameter-through-host/blob/modify_non_connectable_advertising/ble_app_change_advertising_example/main.c) and after modifying it accordingly, I was able to get the result I wanted out of it.
The working part is the following:
static uint8_t m_enc_advdata[BLE_GAP_ADV_SET_DATA_SIZE_MAX] = { 02, 0x01, 0x06, //flags 0x11, 0xFF, 0x59, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x01, 0x02, 0x03, }; static uint8_t m_enc_rspdata[BLE_GAP_ADV_SET_DATA_SIZE_MAX] = { 02, 0x01, 0x04, //flags 0x11, 0xFF, 0x59, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x01, 0x02, 0x03, }; static ble_gap_adv_data_t m_adv_data = { .adv_data = { .p_data = m_enc_advdata, .len = BLE_GAP_ADV_SET_DATA_SIZE_MAX }, .scan_rsp_data = { .p_data = m_enc_rspdata, .len = BLE_GAP_ADV_SET_DATA_SIZE_MAX } }; static void ble_stack_init(void) { ret_code_t err_code; err_code = nrf_sdh_enable_request(); APP_ERROR_CHECK(err_code); // Configure the BLE stack using the default settings. // Fetch the start address of the application RAM. uint32_t ram_start = 0; err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start); APP_ERROR_CHECK(err_code); // Enable BLE stack. err_code = nrf_sdh_ble_enable(&ram_start); APP_ERROR_CHECK(err_code); } static void non_connectable_advertising_init(void) { uint32_t err_code; m_adv_params.properties.type = BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED; m_adv_params.interval = NON_CONNECTABLE_ADV_INTERVAL; m_adv_params.duration = APP_ADV_DURATION; m_adv_data.adv_data.p_data = m_hardcode_enc_advdata; m_adv_data.adv_data.len = 0x1F; // hardcode to 31 bytes m_adv_data.scan_rsp_data.p_data = m_hardcode_enc_rspdata; m_adv_data.scan_rsp_data.len = 0; err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, &m_adv_params); APP_ERROR_CHECK(err_code); } int main(void) { uint32_t err_code = NRF_SUCCESS; lfclk_config(); rtc_config(); saadc_init(); nrf_drv_saadc_sample(); measure_battery(); wdt_init(); gpio_init(); power_management_init(); ble_stack_init(); sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE); sd_power_mode_set(NRF_POWER_MODE_LOWPWR); non_connectable_advertising_init(); non_connect_advertising_start(); printf("Advdatasize %d\n", sizeof(m_hardcode_enc_advdata)); printf("Rspdatasize %d\n", sizeof(m_hardcode_enc_rspdata)); printf("My_tag tag started!\n"); // Enter main loop. for (;;) { NRF_WDT->RR[0] = WDT_RR_RR_Reload; measure_battery(); idle_state_handle(); NRF_WDT->RR[0] = WDT_RR_RR_Reload; } }
But things go wrong when I change the length of the response package to a non-0 value. By wrong I mean that when I have the debugger connected the code jumps to app_error_handler.gcc.c (line 49) and from there to app_error_weak.c (line 100). The error occurs on err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, &m_adv_params);
And it is NRF_ERROR_INVALID_PARAM. But I am not sure which parameter is wrong. Or how is the correct configuration for that matter.
Any help/indication would be very helpful.
Thank you very much