diff --git a/src/nimble/nimble/host/store/config/src/ble_store_nvs.c b/src/nimble/nimble/host/store/config/src/ble_store_nvs.c index 9829b352e..dc7740941 100644 --- a/src/nimble/nimble/host/store/config/src/ble_store_nvs.c +++ b/src/nimble/nimble/host/store/config/src/ble_store_nvs.c @@ -42,7 +42,7 @@ #define NIMBLE_NVS_CCCD_SEC_KEY "cccd_sec" #define NIMBLE_NVS_CSFC_SEC_KEY "csfc_sec" #define NIMBLE_NVS_PEER_RECORDS_KEY "p_dev_rec" -#define NIMBLE_NVS_NAMESPACE "nimble_bond" +#define NIMBLE_NVS_DEFAULT_NAMESPACE "nimble_bond" #if MYNEWT_VAL(ENC_ADV_DATA) #define NIMBLE_NVS_EAD_SEC_KEY "ead_sec" @@ -53,11 +53,31 @@ typedef uint32_t nvs_handle_t; static const char *LOG_TAG = "NIMBLE_NVS"; +static char nimble_nvs_namespace_buf[NIMBLE_NVS_STR_NAME_MAX_LEN]; +static const char *NIMBLE_NVS_NAMESPACE = NIMBLE_NVS_DEFAULT_NAMESPACE; /***************************************************************************** * $ MISC * *****************************************************************************/ +void +set_nimble_nvs_namespace(const char *ns) +{ + if (ns == NULL) { + NIMBLE_NVS_NAMESPACE = NIMBLE_NVS_DEFAULT_NAMESPACE; + return; + } + + if (strlen(ns) < NIMBLE_NVS_STR_NAME_MAX_LEN) { + strncpy(nimble_nvs_namespace_buf, ns, NIMBLE_NVS_STR_NAME_MAX_LEN - 1); + nimble_nvs_namespace_buf[NIMBLE_NVS_STR_NAME_MAX_LEN - 1] = '\0'; + NIMBLE_NVS_NAMESPACE = nimble_nvs_namespace_buf; + } else { + ESP_LOGE(LOG_TAG, "Namespace string is too long, using default namespace"); + NIMBLE_NVS_NAMESPACE = NIMBLE_NVS_DEFAULT_NAMESPACE; + } +} + static void get_nvs_key_string(int obj_type, int index, char *key_string) { diff --git a/src/nimconfig.h b/src/nimconfig.h index 0dcc9a0c7..22cd93abe 100644 --- a/src/nimconfig.h +++ b/src/nimconfig.h @@ -190,6 +190,10 @@ # define MYNEWT_VAL_BLE_HCI_VS (0) # endif +# ifdef __cplusplus +extern "C" void set_nimble_nvs_namespace(const char *ns); +# endif + #else // !ESP_PLATFORM # if defined(NRF51) # include "syscfg/devcfg/nrf51cfg.h"