I am trying to change the mac address of my device every time I advertise a packet. I have a callback on_ble_radio_active_evt where I update the address like this:
static void on_ble_radio_active_evt(bool radio_active) { if (radio_active) { bd_addr.addr_type = BLE_GAP_ADDR_TYPE_RANDOM_STATIC; bd_addr.addr[0] = (uint8_t)NRF_FICR->DEVICEADDR[0]; bd_addr.addr[1] = (uint8_t)(NRF_FICR->DEVICEADDR[0] >> 8); bd_addr.addr[2] = (uint8_t)(NRF_FICR->DEVICEADDR[0] >> 16) + count; bd_addr.addr[3] = (uint8_t)(NRF_FICR->DEVICEADDR[0] >> 24); bd_addr.addr[4] = (uint8_t)(NRF_FICR->DEVICEADDR[1]); bd_addr.addr[5] = (uint8_t)(NRF_FICR->DEVICEADDR[1] >> 8) | 0xc0; err_code = sd_ble_gap_addr_set(&bd_addr); // some custom data append_advertisement_data(&advdata); err_code = ble_advdata_set(&advdata, NULL); } }
but I get an error 8 ie NRF_ERROR_INVALID_STATE, which says Im not allowed to change the mac address in this state. How can I get around this error?