forked from mirrors/qmk_userspace
		
	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…
	
	Add table
		Add a link
		
	
		Reference in a new issue