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
+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);
}