Hi all,

Are there any pointers/documentation for storing NIMBLE bond information in NVS memory?

I tried to quickly implement simple application by modifying '*ble_store_ram.c*'. I modified /ble_hs_cfg.store_read_cb/store_write_cb/store_delete_cb/ callbacks according to the requirement. I find this much of change is not sufficient to get NVS bond stored in NVS as I am continuously getting disconnect HCI event.

FYI, I am putting snippet of my code for each of these 3 callbacks which will help you understand the changes I have made.

1.**/*ble_hs_cfg.store_read_cb* :
/

/case BLE_STORE_OBJ_TYPE_OUR_SEC:
        nvs_open("nimble_bond", NVS_READWRITE, &nimble_handle);

        BLE_HS_LOG(DEBUG, "looking up our sec; ");
        err = nvs_get_blob(nimble_handle, "our_sec_key", NULL, &required_size);
        if (err != ESP_OK && err != ESP_ERR_NVS_NOT_FOUND) return err;
        if (required_size == 0) {
            nvs_close(nimble_handle);
            return BLE_HS_ENOENT;
        } else {
            struct ble_store_key_sec* our_sec_key = malloc(required_size);
            err = nvs_get_blob(nimble_handle, "our_sec_key", our_sec_key, &required_size);
            if (err != ESP_OK) {
                free(our_sec_key);
                return err;
            }

            if (ble_addr_cmp(&key->sec.peer_addr, BLE_ADDR_ANY)) {
                if (ble_addr_cmp(&our_sec_key->peer_addr, &key->sec.peer_addr)){             err = nvs_get_blob(nimble_handle, "our_sec", NULL, &required_size);
            if (err != ESP_OK && err != ESP_ERR_NVS_NOT_FOUND) return err;

            struct ble_store_value_sec* our_sec = malloc(required_size);
            err = nvs_get_blob(nimble_handle, "our_sec", our_sec, &required_size);
            if (err != ESP_OK) {
                free(our_sec);
                return err;
            }

            memcpy(&value->sec, our_sec, required_size);
            free(our_sec);
                }
            }

            free(our_sec_key);
        }
        /* NVS Close */
        nvs_close(nimble_handle);

/

/2. ///*ble_hs_cfg.store_write_cb
*//

//case BLE_STORE_OBJ_TYPE_OUR_SEC:
        ble_store_key_from_value_sec(&key_sec, &val->sec);

        required_size = sizeof(struct ble_store_key_sec);
        err = nvs_set_blob(nimble_handle, "our_sec_key", &key_sec, required_size);
        required_size = sizeof(struct ble_store_value_sec);
        err = nvs_set_blob(nimble_handle, "our_sec", &val->sec, required_size);

        /* NVS Commit */
        err = nvs_commit(nimble_handle);
        if (err != ESP_OK) return err;
        /* NVS Close */
        nvs_close(nimble_handle);

        return 0;//

Regards

Prasad

Reply via email to