loader: restored support for debug apps (#2993)
* fbt: restored loader support for debug apps (no GUI tho) * desktop: fixed code for handling autorun apps * loader: fixed autorun app messing up last update stage * Loader: handle status without message Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
parent
35cdefa1ca
commit
200c44bdca
@ -51,6 +51,12 @@ extern const size_t FLIPPER_ON_SYSTEM_START_COUNT;
|
|||||||
extern const FlipperInternalApplication FLIPPER_SYSTEM_APPS[];
|
extern const FlipperInternalApplication FLIPPER_SYSTEM_APPS[];
|
||||||
extern const size_t FLIPPER_SYSTEM_APPS_COUNT;
|
extern const size_t FLIPPER_SYSTEM_APPS_COUNT;
|
||||||
|
|
||||||
|
/* Debug apps
|
||||||
|
* Can only be spawned by loader by name
|
||||||
|
*/
|
||||||
|
extern const FlipperInternalApplication FLIPPER_DEBUG_APPS[];
|
||||||
|
extern const size_t FLIPPER_DEBUG_APPS_COUNT;
|
||||||
|
|
||||||
extern const FlipperInternalApplication FLIPPER_ARCHIVE;
|
extern const FlipperInternalApplication FLIPPER_ARCHIVE;
|
||||||
|
|
||||||
/* Settings list
|
/* Settings list
|
||||||
|
|||||||
@ -381,12 +381,7 @@ Desktop* desktop_alloc() {
|
|||||||
}
|
}
|
||||||
gui_add_view_port(desktop->gui, desktop->stealth_mode_icon_viewport, GuiLayerStatusBarLeft);
|
gui_add_view_port(desktop->gui, desktop->stealth_mode_icon_viewport, GuiLayerStatusBarLeft);
|
||||||
|
|
||||||
// Special case: autostart application is already running
|
|
||||||
desktop->loader = furi_record_open(RECORD_LOADER);
|
desktop->loader = furi_record_open(RECORD_LOADER);
|
||||||
if(loader_is_locked(desktop->loader) &&
|
|
||||||
animation_manager_is_animation_loaded(desktop->animation_manager)) {
|
|
||||||
animation_manager_unload_and_stall_animation(desktop->animation_manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
desktop->notification = furi_record_open(RECORD_NOTIFICATION);
|
desktop->notification = furi_record_open(RECORD_NOTIFICATION);
|
||||||
desktop->app_start_stop_subscription = furi_pubsub_subscribe(
|
desktop->app_start_stop_subscription = furi_pubsub_subscribe(
|
||||||
@ -477,6 +472,12 @@ int32_t desktop_srv(void* p) {
|
|||||||
scene_manager_next_scene(desktop->scene_manager, DesktopSceneFault);
|
scene_manager_next_scene(desktop->scene_manager, DesktopSceneFault);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case: autostart application is already running
|
||||||
|
if(loader_is_locked(desktop->loader) &&
|
||||||
|
animation_manager_is_animation_loaded(desktop->animation_manager)) {
|
||||||
|
animation_manager_unload_and_stall_animation(desktop->animation_manager);
|
||||||
|
}
|
||||||
|
|
||||||
view_dispatcher_run(desktop->view_dispatcher);
|
view_dispatcher_run(desktop->view_dispatcher);
|
||||||
|
|
||||||
furi_crash("That was unexpected");
|
furi_crash("That was unexpected");
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
#include "loader.h"
|
#include "loader.h"
|
||||||
|
#include "core/core_defines.h"
|
||||||
#include "loader_i.h"
|
#include "loader_i.h"
|
||||||
#include <applications.h>
|
#include <applications.h>
|
||||||
#include <storage/storage.h>
|
#include <storage/storage.h>
|
||||||
@ -186,18 +187,24 @@ static FlipperInternalApplication const* loader_find_application_by_name_in_list
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const FlipperInternalApplication* loader_find_application_by_name(const char* name) {
|
static const FlipperInternalApplication* loader_find_application_by_name(const char* name) {
|
||||||
const FlipperInternalApplication* application = NULL;
|
const struct {
|
||||||
application = loader_find_application_by_name_in_list(name, FLIPPER_APPS, FLIPPER_APPS_COUNT);
|
const FlipperInternalApplication* list;
|
||||||
if(!application) {
|
const uint32_t count;
|
||||||
application = loader_find_application_by_name_in_list(
|
} lists[] = {
|
||||||
name, FLIPPER_SETTINGS_APPS, FLIPPER_SETTINGS_APPS_COUNT);
|
{FLIPPER_SETTINGS_APPS, FLIPPER_SETTINGS_APPS_COUNT},
|
||||||
}
|
{FLIPPER_SYSTEM_APPS, FLIPPER_SYSTEM_APPS_COUNT},
|
||||||
if(!application) {
|
{FLIPPER_DEBUG_APPS, FLIPPER_DEBUG_APPS_COUNT},
|
||||||
application = loader_find_application_by_name_in_list(
|
};
|
||||||
name, FLIPPER_SYSTEM_APPS, FLIPPER_SYSTEM_APPS_COUNT);
|
|
||||||
|
for(size_t i = 0; i < COUNT_OF(lists); i++) {
|
||||||
|
const FlipperInternalApplication* application =
|
||||||
|
loader_find_application_by_name_in_list(name, lists[i].list, lists[i].count);
|
||||||
|
if(application) {
|
||||||
|
return application;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return application;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void loader_start_app_thread(Loader* loader, FlipperInternalApplicationFlag flags) {
|
static void loader_start_app_thread(Loader* loader, FlipperInternalApplicationFlag flags) {
|
||||||
@ -253,9 +260,7 @@ static void loader_log_status_error(
|
|||||||
furi_string_vprintf(error_message, format, args);
|
furi_string_vprintf(error_message, format, args);
|
||||||
FURI_LOG_E(TAG, "Status [%d]: %s", status, furi_string_get_cstr(error_message));
|
FURI_LOG_E(TAG, "Status [%d]: %s", status, furi_string_get_cstr(error_message));
|
||||||
} else {
|
} else {
|
||||||
FuriString* tmp = furi_string_alloc();
|
FURI_LOG_E(TAG, "Status [%d]", status);
|
||||||
FURI_LOG_E(TAG, "Status [%d]: %s", status, furi_string_get_cstr(tmp));
|
|
||||||
furi_string_free(tmp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,7 +495,9 @@ int32_t loader_srv(void* p) {
|
|||||||
FLIPPER_ON_SYSTEM_START[i]();
|
FLIPPER_ON_SYSTEM_START[i]();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(FLIPPER_AUTORUN_APP_NAME && strlen(FLIPPER_AUTORUN_APP_NAME)) {
|
if((furi_hal_rtc_get_boot_mode() == FuriHalRtcBootModeNormal) && FLIPPER_AUTORUN_APP_NAME &&
|
||||||
|
strlen(FLIPPER_AUTORUN_APP_NAME)) {
|
||||||
|
FURI_LOG_I(TAG, "Starting autorun app: %s", FLIPPER_AUTORUN_APP_NAME);
|
||||||
loader_do_start_by_name(loader, FLIPPER_AUTORUN_APP_NAME, NULL, NULL);
|
loader_do_start_by_name(loader, FLIPPER_AUTORUN_APP_NAME, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user