BLE: Inject random static address during reset sequence.

pull/8998/head
Vincent Coubard 2018-12-07 12:35:20 +00:00
parent a36b04fde5
commit 20e0cd1b0e
2 changed files with 20 additions and 2 deletions

View File

@ -297,6 +297,21 @@ void NRFCordioHCIDriver::start_reset_sequence()
CordioHCIDriver::start_reset_sequence();
}
bool NRFCordioHCIDriver::get_random_static_address(ble::address_t& address)
{
/* Load address from nRF configuration. */
uint64_t devAddr = (((uint64_t)NRF_FICR->DEVICEADDR[0]) << 0) |
(((uint64_t)NRF_FICR->DEVICEADDR[1]) << 32);
for (size_t i = 0; i < address.size(); ++i) {
address[i] = devAddr >> (i * 8);
}
address[5] |= 0xC0; /* cf. "Static Address" (Vol C, Part 3, section 10.8.1) */
return true;
}
ble::vendor::cordio::CordioHCIDriver& ble_cordio_get_hci_driver() {
static NRFCordioHCITransportDriver transport_driver;
@ -328,6 +343,4 @@ void PlatformLoadBdAddress(uint8_t *pDevAddr)
pDevAddr[i] = devAddr >> (i * 8);
i++;
}
pDevAddr[5] |= 0xC0; /* cf. "Static Address" (Vol C, Part 3, section 10.8.1) */
}

View File

@ -59,6 +59,11 @@ public:
*/
//virtual void handle_reset_sequence(uint8_t *msg);
/**
* @copydoc cordio::CordioHCIDriver::get_random_static_address
*/
virtual bool get_random_static_address(ble::address_t& address);
private:
/**
* Initialize the chip.