Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhedger <hedger@users.noreply.github.com>2022-07-31 02:48:55 +0300
committerGitHub <noreply@github.com>2022-07-31 02:48:55 +0300
commit84550d58784637fb46d91c8087a635350e84db5b (patch)
tree69f35f02e419adc4477cc7c45755a5f234101fa7
parent712a48b5db166a401cae9f6ca986d5aaeca7a1a5 (diff)
[FL-2654] Updater: retrying pre-boot SD card mount multiple times (#1402)
* Updater: retrying pre-boot SD card mount multiple times * Updater: added delay before retrying SD card mount on early boot Co-authored-by: あく <alleteam@gmail.com>
-rw-r--r--applications/storage/storages/storage_ext.c3
-rw-r--r--firmware/targets/f7/Src/update.c23
-rw-r--r--firmware/targets/f7/fatfs/stm32_adafruit_sd.c4
-rw-r--r--firmware/targets/f7/fatfs/stm32_adafruit_sd.h1
-rw-r--r--site_scons/site_tools/fbt_apps.py6
5 files changed, 26 insertions, 11 deletions
diff --git a/applications/storage/storages/storage_ext.c b/applications/storage/storages/storage_ext.c
index 4a9d4218..7341a6ec 100644
--- a/applications/storage/storages/storage_ext.c
+++ b/applications/storage/storages/storage_ext.c
@@ -26,8 +26,7 @@ static FS_Error storage_ext_parse_error(SDError error);
static bool sd_mount_card(StorageData* storage, bool notify) {
bool result = false;
- const uint8_t max_init_counts = 10;
- uint8_t counter = max_init_counts;
+ uint8_t counter = BSP_SD_MaxMountRetryCount();
uint8_t bsp_result;
SDData* sd_data = storage->data;
diff --git a/firmware/targets/f7/Src/update.c b/firmware/targets/f7/Src/update.c
index af247195..36204829 100644
--- a/firmware/targets/f7/Src/update.c
+++ b/firmware/targets/f7/Src/update.c
@@ -22,6 +22,21 @@ static FATFS* pfs = NULL;
} \
}
+static bool flipper_update_mount_sd() {
+ for(int i = 0; i < BSP_SD_MaxMountRetryCount(); ++i) {
+ if(BSP_SD_Init((i % 2) == 0) != MSD_OK) {
+ /* Next attempt will be without card reset, let it settle */
+ furi_delay_ms(1000);
+ continue;
+ }
+
+ if(f_mount(pfs, "/", 1) == FR_OK) {
+ return true;
+ }
+ }
+ return false;
+}
+
static bool flipper_update_init() {
furi_hal_clock_init();
furi_hal_rtc_init();
@@ -34,13 +49,9 @@ static bool flipper_update_init() {
return false;
}
- if(BSP_SD_Init(true)) {
- return false;
- }
-
pfs = malloc(sizeof(FATFS));
- CHECK_FRESULT(f_mount(pfs, "/", 1));
- return true;
+
+ return flipper_update_mount_sd();
}
static bool flipper_update_load_stage(const string_t work_dir, UpdateManifest* manifest) {
diff --git a/firmware/targets/f7/fatfs/stm32_adafruit_sd.c b/firmware/targets/f7/fatfs/stm32_adafruit_sd.c
index 1ca38abe..6db430a5 100644
--- a/firmware/targets/f7/fatfs/stm32_adafruit_sd.c
+++ b/firmware/targets/f7/fatfs/stm32_adafruit_sd.c
@@ -331,6 +331,10 @@ void SD_SPI_Bus_To_Normal_State() {
* @{
*/
+uint8_t BSP_SD_MaxMountRetryCount() {
+ return 10;
+}
+
/**
* @brief Initializes the SD/SD communication.
* @param None
diff --git a/firmware/targets/f7/fatfs/stm32_adafruit_sd.h b/firmware/targets/f7/fatfs/stm32_adafruit_sd.h
index 74a0e0c2..e0c5e3be 100644
--- a/firmware/targets/f7/fatfs/stm32_adafruit_sd.h
+++ b/firmware/targets/f7/fatfs/stm32_adafruit_sd.h
@@ -198,6 +198,7 @@ typedef struct {
/** @defgroup STM32_ADAFRUIT_SD_Exported_Functions
* @{
*/
+uint8_t BSP_SD_MaxMountRetryCount();
uint8_t BSP_SD_Init(bool reset_card);
uint8_t
BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
diff --git a/site_scons/site_tools/fbt_apps.py b/site_scons/site_tools/fbt_apps.py
index 2ffdcae3..a0c43fa7 100644
--- a/site_scons/site_tools/fbt_apps.py
+++ b/site_scons/site_tools/fbt_apps.py
@@ -1,8 +1,8 @@
from SCons.Builder import Builder
from SCons.Action import Action
-from SCons.Errors import UserError
-
+from SCons.Warnings import warn, WarningOnByDefault
import SCons
+
from fbt.appmanifest import (
FlipperAppType,
AppManager,
@@ -22,7 +22,7 @@ def LoadApplicationManifests(env):
try:
appmgr.load_manifest(entry.File("application.fam").abspath, entry.name)
except FlipperManifestException as e:
- raise UserError(e)
+ warn(WarningOnByDefault, str(e))
def PrepareApplicationsBuild(env):