simple keymap layers.

This commit is contained in:
tmk 2010-09-16 21:05:15 +09:00
parent 82309deefc
commit f777960c72
5 changed files with 88 additions and 21 deletions

6
README
View file

@ -15,14 +15,18 @@ TODO
modulization modulization
clean source clean source
debouncing debouncing
will be coded when bouncing occurs.
bouncing doesnt occur on my alps switch so far.
scan rate is too slow?(to be measure)
anti-ghost anti-ghost
2010/09/13 done
sleep&wakeup sleep&wakeup
boot keyboard support boot keyboard support
mouse key mouse key
keymap layer keymap layer
2010/09/16 simple layer(HHKB/vi cursor)
key combination switch key combination switch
toggle siwtch toggle siwtch
HHKB like cursor etc.
setting menu(wizard) setting menu(wizard)
debug console debug console
keymap setting keymap setting

View file

@ -2,26 +2,82 @@
* keymap for modified macway keyboarq * keymap for modified macway keyboarq
*/ */
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include "matrix.h"
#include "keymap.h" #include "keymap.h"
static const uint8_t PROGMEM Keymap[MATRIX_ROWS][MATRIX_COLS] = { int current_layer = 1;
static const uint8_t PROGMEM Keymap[][MATRIX_ROWS][MATRIX_COLS] = {
// 0: default
{
{ KB_LALT, KB_NO, KB_BSPACE, KB_NO, KB_LEFT, KB_NO, KB_ENTER, KB_SPACE }, { KB_LALT, KB_NO, KB_BSPACE, KB_NO, KB_LEFT, KB_NO, KB_ENTER, KB_SPACE },
{ KB_1, KB_ESCAPE, KB_TAB, KB_Q, KB_A, KB_LCTRL, KB_Z, KB_RIGHT }, { KB_1, KB_ESCAPE, KB_TAB, KB_Q, KB_A, KB_LCTRL, KB_Z, KB_RIGHT },
{ KB_2, KB_RALT, KB_LGUI, KB_W, KB_S, KB_NO, KB_X, KB_UP }, { KB_2, FN_0, KB_LGUI, KB_W, KB_S, KB_NO, KB_X, KB_UP },
{ KB_3, KB_NO, KB_RSHIFT, KB_E, KB_D, KB_BSLASH, KB_C, KB_DOWN }, { KB_3, KB_NO, KB_RSHIFT, KB_E, KB_D, FN_1, KB_C, KB_DOWN },
{ KB_4, KB_5, KB_T, KB_R, KB_F, KB_G, KB_V, KB_B }, { KB_4, KB_5, KB_T, KB_R, KB_F, KB_G, KB_V, KB_B },
{ KB_7, KB_6, KB_Y, KB_U, KB_J, KB_H, KB_M, KB_N }, { KB_7, KB_6, KB_Y, KB_U, KB_J, KB_H, KB_M, KB_N },
{ KB_8, KB_EQUAL, KB_RBRACKET, KB_I, KB_K, KB_NO, KB_COMMA, KB_LSHIFT }, { KB_8, KB_EQUAL, KB_RBRACKET,KB_I, KB_K, KB_NO, KB_COMMA, KB_LSHIFT },
{ KB_9, KB_NO, KB_NO, KB_O, KB_L, KB_GRAVE, KB_DOT, KB_NO }, { KB_9, KB_NO, KB_NO, KB_O, KB_L, FN_2, KB_DOT, KB_NO },
{ KB_0, KB_MINUS, KB_LBRACKET, KB_P, KB_SCOLON, KB_QUOTE, KB_NO, KB_SLASH } { KB_0, KB_MINUS, KB_LBRACKET,KB_P, KB_SCOLON, KB_QUOTE, KB_NO, KB_SLASH }
},
// 1: FN_0
{
{ KB_LALT, KB_NO, KB_DELETE, KB_NO, KB_NO, KB_NO, KB_BSLASH,KB_NO },
{ KB_F1, KB_GRAVE, KB_BSLASH, KB_NO, KB_NO, KB_LCTRL, KB_NO, KB_NO },
{ KB_F2, KB_NO, KB_LGUI, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO },
{ KB_F3, KB_NO, KB_RSHIFT, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO },
{ KB_F4, KB_F5, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO },
{ KB_F7, KB_F6, KB_NO, KB_NO, KB_DOWN, KB_LEFT, KB_PGDOWN,KB_HOME },
{ KB_F8, KB_F12, KB_NO, KB_NO, KB_UP, KB_NO, KB_PGUP, KB_LSHIFT },
{ KB_F9, KB_NO, KB_NO, KB_NO, KB_RIGHT, KB_NO, KB_END, KB_NO },
{ KB_F10, KB_F11, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO }
},
// 2: FN_1
{
{ KB_LALT, KB_NO, KB_DELETE, KB_NO, KB_NO, KB_NO, KB_BSLASH,KB_NO },
{ KB_F1, KB_GRAVE, KB_BSLASH, KB_NO, KB_VOLDOWN,KB_LCTRL, KB_NO, KB_NO },
{ KB_F2, KB_NO, KB_LGUI, KB_NO, KB_VOLUP, KB_NO, KB_NO, KB_NO },
{ KB_F3, KB_NO, KB_RSHIFT, KB_NO, KB_MUTE, KB_NO, KB_NO, KB_NO },
{ KB_F4, KB_F5, KB_NO, KB_NO, KB_F20, KB_NO, KB_NO, KB_NO },
{ KB_F7, KB_F6, KB_NO, KB_NO, KP_SLASH, KP_ASTERISK,KP_MINUS, KP_PLUS },
{ KB_F8, KB_F12, KB_NO, KB_NO, KB_HOME, KB_NO, KB_END, KB_LSHIFT },
{ KB_F9, KB_NO, KB_NO, KB_NO, KB_PGUP, KB_NO, KB_PGDOWN,KB_NO },
{ KB_F10, KB_F11, KB_UP, KB_NO, KB_LEFT, KB_RIGHT, KB_NO, KB_DOWN }
},
// 3: FN_2
{
{ KB_LALT, KB_NO, KB_DELETE, KB_NO, KB_NO, KB_NO, KB_BSLASH,KB_NO },
{ KB_F1, KB_GRAVE, KB_BSLASH, KB_NO, KB_NO, KB_LCTRL, KB_NO, KB_NO },
{ KB_F2, KB_NO, KB_LGUI, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO },
{ KB_F3, KB_NO, KB_RSHIFT, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO },
{ KB_F4, KB_F5, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO },
{ KB_F7, KB_F6, KB_NO, KB_NO, KB_DOWN, KB_LEFT, KB_PGDOWN,KB_HOME },
{ KB_F8, KB_F12, KB_NO, KB_NO, KB_UP, KB_NO, KB_PGUP, KB_LSHIFT },
{ KB_F9, KB_NO, KB_NO, KB_NO, KB_RIGHT, KB_NO, KB_END, KB_NO },
{ KB_F10, KB_F11, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO }
},
}; };
uint8_t get_keycode(uint8_t row, uint8_t col) uint8_t get_keycode(int layer, uint8_t row, uint8_t col)
{ {
if (row >= MATRIX_ROWS) if (row >= MATRIX_ROWS)
return KB_NO; return KB_NO;
if (col >= MATRIX_COLS) if (col >= MATRIX_COLS)
return KB_NO; return KB_NO;
return pgm_read_byte(&Keymap[row][col]); return pgm_read_byte(&Keymap[layer][row][col]);
}
int get_layer(void) {
int layer = 0;
for (int row = 0; row < MATRIX_ROWS; row++) {
for (int col = 0; col < MATRIX_ROWS; col++) {
if (matrix[row] & 1<<col) continue;
if (get_keycode(0, row, col) == FN_0) layer = 1;
if (get_keycode(0, row, col) == FN_1) layer = 2;
if (get_keycode(0, row, col) == FN_2) layer = 3;
}
}
current_layer = layer;
return current_layer;
} }

