Switch between Public address and Static Random address.

Power-on reset will require pairing again.

I found this happening by doing bt_id_reset().

Is there a problem with the way the BD address is initialized?

How to initialize BD address:

    bt_enable(NULL);

    if (IS_ENABLED(CONFIG_BT_SETTINGS))
    {
        settings_load();
    }

    bt_addr_le_t get_addr[CONFIG_BT_ID_MAX];
    size_t count = CONFIG_BT_ID_MAX;
    memset(&get_addr, 0, sizeof(get_addr));

    bt_id_get(get_addr, &count);
    if(get_addr[BD_ADDRESS_INDEX_RANDOM].a.val[5] == 0 && get_addr[BD_ADDRESS_INDEX_RANDOM].a.val[4] == 0 &&
        get_addr[BD_ADDRESS_INDEX_RANDOM].a.val[3] == 0 && get_addr[BD_ADDRESS_INDEX_RANDOM].a.val[2] == 0 &&
        get_addr[BD_ADDRESS_INDEX_RANDOM].a.val[1] == 0 && get_addr[BD_ADDRESS_INDEX_RANDOM].a.val[0] == 0){
        bt_id_create(&addr, nullptr);
    }else{
        bt_id_reset(BD_ADDRESS_INDEX_RANDOM, &addr, nullptr);
    }

Build Option:

CONFIG_BT_SMP=1
CONFIG_BT_ID_MAX=2
CONFIG_BT_SETTINGS=1
CONFIG_BT_KEYS_OVERWRITE_OLDEST=1

Parents Reply Children
Related