mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-06-07 19:01:54 -07:00
Support InsomniaSafe flag in extapps (fix mA)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
Reference in New Issue
Block a user