Support InsomniaSafe flag in extapps (fix mA)

This commit is contained in:
Willy-JL
2024-02-15 02:03:06 +00:00
parent 4ec530c912
commit ca5f3bb09a
3 changed files with 21 additions and 13 deletions
+5 -4
View File
@@ -4,9 +4,9 @@
#include <gui/icon.h>
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);
+13 -7
View File
@@ -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;
}
+3 -2
View File
@@ -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 = [