]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
some fixes. LED flush for debug.
authortmk <nobody@nowhere>
Sun, 26 Sep 2010 13:42:37 +0000 (22:42 +0900)
committertmk <nobody@nowhere>
Mon, 27 Sep 2010 01:24:33 +0000 (10:24 +0900)
jump_bootloader.c
keymap.c
keymap.h
matrix.c
mykey.c

index f60c3596a5e6cc66df270cb79a51df7aa84294c5..e4c0b967f4c0a704af64bf1e481f8467774981fc 100644 (file)
@@ -4,7 +4,7 @@
 #include <avr/interrupt.h>
 #include <util/delay.h>
 
-void jump_bootloader() {
+void jump_bootloader(void) {
     cli();
     // disable watchdog, if enabled
     // disable all peripherals
index 6fca9a003a4e3574117129994063fbf7fe85b1f5..f81f3a1367f2d1379fca7340fa9f8cd5347cfbcc 100644 (file)
--- a/keymap.c
+++ b/keymap.c
@@ -59,7 +59,7 @@ static const uint8_t PROGMEM Keymap[][MATRIX_ROWS][MATRIX_COLS] = {
 };
 
 
-uint8_t get_keycode(int layer, uint8_t row, uint8_t col)
+uint8_t get_keycode(int layer, int row, int col)
 {
     if (row >= MATRIX_ROWS)
         return KB_NO;
index a85b626c65a729904b7f15ef74822a0fbe5b1d50..ac0cc5fea66bd64bfd777f8f0e819fdc15c7491b 100644 (file)
--- a/keymap.h
+++ b/keymap.h
@@ -5,7 +5,7 @@
 #include "usbkeycodes.h"
 
 int get_layer(void);
-uint8_t get_keycode(int layer, uint8_t row, uint8_t col);
+uint8_t get_keycode(int layer, int row, int col);
 
 #define MATRIX_ROWS 9
 #define MATRIX_COLS 8
index 6129f52c680f4f5f725d5dbbb1fe1b57a0d0f575..b50427ac04f779cd63ddb4293f334355fcf68cff 100644 (file)
--- a/matrix.c
+++ b/matrix.c
@@ -5,7 +5,6 @@
 #include <util/delay.h>
 #include "keymap.h"
 #include "matrix.h"
-#include "print.h"
 
 // matrix is active low. (key on: 0/key off: 1)
 // row: Hi-Z(unselected)/low output(selected)
diff --git a/mykey.c b/mykey.c
index 337089c94275e10e5067b32ec4f107331e61bbf8..94cbbfb5a183fda226d1be862b3c71e3177597ec 100644 (file)
--- a/mykey.c
+++ b/mykey.c
@@ -41,6 +41,8 @@
 #define LED_OFF        (PORTD |= (1<<6))
 #define CPU_PRESCALE(n)    (CLKPR = 0x80, CLKPR = (n))
 
+static void print_matrix(void);
+
 
 uint16_t idle_count=0;
 
@@ -78,9 +80,9 @@ int main(void)
 
     print("firmware 0.2 for t.m.k.\n");
 
+    int loop_count = 0;
     while (1) {
         int layer = 0;
-        uint8_t row, col, code;
 
         matrix_scan();
         layer = get_layer();
@@ -94,11 +96,11 @@ int main(void)
             keyboard_modifier_keys = 0;
             for (int i = 0; i < 6; i++) keyboard_keys[i] = KB_NO;
 
-            for (row = 0; row < MATRIX_ROWS; row++) {
-                for (col = 0; col < MATRIX_COLS; col++) {
+            for (int row = 0; row < MATRIX_ROWS; row++) {
+                for (int col = 0; col < MATRIX_COLS; col++) {
                     if (matrix[row] & 1<<col) continue;
 
-                    code = get_keycode(layer, row, col);
+                    uint8_t code = get_keycode(layer, row, col);
                     if (code == KB_NO) {
                         continue;
                     } else if (KB_LCTRL <= code && code <= KB_RGUI) {
@@ -114,6 +116,11 @@ int main(void)
 
             // run bootloader when 4 left modifier keys down
             if (keyboard_modifier_keys == (MOD_LCTRL | MOD_LSHIFT | MOD_LALT | MOD_LGUI)) {
+                // cancel all keys
+                keyboard_modifier_keys = 0;
+                for (int i = 0; i < 6; i++) keyboard_keys[i] = KB_NO;
+                usb_keyboard_send();
+
                 print("jump to bootloader...\n");
                 _delay_ms(1000);
                 jump_bootloader();
@@ -130,14 +137,46 @@ int main(void)
             // accessed carefully so the interrupt routine doesn't
             // try to use the variable in the middle of our access
             cli();
-            idle_count = 0;
+            //idle_count = 0;
             sei();
         }
 
         // print matrix state for debug
         if (modified) {
+            print_matrix();
+
+            // LED flush
+            DDRD |= 1<<PD6;
+            PORTD |= 1<<PD6;
+        }
+
+/*
+        // print counts for debug
+        if ((loop_count % 0x1000) == 0) {
+            //print(".");
+            print("idle_count: "); phex((idle_count & 0xFF00) >> 8); phex(idle_count & 0xFF); print("\n");
+            print("loop_count: "); phex((loop_count & 0xFF00) >> 8); phex(loop_count & 0xFF); print("\n");
+            print_matrix();
+        }
+
+        // teensy LED flush for debug
+        if ((loop_count & 0x100) == 0) {
+            DDRD |= 1<<PD6;
+            PORTD |= 1<<PD6;
+        }
+*/
+
+        // now the current pins will be the previous, and
+        // wait a short delay so we're not highly sensitive
+        // to mechanical "bounce".
+        _delay_ms(2);
+        loop_count++;
+    }
+}
+
+static void print_matrix(void) {
             print("\nr/c 01234567\n");
-            for (row = 0; row < MATRIX_ROWS; row++) {
+            for (int row = 0; row < MATRIX_ROWS; row++) {
                 phex(row); print(": ");
                 pbin_reverse(matrix[row]);
                 if (matrix_has_ghost_in_row(row)) {
@@ -149,13 +188,6 @@ int main(void)
             for (int i = 0; i < 6; i++) { phex(keyboard_keys[i]); print(" "); }
             print("\n");
             print("mod: "); phex(keyboard_modifier_keys); print("\n");
-        }
-
-        // now the current pins will be the previous, and
-        // wait a short delay so we're not highly sensitive
-        // to mechanical "bounce".
-        _delay_ms(2);
-    }
 }
 
 // This interrupt routine is run approx 61 times per second.
@@ -165,8 +197,4 @@ int main(void)
 ISR(TIMER0_OVF_vect)
 {
     idle_count++;
-    if (idle_count > 61 * 8) {
-        idle_count = 0;
-        print(".");
-    }
 }