Skip to content

Commit 20e0cd1

Browse files
committed
BLE: Inject random static address during reset sequence.
1 parent a36b04f commit 20e0cd1

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NORDIC_CORDIO/TARGET_NRF5x/NRFCordioHCIDriver.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,21 @@ void NRFCordioHCIDriver::start_reset_sequence()
297297
CordioHCIDriver::start_reset_sequence();
298298
}
299299

300+
bool NRFCordioHCIDriver::get_random_static_address(ble::address_t& address)
301+
{
302+
/* Load address from nRF configuration. */
303+
uint64_t devAddr = (((uint64_t)NRF_FICR->DEVICEADDR[0]) << 0) |
304+
(((uint64_t)NRF_FICR->DEVICEADDR[1]) << 32);
305+
306+
for (size_t i = 0; i < address.size(); ++i) {
307+
address[i] = devAddr >> (i * 8);
308+
}
309+
310+
address[5] |= 0xC0; /* cf. "Static Address" (Vol C, Part 3, section 10.8.1) */
311+
return true;
312+
}
313+
314+
300315
ble::vendor::cordio::CordioHCIDriver& ble_cordio_get_hci_driver() {
301316
static NRFCordioHCITransportDriver transport_driver;
302317

@@ -328,6 +343,4 @@ void PlatformLoadBdAddress(uint8_t *pDevAddr)
328343
pDevAddr[i] = devAddr >> (i * 8);
329344
i++;
330345
}
331-
332-
pDevAddr[5] |= 0xC0; /* cf. "Static Address" (Vol C, Part 3, section 10.8.1) */
333346
}

features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NORDIC_CORDIO/TARGET_NRF5x/NRFCordioHCIDriver.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ class NRFCordioHCIDriver : public cordio::CordioHCIDriver {
5959
*/
6060
//virtual void handle_reset_sequence(uint8_t *msg);
6161

62+
/**
63+
* @copydoc cordio::CordioHCIDriver::get_random_static_address
64+
*/
65+
virtual bool get_random_static_address(ble::address_t& address);
66+
6267
private:
6368
/**
6469
* Initialize the chip.

0 commit comments

Comments
 (0)