]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
switch debug on/off by pressing 4 keys on booting time
authortmk <nobody@nowhere>
Sat, 23 Oct 2010 18:27:43 +0000 (03:27 +0900)
committertmk <nobody@nowhere>
Sat, 23 Oct 2010 18:33:08 +0000 (03:33 +0900)
README
hhkb/matrix.c
key_process.c
print.c
print.h
tmk.c

diff --git a/README b/README
index 74a5014af98643142a4befe6058703b468d7fc46..9bc883410e5333549c6ee84210b23bed3baee886 100644 (file)
--- a/README
+++ b/README
@@ -45,6 +45,12 @@ $ cd <target> (hhkb or macway)
 $ make
 
 
+Debuging
+--------
+Debug print is on if 4 keys are pressed during booting. 
+Use PJRC's hid_listen.exe to see debug messages.
+
+
 AVR Target board
 ----------------
 Teensy/Teensy++
@@ -84,9 +90,14 @@ debouncing logic
     will be coded when bouncing occurs.
     bouncing doesnt occur on my ALPS switch so far.
     scan rate is too slow?(to be measure)
-layer switch
+layer switching
     time before switching
     timeout when not used during specific time
+debug on/off
+    Fn key conbination during normal operation
+    matrix print on/off
+    key print on/off
+    mouse print on/off
 
 Trackpoint(PS/2)
     receive PS/2 signal from TrackPoint
@@ -116,6 +127,10 @@ keymap
     2010/10/23
 souce code cleaning
     2010/10/23
+debug on/off
+    debug off by default
+    pressing keys during booting
+    2010/10/23
 
 
 EOF
index a1917793e7c81d8711baa5a9fc76f9b2de080d43..a425439ccab0887184096f8aa8f5a4c001849e19 100644 (file)
@@ -32,6 +32,7 @@ static uint8_t _matrix1[MATRIX_ROWS];
 
 
 static bool matrix_has_ghost_in_row(int row);
+static int bit_pop(uint8_t bits);
 
 
 inline
@@ -88,7 +89,7 @@ int matrix_scan(void)
 }
 
 bool matrix_is_modified(void) {
-    for (int i=0; i <MATRIX_ROWS; i++) {
+    for (int i = 0; i < MATRIX_ROWS; i++) {
         if (matrix[i] != matrix_prev[i])
             return true;
     }
@@ -117,7 +118,22 @@ void matrix_print(void) {
     }
 }
 
+int matrix_key_count(void) {
+    int count = 0;
+    for (int i = 0; i < MATRIX_ROWS; i++) {
+        count += bit_pop(~matrix[i]);
+    }
+    return count;
+}
+
 inline
 static bool matrix_has_ghost_in_row(int row) {
     return false;
 }
+
+static int bit_pop(uint8_t bits) {
+    int c;
+    for (c = 0; bits; c++)
+        bits &= bits -1;
+    return c;
+}
index 8006ae72f77aec13c83e2455b99c4da91fbcd416..10cac032b145da8a81676fa3d3bd96a8103d6c59 100644 (file)
@@ -25,6 +25,7 @@
 #define MOUSE_DELAY_ACC 5
 
 
+// TODO: refactoring
 void proc_matrix(void) {
     static int mouse_repeat = 0;
 
diff --git a/print.c b/print.c
index 5395fa3480227a3a7724fd7a1c901bce402ca168..59b4bca1800f85576d01ad5004fc1b6cf63c7cd2 100644 (file)
--- a/print.c
+++ b/print.c
 #include <avr/pgmspace.h>
 #include "print.h"
 
+
+bool print_enable = false;
+
 void print_P(const char *s)
 {
+       if (!print_enable) return;
        char c;
 
        while (1) {
@@ -41,17 +45,20 @@ void print_P(const char *s)
 
 void phex1(unsigned char c)
 {
+       if (!print_enable) return;
        usb_debug_putchar(c + ((c < 10) ? '0' : 'A' - 10));
 }
 
 void phex(unsigned char c)
 {
+       if (!print_enable) return;
        phex1(c >> 4);
        phex1(c & 15);
 }
 
 void phex16(unsigned int i)
 {
+       if (!print_enable) return;
        phex(i >> 8);
        phex(i);
 }
@@ -59,6 +66,7 @@ void phex16(unsigned int i)
 
 void pbin(unsigned char c)
 {
+    if (!print_enable) return;
     for (int i = 7; i >= 0; i--) {
         usb_debug_putchar((c & (1<<i)) ? '1' : '0');
     }
@@ -66,6 +74,7 @@ void pbin(unsigned char c)
 
 void pbin_reverse(unsigned char c)
 {
+    if (!print_enable) return;
     for (int i = 0; i < 8; i++) {
         usb_debug_putchar((c & (1<<i)) ? '1' : '0');
     }
diff --git a/print.h b/print.h
index d61e5de3e096101975f126ff8863925e80bee1a9..77290520e9dc048e41819f944c549fdfcd41ca62 100644 (file)
--- a/print.h
+++ b/print.h
@@ -1,9 +1,13 @@
 #ifndef PRINT_H__
 #define PRINT_H__ 1
 
+#include <stdbool.h>
 #include <avr/pgmspace.h>
 #include "usb_debug.h"
 
+
+bool print_enable;
+
 // this macro allows you to write print("some text") and
 // the string is automatically placed into flash memory :)
 #define print(s) print_P(PSTR(s))
diff --git a/tmk.c b/tmk.c
index cd52d318e6342581aaf212609523c77c3b36b382..54b02fcbc96b973450093e85c123ffd74fbfa7ba 100644 (file)
--- a/tmk.c
+++ b/tmk.c
@@ -63,18 +63,6 @@ int main(void)
     usb_init();
     while (!usb_configured()) /* wait */ ;
 
-    // Wait an extra second for the PC's operating system to load drivers
-    // and do whatever it does to actually be ready for input
-    // needs such long time in my PC.
-    /* wait for debug print. no need for normal use */
-    for (int i =0; i < 6; i++) {
-        LED_CONFIG;
-        LED_ON;
-        _delay_ms(500);
-        LED_OFF;
-        _delay_ms(500);
-    }
-
     // Configure timer 0 to generate a timer overflow interrupt every
     // 256*1024 clock cycles, or approx 61 Hz when using 16 MHz clock
     // This demonstrates how to use interrupts to implement a simple
@@ -85,6 +73,20 @@ int main(void)
 
 
     matrix_init();
+    matrix_scan();
+    // debug on when 4 keys are pressed
+    if (matrix_key_count() == 4) print_enable = true;
+
+    /* wait for debug pipe to print greetings. */
+    if (print_enable) {
+        for (int i =0; i < 6; i++) {
+            LED_CONFIG;
+            LED_ON;
+            _delay_ms(500);
+            LED_OFF;
+            _delay_ms(500);
+        }
+    }
     print("\nt.m.k. keyboard 1.2\n");
     while (1) {
        proc_matrix();