View file

@ -4,7 +4,8 @@
#include <stdint.h> #include <stdint.h>
#include "usbkeycodes.h" #include "usbkeycodes.h"
uint8_t get_keycode(uint8_t row, uint8_t col); int get_layer(void);
uint8_t get_keycode(int layer, uint8_t row, uint8_t col);
#define MATRIX_ROWS 9 #define MATRIX_ROWS 9
#define MATRIX_COLS 8 #define MATRIX_COLS 8

View file

@ -78,9 +78,11 @@ int main(void)
print("keyboard firmware 0.1 for t.m.k.\n"); print("keyboard firmware 0.1 for t.m.k.\n");
while (1) { while (1) {
int layer = 0;
uint8_t row, col, code; uint8_t row, col, code;
matrix_scan(); matrix_scan();
layer = get_layer();
modified = matrix_is_modified(); modified = matrix_is_modified();
has_ghost = matrix_has_ghost(); has_ghost = matrix_has_ghost();
@ -95,8 +97,10 @@ int main(void)
for (col = 0; col < MATRIX_COLS; col++) { for (col = 0; col < MATRIX_COLS; col++) {
if (matrix[row] & 1<<col) continue; if (matrix[row] & 1<<col) continue;
code = get_keycode(row, col); code = get_keycode(layer, row, col);
if (KB_LCTRL <= code && code <= KB_RGUI) { if (code == KB_NO) {
continue;
} else if (KB_LCTRL <= code && code <= KB_RGUI) {
// modifier keycode: 0xE0-0xE7 // modifier keycode: 0xE0-0xE7
keyboard_modifier_keys |= 1<<(code & 0x07); keyboard_modifier_keys |= 1<<(code & 0x07);
} else { } else {

View file

@ -255,11 +255,7 @@ enum keycodes {
KP_DECIMAL, KP_DECIMAL,
KP_HEXADECIMAL, KP_HEXADECIMAL,
/* /* modifiers */
* These are NOT standard USB HID - handled specially in decoding,
* so they will be mapped to the modifier byte in the USB report.
*/
MOD_START = 0xE0,
KB_LCTRL = 0xE0, /* 0x01 */ KB_LCTRL = 0xE0, /* 0x01 */
KB_LSHIFT, /* 0x02 */ KB_LSHIFT, /* 0x02 */
KB_LALT, /* 0x04 */ KB_LALT, /* 0x04 */
@ -268,6 +264,12 @@ enum keycodes {
KB_RSHIFT, /* 0x20 */ KB_RSHIFT, /* 0x20 */
KB_RALT, /* 0x40 */ KB_RALT, /* 0x40 */
KB_RGUI, /* 0x80 */ KB_RGUI, /* 0x80 */
/* function keys */
FN_0 = 0xF0,
FN_1,
FN_2,
FN_3,
}; };
#endif /* USBKEYCODES_H */ #endif /* USBKEYCODES_H */