furi-hal-bootloader.c 959 B

123456789101112131415161718192021222324252627282930313233
  1. #include <furi-hal-bootloader.h>
  2. #include <stm32wbxx_ll_rtc.h>
  3. #include <furi.h>
  4. #define TAG "FuriHalBoot"
  5. // Boot request enum
  6. #define BOOT_REQUEST_TAINTED 0x00000000
  7. #define BOOT_REQUEST_CLEAN 0xDADEDADE
  8. #define BOOT_REQUEST_DFU 0xDF00B000
  9. void furi_hal_bootloader_init() {
  10. #ifndef DEBUG
  11. LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR0, BOOT_REQUEST_TAINTED);
  12. #endif
  13. FURI_LOG_I(TAG, "Init OK");
  14. }
  15. void furi_hal_bootloader_set_mode(FuriHalBootloaderMode mode) {
  16. if (mode == FuriHalBootloaderModeNormal) {
  17. LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR0, BOOT_REQUEST_CLEAN);
  18. } else if (mode == FuriHalBootloaderModeDFU) {
  19. LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR0, BOOT_REQUEST_DFU);
  20. }
  21. }
  22. void furi_hal_bootloader_set_flags(FuriHalBootloaderFlag flags) {
  23. LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR2, flags);
  24. }
  25. FuriHalBootloaderFlag furi_hal_bootloader_get_flags() {
  26. return LL_RTC_BAK_GetRegister(RTC, LL_RTC_BKP_DR2);
  27. }