From 48e8525ba97657c155167095a7f0361146c64ebb Mon Sep 17 00:00:00 2001 From: Philippe G Date: Thu, 1 Jul 2021 01:20:59 -0700 Subject: [PATCH] make equalizer a string + make sure output-i2s is exited - Can't really use BLOB (creates issue with HTTP visualizer) - Player was stuck after WiFi loss b/c with some race conditions, BT deinit crashes and creates the reboot wanted after 5*5 failures. But when BT does not crash, reboot was not happening and player was stuck with slimproto not exited and player not rebooted --- components/squeezelite/equalizer.c | 30 +++++++++++++++++++++-------- components/squeezelite/output_i2s.c | 5 +++-- main/esp_app_main.c | 3 +++ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/components/squeezelite/equalizer.c b/components/squeezelite/equalizer.c index f1d7f477..384f707c 100644 --- a/components/squeezelite/equalizer.c +++ b/components/squeezelite/equalizer.c @@ -8,7 +8,7 @@ * */ -#include "nvs_utilities.h" +#include "platform_config.h" #include "squeezelite.h" #include "equalizer.h" #include "esp_equalizer.h" @@ -27,13 +27,18 @@ static struct { * initialize equalizer */ void equalizer_init(void) { - s8_t *gain = get_nvs_value_alloc(NVS_TYPE_BLOB, "equalizer"); - - if (!gain) gain = calloc(EQ_BANDS, sizeof(*gain)); + s8_t gain[EQ_BANDS] = { }; + char *config = config_alloc_get(NVS_TYPE_STR, "equalizer"); + char *p = strtok(config, ", !"); + for (int i = 0; p && i < EQ_BANDS; i++) { + gain[i] = atoi(p); + p = strtok(NULL, ", :"); + } + + free(config); equalizer_update(gain); - free(gain); - + LOG_INFO("initializing equalizer"); } @@ -83,9 +88,18 @@ void equalizer_close(void) { * update equalizer gain */ void equalizer_update(s8_t *gain) { - store_nvs_value_len(NVS_TYPE_BLOB, "equalizer", gain, EQ_BANDS * sizeof(*gain)); + char config[EQ_BANDS * 4 + 1] = { }; + char *p = config; - for (int i = 0; i < EQ_BANDS; i++) equalizer.gain[i] = gain[i]; + for (int i = 0; i < EQ_BANDS; i++) { + equalizer.gain[i] = gain[i]; + if (gain[i] < 0) *p++ = '-'; + *p++ = (gain[i] / 10) + 0x30; + *p++ = (gain[i] % 10) + 0x30; + if (i < EQ_BANDS - 1) *p++ = ','; + } + + config_set_value(NVS_TYPE_STR, "equalizer", config); equalizer.update = true; } diff --git a/components/squeezelite/output_i2s.c b/components/squeezelite/output_i2s.c index b07b227e..2809bc15 100644 --- a/components/squeezelite/output_i2s.c +++ b/components/squeezelite/output_i2s.c @@ -573,10 +573,11 @@ static void output_thread_i2s(void *arg) { SET_MIN_MAX( TIME_MEASUREMENT_GET(timer_start),i2s_time); } - - vTaskDelete(NULL); + if (spdif.enabled) free(spdif.buf); ended = true; + + vTaskDelete(NULL); } /**************************************************************************************** diff --git a/main/esp_app_main.c b/main/esp_app_main.c index da0f1f6c..4a4d95d7 100644 --- a/main/esp_app_main.c +++ b/main/esp_app_main.c @@ -326,6 +326,9 @@ void register_default_nvs(){ ESP_LOGD(TAG,"Registering default value for key %s, value %s", "bypass_wm", "0"); config_set_default(NVS_TYPE_STR, "bypass_wm", "0", 0); + ESP_LOGD(TAG,"Registering default value for equalizer"); + config_set_default(NVS_TYPE_STR, "equalizer", "", 0); + ESP_LOGD(TAG,"Registering default Audio control board type %s, value ","actrls_config"); config_set_default(NVS_TYPE_STR, "actrls_config", "", 0);