qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 ////////////////////////////////////////////////////////////////////////////////
      7 // Different signalling for bootloader entry
      8 // - RAM is cleared on reset, so we can't use the usual __ram0_end__ symbol.
      9 // - Use backup registers in the RTC peripheral to store the magic value instead.
     10 
     11 static inline void enable_backup_register_access(void) {
     12     PWR->CR1 |= PWR_CR1_DBP;
     13 }
     14 
     15 static inline void disable_backup_register_access(void) {
     16     PWR->CR1 &= ~PWR_CR1_DBP;
     17 }
     18 
     19 void bootloader_marker_enable(void) {
     20     enable_backup_register_access();
     21     RTC->BKP0R = BOOTLOADER_MAGIC;
     22     disable_backup_register_access();
     23 }
     24 
     25 bool bootloader_marker_active(void) {
     26     enable_backup_register_access();
     27     bool ret = RTC->BKP0R == BOOTLOADER_MAGIC;
     28     disable_backup_register_access();
     29     return ret;
     30 }
     31 
     32 void bootloader_marker_disable(void) {
     33     enable_backup_register_access();
     34     RTC->BKP0R = 0;
     35     disable_backup_register_access();
     36 }