From 90d52dabaf2016d7068e614ed97f1ffa8a08918c Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sun, 9 Feb 2020 13:29:25 -0800 Subject: [PATCH] More refactoring last compile dependency on DAC --- build-scripts/ESP32-A1S-sdkconfig.defaults | 3 + build-scripts/I2S-4MFlash-sdkconfig.defaults | 3 + .../NonOTA-I2S-4MFlash-sdkconfig.defaults | 3 + .../NonOTA-SqueezeAmp-sdkconfig.defaults | 2 + .../SqueezeAmp4MBFlash-sdkconfig.defaults | 2 + .../SqueezeAmp8MBFlash-sdkconfig.defaults | 2 + components/cmd_i2c/cmd_i2ctools.c | 2 +- components/services/battery.c | 2 +- components/services/globdefs.h | 1 - components/services/led.c | 2 +- components/services/monitor.c | 65 +++++++------------ main/Kconfig.projbuild | 20 +++++- 12 files changed, 61 insertions(+), 46 deletions(-) diff --git a/build-scripts/ESP32-A1S-sdkconfig.defaults b/build-scripts/ESP32-A1S-sdkconfig.defaults index cb56b9b8..4c23a8fe 100644 --- a/build-scripts/ESP32-A1S-sdkconfig.defaults +++ b/build-scripts/ESP32-A1S-sdkconfig.defaults @@ -16,6 +16,9 @@ CONFIG_LED_GREEN_GPIO_LEVEL=1 CONFIG_LED_RED_GPIO=-1 CONFIG_LED_RED_GPIO_LEVEL=1 CONFIG_JACK_GPIO=-1 +CONFIG_JACK_GPIO_LEVEL=0 +CONFIG_SPKFAULT_GPIO=-1 +CONFIG_SPKFAULT_GPIO_LEVEL=0 CONFIG_BAT_CHANNEL=-1 CONFIG_BAT_SCALE="0" CONFIG_I2S_BCK_IO=27 diff --git a/build-scripts/I2S-4MFlash-sdkconfig.defaults b/build-scripts/I2S-4MFlash-sdkconfig.defaults index cd01f32c..41a0b935 100644 --- a/build-scripts/I2S-4MFlash-sdkconfig.defaults +++ b/build-scripts/I2S-4MFlash-sdkconfig.defaults @@ -13,6 +13,9 @@ CONFIG_LED_GREEN_GPIO_LEVEL=1 CONFIG_LED_RED_GPIO=-1 CONFIG_LED_RED_GPIO_LEVEL=1 CONFIG_JACK_GPIO=-1 +CONFIG_JACK_GPIO_LEVEL=0 +CONFIG_SPKFAULT_GPIO=-1 +CONFIG_SPKFAULT_GPIO_LEVEL=0 CONFIG_BAT_CHANNEL=-1 CONFIG_BAT_SCALE="0" CONFIG_I2S_NUM=0 diff --git a/build-scripts/NonOTA-I2S-4MFlash-sdkconfig.defaults b/build-scripts/NonOTA-I2S-4MFlash-sdkconfig.defaults index 6aaaf371..a783b563 100644 --- a/build-scripts/NonOTA-I2S-4MFlash-sdkconfig.defaults +++ b/build-scripts/NonOTA-I2S-4MFlash-sdkconfig.defaults @@ -13,6 +13,9 @@ CONFIG_LED_GREEN_GPIO_LEVEL=1 CONFIG_LED_RED_GPIO=-1 CONFIG_LED_RED_GPIO_LEVEL=1 CONFIG_JACK_GPIO=-1 +CONFIG_JACK_GPIO_LEVEL=0 +CONFIG_SPKFAULT_GPIO=-1 +CONFIG_SPKFAULT_GPIO_LEVEL=0 CONFIG_BAT_CHANNEL=-1 CONFIG_BAT_SCALE="0" CONFIG_I2S_NUM=0 diff --git a/build-scripts/NonOTA-SqueezeAmp-sdkconfig.defaults b/build-scripts/NonOTA-SqueezeAmp-sdkconfig.defaults index a77a22eb..4fa041ad 100644 --- a/build-scripts/NonOTA-SqueezeAmp-sdkconfig.defaults +++ b/build-scripts/NonOTA-SqueezeAmp-sdkconfig.defaults @@ -20,6 +20,8 @@ CONFIG_LED_RED_GPIO=13 CONFIG_LED_RED_GPIO_LEVEL=0 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_I2S_NUM=0 diff --git a/build-scripts/SqueezeAmp4MBFlash-sdkconfig.defaults b/build-scripts/SqueezeAmp4MBFlash-sdkconfig.defaults index c9f2130c..6038d934 100644 --- a/build-scripts/SqueezeAmp4MBFlash-sdkconfig.defaults +++ b/build-scripts/SqueezeAmp4MBFlash-sdkconfig.defaults @@ -20,6 +20,8 @@ CONFIG_LED_RED_GPIO=13 CONFIG_LED_RED_GPIO_LEVEL=0 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_I2S_NUM=0 diff --git a/build-scripts/SqueezeAmp8MBFlash-sdkconfig.defaults b/build-scripts/SqueezeAmp8MBFlash-sdkconfig.defaults index 712cdff1..f0a45d9a 100644 --- a/build-scripts/SqueezeAmp8MBFlash-sdkconfig.defaults +++ b/build-scripts/SqueezeAmp8MBFlash-sdkconfig.defaults @@ -20,6 +20,8 @@ CONFIG_LED_RED_GPIO=13 CONFIG_LED_RED_GPIO_LEVEL=0 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_I2S_NUM=0 diff --git a/components/cmd_i2c/cmd_i2ctools.c b/components/cmd_i2c/cmd_i2ctools.c index a71f378a..f03f253e 100644 --- a/components/cmd_i2c/cmd_i2ctools.c +++ b/components/cmd_i2c/cmd_i2ctools.c @@ -32,7 +32,7 @@ static const char *TAG = "cmd_i2ctools"; static gpio_num_t i2c_gpio_sda = 19; static gpio_num_t i2c_gpio_scl = 18; static uint32_t i2c_frequency = 100000; -#ifdef I2C_LOCKED +#ifdef CONFIG_I2C_LOCKED static i2c_port_t i2c_port = I2C_NUM_1; #else static i2c_port_t i2c_port = I2C_NUM_0; diff --git a/components/services/battery.c b/components/services/battery.c index 7cf14d04..5208df0a 100644 --- a/components/services/battery.c +++ b/components/services/battery.c @@ -62,7 +62,7 @@ void battery_svc_init(void) { battery.channel = CONFIG_BAT_CHANNEL; battery.scale = atof(CONFIG_BAT_SCALE); -#ifndef BAT_LOCKED +#ifndef CONFIG_BAT_LOCKED char *nvs_item = config_alloc_get_default(NVS_TYPE_STR, "bat_config", "n", 0); if (nvs_item) { char *p; diff --git a/components/services/globdefs.h b/components/services/globdefs.h index 92c93a42..5fdfec5b 100644 --- a/components/services/globdefs.h +++ b/components/services/globdefs.h @@ -29,7 +29,6 @@ extern int spi_system_dc_gpio; extern bool gpio36_39_used; #ifdef CONFIG_SQUEEZEAMP -#define SPKFAULT_GPIO 2 // this requires a pull-up, so can't be >34 #define ADAC dac_tas57xx #elif defined(CONFIG_A1S) #define ADAC dac_a1s diff --git a/components/services/led.c b/components/services/led.c index 251828c4..f4094bff 100644 --- a/components/services/led.c +++ b/components/services/led.c @@ -170,7 +170,7 @@ void set_led_gpio(int gpio, char *value) { } void led_svc_init(void) { -#ifndef LED_LOCKED +#ifndef CONFIG_LED_LOCKED parse_set_GPIO(set_led_gpio); #endif ESP_LOGI(TAG,"Configuring LEDs green:%d (active:%d), red:%d (active:%d)", green.gpio, green.state, red.gpio, red.state); diff --git a/components/services/monitor.c b/components/services/monitor.c index 0a1c4b05..d9fff0da 100644 --- a/components/services/monitor.c +++ b/components/services/monitor.c @@ -26,7 +26,12 @@ static const char *TAG = "monitor"; static TimerHandle_t monitor_timer; -static int jack_gpio = -1; + +static struct { + int gpio; + int active; +} jack = { CONFIG_JACK_GPIO, CONFIG_JACK_GPIO_LEVEL }, + spkfault = { CONFIG_SPKFAULT_GPIO, CONFIG_SPKFAULT_GPIO_LEVEL }; void (*jack_handler_svc)(bool inserted); bool jack_inserted_svc(void); @@ -57,54 +62,34 @@ static void jack_handler_default(void *id, button_event_e event, button_press_e * */ bool jack_inserted_svc (void) { - if (jack_gpio != -1) return button_is_pressed(jack_gpio, NULL); - else return false; + return button_is_pressed(jack.gpio, NULL); } /**************************************************************************************** * */ -#ifdef SPKFAULT_GPIO static void spkfault_handler_default(void *id, button_event_e event, button_press_e mode, bool long_press) { ESP_LOGD(TAG, "Speaker status %s", event == BUTTON_PRESSED ? "faulty" : "normal"); if (event == BUTTON_PRESSED) led_on(LED_RED); else led_off(LED_RED); if (spkfault_handler_svc) (*spkfault_handler_svc)(event == BUTTON_PRESSED); } -#endif /**************************************************************************************** * */ bool spkfault_svc (void) { -#ifdef SPKFAULT_GPIO - return !gpio_get_level(SPKFAULT_GPIO); -#else - return false; -#endif + return button_is_pressed(spkfault.gpio, NULL); } /**************************************************************************************** * */ void set_jack_gpio(int gpio, char *value) { - char *p; - int active = 1; - if (strcasestr(value, "jack")) { - jack_gpio = gpio; - if ((p = strchr(value, ':')) != NULL) active = atoi(p + 1); - } - - if (jack_gpio != -1) { - gpio_pad_select_gpio(jack_gpio); - gpio_set_direction(jack_gpio, GPIO_MODE_INPUT); - gpio_set_pull_mode(jack_gpio, active ? GPIO_PULLDOWN_ONLY : GPIO_PULLUP_ONLY); - - ESP_LOGI(TAG,"Adding jack (%s) detection GPIO %d", active ? "high" : "low", gpio); - - // re-use button management for jack handler, it's a GPIO after all - button_create(NULL, jack_gpio, active ? BUTTON_HIGH : BUTTON_LOW, false, 250, jack_handler_default, 0, -1); + char *p; + jack.gpio = gpio; + if ((p = strchr(value, ':')) != NULL) jack.active = atoi(p + 1); } } @@ -114,25 +99,26 @@ void set_jack_gpio(int gpio, char *value) { void monitor_svc_init(void) { ESP_LOGI(TAG, "Initializing monitoring"); -#if CONFIG_JACK_GPIO_LEVEL == 1 - set_jack_gpio(CONFIG_JACK_GPIO, "jack:1"); -#else - set_jack_gpio(CONFIG_JACK_GPIO, "jack:0"); -#endif - #ifndef CONFIG_JACK_LOCKED parse_set_GPIO(set_jack_gpio); #endif -#ifdef SPKFAULT_GPIO - gpio_pad_select_gpio(SPKFAULT_GPIO); - gpio_set_direction(SPKFAULT_GPIO, GPIO_MODE_INPUT); - gpio_set_pull_mode(SPKFAULT_GPIO, GPIO_PULLUP_ONLY); - - // re-use button management for speaker fault handler, it's a GPIO after all - button_create(NULL, SPKFAULT_GPIO, BUTTON_LOW, true, 0, spkfault_handler_default, 0, -1); + // re-use button management for jack handler, it's a GPIO after all + if (jack.gpio != -1) { + ESP_LOGI(TAG,"Adding jack (%s) detection GPIO %d", jack.active ? "high" : "low", jack.gpio); + button_create(NULL, jack.gpio, jack.active ? BUTTON_HIGH : BUTTON_LOW, false, 250, jack_handler_default, 0, -1); + } + +#ifndef CONFIG_SPKFAULT_LOCKED + parse_set_GPIO(set_spkfault_gpio); #endif + // re-use button management for speaker fault handler, it's a GPIO after all + if (spkfault.gpio != -1) { + ESP_LOGI(TAG,"Adding speaker fault (%s) detection GPIO %d", spkfault.active ? "high" : "low", spkfault.gpio); + button_create(NULL, spkfault.gpio, spkfault.active ? BUTTON_HIGH : BUTTON_LOW, false, 0, spkfault_handler_default, 0, -1); + } + // do we want stats char *p = config_alloc_get_default(NVS_TYPE_STR, "stats", "n", 0); if (p && (*p == '1' || *p == 'Y' || *p == 'y')) { @@ -140,5 +126,4 @@ void monitor_svc_init(void) { xTimerStart(monitor_timer, portMAX_DELAY); } free(p); - } diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 0981c9b4..fecc7e19 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -31,6 +31,8 @@ menu "Squeezelite-ESP32" bool config LED_LOCKED bool + config SPKFAULT_LOCKED + bool menu "Audio Output" choice OUTPUT_TYPE prompt "Output Type" @@ -44,6 +46,7 @@ menu "Squeezelite-ESP32" select I2C_LOCKED select SPDIF_LOCKED select LED_LOCKED + select SPKFAULT_LOCKED config A1S bool "ESP32-A1S module" select I2C_LOCKED @@ -249,11 +252,24 @@ menu "Squeezelite-ESP32" default -1 if !SQUEEZEAMP default 34 if SQUEEZEAMP help - GPIO to detect speaker jack insertion. Set to -1 for no detection. This takes precedence over runtime jack GPIO + GPIO to detect speaker jack insertion. Set to -1 for no detection. config JACK_GPIO_LEVEL depends on JACK_GPIO != -1 int "Level when inserted (0/1)" - default 0 + default 0 + endmenu + menu "Speaker Fault" + visible if !SQUEEZEAMP + config SPKFAULT_GPIO + int "Speaker fault GPIO" + default -1 if !SQUEEZEAMP + default 2 if SQUEEZEAMP + help + GPIO to detect speaker fault condition. Set to -1 for no detection. + config SPKFAULT_GPIO_LEVEL + depends on SPKFAULT_GPIO != -1 + int "Level when fault (0/1)" + default 0 endmenu menu "Battery measure" visible if !SQUEEZEAMP