CTRL and ALT updates
Added support to enter bootloader from software (bootloader version must be newer than "v2.18Jun 22 2018 17:28:08" until workaround for older is created). Updated CTRL and ALT keymaps for entering bootloader with Fn+b held for >500ms. Added basic MacOS keymap for ALT. USB sleep LED indicator now turns off after 1 second. Slowed down debug LED code printing.
This commit is contained in:
parent
73a3399d0e
commit
e5465e1c57
7 changed files with 290 additions and 7 deletions
|
@ -15,5 +15,35 @@
|
|||
*/
|
||||
|
||||
#include "bootloader.h"
|
||||
#include "samd51j18a.h"
|
||||
|
||||
void bootloader_jump(void) {}
|
||||
//Set watchdog timer to reset. Directs the bootloader to stay in programming mode.
|
||||
void bootloader_jump(void)
|
||||
{
|
||||
//Keyboards released with certain bootloader can not enter bootloader from app until workaround is created
|
||||
uint8_t ver_no_jump[] = "v2.18Jun 22 2018 17:28:08";
|
||||
uint8_t *ver_check = ver_no_jump;
|
||||
uint8_t *boot_check = (uint8_t *)0x21A0;
|
||||
while (*ver_check && *boot_check == *ver_check)
|
||||
{
|
||||
ver_check++;
|
||||
boot_check++;
|
||||
}
|
||||
if (!*ver_check)
|
||||
{
|
||||
//Version match
|
||||
//Software workaround would go here
|
||||
return; //No software restart method implemented... must use hardware reset button
|
||||
}
|
||||
|
||||
WDT->CTRLA.bit.ENABLE = 0;
|
||||
while (WDT->SYNCBUSY.bit.ENABLE) {}
|
||||
while (WDT->CTRLA.bit.ENABLE) {}
|
||||
WDT->CONFIG.bit.WINDOW = 0;
|
||||
WDT->CONFIG.bit.PER = 0;
|
||||
WDT->EWCTRL.bit.EWOFFSET = 0;
|
||||
WDT->CTRLA.bit.ENABLE = 1;
|
||||
while (WDT->SYNCBUSY.bit.ENABLE) {}
|
||||
while (!WDT->CTRLA.bit.ENABLE) {}
|
||||
while (1) {} //Wait on timeout
|
||||
}
|
||||
|
|
|
@ -41,8 +41,8 @@ void m15_print(uint32_t x)
|
|||
|
||||
//Display unsigned 32-bit number through debug led
|
||||
//Read as follows: 1230 = [*] [* *] [* * *] [**] (note zero is fast double flash)
|
||||
#define DLED_ONTIME 600000
|
||||
#define DLED_PAUSE 1000000
|
||||
#define DLED_ONTIME 1000000
|
||||
#define DLED_PAUSE 1500000
|
||||
volatile uint32_t w;
|
||||
void dled_print(uint32_t x, uint8_t long_pause)
|
||||
{
|
||||
|
|
|
@ -225,6 +225,8 @@ int main(void)
|
|||
{
|
||||
if (usb_state == USB_STATE_POWERDOWN)
|
||||
{
|
||||
uint32_t timer_led = timer_read32();
|
||||
|
||||
led_on;
|
||||
if (led_enabled)
|
||||
{
|
||||
|
@ -233,7 +235,10 @@ int main(void)
|
|||
I2C3733_Control_Set(0);
|
||||
}
|
||||
}
|
||||
while (usb_state == USB_STATE_POWERDOWN) {}
|
||||
while (usb_state == USB_STATE_POWERDOWN)
|
||||
{
|
||||
if (timer_read32() - timer_led > 1000) led_off; //Good to indicate went to sleep, but only for a second
|
||||
}
|
||||
if (led_enabled)
|
||||
{
|
||||
for (drvid=0;drvid<ISSI3733_DRIVER_COUNT;drvid++)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue