diff --git a/build-scripts/I2S-4MFlash-sdkconfig.defaults b/build-scripts/I2S-4MFlash-sdkconfig.defaults index e008de18..5477e197 100644 --- a/build-scripts/I2S-4MFlash-sdkconfig.defaults +++ b/build-scripts/I2S-4MFlash-sdkconfig.defaults @@ -12,6 +12,8 @@ CONFIG_DISPLAY_CONFIG="" CONFIG_I2C_CONFIG="" CONFIG_SPI_CONFIG="" CONFIG_SET_GPIO="" +CONFIG_TARGET_LOCKED=n +CONFIG_TARGET="" CONFIG_GPIO_EXP_CONFIG="" CONFIG_ROTARY_ENCODER="" CONFIG_LED_GREEN_GPIO=-1 diff --git a/build-scripts/Muse-sdkconfig.defaults b/build-scripts/Muse-sdkconfig.defaults index 69f8d548..368c489c 100644 --- a/build-scripts/Muse-sdkconfig.defaults +++ b/build-scripts/Muse-sdkconfig.defaults @@ -12,7 +12,8 @@ CONFIG_AMP_LOCKED=y CONFIG_JACK_LOCKED=y CONFIG_BAT_LOCKED=y CONFIG_I2C_LOCKED=y -CONFIG_WELL_KNOWN=y +CONFIG_TARGET_LOCKED=y +CONFIG_TARGET="muse" CONFIG_DISPLAY_CONFIG="" CONFIG_I2C_CONFIG="" CONFIG_SPI_CONFIG="mosi=15,miso=2,clk=14" diff --git a/build-scripts/SqueezeAmp-sdkconfig.defaults b/build-scripts/SqueezeAmp-sdkconfig.defaults index ba37088f..f5f23b9f 100644 --- a/build-scripts/SqueezeAmp-sdkconfig.defaults +++ b/build-scripts/SqueezeAmp-sdkconfig.defaults @@ -12,7 +12,8 @@ CONFIG_JACK_LOCKED=y CONFIG_BAT_LOCKED=y CONFIG_I2C_LOCKED=y CONFIG_LED_LOCKED=y -CONFIG_WELL_KNOWN=y +CONFIG_TARGET_LOCKED=y +CONFIG_TARGET="squeezeamp" CONFIG_DISPLAY_CONFIG="" CONFIG_I2C_CONFIG="" CONFIG_SPI_CONFIG="" diff --git a/components/targets/CMakeLists.txt b/components/targets/CMakeLists.txt index f8a5b188..9e97b3ec 100644 --- a/components/targets/CMakeLists.txt +++ b/components/targets/CMakeLists.txt @@ -1,13 +1,4 @@ -# This should be made a pure CMake component but as CMake is even -# more shitty under Windows, backslash in path screws it all - -if(CONFIG_MUSE) - message("Compiling for MUSE") - set(src_dirs "muse") -else() - set(src_dirs ".") -endif() - -idf_component_register( SRC_DIRS ${src_dirs} +idf_component_register( SRC_DIRS . muse + INCLUDE_DIRS . PRIV_REQUIRES services ) diff --git a/components/targets/init.c b/components/targets/init.c deleted file mode 100644 index f6e42cb8..00000000 --- a/components/targets/init.c +++ /dev/null @@ -1,3 +0,0 @@ -// weak should do the job but it does not... - __attribute__((weak)) void target_init(void) { -} diff --git a/components/targets/muse/muse.c b/components/targets/muse/muse.c index 1601d64c..3501fe2d 100644 --- a/components/targets/muse/muse.c +++ b/components/targets/muse/muse.c @@ -10,6 +10,7 @@ //#include #include "driver/rmt.h" #include "monitor.h" +#include "targets.h" ///////////////////////////////////////////////////////////////// //*********************** NeoPixels *************************** @@ -44,11 +45,15 @@ static const char TAG[] = "muse"; static void (*battery_handler_chain)(float value); static void battery_svc(float value); +static bool init(void); -void target_init(void) { +const struct target_s target_muse = { "muse", init }; + +static bool init(void) { battery_handler_chain = battery_handler_svc; battery_handler_svc = battery_svc; ESP_LOGI(TAG, "Initializing for Muse"); + return true; } static void battery_svc(float value) { diff --git a/components/targets/targets.c b/components/targets/targets.c new file mode 100644 index 00000000..89574e4d --- /dev/null +++ b/components/targets/targets.c @@ -0,0 +1,11 @@ +#include "string.h" +#include "targets.h" + +const struct target_s *target_set[] = { &target_muse, NULL }; + +void target_init(char *target) { + for (int i = 0; target_set[i]; i++) if (strcasestr(target_set[i]->model, target)) { + target_set[i]->init(); + break; + } +} diff --git a/components/targets/targets.h b/components/targets/targets.h new file mode 100644 index 00000000..c6f870e1 --- /dev/null +++ b/components/targets/targets.h @@ -0,0 +1,22 @@ +/* + * Squeezelite for esp32 + * + * (c) Sebastien 2019 + * Philippe G. 2019, philippe_44@outlook.com + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * + */ + +#pragma once + +#include "stddef.h" +#include "stdbool.h" + +struct target_s { + char *model; + bool (*init)(void); +}; + +extern const struct target_s target_muse; diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index a819adfe..f0d25589 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -21,6 +21,9 @@ menu "Squeezelite-ESP32" help Set logging level info|debug|sdebug endmenu + config TARGET_LOCKED + bool + default n config AMP_LOCKED bool config JACK_LOCKED @@ -38,9 +41,6 @@ menu "Squeezelite-ESP32" config MUTE_GPIO_LEVEL int default 0 - config WELL_KNOWN - bool - default n menu "Target" choice OUTPUT_TYPE prompt "Main system" @@ -54,20 +54,20 @@ menu "Squeezelite-ESP32" select I2C_LOCKED select LED_LOCKED select SPKFAULT_LOCKED - select WELL_KNOWN + select TARGET_LOCKED config MUSE bool "Muse" select JACK_LOCKED select BAT_LOCKED select I2C_LOCKED select AMP_LOCKED - select WELL_KNOWN + select TARGET_LOCKED config BASIC_I2C_BT bool "Generic I2S & Bluetooth" config TWATCH2020 bool "T-WATCH2020 by LilyGo" select I2C_LOCKED - select WELL_KNOWN + select TARGET_LOCKED endchoice config RELEASE_API string "Software update URL" @@ -131,9 +131,14 @@ menu "Squeezelite-ESP32" 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 "" config BAT_CONFIG + string default "channel=7,scale=20.24,atten=0" if SQUEEZEAMP default "channel=5,scale=1,atten=3,cells=1" if MUSE default "" + config TARGET + string + default "muse" if MUSE + default "" endmenu menu "Audio settings" @@ -325,7 +330,7 @@ menu "Squeezelite-ESP32" endmenu menu "LED configuration" - visible if !WELL_KNOWN + visible if !TARGET_LOCKED config LED_GREEN_GPIO int "Green led GPIO" default 12 if SQUEEZEAMP @@ -352,7 +357,7 @@ menu "Squeezelite-ESP32" endmenu menu "Audio JACK" - visible if !WELL_KNOWN + visible if !TARGET_LOCKED config JACK_GPIO int "Jack insertion GPIO" default 34 if SQUEEZEAMP || MUSE @@ -366,7 +371,7 @@ menu "Squeezelite-ESP32" endmenu menu "Amplifier" - visible if !WELL_KNOWN + visible if !TARGET_LOCKED config AMP_GPIO int "Amplifier GPIO" default 21 if MUSE @@ -380,7 +385,7 @@ menu "Squeezelite-ESP32" endmenu menu "Speaker Fault" - visible if !WELL_KNOWN + visible if !TARGET_LOCKED config SPKFAULT_GPIO int "Speaker fault GPIO" default 2 if SQUEEZEAMP @@ -394,7 +399,7 @@ menu "Squeezelite-ESP32" endmenu menu "Battery measure" - visible if !WELL_KNOWN + visible if !TARGET_LOCKED config BAT_CONFIG string "Battery acquisitiong configuration" help diff --git a/main/esp_app_main.c b/main/esp_app_main.c index 67d3507d..73e23f48 100644 --- a/main/esp_app_main.c +++ b/main/esp_app_main.c @@ -68,7 +68,7 @@ extern const uint8_t server_cert_pem_end[] asm("_binary_github_pem_end"); // as an exception _init function don't need include extern void services_init(void); extern void display_init(char *welcome); -extern void target_init(void); +extern void target_init(char *target); const char * str_or_unknown(const char * str) { return (str?str:unknown_string_placeholder); } const char * str_or_null(const char * str) { return (str?str:null_string_placeholder); } bool is_recovery_running; @@ -421,6 +421,9 @@ void register_default_nvs(){ ESP_LOGD(TAG,"Registering default value for key %s", "rel_api"); config_set_default(NVS_TYPE_STR, "rel_api", CONFIG_RELEASE_API, 0); + + ESP_LOGD(TAG,"Registering default value for key %s", "target"); + config_set_default(NVS_TYPE_STR, "target", "", 0); wait_for_commit(); ESP_LOGD(TAG,"Done setting default values in nvs."); @@ -475,7 +478,11 @@ void app_main() ESP_LOGI(TAG,"Initializing display"); display_init("SqueezeESP32"); - target_init(); + char *target = config_alloc_get_default(NVS_TYPE_STR, "target", CONFIG_TARGET, 0); + if (target) { + target_init(target); + free(target); + } if(is_recovery_running && display){ GDS_ClearExt(display, true);