forked from mirrors/qmk_firmware
add jump_bootloader.
This commit is contained in:
parent
7fd9003f59
commit
1de02c1f15
5 changed files with 63 additions and 3 deletions
3
Makefile
3
Makefile
|
@ -51,7 +51,8 @@ SRC = $(TARGET).c \
|
||||||
usb_device.c \
|
usb_device.c \
|
||||||
usb_keyboard.c \
|
usb_keyboard.c \
|
||||||
usb_debug.c \
|
usb_debug.c \
|
||||||
print.c
|
print.c \
|
||||||
|
jump_bootloader.c
|
||||||
|
|
||||||
|
|
||||||
# MCU name, you MUST set this to match the board you are using
|
# MCU name, you MUST set this to match the board you are using
|
||||||
|
|
35
jump_bootloader.c
Normal file
35
jump_bootloader.c
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
// this code from:
|
||||||
|
// http://www.pjrc.com/teensy/jump_to_bootloader.html
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
void jump_bootloader() {
|
||||||
|
cli();
|
||||||
|
// disable watchdog, if enabled
|
||||||
|
// disable all peripherals
|
||||||
|
UDCON = 1;
|
||||||
|
USBCON = (1<<FRZCLK); // disable USB
|
||||||
|
UCSR1B = 0;
|
||||||
|
_delay_ms(5);
|
||||||
|
#if defined(__AVR_AT90USB162__) // Teensy 1.0
|
||||||
|
DDRB = 0; DDRC = 0; DDRD = 0;
|
||||||
|
TIMSK0 = 0; TIMSK1 = 0;
|
||||||
|
asm volatile("jmp 0x1F00");
|
||||||
|
#elif defined(__AVR_ATmega32U4__) // Teensy 2.0
|
||||||
|
DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
|
||||||
|
TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0;
|
||||||
|
ADCSRA = 0;
|
||||||
|
asm volatile("jmp 0x3F00");
|
||||||
|
#elif defined(__AVR_AT90USB646__) // Teensy++ 1.0
|
||||||
|
DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
|
||||||
|
TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0;
|
||||||
|
ADCSRA = 0;
|
||||||
|
asm volatile("jmp 0x7E00");
|
||||||
|
#elif defined(__AVR_AT90USB1286__) // Teensy++ 2.0
|
||||||
|
DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
|
||||||
|
TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0;
|
||||||
|
ADCSRA = 0;
|
||||||
|
asm volatile("jmp 0xFE00");
|
||||||
|
#endif
|
||||||
|
}
|
6
jump_bootloader.h
Normal file
6
jump_bootloader.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef JUMP_BOOTLOADER_H
|
||||||
|
#define JUMP_BOOTLOADER_H 1
|
||||||
|
|
||||||
|
void jump_bootloader(void);
|
||||||
|
|
||||||
|
#endif
|
12
mykey.c
12
mykey.c
|
@ -34,6 +34,7 @@
|
||||||
#include "print.h"
|
#include "print.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "keymap.h"
|
#include "keymap.h"
|
||||||
|
#include "jump_bootloader.h"
|
||||||
|
|
||||||
#define LED_CONFIG (DDRD |= (1<<6))
|
#define LED_CONFIG (DDRD |= (1<<6))
|
||||||
#define LED_ON (PORTD &= ~(1<<6))
|
#define LED_ON (PORTD &= ~(1<<6))
|
||||||
|
@ -111,6 +112,13 @@ int main(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// run bootloader when 4 left modifier keys down
|
||||||
|
if (keyboard_modifier_keys == (MOD_LCTRL | MOD_LSHIFT | MOD_LALT | MOD_LGUI)) {
|
||||||
|
print("jump to bootloader...\n");
|
||||||
|
_delay_ms(1000);
|
||||||
|
jump_bootloader();
|
||||||
|
}
|
||||||
|
|
||||||
if (key_index > 6) {
|
if (key_index > 6) {
|
||||||
//Rollover
|
//Rollover
|
||||||
}
|
}
|
||||||
|
@ -128,7 +136,7 @@ int main(void)
|
||||||
|
|
||||||
// print matrix state for debug
|
// print matrix state for debug
|
||||||
if (modified) {
|
if (modified) {
|
||||||
print("r/c 01234567\n");
|
print("\nr/c 01234567\n");
|
||||||
for (row = 0; row < MATRIX_ROWS; row++) {
|
for (row = 0; row < MATRIX_ROWS; row++) {
|
||||||
phex(row); print(": ");
|
phex(row); print(": ");
|
||||||
pbin_reverse(matrix[row]);
|
pbin_reverse(matrix[row]);
|
||||||
|
@ -159,6 +167,6 @@ ISR(TIMER0_OVF_vect)
|
||||||
idle_count++;
|
idle_count++;
|
||||||
if (idle_count > 61 * 8) {
|
if (idle_count > 61 * 8) {
|
||||||
idle_count = 0;
|
idle_count = 0;
|
||||||
//print("Timer Event :)\n");
|
print(".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,16 @@
|
||||||
#define KEYBOARD_SIZE 8
|
#define KEYBOARD_SIZE 8
|
||||||
#define KEYBOARD_BUFFER EP_DOUBLE_BUFFER
|
#define KEYBOARD_BUFFER EP_DOUBLE_BUFFER
|
||||||
|
|
||||||
|
// modifier bits
|
||||||
|
#define MOD_LCTRL (1<<0)
|
||||||
|
#define MOD_LSHIFT (1<<1)
|
||||||
|
#define MOD_LALT (1<<2)
|
||||||
|
#define MOD_LGUI (1<<3)
|
||||||
|
#define MOD_RCTRL (1<<4)
|
||||||
|
#define MOD_RSHIFT (1<<5)
|
||||||
|
#define MOD_RALT (1<<6)
|
||||||
|
#define MOD_RGUI (1<<7)
|
||||||
|
|
||||||
|
|
||||||
extern uint8_t keyboard_modifier_keys;
|
extern uint8_t keyboard_modifier_keys;
|
||||||
extern uint8_t keyboard_keys[6];
|
extern uint8_t keyboard_keys[6];
|
||||||
|
|
Loading…
Reference in a new issue