]> git.friedersdorff.com Git - max/tmk_keyboard.git/blobdiff - mykey.c
add jump_bootloader.
[max/tmk_keyboard.git] / mykey.c
diff --git a/mykey.c b/mykey.c
index b22c68fb84c68441a857db68004c06fae9a2877d..dcb0852ec43d0a6739986268a683c6767bb3c83b 100644 (file)
--- a/mykey.c
+++ b/mykey.c
 #include <avr/interrupt.h>
 #include <util/delay.h>
 
-#include "usb_keyboard_debug.h"
+#include "usb_device.h"
 #include "print.h"
 #include "matrix.h"
 #include "keymap.h"
+#include "jump_bootloader.h"
 
 #define LED_CONFIG    (DDRD |= (1<<6))
 #define LED_ON        (PORTD &= ~(1<<6))
@@ -78,9 +79,11 @@ int main(void)
     print("keyboard firmware 0.1 for t.m.k.\n");
 
     while (1) {
+        int layer = 0;
         uint8_t row, col, code;
 
         matrix_scan();
+        layer = get_layer();
 
         modified = matrix_is_modified();
         has_ghost = matrix_has_ghost();
@@ -95,8 +98,10 @@ int main(void)
                 for (col = 0; col < MATRIX_COLS; col++) {
                     if (matrix[row] & 1<<col) continue;
 
-                    code = get_keycode(row, col);
-                    if (KB_LCTRL <= code && code <= KB_RGUI) {
+                    code = get_keycode(layer, row, col);
+                    if (code == KB_NO) {
+                        continue;
+                    } else if (KB_LCTRL <= code && code <= KB_RGUI) {
                         // modifier keycode: 0xE0-0xE7
                         keyboard_modifier_keys |= 1<<(code & 0x07);
                     } else {
@@ -107,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) {
                 //Rollover
             }
@@ -124,7 +136,7 @@ int main(void)
 
         // print matrix state for debug
         if (modified) {
-            print("r/c 01234567\n");
+            print("\nr/c 01234567\n");
             for (row = 0; row < MATRIX_ROWS; row++) {
                 phex(row); print(": ");
                 pbin_reverse(matrix[row]);
@@ -155,7 +167,6 @@ ISR(TIMER0_OVF_vect)
     idle_count++;
     if (idle_count > 61 * 8) {
         idle_count = 0;
-        //print("Timer Event :)\n");
-        //usb_keyboard_press(KEY_SPACE, 0);
+        print(".");
     }
 }