summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortmk2010-10-24 03:27:43 +0900
committertmk2010-10-24 03:33:08 +0900
commit4acc38751e9c8e90921773e6e5f5a100b0729d98 (patch)
treee8e650c6c0557871f55c39b6449a0cc2479fbf58
parentbf92bdd7fa9938c162c29e565d245e5609e4a912 (diff)
switch debug on/off by pressing 4 keys on booting time
-rw-r--r--README17
-rw-r--r--hhkb/matrix.c18
-rw-r--r--key_process.c1
-rw-r--r--print.c9
-rw-r--r--print.h4
-rw-r--r--tmk.c26
6 files changed, 61 insertions, 14 deletions
diff --git a/README b/README
index 74a5014af..9bc883410 100644
--- 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
diff --git a/hhkb/matrix.c b/hhkb/matrix.c
index a1917793e..a425439cc 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 8006ae72f..10cac032b 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;
diff --git a/print.c b/print.c
index 5395fa348..59b4bca18 100644
--- a/print.c
+++ b/print.c
@@ -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');
}
diff --git a/print.h b/print.h
index d61e5de3e..77290520e 100644
--- 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 cd52d318e..54b02fcbc 100644
--- 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();