aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael F. Lamb <mike@datagrok.org>2018-09-04 08:55:31 -0700
committerDrashna Jaelre <drashna@live.com>2018-09-04 08:55:31 -0700
commit224b4dea9805412d0f4b677dc22c1c4fca79a9de (patch)
treea4fa63e4f4fff33c5dceb6963a498412a9bb213f
parent40718d2ca3590b34c3d41b8988fc055dc6b55add (diff)
downloadqmk_firmware-224b4dea9805412d0f4b677dc22c1c4fca79a9de.tar.gz
qmk_firmware-224b4dea9805412d0f4b677dc22c1c4fca79a9de.zip
mitosis:datagrok add layer select, more layouts (#3835)
* mitosis:datagrok: fix typo'd inconsistent brace arrangement (thank you @cari66ean) * mitosis:datagrok: add makefile argument MITOSIS_DATAGROK_SLOWUART * mitosis:datagrok: return backspace to opposite space, use TT(), more - move backspace back to its position opposite space - move del to red+backspace - move tab back to tap-leftshift - move printscreen/scrolllock/pause to blue+left pinky column - use TT() instead of MO() to stick a layer on if wanted - indentation that my text editor wants - default to no audio; i can enable it at compile time. * mitosis:datagrok: modularize features, add default layer rotator key * mitosis: add MITOSIS_DATAGROK_BOTTOMSPACE makefile argument * mitosis:datagrok: README improvements; document new features * mitosis:datagrok: dot. not "number pad dot." in numbers layer * mitosis:datagrok remove unnecessary _user audio code * mitosis:datagrok: return to MO() for red/blue, keep TT() for purple in this way, the LED still updates quickly when red or blue is pressed, but we can still lock the purple layer on for 10-key numpad operation with red+tapping blue. * mitosis:datagrok: add colemak and dvorak default layers * mitosis:datagrok update readme re: available default layouts * mitosis: remove unneeded code that was overriding led_set_user also, add some comments * mitosis:datagrok: updated led setting code for new layers also, place into led_set_user where it belongs, not matrix_scan_user. * mitosis:datagrok: update LEDs when setting the default layer maybe this should go into default_layer_set? * mitosis:datagrok update readme with new imgur links + other improvements * mitosis:datagrok fix typo in image urls * mitosis:datagrok remove useless #include (ty @drashna) * mitosis:datagrok undo unnecessary change to quantum/quantum.h i can put the extern float definition in my own keymap code. (ty @drashna) * mitosis:datagrok move customized layout to my keymap no need to modify keyboard-level mitosis.h. (ty @drashna) * mitosis:datagrok update comment describing my led indicator logic * datagrok:mitosis update readme to document LED indicator.
-rw-r--r--keyboards/mitosis/keymaps/datagrok/config.h41
-rw-r--r--keyboards/mitosis/keymaps/datagrok/keymap.c233
-rw-r--r--keyboards/mitosis/keymaps/datagrok/readme.md145
-rw-r--r--keyboards/mitosis/keymaps/datagrok/rules.mk25
-rw-r--r--keyboards/mitosis/mitosis.c19
-rw-r--r--keyboards/mitosis/mitosis.h19
6 files changed, 319 insertions, 163 deletions
diff --git a/keyboards/mitosis/keymaps/datagrok/config.h b/keyboards/mitosis/keymaps/datagrok/config.h
index 9edb950cf..1c70a3791 100644
--- a/keyboards/mitosis/keymaps/datagrok/config.h
+++ b/keyboards/mitosis/keymaps/datagrok/config.h
@@ -1,12 +1,21 @@
1#ifndef CONFIG_USER_H 1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H 2#define CONFIG_USER_H
3 3
4#include "../../config.h" 4#ifdef MITOSIS_DATAGROK_SLOWUART
5// This is the highest possible baud rate that a pro micro clocked at 8Mhz can
6// support without errors. I don't notice any difference in behavior at this
7// slower speed. (So I think it should maybe be the default, to allow a single
8// codebase to support both available flavors of pro micro.) This requires a
9// corresponding change to the wireless module firmware; see
10// https://github.com/reversebias/mitosis/pull/10
11#undef SERIAL_UART_BAUD // avoids redefinition warning
12#define SERIAL_UART_BAUD 250000
13#endif
5 14
6// I want to place an underscore as tap behavior on the right shift key. But 15// I want to place an underscore as tap behavior on the right shift key. But
7// RSFT_T(KC_UNDS) doesn't work; mod-tap doesn't work with pre-shifted keys. So 16// RSFT_T(KC_UNDS) doesn't work; mod-tap doesn't work with pre-shifted keys. So
8// instead we take advantage of Space Cadet Shift that does something similar 17// instead I take advantage of Space Cadet Shift that does something similar
9// and just tweak it to use the -_ key instead of 0) See 18// and just tweak it to use the -/_ key instead of 0/). See
10// https://github.com/qmk/qmk_firmware/pull/2055 19// https://github.com/qmk/qmk_firmware/pull/2055
11#define RSPC_KEY KC_MINS 20#define RSPC_KEY KC_MINS
12 21
@@ -18,11 +27,12 @@
18//#define NO_ACTION_FUNCTION 27//#define NO_ACTION_FUNCTION
19 28
20#ifdef AUDIO_ENABLE 29#ifdef AUDIO_ENABLE
21#define STARTUP_SONG SONG(PLANCK_SOUND) 30#define STARTUP_SONG SONG(MARIO_MUSHROOM)
22// #define STARTUP_SONG SONG(NO_SOUND) 31#define DEFAULT_LAYER_SONGS { \
23#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ 32 SONG(QWERTY_SOUND), \
24 SONG(COLEMAK_SOUND), \ 33 SONG(COLEMAK_SOUND), \
25 SONG(DVORAK_SOUND) \ 34 SONG(DVORAK_SOUND), \
35 SONG(ZELDA_TREASURE), \
26 } 36 }
27#define AUDIO_VOICES 37#define AUDIO_VOICES
28#define AUDIO_CLICKY 38#define AUDIO_CLICKY
@@ -30,3 +40,18 @@
30#endif 40#endif
31 41
32#endif 42#endif
43
44#define LAYOUT_bottomspace( \
45 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
46 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
47 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
48 k31, k32, k33, k34, k35, k36, k37, k38, \
49 k41, k42, k43, k44, k45, k46, k47, k48 \
50 ) \
51 { \
52 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
53 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \
54 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \
55 { KC_NO, k31, k32, k43, k44, k45, k46, k37, k38, KC_NO }, \
56 { KC_NO, k41, k42, k33, k34, k35, k36, k47, k48, KC_NO } \
57 }
diff --git a/keyboards/mitosis/keymaps/datagrok/keymap.c b/keyboards/mitosis/keymaps/datagrok/keymap.c
index 4fda3f839..ae3b95470 100644
--- a/keyboards/mitosis/keymaps/datagrok/keymap.c
+++ b/keyboards/mitosis/keymaps/datagrok/keymap.c
@@ -1,16 +1,34 @@
1#include QMK_KEYBOARD_H 1#include QMK_KEYBOARD_H
2
2#ifdef AUDIO_ENABLE 3#ifdef AUDIO_ENABLE
3#include "audio.h" 4#include "audio.h"
5#ifdef DEFAULT_LAYER_SONGS
6extern float default_layer_songs[][][];
7#endif
4#endif 8#endif
5 9
6enum mitosis_layers 10enum mitosis_layers
7{ 11 {
8 _xQ, // qwerty 12 _xQ, // qwerty
13 _xC, // colemak
14 _xD, // dvorak
9 _xW, // workman 15 _xW, // workman
10 _xS, // symbols 16 _xS, // symbols
11 _xN, // numbers 17 _xN, // numbers
12 _xF // functions 18 _xF // functions
13}; 19 };
20
21enum mitosis_keycodes
22 {
23 KC_LAYO = SAFE_RANGE
24 };
25
26// Setting MITOSIS_DATAGROK_BOTTOMSPACE in rules.mk will swap the upper and
27// lower center four thumb-keys. See keymaps/datagrok/rules.mk.
28#ifdef MITOSIS_DATAGROK_BOTTOMSPACE
29#undef LAYOUT
30#define LAYOUT LAYOUT_bottomspace
31#endif
14 32
15// Fillers to make layering more clear 33// Fillers to make layering more clear
16#define _______ KC_TRNS // Transparent 34#define _______ KC_TRNS // Transparent
@@ -31,58 +49,125 @@ enum mitosis_layers
31 49
32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 50const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33 [_xQ] = LAYOUT( 51 [_xQ] = LAYOUT(
34 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 52 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
35 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 53 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
36 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT, 54 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT,
37 /*, */ KC_LGUI, KC_LCTL, MO(_xS), KC_TAB, KC_SPC, MO(_xS), KC_RCTL, KC_RGUI, 55 /*, */ KC_LGUI, KC_LCTL, MO(_xS), KC_BSPC, KC_SPC, MO(_xS), KC_RCTL, KC_RGUI,
38 /*, */ KC_HENK, KC_LALT, MO(_xN), KC_LSFT, KC_RSPC, MO(_xN), KC_RALT, KC_MHEN), 56 /*, */ KC_HENK, KC_LALT, MO(_xN), LSFT_T(KC_TAB), KC_RSPC, MO(_xN), KC_RALT, KC_MHEN),
57 [_xC] = LAYOUT(
58 KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
59 KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
60 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_QUOT,
61 /*, */ _______, _______, _______, _______, _______, _______, _______, _______,
62 /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
63 [_xD] = LAYOUT(
64 KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L,
65 KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S,
66 KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z,
67 /*, */ _______, _______, _______, _______, _______, _______, _______, _______,
68 /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
39 [_xW] = LAYOUT( 69 [_xW] = LAYOUT(
40 KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, 70 KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN,
41 KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, 71 KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I,
42 KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_QUOT, 72 KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_QUOT,
43 /*, */ _______, _______, _______, _______, _______, _______, _______, _______, 73 /*, */ _______, _______, _______, _______, _______, _______, _______, _______,
44 /*, */ _______, _______, _______, _______, _______, _______, _______, _______), 74 /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
45 [_xS] = LAYOUT( 75 [_xS] = LAYOUT(
46 KC_ESC, KC_GRV , KC_UP, KC_EQL , KC_TILD, KC_PLUS, KC_CIRC, KC_AMPR, KC_PERC, KC_MINS, 76 KC_ESC, KC_GRV , KC_UP, KC_EQL , KC_TILD, KC_PLUS, KC_CIRC, KC_AMPR, KC_PERC, KC_MINS,
47 KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_PIPE, KC_AT, KC_DLR, KC_HASH, KC_ENT, 77 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_PIPE, KC_AT, KC_DLR, KC_HASH, KC_ENT,
48 KC_BSLS, KC_LABK, KC_LCBR, KC_LPRN, KC_LBRC, KC_RBRC, KC_RCBR, KC_RPRN, KC_RABK, KC_SLSH, 78 KC_BSLS, KC_LABK, KC_LCBR, KC_LPRN, KC_LBRC, KC_RBRC, KC_RPRN, KC_RCBR, KC_RABK, KC_SLSH,
49 /*, */ _______, _______, _______, _______, _______, _______, _______, _______, 79 /*, */ _______, _______, _______, KC_DEL, _______, _______, _______, _______,
50 /*, */ _______, _______, MO(_xF), _______, _______, MO(_xF), _______, _______), 80 /*, */ _______, _______, TT(_xF), _______, _______, TT(_xF), _______, _______),
51 [_xN] = LAYOUT( 81 [_xN] = LAYOUT(
52 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_PPLS, KC_7, KC_8, KC_9, KC_PMNS, 82 KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, KC_PPLS, KC_7, KC_8, KC_9, KC_PMNS,
53 _______, KC_F4, KC_F5, KC_F6, KC_F11, KC_NLCK, KC_4, KC_5, KC_6, KC_PENT, 83 KC_SLCK, KC_F4, KC_F5, KC_F6, KC_F11, KC_NLCK, KC_4, KC_5, KC_6, KC_PENT,
54 _______, KC_F1, KC_F2, KC_F3, KC_F12, KC_PAST, KC_1, KC_2, KC_3, KC_PSLS, 84 KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F12, KC_PAST, KC_1, KC_2, KC_3, KC_PSLS,
55 /*, */ _______, _______, MO(_xF), _______, _______, MO(_xF), KC_0, KC_PDOT, 85 /*, */ _______, _______, TT(_xF), _______, _______, TT(_xF), KC_0, KC_DOT,
56 /*, */ _______, _______, _______, _______, _______, _______, _______, _______), 86 /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
57 [_xF] = LAYOUT( 87 [_xF] = LAYOUT(
58 RESET, KC_INS, KC_PGUP, KC_DEL, KC_VOLU, KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PMNS, 88 RESET, KC_INS, KC_PGUP, DEBUG, KC_VOLU, KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PMNS,
59 CK_TOGG, KC_HOME, KC_PGDN, KC_END, KC_VOLD, KC_NLCK, KC_P4, KC_P5, KC_P6, KC_PENT, 89 CK_TOGG, KC_HOME, KC_PGDN, KC_END, KC_VOLD, KC_NLCK, KC_P4, KC_P5, KC_P6, KC_PENT,
60 TG(_xW), KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, 90 KC_LAYO, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS,
61 /*, */ CK_UP, MU_TOG, _______, _______, _______, _______, KC_P0, KC_PDOT, 91 /*, */ CK_UP, MU_TOG, _______, _______, _______, _______, KC_P0, KC_PDOT,
62 /*, */ CK_DOWN, MU_MOD, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS), 92 /*, */ CK_DOWN, MU_MOD, _______, _______, _______, _______, _______, _______),
63}; 93};
94const bool defaultlayers[] = {
95 [_xQ] = true,
96 [_xC] = true,
97 [_xD] = true,
98 [_xW] = true,
99 [_xS] = false,
100 [_xN] = false,
101 [_xF] = false,
102};
103const size_t defaultlayers_n = sizeof(defaultlayers) / sizeof(defaultlayers[0]);
104
105// New keycode KC_LAYO rotates between available default layers (for e.g.,
106// selecting a base layout). Shift+KC_LAYO makes the current one persistent.
107bool process_record_layout(uint16_t keycode, keyrecord_t *record) {
108 uint32_t default_layer;
109 uint8_t i;
110 #if defined(AUDIO_ENABLE)
111 float saved_song[][2] = SONG(COIN_SOUND);
112 #endif
113
114 if (keycode != KC_LAYO || !record->event.pressed) {
115 return true;
116 }
64 117
65// This is a hack to place <question mark> on <shift-comma> and <exclaimation 118 if (get_mods() & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))) { // shift pressed
119 // save default layer. whatever the current default layer is, store that
120 eeconfig_update_default_layer(default_layer_state);
121 #if defined(AUDIO_ENABLE)
122 PLAY_SONG(saved_song);
123 #endif
124 } else {
125 // rotate default layer.
126 // find the current default layer
127 default_layer = biton32(default_layer_state);
128 // find next valid default layer
129 for (i = 1; i < defaultlayers_n; i++) {
130 if (defaultlayers[(default_layer + i) % defaultlayers_n]) {
131 break;
132 }
133 }
134 if (i == defaultlayers_n) {
135 // we fell out of the loop without finding another default layer to switch
136 // to.
137 return false;
138 }
139 default_layer = (default_layer + i) % defaultlayers_n;
140 default_layer_set(1U<<default_layer);
141 led_set(host_keyboard_leds());
142 #if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
143 PLAY_SONG(default_layer_songs[default_layer]);
144 #endif
145 }
146 return false;
147}
148
149// This is a hack to place <question mark> on <shift-comma> and <exclamation
66// mark> on <shift-period>, when using an operating system configured for a 150// mark> on <shift-period>, when using an operating system configured for a
67// US/qwerty layout. 151// US/qwerty layout.
152// cdeq = "comma dot exclamation question"
68bool comm_shifted = false; 153bool comm_shifted = false;
69bool ques_shifted = false; 154bool ques_shifted = false;
70bool process_record_user(uint16_t keycode, keyrecord_t *record) { 155bool process_record_cdeq(uint16_t keycode, keyrecord_t *record) {
71 uint8_t shifted; 156 uint8_t shifted;
72 uint16_t s_keycode; 157 uint16_t s_keycode;
73 bool *k_shifted; 158 bool *k_shifted;
74 159
75 switch (keycode) { 160 switch (keycode) {
76 case KC_COMM: 161 case KC_COMM:
77 s_keycode = KC_SLSH; 162 s_keycode = KC_SLSH;
78 k_shifted = &comm_shifted; 163 k_shifted = &comm_shifted;
79 break; 164 break;
80 case KC_DOT: 165 case KC_DOT:
81 s_keycode = KC_1; 166 s_keycode = KC_1;
82 k_shifted = &ques_shifted; 167 k_shifted = &ques_shifted;
83 break; 168 break;
84 default: 169 default:
85 return true; 170 return true;
86 } 171 }
87 172
88 shifted = get_mods() & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)); 173 shifted = get_mods() & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT));
@@ -104,47 +189,29 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
104 } 189 }
105} 190}
106 191
107#ifdef AUDIO_ENABLE 192bool process_record_user(uint16_t keycode, keyrecord_t *record) {
108float tone_qwerty[][2] = SONG(QWERTY_SOUND); 193 return \
109float tone_dyn_macro_rec[][2] = SONG(DVORAK_SOUND); 194 process_record_cdeq(keycode, record) && \
110float tone_dyn_macro_play[][2] = SONG(COLEMAK_SOUND); 195 process_record_layout(keycode, record);
111float tone_fnpc[][2] = SONG(PLOVER_SOUND);
112float tone_fnmac[][2] = SONG(PLOVER_GOODBYE_SOUND);
113
114void startup_user()
115{
116 float tone_startup[][2] = SONG(STARTUP_SOUND);
117 _delay_ms(20); // gets rid of tick
118 PLAY_SONG(tone_startup);
119}
120
121void shutdown_user()
122{
123 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
124 PLAY_SONG(tone_goodbye);
125 _delay_ms(150);
126 stop_all_notes();
127}
128
129void music_on_user(void)
130{
131 music_scale_user();
132}
133
134void music_scale_user(void)
135{
136 float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
137 PLAY_SONG(music_scale);
138} 196}
139 197
140#endif
141
142// Set the bits of A selected by MASK to the corresponding bits of B 198// Set the bits of A selected by MASK to the corresponding bits of B
143#define setbits(A, B, MASK) A = (A & (B | ~MASK)) | (B & MASK) 199#define setbits(A, B, MASK) A = (A & (B | ~MASK)) | (B & MASK)
144void matrix_scan_user(void) { 200
201void led_set_user(uint8_t usb_leds) {
202 // A simple (but technically inaccurate) model of the momentary layer state:
203 // Red layer active -> indicator = red
204 // Blue layer active -> indicator = blue
205 // Purple layer active -> indicator = purple
206 // the Pro Micro tx LED displays Num Lock status.
145 // 207 //
208 // Workman layout active -> indicator = green
209 // Workman red layer -> indicator = yellow (red + green)
210 // Workman blue layer -> indicator = cyan (blue + green)
211 // Workman purple layer -> indicator = white (red + blue + green)
212
146 // Bit # 7 6 5 4 3 2 1 0 213 // Bit # 7 6 5 4 3 2 1 0
147 // layer_state: [ | | | _xF | _xN | _xS | _xQ | _xW ] 214 // layer_state: [ | _xF | _xN | _xS | _xW | _xD | _xC | _xQ ]
148 // usb_led [ | | |kana |cmps |scrl |caps | num ] 215 // usb_led [ | | |kana |cmps |scrl |caps | num ]
149 // PORTB: [ NC | 10 | 9 | 8 | 14 | 16 | 15 |rxled] 216 // PORTB: [ NC | 10 | 9 | 8 | 14 | 16 | 15 |rxled]
150 // PORTC: [ NC | 5 | | | | | | ] 217 // PORTC: [ NC | 5 | | | | | | ]
@@ -158,16 +225,16 @@ void matrix_scan_user(void) {
158 // board. Each may be connected to an LED by way of a resistor (4.7k to 225 // board. Each may be connected to an LED by way of a resistor (4.7k to
159 // match the others) for a total of 14 additional indicators. 226 // match the others) for a total of 14 additional indicators.
160 227
161 // A simple (but technically inaccurate) model of the momentary layer state: 228 uint32_t portf_bits = \
162 // Fn1 key makes _xS active; indicator = red 229 ((layer_state|default_layer_state)&0b01100000)>>1 | \
163 // Fn2 key makes _xN active; indicator = blue 230 ((layer_state|default_layer_state)&0b00010000)<<1 | \
164 // Both keys make _xF active; indicator = purple 231 ((layer_state|default_layer_state)&0b01000000)>>2;
165 // Toggling QWERTY mode makes indicator include green, so (red/blue/purple becomes yellow/cyan/white) 232 uint32_t portd_bits = \
166 233 (usb_leds&0b1)<<5 | \
234 ((layer_state|default_layer_state)&0b1000)>>2;
167 // negated because for ports 0=LED on. 235 // negated because for ports 0=LED on.
168 uint32_t portf_bits = ~(layer_state|layer_state<<1|(layer_state&0b100)<<3); 236 setbits(PORTF, ~portf_bits, 0b00110000);
169 setbits(PORTF, portf_bits, 0b00110000); 237 setbits(PORTD, ~portd_bits, 0b00100010);
170 setbits(PORTD, ~layer_state, 0b00000010);
171} 238}
172 239
173// vim: set sw=2 et: 240// vim: set sw=2 et:
diff --git a/keyboards/mitosis/keymaps/datagrok/readme.md b/keyboards/mitosis/keymaps/datagrok/readme.md
index 9b159b98a..22d7f4d2f 100644
--- a/keyboards/mitosis/keymaps/datagrok/readme.md
+++ b/keyboards/mitosis/keymaps/datagrok/readme.md
@@ -1,54 +1,59 @@
1# a layout for the Mitosis 1# a layout for the Mitosis
2 2
3- Emphasis on momentary modifiers, all usable from either hand, arranged symmetrically, but left/right distinguishable by the OS. 3- Emphasis on momentary modifiers, all usable from either hand, arranged symmetrically, but left/right distinguishable by the OS.
4 Shift, Red ("Lower"), Blue ("Raise"), Super ("Windows"), Meta ("Alt"), Hyper (actually Henkan/Muhenkan). 4 I place left- and right-versions of Shift, GUI ("Super"), and Alt ("Meta"), and Henkan/Muhenkan (which I plan to overload for "Hyper").
5
5 I'm going for a [Space Cadet](https://en.wikipedia.org/wiki/Space-cadet_keyboard) aesthetic; 6 I'm going for a [Space Cadet](https://en.wikipedia.org/wiki/Space-cadet_keyboard) aesthetic;
6 I want a keyboard that can (even just in theory) make use of all the bucky bits my operating system can support. 7 I want a keyboard that can (even just in theory) make use of all the bucky bits my operating system can support.
7 8
8- Red and Blue are used to momentary-enable (like a shift key) one of three layers: 9- Red key and Blue key momentary-enable (like a shift key) one of three layers:
9 10
10 - Red: Symbols layer 11 - Red: Symbols layer
11 - Blue: Numbers layer 12 - Blue: Numbers layer
12 - "Purple" (both Red and Blue): Functions layer 13 - "Purple" (both Red and Blue): Functions layer
14
15 This tri-state layer mechanism is a bit similar to Planck and Preonic's "Raise," "Lower," and "Adjust."
13 16
14- The base layer is QWERTY. 17- The base layer is QWERTY.
15 A slight variant of [Workman][] may be toggled using `Red`+`Blue`+`Z`. 18 [Colemak][], [Dvorak][], and [Workman][] may be toggled using `Red`+`Blue`+`Z`.
19 When you find the one you like, save it with `Shift`+`Red`+`Blue`+`Z`.
16 20
17- Minimize hand travel, so as not to lose orientation with home row. 21- Minimize hand travel, so as not to lose orientation with home row.
18 22
19- `?` and `!` are moved to take the place of `<` and `>`. Rationale: unmodded 23- `?` and `!` are moved to take the place of `<` and `>`.
20 and shifted keys should be for prose, while symbols useful for programming 24 Rationale: unmodded and shifted keys should be for prose, while symbols useful for programming should be colocated on their own layer.
21 should be colocated on their own layer.
22 25
23- Key positions chosen for mnemonics. 26- Key positions chosen for mnemonics.
24 For example, you can distinguish between alphanumeric numerals and keypad numerals, but they occupy the same key positions. 27 For example, you can distinguish between alphanumeric numerals and keypad numerals, but they occupy the same key positions.
25 28
26## Layout Images 29## Layout Images
27 30
28![mitosis:datagrok layout base layer](https://imgur.com/9LoLQUk.png) 31![mitosis:datagrok layout base layer](https://i.imgur.com/tap5Pjf.png)
29 32
30Base layer. Notes: 33Base layer. Notes:
31- customized comma and period, which have exclamation point and question mark on their shift layer. 34- customized comma and period, which have exclamation point and question mark on their shift layer.
32- tap right-shift for underscore 35- tap right-shift for underscore, tap left-shift for tab.
33 36
34![mitosis:datagrok layout red layer](https://imgur.com/B5bnPGM.png) 37![mitosis:datagrok layout red layer](https://i.imgur.com/sMGr34T.png)
35 38
36Red layer. Intended for common navigation and programming symbols. Notes: 39Red layer. Intended for common navigation and programming symbols. Notes:
37- symmetric layout of paired braces/brackets/slashes for easier memorization 40- symmetric layout of paired braces/brackets/slashes for easier memorization
38- arrows placed directly on home position 41- arrows placed directly on home position
39 42
40![mitosis:datagrok layout blue layer](https://imgur.com/HGJ4G1U.png) 43![mitosis:datagrok layout blue layer](https://i.imgur.com/dDb2563.png)
41 44
42Blue layer. Intended for "number pad." Notes: 45Blue layer. Intended for "number pad." Notes:
43- Keycodes generated for numbers, enter key, and mathematical symbols are from the alphanumeric keys, not keypad. This way they are not influenced by the state of Num Lock. If you want to send the keypad equivalents, just use Red and Blue modifiers simultaneously. 46- Keycodes generated for numbers, enter key, and mathematical symbols are from the alphanumeric keys, not keypad.
47 This way they are not influenced by the state of Num Lock.
48 If you want to send the keypad equivalents, just press Blue as well to access keypad numbers in the same positions in the Purple layer.
44 49
45![mitosis:datagrok layout purple layer](https://imgur.com/lNsKDtA.png) 50![mitosis:datagrok layout purple layer](https://i.imgur.com/pESzy2u.png)
46 51
47Purple (Red+Blue) layer. Intended for "true keypad" and various functions. Notes: 52Purple (Red+Blue) layer. Intended for "true keypad" and various functions. Notes:
48- Numbers on this layer send Keypad codes, so the result will be affected by the state of Num Lock. 53- Numbers on this layer send Keypad codes, so the result will be affected by the state of Num Lock.
49- "Switch Layout" toggles the alphabet keys between QWERTY and Workman 54- "Switch Layout" toggles the alphabet keys between QWERTY, Colemak, Dvorak, and Workman.
50- Page Up / Page Down / Home / End are placed on similar arrows 55 Shift + "Switch Layout" stores the currently selected alphabet layout in eeprom, so the selection persists across reboots and computers.
51- To press Print Screen it is necessary to use the left-side Red and Blue modifiers. 56- Page Up / Page Down / Home / End are placed on corresponding arrow keys.
52 57
53Keyboard layout editor sources: 58Keyboard layout editor sources:
54[base](http://www.keyboard-layout-editor.com/#/gists/bc2d06a3203d1bc3a14ed2245cf39643) 59[base](http://www.keyboard-layout-editor.com/#/gists/bc2d06a3203d1bc3a14ed2245cf39643)
@@ -56,14 +61,41 @@ Keyboard layout editor sources:
56[blue](http://www.keyboard-layout-editor.com/#/gists/240e807f3d7e1d3ddabe1b69ee675048) 61[blue](http://www.keyboard-layout-editor.com/#/gists/240e807f3d7e1d3ddabe1b69ee675048)
57[purple](http://www.keyboard-layout-editor.com/#/gists/9559f0f8bb1ee47677c8f2b4d766829d) 62[purple](http://www.keyboard-layout-editor.com/#/gists/9559f0f8bb1ee47677c8f2b4d766829d)
58 63
59[Imgur album](https://imgur.com/a/KSoVgPx) 64[Imgur album](https://imgur.com/a/hm4bbdM)
65
66## Indicators
67
68- When Red layer is active, the RGB indicator turns red.
69- When Blue layer is active, the RGB indicator turns blue.
70- When Purple layer is active, the RGB indicator turns purple.
71- When the Workman layer is active, the RGB indicator turns green.
72 Currently, this means that activating the Red layer while using the Workman layout will make the indicator show yellow. (red + green.)
73- The Num Lock status is shown on the Pro Micro tx LED.
74- If you attach a speaker to PC6 (pin 5) and compile with AUDIO_ENABLE=yes, music will be played at startup, when switching default layers, and when saving the default layer.
75
76## Variants
77
78Some additional compile-time options for this layout are available by editing rules.mk or compiling like so:
79
80Normal compilation:
81
82```make mitosis:datagrok```
83
84Swap Space onto bottom thumb row: swaps Red/Backspace/Space/Red with Blue/Shift/Shift/Blue:
85
86```make mitosis:datagrok MITOSIS_DATAGROK_BOTTOMSPACE=yes```
87
88Lower baud UART. Useful when using an 8Mhz pro micro; corresponding changes required in wireless firmware. See rules.mk for details.
89
90```make mitosis:datagrok MITOSIS_DATAGROK_SLOWUART=yes```
60 91
61## Design notes 92## Design notes
62 93
63### Workman layout 94### Workman layout
64 95
65- I'm learning a new physical key placement, so I might as well go all-out and 96- I'm learning a new physical key placement, so I might as well go all-out and use an optimal non-QWERTY layout.
66 use an optimal non-QWERTY layout. 97 Bonus: it's easy to switch back to QWERTY on a traditional row-staggered keyboard.
98 The designer of the Mitosis had [a similar experience](https://www.reddit.com/r/MechanicalKeyboards/comments/66588f/wireless_split_qmk_mitosis/dgfr22q/).
67 99
68- I like the way Workman feels and some of its advantages over Colemak. 100- I like the way Workman feels and some of its advantages over Colemak.
69 Unfortunately, it was designed using a weighting system based on a standard 101 Unfortunately, it was designed using a weighting system based on a standard
@@ -78,14 +110,10 @@ Keyboard layout editor sources:
78 The next fastest baudrate that works without errors is 250k baud. 110 The next fastest baudrate that works without errors is 250k baud.
79 So if you want to do the same: 111 So if you want to do the same:
80 112
81 - Set the Pro Micro clock rate correctly in `rules.mk`: 113 - Set the Pro Micro clock and baud rate correctly in `rules.mk`:
82 ``` 114 ```
83 F_CPU = 800000 115 F_CPU = 800000
84 ``` 116 MITOSIS_DATAGROK_SLOWUART = yes
85 - Configure it to communicate at 250k baud in `config.h`:
86 ```
87 #undef SERIAL_UART_BAUD // avoids redefinition warning
88 #define SERIAL_UART_BAUD 250000
89 ``` 117 ```
90 - Configure the receiver's wireless module to communicate at 250k baud in `main.c`. See https://github.com/reversebias/mitosis/pull/10 118 - Configure the receiver's wireless module to communicate at 250k baud in `main.c`. See https://github.com/reversebias/mitosis/pull/10
91 ``` 119 ```
@@ -99,7 +127,7 @@ Keyboard layout editor sources:
99 127
100- Arrow keys are in the home position on the Red layer. 128- Arrow keys are in the home position on the Red layer.
101 129
102 - Blue+Arrows = PgUp/PgDn/Home/End, which is intuitive for me. 130 - Blue+Arrows = PgUp/PgDn/Home/End, which is intuitive for me and similar to what is done on Apple and some Dell keyboards.
103 131
104- The number pad: I placed the ten-key number pad on the Blue layer. 132- The number pad: I placed the ten-key number pad on the Blue layer.
105 However, this would do the wrong thing when Num Lock was not enabled. 133 However, this would do the wrong thing when Num Lock was not enabled.
@@ -111,11 +139,7 @@ Keyboard layout editor sources:
111- The Function-keys are arranged to mimic the order of the ten-key pad. 139- The Function-keys are arranged to mimic the order of the ten-key pad.
112 140
113- Enter is now in a more qwerty-familiar location, and may be activated with one hand. 141- Enter is now in a more qwerty-familiar location, and may be activated with one hand.
114 Numpad Enter is in the same position. 142 Numpad Enter is in the same position for mnemonics.
115
116- Rather than place Backspace opposite Space, I intentionally place it on a layer where it takes some effort to activate.
117 Backspace is one of the keys I most dislike on a QWERTY keyboard because it moves me away from homerow and I need to use it so often.
118 Rather than make it easier to strike, I want to discourage myself from using it by learning to type more accurately.
119 143
120- Why do I dislike [snake\_case](https://en.wikipedia.org/wiki/Snake_case) (`__variable_names_that_use_underscores_`)? 144- Why do I dislike [snake\_case](https://en.wikipedia.org/wiki/Snake_case) (`__variable_names_that_use_underscores_`)?
121 Maybe because it's hard to type all those underscores requiring the shift key? 145 Maybe because it's hard to type all those underscores requiring the shift key?
@@ -126,6 +150,22 @@ Keyboard layout editor sources:
126 150
127### Current 151### Current
128 152
153- Discard "intentionally difficult backspace" idea.
154 Tab returns to left-shift.
155 Del returns to Red+Backspace
156- "High Profile mode:" Swap Red/Backspace/Space/Red with Blue/Shift/Shift/Blue (placing space on lower thumb keys) using `MITOSIS_DATAGROK_BOTTOMSPACE=yes` when compiling.
157- Move Print Screen / Scroll Lock / Pause to pinky column on Blue layer.
158- Let's try using TT instead of MO so we can e.g. lock-on the keypad.
159 - We still use MO for first modifier, so e.g. Red + tapping Blue will lock purple.
160 So far it feels a bit janky, we'll see.
161- One key `KC_LAYO` to cycle through available base layers instead of a dedicated key for each;
162 Shift + `KC_LAYO` stores current base layer selection in eeprom so it comes back after disconnecting or a reset.
163- Added Colemak and Dvorak as default layers that may be selected.
164- Set UART to 250kbaud with make argument `MITOSIS_DATAGROK_SLOWUART=yes`, for use with 8Mhz Pro Micros.
165- Display Num Lock status on tx LED
166
167### 0.6.60
168
129- Experiment: no-modifier underscore on right shift key. 169- Experiment: no-modifier underscore on right shift key.
130- New combined numbers + keypad arrangement. 170- New combined numbers + keypad arrangement.
131 No more worrying about Num Lock key. 171 No more worrying about Num Lock key.
@@ -168,27 +208,33 @@ Keyboard layout editor sources:
168 208
169### Abandoned ideas 209### Abandoned ideas
170 210
171- "Since QWERTY and Workman keep angle brackets together, place other 211- Abandoned: intentionally-difficult backspace.
172 enclosing symbols on the same keys. This informs the numbers placement, 212 "Backspace is one of the keys I most dislike on a QWERTY keyboard because it moves me away from homerow and I need to use it so often.
173 which informs the function-key placement." 213 Rather than make it easier to strike, I want to discourage myself from using it and train myself to type more accurately."
214
215 - Many other people like an easy-to-reach backspace.
216 - Many other split-spacebar ergo boards place backspace at the thumbs.
217 - I can still train myself to type well with it in an easy location.
218 - I couldn't think of anything really better to put opposite space.
174 219
175 - I tried this and it was bad. I don't like having to pick the right 220- Abandoned: pile all brackets onto one pair of keys.
176 modifier to get the right flavor of bracket. Instead, now, one modifier 221 "Since QWERTY and Workman keep angle brackets together, place other enclosing symbols on the same keys."
177 activates a symbols layer where all brackets are easily accessible.
178 222
179- Space/Enter to the left of layer select for Enter 223 - I didn't like having to pick the right modifier to get the right flavor of bracket.
224 Instead, now, one modifier activates a symbols layer where all brackets are easily accessible.
180 225
181 - Doesn't work well; I always trigger space first when mashing the keys 226- Abandoned: chorded Enter without proper chording detection
227
228 - I tried to make Red+Space = Enter with the intention that I could hit both with my thumb.
229 That didn't work well; I always trigger space first when mashing the keys
182 simultaneously. ~~This might not continue to be true if I change the angle 230 simultaneously. ~~This might not continue to be true if I change the angle
183 at which I strike the keys e.g. with a neoprene base or a wrist support.~~ 231 at which I strike the keys e.g. with a neoprene base or a wrist support.~~
184 Even with a wrist rest or low-profile, this is hard to do with one hand. 232 Even with a wrist rest or low-profile, this is hard to do with one hand.
185 Need to adjust the firmware to understand chorded thumb keys. 233 Need to adjust the firmware to understand chorded thumb keys.
186 234
187- I used to have Blue on ring finger, but that was too hard to use in
188 conjunction with shift.
189
190## To do 235## To do
191 236
237- Ctrl+'+' doesn't seem to work; fix.
192- **Shared Layouts.** 238- **Shared Layouts.**
193 Figure out how to make use of QMK's common `layouts/` 239 Figure out how to make use of QMK's common `layouts/`
194- **Chorded Combos.** 240- **Chorded Combos.**
@@ -203,16 +249,23 @@ Keyboard layout editor sources:
203 Do any of my applications use it? 249 Do any of my applications use it?
204 Should I have the firmware ensure it is set how I want it? 250 Should I have the firmware ensure it is set how I want it?
205 Maybe cause it to be momentary active with Blue? 251 Maybe cause it to be momentary active with Blue?
206 See [@drashna's comment](https://github.com/qmk/qmk_firmware/pull/2366#issuecomment-404951953) 252 See [@drashna's comment](https://github.com/qmk/qmk_firmware/pull/2366#issuecomment-404951953) for code to force it always-on, which I don't know if I want.
207- Store default base layer in eeprom? 253- ~~Store default layer in eeprom?~~
254- Allow "!? on ,." to be easily toggled-off.
255- Modularize "!? on ,." so it can be easily used on any QMK keyboard. (about half done)
208- See if the henkan/muhenkan placement is at all useful for Japanese speakers, 256- See if the henkan/muhenkan placement is at all useful for Japanese speakers,
209 or abuse different keysyms for Left/Right Hyper. (Original space cadet used 257 or abuse different keysyms for Left/Right Hyper. (Original space cadet used
210 scancodes 145/175. 145 is LANG2, 175 is "reserved" in USB HID spec.) 258 scancodes 145/175. 145 is LANG2, 175 is "reserved" in USB HID spec.)
211- Implement "layer lock" key 259- Implement "layer lock" key
260- Feature parity with popular boards e.g. Planck?
261 - Layers for ~~Dvorak, Coleman,~~ Plover
262 - More music and midi stuff
263 - Macros?
212- Improve tri-layer behavior 264- Improve tri-layer behavior
213- Find a better location for PrintScr/SysRq, Scroll Lock, Pause/Break, Caps Lock. 265- Find out what `update_tri_layer_state` offers that my simple layers arrangement lacks.
214- ~~Figure out where to place non-numpad numbers so we don't need num lock turned 266- ~~Find a better location for Caps Lock, PrintScr/SysRq, Scroll Lock, Pause/Break,~~.
215 on to type them?~~ 267 Placed on Blue layer. Caps will be Shift+"Layer Lock," once I get that working.
268- ~~Figure out where to place non-numpad numbers so we don't need num lock turned on to type them?~~
216- ~~Add Insert, PrintScr, Pause/Break~~ 269- ~~Add Insert, PrintScr, Pause/Break~~
217- ~~Make QWERTY base layer for people who customize layout in software?~~ 270- ~~Make QWERTY base layer for people who customize layout in software?~~
218 I default to QWERTY now. 271 I default to QWERTY now.
diff --git a/keyboards/mitosis/keymaps/datagrok/rules.mk b/keyboards/mitosis/keymaps/datagrok/rules.mk
index a321a67b2..215e58a7d 100644
--- a/keyboards/mitosis/keymaps/datagrok/rules.mk
+++ b/keyboards/mitosis/keymaps/datagrok/rules.mk
@@ -1,4 +1,19 @@
1AUDIO_ENABLE = yes # audio output 1# Space and "Red" modifier are keys I want in the easiest-to-reach position in
2# the thumb row. Depending on the angle and height of the Mitosis and the type
3# of keycaps you use, the upper row or the lower row of thumb keys might be more
4# comfortable for you. I put red/space on the upper row and blue/shift on the
5# lower, but to swap that, set MITOSIS_DATAGROK_BOTTOMSPACE = yes. This has the
6# effect of swapping only the four center keys on the upper row of thumb keys with that
7# of the lower row of thumb keys.
8MITOSIS_DATAGROK_BOTTOMSPACE = no
9
10# I used to use a pro micro clocked at 8Mhz. It can't reach the same baud rate
11# that the standard 16Mhz-clocked pro micro can, so the baud rate needs to be
12# lowered. Set this to "yes" to do that. See also
13# https://github.com/reversebias/mitosis/pull/10
14MITOSIS_DATAGROK_SLOWUART = no
15
16AUDIO_ENABLE = no # audio output
2FAUXCLICKY_ENABLE = no 17FAUXCLICKY_ENABLE = no
3BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) 18BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
4MOUSEKEY_ENABLE = no # Mouse keys(+4700) 19MOUSEKEY_ENABLE = no # Mouse keys(+4700)
@@ -9,4 +24,12 @@ UNICODE_ENABLE = no # Unicode
9BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality 24BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
10BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID 25BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
11MIDI_ENABLE = no # MIDI controls 26MIDI_ENABLE = no # MIDI controls
27
28ifeq ($(strip $(MITOSIS_DATAGROK_BOTTOMSPACE)), yes)
29 OPT_DEFS += -DMITOSIS_DATAGROK_BOTTOMSPACE
30endif
31ifeq ($(strip $(MITOSIS_DATAGROK_SLOWUART)), yes)
32 OPT_DEFS += -DMITOSIS_DATAGROK_SLOWUART
33endif
34
12# vim: set ts=8 noet: 35# vim: set ts=8 noet:
diff --git a/keyboards/mitosis/mitosis.c b/keyboards/mitosis/mitosis.c
index f965f2a04..1ca7276e4 100644
--- a/keyboards/mitosis/mitosis.c
+++ b/keyboards/mitosis/mitosis.c
@@ -5,13 +5,12 @@ void uart_init(void) {
5} 5}
6 6
7void led_init(void) { 7void led_init(void) {
8 DDRD |= (1<<1); 8 DDRD |= (1<<1); // Pin to green, set as output
9 PORTD |= (1<<1); 9 PORTD |= (1<<1); // Turn it off
10 DDRF |= (1<<4) | (1<<5); 10 DDRF |= (1<<4) | (1<<5); // Pins to red and blue, set as output
11 PORTF |= (1<<4) | (1<<5); 11 PORTF |= (1<<4) | (1<<5); // Turn them off
12} 12}
13 13
14
15void matrix_init_kb(void) { 14void matrix_init_kb(void) {
16 // put your keyboard start-up code here 15 // put your keyboard start-up code here
17 // runs once when the firmware starts up 16 // runs once when the firmware starts up
@@ -20,16 +19,6 @@ void matrix_init_kb(void) {
20 led_init(); 19 led_init();
21} 20}
22 21
23void matrix_scan_kb(void) {
24 // put your looping keyboard code here
25 // runs every cycle (a lot)
26 matrix_scan_user();
27}
28
29void led_set_kb(uint8_t usb_led) {
30
31}
32
33#ifdef SWAP_HANDS_ENABLE 22#ifdef SWAP_HANDS_ENABLE
34__attribute__ ((weak)) 23__attribute__ ((weak))
35const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { 24const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/mitosis/mitosis.h b/keyboards/mitosis/mitosis.h
index 5dd7cc778..4b73f0407 100644
--- a/keyboards/mitosis/mitosis.h
+++ b/keyboards/mitosis/mitosis.h
@@ -53,15 +53,14 @@
53 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \ 53 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
54 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \ 54 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
55 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \ 55 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
56 k31, k32, k33, k34, k35, k36, k37, k38, \ 56 k31, k32, k33, k34, k35, k36, k37, k38, \
57 k41, k42, k43, k44, k45, k46, k47, k48 \ 57 k41, k42, k43, k44, k45, k46, k47, k48 \
58) \ 58) \
59{ \ 59 { \
60 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \ 60 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
61 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \ 61 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \
62 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \ 62 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \
63 { KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, KC_NO }, \ 63 { KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, KC_NO }, \
64 { KC_NO, k41, k42, k43, k44, k45, k46, k47, k48, KC_NO } \ 64 { KC_NO, k41, k42, k43, k44, k45, k46, k47, k48, KC_NO } \
65} 65 }
66
67#endif 66#endif