From d1dd27b7cb14387743df61cb7abef66ee6252e09 Mon Sep 17 00:00:00 2001 From: Philippe G Date: Wed, 19 Jan 2022 13:40:03 -0800 Subject: [PATCH] add Muse support --- build-scripts/I2S-4MFlash-sdkconfig.defaults | 2 +- build-scripts/SqueezeAmp-sdkconfig.defaults | 3 +- components/platform_config/platform_config.h | 5 +++ components/services/accessors.c | 6 --- components/services/battery.c | 28 ++++++------ components/targets/muse/muse.c | 7 +-- main/Kconfig.projbuild | 47 +++++++++++--------- 7 files changed, 51 insertions(+), 47 deletions(-) diff --git a/build-scripts/I2S-4MFlash-sdkconfig.defaults b/build-scripts/I2S-4MFlash-sdkconfig.defaults index 3b5a281b..d3914d3f 100644 --- a/build-scripts/I2S-4MFlash-sdkconfig.defaults +++ b/build-scripts/I2S-4MFlash-sdkconfig.defaults @@ -309,7 +309,7 @@ CONFIG_SPKFAULT_GPIO=-1 # # Battery measure # -CONFIG_BAT_CHANNEL=-1 +CONFIG_BAT_CONFIG="" # end of Battery measure CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -C 30 -W" diff --git a/build-scripts/SqueezeAmp-sdkconfig.defaults b/build-scripts/SqueezeAmp-sdkconfig.defaults index f3fc23f1..326bbbd7 100644 --- a/build-scripts/SqueezeAmp-sdkconfig.defaults +++ b/build-scripts/SqueezeAmp-sdkconfig.defaults @@ -269,8 +269,7 @@ CONFIG_JACK_GPIO=34 CONFIG_JACK_GPIO_LEVEL=0 CONFIG_SPKFAULT_GPIO=2 CONFIG_SPKFAULT_GPIO_LEVEL=0 -CONFIG_BAT_CHANNEL=7 -CONFIG_BAT_SCALE="20.24" +CONFIG_BAT_CONFIG="channel=7,scale=20.24,atten=0" CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -C 30 -W" # end of Squeezelite-ESP32 diff --git a/components/platform_config/platform_config.h b/components/platform_config/platform_config.h index cda90644..2df78a36 100644 --- a/components/platform_config/platform_config.h +++ b/components/platform_config/platform_config.h @@ -14,6 +14,11 @@ extern "C" { if ((__p = strcasestr(S, P)) && (__p = strchr(__p, C))) V = atoi(__p+1); \ } while (0) +#define PARSE_PARAM_FLOAT(S,P,C,V) do { \ + char *__p; \ + if ((__p = strcasestr(S, P)) && (__p = strchr(__p, C))) V = atof(__p+1); \ +} while (0) + #define PARSE_PARAM_STR(S,P,C,V,I) do { \ char *__p; \ if ((__p = strstr(S, P)) && (__p = strchr(__p, C))) { \ diff --git a/components/services/accessors.c b/components/services/accessors.c index 312e0e75..683870d3 100644 --- a/components/services/accessors.c +++ b/components/services/accessors.c @@ -1109,7 +1109,6 @@ cJSON * get_gpio_list(bool refresh) { } gpio_list= cJSON_CreateArray(); -#ifndef CONFIG_BAT_LOCKED char *bat_config = config_alloc_get_default(NVS_TYPE_STR, "bat_config", NULL, 0); if (bat_config) { int channel = -1; @@ -1121,11 +1120,6 @@ cJSON * get_gpio_list(bool refresh) { } free(bat_config); } -#else - if(adc1_pad_get_io_num(CONFIG_BAT_CHANNEL,&gpio_num )==ESP_OK){ - cJSON_AddItemToArray(gpio_list,get_gpio_entry("bat","other",gpio_num,true)); - } -#endif gpio_list=get_GPIO_nvs_list(gpio_list); gpio_list=get_SPDIF_GPIO(gpio_list,is_spdif_config_locked()); gpio_list=get_Rotary_GPIO(gpio_list); diff --git a/components/services/battery.c b/components/services/battery.c index 2b356106..09efe79e 100644 --- a/components/services/battery.c +++ b/components/services/battery.c @@ -35,10 +35,9 @@ static struct { int count; int cells, attenuation; TimerHandle_t timer; -} battery = { - .channel = CONFIG_BAT_CHANNEL, +} battery = { + .channel = -1, .cells = 2, - .attenuation = ADC_ATTEN_DB_0, }; void (*battery_handler_svc)(float value); @@ -76,17 +75,18 @@ static void battery_callback(TimerHandle_t xTimer) { * */ void battery_svc_init(void) { -#ifdef CONFIG_BAT_SCALE - battery.scale = atof(CONFIG_BAT_SCALE); -#endif - - char *nvs_item = config_alloc_get_default(NVS_TYPE_STR, "bat_config", "n", 0); - if (nvs_item) { -#ifndef CONFIG_BAT_LOCKED - PARSE_PARAM(nvs_item, "channel", '=', battery.channel); - PARSE_PARAM(nvs_item, "scale", '=', battery.scale); - PARSE_PARAM(nvs_item, "atten", '=', battery.attenuation); + char *nvs_item = config_alloc_get_default(NVS_TYPE_STR, "bat_config", "", 0); + +#ifdef CONFIG_BAT_LOCKED + char *p = nvs_item; + asprintf(&nvs_item, CONFIG_BAT_CONFIG ",%s", p); + free(p); #endif + + if (nvs_item) { + PARSE_PARAM(nvs_item, "channel", '=', battery.channel); + PARSE_PARAM_FLOAT(nvs_item, "scale", '=', battery.scale); + PARSE_PARAM(nvs_item, "atten", '=', battery.attenuation); PARSE_PARAM(nvs_item, "cells", '=', battery.cells); free(nvs_item); } @@ -99,7 +99,7 @@ void battery_svc_init(void) { battery.timer = xTimerCreate("battery", BATTERY_TIMER / portTICK_RATE_MS, pdTRUE, NULL, battery_callback); xTimerStart(battery.timer, portMAX_DELAY); - ESP_LOGI(TAG, "Battery measure channel: %u, scale %f, cells %u, avg %.2fV", battery.channel, battery.scale, battery.cells, battery.avg); + ESP_LOGI(TAG, "Battery measure channel: %u, scale %f, atten %d, cells %u, avg %.2fV", battery.channel, battery.scale, battery.attenuation, battery.cells, battery.avg); } else { ESP_LOGI(TAG, "No battery"); } diff --git a/components/targets/muse/muse.c b/components/targets/muse/muse.c index d09fa402..1601d64c 100644 --- a/components/targets/muse/muse.c +++ b/components/targets/muse/muse.c @@ -7,7 +7,7 @@ #include #include #include -#include +//#include #include "driver/rmt.h" #include "monitor.h" @@ -43,8 +43,6 @@ void ws2812_write_leds(struct led_state new_state); static const char TAG[] = "muse"; static void (*battery_handler_chain)(float value); - -static void battery(void *data); static void battery_svc(float value); void target_init(void) { @@ -55,10 +53,12 @@ void target_init(void) { static void battery_svc(float value) { ESP_LOGI(TAG, "Called for battery service with %f", value); + // put here your code for LED according to value if (battery_handler_chain) battery_handler_chain(value); } // Battery monitoring +/* static void battery(void *data) { #define VGREEN 2300 @@ -91,6 +91,7 @@ static void battery(void *data) } } +*/ // This is the buffer which the hw peripheral will access while pulsing the output pin rmt_item32_t led_data_buffer[LED_BUFFER_ITEMS]; diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index d2947f14..153ceb51 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -43,6 +43,9 @@ menu "Squeezelite-ESP32" config MUTE_GPIO_LEVEL int default 0 + config WELL_KNOWN + bool + default n menu "Target" choice OUTPUT_TYPE prompt "Main system" @@ -56,17 +59,20 @@ menu "Squeezelite-ESP32" select I2C_LOCKED select LED_LOCKED select SPKFAULT_LOCKED - config BASIC_I2C_BT - bool "Generic I2S & Bluetooth" - config TWATCH2020 - bool "T-WATCH2020 by LilyGo" - select I2C_LOCKED + select WELL_KNOWN config MUSE bool "Muse" select JACK_LOCKED select BAT_LOCKED select I2C_LOCKED - select AMP_LOCKED + select AMP_LOCKED + select WELL_KNOWN + config BASIC_I2C_BT + bool "Generic I2S & Bluetooth" + config TWATCH2020 + bool "T-WATCH2020 by LilyGo" + select I2C_LOCKED + select WELL_KNOWN endchoice config RELEASE_API string "Software update URL" @@ -129,7 +135,10 @@ menu "Squeezelite-ESP32" string default "[{\"gpio\":32, \"pull\":true, \"debounce\":10, \"normal\":{\"pressed\":\"ACTRLS_VOLDOWN\"}}, {\"gpio\":19, \"pull\":true, \"debounce\":40, \"normal\":{\"pressed\":\"ACTRLS_VOLUP\"}}, {\"gpio\":12, \"pull\":true, \"debounce\":40, \"longpress\":1000, \"normal\":{\"pressed\":\"ACTRLS_TOGGLE\"},\"longpress\":{\"pressed\":\"ACTRLS_POWER\"}}]" if MUSE default "" - default -1 + config BAT_CONFIG + default "channel=7,scale=20.24,atten=0" if SQUEEZEAMP + default "channel=5,scale=1,atten=3,cells=1" if MUSE + default "" config AMP_GPIO int default 21 if MUSE @@ -371,7 +380,7 @@ menu "Squeezelite-ESP32" endmenu menu "Audio JACK" - visible if !SQUEEZEAMP && !TWATCH2020 && !MUSE + visible if !WELL_KNOWN config JACK_GPIO int "Jack insertion GPIO" help @@ -383,7 +392,7 @@ menu "Squeezelite-ESP32" endmenu menu "Amplifier" - visible if !SQUEEZEAMP && !TWATCH2020 && !MUSE + visible if !WELL_KNOWN config AMP_GPIO int "Amplifier GPIO" help @@ -395,7 +404,7 @@ menu "Squeezelite-ESP32" endmenu menu "Speaker Fault" - visible if !SQUEEZEAMP && !TWATCH2020 && !MUSE + visible if !WELL_KNOWN config SPKFAULT_GPIO int "Speaker fault GPIO" help @@ -405,20 +414,16 @@ menu "Squeezelite-ESP32" int "Level when fault (0/1)" default 0 endmenu + menu "Battery measure" - visible if !SQUEEZEAMP && !TWATCH2020 - config BAT_CHANNEL - int "Set channel (0..7)" + visible if !WELL_KNOWN + config BAT_CONFIG + string "Battery acquisition configuration" help - Read a value every 10s on ADC1 on set Channel - config BAT_SCALE - string "Set scaling factor" - depends on BAT_CHANNEL != -1 - default "20.24" if SQUEEZEAMP - default "" - help - Set the scaling factor for this 12 bits ADC + Sets parameters for battery voltage measure + channel=<0..7>,scale=,atten=,cells=<1..3> endmenu + config DEFAULT_COMMAND_LINE string "Default command line to execute" default "squeezelite -o I2S -b 500:2000 -d all=info -C 30"