1
0
Fork 0
forked from forks/qmk_firmware

Remove requirement for keymap_steno.h include in keymaps (#22423)

* Remove requirement for `keymap_steno.h` include in keymaps

* Add back keymap_steno.h with a note for the time being
This commit is contained in:
Ryan 2023-11-12 18:25:46 +11:00 committed by GitHub
parent 87d69aebbb
commit 786ebf8760
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
46 changed files with 125 additions and 175 deletions

View file

@ -104,7 +104,7 @@ After enabling stenography and optionally selecting a protocol, you may also nee
!> If you had *explicitly* set `VIRSTER_ENABLE = no`, none of the serial stenography protocols (GeminiPR, TX Bolt) will work properly. You are expected to either set it to `yes`, remove the line from your `rules.mk` or send the steno chords yourself in an alternative way using the [provided interceptable hooks](#interfacing-with-the-code). !> If you had *explicitly* set `VIRSTER_ENABLE = no`, none of the serial stenography protocols (GeminiPR, TX Bolt) will work properly. You are expected to either set it to `yes`, remove the line from your `rules.mk` or send the steno chords yourself in an alternative way using the [provided interceptable hooks](#interfacing-with-the-code).
In your keymap, create a new layer for Plover, that you can fill in with the [steno keycodes](#keycode-reference) (you will need to include `keymap_steno.h`, see `planck/keymaps/steno/keymap.c` for an example). Remember to create a key to switch to the layer as well as a key for exiting the layer. In your keymap, create a new layer for Plover, that you can fill in with the [steno keycodes](#keycode-reference). Remember to create a key to switch to the layer as well as a key for exiting the layer.
Once you have your keyboard flashed, launch Plover. Click the 'Configure...' button. In the 'Machine' tab, select the Stenotype Machine that corresponds to your desired protocol. Click the 'Configure...' button on this tab and enter the serial port or click 'Scan'. Baud rate is fine at 9600 (although you should be able to set as high as 115200 with no issues). Use the default settings for everything else (Data Bits: 8, Stop Bits: 1, Parity: N, no flow control). Once you have your keyboard flashed, launch Plover. Click the 'Configure...' button. In the 'Machine' tab, select the Stenotype Machine that corresponds to your desired protocol. Click the 'Configure...' button on this tab and enter the serial port or click 'Scan'. Baud rate is fine at 9600 (although you should be able to set as high as 115200 with no issues). Use the default settings for everything else (Data Bits: 8, Stop Bits: 1, Parity: N, no flow control).
@ -149,8 +149,6 @@ At the end of this scenario given as an example, `chord` would have five bits se
## Keycode Reference :id=keycode-reference ## Keycode Reference :id=keycode-reference
You must include `keymap_steno.h` to your `keymap.c` with `#include "keymap_steno.h"` before you can use these keycodes
> Note: TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiPR keys to the nearest TX Bolt key so that one key map will work for both. > Note: TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiPR keys to the nearest TX Bolt key so that one key map will work for both.
|GeminiPR|TX Bolt|Steno Key| |GeminiPR|TX Bolt|Steno Key|
@ -198,7 +196,7 @@ You must include `keymap_steno.h` to your `keymap.c` with `#include "keymap_sten
|`STN_RES2`||(Reset 2)| |`STN_RES2`||(Reset 2)|
|`STN_PWR`||(Power)| |`STN_PWR`||(Power)|
If you do not want to hit two keys with one finger combined keycodes can be used. These are also defined in `keymap_steno.h`, and causes both keys to be reported as pressed or released. To use these keycodes define `STENO_COMBINEDMAP` in your `config.h` file. If you do not want to hit two keys with one finger combined keycodes can be used. These cause both keys to be reported as pressed or released. To use these keycodes define `STENO_COMBINEDMAP` in your `config.h` file.
|Combined key | Key1 | Key 2 | |Combined key | Key1 | Key 2 |
|---------------|--------|----------| |---------------|--------|----------|

View file

@ -87,6 +87,5 @@ There are also a few which are not quite language-specific, but useful if you ar
|Norman |`keymap_norman.h` |`sendstring_norman.h` | |Norman |`keymap_norman.h` |`sendstring_norman.h` |
|Plover |`keymap_plover.h` | | |Plover |`keymap_plover.h` | |
|Plover (Dvorak) |`keymap_plover_dvorak.h` | | |Plover (Dvorak) |`keymap_plover_dvorak.h` | |
|Steno |`keymap_steno.h` | |
|Workman |`keymap_workman.h` |`sendstring_workman.h` | |Workman |`keymap_workman.h` |`sendstring_workman.h` |
|Workman (ZXCVM) |`keymap_workman_zxcvm.h` |`sendstring_workman_zxcvm.h` | |Workman (ZXCVM) |`keymap_workman_zxcvm.h` |`sendstring_workman_zxcvm.h` |

View file

@ -1,5 +1,4 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT_ortho_3x10( LAYOUT_ortho_3x10(

View file

@ -1,5 +1,4 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
#define ST_BOLT QK_STENO_BOLT #define ST_BOLT QK_STENO_BOLT
#define ST_GEM QK_STENO_GEMINI #define ST_GEM QK_STENO_GEMINI

View file

@ -2,7 +2,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( [0] = LAYOUT(

View file

@ -1,7 +1,4 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "debug.h"
#include "action_layer.h"
#include "keymap_steno.h"
#define BASE 0 // default layer #define BASE 0 // default layer
#define SYMB 1 // symbols #define SYMB 1 // symbols

View file

@ -14,7 +14,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
#include "g/keymap_combo.h" #include "g/keymap_combo.h"

View file

@ -8,7 +8,6 @@
#pragma once #pragma once
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
extern size_t keymapsCount; // Total keymaps extern size_t keymapsCount; // Total keymaps
extern uint32_t cChord; // Current Chord extern uint32_t cChord; // Current Chord

View file

@ -12,7 +12,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "sten.h" #include "sten.h"
#include "keymap_steno.h"
// Steno Layers // Steno Layers
#define FUNCT ( LSD | LK | LP | LH ) #define FUNCT ( LSD | LK | LP | LH )

View file

@ -12,7 +12,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "sten.h" #include "sten.h"
#include "keymap_steno.h"
// Proper Layers // Proper Layers
#define FUNCT (LSD | LK | LP | LH) #define FUNCT (LSD | LK | LP | LH)

View file

@ -12,7 +12,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "sten.h" #include "sten.h"
#include "keymap_steno.h"
// Proper Layers // Proper Layers
#define FUNCT (LSD | LK | LP | LH) #define FUNCT (LSD | LK | LP | LH)

View file

@ -12,7 +12,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "sten.h" #include "sten.h"
#include "keymap_steno.h"
// Proper Layers // Proper Layers
#define FUNCT (LSD | LK | LP | LH) #define FUNCT (LSD | LK | LP | LH)

View file

@ -12,7 +12,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "sten.h" #include "sten.h"
#include "keymap_steno.h"
// Proper Layers // Proper Layers
#define FUNCT (LSD | LK | LP | LH) #define FUNCT (LSD | LK | LP | LH)

View file

@ -7,7 +7,6 @@
#pragma once #pragma once
#include "georgi.h" #include "georgi.h"
#include "keymap_steno.h"
extern size_t keymapsCount; // Total keymaps extern size_t keymapsCount; // Total keymaps
extern uint32_t cChord; // Current Chord extern uint32_t cChord; // Current Chord

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
// clang-format off // clang-format off

View file

@ -1,8 +1,5 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "debug.h"
#include "action_layer.h"
#include "version.h" #include "version.h"
#include "keymap_steno.h"
#ifndef MIDI_ENABLE #ifndef MIDI_ENABLE
#error "Midi is not enabled" #error "Midi is not enabled"
#endif #endif

View file

@ -11,7 +11,6 @@ typedef union {
user_config_t user_config; user_config_t user_config;
#ifdef STENO_ENABLE #ifdef STENO_ENABLE
#include "keymap_steno.h"
#endif // STENO_ENABLE #endif // STENO_ENABLE

View file

@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum layers { enum layers {
_BA, // Base (Balance Twelve mirror variant) _BA, // Base (Balance Twelve mirror variant)

View file

@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
// Custom Keycodes and Combinations Used // Custom Keycodes and Combinations Used
#define DEL_SHF SFT_T(KC_DEL) #define DEL_SHF SFT_T(KC_DEL)
#define QUAKE LCTL(KC_GRV) #define QUAKE LCTL(KC_GRV)

View file

@ -1,5 +1,4 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View file

@ -1,7 +1,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "narze.h" #include "narze.h"
#include "keymap_colemak.h" #include "keymap_colemak.h"
#include "keymap_steno.h"
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE

View file

@ -2,7 +2,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
// Defines names for use in layer keycodes and the keymap // Defines names for use in layer keycodes and the keymap
enum layer_names { enum layer_names {

View file

@ -2,7 +2,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
// Defines names for use in layer keycodes and the keymap // Defines names for use in layer keycodes and the keymap
enum layer_names { enum layer_names {

View file

@ -67,9 +67,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#ifdef STENO_ENABLE
#include "keymap_steno.h"
#endif
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
#include "g/keymap_combo.h" #include "g/keymap_combo.h"
#include "muse.h" #include "muse.h"

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
// Custom Keycodes and Combinations Used // Custom Keycodes and Combinations Used
#define DEL_SHF SFT_T(KC_DEL) #define DEL_SHF SFT_T(KC_DEL)

View file

@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
#include "version.h" #include "version.h"
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View file

@ -67,9 +67,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#ifdef STENO_ENABLE
#include "keymap_steno.h"
#endif
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View file

@ -67,9 +67,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#ifdef STENO_ENABLE
#include "keymap_steno.h"
#endif
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View file

@ -67,9 +67,6 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#ifdef STENO_ENABLE
#include "keymap_steno.h"
#endif
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;

View file

@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum layers { enum layers {
_BA, // Base (Balance Twelve mirror variant) _BA, // Base (Balance Twelve mirror variant)

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum preonic_layers { enum preonic_layers {
_QWERTY, _QWERTY,

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum keyboard_layers { enum keyboard_layers {
_QWERTY = 0, _QWERTY = 0,

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum keyboard_layers { enum keyboard_layers {
_QWERTY = 0, _QWERTY = 0,

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum keyboard_layers { enum keyboard_layers {
_DVORAK = 0, _DVORAK = 0,

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum keyboard_layers { enum keyboard_layers {
_GEMINI = 0, _GEMINI = 0,

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum keyboard_layers { enum keyboard_layers {
_QWERTY = 0, _QWERTY = 0,

View file

@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum uni_layers { enum uni_layers {
_PLOVER, _PLOVER,

View file

@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
enum uni_layers { enum uni_layers {
_PLOVER, _PLOVER,

View file

@ -15,7 +15,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
// Custom Keycodes and Combinations Used // Custom Keycodes and Combinations Used
#define DEL_SHF SFT_T(KC_DEL) #define DEL_SHF SFT_T(KC_DEL)

View file

@ -16,7 +16,6 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "keymap_steno.h"
void matrix_init_user(void) { void matrix_init_user(void) {
steno_set_mode(STENO_MODE_GEMINI); steno_set_mode(STENO_MODE_GEMINI);

View file

@ -1,119 +1,6 @@
/* Copyright 2017 Joseph Wasson // Copyright 2023 QMK
* // SPDX-License-Identifier: GPL-2.0-or-later
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once #pragma once
#include "keycodes.h" #pragma message("keymap_steno.h include is no longer required")
// List of keycodes for the steno keyboard. To prevent
// errors, this must be <= 42 total entries in order to
// support the GeminiPR protocol.
enum steno_keycodes {
STN__MIN = QK_STENO,
STN_FN = STN__MIN,
STN_NUM,
STN_N1 = STN_NUM,
STN_N2,
STN_N3,
STN_N4,
STN_N5,
STN_N6,
STN_SL,
STN_S1 = STN_SL,
STN_S2,
STN_TL,
STN_KL,
STN_PL,
STN_WL,
STN_HL,
STN_RL,
STN_A,
STN_O,
STN_STR,
STN_ST1 = STN_STR,
STN_ST2,
STN_RES1,
STN_RE1 = STN_RES1,
STN_RES2,
STN_RE2 = STN_RES2,
STN_PWR,
STN_ST3,
STN_ST4,
STN_E,
STN_U,
STN_FR,
STN_RR,
STN_PR,
STN_BR,
STN_LR,
STN_GR,
STN_TR,
STN_SR,
STN_DR,
STN_N7,
STN_N8,
STN_N9,
STN_NA,
STN_NB,
STN_NC,
STN_ZR,
STN__MAX = STN_ZR, // must be less than QK_STENO_BOLT
};
#ifdef STENO_COMBINEDMAP
enum steno_combined_keycodes {
STN_S3 = QK_STENO_COMB,
STN_TKL,
STN_PWL,
STN_HRL,
STN_FRR,
STN_PBR,
STN_LGR,
STN_TSR,
STN_DZR,
STN_AO,
STN_EU,
STN_COMB_MAX = STN_EU,
};
#endif
#ifdef STENO_ENABLE_BOLT
// TxBolt Codes
# define TXB_NUL 0
# define TXB_S_L 0b00000001
# define TXB_T_L 0b00000010
# define TXB_K_L 0b00000100
# define TXB_P_L 0b00001000
# define TXB_W_L 0b00010000
# define TXB_H_L 0b00100000
# define TXB_R_L 0b01000001
# define TXB_A_L 0b01000010
# define TXB_O_L 0b01000100
# define TXB_STR 0b01001000
# define TXB_E_R 0b01010000
# define TXB_U_R 0b01100000
# define TXB_F_R 0b10000001
# define TXB_R_R 0b10000010
# define TXB_P_R 0b10000100
# define TXB_B_R 0b10001000
# define TXB_L_R 0b10010000
# define TXB_G_R 0b10100000
# define TXB_T_R 0b11000001
# define TXB_S_R 0b11000010
# define TXB_D_R 0b11000100
# define TXB_Z_R 0b11001000
# define TXB_NUM 0b11010000
#endif // STENO_ENABLE_BOLT

View file

@ -16,7 +16,6 @@
#include "process_steno.h" #include "process_steno.h"
#include "quantum_keycodes.h" #include "quantum_keycodes.h"
#include "eeconfig.h" #include "eeconfig.h"
#include "keymap_steno.h"
#include <string.h> #include <string.h>
#ifdef VIRTSER_ENABLE #ifdef VIRTSER_ENABLE
# include "virtser.h" # include "virtser.h"

View file

@ -19,6 +19,7 @@
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include "action.h" #include "action.h"
#include "steno_keycodes.h"
#define BOLT_STROKE_SIZE 4 #define BOLT_STROKE_SIZE 4
#define GEMINI_STROKE_SIZE 6 #define GEMINI_STROKE_SIZE 6

119
quantum/steno_keycodes.h Normal file
View file

@ -0,0 +1,119 @@
/* Copyright 2017 Joseph Wasson
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "keycodes.h"
// List of keycodes for the steno keyboard. To prevent
// errors, this must be <= 42 total entries in order to
// support the GeminiPR protocol.
enum steno_keycodes {
STN__MIN = QK_STENO,
STN_FN = STN__MIN,
STN_NUM,
STN_N1 = STN_NUM,
STN_N2,
STN_N3,
STN_N4,
STN_N5,
STN_N6,
STN_SL,
STN_S1 = STN_SL,
STN_S2,
STN_TL,
STN_KL,
STN_PL,
STN_WL,
STN_HL,
STN_RL,
STN_A,
STN_O,
STN_STR,
STN_ST1 = STN_STR,
STN_ST2,
STN_RES1,
STN_RE1 = STN_RES1,
STN_RES2,
STN_RE2 = STN_RES2,
STN_PWR,
STN_ST3,
STN_ST4,
STN_E,
STN_U,
STN_FR,
STN_RR,
STN_PR,
STN_BR,
STN_LR,
STN_GR,
STN_TR,
STN_SR,
STN_DR,
STN_N7,
STN_N8,
STN_N9,
STN_NA,
STN_NB,
STN_NC,
STN_ZR,
STN__MAX = STN_ZR, // must be less than QK_STENO_BOLT
};
#ifdef STENO_COMBINEDMAP
enum steno_combined_keycodes {
STN_S3 = QK_STENO_COMB,
STN_TKL,
STN_PWL,
STN_HRL,
STN_FRR,
STN_PBR,
STN_LGR,
STN_TSR,
STN_DZR,
STN_AO,
STN_EU,
STN_COMB_MAX = STN_EU,
};
#endif
#ifdef STENO_ENABLE_BOLT
// TxBolt Codes
# define TXB_NUL 0
# define TXB_S_L 0b00000001
# define TXB_T_L 0b00000010
# define TXB_K_L 0b00000100
# define TXB_P_L 0b00001000
# define TXB_W_L 0b00010000
# define TXB_H_L 0b00100000
# define TXB_R_L 0b01000001
# define TXB_A_L 0b01000010
# define TXB_O_L 0b01000100
# define TXB_STR 0b01001000
# define TXB_E_R 0b01010000
# define TXB_U_R 0b01100000
# define TXB_F_R 0b10000001
# define TXB_R_R 0b10000010
# define TXB_P_R 0b10000100
# define TXB_B_R 0b10001000
# define TXB_L_R 0b10010000
# define TXB_G_R 0b10100000
# define TXB_T_R 0b11000001
# define TXB_S_R 0b11000010
# define TXB_D_R 0b11000100
# define TXB_Z_R 0b11001000
# define TXB_NUM 0b11010000
#endif // STENO_ENABLE_BOLT