From b0ade6dc9838d4112cbc3093ac3033aa81ef172d Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 28 Dec 2016 20:08:45 +0100 Subject: [PATCH 01/86] =?UTF-8?q?Fix=20return=20value=20of=20hex=5Fto=5Fke?= =?UTF-8?q?ycode()=20function=20in=20keymap=20=E2=80=9Ccoderkun=5Fneo2?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index b62b14449f..9b33bbd6d0 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -294,11 +294,10 @@ void unicode_input_start (void) { // Override method to use NEO_A instead of KC_A uint16_t hex_to_keycode(uint8_t hex) { - if (hex == 0x0) { + if(hex == 0x0) { return KC_0; - } else if (hex < 0xA) { - return KC_1 + (hex - 0x1); - } else { + } + else if(hex >= 0xA) { switch(hex) { case 0xA: return NEO_A; @@ -314,4 +313,6 @@ uint16_t hex_to_keycode(uint8_t hex) return NEO_F; } } + + return KC_1 + (hex - 0x1); } From c74f47555cd77e5d26090e18e33fb4308ebc4ce5 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sat, 1 Apr 2017 11:05:35 +0200 Subject: [PATCH 02/86] =?UTF-8?q?Add=20keymap=20diagrams=20to=20readme=20o?= =?UTF-8?q?f=20keymap=20=E2=80=9Ccoderkun=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ergodox/keymaps/coderkun_neo2/readme.md | 123 ++++++++++++++++-- 1 file changed, 114 insertions(+), 9 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md index 2a4d3a535b..7eb504307c 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md +++ b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md @@ -7,15 +7,6 @@ The main goal of the default layer is to provide a complete symmetric layout wit It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and (hopefully in the near future) some useful Unicode symbols. -## Layers - -0. Default layer for Neo2 -1. Poor man’s QWERTZ -2. Poor man’s Neo -3. F-keys, mouse keys und Unicode symbols -4. Neo’s software layers 4 rebuilt in hardware - - ## Build 1. Enable Unicode in Makefile @@ -29,3 +20,117 @@ It also features a layer for additional keys like F-keys (F1 – F12), some mous make clean make KEYMAP=coderkun_neo2 ``` + + +## Keymap + +0. Default layer for Neo2 +1. Poor man’s QWERTZ +2. Poor man’s Neo +3. F-keys, mouse keys und Unicode symbols +4. Neo’s software layers 4 rebuilt in hardware + + +### Layer 0: Default layer for Neo2 + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │ + ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │ │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤ + │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ Alt │ CTL │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ ← │ ↑ │ │ ↓ │ → │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ ─ │ │ ─ │ │ │ + │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + │ │ │ HYP │ │ MEH │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ + + +### Layer 1: Poor man’s QWERTZ + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ C │ P │ T │ F │ K │ L │ HOM │ │ END │ B │ A │ S │ G │ V │ Y │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ Mod3 │ D │ H │ Ö │ O │ I ├─────┤ ├─────┤ U │ - │ Z │ E │ X │ Mod3 │ + ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + │ LSHFT │ Ä │ Q │ R │ W │ N │ │ │ │ J │ M │ , │ . │ ẞ │ Shift │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ ← │ ↑ │ │ ↓ │ → │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ ─ │ │ ─ │ │ │ + │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + │ │ │ HYP │ │ MEH │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ + + +### Layer 2: Poor man’s Neo + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │ + ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ ← │ ↑ │ │ ↓ │ → │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ ─ │ │ ─ │ │ │ + │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + │ │ │ HYP │ │ MEH │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ + + +### Layer 3: F-keys, mouse keys und Unicode symbols + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ + ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + │ │ └ │ ┴ │ ┘ │ ↔ │ ⇔ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ MLC │ │ MRC │ │ │ + │ │ ├─────┤ ├─────┤ │ │ + │ │ │ │ │ │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ + + +### Layer 4: Neo’s software layers 4 rebuilt in hardware + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ │ PgUp│ BSpc│ ↑ │ Del │ PgDn│ │ │ │ │ 7 │ 8 │ 9 │ + │ − │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ │ Home│ ← │ ↓ │ → │ End ├─────┤ ├─────┤ │ 4 │ 5 │ 6 │ , │ . │ + ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + │ │ Esc │ Tab │ Ins │ Ret │ Undo│ │ │ │ │ 1 │ 2 │ 3 │ │ │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ │ │ │ │ │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ │ │ │ │ │ + │ │ ├─────┤ ├─────┤ │ │ + │ │ │ │ │ │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ From 021edb6ec614ad65127859161cffc1b17fb376d6 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sat, 1 Apr 2017 12:00:39 +0200 Subject: [PATCH 03/86] =?UTF-8?q?Add=20several=20Unicode=20symbols=20to=20?= =?UTF-8?q?keymap=20=E2=80=9Ccoderkun=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ergodox/keymaps/coderkun_neo2/keymap.c | 32 +++++++++---------- .../ergodox/keymaps/coderkun_neo2/readme.md | 8 ++--- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index ff6d38f301..31905d3987 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -135,13 +135,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layer 3: F-keys, Mouse and Unicode * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - * │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ + * │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ ↔ │ ← │ → │ ↑ │ ↓ │ │ * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - * │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ + * │ │ ├ │ ┼ │ ┤ │ 〈 │ 〉 ├─────┤ ├─────┤ │ ✓ │ ✕ │ • │ ∶ │ │ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ │ └ │ ┴ │ ┘ │ ↔ │ ⇔ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + * │ │ └ │ ┴ │ ┘ │ │ │ │ │ │ ⇔ │ ⇐ │ ⇒ │ ⇑ │ ⇓ │ │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ @@ -154,23 +154,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [FMU] = KEYMAP( // left hand - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, UC(0x250C),UC(0x252C),UC(0x2510),UC(0x2500),UC(0x2502),KC_TRNS, - KC_TRNS, UC(0x251C),UC(0x253C),UC(0x2524),UC(0x2713),UC(0x2715), - KC_TRNS, UC(0x2514),UC(0x2534),UC(0x2518),UC(0x2194),UC(0x21D4),KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_MS_L, KC_MS_U, + KC_TRNS, UC(0x251C),UC(0x253C),UC(0x2524),UC(0x3008),UC(0x3009), + KC_TRNS, UC(0x2514),UC(0x2534),UC(0x2518),KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MS_L, KC_MS_U, KC_BTN1, - 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_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, - KC_TRNS,KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS, - KC_TRNS, KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_TRNS, UC(0x2194),UC(0x2190),UC(0x2192),UC(0x2191),UC(0x2193),KC_TRNS, + KC_TRNS, UC(0x2713),UC(0x2715),UC(0x2022),UC(0x2236),KC_TRNS, + KC_TRNS, UC(0x21D4),UC(0x21D0),UC(0x21D2),UC(0x21D1),UC(0x21D3),KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_D, KC_MS_R, KC_BTN2, - KC_TRNS, KC_TRNS,KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS ), /* Layer 4: Neo’s software layer 4 rebuilt in Hardware diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md index 7eb504307c..27ec805adc 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md +++ b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md @@ -97,13 +97,13 @@ It also features a layer for additional keys like F-keys (F1 – F12), some mous ### Layer 3: F-keys, mouse keys und Unicode symbols ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ + │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ ↔ │ ← │ → │ ↑ │ ↓ │ │ ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ + │ │ ├ │ ┼ │ ┤ │ 〈 │ 〉 ├─────┤ ├─────┤ │ ✓ │ ✕ │ • │ ∶ │ │ ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - │ │ └ │ ┴ │ ┘ │ ↔ │ ⇔ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + │ │ └ │ ┴ │ ┘ │ │ │ │ │ │ ⇔ │ ⇐ │ ⇒ │ ⇑ │ ⇓ │ │ └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ From 049f906b5e4175b4392518f2dbee34f973a53a3e Mon Sep 17 00:00:00 2001 From: coderkun Date: Sat, 1 Apr 2017 12:17:41 +0200 Subject: [PATCH 04/86] =?UTF-8?q?Fix=20keymap=20=E2=80=9Ccoderkun=5Fneo?= =?UTF-8?q?=E2=80=9D=20to=20use=20LALT=20instead=20of=20RALT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 31905d3987..3b82b7ce06 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │ │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤ * │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ Alt │ CTL │ + * │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ ALT │ CTL │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ * │ ← │ ↑ │ │ ↓ │ → │ * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ @@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS, NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R, TG(PMN), NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT, - NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + NEO_L2_R,KC_RGUI,MO(FMU),KC_LALT,KC_RCTL, KC_DOWN, KC_RGHT, KC_MINS, MEH_T(KC_NO),KC_ENT,KC_SPC @@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ * │ LSHFT │ Ä │ Q │ R │ W │ N │ │ │ │ J │ M │ , │ . │ ẞ │ Shift │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ ALT │ CTL │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ * │ ← │ ↑ │ │ ↓ │ → │ * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ @@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_END, DE_B, DE_A, DE_S, DE_G, DE_V, DE_Y, DE_U, DE_MINS,DE_Z, DE_E, DE_X, NEO_L1_R, KC_TRNS, DE_J, DE_M, DE_COMM,DE_DOT, DE_SS, KC_RSFT, - MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + MO(NHL),KC_RGUI,MO(FMU),KC_LALT,KC_RCTL, KC_DOWN, KC_RGHT, KC_MINS, MEH_T(KC_NO),KC_ENT,KC_SPC @@ -104,7 +104,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ * │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ ALT │ CTL │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ * │ ← │ ↑ │ │ ↓ │ → │ * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ @@ -127,7 +127,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_END, DE_K, DE_H, DE_G, DE_F, DE_Q, DE_SS, DE_S, DE_N, DE_R, DE_T, DE_D, KC_NO, KC_TRNS, DE_B, DE_M, KC_COMM,KC_DOT, DE_J, KC_RSFT, - MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + MO(NHL),KC_RGUI,MO(FMU),KC_LALT,KC_RCTL, KC_DOWN, KC_RGHT, KC_MINS, MEH_T(KC_NO),KC_ENT,KC_SPC From 91b11bb4dd9a0c94fbc0feb6915acc4717357205 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Wed, 12 Apr 2017 01:12:10 -0700 Subject: [PATCH 05/86] Update default layout This is a 2U Spacebar layout. Spacebar is between V and B. Issue: - RGB MOD does not seem to do anything --- keyboards/miuni32/keymaps/default/keymap.c | 68 ++++++++++++++++------ keyboards/miuni32/miuni32.h | 4 +- 2 files changed, 53 insertions(+), 19 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 15e2fa45c0..5994dda40f 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -1,19 +1,26 @@ #include "miuni32.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] ={ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT, KC_ENT}, - {KC_Z, KC_X, KC_C, KC_V, KC_V, KC_SPC, KC_B, KC_N, KC_M , MO(1), KC_RCTL} - }, -[1] ={ - {KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL}, - {KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_TRNS}, - {RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, KC_TRNS, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, RGB_MOD}, - } -}; -const uint16_t PROGMEM fn_actions[] = { - + [0] ={ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_DQUO), KC_ENT}, + {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, LT(2, KC_DOT), KC_RSFT} + }, + [1] ={ + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_TRNS, KC_PGUP}, + {KC_TRNS, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_PGDN} + }, + [2] ={ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUES}, + {KC_LPRN, KC_LCBR, KC_LBRC, KC_LABK, KC_NO, KC_TRNS, KC_SCLN, KC_COLN, KC_GRV, KC_TRNS, KC_SLSH} + }, + [3] ={ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS} + } }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -31,19 +38,46 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; - void matrix_init_user(void) { - } void matrix_scan_user(void) { - } bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; + return true; } void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + } diff --git a/keyboards/miuni32/miuni32.h b/keyboards/miuni32/miuni32.h index eecb17f81f..8e1b4a38c2 100644 --- a/keyboards/miuni32/miuni32.h +++ b/keyboards/miuni32/miuni32.h @@ -6,10 +6,10 @@ #define KEYMAP( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A ) { \ + K20, K21, K22, K23, K25, K26, K27, K28, K29, K2A ) { \ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A }, \ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A }, \ - { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A } \ + { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_NO, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A } \ } #endif From 592ff53e41afc93c5a5bc8e4b7fc3e6c89f76caa Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Wed, 12 Apr 2017 21:19:00 -0700 Subject: [PATCH 06/86] Enable RGB Animation --- keyboards/miuni32/config.h | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/miuni32/config.h b/keyboards/miuni32/config.h index 4f9b685518..9f26b2291e 100644 --- a/keyboards/miuni32/config.h +++ b/keyboards/miuni32/config.h @@ -163,6 +163,7 @@ along with this program. If not, see . #define RGB_DI_PIN D0 // The pin your RGB strip is wired to #define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio) #define RGBLED_NUM 7 // Number of LEDs +#define RGBLIGHT_ANIMATIONS #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 17 From dddbcc2af30d720542f1ae9bdcb03409df0cf1e7 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Wed, 12 Apr 2017 22:11:08 -0700 Subject: [PATCH 07/86] Replace double quote with comma --- keyboards/miuni32/keymaps/default/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 5994dda40f..6d345feff7 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -3,22 +3,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] ={ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_DQUO), KC_ENT}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_COMMA), KC_ENT}, {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, LT(2, KC_DOT), KC_RSFT} }, [1] ={ {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_TRNS, KC_PGUP}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_TRNS, KC_PGUP}, {KC_TRNS, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_PGDN} }, [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, - {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUES}, + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUES}, {KC_LPRN, KC_LCBR, KC_LBRC, KC_LABK, KC_NO, KC_TRNS, KC_SCLN, KC_COLN, KC_GRV, KC_TRNS, KC_SLSH} }, [3] ={ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, {KC_TRNS, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS} } }; From f90321bdcbcbd196ee642cdd8cc31aa0f6ac121e Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Thu, 13 Apr 2017 09:25:05 -0700 Subject: [PATCH 08/86] Update keymap - hopefully more usable --- keyboards/miuni32/keymaps/default/keymap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 6d345feff7..acc0c6f3d3 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -3,23 +3,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] ={ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_COMMA), KC_ENT}, - {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, LT(2, KC_DOT), KC_RSFT} + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, + {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} }, [1] ={ {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_TRNS, KC_PGUP}, - {KC_TRNS, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_PGDN} + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_PGUP, KC_TRNS}, + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} }, [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, - {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUES}, - {KC_LPRN, KC_LCBR, KC_LBRC, KC_LABK, KC_NO, KC_TRNS, KC_SCLN, KC_COLN, KC_GRV, KC_TRNS, KC_SLSH} + {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} }, [3] ={ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS} + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} } }; From 4810a4a81220dc2a6e9c7dff0b41e1777f1d221d Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Thu, 13 Apr 2017 23:47:50 -0700 Subject: [PATCH 09/86] Add LCTL + L on Layer 2 --- keyboards/miuni32/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index acc0c6f3d3..8275913642 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, - {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_LCTL, KC_L, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, [3] ={ {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, From f076f16e1303a46632cad671a76216c97fdaef33 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Thu, 13 Apr 2017 23:50:57 -0700 Subject: [PATCH 10/86] Add KC_T on Layer 2 --- keyboards/miuni32/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 8275913642..b058c360e2 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, - {KC_TRNS, KC_LCTL, KC_L, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} + {KC_TRNS, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, [3] ={ {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, From a9f45960626297d467a6a137681ac2cb8a88949c Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Fri, 14 Apr 2017 00:02:25 -0700 Subject: [PATCH 11/86] Add TAB, N, LSFT on Layer 2 --- keyboards/miuni32/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index b058c360e2..152bef7358 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, - {KC_TRNS, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} + {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, [3] ={ {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, From ccabf70aeb6209bcb2bfdf6a4c166c1ab78c47e4 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 13:40:03 -0700 Subject: [PATCH 12/86] Added keymap commets to default layout. --- keyboards/miuni32/keymaps/default/keymap.c | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 152bef7358..21e728cc98 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -1,21 +1,57 @@ #include "miuni32.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,---------------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | BSP | + * |---------------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ENT |LT(1|,)| + * |---------------------------------------------------------------------------------------| + * |LT(3|Z)| X | C | V | NO | SPC | B | N | M | RSFT |LT(2|.)| + * |---------------------------------------------------------------------------------------| + */ [0] ={ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} }, + /* Level 1: Numbers Layer + * ,---------------------------------------------------------------------------------------. + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | BSP | + * |---------------------------------------------------------------------------------------| + * | TAB | 4 | 5 | 6 | - | + | = | UP | HOME | PGUP | TRNS | + * |---------------------------------------------------------------------------------------| + * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RALT | + * |---------------------------------------------------------------------------------------| + */ [1] ={ {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_PGUP, KC_TRNS}, {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} }, + /* Level 2: Symbols Layer + * ,---------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | - | + | = | + * |---------------------------------------------------------------------------------------| + * | { | } | [ | ] | TRNS | TRNS | \ | ; | : | ` | ? | + * |---------------------------------------------------------------------------------------| + * | LSFT | LCTL | L | T | TRNS | TAB | N | TRNS | TRNS | RCTL | TRNS | + * |---------------------------------------------------------------------------------------| + */ [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, + /* Level 3: RGB Layer + * ,---------------------------------------------------------------------------------------. + * | RESET | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD| NO |RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + * | TRNS | TRNS | TRNS | TRNS | NO | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + */ [3] ={ {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, From 1bab72383c803b8c48e3eef7224f6e79f409a014 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 14:10:29 -0700 Subject: [PATCH 13/86] Added DEL and F1 to F12 keys --- keyboards/miuni32/keymaps/default/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 21e728cc98..e8055dcca5 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Level 1: Numbers Layer * ,---------------------------------------------------------------------------------------. - * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | BSP | + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | * |---------------------------------------------------------------------------------------| * | TAB | 4 | 5 | 6 | - | + | = | UP | HOME | PGUP | TRNS | * |---------------------------------------------------------------------------------------| @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| */ [1] ={ - {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_PGUP, KC_TRNS}, {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} }, @@ -45,17 +45,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Level 3: RGB Layer * ,---------------------------------------------------------------------------------------. - * | RESET | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | + * | RESET | TRNS | TRNS | TRNS | TRNS | F1 | F2 | F3 | F4 | F5 | F6 | * |---------------------------------------------------------------------------------------| * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD| NO |RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| TRNS | TRNS | * |---------------------------------------------------------------------------------------| - * | TRNS | TRNS | TRNS | TRNS | NO | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | + * | TRNS | TRNS | TRNS | TRNS | NO | F7 | F8 | F9 | F10 | F11 | F12 | * |---------------------------------------------------------------------------------------| */ [3] ={ - {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6}, {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12} } }; From 3bfe4cdb4feeee9c9282839ee8a1fe497dac24b5 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 14:19:51 -0700 Subject: [PATCH 14/86] Added END and other keymap file formatting. --- keyboards/miuni32/keymaps/default/keymap.c | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index e8055dcca5..ec87bfe73e 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -11,23 +11,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| */ [0] ={ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, - {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, + {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} }, /* Level 1: Numbers Layer * ,---------------------------------------------------------------------------------------. * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | * |---------------------------------------------------------------------------------------| - * | TAB | 4 | 5 | 6 | - | + | = | UP | HOME | PGUP | TRNS | + * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TRNS | * |---------------------------------------------------------------------------------------| * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RALT | * |---------------------------------------------------------------------------------------| */ [1] ={ - {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, - {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_PGUP, KC_TRNS}, - {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS}, + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} }, /* Level 2: Symbols Layer * ,---------------------------------------------------------------------------------------. @@ -39,9 +39,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| */ [2] ={ - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, - {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, - {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, + {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, + {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, /* Level 3: RGB Layer * ,---------------------------------------------------------------------------------------. @@ -53,9 +53,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| */ [3] ={ - {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6}, - {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12} + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6}, + {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12} } }; From 22afddb8e8b92873b0adcb0feb09061077e7b709 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Sun, 16 Apr 2017 14:50:25 -0700 Subject: [PATCH 15/86] Replace RALT with RSFT --- keyboards/miuni32/keymaps/default/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index ec87bfe73e..f799b89291 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -21,13 +21,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TRNS | * |---------------------------------------------------------------------------------------| - * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RALT | + * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RSHFT | * |---------------------------------------------------------------------------------------| */ [1] ={ {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS}, - {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RSFT} }, /* Level 2: Symbols Layer * ,---------------------------------------------------------------------------------------. From 7e930626eb5f69d6a4de0594c6f5930334d801f8 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Sun, 16 Apr 2017 15:02:11 -0700 Subject: [PATCH 16/86] Add a personal layout for adam Collectively we should keep on working on the "default" layout. I am adding my own layout to freely explore adjustments and new features. --- keyboards/miuni32/keymaps/adam-lee/Makefile | 21 ++++ keyboards/miuni32/keymaps/adam-lee/config.h | 8 ++ keyboards/miuni32/keymaps/adam-lee/keymap.c | 119 ++++++++++++++++++ .../miuni32/keymaps/adam-lee/keymap.c.backup | 42 +++++++ keyboards/miuni32/keymaps/adam-lee/readme.md | 1 + 5 files changed, 191 insertions(+) create mode 100644 keyboards/miuni32/keymaps/adam-lee/Makefile create mode 100644 keyboards/miuni32/keymaps/adam-lee/config.h create mode 100644 keyboards/miuni32/keymaps/adam-lee/keymap.c create mode 100644 keyboards/miuni32/keymaps/adam-lee/keymap.c.backup create mode 100644 keyboards/miuni32/keymaps/adam-lee/readme.md diff --git a/keyboards/miuni32/keymaps/adam-lee/Makefile b/keyboards/miuni32/keymaps/adam-lee/Makefile new file mode 100644 index 0000000000..88a3aea741 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/miuni32/keymaps/adam-lee/config.h b/keyboards/miuni32/keymaps/adam-lee/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/miuni32/keymaps/adam-lee/keymap.c b/keyboards/miuni32/keymaps/adam-lee/keymap.c new file mode 100644 index 0000000000..f799b89291 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/keymap.c @@ -0,0 +1,119 @@ +#include "miuni32.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,---------------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | BSP | + * |---------------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ENT |LT(1|,)| + * |---------------------------------------------------------------------------------------| + * |LT(3|Z)| X | C | V | NO | SPC | B | N | M | RSFT |LT(2|.)| + * |---------------------------------------------------------------------------------------| + */ + [0] ={ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, + {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} + }, + /* Level 1: Numbers Layer + * ,---------------------------------------------------------------------------------------. + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | + * |---------------------------------------------------------------------------------------| + * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TRNS | + * |---------------------------------------------------------------------------------------| + * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RSHFT | + * |---------------------------------------------------------------------------------------| + */ + [1] ={ + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS}, + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RSFT} + }, + /* Level 2: Symbols Layer + * ,---------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | - | + | = | + * |---------------------------------------------------------------------------------------| + * | { | } | [ | ] | TRNS | TRNS | \ | ; | : | ` | ? | + * |---------------------------------------------------------------------------------------| + * | LSFT | LCTL | L | T | TRNS | TAB | N | TRNS | TRNS | RCTL | TRNS | + * |---------------------------------------------------------------------------------------| + */ + [2] ={ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, + {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, + {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} + }, + /* Level 3: RGB Layer + * ,---------------------------------------------------------------------------------------. + * | RESET | TRNS | TRNS | TRNS | TRNS | F1 | F2 | F3 | F4 | F5 | F6 | + * |---------------------------------------------------------------------------------------| + * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD| NO |RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + * | TRNS | TRNS | TRNS | TRNS | NO | F7 | F8 | F9 | F10 | F11 | F12 | + * |---------------------------------------------------------------------------------------| + */ + [3] ={ + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6}, + {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12} + } +}; + +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; +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} diff --git a/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup b/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup new file mode 100644 index 0000000000..2f634fffbd --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup @@ -0,0 +1,42 @@ +#include "miuni32.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] ={ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT, KC_ENT}, + {KC_Z, KC_X, KC_C, KC_V, KC_V, KC_SPC, KC_B, KC_N, KC_M , MO(1), KC_RCTL} + }, +[1] ={ + {KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL}, + {KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_TRNS}, + {RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, KC_TRNS, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, RGB_MOD}, + } +}; +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + keyevent_t event = record->event; + + switch (id) { + + } + return MACRO_NONE; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/miuni32/keymaps/adam-lee/readme.md b/keyboards/miuni32/keymaps/adam-lee/readme.md new file mode 100644 index 0000000000..4cff8ef5a3 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/readme.md @@ -0,0 +1 @@ +# The default keymap for miuni32 \ No newline at end of file From f9aa75fe9522f06ac39cfe4097bf314f37108c0b Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 15:31:00 -0700 Subject: [PATCH 17/86] Added ht_156 keymap files --- keyboards/miuni32/keymaps/ht_156/Makefile | 21 ++++ keyboards/miuni32/keymaps/ht_156/config.h | 8 ++ keyboards/miuni32/keymaps/ht_156/keymap.c | 109 +++++++++++++++++++++ keyboards/miuni32/keymaps/ht_156/readme.md | 1 + 4 files changed, 139 insertions(+) create mode 100644 keyboards/miuni32/keymaps/ht_156/Makefile create mode 100644 keyboards/miuni32/keymaps/ht_156/config.h create mode 100644 keyboards/miuni32/keymaps/ht_156/keymap.c create mode 100644 keyboards/miuni32/keymaps/ht_156/readme.md diff --git a/keyboards/miuni32/keymaps/ht_156/Makefile b/keyboards/miuni32/keymaps/ht_156/Makefile new file mode 100644 index 0000000000..88a3aea741 --- /dev/null +++ b/keyboards/miuni32/keymaps/ht_156/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/miuni32/keymaps/ht_156/config.h b/keyboards/miuni32/keymaps/ht_156/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/miuni32/keymaps/ht_156/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/miuni32/keymaps/ht_156/keymap.c b/keyboards/miuni32/keymaps/ht_156/keymap.c new file mode 100644 index 0000000000..50dc724a6b --- /dev/null +++ b/keyboards/miuni32/keymaps/ht_156/keymap.c @@ -0,0 +1,109 @@ +#include "miuni32.h" + +#define BASE 0 +#define NUMBERS 1 +#define SYMBOLS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,---------------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | BSP | + * |---------------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ENT | RSFT | + * |---------------------------------------------------------------------------------------| + * |LT(2|Z)| X | C | V | B | SPC | N | M | , |LT(1|.)| RCTL | + * |---------------------------------------------------------------------------------------| + */ + [BASE] ={ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_RSFT}, + {LT(2, KC_Z), KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMMA, LT(1, KC_DOT), KC_RCTL} + }, + /* Level 1: Numbers Layer + * ,---------------------------------------------------------------------------------------. + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | + * |---------------------------------------------------------------------------------------| + * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | INS | PGUP | + * |---------------------------------------------------------------------------------------| + * | LATL | 1 | 2 | 3 | 0 | ENT | LEFT | DOWN | RGHT | !TRNS!| PGDN | + * |---------------------------------------------------------------------------------------| + */ + [NUMBERS] ={ + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_INSERT, KC_PGUP}, + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_ENT, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_PGDN} + }, + /* Level 2: Symbols Layer + * ,---------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | _ | = | ? | + * |---------------------------------------------------------------------------------------| + * | RESET | LSFT | ~ | { | } | \ | | | ; | : | ` | " | + * |---------------------------------------------------------------------------------------| + * | !TRNS!| LCTL | TRNS | [ | ] | TAB | < | > | TRNS | RCTL | TRNS | + * |---------------------------------------------------------------------------------------| + */ + [SYMBOLS] ={ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_EQL, KC_QUES}, + {RESET, KC_LSFT, KC_TILD, KC_LCBR, KC_RCBR, KC_BSLS, KC_PIPE, KC_SCLN, KC_COLN, KC_GRV, KC_DQUO}, + {KC_TRNS, KC_LCTL, KC_TRNS, KC_LBRC, KC_RBRC, KC_TAB, KC_LABK, KC_RABK, KC_TRNS, KC_RCTL, KC_TRNS} + } +}; + +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; +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} diff --git a/keyboards/miuni32/keymaps/ht_156/readme.md b/keyboards/miuni32/keymaps/ht_156/readme.md new file mode 100644 index 0000000000..e46cc6d539 --- /dev/null +++ b/keyboards/miuni32/keymaps/ht_156/readme.md @@ -0,0 +1 @@ +# ht_156's keymap for miuni32, using 33 keys From c4f93e237e81995bdff5e84acd440d2859836c66 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 16:08:31 -0700 Subject: [PATCH 18/86] Added media layer for ht_156 --- keyboards/miuni32/keymaps/ht_156/keymap.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/keyboards/miuni32/keymaps/ht_156/keymap.c b/keyboards/miuni32/keymaps/ht_156/keymap.c index 50dc724a6b..3d9803984c 100644 --- a/keyboards/miuni32/keymaps/ht_156/keymap.c +++ b/keyboards/miuni32/keymaps/ht_156/keymap.c @@ -3,6 +3,7 @@ #define BASE 0 #define NUMBERS 1 #define SYMBOLS 2 +#define MEDIA 3 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Level 0: Default Layer @@ -11,13 +12,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| * | A | S | D | F | G | H | J | K | L | ENT | RSFT | * |---------------------------------------------------------------------------------------| - * |LT(2|Z)| X | C | V | B | SPC | N | M | , |LT(1|.)| RCTL | + * |LT(2|Z)|LT(3|X)| C | V | B | SPC | N | M | , |LT(1|.)| RCTL | * |---------------------------------------------------------------------------------------| */ [BASE] ={ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_RSFT}, - {LT(2, KC_Z), KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMMA, LT(1, KC_DOT), KC_RCTL} + {LT(2, KC_Z), LT(3, KC_X), KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMMA, LT(1, KC_DOT), KC_RCTL} }, /* Level 1: Numbers Layer * ,---------------------------------------------------------------------------------------. @@ -46,7 +47,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_EQL, KC_QUES}, {RESET, KC_LSFT, KC_TILD, KC_LCBR, KC_RCBR, KC_BSLS, KC_PIPE, KC_SCLN, KC_COLN, KC_GRV, KC_DQUO}, {KC_TRNS, KC_LCTL, KC_TRNS, KC_LBRC, KC_RBRC, KC_TAB, KC_LABK, KC_RABK, KC_TRNS, KC_RCTL, KC_TRNS} - } + }, + /* Level 3: Media Layer + * ,---------------------------------------------------------------------------------------. + * | TRNS | TRNS | TRNS | TRNS | TRNS | CALC | WREF | WFAV | MUTE | VOLD | VOLU | + * |---------------------------------------------------------------------------------------| + * | TRNS | TRNS | TRNS | TRNS | TRNS | WHOM | WBAK | WFWD | TRNS | STOP | PLAY | + * |---------------------------------------------------------------------------------------| + * | TRNS | !TRNS!| TRNS | TRNS | TRNS | MYCM | WSTP | WSCH | MSEL | MPRV | MNXT | + * |---------------------------------------------------------------------------------------| + */ + [MEDIA] ={ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_WSTP, KC_WSCH, KC_MSEL, KC_MPRV, KC_MNXT} + } }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) From 4634e3802c14185850e14012c1a3e252b9cc53c3 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 17:39:04 -0700 Subject: [PATCH 19/86] Added simple macros to test. --- keyboards/miuni32/keymaps/ht_156/keymap.c | 71 ++++++++++++++++++++--- 1 file changed, 62 insertions(+), 9 deletions(-) diff --git a/keyboards/miuni32/keymaps/ht_156/keymap.c b/keyboards/miuni32/keymaps/ht_156/keymap.c index 3d9803984c..a1e3841578 100644 --- a/keyboards/miuni32/keymaps/ht_156/keymap.c +++ b/keyboards/miuni32/keymaps/ht_156/keymap.c @@ -1,10 +1,17 @@ #include "miuni32.h" +// Keyboard layer definitions #define BASE 0 #define NUMBERS 1 #define SYMBOLS 2 #define MEDIA 3 +// Keyboard macro defintions +#define GIT_ST M(0) +#define GIT_PU M(1) +#define GIT_CM M(2) +#define HM_DIR M(3) + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Level 0: Default Layer * ,---------------------------------------------------------------------------------------. @@ -50,31 +57,77 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Level 3: Media Layer * ,---------------------------------------------------------------------------------------. - * | TRNS | TRNS | TRNS | TRNS | TRNS | CALC | WREF | WFAV | MUTE | VOLD | VOLU | + * | TRNS | TRNS | GIT_ST| GIT_PU| GIT_CM| CALC | WREF | WFAV | MUTE | VOLD | VOLU | * |---------------------------------------------------------------------------------------| - * | TRNS | TRNS | TRNS | TRNS | TRNS | WHOM | WBAK | WFWD | TRNS | STOP | PLAY | + * | TRNS | TRNS | HM_DIR| TRNS | TRNS | WHOM | WBAK | WFWD | TRNS | STOP | PLAY | * |---------------------------------------------------------------------------------------| * | TRNS | !TRNS!| TRNS | TRNS | TRNS | MYCM | WSTP | WSCH | MSEL | MPRV | MNXT | * |---------------------------------------------------------------------------------------| */ [MEDIA] ={ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, + {KC_TRNS, KC_TRNS, GIT_ST, GIT_PU, GIT_CM, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, + {KC_TRNS, KC_TRNS, HM_DIR, KC_TRNS, KC_TRNS, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_WSTP, KC_WSCH, KC_MSEL, KC_MPRV, KC_MNXT} } }; +void press_and_release_key(uint8_t code) +{ + register_code(code); + unregister_code(code); +} + +void press_and_release_mod_key(uint8_t mod, uint8_t code) +{ + register_code(mod); + register_code(code); + unregister_code(code); + unregister_code(mod); +} + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { + switch(id) + { case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); + if (record->event.pressed) + { + return MACRO(T(G), T(I), T(T), T(SPC), + T(S), T(T), T(A), T(T), T(U), T(S), END); + } + break; + case 1: + if (record->event.pressed) + { + return MACRO(T(G), T(I), T(T), T(SPC), + T(P), T(U), T(L), T(L), END); } break; + case 2: + if (record->event.pressed) + { + return MACRO(T(G), T(I), T(T), T(SPC), + T(C), T(O), T(M), T(M), T(I), T(T), END); + } + break; + case 3: + if (record->event.pressed) + { + press_and_release_key(KC_C); + press_and_release_key(KC_D); + press_and_release_key(KC_SPC); + press_and_release_mod_key(KC_LSFT, KC_GRV); + press_and_release_key(KC_SLSH); + press_and_release_key(KC_Q); + press_and_release_key(KC_M); + press_and_release_key(KC_K); + press_and_release_mod_key(KC_LSFT, KC_MINS); + return MACRO(T(F), T(I), T(R), T(M), T(W), T(A), T(R), T(E), T(SLSH), + T(K), T(E), T(Y), T(B), T(O), T(A), T(R), T(D), T(S), T(SLSH), + T(M), T(I), T(U), T(N), T(I), T(3), T(2), T(SLSH), + T(K), T(E), T(Y), T(M), T(A), T(P), T(S), END); + } } return MACRO_NONE; }; From ce0efa6b9a92387af395fded796e8ccb8927b52d Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Wed, 19 Apr 2017 12:03:48 +0700 Subject: [PATCH 20/86] Fix LED sequence; bug fixes --- keyboards/handwired/promethium/config.h | 12 ++++++------ .../promethium/keymaps/priyadi/keymap.c | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h index a13406b0dd..04f7caa55c 100644 --- a/keyboards/handwired/promethium/config.h +++ b/keyboards/handwired/promethium/config.h @@ -205,7 +205,7 @@ enum led_sequence { LED_RSFT, LED_RCTL, - LED_RGUI, + LED_RALT, LED_SLSH, LED_SCLN, LED_P, @@ -213,9 +213,9 @@ enum led_sequence { LED_O, LED_L, LED_DOT, - LED_RALT, + LED_RGUI, - LED_EMOJI, + LED_GREEK, LED_COMM, LED_K, LED_I, @@ -244,7 +244,7 @@ enum led_sequence { LED_V, LED_NUM, - LED_PUNC, + LED_EMPTY, LED_C, LED_D, LED_E, @@ -252,9 +252,9 @@ enum led_sequence { LED_W, LED_S, LED_X, - LED_LALT, - LED_LGUI, + + LED_LALT, LED_Z, LED_A, LED_Q, diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index efa5d9756e..7a18b02fd4 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -434,10 +434,10 @@ const uint8_t PROGMEM LED_MODS[] = { }; const uint8_t PROGMEM LED_FN[] = { - LED_PUNC, + LED_EMPTY, LED_NUM, LED_FUN, - LED_EMOJI + LED_GREEK }; const uint8_t PROGMEM LED_INDICATORS[] = { @@ -632,6 +632,14 @@ void led_init(void) { // layer indicator led_set_layer_indicator(); led_set_default_layer_indicator(); + + // clicky + if (fauxclicky_enabled) { + rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + } else { + rgbsps_set(LED_IND_AUDIO, 0, 0, 0); + } + rgbsps_send(); } @@ -1211,9 +1219,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case FC_TOG: #ifdef RGBSPS_ENABLE if (fauxclicky_enabled) { - rgbsps_set(LED_IND_AUDIO, 0, 0, 0); - } else { rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + } else { + rgbsps_set(LED_IND_AUDIO, 0, 0, 0); } rgbsps_send(); #endif From f9d226ca50ba243133847d19893d2c3b844eec12 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Wed, 19 Apr 2017 12:35:05 +0700 Subject: [PATCH 21/86] tune clicks --- keyboards/handwired/promethium/promethium.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c index 8b1a0c71f2..544e94be59 100644 --- a/keyboards/handwired/promethium/promethium.c +++ b/keyboards/handwired/promethium/promethium.c @@ -4,9 +4,9 @@ #include "matrix.h" #include "musical_notes.h" -float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_F3, .03125); -float fauxclicky_released_note[2] = MUSICAL_NOTE(_C3, .03125); -float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C3, .03125); +float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_C5, 0.25); +float fauxclicky_released_note[2] = MUSICAL_NOTE(_C4, 0.25); +float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C6, 0.25); // cubic fit {3.3, 0}, {3.5, 2.9}, {3.6, 5}, {3.7, 8.6}, {3.8, 36}, {3.9, 62}, {4.0, 73}, {4.05, 83}, {4.1, 89}, {4.15, 94}, {4.2, 100} From cd30a60d0e4f108403b19ec4c1bc4270b54b8c27 Mon Sep 17 00:00:00 2001 From: Andrew Pritchard Date: Wed, 26 Apr 2017 15:29:39 -0700 Subject: [PATCH 22/86] Change to per-key eager debouncing for ErgoDox EZ. Empirically, waiting for N consecutive identical scans as a debouncing strategy doesn't work very well for the ErgoDox EZ where scans are very slow compared to most keyboards. Instead, debounce the signals by eagerly reporting a change as soon as one scan observes it, but then ignoring further changes from that key for the next N scans. This is implemented by keeping an extra matrix of uint8 countdowns, such that only keys whose countdown is currently zero are eligible to change. When we do observe a change, we bump that key's countdown to DEBOUNCE. During each scan, every nonzero countdown is decremented. With this approach to debouncing, much higher debounce constants are tolerable, because latency does not increase with the constant, and debounce countdowns on one key do not interfere with events on other keys. The only negative effect of increasing the constant is that the minimum duration of a keypress increases. Perhaps I'm just extremely unlucky w.r.t. key switch quality, but I saw occasional bounces even with DEBOUNCE=10; with 15, I've seen none so far. That's around 47ms, which seems like an absolutely insane amount of time for a key to be bouncy, but at least it works. --- keyboards/ergodox/ez/config.h | 2 +- keyboards/ergodox/ez/matrix.c | 62 +++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h index a3347de45e..aa17c3e8d3 100644 --- a/keyboards/ergodox/ez/config.h +++ b/keyboards/ergodox/ez/config.h @@ -58,7 +58,7 @@ along with this program. If not, see . #define RGBW 1 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCE 15 #define USB_MAX_POWER_CONSUMPTION 500 diff --git a/keyboards/ergodox/ez/matrix.c b/keyboards/ergodox/ez/matrix.c index 43f5152591..21b60a542e 100644 --- a/keyboards/ergodox/ez/matrix.c +++ b/keyboards/ergodox/ez/matrix.c @@ -53,11 +53,14 @@ along with this program. If not, see . #ifndef DEBOUNCE # define DEBOUNCE 5 #endif -static uint8_t debouncing = DEBOUNCE; /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +// Debouncing: store for each key the number of scans until it's eligible to +// change. When scanning the matrix, ignore any changes in keys that have +// already changed in the last DEBOUNCE scans. +static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS]; static matrix_row_t read_cols(uint8_t row); static void init_cols(void); @@ -113,7 +116,9 @@ void matrix_init(void) // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; - matrix_debouncing[i] = 0; + for (uint8_t j=0; j < MATRIX_COLS; ++j) { + debounce_matrix[i * MATRIX_COLS + j] = 0; + } } #ifdef DEBUG_MATRIX_SCAN_RATE @@ -134,14 +139,36 @@ void matrix_power_up(void) { // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; - matrix_debouncing[i] = 0; } #ifdef DEBUG_MATRIX_SCAN_RATE matrix_timer = timer_read32(); matrix_scan_count = 0; #endif +} + +// Returns a matrix_row_t whose bits are set if the corresponding key should be +// eligible to change in this scan. +matrix_row_t debounce_mask(uint8_t row) { + matrix_row_t result = 0; + for (uint8_t j=0; j < MATRIX_COLS; ++j) { + if (debounce_matrix[row * MATRIX_COLS + j]) { + --debounce_matrix[row * MATRIX_COLS + j]; + } else { + result |= (1 << j); + } + } + return result; +} +// Report changed keys in the given row. Resets the debounce countdowns +// corresponding to each set bit in 'change' to DEBOUNCE. +void debounce_report(matrix_row_t change, uint8_t row) { + for (uint8_t i = 0; i < MATRIX_COLS; ++i) { + if (change & (1 << i)) { + debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE; + } + } } uint8_t matrix_scan(void) @@ -178,26 +205,12 @@ uint8_t matrix_scan(void) for (uint8_t i = 0; i < MATRIX_ROWS; i++) { select_row(i); wait_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(i); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCE; - } - unselect_rows(); - } + matrix_row_t mask = debounce_mask(i); + matrix_row_t cols = (read_cols(i) & mask) | (matrix[i] & ~mask); + debounce_report(cols ^ matrix[i], i); + matrix[i] = cols; - if (debouncing) { - if (--debouncing) { - wait_us(1); - // this should be wait_ms(1) but has been left as-is at EZ's request - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } + unselect_rows(); } matrix_scan_quantum(); @@ -205,9 +218,8 @@ uint8_t matrix_scan(void) return 1; } -bool matrix_is_modified(void) +bool matrix_is_modified(void) // deprecated and evidently not called. { - if (debouncing) return false; return true; } From 425e7348d8b6fa40dd7aa3f4c99dbbff6f5babd8 Mon Sep 17 00:00:00 2001 From: htang156 Date: Thu, 27 Apr 2017 23:12:43 -0700 Subject: [PATCH 23/86] Modified ht_156 keymap --- keyboards/miuni32/keymaps/ht_156/keymap.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/keyboards/miuni32/keymaps/ht_156/keymap.c b/keyboards/miuni32/keymaps/ht_156/keymap.c index a1e3841578..e40180d49e 100644 --- a/keyboards/miuni32/keymaps/ht_156/keymap.c +++ b/keyboards/miuni32/keymaps/ht_156/keymap.c @@ -57,17 +57,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Level 3: Media Layer * ,---------------------------------------------------------------------------------------. - * | TRNS | TRNS | GIT_ST| GIT_PU| GIT_CM| CALC | WREF | WFAV | MUTE | VOLD | VOLU | + * |RGB_TOG|RGB_HUI|RGB_SAI|RGB_VAI| GIT_CM| CALC | WREF | WFAV | MUTE | VOLD | VOLU | * |---------------------------------------------------------------------------------------| - * | TRNS | TRNS | HM_DIR| TRNS | TRNS | WHOM | WBAK | WFWD | TRNS | STOP | PLAY | + * |RGB_MOD|RGB_HUD|RGB_SAD|RGB_VAD| GIT_ST| WHOM | WBAK | WFWD | TRNS | STOP | PLAY | * |---------------------------------------------------------------------------------------| - * | TRNS | !TRNS!| TRNS | TRNS | TRNS | MYCM | WSTP | WSCH | MSEL | MPRV | MNXT | + * | TRNS | !TRNS!| TRNS | HM_DIR| GIT_PU| MYCM | WSTP | WSCH | MSEL | MPRV | MNXT | * |---------------------------------------------------------------------------------------| */ [MEDIA] ={ - {KC_TRNS, KC_TRNS, GIT_ST, GIT_PU, GIT_CM, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, - {KC_TRNS, KC_TRNS, HM_DIR, KC_TRNS, KC_TRNS, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_WSTP, KC_WSCH, KC_MSEL, KC_MPRV, KC_MNXT} + {RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, GIT_CM, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, + {RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, GIT_ST, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, + {KC_TRNS, KC_TRNS, KC_TRNS, HM_DIR, GIT_PU, KC_MYCM, KC_WSTP, KC_WSCH, KC_MSEL, KC_MPRV, KC_MNXT} } }; @@ -114,7 +114,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case 3: if (record->event.pressed) { - press_and_release_key(KC_C); + /*press_and_release_key(KC_C); press_and_release_key(KC_D); press_and_release_key(KC_SPC); press_and_release_mod_key(KC_LSFT, KC_GRV); @@ -122,8 +122,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) press_and_release_key(KC_Q); press_and_release_key(KC_M); press_and_release_key(KC_K); - press_and_release_mod_key(KC_LSFT, KC_MINS); - return MACRO(T(F), T(I), T(R), T(M), T(W), T(A), T(R), T(E), T(SLSH), + press_and_release_mod_key(KC_LSFT, KC_MINS);*/ + return MACRO(I(0), + T(C), T(D), T(SPC), + D(LSFT), T(GRV), U(LSFT), T(SLSH), + T(Q), T(M), T(K), D(LSFT), T(MINS), U(LSFT), + T(F), T(I), T(R), T(M), T(W), T(A), T(R), T(E), T(SLSH), T(K), T(E), T(Y), T(B), T(O), T(A), T(R), T(D), T(S), T(SLSH), T(M), T(I), T(U), T(N), T(I), T(3), T(2), T(SLSH), T(K), T(E), T(Y), T(M), T(A), T(P), T(S), END); From d8f1949029297b0bec395606bbaedf4f6d4c0760 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 29 Apr 2017 13:21:27 +0700 Subject: [PATCH 24/86] Promethium update: demo LED, fix PS2 delay, fix LED ordering, change click frequency --- keyboards/handwired/promethium/config.h | 38 +++++++++---------- .../promethium/keymaps/priyadi/config.h | 1 + .../promethium/keymaps/priyadi/keymap.c | 34 ++++++++++++++++- keyboards/handwired/promethium/promethium.c | 4 +- 4 files changed, 55 insertions(+), 22 deletions(-) diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h index 04f7caa55c..efb9ebdd74 100644 --- a/keyboards/handwired/promethium/config.h +++ b/keyboards/handwired/promethium/config.h @@ -153,7 +153,7 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#define PS2_INIT_DELAY 3000 +#define PS2_MOUSE_INIT_DELAY 2000 #define BATTERY_PIN 9 #define BATTERY_POLL 30000 #define MAX_VOLTAGE 4.2 @@ -234,35 +234,35 @@ enum led_sequence { LED_TRACKPOINT2, LED_TRACKPOINT1, - LED_LSPC, - LED_B, - LED_G, LED_T, + LED_G, + LED_B, + LED_LSPC, - LED_R, - LED_F, - LED_V, LED_NUM, + LED_V, + LED_F, + LED_R, - LED_EMPTY, - LED_C, - LED_D, LED_E, + LED_D, + LED_C, + LED_EMPTY, - LED_W, - LED_S, - LED_X, LED_LGUI, + LED_X, + LED_S, + LED_W, - LED_LALT, - LED_Z, - LED_A, LED_Q, + LED_A, + LED_Z, + LED_LALT, - LED_TAB, - LED_ESC, - LED_LSFT, LED_LCTL, + LED_LSFT, + LED_ESC, + LED_TAB, LED_TOTAL }; diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h index 3f5dd5817d..fa86e22479 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/config.h +++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h @@ -14,6 +14,7 @@ #define PREVENT_STUCK_MODIFIERS #define RGBSPS_ENABLE +#define RGBSPS_DEMO_ENABLE #define UNICODE_TYPE_DELAY 0 diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index 7a18b02fd4..4cc3d6d60a 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -144,6 +144,7 @@ enum planck_keycodes { #ifndef MODULE_ADAFRUIT_BLE OUT_BT, #endif + RGBDEMO, KEYCODE_END }; @@ -478,6 +479,27 @@ void led_turnoff_keys(void) { } } +#ifdef RGBSPS_DEMO_ENABLE +void led_demo(void) { + rgbsps_set(LED_IND_LINUX, 15, 15, 15); + rgbsps_set(LED_IND_APPLE, 15, 15, 15); + rgbsps_set(LED_IND_WINDOWS, 15, 15, 15); + rgbsps_set(LED_IND_QWERTY, 15, 10, 0); + rgbsps_set(LED_IND_ALT, 15, 10, 0); + rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15); + rgbsps_set(LED_IND_USB, 15, 15, 15); + rgbsps_set(LED_IND_CAPSLOCK, 15, 0, 0); + rgbsps_set(LED_IND_GUI, 15, 0, 15); + rgbsps_set(LED_IND_FUN, 15, 0, 0); + rgbsps_set(LED_IND_NUM, 0, 0, 15); + rgbsps_set(LED_IND_PUNC, 0, 15, 0); + rgbsps_set(LED_IND_GREEK, 0, 15, 15); + rgbsps_set(LED_IND_EMOJI, 15, 15, 0); + rgbsps_send(); +} +#endif + void led_reset(void) { switch (glow_mode) { case GLOW_NONE: @@ -634,11 +656,14 @@ void led_init(void) { led_set_default_layer_indicator(); // clicky +#ifdef FAUXCLICKY_ENABLE if (fauxclicky_enabled) { rgbsps_set(LED_IND_AUDIO, 5, 11, 13); } else { rgbsps_set(LED_IND_AUDIO, 0, 0, 0); } +#endif + rgbsps_send(); } @@ -919,7 +944,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_SYS] = KEYMAP( - DEBUG, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + DEBUG, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, RGBDEMO, XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BT, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, @@ -1228,6 +1253,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; break; #endif + +#ifdef RGBSPS_DEMO_ENABLE + case RGBDEMO: + led_demo(); + return false; + break; +#endif } return true; } diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c index 544e94be59..3cc0f5a8c8 100644 --- a/keyboards/handwired/promethium/promethium.c +++ b/keyboards/handwired/promethium/promethium.c @@ -4,8 +4,8 @@ #include "matrix.h" #include "musical_notes.h" -float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_C5, 0.25); -float fauxclicky_released_note[2] = MUSICAL_NOTE(_C4, 0.25); +float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_A4, 0.0625); +float fauxclicky_released_note[2] = MUSICAL_NOTE(_A4, 0.0625); float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C6, 0.25); // cubic fit {3.3, 0}, {3.5, 2.9}, {3.6, 5}, {3.7, 8.6}, {3.8, 36}, {3.9, 62}, {4.0, 73}, {4.05, 83}, {4.1, 89}, {4.15, 94}, {4.2, 100} From 18b4d24cc304bdc8882deee99b4ff765a718a5c3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 29 Apr 2017 23:45:27 +0300 Subject: [PATCH 25/86] Add possibility to override the command to execute when flashing --- tmk_core/avr.mk | 42 +++++++++++++++++++++++------------------- tmk_core/chibios.mk | 4 +++- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk index 5df539def5..ccecdb1929 100644 --- a/tmk_core/avr.mk +++ b/tmk_core/avr.mk @@ -89,9 +89,9 @@ DEBUG_HOST = localhost #============================================================================ # Autodecct teensy loader ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) - TEENSY_LOADER_CLI = teensy-loader-cli + TEENSY_LOADER_CLI ?= teensy-loader-cli else - TEENSY_LOADER_CLI = teensy_loader_cli + TEENSY_LOADER_CLI ?= teensy_loader_cli endif # Program the device. @@ -100,43 +100,47 @@ program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep teensy: $(BUILD_DIR)/$(TARGET).hex $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex + +BATCHISP ?= batchisp flip: $(BUILD_DIR)/$(TARGET).hex - batchisp -hardware usb -device $(MCU) -operation erase f - batchisp -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 + $(BATCHISP) -hardware usb -device $(MCU) -operation erase f + $(BATCHISP) -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program + $(BATCHISP) -hardware usb -device $(MCU) -operation start reset 0 + +DFU_PROGRAMMER ?= dfu-programmer dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter - until dfu-programmer $(MCU) get bootloader-version; do\ + until $(DFU_PROGRAMMER) $(MCU) get bootloader-version; do\ echo "Error: Bootloader not found. Trying again in 5s." ;\ sleep 5 ;\ done -ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) erase --force +ifneq (, $(findstring 0.7, $(shell $(DFU_PROGRAMMER) --version 2>&1))) + $(DFU_PROGRAMMER) $(MCU) erase --force else - dfu-programmer $(MCU) erase + $(DFU_PROGRAMMER) $(MCU) erase endif - dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex - dfu-programmer $(MCU) reset + $(DFU_PROGRAMMER) $(MCU) flash $(BUILD_DIR)/$(TARGET).hex + $(DFU_PROGRAMMER) $(MCU) reset dfu-start: - dfu-programmer $(MCU) reset - dfu-programmer $(MCU) start + $(DFU_PROGRAMMER) $(MCU) reset + $(DFU_PROGRAMMER) $(MCU) start flip-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep $(COPY) $(BUILD_DIR)/$(TARGET).eep $(BUILD_DIR)/$(TARGET)eep.hex - batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase - batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 + $(BATCHISP) -hardware usb -device $(MCU) -operation memory EEPROM erase + $(BATCHISP) -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program + $(BATCHISP) -hardware usb -device $(MCU) -operation start reset 0 $(REMOVE) $(BUILD_DIR)/$(TARGET)eep.hex dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep + $(DFU_PROGRAMMER) $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep else - dfu-programmer $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep + $(DFU_PROGRAMMER) $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep endif - dfu-programmer $(MCU) reset + $(DFU_PROGRAMMER) $(MCU) reset # Convert hex to bin. flashbin: $(BUILD_DIR)/$(TARGET).hex diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index eb0c40138a..2a8d32fb99 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk @@ -151,5 +151,7 @@ endif # List any extra directories to look for libraries here. EXTRALIBDIRS = $(RULESPATH)/ld +DFU_UTIL ?= dfu-util + dfu-util: $(BUILD_DIR)/$(TARGET).bin sizeafter - dfu-util $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin + $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin From 9122b34a476908db49ddb5fcec0b0b05c67c75c2 Mon Sep 17 00:00:00 2001 From: Ryan MacLean Date: Sat, 29 Apr 2017 16:16:21 -0700 Subject: [PATCH 26/86] Adding Maximized Layout Both split shifts and HHKB split backspace. --- keyboards/amj60/amj60.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/keyboards/amj60/amj60.h b/keyboards/amj60/amj60.h index a0cb473310..c508e479ca 100644 --- a/keyboards/amj60/amj60.h +++ b/keyboards/amj60/amj60.h @@ -147,6 +147,21 @@ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ } +#define KEYMAP_MAX( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ +) \ +{ \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ + {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ +} + void matrix_init_user(void); void matrix_scan_user(void); From ff512ea5b4934638d28244c8667e840549784f2b Mon Sep 17 00:00:00 2001 From: Ryan MacLean Date: Sat, 29 Apr 2017 16:18:26 -0700 Subject: [PATCH 27/86] Addind Sample Maxed Out Keymap Keeping hold space for fn1, adding three other user-mappable keys. --- keyboards/amj60/keymaps/maximized/keymap.c | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 keyboards/amj60/keymaps/maximized/keymap.c diff --git a/keyboards/amj60/keymaps/maximized/keymap.c b/keyboards/amj60/keymaps/maximized/keymap.c new file mode 100644 index 0000000000..d2a4be59f3 --- /dev/null +++ b/keyboards/amj60/keymaps/maximized/keymap.c @@ -0,0 +1,61 @@ +// 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 "amj60.h" + +// 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 _DEF 0 +#define _SPC 1 + +// dual-role shortcuts +#define SPACEDUAL LT(_SPC, KC_SPACE) + + +// increase readability +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _DEF: Default Layer + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ | ~ | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| bspc| + * |-----------------------------------------------------------| + * |Caps | A| S| D| F| G| H| J| K| L| ;| '| Return | + * |-----------------------------------------------------------| + * |Sft | Fn0| Z| X| C| V| B| N| M| ,| .| /| Sft |Fn2| + * |-----------------------------------------------------------| + * |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| + * `-----------------------------------------------------------' + */ + [_DEF] = KEYMAP_MAX( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, F(0), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, F(1), \ + KC_LCTL, KC_LALT, KC_LGUI, SPACEDUAL, KC_RGUI, KC_RALT, KC_RCTL, F(2)), + + /* Keymap 1: F-and-vim Layer, modified with Space (by holding space) + * ,-----------------------------------------------------------. + * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| | | + * |-----------------------------------------------------------| + * | |Paus| Up| [ | ] | | | | ( | ) | | | | Del | + * |-----------------------------------------------------------| + * | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY | + * |-----------------------------------------------------------| + * | | | | | < | > | |M0 | | | | | Vol+ | | + * |-----------------------------------------------------------| + * | | | | |Alt |Prev|Vol-|Next| + * `-----------------------------------------------------------' + */ + [_SPC] = KEYMAP_MAX( + KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, \ + _______, KC_PAUS, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, KC_MPLY, \ + _______, _______, _______, _______, _______, _______, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \ + _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), + +}; From 4ff40a551a310e9b29a5838f87a9db58c0e5767e Mon Sep 17 00:00:00 2001 From: Weiyi Lou Date: Sat, 29 Apr 2017 22:02:01 +1000 Subject: [PATCH 28/86] Add `DYN_REC_STOP` to dynamic macros Dynamic macro functionality is modified to check for `DYN_REC_STOP`, so that macro recording can be stopped with a designated key combination (e.g. `qs` or anything) instead of mandating the use of a `_DYN` layer. `_DYN` layer stopping can still be done by passing `DYN_REC_STOP` within `process_record_user()`: bool process_record_user(uint16_t keycode, keyrecord_t *record) { uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode); if (!process_record_dynamic_macro(macro_kc, record)) { return false; } return true; } --- quantum/dynamic_macro.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 64093f293e..939816a597 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -40,6 +40,7 @@ enum dynamic_macro_keycodes { DYN_REC_START1 = DYNAMIC_MACRO_RANGE, DYN_REC_START2, + DYN_REC_STOP, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, }; @@ -209,9 +210,8 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) } else { /* A macro is being recorded right now. */ switch (keycode) { - case MO(_DYN): - /* Use the layer key used to access the macro recording as - * a stop button. */ + case DYN_REC_STOP: + /* Stop the macro recording. */ if (record->event.pressed) { /* Ignore the initial release * just after the recoding * starts. */ From 1201d4910fd7346ac27937e46071e09ec352f87f Mon Sep 17 00:00:00 2001 From: Weiyi Lou Date: Sat, 29 Apr 2017 22:05:31 +1000 Subject: [PATCH 29/86] Add cinaeco hhkb keymap --- keyboards/hhkb/keymaps/cinaeco/Makefile | 23 +++ keyboards/hhkb/keymaps/cinaeco/README.md | 23 +++ keyboards/hhkb/keymaps/cinaeco/config.h | 20 +++ keyboards/hhkb/keymaps/cinaeco/keymap.c | 186 +++++++++++++++++++++++ 4 files changed, 252 insertions(+) create mode 100644 keyboards/hhkb/keymaps/cinaeco/Makefile create mode 100644 keyboards/hhkb/keymaps/cinaeco/README.md create mode 100644 keyboards/hhkb/keymaps/cinaeco/config.h create mode 100644 keyboards/hhkb/keymaps/cinaeco/keymap.c diff --git a/keyboards/hhkb/keymaps/cinaeco/Makefile b/keyboards/hhkb/keymaps/cinaeco/Makefile new file mode 100644 index 0000000000..05b724051e --- /dev/null +++ b/keyboards/hhkb/keymaps/cinaeco/Makefile @@ -0,0 +1,23 @@ +# cinaeco's HHKB firmware + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/hhkb/keymaps/cinaeco/README.md b/keyboards/hhkb/keymaps/cinaeco/README.md new file mode 100644 index 0000000000..c1c48e6093 --- /dev/null +++ b/keyboards/hhkb/keymaps/cinaeco/README.md @@ -0,0 +1,23 @@ +# QMK Keyboard Firmware for HHKB + +## Modifications + +### HHKB Fn Layer + +Added some Media keys. + +### Utility Layer (SpaceFN) + +Hold `Space` for: + +- Vi-style direction keys. +- WASD-style mouse keys. +- Dynamic macro playback on `1` and `2`. +- Qwerty/Colemak/Dvorak layout selection on `-`, `=` and `\ ` + +### Dynamic Macros + +Hold `q` and press: + +- `1` or `2` to record macro 1 or 2. +- `s` to stop recording. diff --git a/keyboards/hhkb/keymaps/cinaeco/config.h b/keyboards/hhkb/keymaps/cinaeco/config.h new file mode 100644 index 0000000000..c7b4c784c0 --- /dev/null +++ b/keyboards/hhkb/keymaps/cinaeco/config.h @@ -0,0 +1,20 @@ +#ifndef CONFIG_CINAECO_H +#define CONFIG_CINAECO_H + +#include "../../config.h" + +#undef MANUFACTURER +#undef PRODUCT +#undef DESCRIPTION +#define MANUFACTURER QMK +#define PRODUCT HHKB QMK cinaeco +#define DESCRIPTION HHKB on QMK Firmware with cinaeco keymap + +// Increase "Tap" detection window. Avoid missing 'q' or 'z' when typing slowly. +#undef TAPPING_TERM +#define TAPPING_TERM 230 + +// Uncomment to enable NKRO by default. May cause issues with KVM switches. +//#define FORCE_NKRO + +#endif diff --git a/keyboards/hhkb/keymaps/cinaeco/keymap.c b/keyboards/hhkb/keymaps/cinaeco/keymap.c new file mode 100644 index 0000000000..0b204600d1 --- /dev/null +++ b/keyboards/hhkb/keymaps/cinaeco/keymap.c @@ -0,0 +1,186 @@ +/* -*- eval: (turn-on-orgtbl); -*- + * cinaeco's HHKB Layout + */ +#include "hhkb.h" + +// Layers. +#define QWER 0 +#define COLE 1 +#define DVOR 2 +#define HHKB 3 +#define UTIL 4 +#define MREC 5 + +// Easier-to-read Layer Arrays. +#define ____ KC_TRNS + +enum hhkb_keycodes { + DYNAMIC_MACRO_RANGE = SAFE_RANGE, +}; + +#include "dynamic_macro.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + + /* QWER Layer: Qwerty Default + * + * ,--------------------------------------------------------------. + * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| + * |--------------------------------------------------------------| + * |Tab |Q/MREC| W| E| R| T| Y| U| I| O| P| [| ]|Backs| + * |--------------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ent/Ctrl| + * |--------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0| + * `--------------------------------------------------------------' + * |Alt|Gui | Space/UTIL |Gui |Alt| + * `-------------------------------------------' + * + */ + + [QWER] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, LT(MREC, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, CTL_T(KC_ENT), \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \ + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), + + + /* COLE Layer: Colemak + * + * ,--------------------------------------------------------------. + * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| + * |--------------------------------------------------------------| + * |Tab |Q/MREC| W| F| P| G| J| L| U| Y| ;| [| ]|Backs| + * |--------------------------------------------------------------| + * |Ctrl | A| R| S| T| D| H| N| E| I| O| '|Ent/Ctrl| + * |--------------------------------------------------------------| + * |Shift | Z| X| C| V| K| B| M| ,| .| /|Shift |Fn0| + * `--------------------------------------------------------------' + * |Alt|Gui | Space/UTIL |Gui |Alt| + * `-------------------------------------------' + * + */ + + [COLE] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, LT(MREC, KC_Q), KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC, \ + KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, CTL_T(KC_ENT), \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_K, KC_B, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \ + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), + + + /* DVOR Layer: Dvorak + * + * ,--------------------------------------------------------------. + * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| `| + * |--------------------------------------------------------------| + * |Tab |'/MREC| ,| .| P| Y| F| G| C| R| L| /| =|Backs| + * |--------------------------------------------------------------| + * |Ctrl | A| O| E| U| I| D| H| T| N| S| -|Ent/Ctrl| + * |--------------------------------------------------------------| + * |Shift | ;| Q| J| K| X| B| M| W| V| Z|Shift |Fn0| + * `--------------------------------------------------------------' + * |Alt|Gui | Space/UTIL |Gui |Alt| + * `-------------------------------------------' + * + */ + + [DVOR] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, \ + KC_TAB, LT(MREC, KC_QUOT), KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC, \ + KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, CTL_T(KC_ENT), \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(HHKB), \ + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), + + + /* HHKB Layer: HHKB mode (HHKB Fn) + * + * ,-----------------------------------------------------------. + * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| + * |-----------------------------------------------------------| + * |Caps |PLA|PRV|NXT| | | | |Psc|Slk|Pus|Up | |Backs| + * |-----------------------------------------------------------| + * | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter | + * |-----------------------------------------------------------| + * | | | | | | | +| -|End|PgD|Dow| | | + * `-----------------------------------------------------------' + * | | | |STOP | | + * `-------------------------------------------' + */ + + [HHKB] = KEYMAP( + KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ + KC_CAPS, KC_MPLY, KC_MPRV, KC_MNXT, ____, ____, ____, ____, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ____, KC_BSPC, \ + ____, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, ____, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + ____, ____, ____, ____, ____, ____, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ____, ____, \ + ____, ____, ____, KC_MSTP, ____), + + + /* UTIL Layer: Extra utilities + * + * ,-------------------------------------------------------------. + * |DFU|PLY1|PLY2| | | | | | | | |QWE|COL|DVO|DBG| + * |-------------------------------------------------------------| + * | |MLB |M-Up|MRB|MwU| |Hom|PgD|PgU|End| | | | | + * |-------------------------------------------------------------| + * | |M-Lt|M-Dn|M-R|MwD| |LEF|DOW|UP |RIG| | | | + * |-------------------------------------------------------------| + * | | | | | |SPC| | | | | | | | + * `-------------------------------------------------------------' + * | | | | | | + * `-------------------------------------------' + * + */ + + [UTIL] = KEYMAP( + RESET, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, ____, ____, ____, ____, ____, ____, ____, ____, DF(QWER), DF(COLE), DF(DVOR), DEBUG, \ + ____, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, ____, KC_HOME, KC_PGDN, KC_PGUP, KC_END, ____, ____, ____, ____, \ + ____, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, ____, ____, ____, \ + ____, ____, ____, ____, ____, KC_SPC, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, ____, ____, ____), + + + /* MREC Layer: Record macros with `q` + * + * ,-------------------------------------------------------------. + * | |REC1|REC2| | | | | | | | | | | | | + * |-------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |-------------------------------------------------------------| + * | | |RSTP| | | | | | | | | | | + * |-------------------------------------------------------------| + * | | | | | | | | | | | | | | + * `-------------------------------------------------------------' + * | | | | | | + * `-------------------------------------------' + * + */ + + [MREC] = KEYMAP( + ____, DYN_REC_START1, DYN_REC_START2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, DYN_REC_STOP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, ____, ____, ____) + +}; + + + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE; +}; + +// For Dynamic Macros. +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_dynamic_macro(keycode, record)) { + return false; + } + return true; +} From c8ac556e63c62078fe1edfc1a116c36ad34da8e3 Mon Sep 17 00:00:00 2001 From: Weiyi Lou Date: Sun, 30 Apr 2017 18:36:43 +1000 Subject: [PATCH 30/86] Update vifon keymap to use `DYN_REC_STOP` --- keyboards/planck/keymaps/vifon/keymap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/vifon/keymap.c b/keyboards/planck/keymaps/vifon/keymap.c index ee0c0ac366..ecd5c2cc44 100644 --- a/keyboards/planck/keymaps/vifon/keymap.c +++ b/keyboards/planck/keymaps/vifon/keymap.c @@ -107,7 +107,8 @@ const uint16_t PROGMEM fn_actions[] = { bool process_record_user(uint16_t keycode, keyrecord_t *record) { static uint16_t key_timer; - if (!process_record_dynamic_macro(keycode, record)) { + uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode); + if (!process_record_dynamic_macro(macro_kc, record)) { return false; } From 2f28652dcc22c74db4f3c60537fa07f6774451f9 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 30 Apr 2017 18:03:03 +0700 Subject: [PATCH 31/86] Syntax fix --- keyboards/handwired/promethium/matrix.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/handwired/promethium/matrix.c b/keyboards/handwired/promethium/matrix.c index 2b7ce2bf5e..72dbe8d4d0 100644 --- a/keyboards/handwired/promethium/matrix.c +++ b/keyboards/handwired/promethium/matrix.c @@ -133,8 +133,8 @@ void matrix_init(void) { matrix_init_quantum(); } -uint8_t matrix_scan(void -){ +uint8_t matrix_scan(void) +{ // Set row, read cols for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { # if (DEBOUNCING_DELAY > 0) From 343f8d368e7ce51a3b34705147b890445a12e3ea Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 30 Apr 2017 18:04:58 +0700 Subject: [PATCH 32/86] Simple RGB backlight theming --- keyboards/handwired/promethium/color.h | 15 ++ .../promethium/keymaps/priyadi/keymap.c | 145 +++++++++--------- .../promethium/keymaps/priyadi/rgbtheme.h | 1 + .../keymaps/priyadi/rgbtheme_carbon.h | 36 +++++ .../keymaps/priyadi/rgbtheme_default.h | 36 +++++ 5 files changed, 161 insertions(+), 72 deletions(-) create mode 100644 keyboards/handwired/promethium/color.h create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/rgbtheme.h create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/rgbtheme_carbon.h create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/rgbtheme_default.h diff --git a/keyboards/handwired/promethium/color.h b/keyboards/handwired/promethium/color.h new file mode 100644 index 0000000000..077242d5f1 --- /dev/null +++ b/keyboards/handwired/promethium/color.h @@ -0,0 +1,15 @@ +#define COLOR_BLANK 0, 0, 0 + +#define COLOR_BLACK 0, 0, 0 +#define COLOR_WHITE 15,15,15 +#define COLOR_GRAY 7, 7, 7 + +#define COLOR_RED 15, 0, 0 +#define COLOR_GREEN 0,15, 0 +#define COLOR_BLUE 0, 0,15 + +#define COLOR_YELLOW 15,15, 0 +#define COLOR_MAGENTA 15, 0,15 +#define COLOR_CYAN 0,15,15 + +#define COLOR_ORANGE 15, 5, 0 \ No newline at end of file diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index 4cc3d6d60a..d562c7bbf8 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -31,6 +31,7 @@ along with this program. If not, see . #include "quantum.h" #ifdef RGBSPS_ENABLE #include "rgbsps.h" +#include "rgbtheme.h" #endif #ifdef PS2_MOUSE_ENABLE #include "ps2_mouse.h" @@ -42,13 +43,13 @@ along with this program. If not, see . #undef FAUXCLICKY_OFF #define FAUXCLICKY_OFF do { \ fauxclicky_enabled = false; \ - rgbsps_set(LED_AUDIO, 0, 0, 0); \ + rgbsps_set(LED_AUDIO, COLOR_BLANK); \ fauxclicky_stop(); \ } while (0) #undef FAUXCLICKY_ON #define FAUXCLICKY_ON do { \ fauxclicky_enabled = true; \ - rgbsps_set(LED_AUDIO, 8, 0, 8); \ + rgbsps_set(LED_AUDIO, THEME_COLOR_AUDIO); \ } while (0) #endif #endif @@ -469,33 +470,33 @@ const uint8_t PROGMEM LED_TRACKPOINT[] = { void led_turnoff_keys(void) { for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { - rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0); + rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), COLOR_BLACK); } for(uint8_t i = 0; i < COUNT(LED_MODS); i++) { - rgbsps_set(pgm_read_byte(&LED_MODS[i]), 0, 0, 0); + rgbsps_set(pgm_read_byte(&LED_MODS[i]), COLOR_BLACK); } for(uint8_t i = 0; i < COUNT(LED_FN); i++) { - rgbsps_set(pgm_read_byte(&LED_FN[i]), 0, 0, 0); + rgbsps_set(pgm_read_byte(&LED_FN[i]), COLOR_BLACK); } } #ifdef RGBSPS_DEMO_ENABLE void led_demo(void) { - rgbsps_set(LED_IND_LINUX, 15, 15, 15); - rgbsps_set(LED_IND_APPLE, 15, 15, 15); - rgbsps_set(LED_IND_WINDOWS, 15, 15, 15); - rgbsps_set(LED_IND_QWERTY, 15, 10, 0); - rgbsps_set(LED_IND_ALT, 15, 10, 0); - rgbsps_set(LED_IND_AUDIO, 5, 11, 13); - rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15); - rgbsps_set(LED_IND_USB, 15, 15, 15); - rgbsps_set(LED_IND_CAPSLOCK, 15, 0, 0); - rgbsps_set(LED_IND_GUI, 15, 0, 15); - rgbsps_set(LED_IND_FUN, 15, 0, 0); - rgbsps_set(LED_IND_NUM, 0, 0, 15); - rgbsps_set(LED_IND_PUNC, 0, 15, 0); - rgbsps_set(LED_IND_GREEK, 0, 15, 15); - rgbsps_set(LED_IND_EMOJI, 15, 15, 0); + rgbsps_set(LED_IND_LINUX, THEME_COLOR_LINUX); + rgbsps_set(LED_IND_APPLE, THEME_COLOR_APPLE); + rgbsps_set(LED_IND_WINDOWS, THEME_COLOR_WINDOWS); + rgbsps_set(LED_IND_QWERTY, THEME_COLOR_QWERTY); + rgbsps_set(LED_IND_ALT, THEME_COLOR_ALT); + rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO); + rgbsps_set(LED_IND_BLUETOOTH, THEME_COLOR_BLUETOOTH); + rgbsps_set(LED_IND_USB, THEME_COLOR_USB); + rgbsps_set(LED_IND_CAPSLOCK, THEME_COLOR_CAPSLOCK); + rgbsps_set(LED_IND_GUI, THEME_COLOR_GUI); + rgbsps_set(LED_IND_FUN, THEME_COLOR_FUN); + rgbsps_set(LED_IND_NUM, THEME_COLOR_NUM); + rgbsps_set(LED_IND_PUNC, THEME_COLOR_PUNC); + rgbsps_set(LED_IND_GREEK, THEME_COLOR_GREEK); + rgbsps_set(LED_IND_EMOJI, THEME_COLOR_EMOJI); rgbsps_send(); } #endif @@ -508,26 +509,26 @@ void led_reset(void) { case GLOW_MIN: led_turnoff_keys(); for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) { - rgbsps_set(pgm_read_byte(&LED_HOMING[i]), 8, 8, 8); + rgbsps_set(pgm_read_byte(&LED_HOMING[i]), THEME_COLOR_GLOW1_HOME); } - rgbsps_set(LED_F, 15, 0, 0); - rgbsps_set(LED_J, 15, 0, 0); + rgbsps_set(LED_F, THEME_COLOR_GLOW1_HOMING); + rgbsps_set(LED_J, THEME_COLOR_GLOW1_HOMING); break; case GLOW_FULL: for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { - rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 8, 8, 8); + rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), THEME_COLOR_GLOW2_ALPHA); } for(uint8_t i = 0; i < COUNT(LED_MODS); i++) { - rgbsps_set(pgm_read_byte(&LED_MODS[i]), 0, 15, 0); + rgbsps_set(pgm_read_byte(&LED_MODS[i]), THEME_COLOR_GLOW2_MODS); } for(uint8_t i = 0; i < COUNT(LED_FN); i++) { - rgbsps_set(pgm_read_byte(&LED_FN[i]), 0, 0, 15); + rgbsps_set(pgm_read_byte(&LED_FN[i]), THEME_COLOR_GLOW2_FN); } for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) { - rgbsps_set(pgm_read_byte(&LED_HOMING[i]), 15, 0, 0); + rgbsps_set(pgm_read_byte(&LED_HOMING[i]), THEME_COLOR_GLOW2_HOME); } - rgbsps_set(LED_F, 15, 15, 0); - rgbsps_set(LED_J, 15, 15, 0); + rgbsps_set(LED_F, THEME_COLOR_GLOW2_HOMING); + rgbsps_set(LED_J, THEME_COLOR_GLOW2_HOMING); break; } } @@ -535,11 +536,11 @@ void led_reset(void) { void led_set_default_layer_indicator(void) { uint8_t default_layer = biton32(default_layer_state); if (default_layer == _QWERTY) { - rgbsps_set(LED_IND_QWERTY, 15, 10, 0); - rgbsps_set(LED_IND_ALT, 0, 0, 0); + rgbsps_set(LED_IND_QWERTY, THEME_COLOR_QWERTY); + rgbsps_set(LED_IND_ALT, COLOR_BLANK); } else { - rgbsps_set(LED_IND_QWERTY, 0, 0, 0); - rgbsps_set(LED_IND_ALT, 15, 10, 0); + rgbsps_set(LED_IND_QWERTY, COLOR_BLANK); + rgbsps_set(LED_IND_ALT, THEME_COLOR_ALT); } rgbsps_send(); return; @@ -550,12 +551,12 @@ void led_set_layer_indicator(void) { led_reset(); - rgbsps_set(LED_IND_GUI, 0, 0, 0); - rgbsps_set(LED_IND_FUN, 0, 0, 0); - rgbsps_set(LED_IND_NUM, 0, 0, 0); - rgbsps_set(LED_IND_PUNC, 0, 0, 0); - rgbsps_set(LED_IND_GREEK, 0, 0, 0); - rgbsps_set(LED_IND_EMOJI, 0, 0, 0); + rgbsps_set(LED_IND_GUI, COLOR_BLANK); + rgbsps_set(LED_IND_FUN, COLOR_BLANK); + rgbsps_set(LED_IND_NUM, COLOR_BLANK); + rgbsps_set(LED_IND_PUNC, COLOR_BLANK); + rgbsps_set(LED_IND_GREEK, COLOR_BLANK); + rgbsps_set(LED_IND_EMOJI, COLOR_BLANK); uint8_t layer = biton32(layer_state); if (oldlayer == layer) { @@ -571,71 +572,71 @@ void led_set_layer_indicator(void) { switch(layer) { case _GUI: - rgbsps_set(LED_IND_GUI, 15, 0, 15); + rgbsps_set(LED_IND_GUI, THEME_COLOR_GUI); break; case _FUN: - rgbsps_set(LED_IND_FUN, 15, 0, 0); + rgbsps_set(LED_IND_FUN, THEME_COLOR_FUN); break; case _NUM: - rgbsps_set(LED_IND_NUM, 0, 0, 15); + rgbsps_set(LED_IND_NUM, THEME_COLOR_NUM); break; case _PUNC: - rgbsps_set(LED_IND_PUNC, 0, 15, 0); + rgbsps_set(LED_IND_PUNC, THEME_COLOR_PUNC); break; case _GREEKL: case _GREEKU: - rgbsps_set(LED_IND_GREEK, 0, 15, 15); + rgbsps_set(LED_IND_GREEK, THEME_COLOR_GREEK); break; case _EMOJI: - rgbsps_set(LED_IND_EMOJI, 15, 15, 0); + rgbsps_set(LED_IND_EMOJI, THEME_COLOR_EMOJI); break; default: - rgbsps_set(LED_IND_GUI, 3, 3, 3); - rgbsps_set(LED_IND_FUN, 3, 3, 3); - rgbsps_set(LED_IND_NUM, 3, 3, 3); - rgbsps_set(LED_IND_PUNC, 3, 3, 3); - rgbsps_set(LED_IND_GREEK, 3, 3, 3); - rgbsps_set(LED_IND_EMOJI, 3, 3, 3); + rgbsps_set(LED_IND_GUI, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_FUN, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_NUM, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_PUNC, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_GREEK, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_EMOJI, THEME_COLOR_OTHERLAYER); } rgbsps_send(); } void led_set_unicode_input_mode(void) { - rgbsps_set(LED_IND_LINUX, 0, 0, 0); - rgbsps_set(LED_IND_APPLE, 0, 0, 0); - rgbsps_set(LED_IND_WINDOWS, 0, 0, 0); + rgbsps_set(LED_IND_LINUX, COLOR_BLANK); + rgbsps_set(LED_IND_APPLE, COLOR_BLANK); + rgbsps_set(LED_IND_WINDOWS, COLOR_BLANK); switch (get_unicode_input_mode()) { case UC_LNX: - rgbsps_set(LED_IND_LINUX, 15, 15, 15); + rgbsps_set(LED_IND_LINUX, THEME_COLOR_LINUX); break; case UC_OSX: - rgbsps_set(LED_IND_APPLE, 15, 15, 15); + rgbsps_set(LED_IND_APPLE, THEME_COLOR_APPLE); break; case UC_WIN: case UC_WINC: - rgbsps_set(LED_IND_WINDOWS, 15, 15, 15); + rgbsps_set(LED_IND_WINDOWS, THEME_COLOR_WINDOWS); break; } rgbsps_send(); } void led_set_output_ble(void) { - rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15); - rgbsps_set(LED_IND_USB, 0, 0, 0); + rgbsps_set(LED_IND_BLUETOOTH, THEME_COLOR_BLUETOOTH); + rgbsps_set(LED_IND_USB, COLOR_BLANK); rgbsps_send(); } void led_set_output_usb(void) { - rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 0); - rgbsps_set(LED_IND_USB, 15, 15, 15); + rgbsps_set(LED_IND_BLUETOOTH, COLOR_BLANK); + rgbsps_set(LED_IND_USB, THEME_COLOR_USB); rgbsps_send(); } void led_set_output_none(void) { - rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 0); - rgbsps_set(LED_IND_USB, 0, 0, 0); + rgbsps_set(LED_IND_BLUETOOTH, COLOR_BLANK); + rgbsps_set(LED_IND_USB, COLOR_BLANK); rgbsps_send(); } @@ -644,9 +645,9 @@ void led_init(void) { rgbsps_turnoff(); // set trackpoint color - rgbsps_set(LED_TRACKPOINT1, 15, 0, 0); - rgbsps_set(LED_TRACKPOINT2, 0, 0, 15); - rgbsps_set(LED_TRACKPOINT3, 15, 0, 0); + rgbsps_set(LED_TRACKPOINT1, THEME_COLOR_TP1); + rgbsps_set(LED_TRACKPOINT2, THEME_COLOR_TP2); + rgbsps_set(LED_TRACKPOINT3, THEME_COLOR_TP3); // unicode input mode led_set_unicode_input_mode(); @@ -658,9 +659,9 @@ void led_init(void) { // clicky #ifdef FAUXCLICKY_ENABLE if (fauxclicky_enabled) { - rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO); } else { - rgbsps_set(LED_IND_AUDIO, 0, 0, 0); + rgbsps_set(LED_IND_AUDIO, COLOR_BLANK); } #endif @@ -1244,9 +1245,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case FC_TOG: #ifdef RGBSPS_ENABLE if (fauxclicky_enabled) { - rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO); } else { - rgbsps_set(LED_IND_AUDIO, 0, 0, 0); + rgbsps_set(LED_IND_AUDIO, COLOR_BLANK); } rgbsps_send(); #endif @@ -1320,9 +1321,9 @@ void turn_off_capslock() { bool new_capslock = usb_led & (1< Date: Sun, 30 Apr 2017 10:48:17 -0400 Subject: [PATCH 33/86] fixes s60_x keyboard --- keyboards/s60-x/s60-x.c | 1 - keyboards/s60-x/s60-x_precompiled.zip | Bin 276106 -> 0 bytes keyboards/{s60-x => s60_x}/Makefile | 0 keyboards/{s60-x => s60_x}/config.h | 13 +++++++++ keyboards/{s60-x => s60_x}/default/Makefile | 0 keyboards/{s60-x => s60_x}/default/config.h | 0 keyboards/{s60-x => s60_x}/default/default.c | 0 keyboards/{s60-x => s60_x}/default/default.h | 0 keyboards/{s60-x => s60_x}/default/rules.mk | 0 .../keymaps/ansi_qwertz/Makefile | 0 .../keymaps/ansi_qwertz/config.h | 0 .../docs/KB_US-International-Alternative.png | Bin .../docs/KB_US-International-Alternative.svg | 0 ...-Alternative.svg.2016_08_18_09_06_36.0.svg | 0 .../ansi_qwertz/docs/KB_US-International.png | Bin .../ansi_qwertz/docs/KB_US-International.svg | 0 .../keymaps/ansi_qwertz/docs/base_layer.PNG | Bin .../ansi_qwertz/docs/function_layer.PNG | Bin .../keymaps/ansi_qwertz/docs/gaming_layer.PNG | Bin .../keymaps/ansi_qwertz/keymap.c | 2 +- .../keymaps/ansi_qwertz/readme.md | 0 .../{s60-x => s60_x}/keymaps/custom/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/custom/readme.md | 0 .../{s60-x => s60_x}/keymaps/dbroqua/keymap.c | 25 +++++++++++++----- .../{s60-x => s60_x}/keymaps/default/keymap.c | 2 +- .../keymaps/default/readme.md | 0 .../{s60-x => s60_x}/keymaps/hasu/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/hasu/readme.md | 0 .../{s60-x => s60_x}/keymaps/hhkb/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/hhkb/readme.md | 0 .../{s60-x => s60_x}/keymaps/iso/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/iso/readme.md | 0 .../{s60-x => s60_x}/keymaps/jpec/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/jpec/readme.md | 0 .../{s60-x => s60_x}/keymaps/plain/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/plain/readme.md | 0 .../{s60-x => s60_x}/keymaps/poker/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/poker/readme.md | 0 .../keymaps/poker_bit/keymap.c | 2 +- .../keymaps/poker_bit/readme.md | 0 .../keymaps/poker_set/keymap.c | 2 +- .../keymaps/poker_set/readme.md | 0 .../{s60-x => s60_x}/keymaps/spacefn/keymap.c | 2 +- .../keymaps/spacefn/readme.md | 0 keyboards/{s60-x => s60_x}/readme.md | 5 ---- keyboards/{s60-x => s60_x}/rgb/Makefile | 0 keyboards/{s60-x => s60_x}/rgb/config.h | 6 ----- keyboards/{s60-x => s60_x}/rgb/rgb.c | 0 keyboards/{s60-x => s60_x}/rgb/rgb.h | 0 keyboards/{s60-x => s60_x}/rgb/rules.mk | 0 keyboards/{s60-x => s60_x}/rules.mk | 0 keyboards/s60_x/s60_x.c | 1 + keyboards/{s60-x/s60-x.h => s60_x/s60_x.h} | 0 53 files changed, 44 insertions(+), 31 deletions(-) delete mode 100644 keyboards/s60-x/s60-x.c delete mode 100644 keyboards/s60-x/s60-x_precompiled.zip rename keyboards/{s60-x => s60_x}/Makefile (100%) rename keyboards/{s60-x => s60_x}/config.h (85%) rename keyboards/{s60-x => s60_x}/default/Makefile (100%) rename keyboards/{s60-x => s60_x}/default/config.h (100%) rename keyboards/{s60-x => s60_x}/default/default.c (100%) rename keyboards/{s60-x => s60_x}/default/default.h (100%) rename keyboards/{s60-x => s60_x}/default/rules.mk (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/Makefile (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/config.h (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International.png (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International.svg (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/base_layer.PNG (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/function_layer.PNG (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/gaming_layer.PNG (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/custom/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/custom/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/dbroqua/keymap.c (95%) rename keyboards/{s60-x => s60_x}/keymaps/default/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/default/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/hasu/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/hasu/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/hhkb/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/hhkb/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/iso/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/iso/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/jpec/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/jpec/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/plain/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/plain/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/poker/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/poker/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/poker_bit/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/poker_bit/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/poker_set/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/poker_set/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/spacefn/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/spacefn/readme.md (100%) rename keyboards/{s60-x => s60_x}/readme.md (99%) rename keyboards/{s60-x => s60_x}/rgb/Makefile (100%) rename keyboards/{s60-x => s60_x}/rgb/config.h (86%) rename keyboards/{s60-x => s60_x}/rgb/rgb.c (100%) rename keyboards/{s60-x => s60_x}/rgb/rgb.h (100%) rename keyboards/{s60-x => s60_x}/rgb/rules.mk (100%) rename keyboards/{s60-x => s60_x}/rules.mk (100%) create mode 100644 keyboards/s60_x/s60_x.c rename keyboards/{s60-x/s60-x.h => s60_x/s60_x.h} (100%) diff --git a/keyboards/s60-x/s60-x.c b/keyboards/s60-x/s60-x.c deleted file mode 100644 index f031dd770d..0000000000 --- a/keyboards/s60-x/s60-x.c +++ /dev/null @@ -1 +0,0 @@ -#include "s60-x.h" \ No newline at end of file diff --git a/keyboards/s60-x/s60-x_precompiled.zip b/keyboards/s60-x/s60-x_precompiled.zip deleted file mode 100644 index 00d99ca8a15040294f7a6e2c3dbe997c2d947c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276106 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

2&q3Cif2b+0-Y3!UfDR?ww3EVo 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 z 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. #define MATRIX_ROWS 5 #define MATRIX_COLS 15 +/* number of backlight levels */ +#define BACKLIGHT_PIN B7 +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 3 +#endif + /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -43,4 +49,11 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +#ifdef SUBPROJECT_default + #include "default/config.h" +#endif +#ifdef SUBPROJECT_rgb + #include "rgb/config.h" +#endif + #endif diff --git a/keyboards/s60-x/default/Makefile b/keyboards/s60_x/default/Makefile similarity index 100% rename from keyboards/s60-x/default/Makefile rename to keyboards/s60_x/default/Makefile diff --git a/keyboards/s60-x/default/config.h b/keyboards/s60_x/default/config.h similarity index 100% rename from keyboards/s60-x/default/config.h rename to keyboards/s60_x/default/config.h diff --git a/keyboards/s60-x/default/default.c b/keyboards/s60_x/default/default.c similarity index 100% rename from keyboards/s60-x/default/default.c rename to keyboards/s60_x/default/default.c diff --git a/keyboards/s60-x/default/default.h b/keyboards/s60_x/default/default.h similarity index 100% rename from keyboards/s60-x/default/default.h rename to keyboards/s60_x/default/default.h diff --git a/keyboards/s60-x/default/rules.mk b/keyboards/s60_x/default/rules.mk similarity index 100% rename from keyboards/s60-x/default/rules.mk rename to keyboards/s60_x/default/rules.mk diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/Makefile b/keyboards/s60_x/keymaps/ansi_qwertz/Makefile similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/Makefile rename to keyboards/s60_x/keymaps/ansi_qwertz/Makefile diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/config.h b/keyboards/s60_x/keymaps/ansi_qwertz/config.h similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/config.h rename to keyboards/s60_x/keymaps/ansi_qwertz/config.h diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International.png similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International.png diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International.svg similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International.svg diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG b/keyboards/s60_x/keymaps/ansi_qwertz/docs/base_layer.PNG similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/base_layer.PNG diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG b/keyboards/s60_x/keymaps/ansi_qwertz/docs/function_layer.PNG similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/function_layer.PNG diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG b/keyboards/s60_x/keymaps/ansi_qwertz/docs/gaming_layer.PNG similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/gaming_layer.PNG diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c b/keyboards/s60_x/keymaps/ansi_qwertz/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/ansi_qwertz/keymap.c rename to keyboards/s60_x/keymaps/ansi_qwertz/keymap.c index 317a245bef..ebb3aece34 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c +++ b/keyboards/s60_x/keymaps/ansi_qwertz/keymap.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "s60-x.h" +#include "s60_x.h" //make keymap a little easier to read #define _______ KC_TRNS diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60_x/keymaps/ansi_qwertz/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/readme.md rename to keyboards/s60_x/keymaps/ansi_qwertz/readme.md diff --git a/keyboards/s60-x/keymaps/custom/keymap.c b/keyboards/s60_x/keymaps/custom/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/custom/keymap.c rename to keyboards/s60_x/keymaps/custom/keymap.c index fb2a40b85e..66eac33356 100644 --- a/keyboards/s60-x/keymaps/custom/keymap.c +++ b/keyboards/s60_x/keymaps/custom/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* Main layer: Test layout, using all keys. diff --git a/keyboards/s60-x/keymaps/custom/readme.md b/keyboards/s60_x/keymaps/custom/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/custom/readme.md rename to keyboards/s60_x/keymaps/custom/readme.md diff --git a/keyboards/s60-x/keymaps/dbroqua/keymap.c b/keyboards/s60_x/keymaps/dbroqua/keymap.c similarity index 95% rename from keyboards/s60-x/keymaps/dbroqua/keymap.c rename to keyboards/s60_x/keymaps/dbroqua/keymap.c index 0a714445ce..8d1887e75a 100644 --- a/keyboards/s60-x/keymaps/dbroqua/keymap.c +++ b/keyboards/s60_x/keymaps/dbroqua/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" #define _DEFAULT 0 #define _FN 1 @@ -73,12 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - keyevent_t event = record->event; - - switch (id) { - - } +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } @@ -108,42 +103,58 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { case RGBLED_TOGGLE: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_toggle(); + #endif } break; case RGBLED_INCREASE_HUE: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_increase_hue(); + #endif } break; case RGBLED_DECREASE_HUE: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_decrease_hue(); + #endif } break; case RGBLED_INCREASE_SAT: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_increase_sat(); + #endif } break; case RGBLED_DECREASE_SAT: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_decrease_sat(); + #endif } break; case RGBLED_INCREASE_VAL: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_increase_val(); + #endif } break; case RGBLED_DECREASE_VAL: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_decrease_val(); + #endif } break; case RGBLED_STEP_MODE: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_step(); + #endif } break; } diff --git a/keyboards/s60-x/keymaps/default/keymap.c b/keyboards/s60_x/keymaps/default/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/default/keymap.c rename to keyboards/s60_x/keymaps/default/keymap.c index eb0c6b056e..a616e79b34 100644 --- a/keyboards/s60-x/keymaps/default/keymap.c +++ b/keyboards/s60_x/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60-x/keymaps/default/readme.md b/keyboards/s60_x/keymaps/default/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/default/readme.md rename to keyboards/s60_x/keymaps/default/readme.md diff --git a/keyboards/s60-x/keymaps/hasu/keymap.c b/keyboards/s60_x/keymaps/hasu/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/hasu/keymap.c rename to keyboards/s60_x/keymaps/hasu/keymap.c index cbeaae0281..ac90dc6b20 100644 --- a/keyboards/s60-x/keymaps/hasu/keymap.c +++ b/keyboards/s60_x/keymaps/hasu/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* * Hasu diff --git a/keyboards/s60-x/keymaps/hasu/readme.md b/keyboards/s60_x/keymaps/hasu/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/hasu/readme.md rename to keyboards/s60_x/keymaps/hasu/readme.md diff --git a/keyboards/s60-x/keymaps/hhkb/keymap.c b/keyboards/s60_x/keymaps/hhkb/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/hhkb/keymap.c rename to keyboards/s60_x/keymaps/hhkb/keymap.c index 9afd1247f8..dc1bfffc47 100644 --- a/keyboards/s60-x/keymaps/hhkb/keymap.c +++ b/keyboards/s60_x/keymaps/hhkb/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* * HHKB Layout diff --git a/keyboards/s60-x/keymaps/hhkb/readme.md b/keyboards/s60_x/keymaps/hhkb/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/hhkb/readme.md rename to keyboards/s60_x/keymaps/hhkb/readme.md diff --git a/keyboards/s60-x/keymaps/iso/keymap.c b/keyboards/s60_x/keymaps/iso/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/iso/keymap.c rename to keyboards/s60_x/keymaps/iso/keymap.c index 43a9c48b05..f6fc741728 100644 --- a/keyboards/s60-x/keymaps/iso/keymap.c +++ b/keyboards/s60_x/keymaps/iso/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60-x/keymaps/iso/readme.md b/keyboards/s60_x/keymaps/iso/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/iso/readme.md rename to keyboards/s60_x/keymaps/iso/readme.md diff --git a/keyboards/s60-x/keymaps/jpec/keymap.c b/keyboards/s60_x/keymaps/jpec/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/jpec/keymap.c rename to keyboards/s60_x/keymaps/jpec/keymap.c index c8fc133288..21e77c10b2 100644 --- a/keyboards/s60-x/keymaps/jpec/keymap.c +++ b/keyboards/s60_x/keymaps/jpec/keymap.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "s60-x.h" +#include "s60_x.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layout 0: Default Layer diff --git a/keyboards/s60-x/keymaps/jpec/readme.md b/keyboards/s60_x/keymaps/jpec/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/jpec/readme.md rename to keyboards/s60_x/keymaps/jpec/readme.md diff --git a/keyboards/s60-x/keymaps/plain/keymap.c b/keyboards/s60_x/keymaps/plain/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/plain/keymap.c rename to keyboards/s60_x/keymaps/plain/keymap.c index 790ac88e73..d5075a07b9 100644 --- a/keyboards/s60-x/keymaps/plain/keymap.c +++ b/keyboards/s60_x/keymaps/plain/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* Main layer: ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60-x/keymaps/plain/readme.md b/keyboards/s60_x/keymaps/plain/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/plain/readme.md rename to keyboards/s60_x/keymaps/plain/readme.md diff --git a/keyboards/s60-x/keymaps/poker/keymap.c b/keyboards/s60_x/keymaps/poker/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/poker/keymap.c rename to keyboards/s60_x/keymaps/poker/keymap.c index 0a8691792a..5b917704e4 100644 --- a/keyboards/s60-x/keymaps/poker/keymap.c +++ b/keyboards/s60_x/keymaps/poker/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty diff --git a/keyboards/s60-x/keymaps/poker/readme.md b/keyboards/s60_x/keymaps/poker/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/poker/readme.md rename to keyboards/s60_x/keymaps/poker/readme.md diff --git a/keyboards/s60-x/keymaps/poker_bit/keymap.c b/keyboards/s60_x/keymaps/poker_bit/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/poker_bit/keymap.c rename to keyboards/s60_x/keymaps/poker_bit/keymap.c index 7626038f42..1f7b1b633d 100644 --- a/keyboards/s60-x/keymaps/poker_bit/keymap.c +++ b/keyboards/s60_x/keymaps/poker_bit/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" // Poker fix with toggle and bit operation // Fn + Esc = ` diff --git a/keyboards/s60-x/keymaps/poker_bit/readme.md b/keyboards/s60_x/keymaps/poker_bit/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/poker_bit/readme.md rename to keyboards/s60_x/keymaps/poker_bit/readme.md diff --git a/keyboards/s60-x/keymaps/poker_set/keymap.c b/keyboards/s60_x/keymaps/poker_set/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/poker_set/keymap.c rename to keyboards/s60_x/keymaps/poker_set/keymap.c index 09423e75b3..52eee53218 100644 --- a/keyboards/s60-x/keymaps/poker_set/keymap.c +++ b/keyboards/s60_x/keymaps/poker_set/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" // Poker fix with set(state transition) // Fn + Esc = ` diff --git a/keyboards/s60-x/keymaps/poker_set/readme.md b/keyboards/s60_x/keymaps/poker_set/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/poker_set/readme.md rename to keyboards/s60_x/keymaps/poker_set/readme.md diff --git a/keyboards/s60-x/keymaps/spacefn/keymap.c b/keyboards/s60_x/keymaps/spacefn/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/spacefn/keymap.c rename to keyboards/s60_x/keymaps/spacefn/keymap.c index b6dc7ca7eb..28369580ed 100644 --- a/keyboards/s60-x/keymaps/spacefn/keymap.c +++ b/keyboards/s60_x/keymaps/spacefn/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* * SpaceFN diff --git a/keyboards/s60-x/keymaps/spacefn/readme.md b/keyboards/s60_x/keymaps/spacefn/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/spacefn/readme.md rename to keyboards/s60_x/keymaps/spacefn/readme.md diff --git a/keyboards/s60-x/readme.md b/keyboards/s60_x/readme.md similarity index 99% rename from keyboards/s60-x/readme.md rename to keyboards/s60_x/readme.md index 408ad13ac2..e30b2f76ce 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60_x/readme.md @@ -5,11 +5,6 @@ DIY compact keyboard designed by VinnyCordeiro for Sentraq. Most of the keymaps ## S60X Resources - [Massdrop page](https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit?mode=guest_open) -## Quickstart - -If you just want to test a few layouts, the archive [s60-x_precompiled.zip](s60-x_precompiled.zip) contains pre-compiled .hex-files for all available keymaps. Not all of them are tested. -You only need to flash them onto your keyboard, which is explained below, there's no need to setup a build environment. For a full list - ## Flashing your keyboard The recommended programs for flashing your keyboard are [Atmel FLIP](http://www.atmel.com/tools/FLIP.aspx) (Windows) and [dfu-programmer](http://dfu-programmer.sourceforge.net/) (Linux/Windows). diff --git a/keyboards/s60-x/rgb/Makefile b/keyboards/s60_x/rgb/Makefile similarity index 100% rename from keyboards/s60-x/rgb/Makefile rename to keyboards/s60_x/rgb/Makefile diff --git a/keyboards/s60-x/rgb/config.h b/keyboards/s60_x/rgb/config.h similarity index 86% rename from keyboards/s60-x/rgb/config.h rename to keyboards/s60_x/rgb/config.h index fbc143487e..81efc87d54 100644 --- a/keyboards/s60-x/rgb/config.h +++ b/keyboards/s60_x/rgb/config.h @@ -11,12 +11,6 @@ #define MATRIX_COL_PINS { D0, D1, D2, D3, D5, B6, C6, C7, F1, F0, E6, B3, B2, B1, B0 } #define UNUSED_PINS -/* number of backlight levels */ -#define BACKLIGHT_PIN B7 -#ifdef BACKLIGHT_PIN -#define BACKLIGHT_LEVELS 3 -#endif - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboards/s60-x/rgb/rgb.c b/keyboards/s60_x/rgb/rgb.c similarity index 100% rename from keyboards/s60-x/rgb/rgb.c rename to keyboards/s60_x/rgb/rgb.c diff --git a/keyboards/s60-x/rgb/rgb.h b/keyboards/s60_x/rgb/rgb.h similarity index 100% rename from keyboards/s60-x/rgb/rgb.h rename to keyboards/s60_x/rgb/rgb.h diff --git a/keyboards/s60-x/rgb/rules.mk b/keyboards/s60_x/rgb/rules.mk similarity index 100% rename from keyboards/s60-x/rgb/rules.mk rename to keyboards/s60_x/rgb/rules.mk diff --git a/keyboards/s60-x/rules.mk b/keyboards/s60_x/rules.mk similarity index 100% rename from keyboards/s60-x/rules.mk rename to keyboards/s60_x/rules.mk diff --git a/keyboards/s60_x/s60_x.c b/keyboards/s60_x/s60_x.c new file mode 100644 index 0000000000..595418bfac --- /dev/null +++ b/keyboards/s60_x/s60_x.c @@ -0,0 +1 @@ +#include "s60_x.h" \ No newline at end of file diff --git a/keyboards/s60-x/s60-x.h b/keyboards/s60_x/s60_x.h similarity index 100% rename from keyboards/s60-x/s60-x.h rename to keyboards/s60_x/s60_x.h From 7ce94eb468ff34f904f8ef8fdeb3c5fe2d09d78c Mon Sep 17 00:00:00 2001 From: Ryan MacLean Date: Sun, 30 Apr 2017 15:04:00 -0700 Subject: [PATCH 34/86] Cleaning Up Dockerfile Layers Per Official Docs From the official docs: ``` Note: The official Debian and Ubuntu images automatically run apt-get clean, so explicit invocation is not required. ``` Also added ` && rm -rf /var/lib/apt/lists/*` as part of the install line which probably does what was intended (no need to make a new layer). Added apt-get update to the RUN payload, as it should be part of the same layer. Both are documented here: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/ --- Dockerfile | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 744ded8579..88da06f02a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,7 @@ FROM debian:jessie MAINTAINER Erik Dasque -RUN apt-get update -RUN apt-get install --no-install-recommends -y build-essential \ +RUN apt-get update && apt-get install --no-install-recommends -y build-essential \ gcc \ unzip \ wget \ @@ -15,10 +14,8 @@ RUN apt-get install --no-install-recommends -y build-essential \ gcc-arm-none-eabi \ binutils-arm-none-eabi \ libnewlib-arm-none-eabi \ - git - -RUN apt-get clean -RUN rm -rf /var/lib/apt/lists/* + git \ + && rm -rf /var/lib/apt/lists/* ENV keyboard=ergodox ENV subproject=ez From 38b076d22d2363674585745cab4d476ad1386ef3 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Wed, 3 May 2017 22:01:02 +0200 Subject: [PATCH 35/86] Add KEYMAP without KC_##-prefix and rename old variant to KEYMAP_KC --- keyboards/ps2avrGB/ps2avrGB.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/keyboards/ps2avrGB/ps2avrGB.h b/keyboards/ps2avrGB/ps2avrGB.h index 6432e3be9c..813f31f804 100644 --- a/keyboards/ps2avrGB/ps2avrGB.h +++ b/keyboards/ps2avrGB/ps2avrGB.h @@ -22,6 +22,24 @@ along with this program. If not, see . #include "action.h" #define KEYMAP( \ + K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \ + K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \ + K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, \ + K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, KE0, \ + K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, \ + K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96 \ +){ \ + { K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KD0, KE0 }, \ + { K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \ + { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC_NO, KD2, KE2 }, \ + { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \ + { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KC_NO, KE4 }, \ + { K05, KC_NO, K25, K35, K45, K55, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KC5, KD5, KE5 }, \ + { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \ + { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \ +} + +#define KC_KEYMAP( \ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, \ From 7f3b1232c49509a930dfbb87e17ad2847e753815 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Wed, 3 May 2017 22:13:46 +0200 Subject: [PATCH 36/86] Use KC_KEYMAP for default-keymap and remove obsolete explicit line-separator "\" --- keyboards/ps2avrGB/keymaps/default/keymap.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/keyboards/ps2avrGB/keymaps/default/keymap.c b/keyboards/ps2avrGB/keymaps/default/keymap.c index 5c66cde596..3e4cebc81e 100644 --- a/keyboards/ps2avrGB/keymaps/default/keymap.c +++ b/keyboards/ps2avrGB/keymaps/default/keymap.c @@ -18,14 +18,14 @@ along with this program. If not, see . #include "ps2avrGB.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( \ - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,HOME,END, \ - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, DEL, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, INS, \ - CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, PGUP,\ - LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT, UP, PGDN,\ - LCTL,LALT,LGUI, SPC, RGUI,RALT,RCTL,LEFT,DOWN,RGHT \ - ), + KC_KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,HOME,END, + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, DEL, + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, INS, + CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, PGUP, + LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT, UP, PGDN, + LCTL,LALT,LGUI, SPC, RGUI,RALT,RCTL,LEFT,DOWN,RGHT + ) }; const uint16_t PROGMEM fn_actions[] = { From 40fe30e4d6b521284fa3cb7ae217ebb6d013bcdf Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Wed, 3 May 2017 23:47:52 +0200 Subject: [PATCH 37/86] dynamic_macro.h: Ignore all the initial key releases Right after the user initiates the macro recording, they usually need to release some keys used to access the DYN_REC_START layers. It makes sense to ignore them. Note: The keys used to access the DYN_REC_STOP key are *not* ignored. --- quantum/dynamic_macro.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 939816a597..1a8ec40326 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -97,17 +97,24 @@ void dynamic_macro_play( /** * Record a single key in a dynamic macro. * + * @param macro_buffer[in] The start of the used macro buffer. * @param macro_pointer[in,out] The current buffer position. * @param macro_end2[in] The end of the other macro which shouldn't be overwritten. * @param direction[in] Either +1 or -1, which way to iterate the buffer. * @param record[in] The current keypress. */ void dynamic_macro_record_key( + keyrecord_t *macro_buffer, keyrecord_t **macro_pointer, keyrecord_t *macro_end2, int8_t direction, keyrecord_t *record) { + /* If we've just started recording, ignore all the key releases. */ + if (!record->event.pressed && *macro_pointer == macro_buffer) { + return; + } + if (*macro_pointer + direction != macro_end2) { **macro_pointer = *record; *macro_pointer += direction; @@ -230,10 +237,10 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) /* Store the key in the macro buffer and process it normally. */ switch (macro_id) { case 1: - dynamic_macro_record_key(¯o_pointer, r_macro_end, +1, record); + dynamic_macro_record_key(macro_buffer, ¯o_pointer, r_macro_end, +1, record); break; case 2: - dynamic_macro_record_key(¯o_pointer, macro_end, -1, record); + dynamic_macro_record_key(r_macro_buffer, ¯o_pointer, macro_end, -1, record); break; } return true; From 5e2a9992783e584f66dfeef16abf9d31c976311a Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 00:58:01 +0200 Subject: [PATCH 38/86] dynamic_macro.h: Always toggle the backlight twice as a notification Apparently sometimes the backlight was toggled only once and it was left on. --- quantum/dynamic_macro.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 1a8ec40326..c9120897f8 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -119,9 +119,7 @@ void dynamic_macro_record_key( **macro_pointer = *record; *macro_pointer += direction; } else { - /* Notify about the end of buffer. The blinks are paired - * because they should happen on both down and up events. */ - backlight_toggle(); + dynamic_macro_led_blink(); } } From 436d661775178fb62b46afdc3d755fdb413dcb35 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 01:19:05 +0200 Subject: [PATCH 39/86] dynamic_macro.h: Fix an off-by-two error We need to check whether we just passed the after-the-end point of the other macro. Instead we were checking whether we are going to reach it now. --- quantum/dynamic_macro.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index c9120897f8..9e7845c992 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -99,14 +99,14 @@ void dynamic_macro_play( * * @param macro_buffer[in] The start of the used macro buffer. * @param macro_pointer[in,out] The current buffer position. - * @param macro_end2[in] The end of the other macro which shouldn't be overwritten. + * @param macro2_end[in] The last buffer element it is safe to use before overwriting the other macro. * @param direction[in] Either +1 or -1, which way to iterate the buffer. * @param record[in] The current keypress. */ void dynamic_macro_record_key( keyrecord_t *macro_buffer, keyrecord_t **macro_pointer, - keyrecord_t *macro_end2, + keyrecord_t *macro2_end, int8_t direction, keyrecord_t *record) { @@ -115,7 +115,7 @@ void dynamic_macro_record_key( return; } - if (*macro_pointer + direction != macro_end2) { + if (*macro_pointer - direction != macro2_end) { **macro_pointer = *record; *macro_pointer += direction; } else { From 4b50ea15a954de2e6062aa7228bd1f9f76669ce7 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 01:37:46 +0200 Subject: [PATCH 40/86] dynamic_macro.h: Do not save the keys being held when stopping the recording More specifically, we save them and then place the `macro_end` pointer before them so they are essentially ignored and the other macro may freely overwrite them. --- quantum/dynamic_macro.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 9e7845c992..c4017aec97 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -127,10 +127,22 @@ void dynamic_macro_record_key( * End recording of the dynamic macro. Essentially just update the * pointer to the end of the macro. */ -void dynamic_macro_record_end(keyrecord_t *macro_pointer, keyrecord_t **macro_end) +void dynamic_macro_record_end( + keyrecord_t *macro_buffer, + keyrecord_t *macro_pointer, + int8_t direction, + keyrecord_t **macro_end) { dynamic_macro_led_blink(); + /* Do not save the keys being held when stopping the recording, + * i.e. the keys used to access the layer DYN_REC_STOP is on. + */ + while (macro_pointer != macro_buffer && + (macro_pointer - direction)->event.pressed) { + macro_pointer -= direction; + } + *macro_end = macro_pointer; } @@ -222,10 +234,10 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) * starts. */ switch (macro_id) { case 1: - dynamic_macro_record_end(macro_pointer, ¯o_end); + dynamic_macro_record_end(macro_buffer, macro_pointer, +1, ¯o_end); break; case 2: - dynamic_macro_record_end(macro_pointer, &r_macro_end); + dynamic_macro_record_end(r_macro_buffer, macro_pointer, -1, &r_macro_end); break; } macro_id = 0; From 425f0a768b5b8389d88bd187d9029171f392b883 Mon Sep 17 00:00:00 2001 From: tengg Date: Thu, 4 May 2017 13:27:35 -0400 Subject: [PATCH 41/86] revise HHKB bootloader_size to 4096 such that sw reset works (#1274) --- keyboards/hhkb/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk index a46271f023..e4190039f7 100644 --- a/keyboards/hhkb/rules.mk +++ b/keyboards/hhkb/rules.mk @@ -53,7 +53,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT #OPT_DEFS += -DBOOTLOADER_SIZE=4096 # as per original hasu settings -OPT_DEFS += -DBOOTLOADER_SIZE=512 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options # comment out to disable the options. From 8e94c9b4cba4cf3479154a11faacfa2bbad50098 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 22:39:02 +0200 Subject: [PATCH 42/86] dynamic_macro.h: Make the documentation more clear --- quantum/dynamic_macro.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index c4017aec97..6aae7d2302 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -99,7 +99,7 @@ void dynamic_macro_play( * * @param macro_buffer[in] The start of the used macro buffer. * @param macro_pointer[in,out] The current buffer position. - * @param macro2_end[in] The last buffer element it is safe to use before overwriting the other macro. + * @param macro2_end[in] The end of the other macro. * @param direction[in] Either +1 or -1, which way to iterate the buffer. * @param record[in] The current keypress. */ @@ -115,6 +115,9 @@ void dynamic_macro_record_key( return; } + /* The other end of the other macro is the last buffer element it + * is safe to use before overwriting the other macro. + */ if (*macro_pointer - direction != macro2_end) { **macro_pointer = *record; *macro_pointer += direction; @@ -170,7 +173,7 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) * ¯o_buffer macro_end * v v * +------------------------------------------------------------+ - * |>>>>>> MACRO1 >>>>>>| |<<<<<<<<<<<<< MACRO2 <<<<<<<<<<<<<| + * |>>>>>> MACRO1 >>>>>> <<<<<<<<<<<<< MACRO2 <<<<<<<<<<<<<| * +------------------------------------------------------------+ * ^ ^ * r_macro_end r_macro_buffer From 10a7cd7e5ae1affe226423dd94c6443f8cf64e22 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 22:55:35 +0200 Subject: [PATCH 43/86] dynamic_macro.h: Add debug logs --- quantum/dynamic_macro.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 6aae7d2302..7dca30f076 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -53,6 +53,15 @@ void dynamic_macro_led_blink(void) backlight_toggle(); } +/* Convenience macros used for retrieving the debug info. All of them + * need a `direction` variable accessible at the call site. + */ +#define DYNAMIC_MACRO_CURRENT_SLOT() (direction > 0 ? 1 : 2) +#define DYNAMIC_MACRO_CURRENT_LENGTH(BEGIN, POINTER) \ + ((int)(direction * ((POINTER) - (BEGIN)))) +#define DYNAMIC_MACRO_CURRENT_CAPACITY(BEGIN, END2) \ + ((int)(direction * ((END2) - (BEGIN)) + 1)) + /** * Start recording of the dynamic macro. * @@ -62,6 +71,8 @@ void dynamic_macro_led_blink(void) void dynamic_macro_record_start( keyrecord_t **macro_pointer, keyrecord_t *macro_buffer) { + dprintln("dynamic macro recording: started"); + dynamic_macro_led_blink(); clear_keyboard(); @@ -79,6 +90,8 @@ void dynamic_macro_record_start( void dynamic_macro_play( keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction) { + dprintf("dynamic macro: slot %d playback\n", DYNAMIC_MACRO_CURRENT_SLOT()); + uint32_t saved_layer_state = layer_state; clear_keyboard(); @@ -112,6 +125,7 @@ void dynamic_macro_record_key( { /* If we've just started recording, ignore all the key releases. */ if (!record->event.pressed && *macro_pointer == macro_buffer) { + dprintln("dynamic macro: ignoring a leading key-up event"); return; } @@ -124,6 +138,12 @@ void dynamic_macro_record_key( } else { dynamic_macro_led_blink(); } + + dprintf( + "dynamic macro: slot %d length: %d/%d\n", + DYNAMIC_MACRO_CURRENT_SLOT(), + DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, *macro_pointer), + DYNAMIC_MACRO_CURRENT_CAPACITY(macro_buffer, macro2_end)); } /** @@ -143,9 +163,15 @@ void dynamic_macro_record_end( */ while (macro_pointer != macro_buffer && (macro_pointer - direction)->event.pressed) { + dprintln("dynamic macro: trimming a trailing key-down event"); macro_pointer -= direction; } + dprintf( + "dynamic macro: slot %d saved, length: %d\n", + DYNAMIC_MACRO_CURRENT_SLOT(), + DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, macro_pointer)); + *macro_end = macro_pointer; } @@ -264,4 +290,8 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) return true; } +#undef DYNAMIC_MACRO_CURRENT_SLOT +#undef DYNAMIC_MACRO_CURRENT_LENGTH +#undef DYNAMIC_MACRO_CURRENT_CAPACITY + #endif From a1e156a3d20e10134ac01b4cc2eaf2c92c0d2f23 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Fri, 5 May 2017 00:11:24 +0200 Subject: [PATCH 44/86] dynamic_macro.h: Do not use backlight_toggle if backlight is disabled Fixes #1199. --- quantum/dynamic_macro.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 7dca30f076..f242405def 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -48,9 +48,11 @@ enum dynamic_macro_keycodes { /* Blink the LEDs to notify the user about some event. */ void dynamic_macro_led_blink(void) { +#ifdef BACKLIGHT_ENABLE backlight_toggle(); _delay_ms(100); backlight_toggle(); +#endif } /* Convenience macros used for retrieving the debug info. All of them From cb60fe393fd4e5dc43c0b11b22f76e6ece89d0f4 Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Fri, 5 May 2017 14:41:13 +0100 Subject: [PATCH 45/86] Add new keymap for dshields. --- keyboards/planck/keymaps/dshields/Makefile | 11 +++ keyboards/planck/keymaps/dshields/config.h | 23 +++++ keyboards/planck/keymaps/dshields/keymap.c | 98 ++++++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 keyboards/planck/keymaps/dshields/Makefile create mode 100644 keyboards/planck/keymaps/dshields/config.h create mode 100644 keyboards/planck/keymaps/dshields/keymap.c diff --git a/keyboards/planck/keymaps/dshields/Makefile b/keyboards/planck/keymaps/dshields/Makefile new file mode 100644 index 0000000000..5eaceda534 --- /dev/null +++ b/keyboards/planck/keymaps/dshields/Makefile @@ -0,0 +1,11 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif + +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +COMMAND_ENABLE = yes # Commands for debug and configuration +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +TAP_DANCE_ENABLE = no +AUDIO_ENABLE = no diff --git a/keyboards/planck/keymaps/dshields/config.h b/keyboards/planck/keymaps/dshields/config.h new file mode 100644 index 0000000000..35358af0b0 --- /dev/null +++ b/keyboards/planck/keymaps/dshields/config.h @@ -0,0 +1,23 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#ifndef NO_DEBUG +#define NO_DEBUG +#endif +#ifndef NO_PRINT +#define NO_PRINT +#endif + +#include "../../config.h" + +#define TAPPING_TOGGLE 2 +#define TAPPING_TERM 300 + +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 300 + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#endif + diff --git a/keyboards/planck/keymaps/dshields/keymap.c b/keyboards/planck/keymaps/dshields/keymap.c new file mode 100644 index 0000000000..e96a67a53a --- /dev/null +++ b/keyboards/planck/keymaps/dshields/keymap.c @@ -0,0 +1,98 @@ +#include "planck.h" +#include "backlight.h" +#include "config.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +enum planck_layers { DEF, LWR, RSE, FUN }; +enum planck_keycodes { M1 = SAFE_RANGE, M2, M3, M4 }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Default + * ,-----------------------------------------------------------------------------------. + * | Q | W | E | R | T | Esc | Bksp | Y | U | I | O | P | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | A | S | D | F | G | Tab | Enter| H | J | K | L | ; | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Z | X | C | V | B | Shift| Play | N | M | , | . | / | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Super| Alt | Fun | Lower| Space | Raise| Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ + [DEF] = { + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, OSM(MOD_LSFT), XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, + {KC_LCTL, KC_LGUI, KC_LALT, TT(FUN), TT(LWR), KC_SPC, KC_SPC, TT(RSE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + /* Lower + * ,-----------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | | | ^ | & | * | ( | ) | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | | | | | | | _ | + | | { | } | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | " | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Home | PgDn | PgUp | End | + * `-----------------------------------------------------------------------------------' + */ + [LWR] = { + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, + {S(KC_GRV), _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, S(KC_LBRC), S(KC_RBRC)}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, S(KC_QUOT), S(KC_BSLS)}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END} + }, + /* Raise + * ,-----------------------------------------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | | | 6 | 7 | 8 | 9 | 0 | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ` | | | | | | | - | = | | [ | ] | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Home | PgDn | PgUp | End | + * `-----------------------------------------------------------------------------------' + */ + [RSE] = { + {KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0}, + {KC_GRV, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END} + }, + /* Function + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | Reset|Delete| F6 | F7 | F8 | F9 | F10 | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | F11 | F12 | F13 | F14 | F15 | | | F16 | F17 | F18 | F19 | F20 | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |BlTggl|BlStep| | M1 | M2 | | | M3 | M4 |MsBtn1|MsBtn2|MsBtn3| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | |MsLeft|MsDown| MsUp |MsRght| + * `-----------------------------------------------------------------------------------' + */ + [FUN] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10}, + {KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20}, + {BL_TOGG, BL_STEP, _______, M1, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R} + }, + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case M1: + if (record->event.pressed) { + SEND_STRING(" 2>&1 > "); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { +} + From b2083e21a219dd0cf3d58f618f46b911987d2a5e Mon Sep 17 00:00:00 2001 From: Tobias O Date: Fri, 5 May 2017 23:55:06 +0200 Subject: [PATCH 46/86] lowercase .jpg I think i guess that fixes the image link - currently its broken --- keyboards/xd60/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/xd60/readme.md b/keyboards/xd60/readme.md index 224498caa9..dcc45ead29 100644 --- a/keyboards/xd60/readme.md +++ b/keyboards/xd60/readme.md @@ -1,6 +1,6 @@ # QMK Firmware for XIUDI's 60% XD60 PCB -![Top View of a pair of XD60 Keyboard](./xd60.JPG) +![Top View of a pair of XD60 Keyboard](./xd60.jpg) ## Quantum MK Firmware For the full Quantum feature list, see [the parent readme.md](/readme.md). From 9e7448ea89a1a88317f0acb805819af79d0a76e3 Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 5 Apr 2017 15:53:58 +0200 Subject: [PATCH 47/86] Fix F-keys on right hand to start on first key --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 3b82b7ce06..2d6f76856a 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -163,7 +163,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, UC(0x2194),UC(0x2190),UC(0x2192),UC(0x2191),UC(0x2193),KC_TRNS, KC_TRNS, UC(0x2713),UC(0x2715),UC(0x2022),UC(0x2236),KC_TRNS, KC_TRNS, UC(0x21D4),UC(0x21D0),UC(0x21D2),UC(0x21D1),UC(0x21D3),KC_TRNS, From d28d390ad6dae0c23424e1cfa51760d5ba314e8b Mon Sep 17 00:00:00 2001 From: coderkun Date: Sat, 6 May 2017 12:25:24 +0200 Subject: [PATCH 48/86] =?UTF-8?q?Update=20README=20for=20keymap=20?= =?UTF-8?q?=E2=80=9Ccoderkun=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/readme.md | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md index 27ec805adc..0c9290bf08 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md +++ b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md @@ -4,21 +4,14 @@ The idea of this layout is to use it for [Neo2](http://www.neo-layout.org) but a The main goal of the default layer is to provide a complete symmetric layout with each modifier equally placed for both hands (mirror, of course). -It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and (hopefully in the near future) some useful Unicode symbols. +It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and some useful Unicode symbols. ## Build -1. Enable Unicode in Makefile - - ``` - UNICODE_ENABLE = yes - ``` -2. Build as usual - ``` make clean - make KEYMAP=coderkun_neo2 + make coderkun_neo2 ``` From 3381254c65375c7da451973c7d843bf257a0d4a7 Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Sun, 7 May 2017 17:23:19 -0400 Subject: [PATCH 49/86] Establish support for Bathroom Epiphanies Tiger Lily controller Replacement controller for Filco Majestouch 2 104 key keyboard. BE advises code will also work with the Black Petal controller - I don't have one to test with. Tests working perfectly on my Filco. --- keyboards/tiger_lily/Makefile | 3 + keyboards/tiger_lily/config.h | 147 ++++++++++++++++++ keyboards/tiger_lily/keymaps/default/Makefile | 21 +++ keyboards/tiger_lily/keymaps/default/config.h | 8 + keyboards/tiger_lily/keymaps/default/keymap.c | 11 ++ .../tiger_lily/keymaps/default/readme.md | 1 + keyboards/tiger_lily/matrix.c | 135 ++++++++++++++++ keyboards/tiger_lily/readme.md | 32 ++++ keyboards/tiger_lily/rules.mk | 71 +++++++++ keyboards/tiger_lily/tiger_lily.c | 63 ++++++++ keyboards/tiger_lily/tiger_lily.h | 50 ++++++ 11 files changed, 542 insertions(+) create mode 100644 keyboards/tiger_lily/Makefile create mode 100644 keyboards/tiger_lily/config.h create mode 100644 keyboards/tiger_lily/keymaps/default/Makefile create mode 100644 keyboards/tiger_lily/keymaps/default/config.h create mode 100644 keyboards/tiger_lily/keymaps/default/keymap.c create mode 100644 keyboards/tiger_lily/keymaps/default/readme.md create mode 100644 keyboards/tiger_lily/matrix.c create mode 100644 keyboards/tiger_lily/readme.md create mode 100644 keyboards/tiger_lily/rules.mk create mode 100644 keyboards/tiger_lily/tiger_lily.c create mode 100644 keyboards/tiger_lily/tiger_lily.h diff --git a/keyboards/tiger_lily/Makefile b/keyboards/tiger_lily/Makefile new file mode 100644 index 0000000000..57b2ef62e5 --- /dev/null +++ b/keyboards/tiger_lily/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif diff --git a/keyboards/tiger_lily/config.h b/keyboards/tiger_lily/config.h new file mode 100644 index 0000000000..4908192906 --- /dev/null +++ b/keyboards/tiger_lily/config.h @@ -0,0 +1,147 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Bathroom Epiphanies +#define PRODUCT tiger_lily +#define DESCRIPTION Tiger Lily controller for the Filco Majestouch 2 + +/* + * Frosty Flake Rev. 20140521 made by Bathroom Ephiphanies + * Ported from the Bathroom Epiphanies TMK Firmware: + * https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers + * + */ + +/* key matrix size */ +#define MATRIX_ROWS 8 // Row0 - Row7 in the schematic +#define MATRIX_COLS 18 // ColA - ColR in the schematic + +/* + * Keyboard Matrix Assignments + */ +#define UNUSED_PINS { B0, C4, D3 } + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/tiger_lily/keymaps/default/Makefile b/keyboards/tiger_lily/keymaps/default/Makefile new file mode 100644 index 0000000000..9d3df5964f --- /dev/null +++ b/keyboards/tiger_lily/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/tiger_lily/keymaps/default/config.h b/keyboards/tiger_lily/keymaps/default/config.h new file mode 100644 index 0000000000..8893d122e0 --- /dev/null +++ b/keyboards/tiger_lily/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif diff --git a/keyboards/tiger_lily/keymaps/default/keymap.c b/keyboards/tiger_lily/keymaps/default/keymap.c new file mode 100644 index 0000000000..f4526dc59b --- /dev/null +++ b/keyboards/tiger_lily/keymaps/default/keymap.c @@ -0,0 +1,11 @@ +#include "tiger_lily.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP(\ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) +}; \ No newline at end of file diff --git a/keyboards/tiger_lily/keymaps/default/readme.md b/keyboards/tiger_lily/keymaps/default/readme.md new file mode 100644 index 0000000000..4626859df4 --- /dev/null +++ b/keyboards/tiger_lily/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for tiger_lily diff --git a/keyboards/tiger_lily/matrix.c b/keyboards/tiger_lily/matrix.c new file mode 100644 index 0000000000..57e352520a --- /dev/null +++ b/keyboards/tiger_lily/matrix.c @@ -0,0 +1,135 @@ +/* + Copyright 2017 Gabriel Young + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif +static uint8_t debouncing = DEBOUNCING_DELAY; + +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t scan_col(void) { + return ( + (PINC&(1<<2) ? 0 : ((matrix_row_t)1<<0)) | \ + (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<1)) | \ + (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) | \ + (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<3)) | \ + (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) | \ + (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<5)) | \ + (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<6)) | \ + (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<7)) + ); +} + +static void select_col(uint8_t col) { + switch (col) { + case 0: PORTD = (PORTD & ~0b01110111) | 0b01110110; break; \ + case 1: PORTD = (PORTD & ~0b01110111) | 0b01100001; break; \ + case 2: PORTD = (PORTD & ~0b01110111) | 0b01100101; break; \ + case 3: PORTD = (PORTD & ~0b01110111) | 0b00000011; break; \ + case 4: PORTD = (PORTD & ~0b01110111) | 0b00000111; break; \ + case 5: PORTD = (PORTD & ~0b01110111) | 0b00010011; break; \ + case 6: PORTD = (PORTD & ~0b01110111) | 0b00010111; break; \ + case 7: PORTD = (PORTD & ~0b01110111) | 0b00100011; break; \ + case 8: PORTD = (PORTD & ~0b01110111) | 0b00100111; break; \ + case 9: PORTD = (PORTD & ~0b01110111) | 0b00110011; break; \ + case 10: PORTD = (PORTD & ~0b01110111) | 0b01110010; break; \ + case 11: PORTD = (PORTD & ~0b01110111) | 0b01100110; break; \ + case 12: PORTD = (PORTD & ~0b01110111) | 0b01110000; break; \ + case 13: PORTD = (PORTD & ~0b01110111) | 0b01100100; break; \ + case 14: PORTD = (PORTD & ~0b01110111) | 0b01100000; break; \ + case 15: PORTD = (PORTD & ~0b01110111) | 0b01000111; break; \ + case 16: PORTD = (PORTD & ~0b01110111) | 0b01000011; break; \ + case 17: PORTD = (PORTD & ~0b01110111) | 0b00110111; break; + } +} + +void matrix_init(void) { + /* Column output pins */ \ + DDRD |= 0b01110111; \ + /* Row input pins */ \ + DDRC &= ~0b10000100; \ + DDRB &= ~0b01111110; \ + PORTC |= 0b10000100; \ + PORTB |= 0b01111110; + + for (uint8_t i=0; i < MATRIX_ROWS; i++) + matrix[i] = matrix_debouncing[i] = 0; + + matrix_init_quantum(); +} + +uint8_t matrix_scan(void) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + select_col(col); + _delay_us(3); + matrix_row_t col_scan = scan_col(); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<] +``` + +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/tiger_lily/rules.mk b/keyboards/tiger_lily/rules.mk new file mode 100644 index 0000000000..dd2f4b6eec --- /dev/null +++ b/keyboards/tiger_lily/rules.mk @@ -0,0 +1,71 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 +FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches + +CUSTOM_MATRIX = yes +SRC += matrix.c \ No newline at end of file diff --git a/keyboards/tiger_lily/tiger_lily.c b/keyboards/tiger_lily/tiger_lily.c new file mode 100644 index 0000000000..d2e7ba7095 --- /dev/null +++ b/keyboards/tiger_lily/tiger_lily.c @@ -0,0 +1,63 @@ +#include "tiger_lily.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + DDRB |= (1<<7); + DDRC |= (1<<5) | (1<<6); + + print_dec(usb_led); + + if (usb_led & (1< Date: Sun, 7 May 2017 14:42:21 -0700 Subject: [PATCH 50/86] [Miuni32] Rm accidentally committed file --- .../miuni32/keymaps/adam-lee/keymap.c.backup | 42 ------------------- 1 file changed, 42 deletions(-) delete mode 100644 keyboards/miuni32/keymaps/adam-lee/keymap.c.backup diff --git a/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup b/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup deleted file mode 100644 index 2f634fffbd..0000000000 --- a/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup +++ /dev/null @@ -1,42 +0,0 @@ -#include "miuni32.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] ={ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT, KC_ENT}, - {KC_Z, KC_X, KC_C, KC_V, KC_V, KC_SPC, KC_B, KC_N, KC_M , MO(1), KC_RCTL} - }, -[1] ={ - {KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL}, - {KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_TRNS}, - {RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, KC_TRNS, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, RGB_MOD}, - } -}; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - keyevent_t event = record->event; - - switch (id) { - - } - return MACRO_NONE; -} - -void matrix_init_user(void) { - -} - -void matrix_scan_user(void) { - -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void led_set_user(uint8_t usb_led) { - -} From 84a358845bbed754b5b0c061ff36773dae131cfd Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Sun, 7 May 2017 18:00:06 -0400 Subject: [PATCH 51/86] Fix compile error --- keyboards/tiger_lily/matrix.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/tiger_lily/matrix.c b/keyboards/tiger_lily/matrix.c index 57e352520a..d3a0d7ebd1 100644 --- a/keyboards/tiger_lily/matrix.c +++ b/keyboards/tiger_lily/matrix.c @@ -115,6 +115,7 @@ inline matrix_row_t matrix_get_row(uint8_t row) { } void matrix_print(void) { + #ifndef NO_PRINT print("\nr\\c ABCDEFGHIJKLMNOPQR\n"); for (uint8_t row = 0; row < MATRIX_ROWS; row++) { matrix_row_t matrix_row = matrix_get_row(row); @@ -125,6 +126,7 @@ void matrix_print(void) { } print("\n"); } + #endif } uint8_t matrix_key_count(void) { From 9a8904a9c071730ef6712f8be93c38ac4b43fbdb Mon Sep 17 00:00:00 2001 From: Stephen Tudor Date: Mon, 8 May 2017 18:32:15 -0400 Subject: [PATCH 52/86] Add smt keymap for Clueboard (HHKB-style layout) (#1286) * Add keymap for smt Clueboard (HHKB layout) * Add readme for smt Clueboard (HHKB) keymap * Flesh out the keymap a bit more to support Colemak & Dvorak * Update README with layout image --- keyboards/clueboard/keymaps/smt/keymap.c | 181 +++++++++++++++++++++ keyboards/clueboard/keymaps/smt/layout.png | Bin 0 -> 130672 bytes keyboards/clueboard/keymaps/smt/readme.md | 30 ++++ 3 files changed, 211 insertions(+) create mode 100644 keyboards/clueboard/keymaps/smt/keymap.c create mode 100644 keyboards/clueboard/keymaps/smt/layout.png create mode 100644 keyboards/clueboard/keymaps/smt/readme.md diff --git a/keyboards/clueboard/keymaps/smt/keymap.c b/keyboards/clueboard/keymaps/smt/keymap.c new file mode 100644 index 0000000000..732086fb56 --- /dev/null +++ b/keyboards/clueboard/keymaps/smt/keymap.c @@ -0,0 +1,181 @@ +#include "clueboard.h" + +// 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 _FL 3 +#define _CL 4 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK +}; + +// Helpful defines +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)) + +// Custom macros +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _QWERTY: Base Layer (Default Layer) + * ,-----------------------------------------------------------. ,---. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU| + * |-----------------------------------------------------------| |---| + * |HpTab| Q| W| E| R| T| Y| U| I| O| P| [| ]| BS| |PgD| + * |-----------------------------------------------------------| `---' + * |CtlEsc| A| S| D| F| G| H| J| K| L| ;| '| | Ent| + * |--------------------------------------------------------------. + * |Shift| | Z| X| C| V| B| N| M| ,| .| /|Shift| Fn| Up| + * |------------------------------------------------------------------. + * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PGUP, \ + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN, \ + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \ + KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _COLEMAK: Base Layer + * ,-----------------------------------------------------------. ,---. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU| + * |-----------------------------------------------------------| |---| + * |HpTab| Q| W| F| P| G| J| L| U| Y| ;| [| ]| BS| |PgD| + * |-----------------------------------------------------------| `---' + * |CtlEsc| A| R| S| T| D| H| N| E| I| O| '| | Ent| + * |--------------------------------------------------------------. + * |Shift| | Z| X| C| V| B| K| M| ,| .| /|Shift| Fn| Up| + * |------------------------------------------------------------------. + * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PGUP, \ + HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN, \ + CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, \ + KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _DVORAK: Base Layer + * ,-----------------------------------------------------------. ,---. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| `| |PgU| + * |-----------------------------------------------------------| |---| + * |HpTab| '| ,| .| P| Y| F| G| C| R| L| /| =| BS| |PgD| + * |-----------------------------------------------------------| `---' + * |CtlEsc| A| O| E| U| I| D| H| T| N| S| -| | Ent| + * |--------------------------------------------------------------. + * |Shift| | ;| Q| J| K| X| B| M| W| V| Z|Shift| Fn| Up| + * |------------------------------------------------------------------. + * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, KC_PGUP, \ + HPR_TAB, KC_QUOT, KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC, KC_PGDN, \ + CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, \ + KC_LSFT, XXXXXXX, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, MO(_FL), KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + */ +[_FL] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_STEP, \ + _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, KC_DEL, _______, \ + _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \ + _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), KC_PGUP, \ + _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), + + /* Keymap _CL: Control layer + */ +[_CL] = KEYMAP( + _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \ + _______, _______, _______,_______,RESET, _______,_______,QWERTY, COLEMAK,DVORAK, _______, _______, _______, _______, RGB_VAD, \ + _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \ + MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \ + _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI), +}; + +/* This is a list of user defined functions. F(N) corresponds to item N + of this list. + */ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(0), // Calls action_function() +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t mods_pressed; + static bool mod_flag; + + switch (id) { + case 0: + /* Handle the combined Grave/Esc key + */ + mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed + + if (record->event.pressed) { + /* The key is being pressed. + */ + if (mods_pressed) { + mod_flag = true; + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + /* The key is being released. + */ + if (mod_flag) { + mod_flag = false; + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/clueboard/keymaps/smt/layout.png b/keyboards/clueboard/keymaps/smt/layout.png new file mode 100644 index 0000000000000000000000000000000000000000..6c27277a9abb98c2e5d80c7aa30f44d424e33a6e GIT binary patch literal 130672 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 literal 0 HcmV?d00001 diff --git a/keyboards/clueboard/keymaps/smt/readme.md b/keyboards/clueboard/keymaps/smt/readme.md new file mode 100644 index 0000000000..6a8b3edb44 --- /dev/null +++ b/keyboards/clueboard/keymaps/smt/readme.md @@ -0,0 +1,30 @@ +``` + ___ _____ _ _ _ __ __ _ __ +|__ \ / ____| | | | | | / / / /(_) / / + ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / / + |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / / + |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _ + (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_) +``` + +# smt Clueboard Layout (HHKB variant) + +![Clueboard Layout Image](layout.png) + +This is smt's HHKB variant layout, based on the default layout that comes +flashed on every Clueboard. The primary differences from the default are: + +- The Backspace key is moved down into the traditional `\` position +- `\` and `` ` `` are assigned to the "split-backspace" positions +- The right Shift is split to allow for a Fn key to its right +- The modifiers on the right side now mirror the left side (`Alt`/`Super`/`Ctrl`) + +For the most part, it's a straightforward and easy to follow layout. There +are a few special keys: + +- The Esc key sends `Esc` when tapped, `` ` `` when `Alt`/`Super`/`Ctrl`/`Fn` is held, or `~` when `Shift` is held +- The Tab key sends `Tab` when tapped, or `Super+Ctrl+Alt+Shift` (a.k.a. [Hyper]) when held +- The key traditionally in the Caps-Lock position has been re-mapped to send `Esc` when tapped, or `Ctrl` when held +- The left Shift key sends `Enter` when tapped, or `Shift` when held + +[Hyper]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ From bd2c0b9648b67db51a92f69bc862c0eb7bccf14c Mon Sep 17 00:00:00 2001 From: Nephiel Date: Wed, 10 May 2017 19:26:39 +0200 Subject: [PATCH 53/86] Call led_set for layer action events to update LEDs on layer changes --- tmk_core/common/action.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 4ba1cc251a..8640dfab35 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -537,6 +537,21 @@ void process_action(keyrecord_t *record, action_t action) break; } +#ifndef NO_ACTION_LAYER + // if this event is a layer action, update the leds + switch (action.kind.id) { + case ACT_LAYER: + #ifndef NO_ACTION_TAPPING + case ACT_LAYER_TAP: + case ACT_LAYER_TAP_EXT: + #endif + led_set(host_keyboard_leds()); + break; + default: + break; + } +#endif + #ifndef NO_ACTION_ONESHOT /* Because we switch layers after a oneshot event, we need to release the * key before we leave the layer or no key up event will be generated. From eb3f80b92415c3d33d3819deb45739997cfa8a9a Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Fri, 5 May 2017 15:49:35 +0100 Subject: [PATCH 54/86] Add new features to dshields keymap. - one shot layers, dynamic macros and tap dance keys - add a basic readme.md and layout image. --- keyboards/planck/keymaps/dshields/Makefile | 3 +- keyboards/planck/keymaps/dshields/config.h | 34 ++++++++++------ .../keymaps/dshields/keyboard-layout.jpg | Bin 0 -> 50615 bytes keyboards/planck/keymaps/dshields/keymap.c | 38 +++++++++--------- keyboards/planck/keymaps/dshields/readme.md | 12 ++++++ 5 files changed, 55 insertions(+), 32 deletions(-) create mode 100644 keyboards/planck/keymaps/dshields/keyboard-layout.jpg create mode 100644 keyboards/planck/keymaps/dshields/readme.md diff --git a/keyboards/planck/keymaps/dshields/Makefile b/keyboards/planck/keymaps/dshields/Makefile index 5eaceda534..9e18a3542e 100644 --- a/keyboards/planck/keymaps/dshields/Makefile +++ b/keyboards/planck/keymaps/dshields/Makefile @@ -7,5 +7,6 @@ COMMAND_ENABLE = yes # Commands for debug and configuration BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -TAP_DANCE_ENABLE = no +TAP_DANCE_ENABLE = yes AUDIO_ENABLE = no +API_SYSEX_ENABLE = no diff --git a/keyboards/planck/keymaps/dshields/config.h b/keyboards/planck/keymaps/dshields/config.h index 35358af0b0..4d5be0a268 100644 --- a/keyboards/planck/keymaps/dshields/config.h +++ b/keyboards/planck/keymaps/dshields/config.h @@ -1,23 +1,31 @@ #ifndef CONFIG_USER_H #define CONFIG_USER_H -#ifndef NO_DEBUG -#define NO_DEBUG -#endif -#ifndef NO_PRINT -#define NO_PRINT -#endif - #include "../../config.h" -#define TAPPING_TOGGLE 2 -#define TAPPING_TERM 300 - -#define ONESHOT_TAP_TOGGLE 2 -#define ONESHOT_TIMEOUT 300 - #define _______ KC_TRNS #define XXXXXXX KC_NO +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 500 + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_WHEEL_DELAY 0 + +#define DM_PLAY DYN_MACRO_PLAY1 +#define DM_STRT DYN_REC_START1 +#define DM_STOP DYN_REC_STOP + +#define OSL_RSE OSL(RSE) +#define OSL_LWR OSL(LWR) +#define OSL_FUN OSL(FUN) + +#define OSM_CTL OSM(MOD_LCTL) +#define OSM_ALT OSM(MOD_LALT) +#define OSM_SFT OSM(MOD_LSFT) + #endif diff --git a/keyboards/planck/keymaps/dshields/keyboard-layout.jpg b/keyboards/planck/keymaps/dshields/keyboard-layout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..142f821308baa3c629301205537a097b3fa4a50a GIT binary patch literal 50615 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 literal 0 HcmV?d00001 diff --git a/keyboards/planck/keymaps/dshields/keymap.c b/keyboards/planck/keymaps/dshields/keymap.c index e96a67a53a..ed7621c77b 100644 --- a/keyboards/planck/keymaps/dshields/keymap.c +++ b/keyboards/planck/keymaps/dshields/keymap.c @@ -7,7 +7,10 @@ extern keymap_config_t keymap_config; enum planck_layers { DEF, LWR, RSE, FUN }; -enum planck_keycodes { M1 = SAFE_RANGE, M2, M3, M4 }; +enum planck_keycodes { DYNAMIC_MACRO_RANGE = SAFE_RANGE }; +enum tap_dance_keys { TD_SCLN }; + +#include "dynamic_macro.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Default @@ -16,16 +19,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | A | S | D | F | G | Tab | Enter| H | J | K | L | ; | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Z | X | C | V | B | Shift| Play | N | M | , | . | / | + * | Z | X | C | V | B | Shift|DmPlay| N | M | , | . | / | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Ctrl | Super| Alt | Fun | Lower| Space | Raise| Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ [DEF] = { - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, - {KC_Z, KC_X, KC_C, KC_V, KC_B, OSM(MOD_LSFT), XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, - {KC_LCTL, KC_LGUI, KC_LALT, TT(FUN), TT(LWR), KC_SPC, KC_SPC, TT(RSE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, TD(TD_SCLN)}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, OSM_SFT, DM_PLAY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, + {OSM_CTL, KC_LGUI, OSM_ALT, OSL_FUN, OSL_LWR, KC_SPC, KC_SPC, OSL_RSE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Lower * ,-----------------------------------------------------------------------------------. @@ -50,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | ` | | | | | | | - | = | | [ | ] | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | | | | | | ' | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Home | PgDn | PgUp | End | * `-----------------------------------------------------------------------------------' @@ -65,30 +68,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | Reset|Delete| F6 | F7 | F8 | F9 | F10 | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | F11 | F12 | F13 | F14 | F15 | | | F16 | F17 | F18 | F19 | F20 | + * | F11 | F12 | F13 | F14 | F15 | | | |MsWhLt|MsWhDn|MsWhUp|MsWhRt| * |------+------+------+------+------+------|------+------+------+------+------+------| - * |BlTggl|BlStep| | M1 | M2 | | | M3 | M4 |MsBtn1|MsBtn2|MsBtn3| + * |BlTggl|BlStep| | | |DmStrt|DmStop| | |MsBtn1|MsBtn2|MsBtn3| * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | |MsLeft|MsDown| MsUp |MsRght| * `-----------------------------------------------------------------------------------' */ [FUN] = { {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10}, - {KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20}, - {BL_TOGG, BL_STEP, _______, M1, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3}, + {KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R}, + {BL_TOGG, BL_STEP, _______, _______, _______, DM_STRT, DM_STOP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R} }, }; +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_SCLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, S(KC_SCLN)) // once for semi-colon, twice for colon +}; + bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case M1: - if (record->event.pressed) { - SEND_STRING(" 2>&1 > "); - } - return false; - break; + if (!process_record_dynamic_macro(keycode, record)) { + return false; } return true; } diff --git a/keyboards/planck/keymaps/dshields/readme.md b/keyboards/planck/keymaps/dshields/readme.md new file mode 100644 index 0000000000..447eaae972 --- /dev/null +++ b/keyboards/planck/keymaps/dshields/readme.md @@ -0,0 +1,12 @@ + +About +------ + +A simple split qwerty Planck layout that makes use of one-shot modifiers, +one-shot layers, tap-dance keys and dynamic macros. + +Layout +------- + +![Layout](keyboard-layout.jpg "Keyboard Layout") + From 8ddbf7f59f8afa822031746bbf8019fbac0090c9 Mon Sep 17 00:00:00 2001 From: Nikolaus Wittenstein Date: Thu, 11 May 2017 15:32:35 -0400 Subject: [PATCH 55/86] Fix spelling of "persistent" Fixes #1201. --- keyboards/atomic/keymaps/pvc/keymap.c | 4 ++-- keyboards/atreus/keymaps/xyverz/keymap.c | 10 +++++----- keyboards/atreus62/keymaps/xyverz/keymap.c | 10 +++++----- keyboards/clueboard/keymaps/smt/keymap.c | 8 ++++---- .../ibm_terminal/keymaps/priyadi/keymap.c | 10 +++++----- keyboards/ergodox/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/gh60/keymaps/xyverz/keymap.c | 8 ++++---- .../handwired/atreus50/keymaps/default/keymap.c | 8 ++++---- .../handwired/ortho5x13/keymaps/default/keymap.c | 8 ++++---- .../handwired/promethium/keymaps/priyadi/keymap.c | 12 ++++++------ keyboards/hhkb/keymaps/smt/keymap.c | 8 ++++---- keyboards/jd45/keymaps/jeebak/keymap.c | 2 +- keyboards/jd45/keymaps/jeebak/readme.md | 2 +- keyboards/kinesis/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/OLED_sample/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/hexwire/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/i2c/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/serial/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/smt/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/phantom/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/planck/keymaps/ab/keymap.c | 4 ++-- keyboards/planck/keymaps/dbroqua/keymap.c | 4 ++-- keyboards/planck/keymaps/default/keymap.c | 8 ++++---- keyboards/planck/keymaps/espynn/keymap.c | 4 ++-- keyboards/planck/keymaps/experimental/keymap.c | 8 ++++---- keyboards/planck/keymaps/impossible/keymap.c | 8 ++++---- keyboards/planck/keymaps/jeebak/keymap.c | 2 +- keyboards/planck/keymaps/jeebak/readme.md | 2 +- keyboards/planck/keymaps/jhenahan/keymap.c | 6 +++--- keyboards/planck/keymaps/khord/keymap.c | 8 ++++---- keyboards/planck/keymaps/pete/keymap.c | 8 ++++---- keyboards/planck/keymaps/premek/keymap.c | 8 ++++---- keyboards/planck/keymaps/pvc/keymap.c | 4 ++-- keyboards/planck/keymaps/sgoodwin/keymap.c | 6 +++--- keyboards/planck/keymaps/smt/keymap.c | 8 ++++---- keyboards/planck/keymaps/thermal_printer/keymap.c | 8 ++++---- keyboards/planck/keymaps/unicode/keymap.c | 8 ++++---- keyboards/planck/keymaps/xyverz/keymap.c | 8 ++++---- .../planck/keymaps/zach/zach_common_functions.c | 6 +++--- keyboards/preonic/keymaps/0xdec/keymap.c | 6 +++--- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 14 +++++++------- keyboards/preonic/keymaps/default/keymap.c | 8 ++++---- keyboards/preonic/keymaps/jacwib/keymap.c | 6 +++--- keyboards/preonic/keymaps/kinesis/keymap.c | 2 +- keyboards/preonic/keymaps/smt/keymap.c | 8 ++++---- keyboards/preonic/keymaps/xyverz/keymap.c | 8 ++++---- .../preonic/keymaps/zach/zach_common_functions.c | 6 +++--- keyboards/roadkit/keymaps/default/keymap.c | 4 ++-- keyboards/roadkit/keymaps/singles/keymap.c | 6 +++--- keyboards/satan/keymaps/smt/keymap.c | 8 ++++---- keyboards/subatomic/keymaps/default/keymap.c | 8 ++++---- keyboards/tv44/keymaps/default/keymap.c | 8 ++++---- keyboards/tv44/keymaps/jeebak/keymap.c | 2 +- keyboards/tv44/keymaps/jeebak/readme.md | 2 +- keyboards/tv44/keymaps/smt/keymap.c | 8 ++++---- keyboards/tv44/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/vision_division/keymaps/default/keymap.c | 4 ++-- 58 files changed, 198 insertions(+), 198 deletions(-) diff --git a/keyboards/atomic/keymaps/pvc/keymap.c b/keyboards/atomic/keymaps/pvc/keymap.c index d10bfe3bfc..c324078dd9 100644 --- a/keyboards/atomic/keymaps/pvc/keymap.c +++ b/keyboards/atomic/keymaps/pvc/keymap.c @@ -255,7 +255,7 @@ float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); #endif /* AUDIO_ENABLE */ -void persistant_default_layer_set(uint16_t default_layer) +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); @@ -366,7 +366,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case MACRO_QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; case DVORMAC: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORMAC); + persistent_default_layer_set(1UL<<_DVORMAC); } return false; break; diff --git a/keyboards/atreus62/keymaps/xyverz/keymap.c b/keyboards/atreus62/keymaps/xyverz/keymap.c index 7b7c69f57a..67e66584a6 100644 --- a/keyboards/atreus62/keymaps/xyverz/keymap.c +++ b/keyboards/atreus62/keymaps/xyverz/keymap.c @@ -119,7 +119,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -128,25 +128,25 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; case WOW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_WOW); + persistent_default_layer_set(1UL<<_WOW); } return false; break; diff --git a/keyboards/clueboard/keymaps/smt/keymap.c b/keyboards/clueboard/keymaps/smt/keymap.c index 732086fb56..f097afaa8d 100644 --- a/keyboards/clueboard/keymaps/smt/keymap.c +++ b/keyboards/clueboard/keymaps/smt/keymap.c @@ -151,7 +151,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -160,19 +160,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c index 592f7654ba..47a5181dde 100644 --- a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c +++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c @@ -256,7 +256,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -266,25 +266,25 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { /* layout switcher */ case LAY_QWE: if (record->event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<<_DV); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/gh60/keymaps/xyverz/keymap.c b/keyboards/gh60/keymaps/xyverz/keymap.c index e83a7f5a32..6d1d8ab274 100644 --- a/keyboards/gh60/keymaps/xyverz/keymap.c +++ b/keyboards/gh60/keymaps/xyverz/keymap.c @@ -121,7 +121,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -131,17 +131,17 @@ 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); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/handwired/atreus50/keymaps/default/keymap.c b/keyboards/handwired/atreus50/keymaps/default/keymap.c index 77cf942c3a..739fb26850 100644 --- a/keyboards/handwired/atreus50/keymaps/default/keymap.c +++ b/keyboards/handwired/atreus50/keymaps/default/keymap.c @@ -147,7 +147,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -159,7 +159,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -168,7 +168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -177,7 +177,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/handwired/ortho5x13/keymaps/default/keymap.c b/keyboards/handwired/ortho5x13/keymaps/default/keymap.c index c1262a83d7..9710997472 100644 --- a/keyboards/handwired/ortho5x13/keymaps/default/keymap.c +++ b/keyboards/handwired/ortho5x13/keymaps/default/keymap.c @@ -186,7 +186,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -198,7 +198,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -207,7 +207,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -216,7 +216,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index d562c7bbf8..763fa5a27a 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -955,7 +955,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); #ifdef RGBSPS_ENABLE @@ -1134,14 +1134,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // layout switchers case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; #ifdef LAYOUT_DVORAK case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; @@ -1149,7 +1149,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef LAYOUT_COLEMAK case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -1157,7 +1157,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef LAYOUT_WORKMAN case WORKMAN: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_WORKMAN); + persistent_default_layer_set(1UL<<_WORKMAN); } return false; break; @@ -1165,7 +1165,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef LAYOUT_NORMAN case NORMAN: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_NORMAN); + persistent_default_layer_set(1UL<<_NORMAN); } return false; break; diff --git a/keyboards/hhkb/keymaps/smt/keymap.c b/keyboards/hhkb/keymaps/smt/keymap.c index a7ea54de80..484df851a5 100644 --- a/keyboards/hhkb/keymaps/smt/keymap.c +++ b/keyboards/hhkb/keymaps/smt/keymap.c @@ -146,7 +146,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -155,19 +155,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c index 8d26cbde12..0da114a1ed 100644 --- a/keyboards/jd45/keymaps/jeebak/keymap.c +++ b/keyboards/jd45/keymaps/jeebak/keymap.c @@ -283,7 +283,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/jd45/keymaps/jeebak/readme.md b/keyboards/jd45/keymaps/jeebak/readme.md index 2e45a46d9b..2165196148 100644 --- a/keyboards/jd45/keymaps/jeebak/readme.md +++ b/keyboards/jd45/keymaps/jeebak/readme.md @@ -8,7 +8,7 @@ needed, they will be mapped to home row keys. The `keymap.c` file will contain the exact changes. The diagrams in this README shows the highlights of the changes from the default mappings. -I also decided to change all calls to `persistant_default_layer_set()` to +I also decided to change all calls to `persistent_default_layer_set()` to `default_layer_set()` since this is my personal perference. ## Macros diff --git a/keyboards/kinesis/keymaps/xyverz/keymap.c b/keyboards/kinesis/keymaps/xyverz/keymap.c index 62f47773c7..fa181e0390 100644 --- a/keyboards/kinesis/keymaps/xyverz/keymap.c +++ b/keyboards/kinesis/keymaps/xyverz/keymap.c @@ -269,7 +269,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -279,17 +279,17 @@ 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); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/lets_split/keymaps/OLED_sample/keymap.c b/keyboards/lets_split/keymaps/OLED_sample/keymap.c index 493ebcd3f2..274f917e21 100644 --- a/keyboards/lets_split/keymaps/OLED_sample/keymap.c +++ b/keyboards/lets_split/keymaps/OLED_sample/keymap.c @@ -186,7 +186,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); bool TOG_STATUS = false; int RGB_current_mode; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -208,7 +208,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -217,7 +217,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -226,7 +226,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/hexwire/keymap.c b/keyboards/lets_split/keymaps/hexwire/keymap.c index fcf3cde758..245834204d 100644 --- a/keyboards/lets_split/keymaps/hexwire/keymap.c +++ b/keyboards/lets_split/keymaps/hexwire/keymap.c @@ -138,7 +138,7 @@ float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -150,7 +150,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -159,7 +159,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -168,7 +168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/i2c/keymap.c b/keyboards/lets_split/keymaps/i2c/keymap.c index 0d2d94b672..936312b2e0 100644 --- a/keyboards/lets_split/keymaps/i2c/keymap.c +++ b/keyboards/lets_split/keymaps/i2c/keymap.c @@ -147,7 +147,7 @@ float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -159,7 +159,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -168,7 +168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -177,7 +177,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/serial/keymap.c b/keyboards/lets_split/keymaps/serial/keymap.c index 0d2d94b672..936312b2e0 100644 --- a/keyboards/lets_split/keymaps/serial/keymap.c +++ b/keyboards/lets_split/keymaps/serial/keymap.c @@ -147,7 +147,7 @@ float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -159,7 +159,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -168,7 +168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -177,7 +177,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/smt/keymap.c b/keyboards/lets_split/keymaps/smt/keymap.c index c4bdb7ebc4..18d409f089 100644 --- a/keyboards/lets_split/keymaps/smt/keymap.c +++ b/keyboards/lets_split/keymaps/smt/keymap.c @@ -152,7 +152,7 @@ float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -164,7 +164,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -173,7 +173,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -182,7 +182,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/xyverz/keymap.c b/keyboards/lets_split/keymaps/xyverz/keymap.c index 216e946964..45edf78c87 100644 --- a/keyboards/lets_split/keymaps/xyverz/keymap.c +++ b/keyboards/lets_split/keymaps/xyverz/keymap.c @@ -141,7 +141,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -150,19 +150,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c index 4a15226386..621271f9f6 100644 --- a/keyboards/phantom/keymaps/xyverz/keymap.c +++ b/keyboards/phantom/keymaps/xyverz/keymap.c @@ -76,7 +76,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -86,17 +86,17 @@ 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); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/planck/keymaps/ab/keymap.c b/keyboards/planck/keymaps/ab/keymap.c index 8e1d28a65a..f3a9333e04 100644 --- a/keyboards/planck/keymaps/ab/keymap.c +++ b/keyboards/planck/keymaps/ab/keymap.c @@ -80,8 +80,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } }; -// Set a layer persistantly. -void persistant_default_layer_set(uint16_t default_layer) { +// Set a layer persistently. +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c index 33929cb3af..975017161b 100644 --- a/keyboards/planck/keymaps/dbroqua/keymap.c +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -149,7 +149,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -161,7 +161,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c index d149019fed..61275cb26a 100644 --- a/keyboards/planck/keymaps/default/keymap.c +++ b/keyboards/planck/keymaps/default/keymap.c @@ -186,7 +186,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -198,7 +198,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -207,7 +207,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -216,7 +216,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/planck/keymaps/espynn/keymap.c b/keyboards/planck/keymaps/espynn/keymap.c index a24ad9d485..feb9623314 100644 --- a/keyboards/planck/keymaps/espynn/keymap.c +++ b/keyboards/planck/keymaps/espynn/keymap.c @@ -88,8 +88,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } }; -// Set a layer persistantly. -void persistant_default_layer_set(uint16_t default_layer) { +// Set a layer persistently. +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/planck/keymaps/experimental/keymap.c b/keyboards/planck/keymaps/experimental/keymap.c index 569dbcc8aa..17fad784e7 100644 --- a/keyboards/planck/keymaps/experimental/keymap.c +++ b/keyboards/planck/keymaps/experimental/keymap.c @@ -204,7 +204,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -217,7 +217,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } break; return false; @@ -226,7 +226,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } break; return false; @@ -235,7 +235,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } break; return false; diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 503976fa28..6a649f2c8e 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -164,7 +164,7 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -176,7 +176,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_workman, false, 0); #endif - persistant_default_layer_set(1UL<<_WORKMAN); + persistent_default_layer_set(1UL<<_WORKMAN); } return false; break; @@ -185,7 +185,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -200,7 +200,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { keymap_config.raw = eeconfig_read_keymap(); keymap_config.nkro = 1; eeconfig_update_keymap(keymap_config.raw); - persistant_default_layer_set(1UL<<_PLOVER); + persistent_default_layer_set(1UL<<_PLOVER); } return false; break; diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index cb7ccb5884..7b9a68113c 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -270,7 +270,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index e1dd1dca51..7c4bf908c6 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -6,7 +6,7 @@ needed, they will be mapped to home row keys. The `keymap.c` file will contain the exact changes. The diagrams in this README shows the highlights of the changes from the default mappings. -I also decided to change all calls to `persistant_default_layer_set()` to +I also decided to change all calls to `persistent_default_layer_set()` to `default_layer_set()` since this is my personal perference. ## Macros diff --git a/keyboards/planck/keymaps/jhenahan/keymap.c b/keyboards/planck/keymaps/jhenahan/keymap.c index 2bda4b6956..bf9735be8e 100644 --- a/keyboards/planck/keymaps/jhenahan/keymap.c +++ b/keyboards/planck/keymaps/jhenahan/keymap.c @@ -183,7 +183,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -195,7 +195,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_workman, false, 0); #endif - persistant_default_layer_set(1UL<<_WORKMAN); + persistent_default_layer_set(1UL<<_WORKMAN); } return false; break; @@ -212,7 +212,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index e371e5b70b..f9fa7318a0 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -213,7 +213,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -251,7 +251,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -260,7 +260,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -269,7 +269,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/planck/keymaps/pete/keymap.c b/keyboards/planck/keymaps/pete/keymap.c index 38275b4030..d991bece13 100644 --- a/keyboards/planck/keymaps/pete/keymap.c +++ b/keyboards/planck/keymaps/pete/keymap.c @@ -143,7 +143,7 @@ float goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -156,7 +156,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } break; case _COLEMAK: @@ -164,7 +164,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } break; case _DVORAK: @@ -172,7 +172,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } break; case _LOWER: diff --git a/keyboards/planck/keymaps/premek/keymap.c b/keyboards/planck/keymaps/premek/keymap.c index 9b212ab259..0eb35a9f87 100644 --- a/keyboards/planck/keymaps/premek/keymap.c +++ b/keyboards/planck/keymaps/premek/keymap.c @@ -100,7 +100,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -112,7 +112,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -121,7 +121,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -130,7 +130,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/planck/keymaps/pvc/keymap.c b/keyboards/planck/keymaps/pvc/keymap.c index 6ad95832d2..741e8e6504 100644 --- a/keyboards/planck/keymaps/pvc/keymap.c +++ b/keyboards/planck/keymaps/pvc/keymap.c @@ -233,7 +233,7 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif /* AUDIO_ENABLE */ -void persistant_default_layer_set(uint16_t default_layer) +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); @@ -344,7 +344,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case MACRO_QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<event.pressed){ - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif @@ -209,7 +209,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case SWCOLE: if(record->event.pressed){ - persistant_default_layer_set(1UL<<_SWCOLE); + persistent_default_layer_set(1UL<<_SWCOLE); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_swcole, false, 0); #endif diff --git a/keyboards/preonic/keymaps/0xdec/keymap.c b/keyboards/preonic/keymaps/0xdec/keymap.c index 6c4b8a6fab..2f06c8c314 100644 --- a/keyboards/preonic/keymaps/0xdec/keymap.c +++ b/keyboards/preonic/keymaps/0xdec/keymap.c @@ -134,7 +134,7 @@ void matrix_init_user(void) { #endif } -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -146,7 +146,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } break; case GAME: @@ -154,7 +154,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_game, false, STACCATO); #endif - persistant_default_layer_set(1UL<<_GAME); + persistent_default_layer_set(1UL<<_GAME); } break; case RAISE: diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index a500a36494..7b5be07344 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -225,7 +225,7 @@ float tone_colemak[][2] = SONG(COLEMAK_SOUND); float goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -238,7 +238,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } break; case _COLEMAK: @@ -246,7 +246,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } break; case _DVORAK: @@ -254,7 +254,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } break; case _GAME: @@ -262,7 +262,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_GAME); + persistent_default_layer_set(1UL<<_GAME); } break; case _NUMPAD: @@ -270,7 +270,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_NUMPAD); + persistent_default_layer_set(1UL<<_NUMPAD); } break; case _ARROW: @@ -278,7 +278,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_LOWER); + persistent_default_layer_set(1UL<<_LOWER); } break; case _LOWER: diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 3313af945a..2516a726bd 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -180,7 +180,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -192,7 +192,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -201,7 +201,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -210,7 +210,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 72ccc86cd2..09f465de1e 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -196,7 +196,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -205,7 +205,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -231,7 +231,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case MQWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_MQWERTY); + persistent_default_layer_set(1UL<<_MQWERTY); } return false; break; diff --git a/keyboards/preonic/keymaps/kinesis/keymap.c b/keyboards/preonic/keymaps/kinesis/keymap.c index 9691be91d9..214f51a46f 100644 --- a/keyboards/preonic/keymaps/kinesis/keymap.c +++ b/keyboards/preonic/keymaps/kinesis/keymap.c @@ -82,7 +82,7 @@ float tone_startup[][2] = { float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/preonic/keymaps/smt/keymap.c b/keyboards/preonic/keymaps/smt/keymap.c index a10deb7500..5972e918cf 100644 --- a/keyboards/preonic/keymaps/smt/keymap.c +++ b/keyboards/preonic/keymaps/smt/keymap.c @@ -183,7 +183,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -195,7 +195,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -204,7 +204,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -213,7 +213,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/preonic/keymaps/xyverz/keymap.c b/keyboards/preonic/keymaps/xyverz/keymap.c index c8457cda1f..1275aa18fc 100644 --- a/keyboards/preonic/keymaps/xyverz/keymap.c +++ b/keyboards/preonic/keymaps/xyverz/keymap.c @@ -177,7 +177,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -189,7 +189,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -198,7 +198,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -207,7 +207,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/preonic/keymaps/zach/zach_common_functions.c b/keyboards/preonic/keymaps/zach/zach_common_functions.c index 2c47b22896..0b1dd7619c 100644 --- a/keyboards/preonic/keymaps/zach/zach_common_functions.c +++ b/keyboards/preonic/keymaps/zach/zach_common_functions.c @@ -16,7 +16,7 @@ void tap(uint16_t keycode){ unregister_code(keycode); }; -void persistant_default_layer_set(uint16_t default_layer){ +void persistent_default_layer_set(uint16_t default_layer){ eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); }; @@ -200,7 +200,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case COLEMAK: if(record->event.pressed){ - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif @@ -209,7 +209,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case SWCOLE: if(record->event.pressed){ - persistant_default_layer_set(1UL<<_SWCOLE); + persistent_default_layer_set(1UL<<_SWCOLE); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_swcole, false, 0); #endif diff --git a/keyboards/roadkit/keymaps/default/keymap.c b/keyboards/roadkit/keymaps/default/keymap.c index 3fc18915a8..048e807481 100644 --- a/keyboards/roadkit/keymaps/default/keymap.c +++ b/keyboards/roadkit/keymaps/default/keymap.c @@ -31,7 +31,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -41,7 +41,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case _NP: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_NP); + persistent_default_layer_set(1UL<<_NP); } break; } diff --git a/keyboards/roadkit/keymaps/singles/keymap.c b/keyboards/roadkit/keymaps/singles/keymap.c index 5ee7a752b8..1c6aa7883f 100644 --- a/keyboards/roadkit/keymaps/singles/keymap.c +++ b/keyboards/roadkit/keymaps/singles/keymap.c @@ -38,7 +38,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -48,12 +48,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case _L1: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_L1); + persistent_default_layer_set(1UL<<_L1); } break; case _NP: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_NP); + persistent_default_layer_set(1UL<<_NP); } break; } diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c index d90849914e..bf919da87c 100644 --- a/keyboards/satan/keymaps/smt/keymap.c +++ b/keyboards/satan/keymaps/smt/keymap.c @@ -111,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -120,19 +120,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/subatomic/keymaps/default/keymap.c b/keyboards/subatomic/keymaps/default/keymap.c index 628ade9b61..f4aa50eba1 100644 --- a/keyboards/subatomic/keymaps/default/keymap.c +++ b/keyboards/subatomic/keymaps/default/keymap.c @@ -177,7 +177,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -189,7 +189,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -198,7 +198,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -207,7 +207,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c index b9fe33a7ce..b4a32d6f6e 100644 --- a/keyboards/tv44/keymaps/default/keymap.c +++ b/keyboards/tv44/keymaps/default/keymap.c @@ -69,7 +69,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -79,17 +79,17 @@ 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); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/tv44/keymaps/jeebak/keymap.c b/keyboards/tv44/keymaps/jeebak/keymap.c index 1bb1015c36..0d0c07164a 100644 --- a/keyboards/tv44/keymaps/jeebak/keymap.c +++ b/keyboards/tv44/keymaps/jeebak/keymap.c @@ -285,7 +285,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/tv44/keymaps/jeebak/readme.md b/keyboards/tv44/keymaps/jeebak/readme.md index 43d20958a6..f781d55558 100644 --- a/keyboards/tv44/keymaps/jeebak/readme.md +++ b/keyboards/tv44/keymaps/jeebak/readme.md @@ -8,7 +8,7 @@ needed, they will be mapped to home row keys. The `keymap.c` file will contain the exact changes. The diagrams in this README shows the highlights of the changes from the default mappings. -I also decided to change all calls to `persistant_default_layer_set()` to +I also decided to change all calls to `persistent_default_layer_set()` to `default_layer_set()` since this is my personal perference. ## Macros diff --git a/keyboards/tv44/keymaps/smt/keymap.c b/keyboards/tv44/keymaps/smt/keymap.c index 532e74de08..dfd6244668 100644 --- a/keyboards/tv44/keymaps/smt/keymap.c +++ b/keyboards/tv44/keymaps/smt/keymap.c @@ -171,7 +171,7 @@ ALT_T(BACKLIT), _______ , _______ , KC_MPLY , KC_MNXT , _____ /*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/ }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -180,19 +180,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/tv44/keymaps/xyverz/keymap.c b/keyboards/tv44/keymaps/xyverz/keymap.c index 3ff16de35f..d710d80240 100644 --- a/keyboards/tv44/keymaps/xyverz/keymap.c +++ b/keyboards/tv44/keymaps/xyverz/keymap.c @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -80,19 +80,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c index 3282761c0f..15ce688973 100644 --- a/keyboards/vision_division/keymaps/default/keymap.c +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -299,7 +299,7 @@ float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); #endif /* AUDIO_ENABLE */ -void persistant_default_layer_set(uint16_t default_layer) +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); @@ -427,7 +427,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case MACRO_QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL< Date: Fri, 12 May 2017 12:03:09 -0700 Subject: [PATCH 56/86] Colemak layout GH60 Satan --- keyboards/satan/keymaps/colemak/Makefile | 21 +++++ keyboards/satan/keymaps/colemak/keymap.c | 98 +++++++++++++++++++++++ keyboards/satan/keymaps/colemak/readme.md | 1 + 3 files changed, 120 insertions(+) create mode 100644 keyboards/satan/keymaps/colemak/Makefile create mode 100644 keyboards/satan/keymaps/colemak/keymap.c create mode 100644 keyboards/satan/keymaps/colemak/readme.md diff --git a/keyboards/satan/keymaps/colemak/Makefile b/keyboards/satan/keymaps/colemak/Makefile new file mode 100644 index 0000000000..2a7ff27793 --- /dev/null +++ b/keyboards/satan/keymaps/colemak/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/keymaps/colemak/keymap.c b/keyboards/satan/keymaps/colemak/keymap.c new file mode 100644 index 0000000000..ffb0d10c02 --- /dev/null +++ b/keyboards/satan/keymaps/colemak/keymap.c @@ -0,0 +1,98 @@ +#include "satan.h" + + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// 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 _BL 0 +#define _FL 1 + +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | + * `-----------------------------------------------------------' + */ +[_BL] = KEYMAP_ANSI( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, 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_LBRC, KC_RBRC,KC_BSLS, \ + KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, MO(_FL), KC_LGUI, KC_SPC, KC_RALT,KC_RGUI, MO(_FL),KC_RCTL), + + /* Keymap _FL: Function Layer + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | | RESET| + * |-----------------------------------------------------------| + * | | | | | | | | | | | |BL-|BL+|BL | + * |--------------------------------------------ΩΩ---------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | + * |-----------------------------------------------------------| + * | | | | | | | | | + * `-----------------------------------------------------------' + */ +[_FL] = KEYMAP_ANSI( + #ifdef RGBLIGHT_ENABLE + KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ + _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______, _______), + #else + KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \ + _______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_HOME,KC_PGDN,KC_PGUP, KC_END, BL_DEC, BL_INC,BL_TOGG, \ + KC_DEL, KC_VOLD,KC_MUTE,KC_VOLU,_______,_______,_______,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______), + #endif +}; + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} diff --git a/keyboards/satan/keymaps/colemak/readme.md b/keyboards/satan/keymaps/colemak/readme.md new file mode 100644 index 0000000000..59bd4d1244 --- /dev/null +++ b/keyboards/satan/keymaps/colemak/readme.md @@ -0,0 +1 @@ +# Colemak layout for GH60 Satan From 849ed5a6a03b14defa94a50b66169abac89b9c08 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sat, 13 May 2017 08:51:20 -0700 Subject: [PATCH 57/86] anti-ghost improvement for older keyboards with empty spots in matrix --- tmk_core/common/keyboard.c | 36 ++++++++++++++++++++++++++++++------ tmk_core/common/keyboard.h | 2 +- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index eac1f1dd81..93a066e574 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -64,20 +64,41 @@ along with this program. If not, see . #ifdef MATRIX_HAS_GHOST +static uint16_t matrix_ghost_check[MATRIX_ROWS]; static bool has_ghost_in_row(uint8_t row) { - matrix_row_t matrix_row = matrix_get_row(row); - // No ghost exists when less than 2 keys are down on the row - if (((matrix_row - 1) & matrix_row) == 0) + matrix_row_t matrix_row = (matrix_get_row(row) & matrix_ghost_check[row]); + /* No ghost exists when less than 2 keys are down on the row. + If there are "active" blanks in the matrix, the key can't be pressed by the user, + there is no doubt as to which keys are really being pressed. + The ghosts will be ignored, they are KC_NO. */ + if (((matrix_row - 1) & matrix_row) == 0){ return false; - - // Ghost occurs when the row shares column line with other row + } + // Ghost occurs when the row shares column line with other row, blanks in the matrix don't matter + // If there are more than two real keys pressed and they match another row's real keys, the row will be ignored. for (uint8_t i=0; i < MATRIX_ROWS; i++) { - if (i != row && (matrix_get_row(i) & matrix_row)) + if (i != row && __builtin_popcount((matrix_get_row(i) & matrix_ghost_check[i]) & matrix_row) > 1){ return true; + } } return false; + return false; } + +extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; +// bit map of true keys and empty spots in matrix, each row is reversed +void make_ghost_check_array(){ + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + if (keymaps[0][row][col] & 0xFF) + matrix_ghost_check[row] |= 1< Date: Sat, 13 May 2017 18:25:08 +0000 Subject: [PATCH 58/86] Updates readme.md Auto commit by GitBook Editor --- readme.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index f7bf14b6ab..cb12a21177 100644 --- a/readme.md +++ b/readme.md @@ -2,9 +2,9 @@ [![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) [![Gitter](https://badges.gitter.im/qmk/qmk_firmware.svg)](https://gitter.im/qmk/qmk_firmware?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). +This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). -## Official website (currently under construction with the move to the wiki) +## Official website \(currently under construction with the move to the wiki\) For an easy-to-read version of this document and the repository, check out [http://qmk.fm](http://qmk.fm). Nicely formatted keyboard and keymap listings are also available there, along with the ability to download .hex files instead of having to setup a build environment and compile them. @@ -21,7 +21,7 @@ The project also includes community support for [lots of other keyboards](/keybo ## Maintainers -QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). This repo used to be a fork of [TMK](https://github.com/tmk/tmk_keyboard), and we are incredibly grateful for his founding contributions to the firmware. We've had to break the fork due to purely technical reasons - it simply became too different over time, and we've had to start refactoring some of the basic bits and pieces. We are huge fans of TMK and Hasu :) +QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). This repo used to be a fork of [TMK](https://github.com/tmk/tmk_keyboard), and we are incredibly grateful for his founding contributions to the firmware. We've had to break the fork due to purely technical reasons - it simply became too different over time, and we've had to start refactoring some of the basic bits and pieces. We are huge fans of TMK and Hasu :\) This documentation is edited and maintained by Erez Zukerman of ErgoDox EZ. If you spot any typos or inaccuracies, please [open an issue](https://github.com/qmk/qmk_firmware/issues/new). @@ -31,9 +31,12 @@ The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/j This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest: -* [**The Wiki**](https://github.com/qmk/qmk_firmware/wiki) - the entirety of the readme has been moved here +* [**The Wiki**](https://github.com/qmk/qmk_firmware/wiki) - the entire readme has been moved here * The readme for your own keyboard: This is found under `keyboards//`. So for the ErgoDox, it's [here](keyboards/ergodox/); for the Planck, it's [here](keyboards/planck/) and so on. * The list of possible keycodes you can use in your keymap is actually spread out in a few different places: * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. - * [quantum/quantum_keycodes.h](quantum/quantum_keycodes.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `quantum_keycodes.h` is where they're actually defined. + * [quantum/quantum\_keycodes.h](quantum/quantum_keycodes.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `quantum_keycodes.h` is where they're actually defined. * The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally. + + + From b9895771edb4cca2bb17f5872a0e6ee068c91500 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sat, 13 May 2017 13:19:28 -0700 Subject: [PATCH 59/86] improvements --- tmk_core/common/keyboard.c | 39 ++++++++++++++++---------------------- tmk_core/common/keyboard.h | 1 - 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 93a066e574..116914e1ae 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -62,12 +62,21 @@ along with this program. If not, see . #endif - #ifdef MATRIX_HAS_GHOST -static uint16_t matrix_ghost_check[MATRIX_ROWS]; +extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; +// bit map of true keys and empty spots in matrix, each row is reversed +static uint16_t get_row_ghost_check(uint16_t row){ + for (int col = 0; col < MATRIX_COLS; col++) { + if (keymaps[0][row][col]) + row &= 1< 1){ + if (i != row && __builtin_popcount( + get_row_ghost_check(matrix_get_row(i)) & matrix_row + ) > 1){ return true; } } return false; - return false; } - -extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; -// bit map of true keys and empty spots in matrix, each row is reversed -void make_ghost_check_array(){ - for (int row = 0; row < MATRIX_ROWS; row++) { - for (int col = 0; col < MATRIX_COLS; col++) { - if (keymaps[0][row][col] & 0xFF) - matrix_ghost_check[row] |= 1< Date: Sat, 13 May 2017 16:57:23 -0700 Subject: [PATCH 60/86] a bit smaller --- tmk_core/common/keyboard.c | 53 +++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 116914e1ae..d1794c8878 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -63,40 +63,54 @@ along with this program. If not, see . #ifdef MATRIX_HAS_GHOST -extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; -// bit map of true keys and empty spots in matrix, each row is reversed -static uint16_t get_row_ghost_check(uint16_t row){ +static uint16_t matrix_ghost_check[MATRIX_ROWS]; + +static inline bool countones(uint16_t data) +{ + int count = 0; for (int col = 0; col < MATRIX_COLS; col++) { - if (keymaps[0][row][col]) - row &= 1< 1){ + return true; } - return row; + return false; } -static bool has_ghost_in_row(uint8_t row) +static inline bool has_ghost_in_row(uint8_t row, uint16_t rowdata) { - matrix_row_t matrix_row = (get_row_ghost_check(matrix_get_row(row))); + rowdata &= matrix_ghost_check[row]; + if (((rowdata - 1) & rowdata) == 0){ + return false; + } /* No ghost exists when less than 2 keys are down on the row. If there are "active" blanks in the matrix, the key can't be pressed by the user, there is no doubt as to which keys are really being pressed. The ghosts will be ignored, they are KC_NO. */ - if (((matrix_row - 1) & matrix_row) == 0){ - return false; - } // Ghost occurs when the row shares column line with other row, blanks in the matrix don't matter - // If there are two or more real keys pressed and they match another row's real keys, the row will be ignored. + // If there are more than two real keys pressed and they match another row's real keys, the row will be ignored. for (uint8_t i=0; i < MATRIX_ROWS; i++) { - if (i != row && __builtin_popcount( - get_row_ghost_check(matrix_get_row(i)) & matrix_row - ) > 1){ + if (i != row && countones((matrix_get_row(i) & matrix_ghost_check[i]) & rowdata)){ return true; } } return false; } + +extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; +// bit map of true keys and empty spots in matrix, each row is reversed +static inline void make_ghost_check_array(void){ + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + if (pgm_read_byte(&keymaps[0][row][col]) != 0) + matrix_ghost_check[row] |= 1< Date: Sat, 13 May 2017 17:01:27 -0700 Subject: [PATCH 61/86] a bit smaller --- tmk_core/common/keyboard.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index d1794c8878..0116053fbe 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -161,7 +161,7 @@ void keyboard_task(void) { static matrix_row_t matrix_prev[MATRIX_ROWS]; #ifdef MATRIX_HAS_GHOST - static matrix_row_t matrix_ghost[MATRIX_ROWS]; + // static matrix_row_t matrix_ghost[MATRIX_ROWS]; #endif static uint8_t led_status = 0; matrix_row_t matrix_row = 0; @@ -178,13 +178,13 @@ void keyboard_task(void) * debugging. But don't update matrix_prev until un-ghosted, or * the last key would be lost. */ - if (debug_matrix && matrix_ghost[r] != matrix_row) { - matrix_print(); - } - matrix_ghost[r] = matrix_row; + //if (debug_matrix && matrix_ghost[r] != matrix_row) { + // matrix_print(); + //} + //matrix_ghost[r] = matrix_row; continue; } - matrix_ghost[r] = matrix_row; + //matrix_ghost[r] = matrix_row; #endif if (debug_matrix) matrix_print(); for (uint8_t c = 0; c < MATRIX_COLS; c++) { From 7b7e285a984a5bf1f7f38f1b5846811dfcb3a185 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sat, 13 May 2017 17:22:38 -0700 Subject: [PATCH 62/86] should be using matrix_row_t --- tmk_core/common/keyboard.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 0116053fbe..24cc28892c 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -63,9 +63,9 @@ along with this program. If not, see . #ifdef MATRIX_HAS_GHOST -static uint16_t matrix_ghost_check[MATRIX_ROWS]; +static matrix_row_t matrix_ghost_check[MATRIX_ROWS]; -static inline bool countones(uint16_t data) +static inline bool countones(matrix_row_t data) { int count = 0; for (int col = 0; col < MATRIX_COLS; col++) { @@ -77,7 +77,7 @@ static inline bool countones(uint16_t data) } return false; } -static inline bool has_ghost_in_row(uint8_t row, uint16_t rowdata) +static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) { rowdata &= matrix_ghost_check[row]; if (((rowdata - 1) & rowdata) == 0){ From 37f6f92765513cd66c92178f48785d492eb06b89 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sat, 13 May 2017 18:24:43 -0700 Subject: [PATCH 63/86] faster and less bits --- tmk_core/common/keyboard.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 24cc28892c..d8b5dc4031 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -63,14 +63,25 @@ along with this program. If not, see . #ifdef MATRIX_HAS_GHOST -static matrix_row_t matrix_ghost_check[MATRIX_ROWS]; +extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; +static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ + matrix_row_t out = 0; + for (int col = 0; col < MATRIX_COLS; col++) { + if (pgm_read_byte(&keymaps[0][row][col]) && ((rowdata & (1< 1){ return true; @@ -79,7 +90,7 @@ static inline bool countones(matrix_row_t data) } static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) { - rowdata &= matrix_ghost_check[row]; + rowdata = get_real_keys(row, rowdata); if (((rowdata - 1) & rowdata) == 0){ return false; } @@ -90,24 +101,13 @@ static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) // Ghost occurs when the row shares column line with other row, blanks in the matrix don't matter // If there are more than two real keys pressed and they match another row's real keys, the row will be ignored. for (uint8_t i=0; i < MATRIX_ROWS; i++) { - if (i != row && countones((matrix_get_row(i) & matrix_ghost_check[i]) & rowdata)){ + if (i != row && countones(get_real_keys(i, matrix_get_row(i)) & rowdata)){ return true; } } return false; } -extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; -// bit map of true keys and empty spots in matrix, each row is reversed -static inline void make_ghost_check_array(void){ - for (int row = 0; row < MATRIX_ROWS; row++) { - for (int col = 0; col < MATRIX_COLS; col++) { - if (pgm_read_byte(&keymaps[0][row][col]) != 0) - matrix_ghost_check[row] |= 1< Date: Sat, 13 May 2017 19:07:05 -0700 Subject: [PATCH 64/86] faster and less bits... again --- tmk_core/common/keyboard.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index d8b5dc4031..fa17ffca25 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -74,20 +74,19 @@ static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ return out; } - -static inline bool countones(matrix_row_t data) +static inline bool countones(matrix_row_t row) { int count = 0; - for (int col = 0; col < MATRIX_COLS; col++) { - if (data & (1< 0){ + count += 1; + row &= row-1; } if (count > 1){ return true; } return false; } + static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) { rowdata = get_real_keys(row, rowdata); From b9b2244b8275066d1226fba0fb75747a194f0553 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sun, 14 May 2017 08:01:01 -0700 Subject: [PATCH 65/86] faster, less bits :) --- tmk_core/common/keyboard.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index fa17ffca25..20b867285e 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -76,15 +76,8 @@ static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ static inline bool countones(matrix_row_t row) { - int count = 0; - while (row > 0){ - count += 1; - row &= row-1; - } - if (count > 1){ - return true; - } - return false; + row &= row-1; + return row; } static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) From 84395e8a0427bcb51c4ef4ff24c7901d1fbb0764 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sun, 14 May 2017 09:36:50 -0700 Subject: [PATCH 66/86] whoops --- tmk_core/common/keyboard.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 20b867285e..a3fe559f35 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -67,7 +67,7 @@ extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ matrix_row_t out = 0; for (int col = 0; col < MATRIX_COLS; col++) { - if (pgm_read_byte(&keymaps[0][row][col]) && ((rowdata & (1< Date: Sun, 14 May 2017 15:36:44 -0700 Subject: [PATCH 67/86] added comments and made function name clearer --- tmk_core/common/keyboard.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index a3fe559f35..97a8f1cd8c 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -61,39 +61,45 @@ along with this program. If not, see . # include "visualizer/visualizer.h" #endif - #ifdef MATRIX_HAS_GHOST extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ matrix_row_t out = 0; - for (int col = 0; col < MATRIX_COLS; col++) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + //read each key in the row data and check if the keymap defines it as a real key if (pgm_read_byte(&keymaps[0][row][col]) && (rowdata & (1< Date: Mon, 15 May 2017 00:10:25 -0400 Subject: [PATCH 68/86] nikchi flake --- .../frosty_flake/keymaps/nikchi/Makefile | 23 +++++ .../frosty_flake/keymaps/nikchi/config.h | 23 +++++ .../frosty_flake/keymaps/nikchi/keymap.c | 85 +++++++++++++++++++ .../frosty_flake/keymaps/nikchi/readme.md | 24 ++++++ 4 files changed, 155 insertions(+) create mode 100644 keyboards/frosty_flake/keymaps/nikchi/Makefile create mode 100644 keyboards/frosty_flake/keymaps/nikchi/config.h create mode 100644 keyboards/frosty_flake/keymaps/nikchi/keymap.c create mode 100644 keyboards/frosty_flake/keymaps/nikchi/readme.md diff --git a/keyboards/frosty_flake/keymaps/nikchi/Makefile b/keyboards/frosty_flake/keymaps/nikchi/Makefile new file mode 100644 index 0000000000..377a25c281 --- /dev/null +++ b/keyboards/frosty_flake/keymaps/nikchi/Makefile @@ -0,0 +1,23 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +UNICODEMAP_ENABLE = no # unicodemap +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +TAP_DANCE_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/frosty_flake/keymaps/nikchi/config.h b/keyboards/frosty_flake/keymaps/nikchi/config.h new file mode 100644 index 0000000000..45825781df --- /dev/null +++ b/keyboards/frosty_flake/keymaps/nikchi/config.h @@ -0,0 +1,23 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define TAPPING_TERM 200 +#define LEADER_TIMEOUT 400 + +#define DISABLE_SPACE_CADET_ROLLOVER + +#define UNICODE_TYPE_DELAY 0 + +#define LSPO_KEY KC_9 +#define RSPC_KEY KC_0 + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_WHEEL_DELAY 0 +// place overrides here + +#endif diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c new file mode 100644 index 0000000000..955891eb21 --- /dev/null +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -0,0 +1,85 @@ +#include "frosty_flake.h" +#define _______ KC_TRNS + +//Tap Dance Declarations +enum { + TD_CTCPS = 0 +}; + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for CTRL, twice for Caps Lock + [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS) +// Other declarations would go here, separated by commas, if you have them +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. +{ + switch(id) { + case 0: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(1), D(LGUI), D(LCTL), D(D), U(LGUI), U(LCTL), U(D), END ); // NEW DESKTOP + } + break; + case 1: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(1), D(LGUI), D(LCTL), D(LEFT), U(LGUI), U(LCTL), U(LEFT), END ); // LEFT DESKTOP + } + break; + case 2: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(1), D(LGUI), D(LCTL), D(RGHT), U(LGUI), U(LCTL), U(RGHT), END ); // RIGHT DESKTOP + } + break; + case 3: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(1), D(LGUI), D(LCTL), D(F4), U(LGUI), U(LCTL), U(F4), END ); // CLOSE DESKTOP + } + break; + } + return MACRO_NONE; +}; + +LEADER_EXTERNS(); + +void matrix_scan_user(void) { + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_TWO_KEYS(KC_A, KC_A) { + register_code(KC_LCTL); + register_code(KC_A); + unregister_code(KC_A); + register_code(KC_C); + unregister_code(KC_C); + unregister_code(KC_LCTL); + } + + } +} + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP(\ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSPO,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), +[1] = KEYMAP(\ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2),_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), +[2] = KEYMAP(\ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, KC_D, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, _______,_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), +}; diff --git a/keyboards/frosty_flake/keymaps/nikchi/readme.md b/keyboards/frosty_flake/keymaps/nikchi/readme.md new file mode 100644 index 0000000000..b6a89e8dde --- /dev/null +++ b/keyboards/frosty_flake/keymaps/nikchi/readme.md @@ -0,0 +1,24 @@ +# The Nikchi's keymap for frosty_flake + +### FEATURING +-SPACE CADET +-Caps Lock is now LCTRL +-LCTRL is Tap(LCTRL, Caps Lock) + +### LEADER KEY - RALT +COMBOS +-a,s => Select All, Copy + + + +### FN REBINDS for Windows +``` + [W] [New Desktop] +[A][S][D] [Left Desk][Delete Desk][Right Desk] + +[Ins][Hom][PUp] [RW][PP][FF] +[Del][End][PDn] [MU][VD][VU] + +Arrows are Mouskeys, left three mods are clicks + +``` \ No newline at end of file From b2b72058e5a29dff3f28761c2d0bb5f035c2f710 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Mon, 15 May 2017 00:12:04 -0400 Subject: [PATCH 69/86] change readme --- keyboards/frosty_flake/keymaps/nikchi/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/readme.md b/keyboards/frosty_flake/keymaps/nikchi/readme.md index b6a89e8dde..0b01f9dbf8 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/readme.md +++ b/keyboards/frosty_flake/keymaps/nikchi/readme.md @@ -7,7 +7,7 @@ ### LEADER KEY - RALT COMBOS --a,s => Select All, Copy +-a,a => Select All, Copy From eb660ef2184565c6bb69f1f67f7af8918d15688f Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Mon, 15 May 2017 01:52:45 -0400 Subject: [PATCH 70/86] emoji support but --- .../frosty_flake/keymaps/nikchi/Makefile | 2 +- .../frosty_flake/keymaps/nikchi/keymap.c | 99 ++++++++++++++----- keyboards/frosty_flake/rules.mk | 5 +- quantum/process_keycode/process_unicodemap.c | 2 +- 4 files changed, 78 insertions(+), 30 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/Makefile b/keyboards/frosty_flake/keymaps/nikchi/Makefile index 377a25c281..ad86e82d20 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/Makefile +++ b/keyboards/frosty_flake/keymaps/nikchi/Makefile @@ -12,7 +12,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode -UNICODEMAP_ENABLE = no # unicodemap +UNICODEMAP_ENABLE = yes # unicodemap BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index 955891eb21..58964d1e39 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -1,4 +1,9 @@ #include "frosty_flake.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "process_unicode.h" +#include "quantum.h" + #define _______ KC_TRNS //Tap Dance Declarations @@ -13,25 +18,32 @@ qk_tap_dance_action_t tap_dance_actions[] = { // Other declarations would go here, separated by commas, if you have them }; +enum my_macros { + NEWDESK = 0, + LEFTDESK, + RIGHTDESK, + CLOSEDESK +}; + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. { switch(id) { - case 0: // this would trigger when you hit a key mapped as M(0) + case NEWDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { return MACRO( I(1), D(LGUI), D(LCTL), D(D), U(LGUI), U(LCTL), U(D), END ); // NEW DESKTOP } break; - case 1: // this would trigger when you hit a key mapped as M(0) + case LEFTDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { return MACRO( I(1), D(LGUI), D(LCTL), D(LEFT), U(LGUI), U(LCTL), U(LEFT), END ); // LEFT DESKTOP } break; - case 2: // this would trigger when you hit a key mapped as M(0) + case RIGHTDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { return MACRO( I(1), D(LGUI), D(LCTL), D(RGHT), U(LGUI), U(LCTL), U(RGHT), END ); // RIGHT DESKTOP } break; - case 3: // this would trigger when you hit a key mapped as M(0) + case CLOSEDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { return MACRO( I(1), D(LGUI), D(LCTL), D(F4), U(LGUI), U(LCTL), U(F4), END ); // CLOSE DESKTOP } @@ -40,25 +52,36 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // return MACRO_NONE; }; -LEADER_EXTERNS(); - -void matrix_scan_user(void) { - LEADER_DICTIONARY() { - leading = false; - leader_end(); - - SEQ_TWO_KEYS(KC_A, KC_A) { - register_code(KC_LCTL); - register_code(KC_A); - unregister_code(KC_A); - register_code(KC_C); - unregister_code(KC_C); - unregister_code(KC_LCTL); - } - } -} +enum unicode_name { + THINK, // thinking face 🤔 + GRIN, // grinning face 😊 + BBB, // dat B 🅱 + POO, // poop 💩 + HUNDR, // 100 💯 + SMRK, // smirk 😏 + WEARY, // good shit 😩 + EGGPL, // EGGPLANT 🍆 + WATER, // wet 💦 + LIT, // fire 🔥 + UNAMU, // unamused 😒 + SNEK // snke 🐍 +}; +const uint32_t PROGMEM unicode_map[] = { + [THINK] = 0x1F914, + [GRIN] = 0x1F600, + [BBB] = 0x1F171, + [POO] = 0x1F4A9, + [HUNDR] = 0x1F4AF, + [SMRK] = 0x1F60F, + [WEARY] = 0x1F629, + [EGGPL] = 0x1F346, + [WATER] = 0x1F4A6, + [LIT] = 0x1F525, + [UNAMU] = 0x1F612, + [SNEK] = 0x1F40D + }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP(\ @@ -70,10 +93,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), [1] = KEYMAP(\ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ - KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ - KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ - KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_GRV, X(GRIN),X(THINK),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, M(0), KC_E, KC_R,X(EGGPL),X(WATER), KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, M(1), M(3), M(2), KC_F, X(LIT), X(SNEK), KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, X(HUNDR), X(BBB), X(POO), KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2),_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), [2] = KEYMAP(\ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ @@ -81,5 +104,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ KC_LCTL, KC_D, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ - KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, _______,_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), + KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, _______, _______, KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), +}; + +LEADER_EXTERNS(); + +void matrix_scan_user(void) { + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_TWO_KEYS(KC_A, KC_A) { + register_code(KC_LCTL); + register_code(KC_A); + unregister_code(KC_A); + register_code(KC_C); + unregister_code(KC_C); + unregister_code(KC_LCTL); + } + + } +} + +void matrix_init_user(void) { + _delay_ms(500); + set_unicode_input_mode(UC_WINC); }; diff --git a/keyboards/frosty_flake/rules.mk b/keyboards/frosty_flake/rules.mk index dd2f4b6eec..8c59241d42 100644 --- a/keyboards/frosty_flake/rules.mk +++ b/keyboards/frosty_flake/rules.mk @@ -54,8 +54,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work @@ -63,6 +63,7 @@ NKRO_ENABLE ?= no # USB Nkey Rollover BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= no # Unicode +UNICODEMAP_ENABLE ?= yes BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE ?= no # Audio output on port C6 FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches diff --git a/quantum/process_keycode/process_unicodemap.c b/quantum/process_keycode/process_unicodemap.c index 0227fbdd7b..75f35112b1 100644 --- a/quantum/process_keycode/process_unicodemap.c +++ b/quantum/process_keycode/process_unicodemap.c @@ -49,7 +49,7 @@ bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { const uint32_t* map = unicode_map; uint16_t index = keycode - QK_UNICODE_MAP; - uint32_t code = pgm_read_dword_far(&map[index]); + uint32_t code = pgm_read_dword(&map[index]); if (code > 0xFFFF && code <= 0x10ffff && input_mode == UC_OSX) { // Convert to UTF-16 surrogate pair code -= 0x10000; From 5d965a8d416cef48b17fc0acb6d35370d40ffbff Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Mon, 15 May 2017 02:19:50 -0400 Subject: [PATCH 71/86] emojis and reorg --- .../frosty_flake/keymaps/nikchi/keymap.c | 73 ++++++++++++------- 1 file changed, 45 insertions(+), 28 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index 58964d1e39..a764e7e9d6 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -6,16 +6,30 @@ #define _______ KC_TRNS +void tap(uint16_t keycode){ + register_code(keycode); + unregister_code(keycode); +}; + + //Tap Dance Declarations -enum { +enum taps{ TD_CTCPS = 0 }; -//Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - //Tap once for CTRL, twice for Caps Lock - [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS) -// Other declarations would go here, separated by commas, if you have them +enum unicode_name { + THINK, // thinking face 🤔 + GRIN, // grinning face 😊 + BBB, // dat B 🅱 + POO, // poop 💩 + HUNDR, // 100 💯 + SMRK, // smirk 😏 + WEARY, // good shit 😩 + EGGPL, // EGGPLANT 🍆 + WATER, // wet 💦 + LIT, // fire 🔥 + UNAMU, // unamused 😒 + SNEK // snke 🐍 }; enum my_macros { @@ -25,8 +39,24 @@ enum my_macros { CLOSEDESK }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. -{ +enum quick { + DISFACE = 0, + TFLIP, + TPUT, + SHRUG, + FACE, + RANDIG +}; + +// Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for CTRL, twice for Caps Lock + [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS) +// Other declarations would go here, separated by commas, if you have them +}; + +// macros +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case NEWDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { @@ -52,22 +82,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // return MACRO_NONE; }; - -enum unicode_name { - THINK, // thinking face 🤔 - GRIN, // grinning face 😊 - BBB, // dat B 🅱 - POO, // poop 💩 - HUNDR, // 100 💯 - SMRK, // smirk 😏 - WEARY, // good shit 😩 - EGGPL, // EGGPLANT 🍆 - WATER, // wet 💦 - LIT, // fire 🔥 - UNAMU, // unamused 😒 - SNEK // snke 🐍 -}; - +// emojis in unicode const uint32_t PROGMEM unicode_map[] = { [THINK] = 0x1F914, [GRIN] = 0x1F600, @@ -83,6 +98,8 @@ const uint32_t PROGMEM unicode_map[] = { [SNEK] = 0x1F40D }; + +// Layouts const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP(\ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ @@ -116,10 +133,8 @@ void matrix_scan_user(void) { SEQ_TWO_KEYS(KC_A, KC_A) { register_code(KC_LCTL); - register_code(KC_A); - unregister_code(KC_A); - register_code(KC_C); - unregister_code(KC_C); + tap(KC_A); + tap(KC_C); unregister_code(KC_LCTL); } @@ -130,3 +145,5 @@ void matrix_init_user(void) { _delay_ms(500); set_unicode_input_mode(UC_WINC); }; + + From fcef83a5d0a7e3eaf8034142ed553d58facb465a Mon Sep 17 00:00:00 2001 From: Christian Westerlund Date: Tue, 16 May 2017 15:15:42 +0200 Subject: [PATCH 72/86] Created a dvorak keymap for Swedish developers using Visual Studio --- .../keymaps/dvorak_programmer_swe/keymap.c | 331 ++++++++++++++++++ .../keymaps/dvorak_programmer_swe/readme.md | 28 ++ 2 files changed, 359 insertions(+) create mode 100644 keyboards/ergodox/keymaps/dvorak_programmer_swe/keymap.c create mode 100644 keyboards/ergodox/keymaps/dvorak_programmer_swe/readme.md diff --git a/keyboards/ergodox/keymaps/dvorak_programmer_swe/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer_swe/keymap.c new file mode 100644 index 0000000000..8d65f7c7a5 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_programmer_swe/keymap.c @@ -0,0 +1,331 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" +#include "keymap_nordic.h" +#include "keymap_norwegian.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // mouse keys +#define DEVL 3 // dev keys + +#define MACRO_PUBLIC 10 +#define MACRO_PRIVATE 11 +#define MACRO_PROT 12 + +#define MACRO_SHARED 13 +#define MACRO_CONST 14 +#define MACRO_DIM 15 +#define MACRO_STRING 16 +#define MACRO_INT 17 +#define MACRO_DEC 18 +#define MACRO_BOOL 19 + +#define MACRO_RETURN 20 +#define MACRO_NOTHING 21 +#define MACRO_TODO 22 + +#define MACRO_SAVE 24 +#define MACRO_BUILD 25 +#define MACRO_DEBUG 26 + + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | L3 | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | - | , | . | P | Y | LT1 | | LT1 | F | G | C | R | L | Å | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | WIN | A | O | E | U | I |------| |------| D | H | T | N | S | Ä | + * |--------+------+------+------+------+------| LT2 | | LT2 |------+------+------+------+------+--------| + * | LShift | Ö | Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | CTRL | 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 + MO(DEVL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, NO_MINS, KC_COMM, KC_DOT, KC_P, KC_Y, TG(SYMB), + KC_LGUI, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(MDIA), + CTL_T(KC_NO), MO(SYMB), 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_BSLASH, + TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, NO_AM, + KC_D, KC_H, KC_T, KC_N, KC_S, NO_AE, + TG(MDIA),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), 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 + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | @ | { | } | [ | ] | | | | < | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | ( | ) | \ | / |------| |------| > | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | UND | CUT | COP | PAS | | | | ? | 1 | 2 | 3 | % | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | . | 0 | = | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, NO_AT, ALGR(KC_7), ALGR(KC_0), NO_LBRC, NO_RBRC, KC_TRNS, + KC_TRNS, KC_HASH, NO_LPRN, NO_RPRN, ALGR(KC_MINS), NO_SLSH, + KC_TRNS, KC_TRNS, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), 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, NO_LESS, KC_7, KC_8, KC_9, KC_KP_ASTERISK, KC_F12, + LSFT(NO_LESS), KC_4, KC_5, KC_6, KC_KP_PLUS, KC_TRNS, + KC_TRNS, NO_QUES, KC_1, KC_2, KC_3, LSFT(KC_5), KC_TRNS, + KC_DOT,KC_0, LSFT(KC_0), KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = 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_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 +), +/* Keymap 3: Developer keys in vb.net + * shortened in layout beneth, for example int-> integer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | Save |Build |Debug | | | | | | bool | int |string| dec | Todo | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| priv | publ |shared| prot | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | const| dim |return|nothin| | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[DEVL] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(MACRO_SAVE), M(MACRO_BUILD), M(MACRO_DEBUG), 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, M(MACRO_BOOL), M(MACRO_INT), M(MACRO_STRING), M(MACRO_DEC), M(MACRO_TODO), KC_TRNS, + M(MACRO_PRIVATE), M(MACRO_PUBLIC), M(MACRO_SHARED), M(MACRO_PROT), KC_TRNS, KC_TRNS, + KC_TRNS, M(MACRO_CONST), M(MACRO_DIM), M(MACRO_RETURN), M(MACRO_NOTHING), 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) +}; + +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; + case MACRO_PUBLIC: + if (record->event.pressed) { + return MACRO( T(P), T(U), T(B), T(L), T(I), T(C), T(SPACE),END); + } + break; + case MACRO_PRIVATE: + if (record->event.pressed) { + return MACRO( T(P), T(R), T(I), T(V), T(A), T(T), T(E), T(SPACE),END); + } + break; + case MACRO_PROT: + if (record->event.pressed) { + return MACRO( T(P), T(R), T(O), T(T), T(E), T(C), T(T), T(E), T(D), T(SPACE),END); + } + break; + case MACRO_SHARED: + if (record->event.pressed) { + return MACRO( T(S), T(H), T(A), T(R), T(E), T(D), T(SPACE), END); + } + break; + case MACRO_CONST: + if (record->event.pressed) { + return MACRO( T(C), T(O), T(N), T(S), T(T), T(SPACE), END); + } + break; + case MACRO_DIM: + if (record->event.pressed) { + return MACRO( T(D), T(I), T(M), T(SPACE), END); + } + break; + case MACRO_STRING: + if (record->event.pressed) { + return MACRO( T(S), T(T), T(R), T(I), T(N), T(G), T(SPACE), END); + } + break; + case MACRO_BOOL: + if (record->event.pressed) { + return MACRO( T(B), T(O), T(O), T(L), T(E), T(A), T(N), T(SPACE), END); + } + break; + case MACRO_INT: + if (record->event.pressed) { + return MACRO( T(I), T(N), T(T), T(SPACE), END); + } + break; + case MACRO_DEC: + if (record->event.pressed) { + return MACRO( T(D), T(E), T(C), T(I), T(M), T(A), T(L), T(SPACE), END); + } + break; + case MACRO_RETURN: + if (record->event.pressed) { + return MACRO( T(R), T(E), T(T), T(U),T(R),T(N), T(SPACE), END); + } + break; + case MACRO_NOTHING: + if (record->event.pressed) { + return MACRO( T(N), T(O), T(T), T(H), T(I), T(N), T(G), T(SPACE), END); + } + case MACRO_TODO: + if (record->event.pressed) { + return MACRO( KC_BSLASH, D(LSHIFT) ,T(T), T(O), T(D), T(O), KC_DOT, U(LSHIFT), T(SPACE),END); + } + break; + case MACRO_SAVE: + if (record->event.pressed) { + return MACRO( D(LCTL) ,T(S), U(LCTL),END); + } + break; + case MACRO_BUILD: + if (record->event.pressed) { + return MACRO( D(LCTL), D(LSHIFT) ,T(B), U(LSHIFT), U(LCTL),END); + } + break; + case MACRO_DEBUG: + if (record->event.pressed) { + return MACRO( KC_F5 ,END); + } + 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/dvorak_programmer_swe/readme.md b/keyboards/ergodox/keymaps/dvorak_programmer_swe/readme.md new file mode 100644 index 0000000000..552fa0e3ab --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_programmer_swe/readme.md @@ -0,0 +1,28 @@ +# ErgoDox EZ Dvorak Programmer SWEDISH + +Dvorak layout adjusted for a suitable programmer layout and swedish special characters added: + +* åäö characters added +* Layout for common vb.net keywords +* Common Visual Studio commands like Save, Build, Debug + +TODO: + +* (Layer 4 is qwerty (for easier gaming & less fortunate keyboard users)) Like this idea, will add it later on + +Known issues: + +* Keymap 2 modifier has not gotten its place yet.. +* Print screen, where? + + +## Changelog + +* 2017-05-16 + * Initial release + +# Author +Christian Westerlund +cwesterlund @ github + +Thanks to the author of keymap csharp_dev for inspiration! \ No newline at end of file From 3c5b9150789fdd20b4dafb91463440010a6b6759 Mon Sep 17 00:00:00 2001 From: skullY Date: Fri, 21 Apr 2017 22:05:22 -0700 Subject: [PATCH 73/86] Make KC_GRV accessible --- keyboards/clueboard/keymaps/shift_fn/keymap.c | 2 +- keyboards/clueboard/keymaps/skully/keymap.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/clueboard/keymaps/shift_fn/keymap.c b/keyboards/clueboard/keymaps/shift_fn/keymap.c index fdec37a540..83ae1d6154 100644 --- a/keyboards/clueboard/keymaps/shift_fn/keymap.c +++ b/keyboards/clueboard/keymaps/shift_fn/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _FL: Function Layer */ [_FL] = KEYMAP( - S(KC_GRV), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_GRV), KC_DEL, BL_STEP, \ + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_GRV), KC_DEL, BL_STEP, \ S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN), \ S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT), \ MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP, \ diff --git a/keyboards/clueboard/keymaps/skully/keymap.c b/keyboards/clueboard/keymaps/skully/keymap.c index df7757a922..47dee8e6d4 100644 --- a/keyboards/clueboard/keymaps/skully/keymap.c +++ b/keyboards/clueboard/keymaps/skully/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _FL: Function Layer */ [_FL] = KEYMAP( - S(KC_GRV), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_GRV), KC_DEL, BL_STEP, \ + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_GRV), KC_DEL, BL_STEP, \ S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN), \ S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT), \ MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP, \ From a74e69e9fa889113ee31fbc8dc7e6848fdb07576 Mon Sep 17 00:00:00 2001 From: skullY Date: Tue, 16 May 2017 13:09:23 -0700 Subject: [PATCH 74/86] Increase TAPPING_TERM for the Clueboard --- keyboards/clueboard/config.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/keyboards/clueboard/config.h b/keyboards/clueboard/config.h index ad68323856..3817062777 100644 --- a/keyboards/clueboard/config.h +++ b/keyboards/clueboard/config.h @@ -42,6 +42,16 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +/* How long a "key tap" is. Used in functions like LT() and macros to determine + * how long QMK "holds down" a tapped key. + * + * If you are macOS this should be at least 500ms to avoid macOS's accidental + * Caps Lock activation prevention measures, as noted by /u/JerryEn here: + * + * https://www.reddit.com/r/clueboard/comments/6bfc2m/lt_not_working_with_caps_lock/dhmbp88/ + */ +#define TAPPING_TERM 600 // ms + /* * Feature disable options * These options are also useful to firmware size reduction. From 8da442f411a7fe0d9a5521ac6e95e20c7923caf1 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 17 May 2017 20:27:07 -0400 Subject: [PATCH 75/86] update travis script --- util/ergodox_ez.html | 1 - util/travis_compiled_push.sh | 13 +++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 util/ergodox_ez.html diff --git a/util/ergodox_ez.html b/util/ergodox_ez.html deleted file mode 100644 index 8e92866070..0000000000 --- a/util/ergodox_ez.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh index 58334cb1f6..718daaa295 100644 --- a/util/travis_compiled_push.sh +++ b/util/travis_compiled_push.sh @@ -33,18 +33,19 @@ if [[ "$TRAVIS_COMMIT_MESSAGE" != *"[skip build]"* ]] ; then make ergodox-ez AUTOGEN=true - find . -name ".build" | xargs rm -rf cd .. git clone https://$GH_TOKEN@github.com/jackhumbert/qmk.fm.git cd qmk.fm - git submodule update --init --recursive + #git submodule update --init --recursive #rm -rf keyboard #rm -rf keyboards - yes | cp -rf ../qmk_firmware/keyboards . + #yes | cp -rf ../qmk_firmware/keyboards . #mkdir keyboards/ergodox_ez/ - cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html - cp ../qmk_firmware/readme.md qmk_readme.md - ./generate.sh + #cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html + #cp ../qmk_firmware/readme.md qmk_readme.md + #./generate.sh + rm -f _compiled/*.hex + for file in ../qmk_firmware/keyboards/*/keymaps/*/*.hex; do mv -v "$file" "_compiled/${file##*/}"; done git add -A git commit -m "generated from qmk/qmk_firmware@${rev}" From aaa01d0a4e633e26c58e5bc9c0bc557604088140 Mon Sep 17 00:00:00 2001 From: tengg Date: Wed, 17 May 2017 21:20:01 -0400 Subject: [PATCH 76/86] ESC/GRAVE/TILDE better handling (#1307) * revise HHKB bootloader_size to 4096 such that sw reset works * cleanup esr/grave/tilde handling function --- .../clueboard/keymaps/mac_optimized/keymap.c | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/keyboards/clueboard/keymaps/mac_optimized/keymap.c b/keyboards/clueboard/keymaps/mac_optimized/keymap.c index 7ea02d27e8..e72733092f 100644 --- a/keyboards/clueboard/keymaps/mac_optimized/keymap.c +++ b/keyboards/clueboard/keymaps/mac_optimized/keymap.c @@ -50,35 +50,28 @@ const uint16_t PROGMEM fn_actions[] = { void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { static uint8_t mods_pressed; - static bool mod_flag; switch (id) { case 0: /* Handle the combined Grave/Esc key */ - mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed - if (record->event.pressed) { /* The key is being pressed. */ + mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed if (mods_pressed) { - mod_flag = true; - add_key(KC_GRV); - send_keyboard_report(); + register_code(KC_GRV); } else { - add_key(KC_ESC); - send_keyboard_report(); + register_code(KC_ESC); } } else { /* The key is being released. */ - if (mod_flag) { - mod_flag = false; - del_key(KC_GRV); - send_keyboard_report(); + if (mods_pressed) { + mods_pressed = false; + unregister_code(KC_GRV); } else { - del_key(KC_ESC); - send_keyboard_report(); + unregister_code(KC_ESC); } } break; From 85df6873487000583454657fb20ac7cea7194f8d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 18 May 2017 18:55:07 -0400 Subject: [PATCH 77/86] m10a lowercase --- keyboards/{M10A => m10a}/Makefile | 0 keyboards/{M10A => m10a}/config.h | 0 keyboards/{M10A => m10a}/keymaps/default/Makefile | 0 keyboards/{M10A => m10a}/keymaps/default/keymap.c | 2 +- keyboards/{M10A/M10A.c => m10a/m10a.c} | 2 +- keyboards/{M10A/M10A.h => m10a/m10a.h} | 0 keyboards/{M10A => m10a}/rules.mk | 0 7 files changed, 2 insertions(+), 2 deletions(-) rename keyboards/{M10A => m10a}/Makefile (100%) rename keyboards/{M10A => m10a}/config.h (100%) rename keyboards/{M10A => m10a}/keymaps/default/Makefile (100%) rename keyboards/{M10A => m10a}/keymaps/default/keymap.c (99%) rename keyboards/{M10A/M10A.c => m10a/m10a.c} (72%) rename keyboards/{M10A/M10A.h => m10a/m10a.h} (100%) rename keyboards/{M10A => m10a}/rules.mk (100%) diff --git a/keyboards/M10A/Makefile b/keyboards/m10a/Makefile similarity index 100% rename from keyboards/M10A/Makefile rename to keyboards/m10a/Makefile diff --git a/keyboards/M10A/config.h b/keyboards/m10a/config.h similarity index 100% rename from keyboards/M10A/config.h rename to keyboards/m10a/config.h diff --git a/keyboards/M10A/keymaps/default/Makefile b/keyboards/m10a/keymaps/default/Makefile similarity index 100% rename from keyboards/M10A/keymaps/default/Makefile rename to keyboards/m10a/keymaps/default/Makefile diff --git a/keyboards/M10A/keymaps/default/keymap.c b/keyboards/m10a/keymaps/default/keymap.c similarity index 99% rename from keyboards/M10A/keymaps/default/keymap.c rename to keyboards/m10a/keymaps/default/keymap.c index 75abeb5b75..97434a461d 100644 --- a/keyboards/M10A/keymaps/default/keymap.c +++ b/keyboards/m10a/keymaps/default/keymap.c @@ -1,7 +1,7 @@ // 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 "M10A.h" +#include "m10a.h" #include "action_layer.h" #include "eeconfig.h" diff --git a/keyboards/M10A/M10A.c b/keyboards/m10a/m10a.c similarity index 72% rename from keyboards/M10A/M10A.c rename to keyboards/m10a/m10a.c index 9a3bd15e1a..9cc7f069ae 100644 --- a/keyboards/M10A/M10A.c +++ b/keyboards/m10a/m10a.c @@ -1,4 +1,4 @@ -#include "M10A.h" +#include "m10a.h" void matrix_init_kb(void) { matrix_init_user(); diff --git a/keyboards/M10A/M10A.h b/keyboards/m10a/m10a.h similarity index 100% rename from keyboards/M10A/M10A.h rename to keyboards/m10a/m10a.h diff --git a/keyboards/M10A/rules.mk b/keyboards/m10a/rules.mk similarity index 100% rename from keyboards/M10A/rules.mk rename to keyboards/m10a/rules.mk From 9c284786e728a2e8834745d6bb7df0fda4099cf3 Mon Sep 17 00:00:00 2001 From: jerryen Date: Fri, 19 May 2017 17:24:47 -0700 Subject: [PATCH 78/86] Workaround for the macOS caps lock delay (#1308) * Add 80ms delay for KC_CAPS when used as a tap key Workaround for the macOS caps lock delay * Revert "Increase TAPPING_TERM for the Clueboard" This reverts commit a74e69e9fa889113ee31fbc8dc7e6848fdb07576. --- keyboards/clueboard/config.h | 10 ---------- tmk_core/common/action.c | 4 ++++ 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/keyboards/clueboard/config.h b/keyboards/clueboard/config.h index 3817062777..ad68323856 100644 --- a/keyboards/clueboard/config.h +++ b/keyboards/clueboard/config.h @@ -42,16 +42,6 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) -/* How long a "key tap" is. Used in functions like LT() and macros to determine - * how long QMK "holds down" a tapped key. - * - * If you are macOS this should be at least 500ms to avoid macOS's accidental - * Caps Lock activation prevention measures, as noted by /u/JerryEn here: - * - * https://www.reddit.com/r/clueboard/comments/6bfc2m/lt_not_working_with_caps_lock/dhmbp88/ - */ -#define TAPPING_TERM 600 // ms - /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 8640dfab35..a534f818ec 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -26,6 +26,7 @@ along with this program. If not, see . #include "action_macro.h" #include "action_util.h" #include "action.h" +#include "wait.h" #ifdef DEBUG_ACTION #include "debug.h" @@ -438,6 +439,9 @@ void process_action(keyrecord_t *record, action_t action) } else { if (tap_count > 0) { dprint("KEYMAP_TAP_KEY: Tap: unregister_code\n"); + if (action.layer_tap.code == KC_CAPS) { + wait_ms(80); + } unregister_code(action.layer_tap.code); } else { dprint("KEYMAP_TAP_KEY: No tap: Off on release\n"); From d380ed1f7562995bc4260dfe3a16ddd9eb5a472f Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 20 May 2017 12:37:31 -0400 Subject: [PATCH 79/86] Update readme.md --- readme.md | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/readme.md b/readme.md index cb12a21177..4db9fc828a 100644 --- a/readme.md +++ b/readme.md @@ -1,18 +1,21 @@ # Quantum Mechanical Keyboard Firmware -[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) [![Gitter](https://badges.gitter.im/qmk/qmk_firmware.svg)](https://gitter.im/qmk/qmk_firmware?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) +[![Gitter](https://img.shields.io/gitter/room/qmk/qmk_firmware.js.svg)](https://gitter.im/qmk/qmk_firmware) +[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm) +[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly) +[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/) -This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). +This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR and ARM controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). -## Official website \(currently under construction with the move to the wiki\) +## Official website -For an easy-to-read version of this document and the repository, check out [http://qmk.fm](http://qmk.fm). Nicely formatted keyboard and keymap listings are also available there, along with the ability to download .hex files instead of having to setup a build environment and compile them. +[http://qmk.fm](http://qmk.fm) is the official website of QMK, where you can find links to this page, the documentation, and the keyboards supported by QMK. -## Included Keyboards +## Supported Keyboards * [Planck](/keyboards/planck/) * [Preonic](/keyboards/preonic/) -* [Atomic](/keyboards/atomic/) * [ErgoDox EZ](/keyboards/ergodox/) * [Clueboard](/keyboards/clueboard/) * [Cluepad](/keyboards/cluepad/) @@ -21,22 +24,8 @@ The project also includes community support for [lots of other keyboards](/keybo ## Maintainers -QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). This repo used to be a fork of [TMK](https://github.com/tmk/tmk_keyboard), and we are incredibly grateful for his founding contributions to the firmware. We've had to break the fork due to purely technical reasons - it simply became too different over time, and we've had to start refactoring some of the basic bits and pieces. We are huge fans of TMK and Hasu :\) - -This documentation is edited and maintained by Erez Zukerman of ErgoDox EZ. If you spot any typos or inaccuracies, please [open an issue](https://github.com/qmk/qmk_firmware/issues/new). - -The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/jackhumbert), the Ergodox EZ by [Erez Zukerman](https://github.com/ezuk), and the Clueboard by [Zach White](https://github.com/skullydazed). - -## Documentation roadmap - -This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest: - -* [**The Wiki**](https://github.com/qmk/qmk_firmware/wiki) - the entire readme has been moved here -* The readme for your own keyboard: This is found under `keyboards//`. So for the ErgoDox, it's [here](keyboards/ergodox/); for the Planck, it's [here](keyboards/planck/) and so on. -* The list of possible keycodes you can use in your keymap is actually spread out in a few different places: - * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. - * [quantum/quantum\_keycodes.h](quantum/quantum_keycodes.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `quantum_keycodes.h` is where they're actually defined. -* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally. - +QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/jackhumbert), the Ergodox EZ by [Erez Zukerman](https://github.com/ezuk), and the Clueboard by [Zach White](https://github.com/skullydazed). +## Documentation +[Documentation](https://docs.qmk.fm) is hosted on [Gitbook](https://www.gitbook.com/book/qmk/firmware/details) and [Github](https://github.com/qmk/qmk_firmware_docs/) (they are synced). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware_docs/pulls), or by clicking the "suggest an edit" link on any page of docs.qmk.fm. From c7e9e643fa411266dfb9b08831967d29426b29bc Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 20 May 2017 12:38:30 -0400 Subject: [PATCH 80/86] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 4db9fc828a..6db2f8d9f5 100644 --- a/readme.md +++ b/readme.md @@ -28,4 +28,4 @@ QMK is developed and maintained by Jack Humbert of OLKB with contributions from ## Documentation -[Documentation](https://docs.qmk.fm) is hosted on [Gitbook](https://www.gitbook.com/book/qmk/firmware/details) and [Github](https://github.com/qmk/qmk_firmware_docs/) (they are synced). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware_docs/pulls), or by clicking the "suggest an edit" link on any page of docs.qmk.fm. +[https://docs.qmk.fm](https://docs.qmk.fm) is hosted on [Gitbook](https://www.gitbook.com/book/qmk/firmware/details) and [Github](https://github.com/qmk/qmk_firmware_docs/) (they are synced). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware_docs/pulls), or by clicking the "suggest an edit" link on any page of the Docs. From 3ed2147a888401ef31a008db02a4ef8bd25d4380 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Tue, 23 May 2017 13:13:20 -0400 Subject: [PATCH 81/86] preonic map --- .../frosty_flake/keymaps/nikchi/keymap.c | 3 +- keyboards/preonic/keymaps/nikchi/Makefile | 3 + keyboards/preonic/keymaps/nikchi/config.h | 29 +++ keyboards/preonic/keymaps/nikchi/keymap.c | 221 ++++++++++++++++++ keyboards/preonic/keymaps/nikchi/readme.md | 1 + 5 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 keyboards/preonic/keymaps/nikchi/Makefile create mode 100644 keyboards/preonic/keymaps/nikchi/config.h create mode 100644 keyboards/preonic/keymaps/nikchi/keymap.c create mode 100644 keyboards/preonic/keymaps/nikchi/readme.md diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index a764e7e9d6..babc7f15bd 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -10,8 +10,7 @@ void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; - - +s //Tap Dance Declarations enum taps{ TD_CTCPS = 0 diff --git a/keyboards/preonic/keymaps/nikchi/Makefile b/keyboards/preonic/keymaps/nikchi/Makefile new file mode 100644 index 0000000000..3d4659ceb9 --- /dev/null +++ b/keyboards/preonic/keymaps/nikchi/Makefile @@ -0,0 +1,3 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/nikchi/config.h b/keyboards/preonic/keymaps/nikchi/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/preonic/keymaps/nikchi/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/nikchi/keymap.c b/keyboards/preonic/keymaps/nikchi/keymap.c new file mode 100644 index 0000000000..249dd1e64c --- /dev/null +++ b/keyboards/preonic/keymaps/nikchi/keymap.c @@ -0,0 +1,221 @@ +#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. + +enum preonic_layers { + _QWERTY, + _COLEMAK, + _DVORAK, + _LOWER, + _RAISE, + _ADJUST +}; + +enum preonic_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + BACKLIT +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | CTRL | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Lower| Z | X | C | V | B | N | M | , | . | / |Raise | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |BKSP |SHIFT |ENTER |SPC | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {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_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {LOWER , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RAISE }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, KC_LSFT, KC_ENT, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, 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_DEL, 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,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, + {KC_DEL, 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_NUHS, KC_NUBS, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_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}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +#endif + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + 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); + } + return false; + 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); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + } + return true; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/preonic/keymaps/nikchi/readme.md b/keyboards/preonic/keymaps/nikchi/readme.md new file mode 100644 index 0000000000..e911968dd9 --- /dev/null +++ b/keyboards/preonic/keymaps/nikchi/readme.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's \ No newline at end of file From b3eeb9d84a6af13c4fd35835f4cb2da093a7015e Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Tue, 23 May 2017 18:47:06 -0400 Subject: [PATCH 82/86] removed s --- keyboards/frosty_flake/keymaps/nikchi/keymap.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index babc7f15bd..908db3f801 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -10,7 +10,7 @@ void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; -s + //Tap Dance Declarations enum taps{ TD_CTCPS = 0 @@ -97,7 +97,6 @@ const uint32_t PROGMEM unicode_map[] = { [SNEK] = 0x1F40D }; - // Layouts const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP(\ From 6536b1ce2a136b7e1d0d4bbd94ff47e10765f644 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Tue, 23 May 2017 23:52:48 -0400 Subject: [PATCH 83/86] =?UTF-8?q?Tap=20dancing=20emoji=20support=20?= =?UTF-8?q?=F0=9F=98=A9=F0=9F=98=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frosty_flake/keymaps/nikchi/keymap.c | 75 ++++++++++++++++--- 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index 908db3f801..5bb553de00 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -2,10 +2,16 @@ #include "action_layer.h" #include "eeconfig.h" #include "process_unicode.h" +#include "process_unicodemap.h" #include "quantum.h" #define _______ KC_TRNS +void register_hex32(uint32_t hex); +void cycleEmojis(qk_tap_dance_state_t *state, void *user_data); +void cycleAnimals(qk_tap_dance_state_t *state, void *user_data); +void resetEmojis(qk_tap_dance_state_t *state, void *user_data); + void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); @@ -13,22 +19,32 @@ void tap(uint16_t keycode){ //Tap Dance Declarations enum taps{ - TD_CTCPS = 0 + TD_CTCPS = 0, + EMOJIS, + ANIMAL }; enum unicode_name { - THINK, // thinking face 🤔 + THINK = 1, // thinking face 🤔 GRIN, // grinning face 😊 + SMRK, // smirk 😏 + WEARY, // good shit 😩 + UNAMU, // unamused 😒 + + SNEK, // snke 🐍 + PENGUIN, // 🐧 + DRAGON, // 🐉 + MONKEY, // 🐒 + CHICK, // 🐥 + BBB, // dat B 🅱 POO, // poop 💩 HUNDR, // 100 💯 - SMRK, // smirk 😏 - WEARY, // good shit 😩 EGGPL, // EGGPLANT 🍆 WATER, // wet 💦 - LIT, // fire 🔥 - UNAMU, // unamused 😒 - SNEK // snke 🐍 + + LIT // fire 🔥 + }; enum my_macros { @@ -37,7 +53,6 @@ enum my_macros { RIGHTDESK, CLOSEDESK }; - enum quick { DISFACE = 0, TFLIP, @@ -50,7 +65,9 @@ enum quick { // Tap Dance Definitions qk_tap_dance_action_t tap_dance_actions[] = { // Tap once for CTRL, twice for Caps Lock - [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS) + [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS), + [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED(cycleEmojis, NULL, resetEmojis), + [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED(cycleAnimals, NULL, resetEmojis) // Other declarations would go here, separated by commas, if you have them }; @@ -94,7 +111,11 @@ const uint32_t PROGMEM unicode_map[] = { [WATER] = 0x1F4A6, [LIT] = 0x1F525, [UNAMU] = 0x1F612, - [SNEK] = 0x1F40D + [SNEK] = 0x1F40D, + [PENGUIN] = 0x1F427, + [MONKEY] = 0x1F412, + [CHICK] = 0x1F425, + [DRAGON] = 0x1F409 }; // Layouts @@ -108,7 +129,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), [1] = KEYMAP(\ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ - KC_GRV, X(GRIN),X(THINK),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + TD(EMOJIS),TD(ANIMAL),X(THINK),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ KC_TAB, KC_Q, M(0), KC_E, KC_R,X(EGGPL),X(WATER), KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ KC_LCTL, M(1), M(3), M(2), KC_F, X(LIT), X(SNEK), KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, X(HUNDR), X(BBB), X(POO), KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ @@ -145,3 +166,35 @@ void matrix_init_user(void) { }; +void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 1) { + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count])); + unicode_input_finish(); + } + else if(state->count <= 5) { + tap(KC_BSPC); + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count])); + unicode_input_finish(); + } +}; + +void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 1) { + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count+5])); + unicode_input_finish(); + } + else if(state->count <= 5) { + tap(KC_BSPC); + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count+5])); + unicode_input_finish(); + } +}; + +void resetEmojis(qk_tap_dance_state_t *state, void *user_data) { + +}; + From ef1714f443be67103ce9eb6adedef6c8875d17e5 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Wed, 24 May 2017 00:35:04 -0400 Subject: [PATCH 84/86] more emoji function comments --- .../frosty_flake/keymaps/nikchi/config.h | 3 +- .../frosty_flake/keymaps/nikchi/keymap.c | 48 ++++++++++++++----- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/config.h b/keyboards/frosty_flake/keymaps/nikchi/config.h index 45825781df..e91d082c8a 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/config.h +++ b/keyboards/frosty_flake/keymaps/nikchi/config.h @@ -3,7 +3,7 @@ #include "../../config.h" -#define TAPPING_TERM 200 +#define TAPPING_TERM 300 #define LEADER_TIMEOUT 400 #define DISABLE_SPACE_CADET_ROLLOVER @@ -21,3 +21,4 @@ // place overrides here #endif + diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index 5bb553de00..c9e2207214 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -7,10 +7,12 @@ #define _______ KC_TRNS + +//declarations for tap dancing emojis void register_hex32(uint32_t hex); void cycleEmojis(qk_tap_dance_state_t *state, void *user_data); void cycleAnimals(qk_tap_dance_state_t *state, void *user_data); -void resetEmojis(qk_tap_dance_state_t *state, void *user_data); +void cycleHands(qk_tap_dance_state_t *state, void *user_data); void tap(uint16_t keycode){ register_code(keycode); @@ -21,10 +23,11 @@ void tap(uint16_t keycode){ enum taps{ TD_CTCPS = 0, EMOJIS, - ANIMAL + ANIMAL, + HAND }; -enum unicode_name { +enum unicode_name { // split every five emojis THINK = 1, // thinking face 🤔 GRIN, // grinning face 😊 SMRK, // smirk 😏 @@ -37,6 +40,12 @@ enum unicode_name { MONKEY, // 🐒 CHICK, // 🐥 + OKOK, // 👌 + EFFU, // 🖕 + INUP, // 👆 + THUP, // 👍 + THDN, // 👎 + BBB, // dat B 🅱 POO, // poop 💩 HUNDR, // 100 💯 @@ -66,8 +75,9 @@ enum quick { qk_tap_dance_action_t tap_dance_actions[] = { // Tap once for CTRL, twice for Caps Lock [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS), - [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED(cycleEmojis, NULL, resetEmojis), - [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED(cycleAnimals, NULL, resetEmojis) + [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED(cycleEmojis, NULL, NULL), + [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED(cycleAnimals, NULL, NULL), + [HAND] = ACTION_TAP_DANCE_FN_ADVANCED(cycleHands, NULL, NULL) // Other declarations would go here, separated by commas, if you have them }; @@ -115,9 +125,13 @@ const uint32_t PROGMEM unicode_map[] = { [PENGUIN] = 0x1F427, [MONKEY] = 0x1F412, [CHICK] = 0x1F425, - [DRAGON] = 0x1F409 + [DRAGON] = 0x1F409, + [OKOK] = 0x1F44C, + [EFFU] = 0x1F595, + [INUP] = 0x1F446, + [THDN] = 0x1F44E, + [THUP] = 0x1F44D }; - // Layouts const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP(\ @@ -129,7 +143,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), [1] = KEYMAP(\ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ - TD(EMOJIS),TD(ANIMAL),X(THINK),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + TD(EMOJIS),TD(ANIMAL),TD(HAND),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ KC_TAB, KC_Q, M(0), KC_E, KC_R,X(EGGPL),X(WATER), KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ KC_LCTL, M(1), M(3), M(2), KC_F, X(LIT), X(SNEK), KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, X(HUNDR), X(BBB), X(POO), KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ @@ -150,7 +164,7 @@ void matrix_scan_user(void) { leading = false; leader_end(); - SEQ_TWO_KEYS(KC_A, KC_A) { + SEQ_TWO_KEYS(KC_A, KC_A) { // select all and copy register_code(KC_LCTL); tap(KC_A); tap(KC_C); @@ -180,7 +194,7 @@ void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) { } }; -void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { +void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { if(state->count == 1) { unicode_input_start(); register_hex32(pgm_read_dword(&unicode_map[state->count+5])); @@ -194,7 +208,17 @@ void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { } }; -void resetEmojis(qk_tap_dance_state_t *state, void *user_data) { - +void cycleHands(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 1) { + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count+10])); + unicode_input_finish(); + } + else if(state->count <= 5) { + tap(KC_BSPC); + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count+10])); + unicode_input_finish(); + } }; From a965e5b7356b7ebaee7b7cd64db19330758ec6ee Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Wed, 24 May 2017 07:56:41 -0400 Subject: [PATCH 85/86] tweaks default mouse speed constants --- keyboards/ergodox/config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h index 994a8c6433..e870835d85 100644 --- a/keyboards/ergodox/config.h +++ b/keyboards/ergodox/config.h @@ -3,8 +3,8 @@ #define MOUSEKEY_INTERVAL 20 #define MOUSEKEY_DELAY 0 -#define MOUSEKEY_TIME_TO_MAX 5 -#define MOUSEKEY_MAX_SPEED 2 +#define MOUSEKEY_TIME_TO_MAX 40 +#define MOUSEKEY_MAX_SPEED 7 #define MOUSEKEY_WHEEL_DELAY 0 #define TAPPING_TOGGLE 1 From 006ba4bf36e026d6b6c91ef52a5d0e32c7eefe34 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Wed, 24 May 2017 12:36:36 -0400 Subject: [PATCH 86/86] moved unicodemap rules to localer make --- keyboards/frosty_flake/rules.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/frosty_flake/rules.mk b/keyboards/frosty_flake/rules.mk index 8c59241d42..f878533fe9 100644 --- a/keyboards/frosty_flake/rules.mk +++ b/keyboards/frosty_flake/rules.mk @@ -63,7 +63,6 @@ NKRO_ENABLE ?= no # USB Nkey Rollover BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= no # Unicode -UNICODEMAP_ENABLE ?= yes BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE ?= no # Audio output on port C6 FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches