From 552399df4cef88463ea8ac40822d776d0fb90e18 Mon Sep 17 00:00:00 2001 From: Ian Sterling Date: Mon, 8 Aug 2016 18:34:08 -0700 Subject: [PATCH] Adding my own keymaps to the following keyboards: Planck, Preonic, Atreus, Ergodox --- keyboards/atreus/keymaps/xyverz/keymap.c | 89 ++++ keyboards/ergodox/keymaps/xyverz/dvorak.png | Bin 0 -> 87314 bytes keyboards/ergodox/keymaps/xyverz/keymap.c | 184 +++++++++ keyboards/ergodox/keymaps/xyverz/old_keymap.c | 311 ++++++++++++++ keyboards/ergodox/keymaps/xyverz/readme.md | 10 + keyboards/planck/keymaps/xyverz/README.md | 2 + keyboards/planck/keymaps/xyverz/keymap.c | 379 ++++++++++++++++++ keyboards/planck/keymaps/xyverz/makefile.mk | 2 + keyboards/preonic/keymaps/xyverz/README.md | 49 +++ keyboards/preonic/keymaps/xyverz/keymap.c | 342 ++++++++++++++++ keyboards/preonic/keymaps/xyverz/makefile.mk | 1 + 11 files changed, 1369 insertions(+) create mode 100644 keyboards/atreus/keymaps/xyverz/keymap.c create mode 100644 keyboards/ergodox/keymaps/xyverz/dvorak.png create mode 100644 keyboards/ergodox/keymaps/xyverz/keymap.c create mode 100644 keyboards/ergodox/keymaps/xyverz/old_keymap.c create mode 100644 keyboards/ergodox/keymaps/xyverz/readme.md create mode 100644 keyboards/planck/keymaps/xyverz/README.md create mode 100644 keyboards/planck/keymaps/xyverz/keymap.c create mode 100644 keyboards/planck/keymaps/xyverz/makefile.mk create mode 100644 keyboards/preonic/keymaps/xyverz/README.md create mode 100644 keyboards/preonic/keymaps/xyverz/keymap.c create mode 100644 keyboards/preonic/keymaps/xyverz/makefile.mk diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c new file mode 100644 index 000000000..447fbcf10 --- /dev/null +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -0,0 +1,89 @@ +// This is the personal keymap of Ian Sterling (@xyverz). It is based on the keymap by +// Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and +// Preonic keyboards by Jack Humbert. + +#include "atreus.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _DV 0 +#define _QW 1 +#define _CM 2 +#define _L1 3 +#define _L2 4 + +// Macro name shortcuts +#define DVORAK M(_DV) +#define QWERTY M(_QW) +#define COLEMAK M(_CM) + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_DV] = { /* Dvorak */ + {KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_NO, KC_F, KC_G, KC_C, KC_R, KC_L }, + {KC_A, KC_O, KC_E, KC_U, KC_I, KC_NO, KC_D, KC_H, KC_T, KC_N, KC_S }, + {SFT_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, CTL_T(KC_DEL), KC_B, KC_M, KC_W, KC_V, SFT_T(KC_Z) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_EQL} + }, + [_QW] = { /* Qwerty */ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P }, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT} + }, + [_CM] = { /* Colemak */ + {KC_Q, KC_W, KC_F, KC_P, KC_G, KC_NO, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, + {KC_A, KC_R, KC_S, KC_T, KC_D, KC_NO, KC_H, KC_N, KC_E, KC_I, KC_O }, + {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_K, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) }, + {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT} + }, + [_L1] = { /* LAYER 1 */ + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 }, + {KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL }, + {KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, + {KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT } + }, + [_L2] = { /* LAYER 2 */ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 }, + {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12 }, + {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, RESET } + } +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DV: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DV); + } + break; + case _QW: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QW); + } + break; + case _CM: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_CM); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/ergodox/keymaps/xyverz/dvorak.png b/keyboards/ergodox/keymaps/xyverz/dvorak.png new file mode 100644 index 0000000000000000000000000000000000000000..cb8316309592e3e8098b198b0db14916741a5d75 GIT binary patch literal 87314 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

@H>k@RvK-?1FwxvLtU}> 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

