diff options
-rw-r--r-- | README | 17 | ||||
-rw-r--r-- | hhkb/matrix.c | 18 | ||||
-rw-r--r-- | key_process.c | 1 | ||||
-rw-r--r-- | print.c | 9 | ||||
-rw-r--r-- | print.h | 4 | ||||
-rw-r--r-- | tmk.c | 26 |
6 files changed, 61 insertions, 14 deletions
@@ -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 diff --git a/hhkb/matrix.c b/hhkb/matrix.c index a1917793e7..a425439cca 100644 --- a/hhkb/matrix.c +++ b/hhkb/matrix.c @@ -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; +} diff --git a/key_process.c b/key_process.c index 8006ae72f7..10cac032b1 100644 --- a/key_process.c +++ b/key_process.c @@ -25,6 +25,7 @@ #define MOUSE_DELAY_ACC 5 +// TODO: refactoring void proc_matrix(void) { static int mouse_repeat = 0; @@ -27,8 +27,12 @@ #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'); } @@ -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)) @@ -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(); |