extmod/modbluetooth: Allow using mp_hal_get_mac as a static address.

Generally a controller should either have its own public address hardcoded,
or loaded by the driver (e.g. cywbt43).

However, for a controller that has no public address where you still want a
long-term stable address, this allows you to use a static address generated
by the port.  Typically on STM32 this will be an LAA, but a board might
override this.
This commit is contained in:
Jim Mussared
2020-08-17 10:53:00 +10:00
committed by Damien George
parent 67d8139e2b
commit 52a2ce45de
2 changed files with 31 additions and 4 deletions

View File

@@ -157,10 +157,22 @@ STATIC bool has_public_address(void) {
STATIC void set_random_address(bool nrpa) {
int rc;
(void)rc;
DEBUG_printf("sync_cb: Generating random static address\n");
ble_addr_t addr;
rc = ble_hs_id_gen_rnd(nrpa ? 1 : 0, &addr);
assert(rc == 0);
#if MICROPY_BLUETOOTH_USE_MP_HAL_GET_MAC_STATIC_ADDRESS
if (!nrpa) {
DEBUG_printf("set_random_address: Generating static address using mp_hal_get_mac\n");
uint8_t hal_mac_addr[6];
mp_hal_get_mac(MP_HAL_MAC_BDADDR, hal_mac_addr);
addr = create_nimble_addr(BLE_ADDR_RANDOM, hal_mac_addr);
// Mark it as STATIC (not RPA or NRPA).
addr.val[5] |= 0xc0;
} else
#endif
{
DEBUG_printf("set_random_address: Generating random static address\n");
rc = ble_hs_id_gen_rnd(nrpa ? 1 : 0, &addr);
assert(rc == 0);
}
rc = ble_hs_id_set_rnd(addr.val);
assert(rc == 0);
rc = ble_hs_util_ensure_addr(1);