Merge branch 'flipperdevices:dev' into dev

This commit is contained in:
Eng1n33r 2022-07-05 15:24:55 +03:00 committed by GitHub
commit fa604221b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,6 +4,7 @@
#define TAG "StorageInt" #define TAG "StorageInt"
#define STORAGE_PATH "/int" #define STORAGE_PATH "/int"
#define LFS_CLEAN_FINGERPRINT 0
typedef struct { typedef struct {
const size_t start_address; const size_t start_address;
@ -162,8 +163,9 @@ static LFSData* storage_int_lfs_data_alloc() {
return lfs_data; return lfs_data;
}; };
static bool storage_int_is_fingerprint_valid(LFSData* lfs_data) { // Returns true if fingerprint was invalid and LFS reformatting is needed
bool value = true; static bool storage_int_check_and_set_fingerprint(LFSData* lfs_data) {
bool value = false;
uint32_t os_fingerprint = 0; uint32_t os_fingerprint = 0;
os_fingerprint |= ((lfs_data->start_page & 0xFF) << 0); os_fingerprint |= ((lfs_data->start_page & 0xFF) << 0);
@ -171,13 +173,13 @@ static bool storage_int_is_fingerprint_valid(LFSData* lfs_data) {
os_fingerprint |= ((LFS_DISK_VERSION_MAJOR & 0xFFFF) << 16); os_fingerprint |= ((LFS_DISK_VERSION_MAJOR & 0xFFFF) << 16);
uint32_t rtc_fingerprint = furi_hal_rtc_get_register(FuriHalRtcRegisterLfsFingerprint); uint32_t rtc_fingerprint = furi_hal_rtc_get_register(FuriHalRtcRegisterLfsFingerprint);
if(rtc_fingerprint == 0) { if(rtc_fingerprint == LFS_CLEAN_FINGERPRINT) {
FURI_LOG_I(TAG, "Storing LFS fingerprint in RTC"); FURI_LOG_I(TAG, "Storing LFS fingerprint in RTC");
furi_hal_rtc_set_register(FuriHalRtcRegisterLfsFingerprint, os_fingerprint); furi_hal_rtc_set_register(FuriHalRtcRegisterLfsFingerprint, os_fingerprint);
} else if(rtc_fingerprint != os_fingerprint) { } else if(rtc_fingerprint != os_fingerprint) {
FURI_LOG_E(TAG, "LFS fingerprint mismatch"); FURI_LOG_E(TAG, "LFS fingerprint mismatch");
furi_hal_rtc_set_register(FuriHalRtcRegisterLfsFingerprint, os_fingerprint); furi_hal_rtc_set_register(FuriHalRtcRegisterLfsFingerprint, os_fingerprint);
value = false; value = true;
} }
return value; return value;
@ -187,8 +189,9 @@ static void storage_int_lfs_mount(LFSData* lfs_data, StorageData* storage) {
int err; int err;
lfs_t* lfs = &lfs_data->lfs; lfs_t* lfs = &lfs_data->lfs;
bool was_fingerprint_outdated = storage_int_check_and_set_fingerprint(lfs_data);
bool need_format = furi_hal_rtc_is_flag_set(FuriHalRtcFlagFactoryReset) || bool need_format = furi_hal_rtc_is_flag_set(FuriHalRtcFlagFactoryReset) ||
!storage_int_is_fingerprint_valid(lfs_data); was_fingerprint_outdated;
if(need_format) { if(need_format) {
// Format storage // Format storage