From f6e0d0fd4cfab4b4b751bb7512ffd82514aa0fcc Mon Sep 17 00:00:00 2001 From: RogueMaster Date: Wed, 19 Apr 2023 20:15:20 -0400 Subject: [PATCH] Test Many Changes By Willy-JL --- ReadMe.md | 6 ++- .../application.fam | 0 .../bckupIcon.png | Bin .../scenes/storage_DolphinBackup_scene.c | 0 .../scenes/storage_DolphinBackup_scene.h | 0 .../storage_DolphinBackup_scene_config.h | 0 .../storage_DolphinBackup_scene_confirm.c | 0 .../storage_DolphinBackup_scene_progress.c | 0 .../storage_DolphinBackup.c | 0 .../storage_DolphinBackup.h | 0 .../application.fam | 0 .../drestorer.c | 0 .../drestorer.h | 0 .../restoreIcon.png | Bin .../scenes/drestorer_scene.c | 0 .../scenes/drestorer_scene.h | 0 .../scenes/drestorer_scene_config.h | 0 .../scenes/drestorer_scene_confirm.c | 0 .../scenes/drestorer_scene_progress.c | 0 .../external/dolphintrainer/dolphintrainer.c | 4 +- .../main/archive/helpers/archive_favorites.c | 7 ++++ .../main/archive/helpers/archive_favorites.h | 5 ++- applications/main/fap_loader/fap_loader_app.c | 2 +- applications/main/u2f/u2f_app.c | 6 +++ applications/main/u2f/u2f_data.c | 6 --- applications/main/u2f/u2f_data.h | 8 ++++ applications/services/bt/bt_service/bt.c | 6 ++- applications/services/bt/bt_service/bt_i.h | 5 +-- .../services/bt/bt_service/bt_keys_filename.h | 3 -- applications/services/bt/bt_settings.c | 16 +++++++- applications/services/bt/bt_settings.h | 2 - .../services/bt/bt_settings_filename.h | 3 -- applications/services/cli/cli.c | 2 +- applications/services/desktop/desktop.c | 11 +++++- .../services/desktop/desktop_settings.c | 22 +++++++++++ .../services/desktop/desktop_settings.h | 25 +++--------- .../desktop/desktop_settings_filename.h | 3 -- .../desktop/helpers/slideshow_filename.h | 3 -- .../desktop/views/desktop_view_slideshow.h | 2 +- applications/services/dolphin/dolphin.c | 2 +- .../services/dolphin/helpers/dolphin_state.c | 16 +++++++- .../services/dolphin/helpers/dolphin_state.h | 2 + .../dolphin/helpers/dolphin_state_filename.h | 3 -- .../services/namechangersrv/namechangersrv.c | 2 +- .../services/power/power_service/power.c | 2 +- applications/services/power/power_settings.c | 22 +++++++++++ applications/services/power/power_settings.h | 12 ++---- .../services/power/power_settings_filename.h | 3 -- applications/services/storage/storage.h | 2 + .../services/storage/storage_processing.c | 10 ++++- .../services/storage/storage_processing.h | 2 + .../passport_app/desktop/desktop_settings.c | 22 +++++++++++ .../passport_app/desktop/desktop_settings.h | 36 ++++++++---------- .../desktop/desktop_settings_filename.h | 3 -- .../dolphin/helpers/dolphin_state.c | 17 ++++++++- .../dolphin/helpers/dolphin_state_filename.h | 3 -- .../updater/util/update_task_worker_backup.c | 4 +- firmware/targets/f18/furi_hal/furi_hal.c | 7 ++++ firmware/targets/f7/api_symbols.csv | 1 + firmware/targets/f7/furi_hal/furi_hal.c | 7 ++++ firmware/targets/f7/src/recovery.c | 1 + firmware/targets/furi_hal_include/furi_hal.h | 3 ++ .../targets/furi_hal_include/furi_hal_rtc.h | 1 + lib/update_util/lfs_backup.c | 10 ----- 64 files changed, 225 insertions(+), 115 deletions(-) rename applications/external/{dolphinbackup => .dolphinbackup}/application.fam (100%) rename applications/external/{dolphinbackup => .dolphinbackup}/bckupIcon.png (100%) rename applications/external/{dolphinbackup => .dolphinbackup}/scenes/storage_DolphinBackup_scene.c (100%) rename applications/external/{dolphinbackup => .dolphinbackup}/scenes/storage_DolphinBackup_scene.h (100%) rename applications/external/{dolphinbackup => .dolphinbackup}/scenes/storage_DolphinBackup_scene_config.h (100%) rename applications/external/{dolphinbackup => .dolphinbackup}/scenes/storage_DolphinBackup_scene_confirm.c (100%) rename applications/external/{dolphinbackup => .dolphinbackup}/scenes/storage_DolphinBackup_scene_progress.c (100%) rename applications/external/{dolphinbackup => .dolphinbackup}/storage_DolphinBackup.c (100%) rename applications/external/{dolphinbackup => .dolphinbackup}/storage_DolphinBackup.h (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/application.fam (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/drestorer.c (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/drestorer.h (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/restoreIcon.png (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/scenes/drestorer_scene.c (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/scenes/drestorer_scene.h (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/scenes/drestorer_scene_config.h (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/scenes/drestorer_scene_confirm.c (100%) rename applications/external/{dolphinrestorer => .dolphinrestorer}/scenes/drestorer_scene_progress.c (100%) delete mode 100644 applications/services/bt/bt_service/bt_keys_filename.h delete mode 100644 applications/services/bt/bt_settings_filename.h create mode 100644 applications/services/desktop/desktop_settings.c delete mode 100644 applications/services/desktop/desktop_settings_filename.h delete mode 100644 applications/services/desktop/helpers/slideshow_filename.h delete mode 100644 applications/services/dolphin/helpers/dolphin_state_filename.h create mode 100644 applications/services/power/power_settings.c delete mode 100644 applications/services/power/power_settings_filename.h create mode 100644 applications/settings/passport_app/desktop/desktop_settings.c delete mode 100644 applications/settings/passport_app/desktop/desktop_settings_filename.h delete mode 100644 applications/settings/passport_app/dolphin/helpers/dolphin_state_filename.h diff --git a/ReadMe.md b/ReadMe.md index f5a9d156e95..a23856a62e6 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -60,6 +60,10 @@ This software is for experimental purposes only and is not meant for any illegal - OFW: [Introduce stealth mode and auto-selective lock #2576 (By Astrrra)](https://github.com/flipperdevices/flipperzero-firmware/pull/2576) - Updated: [Authenticator/TOTP (By akopachov)](https://github.com/akopachov/flipper-zero_authenticator) - Updated: [WiFi (Marauder) v3.1.3 (Updated By tcpassos)](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) +- Load fap meta anyway on api mismatch, Move setting files to sd card, Move slideshow temp file to external storage, Store main settings in dedicated ext folder, Fix critical boot modes (dfu / recovery), Expose storage_get_data, Fix resetting PIN code with key combo & U2F keys on external storage (By Willy-JL) +- Updated: [Dolphin Trainer (By nymda)](https://github.com/nymda/FlipperAntidepressants) With New Dolphin State File Location +- Removed/Commented: [Dolphin Backup (By nminaylov)-OFW](https://github.com/flipperdevices/flipperzero-firmware/pull/1384) Modified by RogueMaster +- Removed/Commented: [Dolphin Restorer (By nminaylov)](https://github.com/flipperdevices/flipperzero-firmware/pull/1384) Cloned by RogueMaster @@ -305,8 +309,6 @@ $ ./fbt dolphin_ext - [Deauther PWNDTOOLS V2.6.0 (By HEX0DAYS)](https://github.com/HEX0DAYS/FlipperZero-PWNDTOOLS) `Req: ESP8266` [Original](https://github.com/SpacehuhnTech/esp8266_deauther) - [Distance Sensor (By privet971)](https://github.com/privet971/FlipperZeroApps/tree/main/usping) `Req: Parallax (3 wires) SKU 28015` - [Distance Sensor (By Sanqui)](https://github.com/Sanqui/flipperzero-firmware/tree/hc_sr04) `Req: HC-SR04` Ported/Modified by xMasterX -- [Dolphin Backup (By nminaylov)-OFW](https://github.com/flipperdevices/flipperzero-firmware/pull/1384) Modified by RogueMaster -- [Dolphin Restorer (By nminaylov)](https://github.com/flipperdevices/flipperzero-firmware/pull/1384) Cloned by RogueMaster - [Dolphin Trainer (By nymda)](https://github.com/nymda/FlipperAntidepressants) (Change Flipper level, experience and butthurt) [Level Changer (By RogueMaster)](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/commit/96b67d9d53b5a70e85f8bdd81dcbc602f90d46cd) - [DSTIKE Deauther (By SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module/tree/FlipperZero-Module-v2/FlipperZeroModule/FlipperZero-ESP8266-Deauth-App) `Req: ESP8266` - [DTMF Dolphin (By litui)](https://github.com/litui/dtmf_dolphin) diff --git a/applications/external/dolphinbackup/application.fam b/applications/external/.dolphinbackup/application.fam similarity index 100% rename from applications/external/dolphinbackup/application.fam rename to applications/external/.dolphinbackup/application.fam diff --git a/applications/external/dolphinbackup/bckupIcon.png b/applications/external/.dolphinbackup/bckupIcon.png similarity index 100% rename from applications/external/dolphinbackup/bckupIcon.png rename to applications/external/.dolphinbackup/bckupIcon.png diff --git a/applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene.c b/applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene.c similarity index 100% rename from applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene.c rename to applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene.c diff --git a/applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene.h b/applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene.h similarity index 100% rename from applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene.h rename to applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene.h diff --git a/applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene_config.h b/applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene_config.h similarity index 100% rename from applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene_config.h rename to applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene_config.h diff --git a/applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene_confirm.c b/applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene_confirm.c similarity index 100% rename from applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene_confirm.c rename to applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene_confirm.c diff --git a/applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene_progress.c b/applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene_progress.c similarity index 100% rename from applications/external/dolphinbackup/scenes/storage_DolphinBackup_scene_progress.c rename to applications/external/.dolphinbackup/scenes/storage_DolphinBackup_scene_progress.c diff --git a/applications/external/dolphinbackup/storage_DolphinBackup.c b/applications/external/.dolphinbackup/storage_DolphinBackup.c similarity index 100% rename from applications/external/dolphinbackup/storage_DolphinBackup.c rename to applications/external/.dolphinbackup/storage_DolphinBackup.c diff --git a/applications/external/dolphinbackup/storage_DolphinBackup.h b/applications/external/.dolphinbackup/storage_DolphinBackup.h similarity index 100% rename from applications/external/dolphinbackup/storage_DolphinBackup.h rename to applications/external/.dolphinbackup/storage_DolphinBackup.h diff --git a/applications/external/dolphinrestorer/application.fam b/applications/external/.dolphinrestorer/application.fam similarity index 100% rename from applications/external/dolphinrestorer/application.fam rename to applications/external/.dolphinrestorer/application.fam diff --git a/applications/external/dolphinrestorer/drestorer.c b/applications/external/.dolphinrestorer/drestorer.c similarity index 100% rename from applications/external/dolphinrestorer/drestorer.c rename to applications/external/.dolphinrestorer/drestorer.c diff --git a/applications/external/dolphinrestorer/drestorer.h b/applications/external/.dolphinrestorer/drestorer.h similarity index 100% rename from applications/external/dolphinrestorer/drestorer.h rename to applications/external/.dolphinrestorer/drestorer.h diff --git a/applications/external/dolphinrestorer/restoreIcon.png b/applications/external/.dolphinrestorer/restoreIcon.png similarity index 100% rename from applications/external/dolphinrestorer/restoreIcon.png rename to applications/external/.dolphinrestorer/restoreIcon.png diff --git a/applications/external/dolphinrestorer/scenes/drestorer_scene.c b/applications/external/.dolphinrestorer/scenes/drestorer_scene.c similarity index 100% rename from applications/external/dolphinrestorer/scenes/drestorer_scene.c rename to applications/external/.dolphinrestorer/scenes/drestorer_scene.c diff --git a/applications/external/dolphinrestorer/scenes/drestorer_scene.h b/applications/external/.dolphinrestorer/scenes/drestorer_scene.h similarity index 100% rename from applications/external/dolphinrestorer/scenes/drestorer_scene.h rename to applications/external/.dolphinrestorer/scenes/drestorer_scene.h diff --git a/applications/external/dolphinrestorer/scenes/drestorer_scene_config.h b/applications/external/.dolphinrestorer/scenes/drestorer_scene_config.h similarity index 100% rename from applications/external/dolphinrestorer/scenes/drestorer_scene_config.h rename to applications/external/.dolphinrestorer/scenes/drestorer_scene_config.h diff --git a/applications/external/dolphinrestorer/scenes/drestorer_scene_confirm.c b/applications/external/.dolphinrestorer/scenes/drestorer_scene_confirm.c similarity index 100% rename from applications/external/dolphinrestorer/scenes/drestorer_scene_confirm.c rename to applications/external/.dolphinrestorer/scenes/drestorer_scene_confirm.c diff --git a/applications/external/dolphinrestorer/scenes/drestorer_scene_progress.c b/applications/external/.dolphinrestorer/scenes/drestorer_scene_progress.c similarity index 100% rename from applications/external/dolphinrestorer/scenes/drestorer_scene_progress.c rename to applications/external/.dolphinrestorer/scenes/drestorer_scene_progress.c diff --git a/applications/external/dolphintrainer/dolphintrainer.c b/applications/external/dolphintrainer/dolphintrainer.c index 51fab000ec5..14831ebfecd 100644 --- a/applications/external/dolphintrainer/dolphintrainer.c +++ b/applications/external/dolphintrainer/dolphintrainer.c @@ -108,7 +108,7 @@ int32_t dolphin_trainer_app(void* p) { bool running = true; bool success = saved_struct_load( - "/int/.dolphin.state", &stateLocal->data, sizeof(DolphinStoreData), 0xD0, 0x01); + DOLPHIN_STATE_PATH, &stateLocal->data, sizeof(DolphinStoreData), 0xD0, 0x01); if(!success) { running = false; } @@ -118,7 +118,7 @@ int32_t dolphin_trainer_app(void* p) { if(event.type == InputTypePress) { if(event.key == InputKeyOk && btnIndex == 3) { bool result = saved_struct_save( - "/int/.dolphin.state", &stateLocal->data, sizeof(DolphinStoreData), 0xD0, 0x01); + DOLPHIN_STATE_PATH, &stateLocal->data, sizeof(DolphinStoreData), 0xD0, 0x01); if(result) { furi_delay_ms(100); furi_hal_power_reset(); diff --git a/applications/main/archive/helpers/archive_favorites.c b/applications/main/archive/helpers/archive_favorites.c index f395ee5a116..7304be6b481 100644 --- a/applications/main/archive/helpers/archive_favorites.c +++ b/applications/main/archive/helpers/archive_favorites.c @@ -140,6 +140,13 @@ bool archive_favorites_read(void* context) { bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING); + if(!result) { + storage_file_close(file); + storage_common_copy(storage, ARCHIVE_FAV_OLD_PATH, ARCHIVE_FAV_PATH); + storage_common_remove(storage, ARCHIVE_FAV_OLD_PATH); + result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING); + } + if(result) { while(1) { if(!archive_favorites_read_line(file, buffer)) { diff --git a/applications/main/archive/helpers/archive_favorites.h b/applications/main/archive/helpers/archive_favorites.h index db89433782a..e45af92e746 100644 --- a/applications/main/archive/helpers/archive_favorites.h +++ b/applications/main/archive/helpers/archive_favorites.h @@ -2,8 +2,9 @@ #include -#define ARCHIVE_FAV_PATH ANY_PATH("favorites.txt") -#define ARCHIVE_FAV_TEMP_PATH ANY_PATH("favorites.tmp") +#define ARCHIVE_FAV_OLD_PATH EXT_PATH("favorites.txt") +#define ARCHIVE_FAV_PATH CFG_PATH("favorites.txt") +#define ARCHIVE_FAV_TEMP_PATH CFG_PATH("favorites.tmp") uint16_t archive_favorites_count(void* context); bool archive_favorites_read(void* context); diff --git a/applications/main/fap_loader/fap_loader_app.c b/applications/main/fap_loader/fap_loader_app.c index 60e4dd16cb4..07ca44406b5 100644 --- a/applications/main/fap_loader/fap_loader_app.c +++ b/applications/main/fap_loader/fap_loader_app.c @@ -37,7 +37,7 @@ bool fap_loader_load_name_and_icon( bool load_success = false; - if(preload_res == FlipperApplicationPreloadStatusSuccess) { + if(preload_res == FlipperApplicationPreloadStatusSuccess || preload_res == FlipperApplicationPreloadStatusApiMismatch) { const FlipperApplicationManifest* manifest = flipper_application_get_manifest(app); if(manifest->has_icon) { memcpy(*icon_ptr, manifest->icon, FAP_MANIFEST_MAX_ICON_SIZE); diff --git a/applications/main/u2f/u2f_app.c b/applications/main/u2f/u2f_app.c index 21648197680..60500152a8b 100644 --- a/applications/main/u2f/u2f_app.c +++ b/applications/main/u2f/u2f_app.c @@ -2,6 +2,7 @@ #include "u2f_data.h" #include #include +#include static bool u2f_app_custom_event_callback(void* context, uint32_t event) { furi_assert(context); @@ -27,6 +28,11 @@ U2fApp* u2f_app_alloc() { app->gui = furi_record_open(RECORD_GUI); app->notifications = furi_record_open(RECORD_NOTIFICATION); + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, U2F_CNT_OLD_FILE, U2F_CNT_FILE); + storage_common_copy(storage, U2F_KEY_OLD_FILE, U2F_KEY_FILE); + furi_record_close(RECORD_STORAGE); + app->view_dispatcher = view_dispatcher_alloc(); app->scene_manager = scene_manager_alloc(&u2f_scene_handlers, app); view_dispatcher_enable_queue(app->view_dispatcher); diff --git a/applications/main/u2f/u2f_data.c b/applications/main/u2f/u2f_data.c index 217733c943c..34f037aed64 100644 --- a/applications/main/u2f/u2f_data.c +++ b/applications/main/u2f/u2f_data.c @@ -7,12 +7,6 @@ #define TAG "U2F" -#define U2F_DATA_FOLDER ANY_PATH("u2f/") -#define U2F_CERT_FILE U2F_DATA_FOLDER "assets/cert.der" -#define U2F_CERT_KEY_FILE U2F_DATA_FOLDER "assets/cert_key.u2f" -#define U2F_KEY_FILE U2F_DATA_FOLDER "key.u2f" -#define U2F_CNT_FILE U2F_DATA_FOLDER "cnt.u2f" - #define U2F_DATA_FILE_ENCRYPTION_KEY_SLOT_FACTORY 2 #define U2F_DATA_FILE_ENCRYPTION_KEY_SLOT_UNIQUE 11 diff --git a/applications/main/u2f/u2f_data.h b/applications/main/u2f/u2f_data.h index 8d3923464a3..f3c62f89d3d 100644 --- a/applications/main/u2f/u2f_data.h +++ b/applications/main/u2f/u2f_data.h @@ -6,6 +6,14 @@ extern "C" { #include +#define U2F_DATA_FOLDER EXT_PATH("u2f/") +#define U2F_CERT_FILE U2F_DATA_FOLDER "assets/cert.der" +#define U2F_CERT_KEY_FILE U2F_DATA_FOLDER "assets/cert_key.u2f" +#define U2F_KEY_OLD_FILE U2F_DATA_FOLDER "key.u2f" +#define U2F_CNT_OLD_FILE U2F_DATA_FOLDER "cnt.u2f" +#define U2F_KEY_FILE INT_PATH(".key.u2f") +#define U2F_CNT_FILE INT_PATH(".cnt.u2f") + bool u2f_data_check(bool cert_only); bool u2f_data_cert_check(); diff --git a/applications/services/bt/bt_service/bt.c b/applications/services/bt/bt_service/bt.c index 5b2bd3c8e5e..28ec2c57a3b 100644 --- a/applications/services/bt/bt_service/bt.c +++ b/applications/services/bt/bt_service/bt.c @@ -120,6 +120,10 @@ Bt* bt_alloc() { bt_settings_save(&bt->bt_settings); } // Keys storage + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, BT_KEYS_STORAGE_OLD_PATH, BT_KEYS_STORAGE_PATH); + storage_common_remove(storage, BT_KEYS_STORAGE_OLD_PATH); + furi_record_close(RECORD_STORAGE); bt->keys_storage = bt_keys_storage_alloc(BT_KEYS_STORAGE_PATH); // Alloc queue bt->message_queue = furi_message_queue_alloc(8, sizeof(BtMessage)); @@ -376,7 +380,7 @@ int32_t bt_srv(void* p) { UNUSED(p); Bt* bt = bt_alloc(); - if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) { + if(!furi_hal_is_normal_boot()) { FURI_LOG_W(TAG, "Skipping start in special boot mode"); ble_glue_wait_for_c2_start(FURI_HAL_BT_C2_START_TIMEOUT); furi_record_create(RECORD_BT, bt); diff --git a/applications/services/bt/bt_service/bt_i.h b/applications/services/bt/bt_service/bt_i.h index c8a0e99654e..14f2059b8e0 100644 --- a/applications/services/bt/bt_service/bt_i.h +++ b/applications/services/bt/bt_service/bt_i.h @@ -18,9 +18,8 @@ #include #include -#include "bt_keys_filename.h" - -#define BT_KEYS_STORAGE_PATH INT_PATH(BT_KEYS_STORAGE_FILE_NAME) +#define BT_KEYS_STORAGE_OLD_PATH INT_PATH(".bt.keys") +#define BT_KEYS_STORAGE_PATH CFG_PATH("bt.keys") #define BT_API_UNLOCK_EVENT (1UL << 0) diff --git a/applications/services/bt/bt_service/bt_keys_filename.h b/applications/services/bt/bt_service/bt_keys_filename.h deleted file mode 100644 index da1d3f54ec7..00000000000 --- a/applications/services/bt/bt_service/bt_keys_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define BT_KEYS_STORAGE_FILE_NAME ".bt.keys" diff --git a/applications/services/bt/bt_settings.c b/applications/services/bt/bt_settings.c index 1eaf6c7d70b..e2b652025a9 100644 --- a/applications/services/bt/bt_settings.c +++ b/applications/services/bt/bt_settings.c @@ -4,15 +4,27 @@ #include #include -#define BT_SETTINGS_PATH INT_PATH(BT_SETTINGS_FILE_NAME) +#define BT_SETTINGS_OLD_PATH INT_PATH(".bt.settings") +#define BT_SETTINGS_PATH CFG_PATH("bt.settings") #define BT_SETTINGS_VERSION (0) #define BT_SETTINGS_MAGIC (0x19) bool bt_settings_load(BtSettings* bt_settings) { furi_assert(bt_settings); - return saved_struct_load( + bool ret = saved_struct_load( BT_SETTINGS_PATH, bt_settings, sizeof(BtSettings), BT_SETTINGS_MAGIC, BT_SETTINGS_VERSION); + + if(!ret) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, BT_SETTINGS_OLD_PATH, BT_SETTINGS_PATH); + storage_common_remove(storage, BT_SETTINGS_OLD_PATH); + furi_record_close(RECORD_STORAGE); + ret = saved_struct_load( + BT_SETTINGS_PATH, bt_settings, sizeof(BtSettings), BT_SETTINGS_MAGIC, BT_SETTINGS_VERSION); + } + + return ret; } bool bt_settings_save(BtSettings* bt_settings) { diff --git a/applications/services/bt/bt_settings.h b/applications/services/bt/bt_settings.h index 9ed8be89c4a..65a5f10b7fd 100644 --- a/applications/services/bt/bt_settings.h +++ b/applications/services/bt/bt_settings.h @@ -1,7 +1,5 @@ #pragma once -#include "bt_settings_filename.h" - #include #include diff --git a/applications/services/bt/bt_settings_filename.h b/applications/services/bt/bt_settings_filename.h deleted file mode 100644 index e5fb7ec48da..00000000000 --- a/applications/services/bt/bt_settings_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define BT_SETTINGS_FILE_NAME ".bt.settings" diff --git a/applications/services/cli/cli.c b/applications/services/cli/cli.c index ad3bbd6650d..a6aaa842913 100644 --- a/applications/services/cli/cli.c +++ b/applications/services/cli/cli.c @@ -460,7 +460,7 @@ int32_t cli_srv(void* p) { furi_thread_set_stdout_callback(NULL); } - if(furi_hal_rtc_get_boot_mode() == FuriHalRtcBootModeNormal) { + if(furi_hal_is_normal_boot()) { cli_session_open(cli, &cli_vcp); } else { FURI_LOG_W(TAG, "Skipping start in special boot mode"); diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index f9c1401b89a..0b4cff681ea 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -550,9 +550,18 @@ static bool desktop_check_file_flag(const char* flag_path) { int32_t desktop_srv(void* p) { UNUSED(p); - if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) { + if(!furi_hal_is_normal_boot()) { FURI_LOG_W("Desktop", "Desktop load skipped. Device is in special startup mode."); } else { + + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagResetPin)) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_remove(storage, DESKTOP_SETTINGS_PATH); + storage_common_remove(storage, DESKTOP_SETTINGS_OLD_PATH); + furi_record_close(RECORD_STORAGE); + furi_hal_rtc_reset_flag(FuriHalRtcFlagResetPin); + } + Desktop* desktop = desktop_alloc(); bool loaded = DESKTOP_SETTINGS_LOAD(&desktop->settings); diff --git a/applications/services/desktop/desktop_settings.c b/applications/services/desktop/desktop_settings.c new file mode 100644 index 00000000000..0f3f0b306a8 --- /dev/null +++ b/applications/services/desktop/desktop_settings.c @@ -0,0 +1,22 @@ +desktop_#include "desktop_settings.h" + +bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x) { + return saved_struct_save( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); +} + +bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x) { + bool ret = saved_struct_load( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); + + if(!ret) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, DESKTOP_SETTINGS_OLD_PATH, DESKTOP_SETTINGS_PATH); + storage_common_remove(storage, DESKTOP_SETTINGS_OLD_PATH); + furi_record_close(RECORD_STORAGE); + ret = saved_struct_load( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); + } + + return ret; +} \ No newline at end of file diff --git a/applications/services/desktop/desktop_settings.h b/applications/services/desktop/desktop_settings.h index 62eaa10f826..dce2b167725 100644 --- a/applications/services/desktop/desktop_settings.h +++ b/applications/services/desktop/desktop_settings.h @@ -1,7 +1,5 @@ #pragma once -#include "desktop_settings_filename.h" - #include #include #include @@ -10,28 +8,13 @@ #define DESKTOP_SETTINGS_VER (8) -#define DESKTOP_SETTINGS_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME) +#define DESKTOP_SETTINGS_OLD_PATH INT_PATH(".desktop.settings") +#define DESKTOP_SETTINGS_PATH CFG_PATH("desktop.settings") #define DESKTOP_SETTINGS_MAGIC (0x17) #define PIN_MAX_LENGTH 12 #define DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG "run_pin_setup" -#define DESKTOP_SETTINGS_SAVE(x) \ - saved_struct_save( \ - DESKTOP_SETTINGS_PATH, \ - (x), \ - sizeof(DesktopSettings), \ - DESKTOP_SETTINGS_MAGIC, \ - DESKTOP_SETTINGS_VER) - -#define DESKTOP_SETTINGS_LOAD(x) \ - saved_struct_load( \ - DESKTOP_SETTINGS_PATH, \ - (x), \ - sizeof(DesktopSettings), \ - DESKTOP_SETTINGS_MAGIC, \ - DESKTOP_SETTINGS_VER) - #define MAX_PIN_SIZE 10 #define MIN_PIN_SIZE 4 #define MAX_APP_LENGTH 128 @@ -77,3 +60,7 @@ typedef struct { bool rpc_icon; bool auto_lock_with_pin; } DesktopSettings; + +bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x); + +bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x); \ No newline at end of file diff --git a/applications/services/desktop/desktop_settings_filename.h b/applications/services/desktop/desktop_settings_filename.h deleted file mode 100644 index b9140f24cfc..00000000000 --- a/applications/services/desktop/desktop_settings_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define DESKTOP_SETTINGS_FILE_NAME ".desktop.settings" diff --git a/applications/services/desktop/helpers/slideshow_filename.h b/applications/services/desktop/helpers/slideshow_filename.h deleted file mode 100644 index 2250d91dd21..00000000000 --- a/applications/services/desktop/helpers/slideshow_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define SLIDESHOW_FILE_NAME ".slideshow" diff --git a/applications/services/desktop/views/desktop_view_slideshow.h b/applications/services/desktop/views/desktop_view_slideshow.h index 624cbf007d7..fd95cd22e5b 100644 --- a/applications/services/desktop/views/desktop_view_slideshow.h +++ b/applications/services/desktop/views/desktop_view_slideshow.h @@ -5,7 +5,7 @@ #include "desktop_events.h" #include "../helpers/slideshow_filename.h" -#define SLIDESHOW_FS_PATH INT_PATH(SLIDESHOW_FILE_NAME) +#define SLIDESHOW_FS_PATH EXT_PATH(".slideshow") typedef struct DesktopSlideshowView DesktopSlideshowView; diff --git a/applications/services/dolphin/dolphin.c b/applications/services/dolphin/dolphin.c index a63e96d1588..6db28bca3e8 100644 --- a/applications/services/dolphin/dolphin.c +++ b/applications/services/dolphin/dolphin.c @@ -168,7 +168,7 @@ static void dolphin_update_clear_limits_timer_period(Dolphin* dolphin) { int32_t dolphin_srv(void* p) { UNUSED(p); - if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) { + if(!furi_hal_is_normal_boot()) { FURI_LOG_W(TAG, "Skipping start in special boot mode"); return 0; } diff --git a/applications/services/dolphin/helpers/dolphin_state.c b/applications/services/dolphin/helpers/dolphin_state.c index e439e607625..8b586d2b15e 100644 --- a/applications/services/dolphin/helpers/dolphin_state.c +++ b/applications/services/dolphin/helpers/dolphin_state.c @@ -1,6 +1,5 @@ #include "dolphin_state.h" #include "dolphin/helpers/dolphin_deed.h" -#include "dolphin_state_filename.h" #include #include @@ -11,7 +10,7 @@ #define TAG "DolphinState" -#define DOLPHIN_STATE_PATH INT_PATH(DOLPHIN_STATE_FILE_NAME) +#define DOLPHIN_STATE_OLD_PATH INT_PATH(".dolphin.state") #define DOLPHIN_STATE_HEADER_MAGIC 0xD0 #define DOLPHIN_STATE_HEADER_VERSION 0x01 @@ -93,6 +92,19 @@ bool dolphin_state_load(DolphinState* dolphin_state) { DOLPHIN_STATE_HEADER_MAGIC, DOLPHIN_STATE_HEADER_VERSION); + if(!success) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, DOLPHIN_STATE_OLD_PATH, DOLPHIN_STATE_PATH); + storage_common_remove(storage, DOLPHIN_STATE_OLD_PATH); + furi_record_close(RECORD_STORAGE); + success = saved_struct_load( + DOLPHIN_STATE_PATH, + &dolphin_state->data, + sizeof(DolphinStoreData), + DOLPHIN_STATE_HEADER_MAGIC, + DOLPHIN_STATE_HEADER_VERSION); + } + if(success) { if((dolphin_state->data.butthurt > BUTTHURT_MAX) || (dolphin_state->data.butthurt < BUTTHURT_MIN)) { diff --git a/applications/services/dolphin/helpers/dolphin_state.h b/applications/services/dolphin/helpers/dolphin_state.h index 0f6cc281d9e..f24a7d84cd3 100644 --- a/applications/services/dolphin/helpers/dolphin_state.h +++ b/applications/services/dolphin/helpers/dolphin_state.h @@ -5,6 +5,8 @@ #include #include +#define DOLPHIN_STATE_PATH CFG_PATH("dolphin.state") + #ifdef __cplusplus extern "C" { #endif diff --git a/applications/services/dolphin/helpers/dolphin_state_filename.h b/applications/services/dolphin/helpers/dolphin_state_filename.h deleted file mode 100644 index 86822c0ac70..00000000000 --- a/applications/services/dolphin/helpers/dolphin_state_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define DOLPHIN_STATE_FILE_NAME ".dolphin.state" diff --git a/applications/services/namechangersrv/namechangersrv.c b/applications/services/namechangersrv/namechangersrv.c index 26bd0cfe4a8..988e10a4220 100644 --- a/applications/services/namechangersrv/namechangersrv.c +++ b/applications/services/namechangersrv/namechangersrv.c @@ -5,7 +5,7 @@ int32_t namechanger_on_system_start(void* p) { UNUSED(p); - if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) { + if(!furi_hal_is_normal_boot()) { FURI_LOG_W(TAG, "NameChangerSRV load skipped. Device is in special startup mode."); } else { Storage* storage = furi_record_open(RECORD_STORAGE); diff --git a/applications/services/power/power_service/power.c b/applications/services/power/power_service/power.c index 2ff68afe219..a3d1513edd3 100644 --- a/applications/services/power/power_service/power.c +++ b/applications/services/power/power_service/power.c @@ -513,7 +513,7 @@ static void power_check_battery_level_change(Power* power) { int32_t power_srv(void* p) { UNUSED(p); - if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) { + if(!furi_hal_is_normal_boot()) { FURI_LOG_W(TAG, "Skipping start in special boot mode"); return 0; } diff --git a/applications/services/power/power_settings.c b/applications/services/power/power_settings.c new file mode 100644 index 00000000000..f0a0da3991d --- /dev/null +++ b/applications/services/power/power_settings.c @@ -0,0 +1,22 @@ +#include "power_settings.h" + +bool SAVE_POWER_SETTINGS(uint32_t* x) { + return saved_struct_save( + POWER_SETTINGS_PATH, x, sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); +} + +bool LOAD_POWER_SETTINGS(uint32_t* x) { + bool ret = saved_struct_load( + POWER_SETTINGS_PATH, x, sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); + + if(!ret) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, POWER_SETTINGS_OLD_PATH, POWER_SETTINGS_PATH); + storage_common_remove(storage, POWER_SETTINGS_OLD_PATH); + furi_record_close(RECORD_STORAGE); + ret = saved_struct_load( + POWER_SETTINGS_PATH, x, sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); + } + + return ret; +} \ No newline at end of file diff --git a/applications/services/power/power_settings.h b/applications/services/power/power_settings.h index 0f2afa2950d..5c079369cef 100644 --- a/applications/services/power/power_settings.h +++ b/applications/services/power/power_settings.h @@ -1,16 +1,12 @@ #include #include -#include "power_settings_filename.h" #define POWER_SETTINGS_VER (1) -#define POWER_SETTINGS_PATH INT_PATH(POWER_SETTINGS_FILE_NAME) +#define POWER_SETTINGS_OLD_PATH INT_PATH(".power.settings") +#define POWER_SETTINGS_PATH CFG_PATH("power.settings") #define POWER_SETTINGS_MAGIC (0x21) -#define SAVE_POWER_SETTINGS(x) \ - saved_struct_save( \ - POWER_SETTINGS_PATH, (x), sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER) +bool SAVE_POWER_SETTINGS(uint32_t* x); -#define LOAD_POWER_SETTINGS(x) \ - saved_struct_load( \ - POWER_SETTINGS_PATH, (x), sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER) +bool LOAD_POWER_SETTINGS(uint32_t* x); diff --git a/applications/services/power/power_settings_filename.h b/applications/services/power/power_settings_filename.h deleted file mode 100644 index 6a3be534cdf..00000000000 --- a/applications/services/power/power_settings_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define POWER_SETTINGS_FILE_NAME ".power.settings" \ No newline at end of file diff --git a/applications/services/storage/storage.h b/applications/services/storage/storage.h index 5991e765ff8..78dae7a2ce2 100644 --- a/applications/services/storage/storage.h +++ b/applications/services/storage/storage.h @@ -12,12 +12,14 @@ extern "C" { #define STORAGE_ANY_PATH_PREFIX "/any" #define STORAGE_APP_DATA_PATH_PREFIX "/data" #define STORAGE_APP_ASSETS_PATH_PREFIX "/assets" +#define STORAGE_CFG_PATH_PREFIX STORAGE_EXT_PATH_PREFIX "/.config" #define INT_PATH(path) STORAGE_INT_PATH_PREFIX "/" path #define EXT_PATH(path) STORAGE_EXT_PATH_PREFIX "/" path #define ANY_PATH(path) STORAGE_ANY_PATH_PREFIX "/" path #define APP_DATA_PATH(path) STORAGE_APP_DATA_PATH_PREFIX "/" path #define APP_ASSETS_PATH(path) STORAGE_APP_ASSETS_PATH_PREFIX "/" path +#define CFG_PATH(path) STORAGE_CFG_PATH_PREFIX "/" path #define RECORD_STORAGE "storage" diff --git a/applications/services/storage/storage_processing.c b/applications/services/storage/storage_processing.c index e6b42696106..1b4ed1d93fb 100644 --- a/applications/services/storage/storage_processing.c +++ b/applications/services/storage/storage_processing.c @@ -77,7 +77,7 @@ static void storage_path_change_to_real_storage(FuriString* path, StorageType re } } -static FS_Error storage_get_data(Storage* app, FuriString* path, StorageData** storage) { +FS_Error storage_get_data(Storage* app, FuriString* path, StorageData** storage) { StorageType type = storage_get_type_by_path(path); if(storage_type_is_valid(type)) { @@ -500,6 +500,14 @@ void storage_process_alias( furi_string_get_cstr(apps_assets_path_with_appsid)); furi_string_free(apps_assets_path_with_appsid); + } else if(furi_string_start_with(path, STORAGE_CFG_PATH_PREFIX)) { + // Create config folder if it doesn't exist + FuriString* config_path = furi_string_alloc_set(STORAGE_CFG_PATH_PREFIX); + if(create_folders && + storage_process_common_stat(app, config_path, NULL) != FSE_OK) { + storage_process_common_mkdir(app, config_path); + } + furi_string_free(config_path); } } diff --git a/applications/services/storage/storage_processing.h b/applications/services/storage/storage_processing.h index bb779c7a80e..67d16d8f833 100644 --- a/applications/services/storage/storage_processing.h +++ b/applications/services/storage/storage_processing.h @@ -9,6 +9,8 @@ extern "C" { #endif +FS_Error storage_get_data(Storage* app, FuriString* path, StorageData** storage); + void storage_process_message(Storage* app, StorageMessage* message); #ifdef __cplusplus diff --git a/applications/settings/passport_app/desktop/desktop_settings.c b/applications/settings/passport_app/desktop/desktop_settings.c new file mode 100644 index 00000000000..0f3f0b306a8 --- /dev/null +++ b/applications/settings/passport_app/desktop/desktop_settings.c @@ -0,0 +1,22 @@ +desktop_#include "desktop_settings.h" + +bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x) { + return saved_struct_save( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); +} + +bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x) { + bool ret = saved_struct_load( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); + + if(!ret) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, DESKTOP_SETTINGS_OLD_PATH, DESKTOP_SETTINGS_PATH); + storage_common_remove(storage, DESKTOP_SETTINGS_OLD_PATH); + furi_record_close(RECORD_STORAGE); + ret = saved_struct_load( + DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); + } + + return ret; +} \ No newline at end of file diff --git a/applications/settings/passport_app/desktop/desktop_settings.h b/applications/settings/passport_app/desktop/desktop_settings.h index 5524ab9f8ad..dce2b167725 100644 --- a/applications/settings/passport_app/desktop/desktop_settings.h +++ b/applications/settings/passport_app/desktop/desktop_settings.h @@ -1,37 +1,20 @@ #pragma once -#include "desktop_settings_filename.h" - #include #include #include #include #include -#define DESKTOP_SETTINGS_VER (6) +#define DESKTOP_SETTINGS_VER (8) -#define DESKTOP_SETTINGS_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME) +#define DESKTOP_SETTINGS_OLD_PATH INT_PATH(".desktop.settings") +#define DESKTOP_SETTINGS_PATH CFG_PATH("desktop.settings") #define DESKTOP_SETTINGS_MAGIC (0x17) #define PIN_MAX_LENGTH 12 #define DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG "run_pin_setup" -#define DESKTOP_SETTINGS_SAVE(x) \ - saved_struct_save( \ - DESKTOP_SETTINGS_PATH, \ - (x), \ - sizeof(DesktopSettings), \ - DESKTOP_SETTINGS_MAGIC, \ - DESKTOP_SETTINGS_VER) - -#define DESKTOP_SETTINGS_LOAD(x) \ - saved_struct_load( \ - DESKTOP_SETTINGS_PATH, \ - (x), \ - sizeof(DesktopSettings), \ - DESKTOP_SETTINGS_MAGIC, \ - DESKTOP_SETTINGS_VER) - #define MAX_PIN_SIZE 10 #define MIN_PIN_SIZE 4 #define MAX_APP_LENGTH 128 @@ -44,6 +27,9 @@ #define DISPLAY_BATTERY_BAR_PERCENT 5 #define DISPLAY_BATTERY_NONE 6 +#define ICON_STYLE_STOCK 0 +#define ICON_STYLE_SLIM 1 + #define FAP_LOADER_APP_NAME "Applications" typedef struct { @@ -59,6 +45,8 @@ typedef struct { typedef struct { FavoriteApp favorite_primary; FavoriteApp favorite_secondary; + FavoriteApp favorite_tertiary; + FavoriteApp favorite_quaternary; PinCode pin_code; uint8_t is_locked; uint32_t auto_lock_delay_ms; @@ -67,4 +55,12 @@ typedef struct { uint8_t dummy_mode; bool top_bar; bool sdcard; + uint8_t icon_style; + bool bt_icon; + bool rpc_icon; + bool auto_lock_with_pin; } DesktopSettings; + +bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x); + +bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x); \ No newline at end of file diff --git a/applications/settings/passport_app/desktop/desktop_settings_filename.h b/applications/settings/passport_app/desktop/desktop_settings_filename.h deleted file mode 100644 index b9140f24cfc..00000000000 --- a/applications/settings/passport_app/desktop/desktop_settings_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define DESKTOP_SETTINGS_FILE_NAME ".desktop.settings" diff --git a/applications/settings/passport_app/dolphin/helpers/dolphin_state.c b/applications/settings/passport_app/dolphin/helpers/dolphin_state.c index e439e607625..8707f0452c3 100644 --- a/applications/settings/passport_app/dolphin/helpers/dolphin_state.c +++ b/applications/settings/passport_app/dolphin/helpers/dolphin_state.c @@ -1,6 +1,5 @@ #include "dolphin_state.h" #include "dolphin/helpers/dolphin_deed.h" -#include "dolphin_state_filename.h" #include #include @@ -11,7 +10,8 @@ #define TAG "DolphinState" -#define DOLPHIN_STATE_PATH INT_PATH(DOLPHIN_STATE_FILE_NAME) +#define DOLPHIN_STATE_OLD_PATH INT_PATH(".dolphin.state") +#define DOLPHIN_STATE_PATH CFG_PATH("dolphin.state") #define DOLPHIN_STATE_HEADER_MAGIC 0xD0 #define DOLPHIN_STATE_HEADER_VERSION 0x01 @@ -93,6 +93,19 @@ bool dolphin_state_load(DolphinState* dolphin_state) { DOLPHIN_STATE_HEADER_MAGIC, DOLPHIN_STATE_HEADER_VERSION); + if(!success) { + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_common_copy(storage, DOLPHIN_STATE_OLD_PATH, DOLPHIN_STATE_PATH); + storage_common_remove(storage, DOLPHIN_STATE_OLD_PATH); + furi_record_close(RECORD_STORAGE); + success = saved_struct_load( + DOLPHIN_STATE_PATH, + &dolphin_state->data, + sizeof(DolphinStoreData), + DOLPHIN_STATE_HEADER_MAGIC, + DOLPHIN_STATE_HEADER_VERSION); + } + if(success) { if((dolphin_state->data.butthurt > BUTTHURT_MAX) || (dolphin_state->data.butthurt < BUTTHURT_MIN)) { diff --git a/applications/settings/passport_app/dolphin/helpers/dolphin_state_filename.h b/applications/settings/passport_app/dolphin/helpers/dolphin_state_filename.h deleted file mode 100644 index 86822c0ac70..00000000000 --- a/applications/settings/passport_app/dolphin/helpers/dolphin_state_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define DOLPHIN_STATE_FILE_NAME ".dolphin.state" diff --git a/applications/system/updater/util/update_task_worker_backup.c b/applications/system/updater/util/update_task_worker_backup.c index f2c33c2edb4..17c28467b57 100644 --- a/applications/system/updater/util/update_task_worker_backup.c +++ b/applications/system/updater/util/update_task_worker_backup.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include @@ -201,7 +201,7 @@ static bool update_task_post_update(UpdateTask* update_task) { if(storage_common_copy( update_task->storage, furi_string_get_cstr(tmp_path), - INT_PATH(SLIDESHOW_FILE_NAME)) != FSE_OK) { + SLIDESHOW_FS_PATH) != FSE_OK) { // actually, not critical } furi_string_free(tmp_path); diff --git a/firmware/targets/f18/furi_hal/furi_hal.c b/firmware/targets/f18/furi_hal/furi_hal.c index 4064dd64726..9b234143caf 100644 --- a/firmware/targets/f18/furi_hal/furi_hal.c +++ b/firmware/targets/f18/furi_hal/furi_hal.c @@ -6,6 +6,12 @@ #define TAG "FuriHal" +bool normal_boot = false; + +bool furi_hal_is_normal_boot() { + return normal_boot; +} + void furi_hal_init_early() { furi_hal_cortex_init_early(); furi_hal_clock_init_early(); @@ -26,6 +32,7 @@ void furi_hal_deinit_early() { } void furi_hal_init() { + normal_boot = true; furi_hal_mpu_init(); furi_hal_clock_init(); furi_hal_console_init(); diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index cad8eb72145..0857e11bd34 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1215,6 +1215,7 @@ Function,-,furi_hal_init_early,void, Function,-,furi_hal_interrupt_init,void, Function,+,furi_hal_interrupt_set_isr,void,"FuriHalInterruptId, FuriHalInterruptISR, void*" Function,+,furi_hal_interrupt_set_isr_ex,void,"FuriHalInterruptId, uint16_t, FuriHalInterruptISR, void*" +Function,-,furi_hal_is_normal_boot,_Bool, Function,+,furi_hal_light_blink_set_color,void,Light Function,+,furi_hal_light_blink_start,void,"Light, uint8_t, uint16_t, uint16_t" Function,+,furi_hal_light_blink_stop,void, diff --git a/firmware/targets/f7/furi_hal/furi_hal.c b/firmware/targets/f7/furi_hal/furi_hal.c index 1b710bb9637..3895d86ff90 100644 --- a/firmware/targets/f7/furi_hal/furi_hal.c +++ b/firmware/targets/f7/furi_hal/furi_hal.c @@ -6,6 +6,12 @@ #define TAG "FuriHal" +bool normal_boot = false; + +bool furi_hal_is_normal_boot() { + return normal_boot; +} + void furi_hal_init_early() { furi_hal_cortex_init_early(); furi_hal_clock_init_early(); @@ -26,6 +32,7 @@ void furi_hal_deinit_early() { } void furi_hal_init() { + normal_boot = true; furi_hal_mpu_init(); furi_hal_clock_init(); furi_hal_console_init(); diff --git a/firmware/targets/f7/src/recovery.c b/firmware/targets/f7/src/recovery.c index 49d780d478f..700fb03c6b9 100644 --- a/firmware/targets/f7/src/recovery.c +++ b/firmware/targets/f7/src/recovery.c @@ -56,6 +56,7 @@ void flipper_boot_recovery_exec() { } if(!counter) { + furi_hal_rtc_set_flag(FuriHalRtcFlagResetPin); furi_hal_rtc_set_flag(FuriHalRtcFlagFactoryReset); furi_hal_rtc_set_pin_fails(0); furi_hal_rtc_reset_flag(FuriHalRtcFlagLock); diff --git a/firmware/targets/furi_hal_include/furi_hal.h b/firmware/targets/furi_hal_include/furi_hal.h index 2eb4688d428..7d6dc7f24ca 100644 --- a/firmware/targets/furi_hal_include/furi_hal.h +++ b/firmware/targets/furi_hal_include/furi_hal.h @@ -42,6 +42,9 @@ struct STOP_EXTERNING_ME {}; extern "C" { #endif +/** True if normally with all subsystems */ +bool furi_hal_is_normal_boot(); + /** Early FuriHal init, only essential subsystems */ void furi_hal_init_early(); diff --git a/firmware/targets/furi_hal_include/furi_hal_rtc.h b/firmware/targets/furi_hal_include/furi_hal_rtc.h index e706c5c76a0..492cc557049 100644 --- a/firmware/targets/furi_hal_include/furi_hal_rtc.h +++ b/firmware/targets/furi_hal_include/furi_hal_rtc.h @@ -32,6 +32,7 @@ typedef enum { FuriHalRtcFlagHandOrient = (1 << 4), FuriHalRtcFlagLegacySleep = (1 << 5), FuriHalRtcFlagStealthMode = (1 << 6), + FuriHalRtcFlagResetPin = (1 << 7), } FuriHalRtcFlag; typedef enum { diff --git a/lib/update_util/lfs_backup.c b/lib/update_util/lfs_backup.c index 7786524ef64..b299a9d329f 100644 --- a/lib/update_util/lfs_backup.c +++ b/lib/update_util/lfs_backup.c @@ -2,11 +2,6 @@ #include -#include -#include -#include -#include -#include #include #define LFS_BACKUP_DEFAULT_LOCATION EXT_PATH(LFS_BACKUP_DEFAULT_FILENAME) @@ -18,12 +13,7 @@ static void backup_name_converter(FuriString* filename) { /* Filenames are already prefixed with '.' */ const char* const names[] = { - BT_SETTINGS_FILE_NAME, - BT_KEYS_STORAGE_FILE_NAME, - DESKTOP_SETTINGS_FILE_NAME, NOTIFICATION_SETTINGS_FILE_NAME, - SLIDESHOW_FILE_NAME, - DOLPHIN_STATE_FILE_NAME, }; for(size_t i = 0; i < COUNT_OF(names); i++) {