mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-08 12:37:01 +03:00
Some instabilities to tackle. BT Ring buffer were taken out. DAC is crashing with stack overflow. So does A2DP after playing for a little while. This needs to be investigated.
180 lines
5.2 KiB
C
180 lines
5.2 KiB
C
#include "nvs_utilities.h"
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "esp_system.h"
|
|
#include "esp_log.h"
|
|
#include "esp_console.h"
|
|
#include "esp_vfs_dev.h"
|
|
#include "driver/uart.h"
|
|
#include "linenoise/linenoise.h"
|
|
#include "argtable3/argtable3.h"
|
|
#include "cmd_decl.h"
|
|
#include "esp_vfs_fat.h"
|
|
#include "nvs.h"
|
|
#include "nvs_flash.h"
|
|
|
|
extern char current_namespace[];
|
|
static const char * TAG = "platform_esp32";
|
|
|
|
esp_err_t store_nvs_value(nvs_type_t type, const char *key, void * data) {
|
|
if (type == NVS_TYPE_BLOB)
|
|
return ESP_ERR_NVS_TYPE_MISMATCH;
|
|
return store_nvs_value_len(type, key, data,0);
|
|
}
|
|
esp_err_t store_nvs_value_len(nvs_type_t type, const char *key, void * data,
|
|
size_t data_len) {
|
|
esp_err_t err;
|
|
nvs_handle nvs;
|
|
|
|
if (type == NVS_TYPE_ANY) {
|
|
return ESP_ERR_NVS_TYPE_MISMATCH;
|
|
}
|
|
|
|
err = nvs_open(current_namespace, NVS_READWRITE, &nvs);
|
|
if (err != ESP_OK) {
|
|
return err;
|
|
}
|
|
|
|
if (type == NVS_TYPE_I8) {
|
|
err = nvs_set_i8(nvs, key, *(int8_t *) data);
|
|
} else if (type == NVS_TYPE_U8) {
|
|
err = nvs_set_u8(nvs, key, *(uint8_t *) data);
|
|
} else if (type == NVS_TYPE_I16) {
|
|
err = nvs_set_i16(nvs, key, *(int16_t *) data);
|
|
} else if (type == NVS_TYPE_U16) {
|
|
err = nvs_set_u16(nvs, key, *(uint16_t *) data);
|
|
} else if (type == NVS_TYPE_I32) {
|
|
err = nvs_set_i32(nvs, key, *(int32_t *) data);
|
|
} else if (type == NVS_TYPE_U32) {
|
|
err = nvs_set_u32(nvs, key, *(uint32_t *) data);
|
|
} else if (type == NVS_TYPE_I64) {
|
|
err = nvs_set_i64(nvs, key, *(int64_t *) data);
|
|
} else if (type == NVS_TYPE_U64) {
|
|
err = nvs_set_u64(nvs, key, *(uint64_t *) data);
|
|
} else if (type == NVS_TYPE_STR) {
|
|
err = nvs_set_str(nvs, key, data);
|
|
} else if (type == NVS_TYPE_BLOB) {
|
|
err = nvs_set_blob(nvs, key, (void *) data, data_len);
|
|
}
|
|
if (err == ESP_OK) {
|
|
err = nvs_commit(nvs);
|
|
if (err == ESP_OK) {
|
|
ESP_LOGI(TAG, "Value stored under key '%s'", key);
|
|
}
|
|
}
|
|
nvs_close(nvs);
|
|
return err;
|
|
}
|
|
void * get_nvs_value_alloc(nvs_type_t type, const char *key) {
|
|
nvs_handle nvs;
|
|
esp_err_t err;
|
|
void * value=NULL;
|
|
|
|
err = nvs_open(current_namespace, NVS_READONLY, &nvs);
|
|
if (err != ESP_OK) {
|
|
return value;
|
|
}
|
|
|
|
if (type == NVS_TYPE_I8) {
|
|
value=malloc(sizeof(int8_t));
|
|
err = nvs_get_i8(nvs, key, (int8_t *) value);
|
|
printf("value found = %d\n",*(int8_t *)value);
|
|
} else if (type == NVS_TYPE_U8) {
|
|
value=malloc(sizeof(uint8_t));
|
|
err = nvs_get_u8(nvs, key, (uint8_t *) value);
|
|
printf("value found = %u\n",*(uint8_t *)value);
|
|
} else if (type == NVS_TYPE_I16) {
|
|
value=malloc(sizeof(int16_t));
|
|
err = nvs_get_i16(nvs, key, (int16_t *) value);
|
|
printf("value found = %d\n",*(int16_t *)value);
|
|
} else if (type == NVS_TYPE_U16) {
|
|
value=malloc(sizeof(uint16_t));
|
|
err = nvs_get_u16(nvs, key, (uint16_t *) value);
|
|
printf("value found = %u\n",*(uint16_t *)value);
|
|
} else if (type == NVS_TYPE_I32) {
|
|
value=malloc(sizeof(int32_t));
|
|
err = nvs_get_i32(nvs, key, (int32_t *) value);
|
|
} else if (type == NVS_TYPE_U32) {
|
|
value=malloc(sizeof(uint32_t));
|
|
err = nvs_get_u32(nvs, key, (uint32_t *) value);
|
|
} else if (type == NVS_TYPE_I64) {
|
|
value=malloc(sizeof(int64_t));
|
|
err = nvs_get_i64(nvs, key, (int64_t *) value);
|
|
} else if (type == NVS_TYPE_U64) {
|
|
value=malloc(sizeof(uint64_t));
|
|
err = nvs_get_u64(nvs, key, (uint64_t *) value);
|
|
} else if (type == NVS_TYPE_STR) {
|
|
size_t len;
|
|
if ((err = nvs_get_str(nvs, key, NULL, &len)) == ESP_OK) {
|
|
value=malloc(sizeof(len+1));
|
|
err = nvs_get_str(nvs, key, value, &len);
|
|
}
|
|
} else if (type == NVS_TYPE_BLOB) {
|
|
size_t len;
|
|
if ((err = nvs_get_blob(nvs, key, NULL, &len)) == ESP_OK) {
|
|
value=malloc(sizeof(len+1));
|
|
err = nvs_get_blob(nvs, key, value, &len);
|
|
}
|
|
}
|
|
if(err!=ESP_OK){
|
|
free(value);
|
|
value=NULL;
|
|
}
|
|
nvs_close(nvs);
|
|
return value;
|
|
}
|
|
esp_err_t get_nvs_value(nvs_type_t type, const char *key, void*value, const uint8_t buf_size) {
|
|
nvs_handle nvs;
|
|
esp_err_t err;
|
|
|
|
err = nvs_open(current_namespace, NVS_READONLY, &nvs);
|
|
if (err != ESP_OK) {
|
|
return err;
|
|
}
|
|
|
|
if (type == NVS_TYPE_I8) {
|
|
err = nvs_get_i8(nvs, key, (int8_t *) value);
|
|
} else if (type == NVS_TYPE_U8) {
|
|
err = nvs_get_u8(nvs, key, (uint8_t *) value);
|
|
} else if (type == NVS_TYPE_I16) {
|
|
err = nvs_get_i16(nvs, key, (int16_t *) value);
|
|
} else if (type == NVS_TYPE_U16) {
|
|
err = nvs_get_u16(nvs, key, (uint16_t *) value);
|
|
} else if (type == NVS_TYPE_I32) {
|
|
err = nvs_get_i32(nvs, key, (int32_t *) value);
|
|
} else if (type == NVS_TYPE_U32) {
|
|
err = nvs_get_u32(nvs, key, (uint32_t *) value);
|
|
} else if (type == NVS_TYPE_I64) {
|
|
err = nvs_get_i64(nvs, key, (int64_t *) value);
|
|
} else if (type == NVS_TYPE_U64) {
|
|
err = nvs_get_u64(nvs, key, (uint64_t *) value);
|
|
} else if (type == NVS_TYPE_STR) {
|
|
size_t len;
|
|
if ((err = nvs_get_str(nvs, key, NULL, &len)) == ESP_OK) {
|
|
if (len > buf_size) {
|
|
//ESP_LOGE("Error reading value for %s. Buffer size: %d, Value Length: %d", key, buf_size, len);
|
|
err = ESP_FAIL;
|
|
} else {
|
|
err = nvs_get_str(nvs, key, value, &len);
|
|
}
|
|
}
|
|
} else if (type == NVS_TYPE_BLOB) {
|
|
size_t len;
|
|
if ((err = nvs_get_blob(nvs, key, NULL, &len)) == ESP_OK) {
|
|
|
|
if (len > buf_size) {
|
|
//ESP_LOGE("Error reading value for %s. Buffer size: %d, Value Length: %d",
|
|
// key, buf_size, len);
|
|
err = ESP_FAIL;
|
|
} else {
|
|
err = nvs_get_blob(nvs, key, value, &len);
|
|
}
|
|
}
|
|
}
|
|
|
|
nvs_close(nvs);
|
|
return err;
|
|
}
|
|
|