mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-02-18 19:03:16 +00:00
Headless improvements (#58)
- Refactored headless init - Cleanup of statusbar updater
This commit is contained in:
parent
fd27799826
commit
a67ae35aae
@ -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() {
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user