aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi ISHII <2170248+mtei@users.noreply.github.com>2020-11-17 07:26:44 +0900
committerGitHub <noreply@github.com>2020-11-17 07:26:44 +0900
commite6a13e0b1c543bfe15f8ae94557456c9c1a92556 (patch)
tree76642103993df62da3a10ab851424257fbc8aaca
parentaaea5e24b6375078b661c37ff459faafaddfd0f6 (diff)
downloadqmk_firmware-e6a13e0b1c543bfe15f8ae94557456c9c1a92556.tar.gz
qmk_firmware-e6a13e0b1c543bfe15f8ae94557456c9c1a92556.zip
[Keymap] clean up helix:five_rows keymap (#10866)
* Makes the OLED driver used by the helix:five_rows keymap switchable. * use TOP/drivers/oled/oled_driver.c `make HELIX=stdole helix:five_rows` * use helix/local_drivers/ssd1306.c `make HELIX=oled helix:five_rows` * Separated the OLED related code from keymap.c and moved it to oled_display.c. * scan rate without OLED * make HELIX=verbose,dispoff,scan helix/rev2:five_rows use Helix original code text data bss dec hex filename 18880 58 235 19173 4ae5 .build/helix_rev2_five_rows.elf matrix scan frequency: 1590 * make HELIX=verbose,dispoff,scan,sc helix/rev2:five_rows use split_common code text data bss dec hex filename 18554 40 231 18825 4989 .build/helix_rev2_five_rows.elf matrix scan frequency: 1202 * scan rate with helix/local_drivers/ssd1306.c * make HELIX=verbose,dispoff,scan,oled helix/rev2:five_rows use Helix original code text data bss dec hex filename 24048 196 342 24586 600a .build/helix_rev2_five_rows.elf matrix scan frequency: 739 * make HELIX=verbose,dispoff,scan,sc,oled helix/rev2:five_rows use split_common code text data bss dec hex filename 23750 176 338 24264 5ec8 .build/helix_rev2_five_rows.elf matrix scan frequency: 642 * scan rate with drivers/oled/oled_driver.c * make HELIX=verbose,dispoff,scan,stdole helix/rev2:five_rows use Helix original code text data bss dec hex filename 24590 210 798 25598 63fe .build/helix_rev2_five_rows.elf matrix scan frequency: 293 * make HELIX=verbose,dispoff,scan,sc,stdole helix/rev2:five_rows use split_common code text data bss dec hex filename 24290 190 794 25274 62ba .build/helix_rev2_five_rows.elf matrix scan frequency: 277 * clean up helix/rev2/keymaps/five_rows/keymap.c * update five_rows/oled_display.c * update helix/rev2/keymaps/five_rows/keymap.c: remove LAYOUT_kc() * Ported the keymap from helix/rev2:five_rows to helix/rev3_5rows:five_rows. * update five_rows/oled_display.c * add License comment
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/keymap.c587
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/layer_number.h26
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/oled_display.c200
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/rules.mk48
-rw-r--r--keyboards/helix/rev3_5rows/keymaps/five_rows/config.h48
-rw-r--r--keyboards/helix/rev3_5rows/keymaps/five_rows/keyboard_post_init_user_scan.c7
-rw-r--r--keyboards/helix/rev3_5rows/keymaps/five_rows/keymap.c468
-rw-r--r--keyboards/helix/rev3_5rows/keymaps/five_rows/layer_number.h26
-rw-r--r--keyboards/helix/rev3_5rows/keymaps/five_rows/oled_display.c200
-rw-r--r--keyboards/helix/rev3_5rows/keymaps/five_rows/rules.mk44
10 files changed, 1293 insertions, 361 deletions
diff --git a/keyboards/helix/rev2/keymaps/five_rows/keymap.c b/keyboards/helix/rev2/keymaps/five_rows/keymap.c
index fcc5c4bbe..a2ec10862 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/keymap.c
+++ b/keyboards/helix/rev2/keymaps/five_rows/keymap.c
@@ -1,199 +1,234 @@
1/* Copyright 2020 mtei
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
1#include QMK_KEYBOARD_H 17#include QMK_KEYBOARD_H
18#include "util.h"
2#include "bootloader.h" 19#include "bootloader.h"
3#ifdef PROTOCOL_LUFA 20#ifdef PROTOCOL_LUFA
4#include "lufa.h" 21#include "lufa.h"
5#include "split_util.h" 22#include "split_util.h"
6#endif 23#endif
7#ifdef AUDIO_ENABLE
8 #include "audio.h"
9#endif
10#ifdef SSD1306OLED
11 #include "ssd1306.h"
12#endif
13#ifdef CONSOLE_ENABLE 24#ifdef CONSOLE_ENABLE
14 #include <print.h> 25 #include <print.h>
15#endif 26#endif
27#include "layer_number.h"
16 28
17extern keymap_config_t keymap_config; 29extern keymap_config_t keymap_config;
18 30
19#ifdef RGBLIGHT_ENABLE
20//Following line allows macro to read current RGB settings
21extern rgblight_config_t rgblight_config;
22#endif
23
24extern uint8_t is_master; 31extern uint8_t is_master;
25 32
26// Each layer gets a name for readability, which is then used in the keymap matrix below.
27// The underscores don't mean anything - you can have a layer called STUFF or any other name.
28// Layer names don't all need to be of the same length, obviously, and you can also skip them
29// entirely and just use numbers.
30enum layer_number {
31 _QWERTY = 0,
32 _COLEMAK,
33 _DVORAK,
34 _EUCALYN,
35 _KEYPAD,
36 _AUX,
37 _KAUX,
38 _LOWER,
39 _RAISE,
40 _PADFUNC,
41 _ADJUST,
42};
43
44enum custom_keycodes { 33enum custom_keycodes {
45 QWERTY = SAFE_RANGE, 34 QWERTY = SAFE_RANGE,
46 COLEMAK, 35 COLEMAK,
47 DVORAK, 36 DVORAK,
48 EUCALYN, 37 EUCALYN,
49 KEYPAD, 38 KEYPAD,
50 KC_xEISU, 39 xEISU,
51 KC_xKANA, 40 xKANA,
52 KC_ZERO2, 41 ZERO2,
53 RGBRST 42 RGBRST
54}; 43};
55 44
45#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
46
56//Macros 47//Macros
57#define KC_LOWER MO(_LOWER) 48#define KC_LOWER MO(_LOWER)
58#define KC_RABS LT(_RAISE,KC_BSPC) 49#define XXXX XXXXXXX
59#define KC_RAEN LT(_RAISE,KC_ENT) 50#define ____ _______
60#define KC_FF12 LT(_PADFUNC,KC_F12)
61#define KC_____ _______
62#define KC_XXXX XXXXXXX
63#define KC_ADJ MO(_ADJUST) 51#define KC_ADJ MO(_ADJUST)
64#define KC_LSMI LSFT(KC_MINS) 52#define KC_LSMI LSFT(KC_MINS)
65#define KC_LSEQ LSFT(KC_EQL) 53#define KC_LSEQ LSFT(KC_EQL)
66#define KC_LSRB LSFT(KC_RBRC) 54#define KC_LSRB LSFT(KC_RBRC)
67#define KC_LSLB LSFT(KC_LBRC) 55#define KC_LSLB LSFT(KC_LBRC)
68#define ___ _______ 56
57#define _1_2_3_4_5 KC_1, KC_2, KC_3, KC_4, KC_5
58#define _6_7_8_9_0 KC_6, KC_7, KC_8, KC_9, KC_0
59#define L_LOWER2_CAPS_LALT_LGUI_SPC_RABS \
60 KC_LOWER, KC_LOWER, KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, LT(_RAISE,KC_BSPC)
61#define R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
62 LT(_RAISE,KC_ENT), KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_LOWER, KC_LOWER
63
69 64
70#if MATRIX_ROWS == 10 // HELIX_ROWS == 5 65#if MATRIX_ROWS == 10 // HELIX_ROWS == 5
71const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 66const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
72 67
73 /* Qwerty 68 /* Qwerty
74 * ,-----------------------------------------. ,-----------------------------------------. 69 * ,-----------------------------------. ,-----------------------------------.
75 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS | 70 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
76 * |------+------+------+------+------+------| |------+------+------+------+------+------| 71 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
77 * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | 72 * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
78 * |------+------+------+------+------+------| |------+------+------+------+------+------| 73 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
79 * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | Ctrl | 74 * | Ctrl| A | S | D | F | G | | H | J | K | L | ; |Ctrl |
80 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 75 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
81 * | Shift| Z | X | C | V | B | ` | ' | N | M | , | . | / | Shift| 76 * |Shift| Z | X | C | V | B | ` | ' | N | M | , | . | / |Shift|
82 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 77 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
83 * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | 78 * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
84 * `-------------------------------------------------------------------------------------------------' 79 * `-----------------------------------------------------------------------------------'
85 */ 80 */
86 [_QWERTY] = LAYOUT_kc( \ 81#define _Q_W_E_R_T KC_Q, KC_W, KC_E, KC_R, KC_T
87 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \ 82#define _Y_U_I_O_P KC_Y, KC_U, KC_I, KC_O, KC_P
88 TAB, Q, W, E, R, T, Y, U, I, O, P, BSLS, \ 83#define _A_S_D_F_G KC_A, KC_S, KC_D, KC_F, KC_G
89 LCTL, A, S, D, F, G, H, J, K, L, SCLN, RCTL, \ 84#define _H_J_K_L_SCLN KC_H, KC_J, KC_K, KC_L, KC_SCLN
90 LSFT, Z, X, C, V, B, GRV, QUOT, N, M, COMM, DOT, SLSH, RSFT, \ 85#define _Z_X_C_V_B KC_Z, KC_X, KC_C, KC_V, KC_B
91 LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \ 86#define _N_M_COMM_DOT_SLSH KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
92 ), 87
88 [_QWERTY] = LAYOUT_wrapper( \
89 KC_ESC, _1_2_3_4_5, _6_7_8_9_0, KC_BSPC, \
90 KC_TAB, _Q_W_E_R_T, _Y_U_I_O_P, KC_BSLS, \
91 KC_LCTL, _A_S_D_F_G, _H_J_K_L_SCLN, KC_RCTL, \
92 KC_LSFT, _Z_X_C_V_B, KC_GRV, KC_QUOT, _N_M_COMM_DOT_SLSH, KC_RSFT, \
93 L_LOWER2_CAPS_LALT_LGUI_SPC_RABS, R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
94 ),
93 95
94 /* Colemak 96 /* Colemak
95 * ,-----------------------------------------. ,-----------------------------------------. 97 * ,-----------------------------------. ,-----------------------------------.
96 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | 98 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
97 * |------+------+------+------+------+------| |------+------+------+------+------+------| 99 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
98 * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ | 100 * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
99 * |------+------+------+------+------+------| |------+------+------+------+------+------| 101 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
100 * | Ctrl | A | R | S | T | D | | H | N | E | I | O | Ctrl | 102 * | Ctrl| A | R | S | T | D | | H | N | E | I | O |Ctrl |
101 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 103 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
102 * | Shift| Z | X | C | V | B | ` | ' | K | M | , | . | / | Shift| 104 * |Shift| Z | X | C | V | B | ` | ' | K | M | , | . | / |Shift|
103 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 105 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
104 * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | 106 * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
105 * `-------------------------------------------------------------------------------------------------' 107 * `-----------------------------------------------------------------------------------'
106 */ 108 */
107 [_COLEMAK] = LAYOUT_kc( \ 109#define _Q_W_F_P_G KC_Q, KC_W, KC_F, KC_P, KC_G
108 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \ 110#define _J_L_U_Y_SCLN KC_J, KC_L, KC_U, KC_Y, KC_SCLN
109 TAB, Q, W, F, P, G, J, L, U, Y, SCLN, BSLS, \ 111#define _A_R_S_T_D KC_A, KC_R, KC_S, KC_T, KC_D
110 LCTL, A, R, S, T, D, H, N, E, I, O, RCTL, \ 112#define _H_N_E_I_O KC_H, KC_N, KC_E, KC_I, KC_O
111 LSFT, Z, X, C, V, B, GRV, QUOT, K, M, COMM, DOT, SLSH, RSFT, \ 113#define _Z_X_C_V_B KC_Z, KC_X, KC_C, KC_V, KC_B
112 LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \ 114#define _K_M_COMM_DOT_SLSH KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
113 ), 115
116 [_COLEMAK] = LAYOUT_wrapper( \
117 KC_ESC, _1_2_3_4_5, _6_7_8_9_0, KC_BSPC, \
118 KC_TAB, _Q_W_F_P_G, _J_L_U_Y_SCLN, KC_BSLS, \
119 KC_LCTL, _A_R_S_T_D, _H_N_E_I_O, KC_RCTL, \
120 KC_LSFT, _Z_X_C_V_B, KC_GRV, KC_QUOT, _K_M_COMM_DOT_SLSH, KC_RSFT, \
121 L_LOWER2_CAPS_LALT_LGUI_SPC_RABS, R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
122 ),
114 123
115 /* Dvorak 124 /* Dvorak
116 * ,-----------------------------------------. ,-----------------------------------------. 125 * ,-----------------------------------. ,-----------------------------------.
117 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | 126 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
118 * |------+------+------+------+------+------| |------+------+------+------+------+------| 127 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
119 * | Tab | ' | , | . | P | Y | | F | G | C | R | L | \ | 128 * | Tab | ' | , | . | P | Y | | F | G | C | R | L | \ |
120 * |------+------+------+------+------+------| |------+------+------+------+------+------| 129 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
121 * | Ctrl | A | O | E | U | I | | D | H | T | N | S | Ctrl | 130 * | Ctrl| A | O | E | U | I | | D | H | T | N | S |Ctrl |
122 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 131 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
123 * | Shift| ; | Q | J | K | X | ` | / | B | M | W | V | Z | Shift| 132 * |Shift| ; | Q | J | K | X | ` | / | B | M | W | V | Z |Shift|
124 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 133 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
125 * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | 134 * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
126 * `-------------------------------------------------------------------------------------------------' 135 * `-----------------------------------------------------------------------------------'
127 */ 136 */
128 [_DVORAK] = LAYOUT_kc( \ 137#define _QUOT_COMM_DOT_P_Y KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
129 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \ 138#define _F_G_C_R_L KC_F, KC_G, KC_C, KC_R, KC_L
130 TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, BSLS, \ 139#define _A_O_E_U_I KC_A, KC_O, KC_E, KC_U, KC_I
131 LCTL, A, O, E, U, I, D, H, T, N, S, RCTL, \ 140#define _D_H_T_N_S KC_D, KC_H, KC_T, KC_N, KC_S
132 LSFT, SCLN, Q, J, K, X, GRV, SLSH, B, M, W, V, Z, RSFT, \ 141#define _SCLN_Q_J_K_X KC_SCLN, KC_Q, KC_J, KC_K, KC_X
133 LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \ 142#define _B_M_W_V_Z KC_B, KC_M, KC_W, KC_V, KC_Z
134 ), 143
144 [_DVORAK] = LAYOUT_wrapper( \
145 KC_ESC, _1_2_3_4_5, _6_7_8_9_0, KC_BSPC, \
146 KC_TAB, _QUOT_COMM_DOT_P_Y, _F_G_C_R_L, KC_BSLS, \
147 KC_LCTL, _A_O_E_U_I, _D_H_T_N_S, KC_RCTL, \
148 KC_LSFT, _SCLN_Q_J_K_X, KC_GRV, KC_SLSH, _B_M_W_V_Z, KC_RSFT, \
149 L_LOWER2_CAPS_LALT_LGUI_SPC_RABS, R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
150 ),
135 151
136 /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout) 152 /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout)
137 * ,-----------------------------------------. ,-----------------------------------------. 153 * ,-----------------------------------. ,-----------------------------------.
138 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | 154 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
139 * |------+------+------+------+------+------| |------+------+------+------+------+------| 155 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
140 * | Tab | Q | W | , | . | ; | | M | R | D | Y | P | \ | 156 * | Tab | Q | W | , | . | ; | | M | R | D | Y | P | \ |
141 * |------+------+------+------+------+------| |------+------+------+------+------+------| 157 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
142 * | Ctrl | A | O | E | I | U | | G | T | K | S | N | Ctrl | 158 * | Ctrl| A | O | E | I | U | | G | T | K | S | N |Ctrl |
143 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 159 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
144 * | Shift| Z | X | C | V | F | ` | ' | B | H | J | L | / | Shift| 160 * |Shift| Z | X | C | V | F | ` | ' | B | H | J | L | / |Shift|
145 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 161 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
146 * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | 162 * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
147 * `-------------------------------------------------------------------------------------------------' 163 * `-----------------------------------------------------------------------------------'
148 */ 164 */
149 [_EUCALYN] = LAYOUT_kc( \ 165#define _Q_W_COMM_DOT_SCLN KC_Q, KC_W, KC_COMM, KC_DOT, KC_SCLN
150 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \ 166#define _M_R_D_Y_P KC_M, KC_R, KC_D, KC_Y, KC_P
151 TAB, Q, W, COMM, DOT, SCLN, M, R, D, Y, P, BSLS, \ 167#define _A_O_E_I_U KC_A, KC_O, KC_E, KC_I, KC_U
152 LCTL, A, O, E, I, U, G, T, K, S, N, RCTL, \ 168#define _G_T_K_S_N KC_G, KC_T, KC_K, KC_S, KC_N
153 LSFT, Z, X, C, V, F, GRV, QUOT, B, H, J, L, SLSH, RSFT, \ 169#define _Z_X_C_V_F KC_Z, KC_X, KC_C, KC_V, KC_F
154 LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \ 170#define _B_H_J_L_SLSH KC_B, KC_H, KC_J, KC_L, KC_SLSH
155 ), 171
172 [_EUCALYN] = LAYOUT_wrapper( \
173 KC_ESC, _1_2_3_4_5, _6_7_8_9_0, KC_BSPC, \
174 KC_TAB, _Q_W_COMM_DOT_SCLN, _M_R_D_Y_P, KC_BSLS, \
175 KC_LCTL, _A_O_E_I_U, _G_T_K_S_N, KC_RCTL, \
176 KC_LSFT, _Z_X_C_V_F, KC_GRV, KC_QUOT, _B_H_J_L_SLSH, KC_RSFT, \
177 L_LOWER2_CAPS_LALT_LGUI_SPC_RABS, R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
178 ),
156 179
157 /* Keypad 180 /* Keypad
158 * ,-----------------------------------------. ,-----------------------------------------. 181 * ,-----------------------------------. ,-----------------------------------.
159 * | Tab | / | * | Del | F1 | F6 | | F1 | F6 | Del | Tab | / | * | 182 * | Tab | / | * | Del | F1 | F6 | | F1 | F6 | Del | Tab | / | * |
160 * |------+------+------+------+------+------| |------+------+------+------+------+------| 183 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
161 * | 7 | 8 | 9 | BS | F2 | F7 | | F2 | F7 | BS | 7 | 8 | 9 | 184 * | 7 | 8 | 9 | BS | F2 | F7 | | F2 | F7 | BS | 7 | 8 | 9 |
162 * |------+------+------+------+------+------| |------+------+------+------+------+------| 185 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
163 * | 4 | 5 | 6 | - | F3 | F8 | | F3 | F8 | - | 4 | 5 | 6 | 186 * | 4 | 5 | 6 | - | F3 | F8 | | F3 | F8 | - | 4 | 5 | 6 |
164 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 187 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
165 * | 1 | 2 | 3 | + | F4 | F9 | F11 | F11 | F4 | F9 | + | 1 | 2 | 3 | 188 * | 1 | 2 | 3 | + | F4 | F9 | F11 | F11 | F4 | F9 | + | 1 | 2 | 3 |
166 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 189 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
167 * | 0 | , | . | Enter| F5 | F10 | F12 | F12 | F5 | F10 | Enter| 0 | , | . | 190 * | 0 | , | . |Enter| F5 | F10| F12 | F12 | F5 | F10|Enter| 0 | , | . |
168 * `-------------------------------------------------------------------------------------------------' 191 * `-----------------------------------------------------------------------------------'
169 */ 192 */
170 [_KEYPAD] = LAYOUT_kc( \ 193#define KP_TOP KC_TAB, KC_PSLS, KC_PAST
171 TAB, PSLS, PAST, DEL, F1, F6, F1, F6, DEL, TAB, PSLS, PAST, \ 194#define KP_789 KC_KP_7, KC_KP_8, KC_KP_9
172 KP_7, KP_8, KP_9, BSPC, F2, F7, F2, F7, BSPC, KP_7, KP_8, KP_9, \ 195#define KP_456 KC_KP_4, KC_KP_5, KC_KP_6
173 KP_4, KP_5, KP_6, PMNS, F3, F8, F3, F8, PMNS, KP_4, KP_5, KP_6, \ 196#define KP_123 KC_KP_1, KC_KP_2, KC_KP_3
174 KP_1, KP_2, KP_3, PPLS, F4, F9, F11, F11, F4, F9, PPLS, KP_1, KP_2, KP_3, \ 197#define KP_BTM KC_KP_0, KC_COMM, KC_PDOT
175 KP_0, COMM, PDOT, PENT, F5, F10, FF12, FF12, F5, F10, PENT, KP_0, COMM, PDOT \ 198#define F_1_6 KC_F1, KC_F6
176 ), 199#define F_2_7 KC_F2, KC_F7
200#define F_3_8 KC_F3, KC_F8
201#define F_4_9 KC_F4, KC_F9
202#define F_510 KC_F5, KC_F10
203#define FF12 LT(_PADFUNC,KC_F12)
204
205 [_KEYPAD] = LAYOUT_wrapper( \
206 KP_TOP, KC_DEL, F_1_6, F_1_6, KC_DEL, KP_TOP, \
207 KP_789, KC_BSPC, F_2_7, F_2_7, KC_BSPC, KP_789, \
208 KP_456, KC_PMNS, F_3_8, F_3_8, KC_PMNS, KP_456, \
209 KP_123, KC_PPLS, F_4_9, KC_F11, KC_F11, F_4_9, KC_PPLS, KP_123, \
210 KP_BTM, KC_PENT, F_510, FF12, FF12, F_510, KC_PENT, KP_BTM \
211 ),
177 212
178 /* AUX modifier key layer 213 /* AUX modifier key layer
179 * ,-----------------------------------------. ,-----------------------------------------. 214 * ,-----------------------------------. ,-----------------------------------.
180 * | | | | | | | | | | | | | | 215 * | | | | | | | | | | | | | |
181 * |------+------+------+------+------+------| |------+------+------+------+------+------| 216 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
182 * | | | | | | | | | | | | | | 217 * | | | | | | | | | | | | | |
183 * |------+------+------+------+------+------| |------+------+------+------+------+------| 218 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
184 * | | | | | | | | | | | | | | 219 * | | | | | | | | | | | | | |
185 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 220 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
186 * | | | | | | | | | | | | | | | 221 * | | | | | | | | | | | | | | |
187 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 222 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
188 * | | 00 | | | | | | | | | | | 00 | | 223 * | | 00 | | | | | | | | | | | 00 | |
189 * `-------------------------------------------------------------------------------------------------' 224 * `-----------------------------------------------------------------------------------'
190 */ 225 */
191 [_KAUX] = LAYOUT_kc( \ 226 [_KAUX] = LAYOUT( \
192 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ 227 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
193 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ 228 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
194 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ 229 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
195 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ 230 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
196 ____,ZERO2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ZERO2,____ \ 231 ____,ZERO2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,ZERO2, ____ \
197 ), 232 ),
198 233
199 /* Keypad function layer 234 /* Keypad function layer
@@ -209,12 +244,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
209 * | | | | | | | | | | | | | | | 244 * | | | | | | | | | | | | | | |
210 * `-------------------------------------------------------------------------------------------------' 245 * `-------------------------------------------------------------------------------------------------'
211 */ 246 */
212 [_PADFUNC] = LAYOUT_kc( \ 247#define _PAUS_SLCK_PSCR KC_PAUS, KC_SLCK, KC_PSCR
213 XXXX, XXXX, XXXX, PAUS, SLCK, PSCR, PSCR, SLCK, PAUS, XXXX, XXXX, XXXX, \ 248#define _PSCR_SLCK_PAUS KC_PSCR, KC_SLCK, KC_PAUS
214 XXXX, XXXX, XXXX, HOME, UP, PGUP, PGUP, UP, HOME, XXXX, XXXX, XXXX, \ 249#define _HOME_UP_PGUP KC_HOME, KC_UP, KC_PGUP
215 XXXX, DEL, INS, LEFT, DOWN, RGHT, LEFT, DOWN, RGHT, INS, DEL, XXXX, \ 250#define _PGUP_UP_HOME KC_PGUP, KC_UP, KC_HOME
216 XXXX, XXXX, XXXX, END, XXXX, PGDN, ADJ, ADJ, PGDN, XXXX, END, XXXX, XXXX, XXXX, \ 251#define _DEL_INS_LEFT_DOWN_RGHT KC_DEL, KC_INS, KC_LEFT, KC_DOWN, KC_RGHT
217 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, ____, ____, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX \ 252#define _LEFT_DOWN_RGHT_INS_DEL KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL
253#define _PGDN_ADJ_ADJ_PGDN KC_PGDN, KC_ADJ, KC_ADJ, KC_PGDN
254
255 [_PADFUNC] = LAYOUT_wrapper( \
256 XXXX, XXXX, XXXX, _PAUS_SLCK_PSCR, _PSCR_SLCK_PAUS, XXXX, XXXX, XXXX, \
257 XXXX, XXXX, XXXX, _HOME_UP_PGUP, _PGUP_UP_HOME, XXXX, XXXX, XXXX, \
258 XXXX, _DEL_INS_LEFT_DOWN_RGHT, _LEFT_DOWN_RGHT_INS_DEL, XXXX, \
259 XXXX, XXXX, XXXX, KC_END, XXXX, _PGDN_ADJ_ADJ_PGDN, XXXX, KC_END, XXXX, XXXX, XXXX, \
260 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, ____, ____, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX \
218 ), 261 ),
219 262
220 /* Lower 263 /* Lower
@@ -230,12 +273,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
230 * | | | PrtSc| | | | | | | | | PrtSc| | | 273 * | | | PrtSc| | | | | | | | | PrtSc| | |
231 * `-------------------------------------------------------------------------------------------------' 274 * `-------------------------------------------------------------------------------------------------'
232 */ 275 */
233 [_LOWER] = LAYOUT_kc( \ 276#define _F1_F2_F3_F4_F5 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
234 XXXX, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, \ 277#define _F6_F7_F8_F9_F10_F11 KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11
235 XXXX, XXXX, PAUS, SLCK, INS, XXXX, XXXX, INS, SLCK, PAUS, XXXX, F12, \ 278#define _PAUS_SLCK_INS KC_PAUS, KC_SLCK, KC_INS
236 ____, HOME, XXXX, UP, DEL, PGUP, PGUP, DEL, UP, XXXX, HOME, ____, \ 279#define _INS_SLCK_PAUS KC_INS, KC_SLCK, KC_PAUS
237 ____, END, LEFT, DOWN, RGHT, PGDN, XXXX, XXXX, PGDN, LEFT, DOWN, RGHT, END, ____, \ 280#define _ADJ_ADJ KC_ADJ, KC_ADJ
238 ____, ____, PSCR, ____, ____, ____, ADJ, ADJ, ____, ____, ____, PSCR, ____, ____ \ 281#define _UP_DEL_PGUP KC_UP, KC_DEL, KC_PGUP
282#define _PGUP_DEL_UP KC_PGUP, KC_DEL, KC_UP
283#define _END_LEFT_DOWN_RGHT_PGDN KC_END, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN
284#define _PGDN_LEFT_DOWN_RGHT_END KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_END
285
286 [_LOWER] = LAYOUT_wrapper( \
287 XXXX, _F1_F2_F3_F4_F5, _F6_F7_F8_F9_F10_F11, \
288 XXXX, XXXX, _PAUS_SLCK_INS, XXXX, XXXX, _INS_SLCK_PAUS, XXXX, KC_F12, \
289 ____, KC_HOME, XXXX, _UP_DEL_PGUP, _PGUP_DEL_UP, XXXX, KC_HOME, ____, \
290 ____, _END_LEFT_DOWN_RGHT_PGDN, XXXX, XXXX, _PGDN_LEFT_DOWN_RGHT_END, ____, \
291 ____, ____, KC_PSCR, ____, ____, ____, _ADJ_ADJ, ____, ____, ____, KC_PSCR, ____, ____ \
239 ), 292 ),
240 293
241 /* Raise 294 /* Raise
@@ -251,12 +304,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
251 * | | | | | | | | | | | | | | | 304 * | | | | | | | | | | | | | | |
252 * `-------------------------------------------------------------------------------------------------' 305 * `-------------------------------------------------------------------------------------------------'
253 */ 306 */
254 [_RAISE] = LAYOUT_kc( \ 307#define _LSMI_MINS KC_LSMI, KC_MINS
308#define _EQL_LSEQ KC_EQL, KC_LSEQ
309#define _LSLB_LBRC KC_LSLB, KC_LBRC
310#define _RBRC_LSRB KC_RBRC, KC_LSRB
311#define _MNXT_VOLD_VOLU_MPLY KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
312
313 [_RAISE] = LAYOUT_wrapper( \
255 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, \ 314 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, \
256 XXXX, XXXX, XXXX, XXXX, LSMI, MINS, EQL, LSEQ, XXXX, XXXX, XXXX, XXXX, \ 315 XXXX, XXXX, XXXX, XXXX, _LSMI_MINS, _EQL_LSEQ, XXXX, XXXX, XXXX, XXXX, \
257 ____, XXXX, XXXX, XXXX, LSLB, LBRC, RBRC, LSRB, XXXX, XXXX, XXXX, ____, \ 316 ____, XXXX, XXXX, XXXX, _LSLB_LBRC, _RBRC_LSRB, XXXX, XXXX, XXXX, ____, \
258 ____, XXXX, XXXX, XXXX, XXXX,xEISU,xEISU, xKANA,xKANA,MNXT, VOLD, VOLU, MPLY, ____, \ 317 ____, XXXX, XXXX, XXXX, XXXX,xEISU,xEISU, xKANA,xKANA, _MNXT_VOLD_VOLU_MPLY, ____, \
259 ADJ, ADJ, XXXX, ____, ____, XXXX, ____, ____, XXXX, ____, ____, XXXX, ADJ, ADJ \ 318 _ADJ_ADJ, XXXX, ____, ____, XXXX, ____, ____, XXXX, ____, ____, XXXX, _ADJ_ADJ \
260 ), 319 ),
261 320
262 /* Adjust (Lower + Raise) 321 /* Adjust (Lower + Raise)
@@ -276,8 +335,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
276 XXXXXXX, KEYPAD, DVORAK, COLEMAK, EUCALYN, QWERTY, QWERTY, EUCALYN, COLEMAK, DVORAK, KEYPAD, XXXXXXX, \ 335 XXXXXXX, KEYPAD, DVORAK, COLEMAK, EUCALYN, QWERTY, QWERTY, EUCALYN, COLEMAK, DVORAK, KEYPAD, XXXXXXX, \
277 XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, AU_ON, RGB_TOG, RGBRST, XXXXXXX, XXXXXXX, \ 336 XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, AU_ON, RGB_TOG, RGBRST, XXXXXXX, XXXXXXX, \
278 RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, AU_OFF, AG_NORM, AG_NORM, AU_OFF, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, \ 337 RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, AU_OFF, AG_NORM, AG_NORM, AU_OFF, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, \
279 RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, ___,___, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_SAD, RGB_HUD, \ 338 RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX,____,____,XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_SAD, RGB_HUD, \
280 _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ___,___, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______ \ 339 _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,____,____,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______ \
281 ), 340 ),
282 341
283 /* AUX modifier key layer 342 /* AUX modifier key layer
@@ -293,12 +352,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
293 * | | | | | | BS | Enter| | | | | | | | 352 * | | | | | | BS | Enter| | | | | | | |
294 * `-------------------------------------------------------------------------------------------------' 353 * `-------------------------------------------------------------------------------------------------'
295 */ 354 */
296 [_AUX] = LAYOUT_kc( \ 355#define _BSPC_RAEN KC_BSPC, LT(_RAISE,KC_ENT)
356 [_AUX] = LAYOUT_wrapper( \
297 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ 357 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
298 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ 358 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
299 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ 359 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
300 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ 360 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
301 ____, ____, ____, ____, ____, BSPC, RAEN, ____, ____, ____, ____, ____, ____, ____ \ 361 ____, ____, ____, ____, ____, _BSPC_RAEN, ____, ____, ____, ____, ____, ____, ____ \
302 ) 362 )
303}; 363};
304 364
@@ -307,28 +367,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
307#endif 367#endif
308 368
309 369
310#ifdef AUDIO_ENABLE 370int current_default_layer;
311
312float tone_qwerty[][2] = SONG(QWERTY_SOUND);
313float tone_dvorak[][2] = SONG(DVORAK_SOUND);
314float tone_colemak[][2] = SONG(COLEMAK_SOUND);
315float tone_plover[][2] = SONG(PLOVER_SOUND);
316float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
317float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
318#endif
319 371
320static int current_default_layer; 372uint32_t default_layer_state_set_user(uint32_t state) {
321 373 current_default_layer = biton32(state);
322uint32_t default_layer_state_set_kb(uint32_t state) {
323 // 1<<_QWERTY - 1 == 1 - 1 == _QWERTY (=0)
324 // 1<<_COLEMAK - 1 == 2 - 1 == _COLEMAK (=1)
325 current_default_layer = state - 1;
326 // 1<<_DVORAK - 2 == 4 - 2 == _DVORAK (=2)
327 if ( current_default_layer == 3 ) current_default_layer -= 1;
328 // 1<<_EUCALYN - 5 == 8 - 5 == _EUCALYN (=3)
329 if ( current_default_layer == 7 ) current_default_layer -= 4;
330 // 1<<_KEYPAD - 12 == 16 - 12 == _KEYPAD (=4)
331 if ( current_default_layer == 15 ) current_default_layer -= 11;
332 return state; 374 return state;
333} 375}
334 376
@@ -351,56 +393,41 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
351 switch (keycode) { 393 switch (keycode) {
352 case QWERTY: 394 case QWERTY:
353 if (record->event.pressed) { 395 if (record->event.pressed) {
354 #ifdef AUDIO_ENABLE
355 PLAY_SONG(tone_qwerty);
356 #endif
357 update_base_layer(_QWERTY); 396 update_base_layer(_QWERTY);
358 } 397 }
359 return false; 398 return false;
360 break; 399 break;
361 case COLEMAK: 400 case COLEMAK:
362 if (record->event.pressed) { 401 if (record->event.pressed) {
363 #ifdef AUDIO_ENABLE
364 PLAY_SONG(tone_colemak);
365 #endif
366 update_base_layer(_COLEMAK); 402 update_base_layer(_COLEMAK);
367 } 403 }
368 return false; 404 return false;
369 break; 405 break;
370 case DVORAK: 406 case DVORAK:
371 if (record->event.pressed) { 407 if (record->event.pressed) {
372 #ifdef AUDIO_ENABLE
373 PLAY_SONG(tone_dvorak);
374 #endif
375 update_base_layer(_DVORAK); 408 update_base_layer(_DVORAK);
376 } 409 }
377 return false; 410 return false;
378 break; 411 break;
379 case EUCALYN: 412 case EUCALYN:
380 if (record->event.pressed) { 413 if (record->event.pressed) {
381 #ifdef AUDIO_ENABLE
382 PLAY_SONG(tone_dvorak);
383 #endif
384 update_base_layer(_EUCALYN); 414 update_base_layer(_EUCALYN);
385 } 415 }
386 return false; 416 return false;
387 break; 417 break;
388 case KEYPAD: 418 case KEYPAD:
389 if (record->event.pressed) { 419 if (record->event.pressed) {
390 #ifdef AUDIO_ENABLE
391 PLAY_SONG(tone_dvorak);
392 #endif
393 update_base_layer(_KEYPAD); 420 update_base_layer(_KEYPAD);
394 } 421 }
395 return false; 422 return false;
396 break; 423 break;
397 case KC_ZERO2: 424 case ZERO2:
398 if (record->event.pressed) { 425 if (record->event.pressed) {
399 SEND_STRING("00"); 426 SEND_STRING("00");
400 } 427 }
401 return false; 428 return false;
402 break; 429 break;
403 case KC_xEISU: 430 case xEISU:
404 if (record->event.pressed) { 431 if (record->event.pressed) {
405 if(keymap_config.swap_lalt_lgui==false){ 432 if(keymap_config.swap_lalt_lgui==false){
406 register_code(KC_LANG2); 433 register_code(KC_LANG2);
@@ -412,7 +439,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
412 } 439 }
413 return false; 440 return false;
414 break; 441 break;
415 case KC_xKANA: 442 case xKANA:
416 if (record->event.pressed) { 443 if (record->event.pressed) {
417 if(keymap_config.swap_lalt_lgui==false){ 444 if(keymap_config.swap_lalt_lgui==false){
418 register_code(KC_LANG1); 445 register_code(KC_LANG1);
@@ -437,161 +464,5 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
437} 464}
438 465
439void matrix_init_user(void) { 466void matrix_init_user(void) {
440 #ifdef AUDIO_ENABLE 467 INIT_HELIX_OLED(); /* define in layer_number.h */
441 startup_user();
442 #endif
443 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
444 #ifdef SSD1306OLED
445 iota_gfx_init(!has_usb()); // turns on the display
446 #endif
447}
448
449
450#ifdef AUDIO_ENABLE
451
452void startup_user()
453{
454 _delay_ms(20); // gets rid of tick
455}
456
457void shutdown_user()
458{
459 _delay_ms(150);
460 stop_all_notes();
461}
462
463void music_on_user(void)
464{
465 music_scale_user();
466}
467
468void music_scale_user(void)
469{
470 PLAY_SONG(music_scale);
471}
472
473#endif
474
475
476//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
477#ifdef SSD1306OLED
478
479void matrix_scan_user(void) {
480 iota_gfx_task(); // this is what updates the display continuously
481} 468}
482
483void matrix_update(struct CharacterMatrix *dest,
484 const struct CharacterMatrix *source) {
485 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
486 memcpy(dest->display, source->display, sizeof(dest->display));
487 dest->dirty = true;
488 }
489}
490
491static void render_logo(struct CharacterMatrix *matrix) {
492
493 static char logo[]={
494 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
495 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
496 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
497 0};
498 matrix_write(matrix, logo);
499#ifdef RGBLIGHT_ENABLE
500 char buf[30];
501 if (RGBLIGHT_MODES > 1 && rgblight_config.enable) {
502 snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
503 rgblight_config.mode,
504 rgblight_config.hue/RGBLIGHT_HUE_STEP,
505 rgblight_config.sat/RGBLIGHT_SAT_STEP,
506 rgblight_config.val/RGBLIGHT_VAL_STEP);
507 matrix_write(matrix, buf);
508 }
509#endif
510 //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
511}
512
513static const char Qwerty_name[] PROGMEM = " Qwerty";
514static const char Colemak_name[] PROGMEM = " Colemak";
515static const char Dvorak_name[] PROGMEM = " Dvorak";
516static const char Eucalyn_name[] PROGMEM = " Eucalyn";
517static const char Keypad_name[] PROGMEM = " Keypad";
518
519static const char AUX_name[] PROGMEM = ":AUX";
520static const char KAUX_name[] PROGMEM = ":00";
521static const char Padfunc_name[] PROGMEM = ":PadFunc";
522static const char Lower_name[] PROGMEM = ":Func";
523static const char Raise_name[] PROGMEM = ":Extra";
524static const char Adjust_name[] PROGMEM = ":Adjust";
525
526static const char *layer_names[] = {
527 [_QWERTY] = Qwerty_name,
528 [_COLEMAK] = Colemak_name,
529 [_DVORAK] = Dvorak_name,
530 [_EUCALYN]= Eucalyn_name,
531 [_KEYPAD] = Keypad_name,
532 [_AUX] = AUX_name,
533 [_KAUX] = KAUX_name,
534 [_LOWER] = Lower_name,
535 [_RAISE] = Raise_name,
536 [_PADFUNC]= Padfunc_name,
537 [_ADJUST] = Adjust_name
538};
539
540void render_status(struct CharacterMatrix *matrix) {
541
542 // Render to mode icon
543 static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
544 if(keymap_config.swap_lalt_lgui==false){
545 matrix_write(matrix, logo[0][0]);
546 matrix_write_P(matrix, PSTR("\n"));
547 matrix_write(matrix, logo[0][1]);
548 }else{
549 matrix_write(matrix, logo[1][0]);
550 matrix_write_P(matrix, PSTR("\n"));
551 matrix_write(matrix, logo[1][1]);
552 }
553
554 // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
555 int name_num;
556 uint32_t lstate;
557 matrix_write_P(matrix, layer_names[current_default_layer]);
558 matrix_write_P(matrix, PSTR("\n"));
559 for( lstate = layer_state, name_num = 0;
560 lstate && name_num < sizeof(layer_names)/sizeof(char *);
561 lstate >>=1, name_num++ ) {
562 if( (lstate & 1) != 0 ) {
563 if( layer_names[name_num] ) {
564 matrix_write_P(matrix, layer_names[name_num]);
565 }
566 }
567 }
568
569 // Host Keyboard LED Status
570 char led[40];
571 snprintf(led, sizeof(led), "\n%s %s %s",
572 (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
573 (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
574 (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
575 matrix_write(matrix, led);
576}
577
578
579void iota_gfx_task_user(void) {
580 struct CharacterMatrix matrix;
581
582#if DEBUG_TO_SCREEN
583 if (debug_enable) {
584 return;
585 }
586#endif
587
588 matrix_clear(&matrix);
589 if(is_master){
590 render_status(&matrix);
591 }else{
592 render_logo(&matrix);
593 }
594 matrix_update(&display, &matrix);
595}
596
597#endif
diff --git a/keyboards/helix/rev2/keymaps/five_rows/layer_number.h b/keyboards/helix/rev2/keymaps/five_rows/layer_number.h
new file mode 100644
index 000000000..1272feba4
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/five_rows/layer_number.h
@@ -0,0 +1,26 @@
1#pragma once
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7enum layer_number {
8 _QWERTY = 0,
9 _COLEMAK,
10 _DVORAK,
11 _EUCALYN,
12 _KEYPAD,
13 _AUX,
14 _KAUX,
15 _LOWER,
16 _RAISE,
17 _PADFUNC,
18 _ADJUST,
19};
20
21#if defined(SSD1306OLED)
22extern void init_helix_oled(void);
23# define INIT_HELIX_OLED() init_helix_oled();
24#else
25# define INIT_HELIX_OLED()
26#endif
diff --git a/keyboards/helix/rev2/keymaps/five_rows/oled_display.c b/keyboards/helix/rev2/keymaps/five_rows/oled_display.c
new file mode 100644
index 000000000..c1f039e5b
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/five_rows/oled_display.c
@@ -0,0 +1,200 @@
1/* Copyright 2020 mtei
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18#include <stdio.h>
19#ifdef CONSOLE_ENABLE
20 #include <print.h>
21#endif
22#ifdef SSD1306OLED
23 #include "ssd1306.h"
24#endif
25#include "string.h"
26#include "layer_number.h"
27
28extern int current_default_layer;
29
30void init_helix_oled(void) {
31#ifdef SSD1306OLED
32 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
33 iota_gfx_init(!has_usb()); // turns on the display
34#endif
35}
36
37//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
38#if defined(SSD1306OLED) || defined(OLED_DRIVER_ENABLE)
39
40# if defined(OLED_DRIVER_ENABLE)
41oled_rotation_t oled_init_user(oled_rotation_t rotation) {
42 if (is_keyboard_master()) {
43 return OLED_ROTATION_0;
44 } else {
45 return OLED_ROTATION_180;
46 }
47}
48# else
49# define oled_write(data,flag) matrix_write(matrix, data)
50# define oled_write_P(data,flag) matrix_write_P(matrix, data)
51# endif
52
53# ifdef SSD1306OLED
54void matrix_scan_user(void) {
55 iota_gfx_task(); // this is what updates the display continuously
56}
57
58void matrix_update(struct CharacterMatrix *dest,
59 const struct CharacterMatrix *source) {
60 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
61 memcpy(dest->display, source->display, sizeof(dest->display));
62 dest->dirty = true;
63 }
64}
65# endif
66
67# ifdef SSD1306OLED
68static void render_logo(struct CharacterMatrix *matrix) {
69# else
70static void render_logo(void) {
71# endif
72
73 static const char helix_logo[] PROGMEM = {
74 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
75 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
76 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
77 0};
78 oled_write_P(helix_logo, false);
79# ifdef RGBLIGHT_ENABLE
80 char buf[30];
81 if (RGBLIGHT_MODES > 1 && rgblight_is_enabled()) {
82 snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
83 rgblight_get_mode(),
84 rgblight_get_hue()/RGBLIGHT_HUE_STEP,
85 rgblight_get_sat()/RGBLIGHT_SAT_STEP,
86 rgblight_get_val()/RGBLIGHT_VAL_STEP);
87 oled_write(buf, false);
88# ifndef SSD1306OLED
89 } else {
90 oled_write_P( PSTR("\n"), false);
91# endif
92 }
93# endif
94}
95
96static const char Qwerty_name[] PROGMEM = " Qwerty";
97static const char Colemak_name[] PROGMEM = " Colemak";
98static const char Dvorak_name[] PROGMEM = " Dvorak";
99static const char Eucalyn_name[] PROGMEM = " Eucalyn";
100static const char Keypad_name[] PROGMEM = " Keypad";
101
102static const char AUX_name[] PROGMEM = ":AUX";
103static const char KAUX_name[] PROGMEM = ":00";
104static const char Padfunc_name[] PROGMEM = ":PadFunc";
105static const char Lower_name[] PROGMEM = ":Func";
106static const char Raise_name[] PROGMEM = ":Extra";
107static const char Adjust_name[] PROGMEM = ":Adjust";
108
109static const char *layer_names[] = {
110 [_QWERTY] = Qwerty_name,
111 [_COLEMAK] = Colemak_name,
112 [_DVORAK] = Dvorak_name,
113 [_EUCALYN]= Eucalyn_name,
114 [_KEYPAD] = Keypad_name,
115 [_AUX] = AUX_name,
116 [_KAUX] = KAUX_name,
117 [_LOWER] = Lower_name,
118 [_RAISE] = Raise_name,
119 [_PADFUNC]= Padfunc_name,
120 [_ADJUST] = Adjust_name
121};
122
123# ifdef SSD1306OLED
124void render_status(struct CharacterMatrix *matrix) {
125# else
126void render_status(void) {
127# endif
128
129 // Render to mode icon
130 static const char os_logo[][2][3] PROGMEM ={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
131 if(keymap_config.swap_lalt_lgui==false){
132 oled_write_P(os_logo[0][0], false);
133 oled_write_P(PSTR("\n"), false);
134 oled_write_P(os_logo[0][1], false);
135 } else {
136 oled_write_P(os_logo[1][0], false);
137 oled_write_P(PSTR("\n"), false);
138 oled_write_P(os_logo[1][1], false);
139 }
140
141 // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
142 int name_num;
143 uint32_t lstate;
144 oled_write_P(layer_names[current_default_layer], false);
145 oled_write_P(PSTR("\n"), false);
146 for (lstate = layer_state, name_num = 0;
147 lstate && name_num < sizeof(layer_names)/sizeof(char *);
148 lstate >>=1, name_num++) {
149 if ((lstate & 1) != 0) {
150 if (layer_names[name_num]) {
151 oled_write_P(layer_names[name_num], false);
152 }
153 }
154 }
155
156 // Host Keyboard LED Status
157 char led[40];
158 snprintf(led, sizeof(led), "\n%s %s %s",
159 (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
160 (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
161 (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
162 oled_write(led, false);
163}
164
165# ifdef SSD1306OLED
166void iota_gfx_task_user(void) {
167 struct CharacterMatrix matrix;
168
169# if DEBUG_TO_SCREEN
170 if (debug_enable) {
171 return;
172 }
173# endif
174
175 matrix_clear(&matrix);
176 if (is_keyboard_master()) {
177 render_status(&matrix);
178 } else {
179 render_logo(&matrix);
180 }
181 matrix_update(&display, &matrix);
182}
183# else
184void oled_task_user(void) {
185
186# if DEBUG_TO_SCREEN
187 if (debug_enable) {
188 return;
189 }
190# endif
191
192 if(is_keyboard_master()){
193 render_status();
194 }else{
195 render_logo();
196 }
197}
198# endif
199
200#endif
diff --git a/keyboards/helix/rev2/keymaps/five_rows/rules.mk b/keyboards/helix/rev2/keymaps/five_rows/rules.mk
index 8c4239deb..83cdb30d0 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/rules.mk
+++ b/keyboards/helix/rev2/keymaps/five_rows/rules.mk
@@ -25,9 +25,51 @@ HELIX_ROWS = 5 # Helix Rows is 4 or 5
25# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone) 25# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
26 26
27ifneq ($(strip $(HELIX)),) 27ifneq ($(strip $(HELIX)),)
28 ifeq ($(findstring console,$(HELIX)), console) 28 define KEYMAP_OPTION_PARSE
29 CONSOLE_ENABLE = yes 29 # $xinfo .$1.x #debug
30 endif 30 # parse 'dispoff', 'consle', 'stdole', 'oled', 'sc'
31 ifeq ($(strip $1),dispoff)
32 OLED_ENABLE = no
33 OLED_DRIVER_ENABLE = no
34 LED_BACK_ENABLE = no
35 LED_UNDERGLOW_ENABLE = no
36 endif
37 ifeq ($(strip $1),console)
38 CONSOLE_ENABLE = yes
39 endif
40 ifeq ($(strip $1),stdole)
41 ## make HELIX=stdole helix:five_rows -- use TOP/drivers/oled/oled_driver.c
42 OLED_ENABLE = new
43 endif
44 ifeq ($(strip $1),oled)
45 ## make HELIX=oled helix:five_rows -- use helix/local_drivers/ssd1306.c
46 OLED_ENABLE = yes
47 endif
48 ifeq ($(strip $1),back)
49 LED_BACK_ENABLE = yes
50 endif
51 ifeq ($(strip $1),sc)
52 SPLIT_KEYBOARD = yes
53 endif
54 endef # end of KEYMAP_OPTION_PARSE
55
56 COMMA=,
57 $(eval $(foreach A_OPTION_NAME,$(subst $(COMMA), ,$(HELIX)), \
58 $(call KEYMAP_OPTION_PARSE,$(A_OPTION_NAME))))
59endif
60
61ifeq ($(strip $(OLED_ENABLE)), new)
62 OLED_DRIVER_ENABLE = yes
63 OLED_ENABLE = no
64 SRC += oled_display.c
65 ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
66 OPT_DEFS += -DOLED_FONT_H=\<helixfont.h\>
67 else
68 OPT_DEFS += -DOLED_FONT_H=\"common/glcdfont.c\"
69 endif
70endif
71ifeq ($(strip $(OLED_ENABLE)), yes)
72 SRC += oled_display.c
31endif 73endif
32 74
33# convert Helix-specific options (that represent combinations of standard options) 75# convert Helix-specific options (that represent combinations of standard options)
diff --git a/keyboards/helix/rev3_5rows/keymaps/five_rows/config.h b/keyboards/helix/rev3_5rows/keymaps/five_rows/config.h
new file mode 100644
index 000000000..416e8fd7c
--- /dev/null
+++ b/keyboards/helix/rev3_5rows/keymaps/five_rows/config.h
@@ -0,0 +1,48 @@
1/*
2This is the c configuration file for the keymap
3
4Copyright 2012 Jun Wako <wakojun@gmail.com>
5Copyright 2015 Jack Humbert
6Copyright 2020 mtei
7
8This program is free software: you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation, either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#ifndef CONFIG_USER_H
23#define CONFIG_USER_H
24
25#undef TAPPING_TERM
26#define TAPPING_TERM 300
27#define PERMISSIVE_HOLD
28/* when TAPPING_TERM >= 500 same effect PERMISSIVE_HOLD.
29 see tmk_core/common/action_tapping.c */
30
31// place overrides here
32
33// If you need more program area, try select and reduce rgblight modes to use.
34
35// Selection of RGBLIGHT MODE to use.
36#if defined(LED_ANIMATIONS)
37 #define RGBLIGHT_EFFECT_BREATHING
38 #define RGBLIGHT_EFFECT_RAINBOW_MOOD
39 #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
40 //#define RGBLIGHT_EFFECT_SNAKE
41 //#define RGBLIGHT_EFFECT_KNIGHT
42 #define RGBLIGHT_EFFECT_CHRISTMAS
43 #define RGBLIGHT_EFFECT_STATIC_GRADIENT
44 //#define RGBLIGHT_EFFECT_RGB_TEST
45 //#define RGBLIGHT_EFFECT_ALTERNATING
46#endif
47
48#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/rev3_5rows/keymaps/five_rows/keyboard_post_init_user_scan.c b/keyboards/helix/rev3_5rows/keymaps/five_rows/keyboard_post_init_user_scan.c
new file mode 100644
index 000000000..7c84e1ed8
--- /dev/null
+++ b/keyboards/helix/rev3_5rows/keymaps/five_rows/keyboard_post_init_user_scan.c
@@ -0,0 +1,7 @@
1#include QMK_KEYBOARD_H
2
3void keyboard_post_init_user(void) {
4#if defined(DEBUG_MATRIX_SCAN_RATE)
5 debug_enable = true;
6#endif
7}
diff --git a/keyboards/helix/rev3_5rows/keymaps/five_rows/keymap.c b/keyboards/helix/rev3_5rows/keymaps/five_rows/keymap.c
new file mode 100644
index 000000000..a2ec10862
--- /dev/null
+++ b/keyboards/helix/rev3_5rows/keymaps/five_rows/keymap.c
@@ -0,0 +1,468 @@
1/* Copyright 2020 mtei
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18#include "util.h"
19#include "bootloader.h"
20#ifdef PROTOCOL_LUFA
21#include "lufa.h"
22#include "split_util.h"
23#endif
24#ifdef CONSOLE_ENABLE
25 #include <print.h>
26#endif
27#include "layer_number.h"
28
29extern keymap_config_t keymap_config;
30
31extern uint8_t is_master;
32
33enum custom_keycodes {
34 QWERTY = SAFE_RANGE,
35 COLEMAK,
36 DVORAK,
37 EUCALYN,
38 KEYPAD,
39 xEISU,
40 xKANA,
41 ZERO2,
42 RGBRST
43};
44
45#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
46
47//Macros
48#define KC_LOWER MO(_LOWER)
49#define XXXX XXXXXXX
50#define ____ _______
51#define KC_ADJ MO(_ADJUST)
52#define KC_LSMI LSFT(KC_MINS)
53#define KC_LSEQ LSFT(KC_EQL)
54#define KC_LSRB LSFT(KC_RBRC)
55#define KC_LSLB LSFT(KC_LBRC)
56
57#define _1_2_3_4_5 KC_1, KC_2, KC_3, KC_4, KC_5
58#define _6_7_8_9_0 KC_6, KC_7, KC_8, KC_9, KC_0
59#define L_LOWER2_CAPS_LALT_LGUI_SPC_RABS \
60 KC_LOWER, KC_LOWER, KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, LT(_RAISE,KC_BSPC)
61#define R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
62 LT(_RAISE,KC_ENT), KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_LOWER, KC_LOWER
63
64
65#if MATRIX_ROWS == 10 // HELIX_ROWS == 5
66const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
67
68 /* Qwerty
69 * ,-----------------------------------. ,-----------------------------------.
70 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
71 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
72 * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
73 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
74 * | Ctrl| A | S | D | F | G | | H | J | K | L | ; |Ctrl |
75 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
76 * |Shift| Z | X | C | V | B | ` | ' | N | M | , | . | / |Shift|
77 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
78 * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
79 * `-----------------------------------------------------------------------------------'
80 */
81#define _Q_W_E_R_T KC_Q, KC_W, KC_E, KC_R, KC_T
82#define _Y_U_I_O_P KC_Y, KC_U, KC_I, KC_O, KC_P
83#define _A_S_D_F_G KC_A, KC_S, KC_D, KC_F, KC_G
84#define _H_J_K_L_SCLN KC_H, KC_J, KC_K, KC_L, KC_SCLN
85#define _Z_X_C_V_B KC_Z, KC_X, KC_C, KC_V, KC_B
86#define _N_M_COMM_DOT_SLSH KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
87
88 [_QWERTY] = LAYOUT_wrapper( \
89 KC_ESC, _1_2_3_4_5, _6_7_8_9_0, KC_BSPC, \
90 KC_TAB, _Q_W_E_R_T, _Y_U_I_O_P, KC_BSLS, \
91 KC_LCTL, _A_S_D_F_G, _H_J_K_L_SCLN, KC_RCTL, \
92 KC_LSFT, _Z_X_C_V_B, KC_GRV, KC_QUOT, _N_M_COMM_DOT_SLSH, KC_RSFT, \
93 L_LOWER2_CAPS_LALT_LGUI_SPC_RABS, R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
94 ),
95
96 /* Colemak
97 * ,-----------------------------------. ,-----------------------------------.
98 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
99 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
100 * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
101 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
102 * | Ctrl| A | R | S | T | D | | H | N | E | I | O |Ctrl |
103 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
104 * |Shift| Z | X | C | V | B | ` | ' | K | M | , | . | / |Shift|
105 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
106 * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
107 * `-----------------------------------------------------------------------------------'
108 */
109#define _Q_W_F_P_G KC_Q, KC_W, KC_F, KC_P, KC_G
110#define _J_L_U_Y_SCLN KC_J, KC_L, KC_U, KC_Y, KC_SCLN
111#define _A_R_S_T_D KC_A, KC_R, KC_S, KC_T, KC_D
112#define _H_N_E_I_O KC_H, KC_N, KC_E, KC_I, KC_O
113#define _Z_X_C_V_B KC_Z, KC_X, KC_C, KC_V, KC_B
114#define _K_M_COMM_DOT_SLSH KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
115
116 [_COLEMAK] = LAYOUT_wrapper( \
117 KC_ESC, _1_2_3_4_5, _6_7_8_9_0, KC_BSPC, \
118 KC_TAB, _Q_W_F_P_G, _J_L_U_Y_SCLN, KC_BSLS, \
119 KC_LCTL, _A_R_S_T_D, _H_N_E_I_O, KC_RCTL, \
120 KC_LSFT, _Z_X_C_V_B, KC_GRV, KC_QUOT, _K_M_COMM_DOT_SLSH, KC_RSFT, \
121 L_LOWER2_CAPS_LALT_LGUI_SPC_RABS, R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
122 ),
123
124 /* Dvorak
125 * ,-----------------------------------. ,-----------------------------------.
126 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
127 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
128 * | Tab | ' | , | . | P | Y | | F | G | C | R | L | \ |
129 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
130 * | Ctrl| A | O | E | U | I | | D | H | T | N | S |Ctrl |
131 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
132 * |Shift| ; | Q | J | K | X | ` | / | B | M | W | V | Z |Shift|
133 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
134 * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
135 * `-----------------------------------------------------------------------------------'
136 */
137#define _QUOT_COMM_DOT_P_Y KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
138#define _F_G_C_R_L KC_F, KC_G, KC_C, KC_R, KC_L
139#define _A_O_E_U_I KC_A, KC_O, KC_E, KC_U, KC_I
140#define _D_H_T_N_S KC_D, KC_H, KC_T, KC_N, KC_S
141#define _SCLN_Q_J_K_X KC_SCLN, KC_Q, KC_J, KC_K, KC_X
142#define _B_M_W_V_Z KC_B, KC_M, KC_W, KC_V, KC_Z
143
144 [_DVORAK] = LAYOUT_wrapper( \
145 KC_ESC, _1_2_3_4_5, _6_7_8_9_0, KC_BSPC, \
146 KC_TAB, _QUOT_COMM_DOT_P_Y, _F_G_C_R_L, KC_BSLS, \
147 KC_LCTL, _A_O_E_U_I, _D_H_T_N_S, KC_RCTL, \
148 KC_LSFT, _SCLN_Q_J_K_X, KC_GRV, KC_SLSH, _B_M_W_V_Z, KC_RSFT, \
149 L_LOWER2_CAPS_LALT_LGUI_SPC_RABS, R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
150 ),
151
152 /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout)
153 * ,-----------------------------------. ,-----------------------------------.
154 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
155 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
156 * | Tab | Q | W | , | . | ; | | M | R | D | Y | P | \ |
157 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
158 * | Ctrl| A | O | E | I | U | | G | T | K | S | N |Ctrl |
159 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
160 * |Shift| Z | X | C | V | F | ` | ' | B | H | J | L | / |Shift|
161 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
162 * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
163 * `-----------------------------------------------------------------------------------'
164 */
165#define _Q_W_COMM_DOT_SCLN KC_Q, KC_W, KC_COMM, KC_DOT, KC_SCLN
166#define _M_R_D_Y_P KC_M, KC_R, KC_D, KC_Y, KC_P
167#define _A_O_E_I_U KC_A, KC_O, KC_E, KC_I, KC_U
168#define _G_T_K_S_N KC_G, KC_T, KC_K, KC_S, KC_N
169#define _Z_X_C_V_F KC_Z, KC_X, KC_C, KC_V, KC_F
170#define _B_H_J_L_SLSH KC_B, KC_H, KC_J, KC_L, KC_SLSH
171
172 [_EUCALYN] = LAYOUT_wrapper( \
173 KC_ESC, _1_2_3_4_5, _6_7_8_9_0, KC_BSPC, \
174 KC_TAB, _Q_W_COMM_DOT_SCLN, _M_R_D_Y_P, KC_BSLS, \
175 KC_LCTL, _A_O_E_I_U, _G_T_K_S_N, KC_RCTL, \
176 KC_LSFT, _Z_X_C_V_F, KC_GRV, KC_QUOT, _B_H_J_L_SLSH, KC_RSFT, \
177 L_LOWER2_CAPS_LALT_LGUI_SPC_RABS, R_RAEN_SPC_RGUI_RALT_APP_LOWER2 \
178 ),
179
180 /* Keypad
181 * ,-----------------------------------. ,-----------------------------------.
182 * | Tab | / | * | Del | F1 | F6 | | F1 | F6 | Del | Tab | / | * |
183 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
184 * | 7 | 8 | 9 | BS | F2 | F7 | | F2 | F7 | BS | 7 | 8 | 9 |
185 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
186 * | 4 | 5 | 6 | - | F3 | F8 | | F3 | F8 | - | 4 | 5 | 6 |
187 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
188 * | 1 | 2 | 3 | + | F4 | F9 | F11 | F11 | F4 | F9 | + | 1 | 2 | 3 |
189 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
190 * | 0 | , | . |Enter| F5 | F10| F12 | F12 | F5 | F10|Enter| 0 | , | . |
191 * `-----------------------------------------------------------------------------------'
192 */
193#define KP_TOP KC_TAB, KC_PSLS, KC_PAST
194#define KP_789 KC_KP_7, KC_KP_8, KC_KP_9
195#define KP_456 KC_KP_4, KC_KP_5, KC_KP_6
196#define KP_123 KC_KP_1, KC_KP_2, KC_KP_3
197#define KP_BTM KC_KP_0, KC_COMM, KC_PDOT
198#define F_1_6 KC_F1, KC_F6
199#define F_2_7 KC_F2, KC_F7
200#define F_3_8 KC_F3, KC_F8
201#define F_4_9 KC_F4, KC_F9
202#define F_510 KC_F5, KC_F10
203#define FF12 LT(_PADFUNC,KC_F12)
204
205 [_KEYPAD] = LAYOUT_wrapper( \
206 KP_TOP, KC_DEL, F_1_6, F_1_6, KC_DEL, KP_TOP, \
207 KP_789, KC_BSPC, F_2_7, F_2_7, KC_BSPC, KP_789, \
208 KP_456, KC_PMNS, F_3_8, F_3_8, KC_PMNS, KP_456, \
209 KP_123, KC_PPLS, F_4_9, KC_F11, KC_F11, F_4_9, KC_PPLS, KP_123, \
210 KP_BTM, KC_PENT, F_510, FF12, FF12, F_510, KC_PENT, KP_BTM \
211 ),
212
213 /* AUX modifier key layer
214 * ,-----------------------------------. ,-----------------------------------.
215 * | | | | | | | | | | | | | |
216 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
217 * | | | | | | | | | | | | | |
218 * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
219 * | | | | | | | | | | | | | |
220 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
221 * | | | | | | | | | | | | | | |
222 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
223 * | | 00 | | | | | | | | | | | 00 | |
224 * `-----------------------------------------------------------------------------------'
225 */
226 [_KAUX] = LAYOUT( \
227 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
228 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
229 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
230 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
231 ____,ZERO2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,ZERO2, ____ \
232 ),
233
234 /* Keypad function layer
235 * ,-----------------------------------------. ,-----------------------------------------.
236 * | | | | Pause| ScrLk| PtrSc| | PtrSc| ScrLk| Pause| | | |
237 * |------+------+------+------+------+------| |------+------+------+------+------+------|
238 * | | | | Home | Up | PgUp | | PgUp | Up | Home | | | |
239 * |------+------+------+------+------+------| |------+------+------+------+------+------|
240 * | |Delete|Insert| Left | Down | Right| | Left | Down | Right|Insert|Delete| |
241 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
242 * | | | | End | | PgDn |Adjust|Adjust| PgDn | | End | | | |
243 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
244 * | | | | | | | | | | | | | | |
245 * `-------------------------------------------------------------------------------------------------'
246 */
247#define _PAUS_SLCK_PSCR KC_PAUS, KC_SLCK, KC_PSCR
248#define _PSCR_SLCK_PAUS KC_PSCR, KC_SLCK, KC_PAUS
249#define _HOME_UP_PGUP KC_HOME, KC_UP, KC_PGUP
250#define _PGUP_UP_HOME KC_PGUP, KC_UP, KC_HOME
251#define _DEL_INS_LEFT_DOWN_RGHT KC_DEL, KC_INS, KC_LEFT, KC_DOWN, KC_RGHT
252#define _LEFT_DOWN_RGHT_INS_DEL KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL
253#define _PGDN_ADJ_ADJ_PGDN KC_PGDN, KC_ADJ, KC_ADJ, KC_PGDN
254
255 [_PADFUNC] = LAYOUT_wrapper( \
256 XXXX, XXXX, XXXX, _PAUS_SLCK_PSCR, _PSCR_SLCK_PAUS, XXXX, XXXX, XXXX, \
257 XXXX, XXXX, XXXX, _HOME_UP_PGUP, _PGUP_UP_HOME, XXXX, XXXX, XXXX, \
258 XXXX, _DEL_INS_LEFT_DOWN_RGHT, _LEFT_DOWN_RGHT_INS_DEL, XXXX, \
259 XXXX, XXXX, XXXX, KC_END, XXXX, _PGDN_ADJ_ADJ_PGDN, XXXX, KC_END, XXXX, XXXX, XXXX, \
260 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, ____, ____, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX \
261 ),
262
263 /* Lower
264 * ,-----------------------------------------. ,-----------------------------------------.
265 * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
266 * |------+------+------+------+------+------| |------+------+------+------+------+------|
267 * | | |Pause | ScrLk| Ins | | | | Ins | ScrLk|Pause | | F12 |
268 * |------+------+------+------+------+------| |------+------+------+------+------+------|
269 * | | PgUp | | Up |Delete| Home | | Home |Delete| Up | | PgUp | |
270 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
271 * | | PgDn | Left | Down | Right| End |Adjust|Adjust| End | Left | Down | Right| PgDn | |
272 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
273 * | | | PrtSc| | | | | | | | | PrtSc| | |
274 * `-------------------------------------------------------------------------------------------------'
275 */
276#define _F1_F2_F3_F4_F5 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
277#define _F6_F7_F8_F9_F10_F11 KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11
278#define _PAUS_SLCK_INS KC_PAUS, KC_SLCK, KC_INS
279#define _INS_SLCK_PAUS KC_INS, KC_SLCK, KC_PAUS
280#define _ADJ_ADJ KC_ADJ, KC_ADJ
281#define _UP_DEL_PGUP KC_UP, KC_DEL, KC_PGUP
282#define _PGUP_DEL_UP KC_PGUP, KC_DEL, KC_UP
283#define _END_LEFT_DOWN_RGHT_PGDN KC_END, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN
284#define _PGDN_LEFT_DOWN_RGHT_END KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_END
285
286 [_LOWER] = LAYOUT_wrapper( \
287 XXXX, _F1_F2_F3_F4_F5, _F6_F7_F8_F9_F10_F11, \
288 XXXX, XXXX, _PAUS_SLCK_INS, XXXX, XXXX, _INS_SLCK_PAUS, XXXX, KC_F12, \
289 ____, KC_HOME, XXXX, _UP_DEL_PGUP, _PGUP_DEL_UP, XXXX, KC_HOME, ____, \
290 ____, _END_LEFT_DOWN_RGHT_PGDN, XXXX, XXXX, _PGDN_LEFT_DOWN_RGHT_END, ____, \
291 ____, ____, KC_PSCR, ____, ____, ____, _ADJ_ADJ, ____, ____, ____, KC_PSCR, ____, ____ \
292 ),
293
294 /* Raise
295 * ,-----------------------------------------. ,-----------------------------------------.
296 * | | | | | | | | | | | | | |
297 * |------+------+------+------+------+------| |------+------+------+------+------+------|
298 * | | | | | _ | - | | = | + | | | | |
299 * |------+------+------+------+------+------| |------+------+------+------+------+------|
300 * | | | | | { | [ | | ] | } | | | | |
301 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
302 * | | | | | | EISU | EISU | KANA | KANA | Next | Vol- | Vol+ | Play | |
303 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
304 * | | | | | | | | | | | | | | |
305 * `-------------------------------------------------------------------------------------------------'
306 */
307#define _LSMI_MINS KC_LSMI, KC_MINS
308#define _EQL_LSEQ KC_EQL, KC_LSEQ
309#define _LSLB_LBRC KC_LSLB, KC_LBRC
310#define _RBRC_LSRB KC_RBRC, KC_LSRB
311#define _MNXT_VOLD_VOLU_MPLY KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
312
313 [_RAISE] = LAYOUT_wrapper( \
314 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, \
315 XXXX, XXXX, XXXX, XXXX, _LSMI_MINS, _EQL_LSEQ, XXXX, XXXX, XXXX, XXXX, \
316 ____, XXXX, XXXX, XXXX, _LSLB_LBRC, _RBRC_LSRB, XXXX, XXXX, XXXX, ____, \
317 ____, XXXX, XXXX, XXXX, XXXX,xEISU,xEISU, xKANA,xKANA, _MNXT_VOLD_VOLU_MPLY, ____, \
318 _ADJ_ADJ, XXXX, ____, ____, XXXX, ____, ____, XXXX, ____, ____, XXXX, _ADJ_ADJ \
319 ),
320
321 /* Adjust (Lower + Raise)
322 * ,-----------------------------------------. ,-----------------------------------------.
323 * | |Keypad|Dvorak|Colemk|Euclyn|Qwerty| |Qwerty|Euclyn|Colemk|Dvorak|Keypad| |
324 * |------+------+------+------+------+------| |------+------+------+------+------+------|
325 * | | Reset|RGBRST|RGB ON|Aud on| Win | | Win |Aud on|RGB ON|RGBRST| | |
326 * |------+------+------+------+------+------| |------+------+------+------+------+------|
327 * | HUE+ | SAT+ | VAL+ |RGB md|Audoff| Mac | | Mac |Audoff|RGB md| VAL+ | SAT+ | HUE+ |
328 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
329 * | HUE- | SAT- | VAL- | | | | | | | | | VAL- | SAT- | HUE- |
330 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
331 * | | | | | | | | | | | | | | |
332 * `-------------------------------------------------------------------------------------------------'
333 */
334 [_ADJUST] = LAYOUT( \
335 XXXXXXX, KEYPAD, DVORAK, COLEMAK, EUCALYN, QWERTY, QWERTY, EUCALYN, COLEMAK, DVORAK, KEYPAD, XXXXXXX, \
336 XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, AU_ON, RGB_TOG, RGBRST, XXXXXXX, XXXXXXX, \
337 RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, AU_OFF, AG_NORM, AG_NORM, AU_OFF, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, \
338 RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX,____,____,XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_SAD, RGB_HUD, \
339 _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,____,____,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______ \
340 ),
341
342 /* AUX modifier key layer
343 * ,-----------------------------------------. ,-----------------------------------------.
344 * | | | | | | | | | | | | | |
345 * |------+------+------+------+------+------| |------+------+------+------+------+------|
346 * | | | | | | | | | | | | | |
347 * |------+------+------+------+------+------| |------+------+------+------+------+------|
348 * | | | | | | | | | | | | | |
349 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
350 * | | | | | | | | | | | | | | |
351 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
352 * | | | | | | BS | Enter| | | | | | | |
353 * `-------------------------------------------------------------------------------------------------'
354 */
355#define _BSPC_RAEN KC_BSPC, LT(_RAISE,KC_ENT)
356 [_AUX] = LAYOUT_wrapper( \
357 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
358 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
359 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
360 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
361 ____, ____, ____, ____, ____, _BSPC_RAEN, ____, ____, ____, ____, ____, ____, ____ \
362 )
363};
364
365#else
366#error "undefined keymaps"
367#endif
368
369
370int current_default_layer;
371
372uint32_t default_layer_state_set_user(uint32_t state) {
373 current_default_layer = biton32(state);
374 return state;
375}
376
377void update_base_layer(int base)
378{
379 if( current_default_layer != base ) {
380 eeconfig_update_default_layer(1UL<<base);
381 default_layer_set(1UL<<base);
382 layer_off(_AUX);
383 layer_off(_KAUX);
384 } else {
385 if( base < _KEYPAD )
386 layer_invert(_AUX);
387 else
388 layer_invert(_KAUX);
389 }
390}
391
392bool process_record_user(uint16_t keycode, keyrecord_t *record) {
393 switch (keycode) {
394 case QWERTY:
395 if (record->event.pressed) {
396 update_base_layer(_QWERTY);
397 }
398 return false;
399 break;
400 case COLEMAK:
401 if (record->event.pressed) {
402 update_base_layer(_COLEMAK);
403 }
404 return false;
405 break;
406 case DVORAK:
407 if (record->event.pressed) {
408 update_base_layer(_DVORAK);
409 }
410 return false;
411 break;
412 case EUCALYN:
413 if (record->event.pressed) {
414 update_base_layer(_EUCALYN);
415 }
416 return false;
417 break;
418 case KEYPAD:
419 if (record->event.pressed) {
420 update_base_layer(_KEYPAD);
421 }
422 return false;
423 break;
424 case ZERO2:
425 if (record->event.pressed) {
426 SEND_STRING("00");
427 }
428 return false;
429 break;
430 case xEISU:
431 if (record->event.pressed) {
432 if(keymap_config.swap_lalt_lgui==false){
433 register_code(KC_LANG2);
434 }else{
435 SEND_STRING(SS_LALT("`"));
436 }
437 } else {
438 unregister_code(KC_LANG2);
439 }
440 return false;
441 break;
442 case xKANA:
443 if (record->event.pressed) {
444 if(keymap_config.swap_lalt_lgui==false){
445 register_code(KC_LANG1);
446 }else{
447 SEND_STRING(SS_LALT("`"));
448 }
449 } else {
450 unregister_code(KC_LANG1);
451 }
452 return false;
453 break;
454 case RGBRST:
455 #ifdef RGBLIGHT_ENABLE
456 if (record->event.pressed) {
457 eeconfig_update_rgblight_default();
458 rgblight_enable();
459 }
460 #endif
461 break;
462 }
463 return true;
464}
465
466void matrix_init_user(void) {
467 INIT_HELIX_OLED(); /* define in layer_number.h */
468}
diff --git a/keyboards/helix/rev3_5rows/keymaps/five_rows/layer_number.h b/keyboards/helix/rev3_5rows/keymaps/five_rows/layer_number.h
new file mode 100644
index 000000000..1272feba4
--- /dev/null
+++ b/keyboards/helix/rev3_5rows/keymaps/five_rows/layer_number.h
@@ -0,0 +1,26 @@
1#pragma once
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7enum layer_number {
8 _QWERTY = 0,
9 _COLEMAK,
10 _DVORAK,
11 _EUCALYN,
12 _KEYPAD,
13 _AUX,
14 _KAUX,
15 _LOWER,
16 _RAISE,
17 _PADFUNC,
18 _ADJUST,
19};
20
21#if defined(SSD1306OLED)
22extern void init_helix_oled(void);
23# define INIT_HELIX_OLED() init_helix_oled();
24#else
25# define INIT_HELIX_OLED()
26#endif
diff --git a/keyboards/helix/rev3_5rows/keymaps/five_rows/oled_display.c b/keyboards/helix/rev3_5rows/keymaps/five_rows/oled_display.c
new file mode 100644
index 000000000..c1f039e5b
--- /dev/null
+++ b/keyboards/helix/rev3_5rows/keymaps/five_rows/oled_display.c
@@ -0,0 +1,200 @@
1/* Copyright 2020 mtei
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18#include <stdio.h>
19#ifdef CONSOLE_ENABLE
20 #include <print.h>
21#endif
22#ifdef SSD1306OLED
23 #include "ssd1306.h"
24#endif
25#include "string.h"
26#include "layer_number.h"
27
28extern int current_default_layer;
29
30void init_helix_oled(void) {
31#ifdef SSD1306OLED
32 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
33 iota_gfx_init(!has_usb()); // turns on the display
34#endif
35}
36
37//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
38#if defined(SSD1306OLED) || defined(OLED_DRIVER_ENABLE)
39
40# if defined(OLED_DRIVER_ENABLE)
41oled_rotation_t oled_init_user(oled_rotation_t rotation) {
42 if (is_keyboard_master()) {
43 return OLED_ROTATION_0;
44 } else {
45 return OLED_ROTATION_180;
46 }
47}
48# else
49# define oled_write(data,flag) matrix_write(matrix, data)
50# define oled_write_P(data,flag) matrix_write_P(matrix, data)
51# endif
52
53# ifdef SSD1306OLED
54void matrix_scan_user(void) {
55 iota_gfx_task(); // this is what updates the display continuously
56}
57
58void matrix_update(struct CharacterMatrix *dest,
59 const struct CharacterMatrix *source) {
60 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
61 memcpy(dest->display, source->display, sizeof(dest->display));
62 dest->dirty = true;
63 }
64}
65# endif
66
67# ifdef SSD1306OLED
68static void render_logo(struct CharacterMatrix *matrix) {
69# else
70static void render_logo(void) {
71# endif
72
73 static const char helix_logo[] PROGMEM = {
74 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
75 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
76 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
77 0};
78 oled_write_P(helix_logo, false);
79# ifdef RGBLIGHT_ENABLE
80 char buf[30];
81 if (RGBLIGHT_MODES > 1 && rgblight_is_enabled()) {
82 snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
83 rgblight_get_mode(),
84 rgblight_get_hue()/RGBLIGHT_HUE_STEP,
85 rgblight_get_sat()/RGBLIGHT_SAT_STEP,
86 rgblight_get_val()/RGBLIGHT_VAL_STEP);
87 oled_write(buf, false);
88# ifndef SSD1306OLED
89 } else {
90 oled_write_P( PSTR("\n"), false);
91# endif
92 }
93# endif
94}
95
96static const char Qwerty_name[] PROGMEM = " Qwerty";
97static const char Colemak_name[] PROGMEM = " Colemak";
98static const char Dvorak_name[] PROGMEM = " Dvorak";
99static const char Eucalyn_name[] PROGMEM = " Eucalyn";
100static const char Keypad_name[] PROGMEM = " Keypad";
101
102static const char AUX_name[] PROGMEM = ":AUX";
103static const char KAUX_name[] PROGMEM = ":00";
104static const char Padfunc_name[] PROGMEM = ":PadFunc";
105static const char Lower_name[] PROGMEM = ":Func";
106static const char Raise_name[] PROGMEM = ":Extra";
107static const char Adjust_name[] PROGMEM = ":Adjust";
108
109static const char *layer_names[] = {
110 [_QWERTY] = Qwerty_name,
111 [_COLEMAK] = Colemak_name,
112 [_DVORAK] = Dvorak_name,
113 [_EUCALYN]= Eucalyn_name,
114 [_KEYPAD] = Keypad_name,
115 [_AUX] = AUX_name,
116 [_KAUX] = KAUX_name,
117 [_LOWER] = Lower_name,
118 [_RAISE] = Raise_name,
119 [_PADFUNC]= Padfunc_name,
120 [_ADJUST] = Adjust_name
121};
122
123# ifdef SSD1306OLED
124void render_status(struct CharacterMatrix *matrix) {
125# else
126void render_status(void) {
127# endif
128
129 // Render to mode icon
130 static const char os_logo[][2][3] PROGMEM ={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
131 if(keymap_config.swap_lalt_lgui==false){
132 oled_write_P(os_logo[0][0], false);
133 oled_write_P(PSTR("\n"), false);
134 oled_write_P(os_logo[0][1], false);
135 } else {
136 oled_write_P(os_logo[1][0], false);
137 oled_write_P(PSTR("\n"), false);
138 oled_write_P(os_logo[1][1], false);
139 }
140
141 // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
142 int name_num;
143 uint32_t lstate;
144 oled_write_P(layer_names[current_default_layer], false);
145 oled_write_P(PSTR("\n"), false);
146 for (lstate = layer_state, name_num = 0;
147 lstate && name_num < sizeof(layer_names)/sizeof(char *);
148 lstate >>=1, name_num++) {
149 if ((lstate & 1) != 0) {
150 if (layer_names[name_num]) {
151 oled_write_P(layer_names[name_num], false);
152 }
153 }
154 }
155
156 // Host Keyboard LED Status
157 char led[40];
158 snprintf(led, sizeof(led), "\n%s %s %s",
159 (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
160 (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
161 (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
162 oled_write(led, false);
163}
164
165# ifdef SSD1306OLED
166void iota_gfx_task_user(void) {
167 struct CharacterMatrix matrix;
168
169# if DEBUG_TO_SCREEN
170 if (debug_enable) {
171 return;
172 }
173# endif
174
175 matrix_clear(&matrix);
176 if (is_keyboard_master()) {
177 render_status(&matrix);
178 } else {
179 render_logo(&matrix);
180 }
181 matrix_update(&display, &matrix);
182}
183# else
184void oled_task_user(void) {
185
186# if DEBUG_TO_SCREEN
187 if (debug_enable) {
188 return;
189 }
190# endif
191
192 if(is_keyboard_master()){
193 render_status();
194 }else{
195 render_logo();
196 }
197}
198# endif
199
200#endif
diff --git a/keyboards/helix/rev3_5rows/keymaps/five_rows/rules.mk b/keyboards/helix/rev3_5rows/keymaps/five_rows/rules.mk
new file mode 100644
index 000000000..21261fa20
--- /dev/null
+++ b/keyboards/helix/rev3_5rows/keymaps/five_rows/rules.mk
@@ -0,0 +1,44 @@
1# QMK Standard Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5# See TOP/docs/config_options.md for more information.
6#
7 CONSOLE_ENABLE = no # Console for debug
8 COMMAND_ENABLE = no # Commands for debug and configuration
9 # CONSOLE_ENABLE and COMMAND_ENABLE
10 # yes, no +1500
11 # yes, yes +3200
12 # no, yes +400
13LTO_ENABLE = no # if firmware size over limit, try this option
14
15ifneq ($(strip $(HELIX)),)
16 define KEYMAP_OPTION_PARSE
17 # $xinfo .$1.x #debug
18 # parse 'dispoff', 'consle', 'back', 'oled'
19 ifeq ($(strip $1),dispoff)
20 OLED_DRIVER_ENABLE = no
21 RGBLIGHT_ENABLE = no
22 endif
23 ifeq ($(strip $1),console)
24 CONSOLE_ENABLE = yes
25 endif
26 ifeq ($(strip $1),oled)
27 OLED_DRIVER_ENABLE = yes
28 endif
29 ifeq ($(strip $1),back)
30 RGBLIGHT_ENABLE = yes
31 endif
32 ifeq ($(strip $1),scan)
33 # use DEBUG_MATRIX_SCAN_RATE
34 # see docs/newbs_testing_debugging.md
35 OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE
36 CONSOLE_ENABLE = yes
37 SRC += keyboard_post_init_user_scan.c
38 endif
39 endef # end of KEYMAP_OPTION_PARSE
40
41 COMMA=,
42 $(eval $(foreach A_OPTION_NAME,$(subst $(COMMA), ,$(HELIX)), \
43 $(call KEYMAP_OPTION_PARSE,$(A_OPTION_NAME))))
44endif