logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

extra.c (1071B)


  1. // Copyright 2023 Nick Brassel (@tzarc)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include <hal.h>
  4. #define BOOTLOADER_MAGIC 0xDEADBEEF
  5. ////////////////////////////////////////////////////////////////////////////////
  6. // Different signalling for bootloader entry
  7. // - RAM is cleared on reset, so we can't use the usual __ram0_end__ symbol.
  8. // - Use backup registers in the RTC peripheral to store the magic value instead.
  9. static inline void enable_backup_register_access(void) {
  10. PWR->CR1 |= PWR_CR1_DBP;
  11. }
  12. static inline void disable_backup_register_access(void) {
  13. PWR->CR1 &= ~PWR_CR1_DBP;
  14. }
  15. void bootloader_marker_enable(void) {
  16. enable_backup_register_access();
  17. RTC->BKP0R = BOOTLOADER_MAGIC;
  18. disable_backup_register_access();
  19. }
  20. bool bootloader_marker_active(void) {
  21. enable_backup_register_access();
  22. bool ret = RTC->BKP0R == BOOTLOADER_MAGIC;
  23. disable_backup_register_access();
  24. return ret;
  25. }
  26. void bootloader_marker_disable(void) {
  27. enable_backup_register_access();
  28. RTC->BKP0R = 0;
  29. disable_backup_register_access();
  30. }