FuriHal: RTC register reset API. New factory reset routine that wipes all RTC backup registers content. (#3288)

This commit is contained in:
あく
2023-12-12 19:12:57 +04:00
committed by GitHub
parent e2e3663524
commit 90cb1c4f2e
10 changed files with 33 additions and 20 deletions
+3 -2
View File
@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,49.1,,
Version,+,49.2,,
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
@@ -1414,6 +1414,7 @@ Function,-,furi_hal_rtc_init_early,void,
Function,+,furi_hal_rtc_is_flag_set,_Bool,FuriHalRtcFlag
Function,+,furi_hal_rtc_is_leap_year,_Bool,uint16_t
Function,+,furi_hal_rtc_reset_flag,void,FuriHalRtcFlag
Function,+,furi_hal_rtc_reset_registers,void,
Function,+,furi_hal_rtc_set_boot_mode,void,FuriHalRtcBootMode
Function,+,furi_hal_rtc_set_datetime,void,FuriHalRtcDateTime*
Function,+,furi_hal_rtc_set_fault_data,void,uint32_t
@@ -2289,8 +2290,8 @@ Function,+,mf_classic_is_value_block,_Bool,"MfClassicSectorTrailer*, uint8_t"
Function,+,mf_classic_load,_Bool,"MfClassicData*, FlipperFormat*, uint32_t"
Function,+,mf_classic_poller_auth,MfClassicError,"MfClassicPoller*, uint8_t, MfClassicKey*, MfClassicKeyType, MfClassicAuthContext*"
Function,+,mf_classic_poller_auth_nested,MfClassicError,"MfClassicPoller*, uint8_t, MfClassicKey*, MfClassicKeyType, MfClassicAuthContext*"
Function,+,mf_classic_poller_get_nt_nested,MfClassicError,"MfClassicPoller*, uint8_t, MfClassicKeyType, MfClassicNt*"
Function,+,mf_classic_poller_get_nt,MfClassicError,"MfClassicPoller*, uint8_t, MfClassicKeyType, MfClassicNt*"
Function,+,mf_classic_poller_get_nt_nested,MfClassicError,"MfClassicPoller*, uint8_t, MfClassicKeyType, MfClassicNt*"
Function,+,mf_classic_poller_halt,MfClassicError,MfClassicPoller*
Function,+,mf_classic_poller_read_block,MfClassicError,"MfClassicPoller*, uint8_t, MfClassicBlock*"
Function,+,mf_classic_poller_sync_auth,MfClassicError,"Nfc*, uint8_t, MfClassicKey*, MfClassicKeyType, MfClassicAuthContext*"
1 entry status name type params
2 Version + 49.1 49.2
3 Header + applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h
4 Header + applications/services/bt/bt_service/bt.h
5 Header + applications/services/cli/cli.h
1414 Function + furi_hal_rtc_is_flag_set _Bool FuriHalRtcFlag
1415 Function + furi_hal_rtc_is_leap_year _Bool uint16_t
1416 Function + furi_hal_rtc_reset_flag void FuriHalRtcFlag
1417 Function + furi_hal_rtc_reset_registers void
1418 Function + furi_hal_rtc_set_boot_mode void FuriHalRtcBootMode
1419 Function + furi_hal_rtc_set_datetime void FuriHalRtcDateTime*
1420 Function + furi_hal_rtc_set_fault_data void uint32_t
2290 Function + mf_classic_load _Bool MfClassicData*, FlipperFormat*, uint32_t
2291 Function + mf_classic_poller_auth MfClassicError MfClassicPoller*, uint8_t, MfClassicKey*, MfClassicKeyType, MfClassicAuthContext*
2292 Function + mf_classic_poller_auth_nested MfClassicError MfClassicPoller*, uint8_t, MfClassicKey*, MfClassicKeyType, MfClassicAuthContext*
Function + mf_classic_poller_get_nt_nested MfClassicError MfClassicPoller*, uint8_t, MfClassicKeyType, MfClassicNt*
2293 Function + mf_classic_poller_get_nt MfClassicError MfClassicPoller*, uint8_t, MfClassicKeyType, MfClassicNt*
2294 Function + mf_classic_poller_get_nt_nested MfClassicError MfClassicPoller*, uint8_t, MfClassicKeyType, MfClassicNt*
2295 Function + mf_classic_poller_halt MfClassicError MfClassicPoller*
2296 Function + mf_classic_poller_read_block MfClassicError MfClassicPoller*, uint8_t, MfClassicBlock*
2297 Function + mf_classic_poller_sync_auth MfClassicError Nfc*, uint8_t, MfClassicKey*, MfClassicKeyType, MfClassicAuthContext*
+13 -7
View File
@@ -132,13 +132,7 @@ void furi_hal_rtc_init_early() {
uint32_t data_reg = furi_hal_rtc_get_register(FuriHalRtcRegisterHeader);
FuriHalRtcHeader* data = (FuriHalRtcHeader*)&data_reg;
if(data->magic != FURI_HAL_RTC_HEADER_MAGIC || data->version != FURI_HAL_RTC_HEADER_VERSION) {
// Reset all our registers to ensure consistency
for(size_t i = 0; i < FuriHalRtcRegisterMAX; i++) {
furi_hal_rtc_set_register(i, 0);
}
data->magic = FURI_HAL_RTC_HEADER_MAGIC;
data->version = FURI_HAL_RTC_HEADER_VERSION;
furi_hal_rtc_set_register(FuriHalRtcRegisterHeader, data_reg);
furi_hal_rtc_reset_registers();
}
if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
@@ -171,6 +165,18 @@ void furi_hal_rtc_sync_shadow() {
}
}
void furi_hal_rtc_reset_registers() {
for(size_t i = 0; i < RTC_BKP_NUMBER; i++) {
furi_hal_rtc_set_register(i, 0);
}
uint32_t data_reg = 0;
FuriHalRtcHeader* data = (FuriHalRtcHeader*)&data_reg;
data->magic = FURI_HAL_RTC_HEADER_MAGIC;
data->version = FURI_HAL_RTC_HEADER_VERSION;
furi_hal_rtc_set_register(FuriHalRtcRegisterHeader, data_reg);
}
uint32_t furi_hal_rtc_get_register(FuriHalRtcRegister reg) {
return LL_RTC_BAK_GetRegister(RTC, reg);
}
+2 -3
View File
@@ -56,8 +56,7 @@ void flipper_boot_recovery_exec() {
}
if(!counter) {
furi_hal_rtc_set_flag(FuriHalRtcFlagFactoryReset);
furi_hal_rtc_set_pin_fails(0);
furi_hal_rtc_reset_flag(FuriHalRtcFlagLock);
furi_hal_rtc_reset_registers();
furi_hal_rtc_set_flag(FuriHalRtcFlagStorageFormatInternal);
}
}