From a67ae35aae7b40b98dd9af07c48f0986aa36e17a Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Mon, 23 Sep 2024 21:46:29 +0200 Subject: [PATCH] Headless improvements (#58) - Refactored headless init - Cleanup of statusbar updater --- tactility-headless/src/tactility_headless.c | 32 ++++++++++++++- tactility-headless/src/tactility_headless.h | 3 +- .../statusbar_updater/statusbar_updater.c | 39 ++++++++++++------- tactility/src/tactility.c | 11 +----- 4 files changed, 58 insertions(+), 27 deletions(-) diff --git a/tactility-headless/src/tactility_headless.c b/tactility-headless/src/tactility_headless.c index aad9c2b3..22c2061a 100644 --- a/tactility-headless/src/tactility_headless.c +++ b/tactility-headless/src/tactility_headless.c @@ -1,14 +1,42 @@ #include "tactility_headless.h" #include "hardware_config.h" #include "hardware_i.h" +#include "service_manifest.h" #include "service_registry.h" +#ifdef ESP_PLATFORM +#include "esp_init.h" +#endif + +#define TAG "tactility" + +extern const ServiceManifest sdcard_service; +extern const ServiceManifest wifi_service; + +static const ServiceManifest* const system_services[] = { + &sdcard_service, + &wifi_service +}; + static const HardwareConfig* hardwareConfig = NULL; -void tt_tactility_headless_init(const HardwareConfig* config, const ServiceManifest* const services[32]) { +static void register_and_start_system_services() { + TT_LOG_I(TAG, "Registering and starting system services"); + int app_count = sizeof(system_services) / sizeof(ServiceManifest*); + for (int i = 0; i < app_count; ++i) { + tt_service_registry_add(system_services[i]); + tt_check(tt_service_registry_start(system_services[i]->id)); + } +} + +void tt_headless_init(const HardwareConfig* config) { +#ifdef ESP_PLATFORM + tt_esp_init(); +#endif + hardwareConfig = config; tt_service_registry_init(); tt_hardware_init(config); - hardwareConfig = config; + register_and_start_system_services(); } const HardwareConfig* tt_get_hardware_config() { diff --git a/tactility-headless/src/tactility_headless.h b/tactility-headless/src/tactility_headless.h index c53ec97d..3e5d6168 100644 --- a/tactility-headless/src/tactility_headless.h +++ b/tactility-headless/src/tactility_headless.h @@ -1,14 +1,13 @@ #pragma once #include "hardware_config.h" -#include "service_manifest.h" #include "tactility_headless_config.h" #ifdef __cplusplus extern "C" { #endif -void tt_tactility_headless_init(const HardwareConfig* config, const ServiceManifest* const services[32]); +void tt_headless_init(const HardwareConfig* config); const HardwareConfig* tt_get_hardware_config(); diff --git a/tactility/src/services/statusbar_updater/statusbar_updater.c b/tactility/src/services/statusbar_updater/statusbar_updater.c index 5fa46f33..ad21813f 100644 --- a/tactility/src/services/statusbar_updater/statusbar_updater.c +++ b/tactility/src/services/statusbar_updater/statusbar_updater.c @@ -1,13 +1,12 @@ #include "mutex.h" #include "service.h" #include "ui/statusbar.h" - -#define TAG "wifi_statusbar_service" - #include "assets.h" #include "sdcard.h" #include "services/wifi/wifi.h" +#define TAG "statusbar_service" + typedef struct { Mutex* mutex; Thread* thread; @@ -18,6 +17,8 @@ typedef struct { const char* sdcard_last_icon; } ServiceData; +// region wifi + const char* wifi_get_status_icon_for_rssi(int rssi, bool secured) { if (rssi > 0) { return TT_ASSETS_ICON_WIFI_CONNECTION_ISSUE; @@ -50,6 +51,20 @@ static const char* wifi_get_status_icon(WifiRadioState state, bool secure) { } } +static void update_wifi_icon(ServiceData* data) { + WifiRadioState radio_state = wifi_get_radio_state(); + bool is_secure = wifi_is_connection_secure(); + const char* desired_icon = wifi_get_status_icon(radio_state, is_secure); + if (data->wifi_last_icon != desired_icon) { + tt_statusbar_icon_set_image(data->wifi_icon_id, desired_icon); + data->wifi_last_icon = desired_icon; + } +} + +// endregion wifi + +// region sdcard + static _Nullable const char* sdcard_get_status_icon(SdcardState state) { switch (state) { case SdcardStateMounted: @@ -62,16 +77,6 @@ static _Nullable const char* sdcard_get_status_icon(SdcardState state) { } } -static void update_wifi_icon(ServiceData* data) { - WifiRadioState radio_state = wifi_get_radio_state(); - bool is_secure = wifi_is_connection_secure(); - const char* desired_icon = wifi_get_status_icon(radio_state, is_secure); - if (data->wifi_last_icon != desired_icon) { - tt_statusbar_icon_set_image(data->wifi_icon_id, desired_icon); - data->wifi_last_icon = desired_icon; - } -} - static void update_sdcard_icon(ServiceData* data) { SdcardState state = tt_sdcard_get_state(); const char* desired_icon = sdcard_get_status_icon(state); @@ -82,6 +87,10 @@ static void update_sdcard_icon(ServiceData* data) { } } +// endregion sdcard + +// region service + static ServiceData* service_data_alloc() { ServiceData* data = malloc(sizeof(ServiceData)); *data = (ServiceData) { @@ -135,7 +144,7 @@ static void on_start(Service service) { tt_thread_set_callback(data->thread, service_main); tt_thread_set_current_priority(ThreadPriorityLow); - tt_thread_set_stack_size(data->thread, 2048); // 2048 was the minimum when last tested + tt_thread_set_stack_size(data->thread, 3000); tt_thread_set_context(data->thread, data); tt_thread_start(data->thread); } @@ -158,3 +167,5 @@ const ServiceManifest statusbar_updater_service = { .on_start = &on_start, .on_stop = &on_stop }; + +// endregion service \ No newline at end of file diff --git a/tactility/src/tactility.c b/tactility/src/tactility.c index e38f2eb2..51b140e5 100644 --- a/tactility/src/tactility.c +++ b/tactility/src/tactility.c @@ -1,7 +1,6 @@ #include "tactility.h" #include "app_manifest_registry.h" -#include "esp_init.h" #include "lvgl_init_i.h" #include "service_registry.h" #include "services/loader/loader.h" @@ -26,8 +25,6 @@ static const ServiceManifest* const system_services[] = { #ifndef ESP_PLATFORM // Screenshots don't work yet on ESP32 &screenshot_service, #endif - &sdcard_service, - &wifi_service, &statusbar_updater_service }; @@ -109,25 +106,21 @@ static void register_and_start_user_services(const ServiceManifest* const servic } } } - void tt_init(const Config* config) { TT_LOG_I(TAG, "tt_init started"); -#ifdef ESP_PLATFORM - tt_esp_init(); -#endif // Assign early so starting services can use it config_instance = config; - tt_tactility_headless_init(config->hardware, config->services); + tt_headless_init(config->hardware); tt_lvgl_init(config->hardware); tt_app_manifest_registry_init(); // Note: the order of starting apps and services is critical! - // System services are registered first so the apps below can use them + // System services are registered first so the apps below can find them if needed register_and_start_system_services(); // Then we register system apps. They are not used/started yet. register_system_apps();