aboutsummaryrefslogtreecommitdiff
path: root/keyboards
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards')
-rw-r--r--keyboards/ergodox/ez/keymaps/steno/Makefile3
-rw-r--r--keyboards/ergodox/ez/keymaps/steno/keymap.c324
-rw-r--r--keyboards/ergodox/ez/keymaps/steno/readme.md92
3 files changed, 419 insertions, 0 deletions
diff --git a/keyboards/ergodox/ez/keymaps/steno/Makefile b/keyboards/ergodox/ez/keymaps/steno/Makefile
new file mode 100644
index 000000000..b6fb9b1a8
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/steno/Makefile
@@ -0,0 +1,3 @@
1VIRTSER_ENABLE = yes
2# Not enough interupts, so something has to go
3MOUSEKEY_ENABLE = no
diff --git a/keyboards/ergodox/ez/keymaps/steno/keymap.c b/keyboards/ergodox/ez/keymaps/steno/keymap.c
new file mode 100644
index 000000000..3e9830905
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/steno/keymap.c
@@ -0,0 +1,324 @@
1#include "ergodox.h"
2#include "debug.h"
3#include "action_layer.h"
4#include "sendchar.h"
5#include "virtser.h"
6
7#define BASE 0 // default layer
8#define SYMB 1 // symbols
9#define MDIA 2 // media keys
10#define TXBOLT 3 // TxBolt Steno Virtual Serial
11#define TXBOLT2 4 // TxBolt Steno Virtual Serial Alternative Layout
12
13const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
14/* Keymap 0: Basic layer
15 *
16 * ,--------------------------------------------------. ,--------------------------------------------------.
17 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
18 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
19 * | Del | Q | W | E | R | T | L1 | | TX | Y | U | I | O | P | \ |
20 * |--------+------+------+------+------+------| | | BOLT |------+------+------+------+------+--------|
21 * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
22 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
23 * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
24 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
25 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
26 * `----------------------------------' `----------------------------------'
27 * ,-------------. ,-------------.
28 * | App | LGui | | Alt |Ctrl/Esc|
29 * ,------|------|------| |------+--------+------.
30 * | | | Home | | PgUp | | |
31 * | Space|Backsp|------| |------| Tab |Enter |
32 * | |ace | End | | PgDn | | |
33 * `--------------------' `----------------------'
34 */
35// If it accepts an argument (i.e, is a function), it doesn't need KC_.
36// Otherwise, it needs KC_*
37[BASE] = KEYMAP( // layer 0 : default
38 // left hand
39 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
40 KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
41 KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
42 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
43 LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
44 ALT_T(KC_APP), KC_LGUI,
45 KC_HOME,
46 KC_SPC,KC_BSPC,KC_END,
47 // right hand
48 KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
49 TG(TXBOLT), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
50 KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
51 MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
52 KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
53 KC_LALT, CTL_T(KC_ESC),
54 KC_PGUP,
55 KC_PGDN,KC_TAB, KC_ENT
56 ),
57/* Keymap 1: Symbol Layer
58 *
59 * ,--------------------------------------------------. ,--------------------------------------------------.
60 * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
61 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
62 * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
63 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
64 * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
65 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
66 * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
67 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
68 * | | | | | | | | . | 0 | = | |
69 * `----------------------------------' `----------------------------------'
70 * ,-------------. ,-------------.
71 * | | | | | |
72 * ,------|------|------| |------+------+------.
73 * | | | | | | | |
74 * | | |------| |------| | |
75 * | | | | | | | |
76 * `--------------------' `--------------------'
77 */
78// SYMBOLS
79[SYMB] = KEYMAP(
80 // left hand
81 M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
82 KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
83 KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
84 KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
85 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
86 KC_TRNS,KC_TRNS,
87 KC_TRNS,
88 KC_TRNS,KC_TRNS,KC_TRNS,
89 // right hand
90 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
91 KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
92 KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
93 KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
94 KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
95 KC_TRNS, KC_TRNS,
96 KC_TRNS,
97 KC_TRNS, KC_TRNS, KC_TRNS
98),
99/* Keymap 2: Media and mouse keys
100 *
101 * ,--------------------------------------------------. ,--------------------------------------------------.
102 * | RESET | | | | | | | | | | | | | | |
103 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
104 * | | | | MsUp | | | | | | | | | | | |
105 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
106 * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
107 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
108 * | | | | | | | | | | | | Prev | Next | | |
109 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
110 * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
111 * `----------------------------------' `----------------------------------'
112 * ,-------------. ,-------------.
113 * | | | | | |
114 * ,------|------|------| |------+------+------.
115 * | | | | | | |Brwser|
116 * | | |------| |------| |Back |
117 * | | | | | | | |
118 * `--------------------' `--------------------'
119 */
120// MEDIA AND MOUSE
121[MDIA] = KEYMAP(
122 RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
123 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
124 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
125 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
126 KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
127 KC_TRNS, KC_TRNS,
128 KC_TRNS,
129 KC_TRNS, KC_TRNS, KC_TRNS,
130 // right hand
131 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
132 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
133 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
134 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
135 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
136 KC_TRNS, KC_TRNS,
137 KC_TRNS,
138 KC_TRNS, KC_TRNS, KC_WBAK
139),
140// TxBolt Codes
141#define Sl 0b00000001
142#define Tl 0b00000010
143#define Kl 0b00000100
144#define Pl 0b00001000
145#define Wl 0b00010000
146#define Hl 0b00100000
147#define Rl 0b01000001
148#define Al 0b01000010
149#define Ol 0b01000100
150#define X 0b01001000
151#define Er 0b01010000
152#define Ur 0b01100000
153#define Fr 0b10000001
154#define Rr 0b10000010
155#define Pr 0b10000100
156#define Br 0b10001000
157#define Lr 0b10010000
158#define Gr 0b10100000
159#define Tr 0b11000001
160#define Sr 0b11000010
161#define Dr 0b11000100
162#define Zr 0b11001000
163#define NM 0b11010000
164#define GRPMASK 0b11000000
165#define GRP0 0b00000000
166#define GRP1 0b01000000
167#define GRP2 0b10000000
168#define GRP3 0b11000000
169/* Keymap 3: TxBolt (Serial)
170 *
171 * ,--------------------------------------------------. ,--------------------------------------------------.
172 * | BKSPC | | | | | | | | | | | | | | |
173 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
174 * | | # | # | # | # | # | | | | # | # | # | # | # | # |
175 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
176 * | | S | T | P | H | * |------| |------| * | F | P | L | T | D |
177 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
178 * | | S | K | W | R | * | | | | * | R | B | G | S | Z |
179 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
180 * | | | | | | | | | | | |
181 * `----------------------------------' `----------------------------------'
182 * ,-------------. ,-------------.
183 * | | | | | |
184 * ,------|------|------| |------+------+------.
185 * | | | | | | | |
186 * | A | O |------| |------| E | U |
187 * | | | | | | | |
188 * `--------------------' `--------------------'
189 */
190// TxBolt over Serial
191[TXBOLT] = KEYMAP(
192 KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
193 KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO,
194 KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X),
195 KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X), KC_NO,
196 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
197 KC_NO, KC_NO,
198 KC_NO,
199 M(Al), M(Ol), KC_NO,
200 // right hand
201 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
202 KC_TRNS, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM),
203 M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr),
204 KC_NO, M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr),
205 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
206 KC_NO, KC_NO,
207 KC_NO,
208 KC_NO, M(Er), M(Ur)
209),
210/* Keymap 4: TxBolt (Serial) Alternative
211 *
212 * ,--------------------------------------------------. ,--------------------------------------------------.
213 * | | # | # | # | # | # | | | | # | # | # | # | # | # |
214 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
215 * | | S | T | P | H | * | | | | * | F | P | L | T | D |
216 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
217 * | | S | K | W | R | * |------| |------| * | R | B | G | S | Z |
218 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
219 * | | | | | | | | | | | | | | | |
220 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
221 * | | | | A | O | | E | U | | | |
222 * `----------------------------------' `----------------------------------'
223 * ,-------------. ,-------------.
224 * | | | | | |
225 * ,------|------|------| |------+------+------.
226 * | | | | | | | |
227 * | | |------| |------| | |
228 * | | | | | | | |
229 * `--------------------' `--------------------'
230 */
231// TxBolt over Serial
232[TXBOLT2] = KEYMAP(
233 KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO,
234 KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X), KC_NO,
235 KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X),
236 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
237 KC_NO, KC_NO, KC_NO, M(Al), M(Ol),
238 KC_NO, KC_NO,
239 KC_NO,
240 KC_NO, KC_NO, KC_NO,
241 // right hand
242 KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM),
243 KC_TRNS, M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr),
244 M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr),
245 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
246 M(Er), M(Ur), KC_NO, KC_NO, KC_NO,
247 KC_NO, KC_NO,
248 KC_NO,
249 KC_NO, KC_NO, KC_NO
250),
251};
252
253const uint16_t PROGMEM fn_actions[] = {
254 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
255};
256
257uint8_t chord[4] = {0,0,0,0};
258uint8_t pressed_count = 0;
259
260void send_chord(void)
261{
262 for(uint8_t i = 0; i < 4; i++)
263 {
264 if(chord[i])
265 virtser_send(chord[i]);
266 }
267 virtser_send(0);
268}
269
270bool process_record_user(uint16_t keycode, keyrecord_t *record)
271{
272 // We need to track keypresses in all modes, in case the user
273 // changes mode whilst pressing other keys.
274 if (record->event.pressed)
275 pressed_count++;
276 else
277 pressed_count--;
278 return true;
279}
280
281const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
282{
283 // MACRODOWN only works in this function
284
285 if (record->event.pressed) {
286 uint8_t grp = (id & GRPMASK) >> 6;
287 chord[grp] |= id;
288 }
289 else {
290 if (pressed_count == 0) {
291 send_chord();
292 chord[0] = chord[1] = chord[2] = chord[3] = 0;
293 }
294 }
295 return MACRO_NONE;
296};
297
298// Runs just one time when the keyboard initializes.
299void matrix_init_user(void) {
300};
301
302// Runs constantly in the background, in a loop.
303void matrix_scan_user(void) {
304
305 uint8_t layer = biton32(layer_state);
306
307 ergodox_board_led_off();
308 ergodox_right_led_1_off();
309 ergodox_right_led_2_off();
310 ergodox_right_led_3_off();
311 switch (layer) {
312 // TODO: Make this relevant to the ErgoDox EZ.
313 case 1:
314 ergodox_right_led_1_on();
315 break;
316 case 2:
317 ergodox_right_led_2_on();
318 break;
319 default:
320 // none
321 break;
322 }
323
324};
diff --git a/keyboards/ergodox/ez/keymaps/steno/readme.md b/keyboards/ergodox/ez/keymaps/steno/readme.md
new file mode 100644
index 000000000..d67cde2a3
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/steno/readme.md
@@ -0,0 +1,92 @@
1# ErgoDox EZ Steno Configuration
2
3This layout has a layer that uses the TxBolt Stenograph protocol over a Virtual Serial port. It requires something like Plover in order to function.
4
5In Plover, you can select TX Bolt as the Stenotype Machine, and find the COM port that was assigned. In this way, your regular keyboard will still function normally, and you can switch back and forth between the Steno and Keyboard layers.
6
7<pre><code>
8/* Keymap 0: Basic layer
9 *
10 * ,--------------------------------------------------. ,--------------------------------------------------.
11 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
12 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
13 * | Del | Q | W | E | R | T | L1 | | TX | Y | U | I | O | P | \ |
14 * |--------+------+------+------+------+------| | | BOLT |------+------+------+------+------+--------|
15 * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
16 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
17 * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
18 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
19 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
20 * `----------------------------------' `----------------------------------'
21 * ,-------------. ,-------------.
22 * | App | LGui | | Alt |Ctrl/Esc|
23 * ,------|------|------| |------+--------+------.
24 * | | | Home | | PgUp | | |
25 * | Space|Backsp|------| |------| Tab |Enter |
26 * | |ace | End | | PgDn | | |
27 * `--------------------' `----------------------'
28 */
29/* Keymap 1: Symbol Layer
30 *
31 * ,--------------------------------------------------. ,--------------------------------------------------.
32 * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
33 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
34 * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
35 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
36 * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
37 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
38 * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
39 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
40 * | | | | | | | | . | 0 | = | |
41 * `----------------------------------' `----------------------------------'
42 * ,-------------. ,-------------.
43 * | | | | | |
44 * ,------|------|------| |------+------+------.
45 * | | | | | | | |
46 * | | |------| |------| | |
47 * | | | | | | | |
48 * `--------------------' `--------------------'
49 */
50/* Keymap 2: Media keys
51 *
52 * ,--------------------------------------------------. ,--------------------------------------------------.
53 * | RESET | | | | | | | | | | | | | | |
54 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
55 * | | | | | | | | | | | | | | | |
56 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
57 * | | | | | | |------| |------| | | | | | Play |
58 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
59 * | | | | | | | | | | | | Prev | Next | | |
60 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
61 * | | | | | | |VolUp |VolDn | Mute | | |
62 * `----------------------------------' `----------------------------------'
63 * ,-------------. ,-------------.
64 * | | | | | |
65 * ,------|------|------| |------+------+------.
66 * | | | | | | |Brwser|
67 * | | |------| |------| |Back |
68 * | | | | | | | |
69 * `--------------------' `--------------------'
70 */
71/* Keymap 3: TxBolt (Serial)
72 *
73 * ,--------------------------------------------------. ,--------------------------------------------------.
74 * | BKSPC | | | | | | | | | | | | | | |
75 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
76 * | | # | # | # | # | # | | | | # | # | # | # | # | # |
77 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
78 * | | S | T | P | H | * |------| |------| * | F | P | L | T | D |
79 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
80 * | | S | K | W | R | * | | | | * | R | B | G | S | Z |
81 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
82 * | | | | | | | | | | | |
83 * `----------------------------------' `----------------------------------'
84 * ,-------------. ,-------------.
85 * | | | | | |
86 * ,------|------|------| |------+------+------.
87 * | | | | | | | |
88 * | A | O |------| |------| E | U |
89 * | | | | | | | |
90 * `--------------------' `--------------------'
91 */
92</code></pre>