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.