simple keymap layers.

example_keyboards
tmk 14 years ago
parent 82309deefc
commit f777960c72

@ -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

@ -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;
{ 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 }, static const uint8_t PROGMEM Keymap[][MATRIX_ROWS][MATRIX_COLS] = {
{ KB_2, KB_RALT, KB_LGUI, KB_W, KB_S, KB_NO, KB_X, KB_UP }, // 0: default
{ KB_3, KB_NO, KB_RSHIFT, KB_E, KB_D, KB_BSLASH, KB_C, KB_DOWN }, {
{ KB_4, KB_5, KB_T, KB_R, KB_F, KB_G, KB_V, KB_B }, { KB_LALT, KB_NO, KB_BSPACE, KB_NO, KB_LEFT, KB_NO, KB_ENTER, KB_SPACE },
{ KB_7, KB_6, KB_Y, KB_U, KB_J, KB_H, KB_M, KB_N }, { KB_1, KB_ESCAPE, KB_TAB, KB_Q, KB_A, KB_LCTRL, KB_Z, KB_RIGHT },
{ KB_8, KB_EQUAL, KB_RBRACKET, KB_I, KB_K, KB_NO, KB_COMMA, KB_LSHIFT }, { KB_2, FN_0, KB_LGUI, KB_W, KB_S, KB_NO, KB_X, KB_UP },
{ KB_9, KB_NO, KB_NO, KB_O, KB_L, KB_GRAVE, KB_DOT, KB_NO }, { KB_3, KB_NO, KB_RSHIFT, KB_E, KB_D, FN_1, KB_C, KB_DOWN },
{ KB_0, KB_MINUS, KB_LBRACKET, KB_P, KB_SCOLON, KB_QUOTE, KB_NO, KB_SLASH } { 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_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, FN_2, KB_DOT, KB_NO },
{ 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;
} }

@ -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

@ -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 {

@ -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 */

Loading…
Cancel
Save