Browse Source

simple keymap layers.

tags/v1.9
tmk 13 years ago
parent
commit
f777960c72
5 changed files with 88 additions and 21 deletions
  1. 5
    1
      README
  2. 68
    12
      keymap.c
  3. 2
    1
      keymap.h
  4. 6
    2
      mykey.c
  5. 7
    5
      usbkeycodes.h

+ 5
- 1
README View File

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

+ 68
- 12
keymap.c View File

* 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] = {
{ 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_2, KB_RALT, 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_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, KB_GRAVE, KB_DOT, KB_NO },
{ KB_0, KB_MINUS, KB_LBRACKET, KB_P, KB_SCOLON, KB_QUOTE, KB_NO, KB_SLASH }
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_1, KB_ESCAPE, KB_TAB, KB_Q, KB_A, KB_LCTRL, KB_Z, KB_RIGHT },
{ 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, FN_1, KB_C, KB_DOWN },
{ 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;
} }

+ 2
- 1
keymap.h View File

#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

+ 6
- 2
mykey.c View File

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();
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);
if (KB_LCTRL <= code && code <= KB_RGUI) {
code = get_keycode(layer, row, col);
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 {

+ 7
- 5
usbkeycodes.h View File

KP_DECIMAL, KP_DECIMAL,
KP_HEXADECIMAL, KP_HEXADECIMAL,


/*
* 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,
/* modifiers */
KB_LCTRL = 0xE0, /* 0x01 */ KB_LCTRL = 0xE0, /* 0x01 */
KB_LSHIFT, /* 0x02 */ KB_LSHIFT, /* 0x02 */
KB_LALT, /* 0x04 */ KB_LALT, /* 0x04 */
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