diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index 127afdcdb..10c8944bd 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -15,7 +15,6 @@ #include "desktop/views/desktop_view_pin_timeout.h" #include "desktop_i.h" #include "helpers/pin_lock.h" -#include #define TAG "Desktop" @@ -347,9 +346,6 @@ int32_t desktop_srv(void* p) { furi_hal_rtc_reset_flag(FuriHalRtcFlagResetPin); } - XTREME_SETTINGS_LOAD(); - XTREME_ASSETS_LOAD(); - Desktop* desktop = desktop_alloc(); bool loaded = DESKTOP_SETTINGS_LOAD(&desktop->settings); diff --git a/applications/services/dolphin/dolphin.c b/applications/services/dolphin/dolphin.c index 145224542..5e5ff07d3 100644 --- a/applications/services/dolphin/dolphin.c +++ b/applications/services/dolphin/dolphin.c @@ -80,7 +80,7 @@ Dolphin* dolphin_alloc() { dolphin->state = dolphin_state_alloc(); dolphin->event_queue = furi_message_queue_alloc(8, sizeof(DolphinEvent)); dolphin->pubsub = furi_pubsub_alloc(); - int32_t butthurt = XTREME_SETTINGS_WAIT()->butthurt_timer; + int32_t butthurt = XTREME_SETTINGS()->butthurt_timer; dolphin->butthurt_timer = xTimerCreate( NULL, (butthurt > 0) ? (butthurt * 1000) : -1, diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 8f0deaa6f..dd3b4114e 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -1,6 +1,8 @@ #include #include "gui_i.h" #include +#include +#include #define TAG "GuiSrv" @@ -589,6 +591,10 @@ Gui* gui_alloc() { furi_check(gui->input_events); furi_pubsub_subscribe(gui->input_events, gui_input_events_callback, gui); + Storage* storage = furi_record_open(RECORD_STORAGE); + gui_add_view_port(gui, storage->sd_gui.view_port, GuiLayerStatusBarLeft); + furi_record_close(RECORD_STORAGE); + return gui; } diff --git a/applications/services/rgb_backlight/application.fam b/applications/services/rgb_backlight/application.fam index 70fc0dc9a..20b7d0fed 100644 --- a/applications/services/rgb_backlight/application.fam +++ b/applications/services/rgb_backlight/application.fam @@ -3,6 +3,7 @@ App( name="RGB Backlight", apptype=FlipperAppType.SERVICE, entry_point="rgb_backlight_srv", + order=10, sdk_headers=[ "rgb_backlight.h", ], diff --git a/applications/services/storage/application.fam b/applications/services/storage/application.fam index 7b106e00f..89fa48e63 100644 --- a/applications/services/storage/application.fam +++ b/applications/services/storage/application.fam @@ -7,7 +7,7 @@ App( requires=["storage_settings"], provides=["storage_start"], stack_size=3 * 1024, - order=44, + order=0, sdk_headers=["storage.h"], ) diff --git a/applications/services/storage/storage.c b/applications/services/storage/storage.c index 1816bf921..f746196c2 100644 --- a/applications/services/storage/storage.c +++ b/applications/services/storage/storage.c @@ -54,10 +54,6 @@ Storage* storage_app_alloc() { view_port_draw_callback_set(app->sd_gui.view_port, storage_app_sd_icon_draw_callback, app); view_port_enabled_set(app->sd_gui.view_port, false); - Gui* gui = furi_record_open(RECORD_GUI); - gui_add_view_port(gui, app->sd_gui.view_port, GuiLayerStatusBarLeft); - furi_record_close(RECORD_GUI); - return app; } diff --git a/applications/system/updater/application.fam b/applications/system/updater/application.fam index 4d62c1d48..bdbb69fda 100644 --- a/applications/system/updater/application.fam +++ b/applications/system/updater/application.fam @@ -12,7 +12,7 @@ App( conflicts=["desktop"], entry_point="updater_srv", stack_size=2 * 1024, - order=130, + order=120, ) App( diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index ba82545e3..b1dfb9afe 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -325,7 +325,6 @@ Function,-,SystemInit,void, Function,+,XTREME_ASSETS,XtremeAssets*, Function,+,XTREME_SETTINGS,XtremeSettings*, Function,+,XTREME_SETTINGS_SAVE,void, -Function,+,XTREME_SETTINGS_WAIT,XtremeSettings*, Function,-,_Exit,void,int Function,-,__assert,void,"const char*, int, const char*" Function,+,__assert_func,void,"const char*, int, const char*, const char*" diff --git a/furi/flipper.c b/furi/flipper.c index 8806ce27f..1b13d8bf1 100644 --- a/furi/flipper.c +++ b/furi/flipper.c @@ -4,6 +4,7 @@ #include #include #include +#include #define TAG "Flipper" @@ -27,23 +28,31 @@ static void flipper_print_version(const char* target, const Version* version) { } } +void flipper_start_service(const FlipperApplication* service) { + FURI_LOG_D(TAG, "Starting service %s", service->name); + + FuriThread* thread = + furi_thread_alloc_ex(service->name, service->stack_size, service->app, NULL); + furi_thread_mark_as_service(thread); + furi_thread_set_appid(thread, service->appid); + + furi_thread_start(thread); + } + void flipper_init() { flipper_print_version("Firmware", furi_hal_version_get_firmware_version()); FURI_LOG_I(TAG, "Boot mode %d, starting services", furi_hal_rtc_get_boot_mode()); - for(size_t i = 0; i < FLIPPER_SERVICES_COUNT; i++) { - FURI_LOG_D(TAG, "Starting service %s", FLIPPER_SERVICES[i].name); + // Start storage service first, thanks OFW :/ + flipper_start_service(&FLIPPER_SERVICES[0]); - FuriThread* thread = furi_thread_alloc_ex( - FLIPPER_SERVICES[i].name, - FLIPPER_SERVICES[i].stack_size, - FLIPPER_SERVICES[i].app, - NULL); - furi_thread_mark_as_service(thread); - furi_thread_set_appid(thread, FLIPPER_SERVICES[i].appid); + XTREME_SETTINGS_LOAD(); + XTREME_ASSETS_LOAD(); - furi_thread_start(thread); + // Everything else + for(size_t i = 1; i < FLIPPER_SERVICES_COUNT; i++) { + flipper_start_service(&FLIPPER_SERVICES[i]); } FURI_LOG_I(TAG, "Startup complete"); @@ -65,4 +74,4 @@ void vApplicationGetTimerTaskMemory( *tcb_ptr = memmgr_alloc_from_pool(sizeof(StaticTask_t)); *stack_ptr = memmgr_alloc_from_pool(sizeof(StackType_t) * configTIMER_TASK_STACK_DEPTH); *stack_size = configTIMER_TASK_STACK_DEPTH; -} \ No newline at end of file +} diff --git a/lib/xtreme/assets.c b/lib/xtreme/assets.c index cc1a6fe0d..828369ad1 100644 --- a/lib/xtreme/assets.c +++ b/lib/xtreme/assets.c @@ -148,13 +148,6 @@ void XTREME_ASSETS_LOAD() { xtreme_assets.is_nsfw = strncmp(xtreme_settings->asset_pack, "NSFW", strlen("NSFW")) == 0; Storage* storage = furi_record_open(RECORD_STORAGE); - int32_t timeout = 5000; - while(timeout > 0) { - if(storage_sd_status(storage) == FSE_OK) break; - furi_delay_ms(250); - timeout -= 250; - } - FileInfo info; FuriString* path = furi_string_alloc(); furi_string_printf(path, XTREME_ASSETS_PATH "/%s", xtreme_settings->asset_pack); diff --git a/lib/xtreme/private.h b/lib/xtreme/private.h index 8b220f586..d1644c3e3 100644 --- a/lib/xtreme/private.h +++ b/lib/xtreme/private.h @@ -1,4 +1,4 @@ #pragma once -void XTREME_ASSETS_LOAD(); void XTREME_SETTINGS_LOAD(); +void XTREME_ASSETS_LOAD(); diff --git a/lib/xtreme/settings.c b/lib/xtreme/settings.c index 88aa55b99..f840f990d 100644 --- a/lib/xtreme/settings.c +++ b/lib/xtreme/settings.c @@ -6,7 +6,6 @@ #define TAG "XtremeSettings" XtremeSettings xtreme_settings = { - .loaded = false, .asset_pack = "", .anim_speed = 100, // 100% .cycle_anims = 0, // Meta.txt @@ -89,8 +88,6 @@ void XTREME_SETTINGS_LOAD() { } flipper_format_free(file); furi_record_close(RECORD_STORAGE); - - xtreme_settings.loaded = true; } void XTREME_SETTINGS_SAVE() { @@ -131,12 +128,3 @@ void XTREME_SETTINGS_SAVE() { XtremeSettings* XTREME_SETTINGS() { return &xtreme_settings; } - -XtremeSettings* XTREME_SETTINGS_WAIT() { - if(furi_hal_is_normal_boot()) { - while(!xtreme_settings.loaded) { - furi_delay_ms(50); - } - } - return &xtreme_settings; -} diff --git a/lib/xtreme/xtreme.h b/lib/xtreme/xtreme.h index e4baeeeba..b84ba9691 100644 --- a/lib/xtreme/xtreme.h +++ b/lib/xtreme/xtreme.h @@ -13,7 +13,6 @@ extern "C" { #define XTREME_ASSETS_PACK_NAME_LEN 32 typedef struct { - bool loaded; char asset_pack[XTREME_ASSETS_PACK_NAME_LEN]; uint32_t anim_speed; int32_t cycle_anims; @@ -41,7 +40,6 @@ typedef struct { void XTREME_SETTINGS_SAVE(); XtremeSettings* XTREME_SETTINGS(); -XtremeSettings* XTREME_SETTINGS_WAIT(); typedef struct { bool is_nsfw;