&*o!rsa0H*YyXk_nSzTx>y2Q5oQ-RE7mRnBzrV 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 literal 0 HcmV?d00001 diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c new file mode 100644 index 000000000..dd39dbacb --- /dev/null +++ b/keyboards/ergodox/keymaps/xyverz/keymap.c @@ -0,0 +1,184 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_DELT, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(1), + KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, ALL_T(KC_NO), + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + ALT_T(KC_APP), KC_LGUI, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, + TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS, + KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS, + MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT, + KC_UP, KC_DOWN,KC_SLSH,KC_EQL, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/xyverz/old_keymap.c b/keyboards/ergodox/keymaps/xyverz/old_keymap.c new file mode 100644 index 000000000..e082372f9 --- /dev/null +++ b/keyboards/ergodox/keymaps/xyverz/old_keymap.c @@ -0,0 +1,311 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +extern keymap_config_t keymap_config; + +#define _DVORAK 0 // default layer +#define _QWERTY 1 // symbols +#define _LOWER 2 +#define _RAISE 3 +#define _ADJUST 16 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + * Keymap 0: Dvorak + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ] | 1 | 2 | 3 | 4 | 5 | Esc | | ESC | 6 | 7 | 8 | 9 | 0 | [ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | ' | , | . | Y | Y |(Null)| |(Null)| F | G | C | R | L | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| FN1 | | FN2 |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LCtr | LAlt | | Ralt | RCtr | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * | BkSp | Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' + * + * + ***************************************************************************************************** + * This Dvorak keyboard layout stems from my early Kinesis years, using the Contour PS/2 with a Dvorak + * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the cor- + * ner keys. I've decided to continue using this layout with my ErgoDox. + */ + + [_DVORAK] = ( + KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, XXXXXXX, + KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, LOWER, + KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC, KC_DEL, KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, + NO, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + RAISE, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, + KC_UP, KC_DOWN, KC_SLSH, KC_EQL, KC_RGUI, + KC_RALT, KC_RCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC +), + +/* Keymap 1: QWERTY + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +[_QWERTY] = ( + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LOWER, + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + {ALT_T(KC_APP), KC_LGUI, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + RAISE, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_TAB, KC_ENT +), + + +/* Lower 2: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[_LOWER] = ( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Raise 3: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[_RAISE] = ( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), + +/* Adjust 16: Lower + Raise + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | Reset| | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| |Dvorak|Qwerty| | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[_ADJUST] = ( + KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, QWERTY, DVORAK, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _DVORAK: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _QWERTY: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + + } + return MACRO_NONE; +}; + + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md new file mode 100644 index 000000000..8f6dba45e --- /dev/null +++ b/keyboards/ergodox/keymaps/xyverz/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](default_highres.png) diff --git a/keyboards/planck/keymaps/xyverz/README.md b/keyboards/planck/keymaps/xyverz/README.md new file mode 100644 index 000000000..b0054fc30 --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/README.md @@ -0,0 +1,2 @@ +# Zrevyx's Planck Layout + diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c new file mode 100644 index 000000000..9ac78ec15 --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/keymap.c @@ -0,0 +1,379 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "planck.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _MUSIC 5 +#define _PLOVER 6 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) +#define PLOVER M(12) +#define EXT_PLV M(13) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | / | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | - | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Bksp |Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Del | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Del | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Music (reserved for process_action_user) + * + */ +[_MUSIC] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {440.0*pow(2.0,(31)/12.0), 12}, + {440.0*pow(2.0,(28)/12.0), 8}, + {440.0*pow(2.0,(19)/12.0), 8}, + {440.0*pow(2.0,(24)/12.0), 8}, + {440.0*pow(2.0,(28)/12.0), 20} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 12: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_off(_MUSIC); + stop_all_notes(); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + break; + case 13: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + break; + + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // stops the tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +uint8_t starting_note = 0x0C; +int offset = 7; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} +#endif diff --git a/keyboards/planck/keymaps/xyverz/makefile.mk b/keyboards/planck/keymaps/xyverz/makefile.mk new file mode 100644 index 000000000..99fbfbd0b --- /dev/null +++ b/keyboards/planck/keymaps/xyverz/makefile.mk @@ -0,0 +1,2 @@ +AUDIO_ENABLE = yes +NKRO_ENABLE = yes \ No newline at end of file diff --git a/keyboards/preonic/keymaps/xyverz/README.md b/keyboards/preonic/keymaps/xyverz/README.md new file mode 100644 index 000000000..9c23c5b9f --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/README.md @@ -0,0 +1,49 @@ +# The default Preonic layout - largely based on the Planck's + +## QWERTY Layer: + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | - | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ + +## LOWER Layer: + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ + +## RAISE Layer: + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ \ No newline at end of file diff --git a/keyboards/preonic/keymaps/xyverz/keymap.c b/keyboards/preonic/keymaps/xyverz/keymap.c new file mode 100644 index 000000000..adc7392e5 --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/keymap.c @@ -0,0 +1,342 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _MUSIC 5 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | - | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, + {KC_MINS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | / | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | - | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Music (reserved for process_action_user) + * + */ +[_MUSIC] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float start_up[][2] = { + {440.0*pow(2.0,(14)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8}, + {440.0*pow(2.0,(18)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE + +uint8_t starting_note = 0x0C; +int offset = 7; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} + +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/xyverz/makefile.mk b/keyboards/preonic/keymaps/xyverz/makefile.mk new file mode 100644 index 000000000..628167ff6 --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/makefile.mk @@ -0,0 +1 @@ +AUDIO_ENABLE = yes \ No newline at end of file