mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-22 05:14:46 -07:00
Xtreme assets/settings boot process improvements
This commit is contained in:
@@ -6,6 +6,7 @@ App(
|
|||||||
"crypto_start",
|
"crypto_start",
|
||||||
"rpc_start",
|
"rpc_start",
|
||||||
"bt",
|
"bt",
|
||||||
|
"xtreme",
|
||||||
"desktop",
|
"desktop",
|
||||||
"loader",
|
"loader",
|
||||||
"power",
|
"power",
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ App(
|
|||||||
requires=["storage_settings"],
|
requires=["storage_settings"],
|
||||||
provides=["storage_start"],
|
provides=["storage_start"],
|
||||||
stack_size=3 * 1024,
|
stack_size=3 * 1024,
|
||||||
order=120,
|
order=44,
|
||||||
sdk_headers=["storage.h"],
|
sdk_headers=["storage.h"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
App(
|
App(
|
||||||
appid="xtreme",
|
appid="xtreme",
|
||||||
apptype=FlipperAppType.STARTUP,
|
name="Xtreme",
|
||||||
entry_point="xtreme_on_system_start",
|
apptype=FlipperAppType.SERVICE,
|
||||||
|
entry_point="xtreme_srv",
|
||||||
|
cdefines=["SRV_XTREME"],
|
||||||
requires=["storage"],
|
requires=["storage"],
|
||||||
order=1000,
|
stack_size=1 * 1024,
|
||||||
provides=[
|
order=46,
|
||||||
"xtreme",
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
#include <assets_icons.h>
|
#include <assets_icons.h>
|
||||||
#include <core/dangerous_defines.h>
|
#include <core/dangerous_defines.h>
|
||||||
|
|
||||||
|
#define TAG "XtremeAssets"
|
||||||
|
|
||||||
#define ICONS_FMT PACKS_DIR "/%s/Icons/%s"
|
#define ICONS_FMT PACKS_DIR "/%s/Icons/%s"
|
||||||
|
|
||||||
XtremeAssets* xtreme_assets = NULL;
|
XtremeAssets* xtreme_assets = NULL;
|
||||||
@@ -111,7 +113,6 @@ void XTREME_ASSETS_LOAD() {
|
|||||||
if(xtreme_assets != NULL) return;
|
if(xtreme_assets != NULL) return;
|
||||||
|
|
||||||
xtreme_assets = malloc(sizeof(XtremeAssets));
|
xtreme_assets = malloc(sizeof(XtremeAssets));
|
||||||
XtremeSettings* xtreme_settings = XTREME_SETTINGS();
|
|
||||||
|
|
||||||
xtreme_assets->A_Levelup_128x64 = &A_Levelup_128x64;
|
xtreme_assets->A_Levelup_128x64 = &A_Levelup_128x64;
|
||||||
xtreme_assets->I_BLE_Pairing_128x64 = &I_BLE_Pairing_128x64;
|
xtreme_assets->I_BLE_Pairing_128x64 = &I_BLE_Pairing_128x64;
|
||||||
@@ -136,20 +137,34 @@ void XTREME_ASSETS_LOAD() {
|
|||||||
xtreme_assets->I_Connected_62x31 = &I_Connected_62x31;
|
xtreme_assets->I_Connected_62x31 = &I_Connected_62x31;
|
||||||
xtreme_assets->I_Error_62x31 = &I_Error_62x31;
|
xtreme_assets->I_Error_62x31 = &I_Error_62x31;
|
||||||
|
|
||||||
|
if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) {
|
||||||
|
FURI_LOG_W(TAG, "Load skipped. Device is in special startup mode.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
XtremeSettings* xtreme_settings = XTREME_SETTINGS();
|
||||||
if(xtreme_settings->asset_pack[0] == '\0') return;
|
if(xtreme_settings->asset_pack[0] == '\0') return;
|
||||||
xtreme_assets->is_nsfw = strncmp(xtreme_settings->asset_pack, "NSFW", strlen("NSFW")) == 0;
|
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;
|
FileInfo info;
|
||||||
FuriString* path = furi_string_alloc();
|
FuriString* path = furi_string_alloc();
|
||||||
furi_string_printf(path, PACKS_DIR "/%s", xtreme_settings->asset_pack);
|
furi_string_printf(path, PACKS_DIR "/%s", xtreme_settings->asset_pack);
|
||||||
Storage* storage = furi_record_open(RECORD_STORAGE);
|
|
||||||
if(storage_common_stat(storage, furi_string_get_cstr(path), &info) == FSE_OK &&
|
if(storage_common_stat(storage, furi_string_get_cstr(path), &info) == FSE_OK &&
|
||||||
info.flags & FSF_DIRECTORY) {
|
info.flags & FSF_DIRECTORY) {
|
||||||
File* file = storage_file_alloc(storage);
|
File* file = storage_file_alloc(storage);
|
||||||
swap(xtreme_assets, path, file);
|
swap(xtreme_assets, path, file);
|
||||||
storage_file_free(file);
|
storage_file_free(file);
|
||||||
}
|
}
|
||||||
furi_record_close(RECORD_STORAGE);
|
|
||||||
furi_string_free(path);
|
furi_string_free(path);
|
||||||
|
furi_record_close(RECORD_STORAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
XtremeAssets* XTREME_ASSETS() {
|
XtremeAssets* XTREME_ASSETS() {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
|
#define TAG "XtremeSettings"
|
||||||
|
|
||||||
XtremeSettings* xtreme_settings = NULL;
|
XtremeSettings* xtreme_settings = NULL;
|
||||||
|
|
||||||
XtremeSettings* XTREME_SETTINGS() {
|
XtremeSettings* XTREME_SETTINGS() {
|
||||||
@@ -9,28 +11,39 @@ XtremeSettings* XTREME_SETTINGS() {
|
|||||||
return xtreme_settings;
|
return xtreme_settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XTREME_SETTINGS_LOAD() {
|
void XTREME_SETTINGS_LOAD() {
|
||||||
if(xtreme_settings == NULL) {
|
if(xtreme_settings == NULL) {
|
||||||
|
|
||||||
xtreme_settings = malloc(sizeof(XtremeSettings));
|
xtreme_settings = malloc(sizeof(XtremeSettings));
|
||||||
bool loaded = saved_struct_load(
|
bool loaded;
|
||||||
|
|
||||||
|
if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) {
|
||||||
|
FURI_LOG_W(TAG, "Load skipped. Device is in special startup mode.");
|
||||||
|
loaded = false;
|
||||||
|
} else {
|
||||||
|
loaded = saved_struct_load(
|
||||||
XTREME_SETTINGS_PATH,
|
XTREME_SETTINGS_PATH,
|
||||||
xtreme_settings,
|
xtreme_settings,
|
||||||
sizeof(XtremeSettings),
|
sizeof(XtremeSettings),
|
||||||
XTREME_SETTINGS_MAGIC,
|
XTREME_SETTINGS_MAGIC,
|
||||||
XTREME_SETTINGS_VERSION);
|
XTREME_SETTINGS_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
if(!loaded) {
|
if(!loaded) {
|
||||||
memset(xtreme_settings, 0, sizeof(XtremeSettings));
|
memset(xtreme_settings, 0, sizeof(XtremeSettings));
|
||||||
loaded = XTREME_SETTINGS_SAVE();
|
|
||||||
}
|
}
|
||||||
return loaded;
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XTREME_SETTINGS_SAVE() {
|
bool XTREME_SETTINGS_SAVE() {
|
||||||
if(xtreme_settings == NULL) {
|
if(xtreme_settings == NULL) {
|
||||||
XTREME_SETTINGS_LOAD();
|
XTREME_SETTINGS_LOAD();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return saved_struct_save(
|
return saved_struct_save(
|
||||||
XTREME_SETTINGS_PATH,
|
XTREME_SETTINGS_PATH,
|
||||||
xtreme_settings,
|
xtreme_settings,
|
||||||
|
|||||||
@@ -34,6 +34,6 @@ typedef struct {
|
|||||||
|
|
||||||
XtremeSettings* XTREME_SETTINGS();
|
XtremeSettings* XTREME_SETTINGS();
|
||||||
|
|
||||||
bool XTREME_SETTINGS_LOAD();
|
void XTREME_SETTINGS_LOAD();
|
||||||
|
|
||||||
bool XTREME_SETTINGS_SAVE();
|
bool XTREME_SETTINGS_SAVE();
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "assets.h"
|
#include "assets.h"
|
||||||
|
|
||||||
void xtreme_on_system_start() {
|
int32_t xtreme_srv(void* p) {
|
||||||
|
UNUSED(p);
|
||||||
|
|
||||||
XTREME_SETTINGS_LOAD();
|
XTREME_SETTINGS_LOAD();
|
||||||
XTREME_ASSETS_LOAD();
|
XTREME_ASSETS_LOAD();
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user