I'm trying to change advertised manufacturing data during advertisement after pressing a button on the nRF52840 DK board. Seen many examples using the call ble_advdata_set(). My set up does not recognize this function at all. I need to change both advertisement data and service data upon a button press.
My initialization code looks like this:
static void advertising_init(void)
{
ret_code_t err_code;
memset(&init, 0, sizeof(init));
init.advdata.name_type = BLE_ADVDATA_FULL_NAME;
init.advdata.include_appearance = true;
init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
init.advdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
init.advdata.uuids_complete.p_uuids = m_adv_uuids;
adv_manuf_data.company_identifier = 0x0059;
adv_manuf_data.data.p_data = (uint8_t *)&AdvData;
// adv_manuf_data.data.size = sizeof(AdvData);
adv_manuf_data.data.size = RI4_ADV_DATA_SIZE; // For reasons unknown, sizeof(AdvData) returns 8 even though the structure is packed.
init.advdata.p_manuf_specific_data = &adv_manuf_data;
init.config.ble_adv_fast_enabled = true;
init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
init.config.ble_adv_fast_timeout = APP_ADV_DURATION;
init.evt_handler = on_adv_evt;
err_code = ble_advertising_init(&m_advertising, &init);
APP_ERROR_CHECK(err_code);
ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}
Code to change the advertisement data after a button press looks like this:
{
ret_code_t err_code;
uint32_t Buffer=rand();
LastAlert.Severity=Buffer & 0x3FFF; // Alert severity peaks at 0x3FFF
LastAlert.Type=(Buffer >> 16) % 5; // Limiting to 0-4
AdvData.Flags|=IMPACT_STATUS_FLAG_ALERT;
err_code = ble_advdata_set(&(init.advdata),NULL);
APP_ERROR_CHECK(err_code);
}
Structures init and adv_manuf_data are global to allow them to be preserved.
The code will not compile with ble_advdata_set. It cannot find this function, yet I see it used all over examples here.