static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Default Layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | ~ | 1 | 2 | 3 | 4 | 5 | \ | | ' | 6 | 7 | 8 | 9 | 0 | = | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Tab | Q | W | E | R | T | ~Fn1 | | ~Fn3 | Y | U | I | O | P | [ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | RShift | * |--------+------+------+------+------+------| Fn0 | | ~Fn4 |------+------+------+------+------+--------| * | LCtrl | Z | X | C | V | B | | | | N | M | , | . | / | RCtrl | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | ~Fn1 | ~Fn2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~Fn4 | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | +Fn2 | Home | | PgUp | Del | * ,------|------|------| |------+------+------. * | | | End | | PgDn | | | * | BkSp | ESC |------| |------| Enter| Space| * | | | Spc | | Ins | | | * `--------------------' `--------------------' */ KEYMAP( // layout: layer 0: default // left hand GRV, 1, 2, 3, 4, 5, BSLS, TAB, Q, W, E, R, T, FN1, LSFT,A, S, D, F, G, LCTL,Z, X, C, V, B, FN0, FN1, FN6, CAPS,LALT,LGUI, FN2, HOME, END, FN8, FN9, FN10, // right hand QUOT,6, 7, 8, 9, 0, EQL, FN3, Y, U, I, O, P, LBRC, FN16,J, K, L, SCLN,FN14, FN4, N, M, COMM,DOT, SLSH,FN15, LEFT,UP, DOWN,RGHT,FN4, PGUP,DEL, PGDN, FN11,FN12,FN13 ), KEYMAP( // layout: layer 1: F-keys instead of numbers // left hand TRNS,F1, F2, F3, F4, F5, F6, 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 F7, F8, F9, F10, F11, F12, 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 ), KEYMAP( // layout: layer 2: mouse + numpad // left hand TRNS,NO, NO, NO, NO, PAUS,PSCR, TRNS,WH_L,WH_U,WH_D,WH_R,BTN2,TRNS, TRNS,MS_L,MS_U,MS_D,MS_R,BTN1, TRNS,NO, NO, NO, NO, BTN3,TRNS, TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, // right hand SLCK,NLCK,PSLS,PAST,PAST,PMNS,BSPC, TRNS,NO, P7, P8, P9, PMNS,BSPC, TRNS,P4, P5, P6, PPLS,PENT, TRNS,NO, P1, P2, P3, PPLS,PENT, P0, PDOT,SLSH,PENT,PENT, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS ), KEYMAP( // layout: layer 3: F-keys only // left hand TRNS,NO, NO, NO, NO, NO, NO, 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 NO, NO, NO, NO, NO, NO, 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( // layout: layer 4: F-keys + cursor // left hand TRNS,F1, F2, F3, F4, F5, F6, FN7, NO, PGUP,UP, PGDN,PGUP,TRNS, TRNS,NO, LEFT,DOWN,RGHT,PGDN, TRNS,NO, NO, END, HOME,NO, TRNS, FN5, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, // right hand F7, F8, F9, F10, F11, F12, MINS, TRNS,PGUP,PGUP,UP, PGDN,NO, FN7, PGDN,LEFT,DOWN,RGHT,NO, TRNS, TRNS,NO, HOME,END, NO, NO, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS ), KEYMAP( // layout: layer 5: Workman layout // 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 ), /* // templates to copy from KEYMAP( // layout: layer N: transparent on edges, all others are empty // left hand TRNS,NO, NO, NO, NO, NO, NO, 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 NO, NO, NO, NO, NO, NO, 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( // layout: layer N: 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_LAYER_SET(0, ON_BOTH), // FN0 - switch to Layer0 ACTION_LAYER_MOMENTARY(1), // FN1 - push Layer1 ACTION_LAYER_SET(2, ON_BOTH), // FN2 - switch to Layer2 ACTION_LAYER_MOMENTARY(3), // FN3 - push Layer3 ACTION_LAYER_MOMENTARY(4), // FN4 - push Layer4 ACTION_LAYER_SET(5, ON_BOTH), // FN5 - switch to Layer5 ACTION_LAYER_MOMENTARY(2), // FN6 - push Layer2 ACTION_FUNCTION(TEENSY_KEY), // FN7 - Teensy key ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN8 = LShift with tap BackSpace ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC), // FN9 = LCtrl with tap Escape ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC), // FN10 = LAlt with tap Space ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS), // FN11 = RAlt with tap Ins ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN12 = RShift with tap Enter ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC), // FN13 = RCtrl with tap Space ACTION_MODS_TAP_KEY(MOD_RSFT, KC_MINS), // FN14 = RShift with tap Enter ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC), // FN15 = RCtrl with tap Space ACTION_LAYER_TAP_KEY(2, KC_H), // FN16 = L2 symbols on J key, to use with Mouse 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"); } }