mirror of
https://github.com/openstenoproject/qmk
synced 2024-09-17 09:19:19 +00:00
138 lines
5.5 KiB
Markdown
138 lines
5.5 KiB
Markdown
# QMK Steno Firmware
|
|
|
|
This repository is a fork of the [QMK firmware](https://github.com/qmk/qmk_firmware)
|
|
containing changes specific to hobbyist steno keyboards that are not currently
|
|
merged into upstream QMK:
|
|
|
|
- Support for protocols like [Plover HID](https://github.com/dnaq/plover-machine-hid)
|
|
- New keyboards, such as Ecosteno
|
|
- Optional behavior changes such as first-up chord send and chord repeat
|
|
|
|
See the [QMK firmware](https://github.com/qmk/qmk_firmware) repository and
|
|
documentation for more information on QMK itself.
|
|
|
|
## Keyboards Supported
|
|
|
|
| Keyboard | Source | Binaries |
|
|
| ------------ | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
| Georgi | [`gboards/georgi`](https://github.com/openstenoproject/qmk/tree/main/keyboards/gboards/georgi) | |
|
|
| Splitography | [`splitography`](https://github.com/openstenoproject/qmk/tree/main/keyboards/splitography) | |
|
|
| The Uni (v2) | [`the_uni/pro_micro`](https://github.com/openstenoproject/qmk/tree/main/keyboards/the_uni/pro_micro) | [StenoKeyboards](https://github.com/petercpark/stenokeyboards-firmware) |
|
|
| The Uni (v3) | [`the_uni/usb_c`](https://github.com/openstenoproject/qmk/tree/main/keyboards/the_uni/usb_c) | [StenoKeyboards](https://github.com/petercpark/stenokeyboards-firmware) |
|
|
| Ecosteno | [`noll/ecosteno`](https://github.com/openstenoproject/qmk/tree/main/keyboards/noll/ecosteno) | [Nolltronics](https://github.com/nkotech/EcoSteno-Firmware/tree/main/keyboards/noll) |
|
|
| Multisteno | [`noll/multisteno`](https://github.com/openstenoproject/qmk/tree/main/keyboards/noll/multisteno) | [Nolltronics](https://github.com/nkotech/Multisteno-Firmware/tree/main/keyboards/noll) |
|
|
|
|
## Steno Protocols
|
|
|
|
### Serial (TX Bolt, Gemini PR)
|
|
|
|
The industry-standard TX Bolt and Gemini PR steno protocols are included in
|
|
upstream QMK, and [QMK's steno docs](https://docs.qmk.fm/#/feature_stenography)
|
|
go into more detail on how to set that up, but in summary:
|
|
|
|
Add the following definitions to your keymap's `rules.mk` file:
|
|
|
|
```make
|
|
VIRTSER_ENABLE = yes
|
|
STENO_ENABLE = yes
|
|
```
|
|
|
|
And use the constants with the [`STN_` prefix](https://docs.qmk.fm/#/feature_stenography?id=keycode-reference)
|
|
to specify what steno key each key on your board should send. For example, the
|
|
base layer for the Uni looks as follows:
|
|
|
|
```c
|
|
/* keymap.c */
|
|
#include "keymap_steno.h"
|
|
|
|
LAYOUT(
|
|
STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR ,
|
|
STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR ,
|
|
STN_N1, STN_A, STN_O, STN_E, STN_U, STN_N2,
|
|
),
|
|
```
|
|
|
|
### Plover HID
|
|
|
|
The [Plover HID](https://github.com/dnaq/plover-machine-hid) protocol is an
|
|
in-development protocol that relies on the standard HID protocol rather than
|
|
USB serial, resulting in more customizability and a better user experience.
|
|
|
|
To use Plover HID, add the following definitions to your keymap's `rules.mk`:
|
|
|
|
```make
|
|
STENO_ENABLE = no
|
|
PLOVER_HID_ENABLE = yes
|
|
```
|
|
|
|
The keycodes for Plover HID are the same as the _TX Bolt_ constants for serial,
|
|
but use the `PLV_` prefix instead of `STN_`:
|
|
|
|
```c
|
|
/* keymap.c */
|
|
#include "keymap_plover_hid.h"
|
|
|
|
LAYOUT(
|
|
PLV_SL, PLV_TL, PLV_PL, PLV_HL, PLV_STR, PLV_STR, PLV_FR, PLV_PR, PLV_LR, PLV_TR, PLV_DR ,
|
|
PLV_SL, PLV_KL, PLV_WL, PLV_RL, PLV_STR, PLV_STR, PLV_RR, PLV_BR, PLV_GR, PLV_SR, PLV_ZR ,
|
|
PLV_NUM, PLV_A, PLV_O, PLV_E, PLV_U, PLV_NUM,
|
|
),
|
|
```
|
|
|
|
## Optional Features
|
|
|
|
Josh Grams has implemented some [steno extensions](https://github.com/JoshuaGrams/steno-firmware)
|
|
to the QMK firmware, allowing for easier repetition of certain chords or outlines.
|
|
These features can be enabled by defining constants in your keymap's `config.h`.
|
|
|
|
### First-Up Send (`STENO_1UP`)
|
|
|
|
```c
|
|
/* config.h */
|
|
#define STENO_1UP
|
|
```
|
|
|
|
This feature sends a stroke when you release the first key, allowing you to
|
|
hold down common keys across several strokes. For example, you can fingerspell
|
|
by holding down the common chord on the right-hand side, and tapping the letters
|
|
on the left-hand side:
|
|
|
|
```
|
|
↓ -FPLT
|
|
↓ O ↑ O → /OFPLT
|
|
↓ S ↑ S → /S-FPLT
|
|
↓ P ↑ P-FPLT → /P-FPLT
|
|
```
|
|
|
|
### Auto-Repeat (`STENO_REPEAT`)
|
|
|
|
```c
|
|
/* config.h */
|
|
#define STENO_REPEAT
|
|
|
|
/* Maximum number of strokes in an outline to repeat */
|
|
#define MAX_REPEAT 8
|
|
/* Window of time within which a stroke is considered a repeat */
|
|
#define STENO_REPEAT_DELAY_MS 350
|
|
/* Percent multiplier for the speed of sending repeated strokes */
|
|
#define STENO_REPEAT_SPEED_PERCENT 400
|
|
```
|
|
|
|
This feature lets you double-tap a stroke to repeat it 4 times as fast as your
|
|
double-tap (currently capped at 50 strokes per second):
|
|
|
|
```
|
|
↓ STPH ↑ STPH ↓ STPH → /STPH/STPH/STPH/...
|
|
↑ STPH
|
|
```
|
|
|
|
You can also repeat sequences up to 8 strokes long. Write the full outline, then
|
|
press and hold the first stroke again, for example:
|
|
|
|
```
|
|
↓ SUD ↑ SUD → /SUD
|
|
↓ -PB ↑ PB → /SUD/-PB
|
|
↓ HREU ↑ HREU → /SUD/-PB/HREU
|
|
↓ SUD → /SUD/-PB/HREU/SUD/-PB/HREU/SUD/-PB/HREU/...
|
|
↑ SUD
|
|
```
|