From 06eb50be07ff16e4bfb046e4773185d9bcf048e9 Mon Sep 17 00:00:00 2001 From: tmk Date: Sun, 24 Oct 2010 01:17:26 +0900 Subject: hhkb: refactored --- hhkb/keymap.c | 130 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 79 insertions(+), 51 deletions(-) (limited to 'hhkb/keymap.c') diff --git a/hhkb/keymap.c b/hhkb/keymap.c index 572f530b9..6838a08ac 100644 --- a/hhkb/keymap.c +++ b/hhkb/keymap.c @@ -3,12 +3,18 @@ */ #include #include +#include "usb_keyboard.h" #include "matrix.h" #include "keymap.h" -#include "usb_keyboard.h" +#include "print.h" -int current_layer = 0; -bool key_sent = false; +#define FN_KEYCODE(fn) (pgm_read_byte(&fn_keycode[(fn)])) +#define FN_LAYER(fn) (pgm_read_byte(&fn_layer[(fn)])) +#define KEYMAPS(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)])) + +static int current_layer = 0; +static bool layer_used = false; +static int onbit(uint8_t bits); /* * Layer0(Default Layer) @@ -66,15 +72,21 @@ bool key_sent = false; * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel */ -/* keycode sent when Fn key released without using layer keys. */ -static const uint8_t PROGMEM FnKey[] = { - KB_NO, // this must be KB_NO. (not used) +/* keycode to sent when Fn key released without using layer keys. */ +static const uint8_t PROGMEM fn_keycode[] = { + KB_NO, // FN_0 KB_NO, // FN_1 KB_RALT, // FN_2 KB_SCOLON, // FN_3 + KB_NO, // FN_4 + KB_NO, // FN_5 + KB_NO, // FN_6 + KB_NO, // FN_7 }; +/* layer to change into while Fn key pressed */ +static const int PROGMEM fn_layer[] = { 0, 1, 2, 3, 0, 0, 0, 0 }; -static const uint8_t PROGMEM Keymap[][MATRIX_ROWS][MATRIX_COLS] = { +static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* plain keymap { { KB_2, KB_Q, KB_W, KB_S, KB_A, KB_Z, KB_X, KB_C }, @@ -134,61 +146,77 @@ static const uint8_t PROGMEM Keymap[][MATRIX_ROWS][MATRIX_COLS] = { }; -uint8_t get_keycode(int layer, int row, int col) +uint8_t keymap_get_keycode(int row, int col) { - if (row >= MATRIX_ROWS) - return KB_NO; - if (col >= MATRIX_COLS) - return KB_NO; - return pgm_read_byte(&Keymap[layer][row][col]); + return keymap_get_keycodel(current_layer, row, col); } -int get_layer(void) { - // keep modifier state when Fn key pressed - static uint8_t preserved_modifiers = 0; - int layer = 0; - uint8_t modifiers = 0; - for (int row = 0; row < MATRIX_ROWS; row++) { - for (int col = 0; col < MATRIX_ROWS; col++) { - if (matrix[row] & 1<> 4) { bits >>= 4; n += 4;} + if (bits >> 2) { bits >>= 2; n += 2;} + if (bits >> 1) { bits >>= 1; n += 1;} + return n; } -- cgit v1.2.3