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

how to update the scan response data ?

I  refer the following the link .  https://devzone.nordicsemi.com/f/nordic-q-a/33606/updating-advertising-data-manuf-spec-data-in-sdk15

I understand the adv data update. I tried it .it is working as per the link. But I want to update the scanrsp_data. for that I want to know the  ble_advdata_encode() function parameters. 

What is the input parameters . How the input parameters are designed ?  I want to set  both advdata & scanrsp data. 

sd_ble_gap_adv_set_configure  ?  I  tried below code snipptes

static uint8_t m_enc_advdata[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; /**< Buffer for storing an encoded advertising set. */
static uint8_t m_enc_advdata1[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; /**< Buffer for storing an encoded advertising set. */
/**@brief Struct that contains pointers to the encoded advertising data. */
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_advdata1,
.len = BLE_GAP_ADV_SET_DATA_SIZE_MAX

}
};



ret_code_t err_code;

ble_advdata_t advdata;
ble_advdata_t srdata;

uint16_t len;
uint16_t sr_len; 

ble_advdata_manuf_data_t manuf_specific_data;
uint8_t ch_array[6] = {0};

err_code = sd_ble_gap_adv_stop(m_advertising.adv_handle);
NRF_LOG_INFO("sd_ble_gap_adv_stop: %d", err_code);
//APP_ERROR_CHECK(err_code);

#if 1
memset(&advdata, 0, sizeof(advdata)); 
manuf_specific_data.company_identifier = APP_COMPANY_IDENTIFIER;
manuf_specific_data.data.p_data = (uint8_t *) m_beacon_info11;
manuf_specific_data.data.size = APP_BEACON_INFO_LENGTH;

advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
advdata.p_manuf_specific_data = &manuf_specific_data;
#endif

ch_array[0] = 0xaa;
ch_array[1] = 0xaa;
ch_array[2] = 0x55;
ch_array[3] = 0xbb;
ch_array[4] = 0x55;
ch_array[5] = 0xaa;

service_data_array.service_uuid = 0x00ff; //16 bit UUID still TBD
service_data_array.data.size = 6; 
service_data_array.data.p_data = ch_array; 
srdata.service_data_count = 1; 
srdata.p_service_data_array = &service_data_array;

len = m_advertising.adv_data.adv_data.len;
sr_len = m_advertising.adv_data.scan_rsp_data.len;

NRF_LOG_INFO("Scan response data len : %d ",sr_len);

// err_code = ble_advdata_encode(&advdata, m_adv_data.adv_data.p_data, &len);
// APP_ERROR_CHECK(err_code);

err_code = ble_advdata_encode(&srdata,m_adv_data.scan_rsp_data.p_data, &sr_len);
APP_ERROR_CHECK(err_code);

err_code = sd_ble_gap_adv_set_configure(&m_advertising.adv_handle, &m_adv_data, NULL);
APP_ERROR_CHECK(err_code);

err_code = sd_ble_gap_adv_start(m_advertising.adv_handle, APP_BLE_CONN_CFG_TAG);
APP_ERROR_CHECK(err_code);

While loading the program . I get error NRF_ERROR_INVALID_PARAM  in err_code = ble_advdata_encode(&srdata,m_adv_data.scan_rsp_data.p_data, &sr_len);

APP_ERROR_CHECK(err_code);  function.  My  doubt  is  how  to this service data in the function.

Parents Reply Children
No Data
Related