From 06dbf890437887da583617530223fc7a63c40786 Mon Sep 17 00:00:00 2001 From: Oleg Kostyuk Date: Tue, 8 Oct 2013 12:58:48 +0300 Subject: [PATCH] Added MicroDox layout Inspired by MicroDox: http://geekhack.org/index.php?topic=42231.msg1062851#msg1062851 https://www.massdrop.com/ext/ergodox/?referer=CTL63V&hash=9ff8ddbb75e03e517aaa39acabc81669 --- keyboard/ergodox/Makefile.lufa | 3 + keyboard/ergodox/Makefile.pjrc | 3 + keyboard/ergodox/keymap.c | 2 + keyboard/ergodox/keymap_cub.h | 10 +- keyboard/ergodox/keymap_micro.h | 424 ++++++++++++++++++++++++++++++++ 5 files changed, 437 insertions(+), 5 deletions(-) create mode 100644 keyboard/ergodox/keymap_micro.h diff --git a/keyboard/ergodox/Makefile.lufa b/keyboard/ergodox/Makefile.lufa index afa215c..07241b0 100644 --- a/keyboard/ergodox/Makefile.lufa +++ b/keyboard/ergodox/Makefile.lufa @@ -131,6 +131,9 @@ colemak: all workman: OPT_DEFS += -DKEYMAP_WORKMAN workman: all +micro: OPT_DEFS += -DKEYMAP_MICRO +micro: all + cub: OPT_DEFS += -DKEYMAP_CUB cub: all diff --git a/keyboard/ergodox/Makefile.pjrc b/keyboard/ergodox/Makefile.pjrc index 6377252..e36cbc6 100644 --- a/keyboard/ergodox/Makefile.pjrc +++ b/keyboard/ergodox/Makefile.pjrc @@ -109,6 +109,9 @@ colemak: all workman: OPT_DEFS += -DKEYMAP_WORKMAN workman: all +micro: OPT_DEFS += -DKEYMAP_MICRO +micro: all + cub: OPT_DEFS += -DKEYMAP_CUB cub: all diff --git a/keyboard/ergodox/keymap.c b/keyboard/ergodox/keymap.c index fb553d0..a827f36 100644 --- a/keyboard/ergodox/keymap.c +++ b/keyboard/ergodox/keymap.c @@ -79,6 +79,8 @@ along with this program. If not, see . #include "keymap_colemak.h" #elif defined(KEYMAP_WORKMAN) #include "keymap_workman.h" +#elif defined(KEYMAP_MICRO) +#include "keymap_micro.h" #elif defined(KEYMAP_CUB) #include "keymap_cub.h" #else diff --git a/keyboard/ergodox/keymap_cub.h b/keyboard/ergodox/keymap_cub.h index 08e8553..0c2b04b 100644 --- a/keyboard/ergodox/keymap_cub.h +++ b/keyboard/ergodox/keymap_cub.h @@ -167,7 +167,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { NO, NO, NO, NO, NO, NO, TRNS, TRNS,NO, F1, F2, F3, F4, PGUP, NO, F5, F6, F7, F8, PGDN, - TRNS,NO, F9, F10, F11, F12, NO, + TRNS,NO, F9, F10, F11, F12, APP, RGUI,RALT,TRNS,TRNS,TRNS, TRNS,TRNS, TRNS, @@ -188,15 +188,15 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // in Workman right hand will be: // = // ^ { } ( ) + - // ' ! $ " ; \ - // # [ < > ] AppMenu + // ' ! $ " ; = + // # [ < > ] \ // // right hand NO, NO, NO, NO, NO, NO, TRNS, TRNS,MINS,4, 5, 9, 0, PPLS, - BSLS,2, P, FN1, 1, FN2, - TRNS,3, 6, FN3, FN4, 7, APP, + BSLS,2, P, FN1, 1, EQL, + TRNS,3, 6, FN3, FN4, 7, FN2, TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, TRNS, diff --git a/keyboard/ergodox/keymap_micro.h b/keyboard/ergodox/keymap_micro.h new file mode 100644 index 0000000..4e878d3 --- /dev/null +++ b/keyboard/ergodox/keymap_micro.h @@ -0,0 +1,424 @@ +// +// Inspired by MicroDox: +// http://geekhack.org/index.php?topic=42231.msg1062851#msg1062851 +// https://www.massdrop.com/ext/ergodox/?referer=CTL63V&hash=9ff8ddbb75e03e517aaa39acabc81669 +// + +static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * Keymap: Default Layer in QWERTY + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | [ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Tab/Shf| A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCtrl/~| Z | X | C | V | B | | | | N | M | , | . | / | ] | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | Caps | LAlt | LGui | | RGui | | | | | + * | | | | Spc | Esc | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | Esc | | Ins | | | + * | LCtl | LSft | LAlt | | RAlt | RSft | RCtl | + * `--------------------' `--------------------' + * + * + * + **************************************************************************************************** + * + * Under XOrg, I use my own mapping from QWERTY to "Workman for Programmers" + * See XOrg files in ./addons/ subdirectory. + * + * I have to do so, because of two things: + * 1) my native language is Russian, and XOrg keymap for it is based on QWERTY layout + * 2) I want to have non-standart shifted keys, like $ (as normal) and @ (as shifted), or _ and - + * + * And even if (2) could be solved using FN* keys (but there is limit in firmware for only 32 such + * keys), then (1) can't be solved at firmware level at all. + * + * So, I have to stick with QWERTY as my main layout + my own XOrg keyboard layout for English. + * But sometimes I have to input something when XOrg is not active - for example, in Linux console, + * or in firmware console (while debugging firmware), or when keyboard is connected to not my computer. + * + * For such cases I have Layer1 :) + * // hint: switch to Layer1 is only at Layer6 + * + **************************************************************************************************** + * + * + * + * Keymap: Default Layer in Workman + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | D | R | W | B | | | | J | F | U | P | $ | : | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Tab/Shf| A | S | H | T | G |------| |------| Y | N | E | O | I | - | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | Caps | LAlt | LGui | | RGui | | | | | + * | | | | Spc | Esc | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | Esc | | Ins | | | + * | LCtl | LSft | LAlt | | RAlt | RSft | RCtl | + * `--------------------' `--------------------' + * + * Keymap: Default Layer in Workman / with Shift + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | D | R | W | B | | | | J | F | U | P | @ | % | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Tab/Shf| A | S | H | T | G |------| |------| Y | N | E | O | I | _ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | & | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | Caps | LAlt | LGui | | RGui | | | | | + * | | | | Spc | Esc | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | Esc | | Ins | | | + * | LCtl | LSft | LAlt | | RAlt | RSft | RCtl | + * `--------------------' `--------------------' + * + * | ~ | ; | ! | # | { | } | ' | | ^ | [ | ] | * | ( | ) | = | + * | ` | 1 | 2 | 3 | 4 | 5 | " | | \ | 6 | 7 | 8 | 9 | 0 | + | + */ + + KEYMAP( // Layer0: default, leftled:none + // left hand + NO, NO, NO, NO, NO, NO, NO, + TAB, Q, W, E, R, T, NO, + FN11,FN28,FN29,FN30,FN21,G, + FN12,FN24,FN25,FN26,FN27,B, NO, + NO, NO, CAPS,FN13,FN14, + NO, NO, + NO, + FN5, FN6, FN7, + // right hand + NO, NO, NO, NO, NO, NO, NO, + NO, Y, U, I, O, P, LBRC, + H, J, K, L, FN22,FN15, + NO, N, M, COMM,DOT, SLSH,FN16, + RGUI,FN17,NO, NO, NO, + NO, NO, + NO, + FN8, FN9, FN10 + ), + + KEYMAP( // Layer1: Workman layout, leftled:all + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,Q, D, R, W, B, TRNS, + TRNS,A, S, H, T, G, + TRNS,Z, X, M, C, V, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,J, F, U, P, 4, TRNS, + Y, N, E, O, I, TRNS, + TRNS,K, L, TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // Layer2: numpad, leftled:blue + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,NO, NO, NO, TRNS,NO, + TRNS,NO, NO, NO, TRNS,NO, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NLCK,P7, P8, P9, PMNS,PGUP, + PAST,P4, P5, P6, PPLS,PGDN, + TRNS,FN17,P1, P2, P3, PSLS,PENT, + P0, PDOT,SLSH,NO, NO, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // Layer3: F-keys + PgUp/PgDn on right hand, leftled:green + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,NO, TRNS,NO, NO, NO, + TRNS,NO, TRNS,NO, NO, NO, TRNS, + TRNS,TRNS,TRNS,LALT,LGUI, + TRNS,TRNS, + TRNS, + LCTL,LSFT,LALT, + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,PSCR,F1, F2, F3, F4, PGUP, + SLCK,F5, F6, F7, F8, PGDN, + TRNS,PAUS,F9, F10, F11, F12, APP, + RGUI,RALT,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + RALT,RSFT,RCTL + ), + + KEYMAP( // Layer4: unconvenient keys on right hand, leftled:red + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,TRNS,NO, NO, NO, NO, + TRNS,TRNS,NO, NO, NO, NO, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + + // in Workman right hand will be: + // + // ^ { } ( ) + + // ' ! $ " ; = + // # [ < > ] \ + // + + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,MINS,4, 5, 9, 0, PPLS, + BSLS,2, P, FN1, 1, EQL, + TRNS,3, 6, FN3, FN4, 7, FN2, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // Layer5: cursor, leftled:red + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,NO, NO, NO, TRNS,NO, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,PGUP,HOME,END, DEL, INS, PGUP, + PGDN,LEFT,UP, DOWN,RGHT,PGDN, + TRNS,NO, HOME,END, DEL, INS, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // Layer6: F1-F10, Workman-layer switch, Teensy, layer switches, leftled:red+onboard + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + FN0, F1, F2, F3, F4, F5, TRNS, + TRNS,FN18,NO, NO, FN19,NO, + TRNS,NO, NO, NO, FN19,NO, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,F6, F7, F8, F9, F10, FN0, + FN0, NO, NO, NO, TRNS,TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + // + // rarely used + // + + KEYMAP( // Layer7: F-keys only, leftled:red + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,F13, F14, F15, F16, NO, TRNS, + TRNS,F17, F18, F19, F20, NO, + TRNS,F21, F22, F23, F24, NO, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NO, F1, F2, F3, F4, TRNS, + NO, F5, F6, F7, F8, TRNS, + TRNS,NO, F9, F10, F11, F12, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // Layer8: mouse and navigation, leftled:blue and green + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,NO, NO, TRNS,NO, NO, + TRNS,NO, NO, TRNS,NO, NO, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,BTN2,WH_L,WH_U,WH_D,WH_R,PGUP, + BTN1,MS_L,MS_U,MS_D,MS_R,PGDN, + TRNS,BTN3,HOME,END, DEL, INS, NO, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + +/* + // templates to copy from + + KEYMAP( // LayerN: transparent on edges + hard-defined thumb keys, all others are empty + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,NO, NO, NO, NO, NO, + TRNS,NO, NO, NO, NO, NO, TRNS, + TRNS,TRNS,TRNS,LALT,LGUI, + TRNS,TRNS, + TRNS, + LCTL,LSFT,TRNS, + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + NO, NO, NO, NO, NO, TRNS, + TRNS,NO, NO, NO, NO, NO, TRNS, + RGUI,RALT,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,RSFT,RCTL + ), + KEYMAP( // LayerN: fully transparent + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), +*/ + +}; + +/* id for user defined functions */ +enum function_id { + TEENSY_KEY, +}; + +/* + * Fn action definition + */ +static const uint16_t PROGMEM fn_actions[] = { + ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key + + // Layer4: unconvenient keys on right hand + ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN1 = Shifted BackSlash // " in Workman + ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN2 = Shifted Minus // \ in Workman + ACTION_MODS_KEY(MOD_LSFT, KC_COMM), // FN3 = Shifted comma // < in Workman + ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // FN4 = Shifted dot // > in Workman + + // Dual-role keys on thumbs + ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN5 = LShift with tap BackSpace + ACTION_MODS_TAP_KEY(MOD_LSFT, KC_DEL), // FN6 = LCtrl with tap Delete + ACTION_MODS_TAP_KEY(MOD_LALT, KC_ESC), // FN7 = LAlt with tap Escape + ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS), // FN8 = RAlt with tap Ins + ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN9 = RShift with tap Enter + ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC), // FN10 = RCtrl with tap Space + + // Dual-role keys on pinkies + ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), // FN11 = LShift with tap Tab + ACTION_MODS_TAP_KEY(MOD_LCTL, KC_GRV), // FN12 = LCtrl with tap Tilda + ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC), // FN13 = LAlt with tap Space + ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC), // FN14 = LGui with tap Escape + ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT), // FN15 = RShift with tap quotes + ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC), // FN16 = RCtrl with tap ] + + // Layers switching + ACTION_LAYER_SET(0, ON_BOTH), // FN17 - set Layer0 + ACTION_LAYER_SET(1, ON_BOTH), // FN18 - set Layer1, to use Workman layout at firmware level + ACTION_LAYER_SET(2, ON_BOTH), // FN19 - set Layer2, to use with Numpad keys + + ACTION_LAYER_MOMENTARY(2), // UNUSED: FN20 - momentary Layer2, to use with Numpad keys + ACTION_LAYER_TAP_KEY(5, KC_F), // FN21 - momentary Layer5, to use with cursor + ACTION_LAYER_TAP_KEY(6, KC_SCLN), // FN22 - tapping ; Layer6, to use with F1-F10, Workman-layer switch, Teensy, layer switches + ACTION_LAYER_MOMENTARY(7), // UNUSED: FN23 - momentary Layer7, to use with F* keys (F1-F24) + + ACTION_LAYER_TAP_KEY(4, KC_Z), // FN24 = momentary Layer4 on Z key, to use with unconvenient keys + ACTION_LAYER_TAP_KEY(3, KC_X), // FN25 = momentary Layer3 on X key, to use with F* keys + ACTION_LAYER_TAP_KEY(8, KC_C), // FN26 = momentary Layer8 on C key, to use with mouse and navigation keys + ACTION_LAYER_TAP_KEY(2, KC_V), // FN27 = momentary Layer2 on V key, to use with Numpad keys + + // i'd like to remove this - will try to get used to live without this and convert them to usual keys + ACTION_LAYER_TAP_KEY(4, KC_A), // FN28 = momentary Layer4 on A key, to use with unconvenient keys + ACTION_LAYER_TAP_KEY(3, KC_S), // FN29 = momentary Layer3 on S key, to use with F* keys + ACTION_LAYER_TAP_KEY(8, KC_D), // FN30 = momentary Layer8 on D key, to use with mouse and navigation keys + ACTION_LAYER_TAP_KEY(2, KC_F), // UNUSED: FN31 = momentary Layer2 on F key, to use with Numpad keys +}; + +void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) +{ + print("action_function called\n"); + print("id = "); phex(id); print("\n"); + print("opt = "); phex(opt); print("\n"); + if (id == TEENSY_KEY) { + clear_keyboard(); + print("\n\nJump to bootloader... "); + _delay_ms(250); + bootloader_jump(); // should not return + print("not supported.\n"); + } +} + -- 2.39.2