diff --git a/applications/services/applications.h b/applications/services/applications.h index b155745f5..44f00f6df 100644 --- a/applications/services/applications.h +++ b/applications/services/applications.h @@ -4,9 +4,9 @@ #include typedef enum { - FlipperInternalApplicationFlagDefault = 0, - FlipperInternalApplicationFlagInsomniaSafe = (1 << 0), -} FlipperInternalApplicationFlag; + FlipperApplicationFlagDefault = 0, + FlipperApplicationFlagInsomniaSafe = (1 << 0), +} FlipperApplicationFlag; typedef struct { const FuriThreadCallback app; @@ -14,13 +14,14 @@ typedef struct { const char* appid; const size_t stack_size; const Icon* icon; - const FlipperInternalApplicationFlag flags; + const FlipperApplicationFlag flags; } FlipperInternalApplication; typedef struct { const char* name; const Icon* icon; const char* path; + const FlipperApplicationFlag flags; } FlipperExternalApplication; typedef void (*FlipperInternalOnStartHook)(void); diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index ba3e2402d..48bb7ed76 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -19,15 +19,18 @@ // helpers -static const char* loader_find_external_application_by_name(const char* app_name) { +static const char* + loader_find_external_application_by_name(const char* app_name, FlipperApplicationFlag* flags) { for(size_t i = 0; i < FLIPPER_EXTERNAL_APPS_COUNT; i++) { if(strcmp(FLIPPER_EXTERNAL_APPS[i].name, app_name) == 0) { + *flags = FLIPPER_EXTERNAL_APPS[i].flags; return FLIPPER_EXTERNAL_APPS[i].path; } } for(size_t i = 0; i < FLIPPER_SETTINGS_APPS_COUNT; i++) { if(strcmp(FLIPPER_SETTINGS_APPS[i].name, app_name) == 0) { + *flags = FLIPPER_SETTINGS_APPS[i].flags; return FLIPPER_SETTINGS_APPS[i].path; } } @@ -342,7 +345,7 @@ static const FlipperInternalApplication* loader_find_application_by_name(const c return NULL; } -static void loader_start_app_thread(Loader* loader, FlipperInternalApplicationFlag flags) { +static void loader_start_app_thread(Loader* loader, FlipperApplicationFlag flags) { // setup heap trace FuriHalRtcHeapTrackMode mode = furi_hal_rtc_get_heap_track_mode(); if(mode > FuriHalRtcHeapTrackModeNone) { @@ -352,7 +355,7 @@ static void loader_start_app_thread(Loader* loader, FlipperInternalApplicationFl } // setup insomnia - if(!(flags & FlipperInternalApplicationFlagInsomniaSafe)) { + if(!(flags & FlipperApplicationFlagInsomniaSafe)) { furi_hal_power_insomnia_enter(); loader->app.insomniac = true; } else { @@ -424,7 +427,8 @@ static LoaderStatus loader_start_external_app( Storage* storage, const char* path, const char* args, - FuriString* error_message) { + FuriString* error_message, + FlipperApplicationFlag flags) { LoaderStatus status = loader_make_success_status(error_message); do { @@ -507,7 +511,7 @@ static LoaderStatus loader_start_external_app( __asm volatile("bkpt 0"); } - loader_start_app_thread(loader, FlipperInternalApplicationFlagDefault); + loader_start_app_thread(loader, flags); return status; } while(0); @@ -598,8 +602,9 @@ static LoaderStatus loader_do_start_by_name( } // check External Applications + FlipperApplicationFlag flags = FlipperApplicationFlagDefault; { - const char* path = loader_find_external_application_by_name(name); + const char* path = loader_find_external_application_by_name(name, &flags); if(path) { name = path; } @@ -609,7 +614,8 @@ static LoaderStatus loader_do_start_by_name( { Storage* storage = furi_record_open(RECORD_STORAGE); if(storage_file_exists(storage, name)) { - status = loader_start_external_app(loader, storage, name, args, error_message); + status = + loader_start_external_app(loader, storage, name, args, error_message, flags); furi_record_close(RECORD_STORAGE); break; } diff --git a/scripts/fbt_tools/fbt_apps.py b/scripts/fbt_tools/fbt_apps.py index 6c7f212bc..f66a2963c 100644 --- a/scripts/fbt_tools/fbt_apps.py +++ b/scripts/fbt_tools/fbt_apps.py @@ -58,7 +58,7 @@ class ApplicationsCGenerator: .appid = "{app.appid}", .stack_size = {app.stack_size}, .icon = {f"&{app.icon}" if app.icon else "NULL"}, - .flags = {'|'.join(f"FlipperInternalApplicationFlag{flag}" for flag in app.flags)} }}""" + .flags = {'|'.join(f"FlipperApplicationFlag{flag}" for flag in app.flags)} }}""" def get_external_app_descr(self, app: FlipperApplication): app_path = "/ext/apps" @@ -69,7 +69,8 @@ class ApplicationsCGenerator: {{ .name = "{app.name}", .icon = {f"&{app.icon}" if app.icon else "NULL"}, - .path = "{app_path}" }}""" + .path = "{app_path}", + .flags = {'|'.join(f"FlipperApplicationFlag{flag}" for flag in app.flags)} }}""" def generate(self): contents = [