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