mirror of
https://github.com/qmk/qmk_firmware
synced 2025-01-07 23:41:41 +00:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
c3aaed8dfb | ||
|
ebc274209e | ||
|
1bdfac8afc | ||
|
9b716b7ada | ||
|
b591c0c24a | ||
|
6ba014a572 | ||
|
2dd47a3bf4 | ||
|
887c1c4e0e | ||
|
f66850bfd0 | ||
|
632285c982 | ||
|
805f5cb72b |
3
Makefile
3
Makefile
@ -29,6 +29,9 @@ $(info QMK Firmware $(QMK_VERSION))
|
||||
endif
|
||||
endif
|
||||
|
||||
# avoid 'Entering|Leaving directory' messages
|
||||
MAKEFLAGS += --no-print-directory
|
||||
|
||||
ON_ERROR := error_occurred=1
|
||||
|
||||
BREAK_ON_ERRORS = no
|
||||
|
@ -28,3 +28,4 @@ Note that the array indices are reversed same as the matrix and the values are o
|
||||
|`SH_MOFF` |Momentarily turns off swap. |
|
||||
|`SH_TG` |Toggles swap on and off with every key press. |
|
||||
|`SH_TT` |Toggles with a tap; momentary when held. |
|
||||
|`SH_OS` |One shot swap hands: toggles while pressed or until next key press. |
|
||||
|
@ -115,12 +115,18 @@ The simplest and quickest way to get things back to normal is to flash only a bo
|
||||
|
||||
You can find the stock bootloaders in the [`util/` folder](https://github.com/qmk/qmk_firmware/tree/master/util). Be sure to flash the correct bootloader for your chip:
|
||||
|
||||
* [`atmega32u4`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1_0_0.hex) - Most keyboards, Planck Rev 1-5, Preonic Rev 1-2
|
||||
* [`Pro Micro`](https://github.com/sparkfun/Arduino_Boards/blob/master/sparkfun/avr/bootloaders/caterina/Caterina-promicro16.hex) - The default bootloader for Pro Micro controllers
|
||||
* [`at90usb1286`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_at90usb128x_1_0_1.hex) - Planck Light Rev 1
|
||||
* [`atmega32a`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32a_1_0_0.hex) - jj40, and other V-USB/ps2avrGB keyboards
|
||||
* **Atmel DFU**
|
||||
* [ATmega16U4](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega16u4_1.0.1.hex)
|
||||
* [ATmega32U4](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1.0.0.hex)
|
||||
* [AT90USB64](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_at90usb64_1.0.0.hex)
|
||||
* [AT90USB128](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_at90usb128_1.0.1.hex)
|
||||
* **Caterina**
|
||||
* [Pro Micro (5V/16MHz)](https://github.com/sparkfun/Arduino_Boards/blob/master/sparkfun/avr/bootloaders/caterina/Caterina-promicro16.hex)
|
||||
* [Pro Micro (3.3V/8MHz)](https://github.com/sparkfun/Arduino_Boards/blob/master/sparkfun/avr/bootloaders/caterina/Caterina-promicro8.hex)
|
||||
* **BootloadHID (PS2AVRGB)**
|
||||
* [ATmega32A](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_ps2avrgb_bootloadhid_1.0.1.hex)
|
||||
|
||||
If you're not sure what your board uses, look in the `rules.mk` file for the keyboard in QMK. The `MCU =` line will have the value you need. It may differ between different versions of the board.
|
||||
If you're not sure what your board uses, look in the `rules.mk` file for the keyboard in QMK. The `MCU` and `BOOTLOADER` lines will have the value you need. It may differ between different versions of the board.
|
||||
|
||||
### Production Techniques
|
||||
|
||||
|
@ -531,6 +531,7 @@ See also: [Swap Hands](feature_swap_hands.md)
|
||||
|`SH_MOFF` |Momentarily turns off swap. |
|
||||
|`SH_TG` |Toggles swap on and off with every key press. |
|
||||
|`SH_TT` |Toggles with a tap; momentary when held. |
|
||||
|`SH_OS` |One shot swap hands: toggle while pressed or until next key press. |
|
||||
|
||||
## Unicode Support :id=unicode-support
|
||||
|
||||
|
@ -2,11 +2,72 @@
|
||||
"keyboard_name": "Murciélago",
|
||||
"url": "",
|
||||
"maintainer": "elagil",
|
||||
"width": 16,
|
||||
"height": 10.025,
|
||||
"width": 15,
|
||||
"height": 5.75,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"label":"0,3", "x":3.5, "y":0.25}, {"label":"6,2", "x":12, "y":0.25}, {"label":"0,2", "x":2.5, "y":0.375}, {"label":"0,4", "x":4.5, "y":0.375}, {"label":"6,1", "x":11, "y":0.375}, {"label":"6,3", "x":13, "y":0.375}, {"label":"0,1", "x":1.5, "y":0.5}, {"label":"0,5", "x":5.5, "y":0.5}, {"label":"6,0", "x":10, "y":0.5}, {"label":"6,4", "x":14, "y":0.5}, {"label":"0,0", "x":0.5, "y":0.675}, {"label":"6,5", "x":15, "y":0.675}, {"label":"1,3", "x":3.5, "y":1.25}, {"label":"7,2", "x":12, "y":1.25}, {"label":"1,2", "x":2.5, "y":1.375}, {"label":"1,4", "x":4.5, "y":1.375}, {"label":"7,1", "x":11, "y":1.375}, {"label":"7,3", "x":13, "y":1.375}, {"label":"1,1", "x":1.5, "y":1.5}, {"label":"1,5", "x":5.5, "y":1.5}, {"label":"7,0", "x":10, "y":1.5}, {"label":"7,4", "x":14, "y":1.5}, {"label":"1,0", "x":0.5, "y":1.675}, {"label":"7,5", "x":15, "y":1.675}, {"label":"2,3", "x":3.5, "y":2.25}, {"label":"8,2", "x":12, "y":2.25}, {"label":"2,2", "x":2.5, "y":2.375}, {"label":"2,4", "x":4.5, "y":2.375}, {"label":"8,1", "x":11, "y":2.375}, {"label":"8,3", "x":13, "y":2.375}, {"label":"2,1", "x":1.5, "y":2.5}, {"label":"2,5", "x":5.5, "y":2.5}, {"label":"8,0", "x":10, "y":2.5}, {"label":"8,4", "x":14, "y":2.5}, {"label":"2,0", "x":0.5, "y":2.675}, {"label":"8,5", "x":15, "y":2.675}, {"label":"3,3", "x":3.5, "y":3.25}, {"label":"9,2", "x":12, "y":3.25}, {"label":"3,2", "x":2.5, "y":3.375}, {"label":"3,4", "x":4.5, "y":3.375}, {"label":"9,1", "x":11, "y":3.375}, {"label":"9,3", "x":13, "y":3.375}, {"label":"3,1", "x":1.5, "y":3.5}, {"label":"3,5", "x":5.5, "y":3.5}, {"label":"5,5", "x":6.5, "y":3.5}, {"label":"11,0", "x":9, "y":3.5}, {"label":"9,0", "x":10, "y":3.5}, {"label":"9,4", "x":14, "y":3.5}, {"label":"3,0", "x":0.5, "y":3.675}, {"label":"9,5", "x":15, "y":3.675}, {"label":"4,2", "x":3.2, "y":4.3}, {"label":"10,3", "x":12.3, "y":4.3}, {"label":"4,3", "x":4.2, "y":4.4}, {"label":"10,2", "x":11.3, "y":4.4}, {"label":"4,1", "x":2.2, "y":4.5}, {"label":"4,5", "x":6.3, "y":4.5, "h":1.5}, {"label":"10,0", "x":9.2, "y":4.5, "h":1.5}, {"label":"10,4", "x":13.3, "y":4.5}, {"label":"4,4", "x":5.2, "y":4.6}, {"label":"10,1", "x":10.3, "y":4.6}]
|
||||
"layout": [
|
||||
{"label":"0,0", "x":0, "y":0.425},
|
||||
{"label":"0,1", "x":1, "y":0.25},
|
||||
{"label":"0,2", "x":2, "y":0.125},
|
||||
{"label":"0,3", "x":3, "y":0.0},
|
||||
{"label":"0,4", "x":4, "y":0.125},
|
||||
{"label":"0,5", "x":5, "y":0.25},
|
||||
{"label":"6,0", "x":9, "y":0.25},
|
||||
{"label":"6,1", "x":10, "y":0.125},
|
||||
{"label":"6,2", "x":11, "y":0.0},
|
||||
{"label":"6,3", "x":12, "y":0.125},
|
||||
{"label":"6,4", "x":13, "y":0.25},
|
||||
{"label":"6,5", "x":14, "y":0.425},
|
||||
{"label":"1,0", "x":0, "y":1.425},
|
||||
{"label":"1,1", "x":1, "y":1.25},
|
||||
{"label":"1,2", "x":2, "y":1.125},
|
||||
{"label":"1,3", "x":3, "y":1.0},
|
||||
{"label":"1,4", "x":4, "y":1.125},
|
||||
{"label":"1,5", "x":5, "y":1.25},
|
||||
{"label":"7,0", "x":9, "y":1.25},
|
||||
{"label":"7,1", "x":10, "y":1.125},
|
||||
{"label":"7,2", "x":11, "y":1.0},
|
||||
{"label":"7,3", "x":12, "y":1.125},
|
||||
{"label":"7,4", "x":13, "y":1.25},
|
||||
{"label":"7,5", "x":14, "y":1.425},
|
||||
{"label":"2,0", "x":0, "y":2.425},
|
||||
{"label":"2,1", "x":1, "y":2.25},
|
||||
{"label":"2,2", "x":2, "y":2.125},
|
||||
{"label":"2,3", "x":3, "y":2.0},
|
||||
{"label":"2,4", "x":4, "y":2.125},
|
||||
{"label":"2,5", "x":5, "y":2.25},
|
||||
{"label":"8,0", "x":9, "y":2.25},
|
||||
{"label":"8,1", "x":10, "y":2.125},
|
||||
{"label":"8,2", "x":11, "y":2.0},
|
||||
{"label":"8,3", "x":12, "y":2.125},
|
||||
{"label":"8,4", "x":13, "y":2.25},
|
||||
{"label":"8,5", "x":14, "y":2.425},
|
||||
{"label":"3,0", "x":0, "y":3.425},
|
||||
{"label":"3,1", "x":1, "y":3.25},
|
||||
{"label":"3,2", "x":2, "y":3.125},
|
||||
{"label":"3,3", "x":3, "y":3.0},
|
||||
{"label":"3,4", "x":4, "y":3.125},
|
||||
{"label":"3,5", "x":5, "y":3.25},
|
||||
{"label":"5,5", "x":6, "y":3.25},
|
||||
{"label":"11,0", "x":8, "y":3.25},
|
||||
{"label":"9,0", "x":9, "y":3.25},
|
||||
{"label":"9,1", "x":10, "y":3.125},
|
||||
{"label":"9,2", "x":11, "y":3.0},
|
||||
{"label":"9,3", "x":12, "y":3.125},
|
||||
{"label":"9,4", "x":13, "y":3.25},
|
||||
{"label":"9,5", "x":14, "y":3.425},
|
||||
{"label":"4,1", "x":1.7, "y":4.25},
|
||||
{"label":"4,2", "x":2.7, "y":4.05},
|
||||
{"label":"4,3", "x":3.7, "y":4.15},
|
||||
{"label":"4,4", "x":4.7, "y":4.35},
|
||||
{"label":"4,5", "x":5.8, "y":4.25, "h":1.5},
|
||||
{"label":"10,0", "x":8.2, "y":4.25, "h":1.5},
|
||||
{"label":"10,1", "x":9.3, "y":4.35},
|
||||
{"label":"10,2", "x":10.3, "y":4.15},
|
||||
{"label":"10,3", "x":11.3, "y":4.05},
|
||||
{"label":"10,4", "x":12.3, "y":4.25}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Murciélago (the bat)
|
||||
|
||||
The Murciélago is a split ortholinear keyboard with 60 keys in a 6x4 layout + 6 thumb keys (per side). At the upper thumb positions, rotary encoders can be used instead of switches. A single-color backlight may be used as a layer indicator.
|
||||
The Murciélago is a split ortholinear keyboard with 60 keys in a 6x4 layout + 6 thumb keys (per side). At the upper thumb positions, rotary encoders can be used instead of switches.
|
||||
|
||||
* Keyboard Maintainer: [elagil](https://github.com/elagil)
|
||||
* Hardware Supported: [murcielago](https://github.com/elagil/murcielago)
|
||||
@ -9,4 +9,8 @@ Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make murcielago/rev1:default
|
||||
|
||||
For compiling a via-compatible keymap, use:
|
||||
|
||||
make murcielago/rev1:via
|
||||
|
||||
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||
|
@ -25,15 +25,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT_default(
|
||||
KC_ESC, TD_TESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC,
|
||||
KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC,
|
||||
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_PGDN, KC_CTLE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN2_60),
|
||||
KC_LCTL, KC_LALT, LT_SPCF, KC_LGUI, LT_SPCF, TD_TWIN, TD_TCTL
|
||||
KC_LCTL, KC_LALT, LT_BPCF, KC_LGUI, LT_SPCF, TD_TWIN, TD_TCTL
|
||||
),
|
||||
|
||||
[_DEFAULT] = LAYOUT_default(
|
||||
KC_ESC, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC,
|
||||
KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC,
|
||||
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN2_60),
|
||||
|
@ -3,11 +3,8 @@
|
||||
#define _BL 0
|
||||
#define _FL 1
|
||||
#define _MAC 2
|
||||
#define _LA 3
|
||||
|
||||
// investigate later - use lctl / lsft as up/down.
|
||||
// https://github.com/qmk/qmk_firmware/tree/master/keyboards/tada68/keymaps/fakb
|
||||
#define LCTL_MA LCTL_T(KC_UP)
|
||||
#define LSFT_MA LSFT_T(KC_DOWN)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap _BL: (Base Layer) Default Layer
|
||||
@ -27,19 +24,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* Win + Esc = `
|
||||
*/
|
||||
[_BL] = LAYOUT_ansi(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , \
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_PGDN, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
|
||||
KC_LCTL, KC_LGUI, LM(_LA, MOD_LALT), KC_SPC, KC_RALT, MO(_FL), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
/* Keymap _FL: Function Layer
|
||||
* ,----------------------------------------------------------------.
|
||||
* |`swp|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| Del |`swp|
|
||||
* |----------------------------------------------------------------|
|
||||
* | |BL |BL-|BL+|Brt| | | |mac| |PSc| | | |Ins |
|
||||
* | |BL |BL-|BL+| | | | |mac| |PSc| | | |Ins |
|
||||
* |----------------------------------------------------------------|
|
||||
* | | | | | | |<- |Dn |Up | ->| | | |Hme |
|
||||
* | | | | | | |Lef|Dn |Up |Rig| | | |Hme |
|
||||
* |----------------------------------------------------------------|
|
||||
* | | | | | | | |MUT|V- |V+ | | |PUp|End |
|
||||
* |----------------------------------------------------------------|
|
||||
@ -48,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
*/
|
||||
[_FL] = LAYOUT_ansi(
|
||||
MAGIC_UNSWAP_GRAVE_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, MAGIC_SWAP_GRAVE_ESC, \
|
||||
_______, BL_TOGG, BL_DEC, BL_INC , BL_BRTG, _______, _______, _______, TG(_MAC),_______, KC_PSCR, _______, _______, _______, KC_INS, \
|
||||
_______, BL_TOGG, BL_DEC, BL_INC , _______, _______, _______, _______, TG(_MAC),_______, KC_PSCR, _______, _______, _______, KC_INS, \
|
||||
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______, KC_HOME, \
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_PGUP, KC_END , \
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END ),
|
||||
@ -73,4 +70,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, _______, KC_RGUI, _______, KC_RALT, _______, _______, _______),
|
||||
|
||||
/* Keymap _LA: Left Alt Layer - LALT-4 maps to LALT-F4 so I can quit apps
|
||||
* ,----------------------------------------------------------------.
|
||||
* | | | | |F4 | | | | | | | | | | |
|
||||
* |----------------------------------------------------------------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |----------------------------------------------------------------|
|
||||
* | | | | | | | | | | | | | | |
|
||||
* |----------------------------------------------------------------|
|
||||
* | | | | | | | | | | | | | | |
|
||||
* |----------------------------------------------------------------|
|
||||
* | | | | | | | | | | |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
[_LA] = LAYOUT_ansi(
|
||||
_______, _______, _______, _______, KC_F4, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||
};
|
||||
|
@ -4,13 +4,14 @@
|
||||
+ Mac layer
|
||||
+ Press Fn-I to align the bottom row to mac standards
|
||||
+ volume controls moved to Fn+ M<>
|
||||
+ [Space Cadet Shift](https://docs.qmk.fm/#/feature_space_cadet_shift) enabled
|
||||
+ Fn+R for LED breathing
|
||||
+ Fn+Del for Insert
|
||||
+ `GRAVE_ESC_ALT_OVERRIDE` so cmd-opt-esc still works (thx [mattdicarlo](https://github.com/qmk/qmk_firmware/tree/master/keyboards/tada68/keymaps/mattdicarlo))
|
||||
+ `LALT` layer - LALT-4 maps to LALT-F4 so you can close windows in Windows
|
||||
|
||||
|
||||
### Base Layer
|
||||
|
||||
```
|
||||
Base Layer
|
||||
,----------------------------------------------------------------.
|
||||
|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
|
||||
|----------------------------------------------------------------|
|
||||
@ -22,15 +23,19 @@
|
||||
|----------------------------------------------------------------|
|
||||
|Ctrl|Win |Alt | Space |Alt|Fn |Ctrl|<- |Dn | -> |
|
||||
`----------------------------------------------------------------'
|
||||
Note: Shift + Esc = ~ (tilde)
|
||||
Win + Esc = ` (grave)
|
||||
```
|
||||
Note:
|
||||
* Shift + Esc = ~ (tilde)
|
||||
* Win + Esc = ` (grave)
|
||||
|
||||
|
||||
Fn Layer
|
||||
### Fn Layer
|
||||
|
||||
```
|
||||
,----------------------------------------------------------------.
|
||||
| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| Del | |
|
||||
|----------------------------------------------------------------|
|
||||
| |BL |BL-|BL+|Brt| | | |mac| |PSc| | | |Ins |
|
||||
| |BL |BL-|BL+| | | | |mac| |PSc| | | |Ins |
|
||||
|----------------------------------------------------------------|
|
||||
| | | | | | |<- |Dn |Up | ->| | | |Hme |
|
||||
|----------------------------------------------------------------|
|
||||
@ -38,8 +43,11 @@ Note: Shift + Esc = ~ (tilde)
|
||||
|----------------------------------------------------------------|
|
||||
| | | | | | | |Hme|PDn|End |
|
||||
`----------------------------------------------------------------'
|
||||
```
|
||||
|
||||
Mac Layer
|
||||
### Mac Layer
|
||||
|
||||
```
|
||||
,----------------------------------------------------------------.
|
||||
| | | | | | | | | | | | | | | |
|
||||
|----------------------------------------------------------------|
|
||||
@ -52,3 +60,19 @@ Mac Layer
|
||||
|Ctrl|Alt |Win | |Win | |Alt| | | |
|
||||
`----------------------------------------------------------------'
|
||||
```
|
||||
|
||||
### `LALT` Layer
|
||||
|
||||
```
|
||||
,----------------------------------------------------------------.
|
||||
| | | | |F4 | | | | | | | | | | |
|
||||
|----------------------------------------------------------------|
|
||||
| | | | | | | | | | | | | | | |
|
||||
|----------------------------------------------------------------|
|
||||
| | | | | | | | | | | | | | |
|
||||
|----------------------------------------------------------------|
|
||||
| | | | | | | | | | | | | | |
|
||||
|----------------------------------------------------------------|
|
||||
| |Alt | | | | | | | | |
|
||||
`----------------------------------------------------------------'
|
||||
```
|
||||
|
@ -16,7 +16,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||
│Shift│█████│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │█████│Shift│ Fn │
|
||||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
|
||||
│█████│ Gui │ Alt │█████│█████│Space│█████│█████│█████│█████│█████│ Alt │ Gui │█████│█████│
|
||||
│█████│ Alt │ Gui │█████│█████│Space│█████│█████│█████│█████│█████│ Gui │ Alt │█████│█████│
|
||||
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
|
||||
*/
|
||||
[BL] = LAYOUT_60_hhkb(
|
||||
|
56
keyboards/wilba_tech/wt80_bc/config.h
Normal file
56
keyboards/wilba_tech/wt80_bc/config.h
Normal file
@ -0,0 +1,56 @@
|
||||
/* Copyright 2020 Jason Williams (Wilba)
|
||||
*
|
||||
* 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 "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x6582 // wilba.tech
|
||||
#define PRODUCT_ID 0x80B0 // 80-BC
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER wilba.tech
|
||||
#define PRODUCT wilba.tech WT80-BC
|
||||
#define DESCRIPTION wilba.tech WT80-BC
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 17
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
* Change this to how you wired your keyboard
|
||||
* COLS: AVR pins used for columns, left to right
|
||||
* ROWS: AVR pins used for rows, top to bottom
|
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||
*
|
||||
*/
|
||||
#define MATRIX_ROW_PINS { F1, F0, E6, F4, F6, F7 }
|
||||
#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4, B7, B0 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
12
keyboards/wilba_tech/wt80_bc/info.json
Normal file
12
keyboards/wilba_tech/wt80_bc/info.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"keyboard_name": "wilba.tech WT80-BC",
|
||||
"url": "https://wilba.tech",
|
||||
"maintainer": "Wilba",
|
||||
"width": 18.25,
|
||||
"height": 6.25,
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2, "y":1.25}, {"x":3, "y":1.25}, {"x":4, "y":1.25}, {"x":5, "y":1.25}, {"x":6, "y":1.25}, {"x":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25, "w":2}, {"x":15.25, "y":1.25}, {"x":16.25, "y":1.25}, {"x":17.25, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15.25, "y":2.25}, {"x":16.25, "y":2.25}, {"x":17.25, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":0, "y":4.25, "w":2.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":2.75}, {"x":16.25, "y":4.25}, {"x":0, "y":5.25, "w":1.5}, {"x":1.5, "y":5.25}, {"x":2.5, "y":5.25, "w":1.5}, {"x":4, "y":5.25, "w":7}, {"x":11, "y":5.25, "w":1.5}, {"x":12.5, "y":5.25}, {"x":13.5, "y":5.25, "w":1.5}, {"x":15.25, "y":5.25}, {"x":16.25, "y":5.25}, {"x":17.25, "y":5.25}]
|
||||
}
|
||||
}
|
||||
}
|
37
keyboards/wilba_tech/wt80_bc/keymaps/default/keymap.c
Normal file
37
keyboards/wilba_tech/wt80_bc/keymaps/default/keymap.c
Normal file
@ -0,0 +1,37 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[0] = LAYOUT_all(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
[2] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
[3] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
};
|
37
keyboards/wilba_tech/wt80_bc/keymaps/via/keymap.c
Normal file
37
keyboards/wilba_tech/wt80_bc/keymaps/via/keymap.c
Normal file
@ -0,0 +1,37 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[0] = LAYOUT_all(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
[2] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
[3] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
};
|
1
keyboards/wilba_tech/wt80_bc/keymaps/via/rules.mk
Normal file
1
keyboards/wilba_tech/wt80_bc/keymaps/via/rules.mk
Normal file
@ -0,0 +1 @@
|
||||
VIA_ENABLE = yes
|
13
keyboards/wilba_tech/wt80_bc/readme.md
Normal file
13
keyboards/wilba_tech/wt80_bc/readme.md
Normal file
@ -0,0 +1,13 @@
|
||||
# wilba.tech WT80-BC
|
||||
|
||||
WT80-BC is a keyboard PCB supporting TKL layout with 0.25U gaps. [More info at wilba.tech](https://wilba.tech/)
|
||||
|
||||
Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
|
||||
Hardware Supported: wilba.tech WT80-BC
|
||||
Hardware Availability: Custom keyboard group buys
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make wilba_tech/wt80_bc:default
|
||||
|
||||
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
34
keyboards/wilba_tech/wt80_bc/rules.mk
Normal file
34
keyboards/wilba_tech/wt80_bc/rules.mk
Normal file
@ -0,0 +1,34 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||
MOUSEKEY_ENABLE = no # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||
MIDI_ENABLE = no # MIDI support
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
|
||||
# project specific files
|
||||
SRC = keyboards/wilba_tech/wt_main.c
|
17
keyboards/wilba_tech/wt80_bc/wt80_bc.c
Normal file
17
keyboards/wilba_tech/wt80_bc/wt80_bc.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* Copyright 2020 Jason Williams (Wilba)
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
// Nothing to see here, move along... ;-)
|
38
keyboards/wilba_tech/wt80_bc/wt80_bc.h
Normal file
38
keyboards/wilba_tech/wt80_bc/wt80_bc.h
Normal file
@ -0,0 +1,38 @@
|
||||
/* Copyright 2020 Jason Williams (Wilba)
|
||||
*
|
||||
* 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 "quantum.h"
|
||||
|
||||
#define ____ KC_NO
|
||||
|
||||
|
||||
#define LAYOUT_all( \
|
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
|
||||
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
|
||||
K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K415, \
|
||||
K500, K501, K502, K507, K511, K512, K513, K514, K515, K516 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \
|
||||
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
|
||||
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, ____, ____, ____, ____ }, \
|
||||
{ K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, ____, ____, K415, ____ }, \
|
||||
{ K500, K501, K502, ____, ____, ____, ____, K507, ____, ____, ____, K511, K512, K513, K514, K515, K516 } \
|
||||
}
|
@ -10,11 +10,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Basic layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | Grv | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | BkSp |
|
||||
* | Sleep | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | BkSp |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
|
||||
* | Esc | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||
* |Ctrl/Esc| A | S/Sft| D/Ctl| F/Alt| G |------| |------| H | J/Alt| K/Ctl| L/Sft| ; | ' |
|
||||
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
@ -32,21 +32,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// Otherwise, it needs KC_*
|
||||
[BASE] = LAYOUT_ergodox( // layer 0 : default
|
||||
// left hand
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS,
|
||||
CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||
MO(SYMB), KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||
KC_SLEP, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC,
|
||||
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS,
|
||||
CTL_T(KC_ESC), KC_A, LSFT_T(KC_S), LCTL_T(KC_D), LALT_T(KC_F), KC_G,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||
MO(SYMB), KC_LALT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
|
||||
|
||||
ALT_T(KC_APP), KC_HOME,
|
||||
ALT_T(KC_APP), KC_HOME,
|
||||
KC_END,
|
||||
KC_SPC,KC_LGUI,MO(MDIA),
|
||||
// right hand
|
||||
KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_UP, KC_DOWN,RALT(KC_RSFT), KC_RALT, MO(SYMB),
|
||||
KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, RALT_T(KC_J), RCTL_T(KC_K), RSFT_T(KC_L), KC_SCLN, KC_QUOT,
|
||||
MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_UP, KC_DOWN, RALT(KC_RSFT), KC_RALT, MO(SYMB),
|
||||
|
||||
KC_PGUP, CTL_T(KC_ESC),
|
||||
KC_PGDN,
|
||||
|
@ -1,8 +1,8 @@
|
||||
# J3RN's Mac-Centric ErgoDox EZ keymap
|
||||
# J3RN's ErgoDox EZ keymap
|
||||
|
||||
## Motivation
|
||||
|
||||
Essentially, I wanted to switch to a layout that was less jarring than the default ErgoDox EZ layout, and did not require finger gymnastics to perform common OS X shortcuts (most of which involve the CMD (LGui) key).
|
||||
I wanted a layout that was gave easy access to the CMD (LGui) key, and did not require finger gymnastics to use my beloved Emacs shortcuts.
|
||||
|
||||
## How is it different from the default ErgoDox EZ default_osx layout?
|
||||
|
||||
@ -10,24 +10,28 @@ This layout more closely resembles that of the Mac keyboard, and has some other
|
||||
|
||||
### Mac-like changes
|
||||
|
||||
- **The key to the left of "1" is "~" instead of "=".**
|
||||
- **The key to the right of "0" is Backspace instead of "-"** (misleadingly labeled "delete" on the Mac's keyboard). There was no room to fit in "-" and "=" between "0" and Backspace, unfortunately.
|
||||
- **The key to the left of "Q" is Tab instead of Delete.**
|
||||
- **The rightmost big key on the left thumb is CMD (LGui) instead of Backspace.**
|
||||
- **The key to the left of Alt-Shift is an Alt key**. This is close to it's position on the Mac keyboard, though slightly further left.
|
||||
|
||||
### Emacs changes
|
||||
- **Holding "S" sends "left shift," holding "D" sends "left control," and holding "F" sends "left alt." This is mirrored on the right side with "J," "K," and "L."** This should make it easy to use those crazy Escape-Meta-Alt-Control-Shift bindings.
|
||||
|
||||
### Other changes
|
||||
|
||||
- **The button in the top-left is "Sleep."** Before macOS High Sierra, the power button was part of the key combination for triggering sleep. Since there's no power key in my layout, I was unable to sleep my laptop with this keyboard. By adding a dedicated sleep key, I fixed this. Now I just need a cool moon keycap for that key.
|
||||
- **The middle-most big key on the right thumb is "Tab."** I use tab *a lot*, so I decided to make it incredibly convenient.
|
||||
- **The button to the left of "Q" is Esc.** There is no functional reason for this other than to train me to use the tab under my right thumb.
|
||||
- **The button to the left of "A" is Ctrl/Esc instead of Backspace.** This is actually how I have the keyboard on my Macbook set up to be, since it's loads more convenient than a CAPS LOCK key. This is the Ctrl key I find myself using most.
|
||||
- **Mouse uses Vim-style navigation**. This allows you to move the mouse around with hjkl just like in Vim. Additionally, right and left click are the conveniently placed 'i' and 'o' keys.
|
||||
- **The key to the right of "5" and the key to left of "6" are "[" and "]", respectively, instead of Left and Right.** There is a more convenient set of Left and Right already present. Truth be told, I don't really use these keys, as they are a stretch to reach.
|
||||
- **The Toggle L1 keys in the center of the keyboard have been replaced by the otherwise displaced "-" and "=".** They are laid out, left-to-right, in the same order as on the Mac keyboard. Honestly, they are not terribly conveniently placed, and their placement might change in a later version. I found that the ~L1 would be better situated elsewhere.
|
||||
- **The "~" key in the extreme bottom-left is now just momentary L1.** The "~" key was moved to the top-left as mentioned before, and I like to keep my multi-use keys to a minimum due to the latency for them to switch from "press" to "hold."
|
||||
- **The "~" key in the extreme bottom-left is now just momentary L1.** I go to L1 (the symbol layer) to get to "~".
|
||||
- **The Home and End buttons have been shifted up on the left thumb, and ~L2 inserted below them.** Nearly all of my media layer changes are on the right side, so the ~L2 key is on the left side.
|
||||
- **The Page Up and Page Down buttons have been shifted up on the right thumb, and ~L1 inserted below them.** I don't use either of the "Page" keys often, and use this ~L1 more than any other.
|
||||
- **Traditional numpad layout.** The base of most numpads is a double-wide "0" key to the left of a "." key. This is reflected in my layout by having two "0" keys to the left of a "." key.
|
||||
- **The function keys (F1-F12) have been moved to L2.** They were in the way in L1.
|
||||
- **⏯ lives on ',' in the media layer, between ⏪ on 'm' and ⏩ on '.'.** This is the way they are laid out on the mac keyboard, and makes the most sense to me.
|
||||
- **The keys on the bottom-right that were formerly "[" and "]" are now Alt-Shift and Alt, respectively.** This enables me to do those `C-M-<key>` bindings in emacs. I use L1 for "[" and "]".
|
||||
- **The keys on the bottom-right that were formerly "[" and "]" are now Alt-Shift and Alt, respectively.** This was originally for convenience with Emacs bindings, but since I've moved the modifiers to the home row the only purpose for this change is that the symmetry makes me happy.
|
||||
|
||||
**I'm always open to feedback and/or suggestions!**
|
||||
|
@ -14,7 +14,7 @@ class KLE2xy(list):
|
||||
self.name = name
|
||||
self.invert_y = invert_y
|
||||
self.key_width = Decimal('19.05')
|
||||
self.key_skel = {'decal': False, 'border_color': 'none', 'keycap_profile': '', 'keycap_color': 'grey', 'label_color': 'black', 'label_size': 3, 'label_style': 4, 'width': Decimal('1'), 'height': Decimal('1'), 'x': Decimal('0'), 'y': Decimal('0')}
|
||||
self.key_skel = {'decal': False, 'border_color': 'none', 'keycap_profile': '', 'keycap_color': 'grey', 'label_color': 'black', 'label_size': 3, 'label_style': 4, 'width': Decimal('1'), 'height': Decimal('1')}
|
||||
self.rows = Decimal(0)
|
||||
self.columns = Decimal(0)
|
||||
|
||||
@ -55,8 +55,6 @@ class KLE2xy(list):
|
||||
current_key = self.key_skel.copy()
|
||||
current_row = Decimal(0)
|
||||
current_col = Decimal(0)
|
||||
current_x = 0
|
||||
current_y = self.key_width / 2
|
||||
|
||||
if isinstance(layout[0], dict):
|
||||
self.attrs(layout[0])
|
||||
@ -76,18 +74,9 @@ class KLE2xy(list):
|
||||
if 'h' in key and key['h'] != Decimal(1):
|
||||
current_key['height'] = Decimal(key['h'])
|
||||
if 'a' in key:
|
||||
current_key['label_style'] = self.key_skel['label_style'] = int(key['a'])
|
||||
if current_key['label_style'] < 0:
|
||||
current_key['label_style'] = 0
|
||||
elif current_key['label_style'] > 9:
|
||||
current_key['label_style'] = 9
|
||||
current_key['label_style'] = self.key_skel['label_style'] = max(min(int(key['a']), 9), 0)
|
||||
if 'f' in key:
|
||||
font_size = int(key['f'])
|
||||
if font_size > 9:
|
||||
font_size = 9
|
||||
elif font_size < 1:
|
||||
font_size = 1
|
||||
current_key['label_size'] = self.key_skel['label_size'] = font_size
|
||||
current_key['label_size'] = self.key_skel['label_size'] = max(min(int(key['f']), 9), 1)
|
||||
if 'p' in key:
|
||||
current_key['keycap_profile'] = self.key_skel['keycap_profile'] = key['p']
|
||||
if 'c' in key:
|
||||
@ -101,10 +90,8 @@ class KLE2xy(list):
|
||||
current_key['label_color'] = self.key_skel['label_color'] = key['t']
|
||||
if 'x' in key:
|
||||
current_col += Decimal(key['x'])
|
||||
current_x += Decimal(key['x']) * self.key_width
|
||||
if 'y' in key:
|
||||
current_row += Decimal(key['y'])
|
||||
current_y += Decimal(key['y']) * self.key_width
|
||||
if 'd' in key:
|
||||
current_key['decal'] = True
|
||||
|
||||
@ -113,16 +100,11 @@ class KLE2xy(list):
|
||||
current_key['row'] = round(current_row, 2)
|
||||
current_key['column'] = round(current_col, 2)
|
||||
|
||||
# Determine the X center
|
||||
x_center = (current_key['width'] * self.key_width) / 2
|
||||
current_x += x_center
|
||||
current_key['x'] = current_x
|
||||
current_x += x_center
|
||||
|
||||
# Determine the Y center
|
||||
y_center = (current_key['height'] * self.key_width) / 2
|
||||
y_offset = y_center - (self.key_width / 2)
|
||||
current_key['y'] = (current_y + y_offset)
|
||||
# x,y (units mm) is the center of the key
|
||||
x_center = current_col + current_key['width'] / 2
|
||||
y_center = current_row + current_key['height'] / 2
|
||||
current_key['x'] = x_center * self.key_width
|
||||
current_key['y'] = y_center * self.key_width
|
||||
|
||||
# Tend to our row/col count
|
||||
current_col += current_key['width']
|
||||
@ -138,8 +120,6 @@ class KLE2xy(list):
|
||||
current_key = self.key_skel.copy()
|
||||
|
||||
# Move to the next row
|
||||
current_x = 0
|
||||
current_y += self.key_width
|
||||
current_col = Decimal(0)
|
||||
current_row += Decimal(1)
|
||||
if current_row > self.rows:
|
||||
|
@ -794,6 +794,7 @@ enum quantum_keycodes {
|
||||
# define SH_T(kc) (QK_SWAP_HANDS | (kc))
|
||||
# define SH_TG (QK_SWAP_HANDS | OP_SH_TOGGLE)
|
||||
# define SH_TT (QK_SWAP_HANDS | OP_SH_TAP_TOGGLE)
|
||||
# define SH_OS (QK_SWAP_HANDS | OP_SH_ONESHOT)
|
||||
# define SH_MON (QK_SWAP_HANDS | OP_SH_ON_OFF)
|
||||
# define SH_MOFF (QK_SWAP_HANDS | OP_SH_OFF_ON)
|
||||
# define SH_ON (QK_SWAP_HANDS | OP_SH_ON)
|
||||
|
@ -98,6 +98,11 @@ void action_exec(keyevent_t event) {
|
||||
if (has_oneshot_mods_timed_out()) {
|
||||
clear_oneshot_mods();
|
||||
}
|
||||
# ifdef SWAP_HANDS_ENABLE
|
||||
if (has_oneshot_swaphands_timed_out()) {
|
||||
clear_oneshot_swaphands();
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@ -165,6 +170,8 @@ void process_record_tap_hint(keyrecord_t *record) {
|
||||
# ifdef SWAP_HANDS_ENABLE
|
||||
case ACT_SWAP_HANDS:
|
||||
switch (action.swap.code) {
|
||||
case OP_SH_ONESHOT:
|
||||
break;
|
||||
case OP_SH_TAP_TOGGLE:
|
||||
default:
|
||||
swap_hands = !swap_hands;
|
||||
@ -224,7 +231,11 @@ void process_action(keyrecord_t *record, action_t action) {
|
||||
#ifndef NO_ACTION_ONESHOT
|
||||
bool do_release_oneshot = false;
|
||||
// notice we only clear the one shot layer if the pressed key is not a modifier.
|
||||
if (is_oneshot_layer_active() && event.pressed && !IS_MOD(action.key.code)) {
|
||||
if (is_oneshot_layer_active() && event.pressed && !IS_MOD(action.key.code)
|
||||
# ifdef SWAP_HANDS_ENABLE
|
||||
&& !(action.kind.id == ACT_SWAP_HANDS && action.swap.code == OP_SH_ONESHOT)
|
||||
# endif
|
||||
) {
|
||||
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
|
||||
do_release_oneshot = !is_oneshot_layer_active();
|
||||
}
|
||||
@ -593,6 +604,14 @@ void process_action(keyrecord_t *record, action_t action) {
|
||||
swap_hands = false;
|
||||
}
|
||||
break;
|
||||
case OP_SH_ONESHOT:
|
||||
if (event.pressed) {
|
||||
set_oneshot_swaphands();
|
||||
} else {
|
||||
release_oneshot_swaphands();
|
||||
}
|
||||
break;
|
||||
|
||||
# ifndef NO_ACTION_TAPPING
|
||||
case OP_SH_TAP_TOGGLE:
|
||||
/* tap toggle */
|
||||
@ -681,6 +700,12 @@ void process_action(keyrecord_t *record, action_t action) {
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef SWAP_HANDS_ENABLE
|
||||
if (event.pressed && !(action.kind.id == ACT_SWAP_HANDS && action.swap.code == OP_SH_ONESHOT)) {
|
||||
use_oneshot_swaphands();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef NO_ACTION_ONESHOT
|
||||
/* Because we switch layers after a oneshot event, we need to release the
|
||||
* key before we leave the layer or no key up event will be generated.
|
||||
|
@ -294,11 +294,13 @@ enum swap_hands_param_tap_op {
|
||||
OP_SH_OFF_ON,
|
||||
OP_SH_OFF,
|
||||
OP_SH_ON,
|
||||
OP_SH_ONESHOT,
|
||||
};
|
||||
|
||||
#define ACTION_SWAP_HANDS() ACTION_SWAP_HANDS_ON_OFF()
|
||||
#define ACTION_SWAP_HANDS_TOGGLE() ACTION(ACT_SWAP_HANDS, OP_SH_TOGGLE)
|
||||
#define ACTION_SWAP_HANDS_TAP_TOGGLE() ACTION(ACT_SWAP_HANDS, OP_SH_TAP_TOGGLE)
|
||||
#define ACTION_SWAP_HANDS_ONESHOT() ACTION(ACT_SWAP_HANDS, OP_SH_ONESHOT)
|
||||
#define ACTION_SWAP_HANDS_TAP_KEY(key) ACTION(ACT_SWAP_HANDS, key)
|
||||
#define ACTION_SWAP_HANDS_ON_OFF() ACTION(ACT_SWAP_HANDS, OP_SH_ON_OFF)
|
||||
#define ACTION_SWAP_HANDS_OFF_ON() ACTION(ACT_SWAP_HANDS, OP_SH_OFF_ON)
|
||||
|
@ -83,9 +83,63 @@ static int8_t oneshot_layer_data = 0;
|
||||
inline uint8_t get_oneshot_layer(void) { return oneshot_layer_data >> 3; }
|
||||
inline uint8_t get_oneshot_layer_state(void) { return oneshot_layer_data & 0b111; }
|
||||
|
||||
# ifdef SWAP_HANDS_ENABLE
|
||||
enum {
|
||||
SHO_OFF,
|
||||
SHO_ACTIVE, // Swap hands button was pressed, and we didn't send any swapped keys yet
|
||||
SHO_PRESSED, // Swap hands button is currently pressed
|
||||
SHO_USED, // Swap hands button is still pressed, and we already sent swapped keys
|
||||
} swap_hands_oneshot = SHO_OFF;
|
||||
# endif
|
||||
|
||||
# if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
|
||||
static uint16_t oneshot_layer_time = 0;
|
||||
inline bool has_oneshot_layer_timed_out() { return TIMER_DIFF_16(timer_read(), oneshot_layer_time) >= ONESHOT_TIMEOUT && !(get_oneshot_layer_state() & ONESHOT_TOGGLED); }
|
||||
# ifdef SWAP_HANDS_ENABLE
|
||||
static uint16_t oneshot_swaphands_time = 0;
|
||||
inline bool has_oneshot_swaphands_timed_out() { return TIMER_DIFF_16(timer_read(), oneshot_swaphands_time) >= ONESHOT_TIMEOUT && !(swap_hands_oneshot >= SHO_PRESSED); }
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifdef SWAP_HANDS_ENABLE
|
||||
|
||||
void set_oneshot_swaphands(void) {
|
||||
swap_hands_oneshot = SHO_PRESSED;
|
||||
swap_hands = true;
|
||||
# if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
|
||||
oneshot_swaphands_time = timer_read();
|
||||
if (oneshot_layer_time != 0) {
|
||||
oneshot_layer_time = oneshot_swaphands_time;
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
void release_oneshot_swaphands(void) {
|
||||
if (swap_hands_oneshot == SHO_PRESSED) {
|
||||
swap_hands_oneshot = SHO_ACTIVE;
|
||||
}
|
||||
if (swap_hands_oneshot == SHO_USED) {
|
||||
clear_oneshot_swaphands();
|
||||
}
|
||||
}
|
||||
|
||||
void use_oneshot_swaphands(void) {
|
||||
if (swap_hands_oneshot == SHO_PRESSED) {
|
||||
swap_hands_oneshot = SHO_USED;
|
||||
}
|
||||
if (swap_hands_oneshot == SHO_ACTIVE) {
|
||||
clear_oneshot_swaphands();
|
||||
}
|
||||
}
|
||||
|
||||
void clear_oneshot_swaphands(void) {
|
||||
swap_hands_oneshot = SHO_OFF;
|
||||
swap_hands = false;
|
||||
# if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
|
||||
oneshot_swaphands_time = 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
# endif
|
||||
|
||||
/** \brief Set oneshot layer
|
||||
|
@ -77,6 +77,7 @@ void reset_oneshot_layer(void);
|
||||
bool is_oneshot_layer_active(void);
|
||||
uint8_t get_oneshot_layer_state(void);
|
||||
bool has_oneshot_layer_timed_out(void);
|
||||
bool has_oneshot_swaphands_timed_out(void);
|
||||
|
||||
void oneshot_locked_mods_changed_user(uint8_t mods);
|
||||
void oneshot_locked_mods_changed_kb(uint8_t mods);
|
||||
@ -88,6 +89,13 @@ void oneshot_layer_changed_kb(uint8_t layer);
|
||||
/* inspect */
|
||||
uint8_t has_anymod(void);
|
||||
|
||||
#ifdef SWAP_HANDS_ENABLE
|
||||
void set_oneshot_swaphands(void);
|
||||
void release_oneshot_swaphands(void);
|
||||
void use_oneshot_swaphands(void);
|
||||
void clear_oneshot_swaphands(void);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -43,12 +43,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
enum usb_interfaces {
|
||||
KEYBOARD_INTERFACE = NEXT_INTERFACE,
|
||||
#if (defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE))
|
||||
MOUSE_EXTRA_INTERFACE = NEXT_INTERFACE,
|
||||
#endif
|
||||
// It is important that the Raw HID interface is at a constant
|
||||
// interface number, to support Linux/OSX platforms and chrome.hid
|
||||
// If Raw HID is enabled, let it be always 1.
|
||||
#ifdef RAW_ENABLE
|
||||
RAW_INTERFACE = NEXT_INTERFACE,
|
||||
#endif
|
||||
#if (defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE))
|
||||
MOUSE_EXTRA_INTERFACE = NEXT_INTERFACE,
|
||||
#endif
|
||||
#ifdef CONSOLE_ENABLE
|
||||
CONSOLE_INTERFACE = NEXT_INTERFACE,
|
||||
#endif
|
||||
@ -404,6 +407,29 @@ const PROGMEM uchar keyboard_hid_report[] = {
|
||||
0xC0 // End Collection
|
||||
};
|
||||
|
||||
#ifdef RAW_ENABLE
|
||||
const PROGMEM uchar raw_hid_report[] = {
|
||||
0x06, 0x60, 0xFF, // Usage Page (Vendor Defined)
|
||||
0x09, 0x61, // Usage (Vendor Defined)
|
||||
0xA1, 0x01, // Collection (Application)
|
||||
// Data to host
|
||||
0x09, 0x62, // Usage (Vendor Defined)
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x26, 0xFF, 0x00, // Logical Maximum (255)
|
||||
0x95, RAW_BUFFER_SIZE, // Report Count
|
||||
0x75, 0x08, // Report Size (8)
|
||||
0x81, 0x02, // Input (Data, Variable, Absolute)
|
||||
// Data from host
|
||||
0x09, 0x63, // Usage (Vendor Defined)
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x26, 0xFF, 0x00, // Logical Maximum (255)
|
||||
0x95, RAW_BUFFER_SIZE, // Report Count
|
||||
0x75, 0x08, // Report Size (8)
|
||||
0x91, 0x02, // Output (Data, Variable, Absolute)
|
||||
0xC0 // End Collection
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
const PROGMEM uchar mouse_extra_hid_report[] = {
|
||||
# ifdef MOUSE_ENABLE
|
||||
@ -488,29 +514,6 @@ const PROGMEM uchar mouse_extra_hid_report[] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef RAW_ENABLE
|
||||
const PROGMEM uchar raw_hid_report[] = {
|
||||
0x06, 0x60, 0xFF, // Usage Page (Vendor Defined)
|
||||
0x09, 0x61, // Usage (Vendor Defined)
|
||||
0xA1, 0x01, // Collection (Application)
|
||||
// Data to host
|
||||
0x09, 0x62, // Usage (Vendor Defined)
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x26, 0xFF, 0x00, // Logical Maximum (255)
|
||||
0x95, RAW_BUFFER_SIZE, // Report Count
|
||||
0x75, 0x08, // Report Size (8)
|
||||
0x81, 0x02, // Input (Data, Variable, Absolute)
|
||||
// Data from host
|
||||
0x09, 0x63, // Usage (Vendor Defined)
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x26, 0xFF, 0x00, // Logical Maximum (255)
|
||||
0x95, RAW_BUFFER_SIZE, // Report Count
|
||||
0x75, 0x08, // Report Size (8)
|
||||
0x91, 0x02, // Output (Data, Variable, Absolute)
|
||||
0xC0 // End Collection
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONSOLE_ENABLE)
|
||||
const PROGMEM uchar console_hid_report[] = {
|
||||
0x06, 0x31, 0xFF, // Usage Page (Vendor Defined - PJRC Teensy compatible)
|
||||
@ -657,46 +660,10 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
|
||||
.bInterval = USB_POLLING_INTERVAL_MS
|
||||
},
|
||||
|
||||
# if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
/*
|
||||
* Mouse/Extrakeys
|
||||
*/
|
||||
.mouseExtraInterface = {
|
||||
.header = {
|
||||
.bLength = sizeof(usbInterfaceDescriptor_t),
|
||||
.bDescriptorType = USBDESCR_INTERFACE
|
||||
},
|
||||
.bInterfaceNumber = MOUSE_EXTRA_INTERFACE,
|
||||
.bAlternateSetting = 0x00,
|
||||
.bNumEndpoints = 1,
|
||||
.bInterfaceClass = 0x03,
|
||||
.bInterfaceSubClass = 0x00,
|
||||
.bInterfaceProtocol = 0x00,
|
||||
.iInterface = 0x00
|
||||
},
|
||||
.mouseExtraHID = {
|
||||
.header = {
|
||||
.bLength = sizeof(usbHIDDescriptor_t),
|
||||
.bDescriptorType = USBDESCR_HID
|
||||
},
|
||||
.bcdHID = 0x0101,
|
||||
.bCountryCode = 0x00,
|
||||
.bNumDescriptors = 1,
|
||||
.bDescriptorType = USBDESCR_HID_REPORT,
|
||||
.wDescriptorLength = sizeof(mouse_extra_hid_report)
|
||||
},
|
||||
.mouseExtraINEndpoint = {
|
||||
.header = {
|
||||
.bLength = sizeof(usbEndpointDescriptor_t),
|
||||
.bDescriptorType = USBDESCR_ENDPOINT
|
||||
},
|
||||
.bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP3_NUMBER),
|
||||
.bmAttributes = 0x03,
|
||||
.wMaxPacketSize = 8,
|
||||
.bInterval = USB_POLLING_INTERVAL_MS
|
||||
},
|
||||
# endif
|
||||
# if defined(RAW_ENABLE)
|
||||
/*
|
||||
* RAW HID
|
||||
*/
|
||||
.rawInterface = {
|
||||
.header = {
|
||||
.bLength = sizeof(usbInterfaceDescriptor_t),
|
||||
@ -742,6 +709,45 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
|
||||
.bInterval = USB_POLLING_INTERVAL_MS
|
||||
},
|
||||
# endif
|
||||
# if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
/*
|
||||
* Mouse/Extrakeys
|
||||
*/
|
||||
.mouseExtraInterface = {
|
||||
.header = {
|
||||
.bLength = sizeof(usbInterfaceDescriptor_t),
|
||||
.bDescriptorType = USBDESCR_INTERFACE
|
||||
},
|
||||
.bInterfaceNumber = MOUSE_EXTRA_INTERFACE,
|
||||
.bAlternateSetting = 0x00,
|
||||
.bNumEndpoints = 1,
|
||||
.bInterfaceClass = 0x03,
|
||||
.bInterfaceSubClass = 0x00,
|
||||
.bInterfaceProtocol = 0x00,
|
||||
.iInterface = 0x00
|
||||
},
|
||||
.mouseExtraHID = {
|
||||
.header = {
|
||||
.bLength = sizeof(usbHIDDescriptor_t),
|
||||
.bDescriptorType = USBDESCR_HID
|
||||
},
|
||||
.bcdHID = 0x0101,
|
||||
.bCountryCode = 0x00,
|
||||
.bNumDescriptors = 1,
|
||||
.bDescriptorType = USBDESCR_HID_REPORT,
|
||||
.wDescriptorLength = sizeof(mouse_extra_hid_report)
|
||||
},
|
||||
.mouseExtraINEndpoint = {
|
||||
.header = {
|
||||
.bLength = sizeof(usbEndpointDescriptor_t),
|
||||
.bDescriptorType = USBDESCR_ENDPOINT
|
||||
},
|
||||
.bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP3_NUMBER),
|
||||
.bmAttributes = 0x03,
|
||||
.wMaxPacketSize = 8,
|
||||
.bInterval = USB_POLLING_INTERVAL_MS
|
||||
},
|
||||
# endif
|
||||
# if defined(CONSOLE_ENABLE)
|
||||
/*
|
||||
* Console
|
||||
@ -841,18 +847,18 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
|
||||
usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.keyboardHID;
|
||||
len = sizeof(usbHIDDescriptor_t);
|
||||
break;
|
||||
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
case MOUSE_EXTRA_INTERFACE:
|
||||
usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.mouseExtraHID;
|
||||
len = sizeof(usbHIDDescriptor_t);
|
||||
break;
|
||||
#endif
|
||||
#if defined(RAW_ENABLE)
|
||||
case RAW_INTERFACE:
|
||||
usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.rawHID;
|
||||
len = sizeof(usbHIDDescriptor_t);
|
||||
break;
|
||||
#endif
|
||||
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
case MOUSE_EXTRA_INTERFACE:
|
||||
usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.mouseExtraHID;
|
||||
len = sizeof(usbHIDDescriptor_t);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CONSOLE_ENABLE)
|
||||
case CONSOLE_INTERFACE:
|
||||
usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.consoleHID;
|
||||
@ -868,18 +874,18 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
|
||||
usbMsgPtr = (unsigned char *)keyboard_hid_report;
|
||||
len = sizeof(keyboard_hid_report);
|
||||
break;
|
||||
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
case MOUSE_EXTRA_INTERFACE:
|
||||
usbMsgPtr = (unsigned char *)mouse_extra_hid_report;
|
||||
len = sizeof(mouse_extra_hid_report);
|
||||
break;
|
||||
#endif
|
||||
#if defined(RAW_ENABLE)
|
||||
case RAW_INTERFACE:
|
||||
usbMsgPtr = (unsigned char *)raw_hid_report;
|
||||
len = sizeof(raw_hid_report);
|
||||
break;
|
||||
#endif
|
||||
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
case MOUSE_EXTRA_INTERFACE:
|
||||
usbMsgPtr = (unsigned char *)mouse_extra_hid_report;
|
||||
len = sizeof(mouse_extra_hid_report);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CONSOLE_ENABLE)
|
||||
case CONSOLE_INTERFACE:
|
||||
usbMsgPtr = (unsigned char *)console_hid_report;
|
||||
|
@ -89,12 +89,6 @@ typedef struct usbConfigurationDescriptor {
|
||||
usbHIDDescriptor_t keyboardHID;
|
||||
usbEndpointDescriptor_t keyboardINEndpoint;
|
||||
|
||||
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
usbInterfaceDescriptor_t mouseExtraInterface;
|
||||
usbHIDDescriptor_t mouseExtraHID;
|
||||
usbEndpointDescriptor_t mouseExtraINEndpoint;
|
||||
#endif
|
||||
|
||||
#if defined(RAW_ENABLE)
|
||||
usbInterfaceDescriptor_t rawInterface;
|
||||
usbHIDDescriptor_t rawHID;
|
||||
@ -102,6 +96,12 @@ typedef struct usbConfigurationDescriptor {
|
||||
usbEndpointDescriptor_t rawOUTEndpoint;
|
||||
#endif
|
||||
|
||||
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
||||
usbInterfaceDescriptor_t mouseExtraInterface;
|
||||
usbHIDDescriptor_t mouseExtraHID;
|
||||
usbEndpointDescriptor_t mouseExtraINEndpoint;
|
||||
#endif
|
||||
|
||||
#if defined(CONSOLE_ENABLE)
|
||||
usbInterfaceDescriptor_t consoleInterface;
|
||||
usbHIDDescriptor_t consoleHID;
|
||||
|
@ -56,12 +56,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (!record->event.pressed) {
|
||||
uint8_t mods = get_mods();
|
||||
clear_mods();
|
||||
send_string_with_delay_P(PSTR("qmk compile -kb " QMK_KEYBOARD " -km " QMK_KEYMAP "\n"), 10); //New way
|
||||
if (mods & MOD_MASK_SHIFT) {
|
||||
send_string(SS_LGUI());
|
||||
send_string("qmk toolbox\n");
|
||||
send_string_with_delay_P(PSTR("qmk flash -kb " QMK_KEYBOARD " -km " QMK_KEYMAP "\n"), 10); //New way
|
||||
reset_keyboard();
|
||||
}
|
||||
else
|
||||
send_string_with_delay_P(PSTR("qmk compile -kb " QMK_KEYBOARD " -km " QMK_KEYMAP "\n"), 10); //New way
|
||||
set_mods(mods);
|
||||
}
|
||||
break;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user