Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f2ebafcee8 | ||
|
|
595f3cbe5b | ||
|
|
f1513c3ad2 | ||
|
|
bd874b9577 | ||
|
|
9fc7bb1f6a | ||
|
|
573e1c09e7 | ||
|
|
4deb5de438 | ||
|
|
b6c5c4cf52 | ||
|
|
e0d467dbab | ||
|
|
449736c06d | ||
|
|
07e0558e9a | ||
|
|
f2bf5a9a74 | ||
|
|
7a8c139d07 | ||
|
|
49892272a0 | ||
|
|
723d338c62 | ||
|
|
0fa192091c | ||
|
|
4b5dcda126 | ||
|
|
c531dfb6a7 | ||
|
|
4ac48a61a6 | ||
|
|
4df6b7ba19 | ||
|
|
56ed2d495d | ||
|
|
c14e297ad5 | ||
|
|
9ce35e823b | ||
|
|
1225120b92 | ||
|
|
f2bc70a264 | ||
|
|
4e41812a67 | ||
|
|
7e8d4be8ac | ||
|
|
b5d9bee969 | ||
|
|
1775a3075e | ||
|
|
095b28e006 | ||
|
|
8a27703ef4 | ||
|
|
006abbfd6f | ||
|
|
95e7e10061 | ||
|
|
87dc2efda8 | ||
|
|
ed99581161 | ||
|
|
83d33caf63 | ||
|
|
6834febece | ||
|
|
8def9bc642 | ||
|
|
3fc5a05d66 | ||
|
|
1147fc24ad |
No files matched your search
@@ -91,6 +91,8 @@ This is a C header file that is one of the first things included, and will persi
|
|||||||
* key combination that allows the use of magic commands (useful for debugging)
|
* key combination that allows the use of magic commands (useful for debugging)
|
||||||
* `#define USB_MAX_POWER_CONSUMPTION`
|
* `#define USB_MAX_POWER_CONSUMPTION`
|
||||||
* sets the maximum power (in mA) over USB for the device (default: 500)
|
* sets the maximum power (in mA) over USB for the device (default: 500)
|
||||||
|
* `#define SCL_CLOCK 100000L`
|
||||||
|
* sets the SCL_CLOCK speed for split keyboards. The default is `100000L` but some boards can be set to `400000L`.
|
||||||
|
|
||||||
## Features That Can Be Disabled
|
## Features That Can Be Disabled
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac
|
|||||||
|
|
||||||
?> Due to the way that keycodes are structured, any modifiers specified as part of `kc`, such as `LCTL()` or `KC_LPRN`, will only activate when held instead of tapped.
|
?> Due to the way that keycodes are structured, any modifiers specified as part of `kc`, such as `LCTL()` or `KC_LPRN`, will only activate when held instead of tapped.
|
||||||
|
|
||||||
?> Additionally, if there is at least one right modifier, any other modifiers will turn into their right equivalents, so it is not possible to "mix and match" the two.
|
?> Additionally, if there is at least one right-handed modifier, any other modifiers in a chain of functions will turn into their right-handed equivalents, so it is not possible to "mix and match" the two.
|
||||||
|
|
||||||
# One Shot Keys
|
# One Shot Keys
|
||||||
|
|
||||||
|
|||||||
+86
-75
@@ -1,89 +1,100 @@
|
|||||||
# Bootmagic and Magic Keycodes
|
# Bootmagic
|
||||||
|
|
||||||
There are 3 separate but related features that allow you to change the behavior of your keyboard without reflashing. While each of them have similar functionality you access that functionality in different ways depending on how your keyboard is configured.
|
There are three separate but related features that allow you to change the behavior of your keyboard without reflashing. While each of them have similar functionality, it is accessed in different ways depending on how your keyboard is configured.
|
||||||
|
|
||||||
Bootmagic is a system for configuring your keyboard while it initializes. To trigger a Bootmagic command you hold down the bootmagic key (`KC_SPACE` on most keyboards) and one or more command keys.
|
**Bootmagic** is a system for configuring your keyboard while it initializes. To trigger a Bootmagic command, hold down the Bootmagic key and one or more command keys.
|
||||||
|
|
||||||
Bootmagic Keycodes allow you to access the Bootmagic functionality after your keyboard has initialized. To use Bootmagic Keycodes you assign keycodes starting with `MAGIC_`, much in the same way you define any other key.
|
**Bootmagic Keycodes** are prefixed with `MAGIC_`, and allow you to access the Bootmagic functionality *after* your keyboard has initialized. To use the keycodes, assign them to your keymap as you would any other keycode.
|
||||||
|
|
||||||
Command is a feature that allows you to control different aspects of your keyboard. Command used to be called Magic. Command is typically accessed by holding Left and Right Shift at the same time, although that can be customized. While it shares some functionality with Bootmagic it also allows you to access functionality that Bootmagic does not. For more information see the [Command](feature_command.md) documentation page.
|
**Command**, formerly known as **Magic**, is another feature that allows you to control different aspects of your keyboard. While it shares some functionality with Bootmagic, it also allows you to do things that Bootmagic does not, such as printing version information to the console. For more information, see [Command](feature_command.md).
|
||||||
|
|
||||||
## Enabling Bootmagic
|
On some keyboards Bootmagic is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk` with:
|
||||||
|
|
||||||
Bootmagic is disabled by default. To use Bootmagic you need to enable it in your `rules.mk` file:
|
```make
|
||||||
|
BOOTMAGIC_ENABLE = yes
|
||||||
|
```
|
||||||
|
|
||||||
BOOTMAGIC_ENABLE = yes
|
## Hotkeys
|
||||||
|
|
||||||
## Bootmagic Hotkeys and Keycodes
|
Hold down the Bootmagic key (Space by default) and the desired hotkey while plugging in your keyboard. For example, holding Space+`B` should cause it to enter the bootloader.
|
||||||
|
|
||||||
This table describes the default Hotkeys for Bootmagic and the Keycodes for Magic. These may be overriden at the Keyboard or Keymap level. Some functionality is not available in both methods.
|
|Hotkey |Description |
|
||||||
|
|------------------|---------------------------------------------|
|
||||||
|
|Escape |Ignore Bootmagic configuration in EEPROM |
|
||||||
|
|`B` |Enter the bootloader |
|
||||||
|
|`D` |Toggle debugging over serial |
|
||||||
|
|`X` |Toggle key matrix debugging |
|
||||||
|
|`K` |Toggle keyboard debugging |
|
||||||
|
|`M` |Toggle mouse debugging |
|
||||||
|
|Backspace |Clear the EEPROM |
|
||||||
|
|Caps Lock |Toggle treating Caps Lock as Left Control |
|
||||||
|
|Left Control |Toggle swapping Caps Lock and Left Control |
|
||||||
|
|Left Alt |Toggle swapping Left Alt and Left GUI |
|
||||||
|
|Right Alt |Toggle swapping Right Alt and Right GUI |
|
||||||
|
|Left GUI |Toggle the GUI keys (useful when gaming) |
|
||||||
|
|<code>`</code>|Toggle swapping <code>`</code> and Escape|
|
||||||
|
|`\` |Toggle swapping `\` and Backspace |
|
||||||
|
|`N` |Toggle N-Key Rollover (NKRO) |
|
||||||
|
|`0` |Make layer 0 the default layer |
|
||||||
|
|`1` |Make layer 1 the default layer |
|
||||||
|
|`2` |Make layer 2 the default layer |
|
||||||
|
|`3` |Make layer 3 the default layer |
|
||||||
|
|`4` |Make layer 4 the default layer |
|
||||||
|
|`5` |Make layer 5 the default layer |
|
||||||
|
|`6` |Make layer 6 the default layer |
|
||||||
|
|`7` |Make layer 7 the default layer |
|
||||||
|
|
||||||
To use the Hotkey hold down `BOOTMAGIC_KEY_SALT` (`KC_SPACE` by default) and the Hotkey while plugging in your keyboard. To use the Keycode assign that keycode to a layer. For example, if you hold down Space+B while plugging in most keyboards, you will enter bootloader mode.
|
## Keycodes
|
||||||
|
|
||||||
|Hotkey |Keycode |Description |
|
|Keycode |Aliases |Description |
|
||||||
|-----------|----------------------------------|--------------------------------------------------------|
|
|----------------------------------|---------|------------------------------------------|
|
||||||
|`ESC` | |Skip bootmagic and saved eeprom configuration |
|
|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Left Control |
|
||||||
|`B` |`RESET` |Enter bootloader instead of firmware |
|
|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Left Control |
|
||||||
|`D` |`DEBUG` |Enable debugging (writes messages to serial) |
|
|`MAGIC_HOST_NKRO` | |Force N-Key Rollover (NKRO) on |
|
||||||
|`X` | |Enable matrix debugging |
|
|`MAGIC_UNHOST_NKRO` | |Force NKRO off |
|
||||||
|`K` | |Enable keyboard debugging |
|
|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off |
|
||||||
|`M` | |Enable mouse debugging |
|
|`MAGIC_NO_GUI` | |Disable the GUI keys (useful when gaming) |
|
||||||
|`BACKSPACE`| |Clear the saved settings from flash |
|
|`MAGIC_UNNO_GUI` | |Enable the GUI keys |
|
||||||
|`CAPSLOCK` |`MAGIC_CAPSLOCK_TO_CONTROL` |Treat `Capslock` as `Control` |
|
|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides (for macOS)|
|
||||||
| |`MAGIC_UNCAPSLOCK_TO_CONTROL` |Stop treating CapsLock as Control |
|
|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Left Alt and Left GUI |
|
||||||
|`LCTRL` |`MAGIC_SWAP_CONTROL_CAPSLOCK` |Swap `Control` and `Capslock` |
|
|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace |
|
||||||
| |`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |Unswap Left Control and Caps Lock |
|
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace |
|
||||||
| |`MAGIC_SWAP_ALT_GUI` |Swap Alt and GUI on both sides |
|
|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Left Control and Caps Lock |
|
||||||
| |`MAGIC_UNSWAP_ALT_GUI` |Unswap Left Alt and GUI |
|
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Left Control and Caps Lock |
|
||||||
|`LALT` |`MAGIC_SWAP_LALT_LGUI` |Swap Left `Alt` and `GUI`, e.g. for OSX Opt and Cmd |
|
|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>`</code> and Escape |
|
||||||
| |`MAGIC_UNSWAP_LALT_LGUI` |Unswap Left Alt and GUI |
|
|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>`</code> and Escape |
|
||||||
|`RALT` |`MAGIC_SWAP_RALT_RGUI` |Swap Right `Alt` and `GUI` |
|
|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and Left GUI |
|
||||||
| |`MAGIC_UNSWAP_RALT_RGUI` |Unswap Right Alt and GUI |
|
|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and Left GUI |
|
||||||
|`LGUI` |`MAGIC_NO_GUI` |Disable GUI key - e.g. disable Windows key during gaming|
|
|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and Right GUI |
|
||||||
| |`MAGIC_UNNO_GUI` |Enable the GUI key |
|
|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and Right GUI |
|
||||||
|`GRAVE` |`MAGIC_SWAP_GRAVE_ESC` |Swap `\`~` and `ESC` |
|
|
||||||
| |`MAGIC_UNSWAP_GRAVE_ESC` |Unswap `\`~` and Escape |
|
|
||||||
|`BACKSLASH`|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |Swap Blackslash and Backspace |
|
|
||||||
| |`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|Unswap Backslash and Backspace |
|
|
||||||
|`N` |`MAGIC_HOST_NKRO` |Force N-Key Rollover (NKRO) on |
|
|
||||||
| |`MAGIC_UNHOST_NKRO` |Force NKRO off |
|
|
||||||
| |`MAGIC_TOGGLE_NKRO` |Toggle NKRO on or off |
|
|
||||||
|`0` |`DF(0)` |Make Layer 0 the default layer at bootup |
|
|
||||||
|`1` |`DF(1)` |Make Layer 1 the default layer at bootup |
|
|
||||||
|`2` |`DF(2)` |Make Layer 2 the default layer at bootup |
|
|
||||||
|`3` |`DF(3)` |Make Layer 3 the default layer at bootup |
|
|
||||||
|`4` |`DF(4)` |Make Layer 4 the default layer at bootup |
|
|
||||||
|`5` |`DF(5)` |Make Layer 5 the default layer at bootup |
|
|
||||||
|`6` |`DF(6)` |Make Layer 6 the default layer at bootup |
|
|
||||||
|`7` |`DF(7)` |Make Layer 7 the default layer at bootup |
|
|
||||||
|
|
||||||
## Bootmagic Configuration
|
## Configuration
|
||||||
|
|
||||||
When setting up your keyboard and/or keymap there are a number of `#define`s that control the behavior of Bootmagic. To use these put them in your `config.h`, either at the keyboard or keymap level.
|
If you would like to change the hotkey assignments for Bootmagic, `#define` these in your `config.h` at either the keyboard or keymap level.
|
||||||
|
|
||||||
|Define |Default|Description |
|
|Define |Default |Description |
|
||||||
|-------|-------|------------|
|
|----------------------------------------|-------------|---------------------------------------------------|
|
||||||
|`BOOTMAGIC_KEY_SALT`|`KC_SPACE`|The key to hold down to trigger Bootmagic during initialization.|
|
|`BOOTMAGIC_KEY_SALT` |`KC_SPACE` |The Bootmagic key |
|
||||||
|`BOOTMAGIC_KEY_SKIP`|`KC_ESC`|The Hotkey to ignore saved eeprom configuration.|
|
|`BOOTMAGIC_KEY_SKIP` |`KC_ESC` |Ignore Bootmagic configuration in EEPROM |
|
||||||
|`BOOTMAGIC_KEY_EEPROM_CLEAR`|`KC_BSPACE`|The hotkey to clear the saved eeprom configuration.|
|
|`BOOTMAGIC_KEY_EEPROM_CLEAR` |`KC_BSPACE` |Clear the EEPROM configuration |
|
||||||
|`BOOTMAGIC_KEY_BOOTLOADER`|`KC_B`|The hotkey to enter the bootloader.|
|
|`BOOTMAGIC_KEY_BOOTLOADER` |`KC_B` |Enter the bootloader |
|
||||||
|`BOOTMAGIC_KEY_DEBUG_ENABLE`|`KC_D`|The hotkey to enable debug mode.|
|
|`BOOTMAGIC_KEY_DEBUG_ENABLE` |`KC_D` |Toggle debugging over serial |
|
||||||
|`BOOTMAGIC_KEY_DEBUG_MATRIX`|`KC_X`|The hotkey to enable matrix debugging mode.|
|
|`BOOTMAGIC_KEY_DEBUG_MATRIX` |`KC_X` |Toggle matrix debugging |
|
||||||
|`BOOTMAGIC_KEY_DEBUG_KEYBOARD`|`KC_K`|The hotkey to enable keyboard debugging mode.|
|
|`BOOTMAGIC_KEY_DEBUG_KEYBOARD` |`KC_K` |Toggle keyboard debugging |
|
||||||
|`BOOTMAGIC_KEY_DEBUG_MOUSE`|`KC_M`|The hotkey to enable mouse debugging mode.|
|
|`BOOTMAGIC_KEY_DEBUG_MOUSE` |`KC_M` |Toggle mouse debugging |
|
||||||
|`BOOTMAGIC_KEY_SWAP_CONTROL_CAPSLOCK`|`KC_LCTRL`||
|
|`BOOTMAGIC_KEY_SWAP_CONTROL_CAPSLOCK` |`KC_LCTRL` |Swap Left Control and Caps Lock |
|
||||||
|`BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL`|`KC_CAPSLOCK`||
|
|`BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL` |`KC_CAPSLOCK`|Toggle treating Caps Lock as Left Control |
|
||||||
|`BOOTMAGIC_KEY_SWAP_LALT_LGUI`|`KC_LALT`||
|
|`BOOTMAGIC_KEY_SWAP_LALT_LGUI` |`KC_LALT` |Toggle swapping Left Alt and Left GUI (for macOS) |
|
||||||
|`BOOTMAGIC_KEY_SWAP_RALT_RGUI`|`KC_RALT`||
|
|`BOOTMAGIC_KEY_SWAP_RALT_RGUI` |`KC_RALT` |Toggle swapping Right Alt and Right GUI (for macOS)|
|
||||||
|`BOOTMAGIC_KEY_NO_GUI`|`KC_LGUI`||
|
|`BOOTMAGIC_KEY_NO_GUI` |`KC_LGUI` |Toggle the GUI keys (useful when gaming) |
|
||||||
|`BOOTMAGIC_KEY_SWAP_GRAVE_ESC`|`KC_GRAVE`||
|
|`BOOTMAGIC_KEY_SWAP_GRAVE_ESC` |`KC_GRAVE` |Toggle swapping <code>`</code> and Escape |
|
||||||
|`BOOTMAGIC_KEY_SWAP_BACKSLASH_BACKSPACE`|`KC_BSLASH`||
|
|`BOOTMAGIC_KEY_SWAP_BACKSLASH_BACKSPACE`|`KC_BSLASH` |Toggle swapping `\` and Backspace |
|
||||||
|`BOOTMAGIC_HOST_NKRO`|`KC_N`||
|
|`BOOTMAGIC_HOST_NKRO` |`KC_N` |Toggle N-Key Rollover (NKRO) |
|
||||||
|`BOOTMAGIC_KEY_DEFAULT_LAYER_0`|`KC_0`|Hotkey to set Layer 0 as the default layer|
|
|`BOOTMAGIC_KEY_DEFAULT_LAYER_0` |`KC_0` |Make layer 0 the default layer |
|
||||||
|`BOOTMAGIC_KEY_DEFAULT_LAYER_1`|`KC_1`|Hotkey to set Layer 1 as the default layer|
|
|`BOOTMAGIC_KEY_DEFAULT_LAYER_1` |`KC_1` |Make layer 1 the default layer |
|
||||||
|`BOOTMAGIC_KEY_DEFAULT_LAYER_2`|`KC_2`|Hotkey to set Layer 2 as the default layer|
|
|`BOOTMAGIC_KEY_DEFAULT_LAYER_2` |`KC_2` |Make layer 2 the default layer |
|
||||||
|`BOOTMAGIC_KEY_DEFAULT_LAYER_3`|`KC_3`|Hotkey to set Layer 3 as the default layer|
|
|`BOOTMAGIC_KEY_DEFAULT_LAYER_3` |`KC_3` |Make layer 3 the default layer |
|
||||||
|`BOOTMAGIC_KEY_DEFAULT_LAYER_4`|`KC_4`|Hotkey to set Layer 4 as the default layer|
|
|`BOOTMAGIC_KEY_DEFAULT_LAYER_4` |`KC_4` |Make layer 4 the default layer |
|
||||||
|`BOOTMAGIC_KEY_DEFAULT_LAYER_5`|`KC_5`|Hotkey to set Layer 5 as the default layer|
|
|`BOOTMAGIC_KEY_DEFAULT_LAYER_5` |`KC_5` |Make layer 5 the default layer |
|
||||||
|`BOOTMAGIC_KEY_DEFAULT_LAYER_6`|`KC_6`|Hotkey to set Layer 6 as the default layer|
|
|`BOOTMAGIC_KEY_DEFAULT_LAYER_6` |`KC_6` |Make layer 6 the default layer |
|
||||||
|`BOOTMAGIC_KEY_DEFAULT_LAYER_7`|`KC_7`|Hotkey to set Layer 7 as the default layer|
|
|`BOOTMAGIC_KEY_DEFAULT_LAYER_7` |`KC_7` |Make layer 7 the default layer |
|
||||||
+40
-42
@@ -1,52 +1,50 @@
|
|||||||
# Command (Formerly known as Magic)
|
# Command
|
||||||
|
|
||||||
Command is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic](feature_bootmagic.md). There is a lot of overlap between this functionality and the [Bootmagic Keycodes](feature_bootmagic.md). Whenever possible we encourage you to use that functionality instead of Command.
|
Command, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic](feature_bootmagic.md). There is a lot of overlap between this functionality and the [Bootmagic Keycodes](feature_bootmagic.md#keycodes). Wherever possible we encourage you to use that feature instead of Command.
|
||||||
|
|
||||||
## Enabling Command
|
On some keyboards Command is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk`:
|
||||||
|
|
||||||
By default Command is disabled. You can enable it in your `rules.mk` file:
|
```make
|
||||||
|
COMMAND_ENABLE = yes
|
||||||
COMMAND_ENABLE = yes
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use Command you hold down the key combination defined by `IS_COMMAND`. By default that combination is both shift keys. While holding the key combination press the key corresponding to the command you want.
|
To use Command, hold down the key combination defined by the `IS_COMMAND()` macro. By default this is Left Shift+Right Shift. Then, press the key corresponding to the command you want. For example, to output the current QMK version to the QMK Toolbox console, press Left Shift+Right Shift+`V`.
|
||||||
|
|
||||||
For example, to write the current QMK version to the QMK Toolbox console, you can press `Left Shift`+`Right Shift`+`V`.
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
The following values can be defined in `config.h` to control the behavior of Command.
|
If you would like to change the key assignments for Command, `#define` these in your `config.h` at either the keyboard or keymap level. All keycode assignments here must omit the `KC_` prefix.
|
||||||
|
|
||||||
|Define |Default | Description |
|
|Define |Default |Description |
|
||||||
|-------|--------|-------------|
|
|------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------|
|
||||||
|`IS_COMMAND()` |`(keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))`|Key combination to activate Command|
|
|`IS_COMMAND()` |`(keyboard_report->mods == (MOD_BIT(KC_LSHIFT) <code>|</code> MOD_BIT(KC_RSHIFT)))`|The key combination to activate Command |
|
||||||
|`MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS` |`true` |Do layer switching with Function row|
|
|`MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS` |`true` |Set default layer with the Function row |
|
||||||
|`MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS` |`true` |Do layer switching with number keys.|
|
|`MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS` |`true` |Set default layer with the number keys |
|
||||||
|`MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM`|`false` |Do layer switching with custom keys (`MAGIC_KEY_LAYER0..9` below.)|
|
|`MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM`|`false` |Set default layer with `MAGIC_KEY_LAYER0..9` |
|
||||||
|`MAGIC_KEY_HELP1` |`H` |Show help.|
|
|`MAGIC_KEY_DEBUG` |`D` |Toggle debugging over serial |
|
||||||
|`MAGIC_KEY_HELP2` |`SLASH` |Show help.|
|
|`MAGIC_KEY_DEBUG_MATRIX` |`X` |Toggle key matrix debugging |
|
||||||
|`MAGIC_KEY_DEBUG` |`D` |Turn on debug mode.|
|
|`MAGIC_KEY_DEBUG_KBD` |`K` |Toggle keyboard debugging |
|
||||||
|`MAGIC_KEY_DEBUG_MATRIX` |`X` |Turn on matrix debugging.|
|
|`MAGIC_KEY_DEBUG_MOUSE` |`M` |Toggle mouse debugging |
|
||||||
|`MAGIC_KEY_DEBUG_KBD` |`K` |Turn on keyboard debugging.|
|
|`MAGIC_KEY_CONSOLE` |`C` |Enable the Command console |
|
||||||
|`MAGIC_KEY_DEBUG_MOUSE` |`M` |Turn on mouse debugging.|
|
|`MAGIC_KEY_VERSION` |`V` |Print the running QMK version to the console |
|
||||||
|`MAGIC_KEY_VERSION` |`V` |Write the QMK version to the console|
|
|`MAGIC_KEY_STATUS` |`S` |Print the current keyboard status to the console|
|
||||||
|`MAGIC_KEY_STATUS` |`S` |Show the current keyboard status|
|
|`MAGIC_KEY_HELP1` |`H` |Print Command help to the console |
|
||||||
|`MAGIC_KEY_CONSOLE` |`C` |Enable the Command Console|
|
|`MAGIC_KEY_HELP2` |`SLASH` |Print Command help to the console (alternate) |
|
||||||
|`MAGIC_KEY_LAYER0_ALT1` |`ESC` |Alternate access to layer 0|
|
|`MAGIC_KEY_LAYER0` |`0` |Make layer 0 the default layer |
|
||||||
|`MAGIC_KEY_LAYER0_ALT2` |`GRAVE` |Alternate access to layer 0|
|
|`MAGIC_KEY_LAYER1` |`1` |Make layer 1 the default layer |
|
||||||
|`MAGIC_KEY_LAYER0` |`0` |Change default layer to 0|
|
|`MAGIC_KEY_LAYER2` |`2` |Make layer 2 the default layer |
|
||||||
|`MAGIC_KEY_LAYER1` |`1` |Change default layer to 1|
|
|`MAGIC_KEY_LAYER3` |`3` |Make layer 3 the default layer |
|
||||||
|`MAGIC_KEY_LAYER2` |`2` |Change default layer to 2|
|
|`MAGIC_KEY_LAYER4` |`4` |Make layer 4 the default layer |
|
||||||
|`MAGIC_KEY_LAYER3` |`3` |Change default layer to 3|
|
|`MAGIC_KEY_LAYER5` |`5` |Make layer 5 the default layer |
|
||||||
|`MAGIC_KEY_LAYER4` |`4` |Change default layer to 4|
|
|`MAGIC_KEY_LAYER6` |`6` |Make layer 6 the default layer |
|
||||||
|`MAGIC_KEY_LAYER5` |`5` |Change default layer to 5|
|
|`MAGIC_KEY_LAYER7` |`7` |Make layer 7 the default layer |
|
||||||
|`MAGIC_KEY_LAYER6` |`6` |Change default layer to 6|
|
|`MAGIC_KEY_LAYER8` |`8` |Make layer 8 the default layer |
|
||||||
|`MAGIC_KEY_LAYER7` |`7` |Change default layer to 7|
|
|`MAGIC_KEY_LAYER9` |`9` |Make layer 9 the default layer |
|
||||||
|`MAGIC_KEY_LAYER8` |`8` |Change default layer to 8|
|
|`MAGIC_KEY_LAYER0_ALT1` |`ESC` |Make layer 0 the default layer (alternate) |
|
||||||
|`MAGIC_KEY_LAYER9` |`9` |Change default layer to 9|
|
|`MAGIC_KEY_LAYER0_ALT2` |`GRAVE` |Make layer 0 the default layer (alternate) |
|
||||||
|`MAGIC_KEY_BOOTLOADER` |`PAUSE` |Exit keyboard and enter bootloader|
|
|`MAGIC_KEY_BOOTLOADER` |`PAUSE` |Enter the bootloader |
|
||||||
|`MAGIC_KEY_LOCK` |`CAPS` |Lock the keyboard so nothing can be typed|
|
|`MAGIC_KEY_LOCK` |`CAPS` |Lock the keyboard so nothing can be typed |
|
||||||
|`MAGIC_KEY_EEPROM` |`E` |Erase EEPROM settings|
|
|`MAGIC_KEY_EEPROM` |`E` |Clear the EEPROM |
|
||||||
|`MAGIC_KEY_NKRO` |`N` |Toggle NKRO on/off|
|
|`MAGIC_KEY_NKRO` |`N` |Toggle N-Key Rollover (NKRO) |
|
||||||
|`MAGIC_KEY_SLEEP_LED` |`Z` |Toggle LED when computer is sleeping on/off|
|
|`MAGIC_KEY_SLEEP_LED` |`Z` |Toggle LED when computer is sleeping |
|
||||||
+1
-1
@@ -269,7 +269,7 @@ This is a reference only. Each group of keys links to the page documenting their
|
|||||||
|`OUT_BT` |Bluetooth only |
|
|`OUT_BT` |Bluetooth only |
|
||||||
|
|
||||||
|
|
||||||
## [Layer Switching](feature_advanced_keycodes.md# Switching and Toggling Layers)
|
## [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
|
||||||
|
|
||||||
|Key |Description |
|
|Key |Description |
|
||||||
|-----------------|---------------------------------------------------------------------|
|
|-----------------|---------------------------------------------------------------------|
|
||||||
|
|||||||
@@ -5,15 +5,9 @@
|
|||||||
#define BASE 0
|
#define BASE 0
|
||||||
#define KEYNAV 1
|
#define KEYNAV 1
|
||||||
#define KEYSEL 2
|
#define KEYSEL 2
|
||||||
#define MOUSE 3
|
#define COMBINED 3
|
||||||
#define COMBINED 4
|
#define BROWSER_CONTROL 4
|
||||||
#define BROWSER_CONTROL 5
|
|
||||||
|
|
||||||
// macros
|
|
||||||
#define MOUSE_TOGGLE 1
|
|
||||||
#define MOUSE_LOCK 2
|
|
||||||
|
|
||||||
static bool mouse_lock = false;
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||||
@@ -63,18 +57,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_TRNS, KC_TILD, KC_GRAVE, KC_CIRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_PIPE, KC_BSLS
|
KC_TRNS, KC_TILD, KC_GRAVE, KC_CIRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_PIPE, KC_BSLS
|
||||||
),
|
),
|
||||||
|
|
||||||
[MOUSE] = LAYOUT(
|
|
||||||
KC_TRNS, KC_PGUP, KC_MS_WH_UP, KC_UP, KC_TRNS, KC_UP, KC_HOME, KC_MS_U, KC_END, KC_MS_WH_UP,
|
|
||||||
KC_MS_ACCEL0, KC_PGDN, KC_MS_WH_DOWN, KC_DOWN, KC_TRNS, KC_DOWN, KC_MS_L, KC_MS_D, KC_MS_R, KC_MS_WH_DOWN,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_X), MEH(KC_Y), MEH(KC_Z), KC_F5, RCTL(KC_W),
|
|
||||||
KC_TRNS, M(MOUSE_LOCK), KC_TRNS, KC_MS_ACCEL0, KC_TRNS, KC_BTN3, KC_BTN1, KC_BTN2, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT)
|
|
||||||
),
|
|
||||||
|
|
||||||
[BROWSER_CONTROL] = LAYOUT(
|
[BROWSER_CONTROL] = LAYOUT(
|
||||||
KC_TRNS, KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, KC_TRNS,
|
MEH(KC_0), KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, MEH(KC_9),
|
||||||
KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT),
|
MEH(KC_1), KC_MS_L, KC_MS_D, KC_MS_R, MEH(KC_6), KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5,
|
MEH(KC_2), MEH(KC_3), MEH(KC_4), MEH(KC_5), MEH(KC_7), MEH(KC_8), RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), RSFT(RCTL(KC_TAB)), KC_TRNS, KC_TRNS, KC_TRNS
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), RSFT(RCTL(KC_TAB)), KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -116,30 +103,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|
||||||
{
|
|
||||||
// MACRODOWN only works in this function
|
|
||||||
switch(id) {
|
|
||||||
case MOUSE_TOGGLE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_on(MOUSE);
|
|
||||||
} else {
|
|
||||||
if(!mouse_lock)
|
|
||||||
layer_off(MOUSE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MOUSE_LOCK:
|
|
||||||
if (record->event.pressed)
|
|
||||||
{
|
|
||||||
if(mouse_lock)
|
|
||||||
{
|
|
||||||
mouse_lock = false;
|
|
||||||
layer_off(MOUSE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mouse_lock = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return MACRO_NONE;
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
#include "chocopad.h"
|
||||||
|
|
||||||
|
#define _BASE 0
|
||||||
|
#define _FN1 1
|
||||||
|
#define _FN2 2
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define KC_ KC_TRNS
|
||||||
|
#define KC_XX KC_NO
|
||||||
|
|
||||||
|
#define KC_L1 LT(1, KC_P0)
|
||||||
|
#define KC_L2 LT(2, KC_SPC)
|
||||||
|
#define KC_RST RESET
|
||||||
|
#define KC_BSTP BL_STEP
|
||||||
|
#define KC_RTOG RGB_TOG
|
||||||
|
#define KC_RMOD RGB_MOD
|
||||||
|
#define KC_RHUI RGB_HUI
|
||||||
|
#define KC_RHUD RGB_HUD
|
||||||
|
#define KC_RSAI RGB_SAI
|
||||||
|
#define KC_RSAD RGB_SAD
|
||||||
|
#define KC_RVAI RGB_VAI
|
||||||
|
#define KC_RVAD RGB_VAD
|
||||||
|
#define KC_MAC1 ADMIN
|
||||||
|
#define KC_MAC2 SMSPC
|
||||||
|
#define KC_M192 M192
|
||||||
|
#define KC_M255 M255
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
NUMPAD = SAFE_RANGE,
|
||||||
|
ADMIN,
|
||||||
|
SMSPC,
|
||||||
|
M192,
|
||||||
|
M255
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_BASE] = KC_KEYMAP(
|
||||||
|
//,----+----+----+----.
|
||||||
|
P7 , P8 , P9 ,BSPC,
|
||||||
|
//|----+----+----+----|
|
||||||
|
P4 , P5 , P6 ,TAB ,
|
||||||
|
//|----+----+----+----|
|
||||||
|
P1 , P2 , P3 ,PENT,
|
||||||
|
//|----+----+----+----|
|
||||||
|
L1 , L2 ,PDOT,PSLS
|
||||||
|
//`----+----+----+----'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN1] = KC_KEYMAP(
|
||||||
|
//,----+----+----+----.
|
||||||
|
ESC ,MAC1,MAC2,DEL ,
|
||||||
|
//|----+----+----+----|
|
||||||
|
LEFT,DOWN, UP ,RGHT,
|
||||||
|
//|----+----+----+----|
|
||||||
|
M192,M255, XX , XX ,
|
||||||
|
//|----+----+----+----|
|
||||||
|
, XX , , XX
|
||||||
|
//`----+----+----+----'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN2] = KC_KEYMAP(
|
||||||
|
//,----+----+----+----.
|
||||||
|
RST , XX , XX , XX ,
|
||||||
|
//|----+----+----+----|
|
||||||
|
RTOG,RHUI,RSAI,RVAI,
|
||||||
|
//|----+----+----+----|
|
||||||
|
RMOD,RHUD,RSAD,RVAD,
|
||||||
|
//|----+----+----+----|
|
||||||
|
BSTP, , XX , XX
|
||||||
|
//`----+----+----+----'
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case ADMIN:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("Administrator");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case SMSPC:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("Simspace1!");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case M192:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("192.168.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case M255:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("255");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
@@ -18,7 +18,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | | | | |
|
* | | | | |
|
||||||
* `---------------------- '
|
* `---------------------- '
|
||||||
*/
|
*/
|
||||||
[0] = KEYMAP( /* LAYER SELECT */
|
[0] = LAYOUT( /* LAYER SELECT */
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
|
KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
|
||||||
TO(4), KC_TRNS, KC_TRNS, KC_TRNS, \
|
TO(4), KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
TO(1), TO(2), TO(3), KC_TRNS, \
|
TO(1), TO(2), TO(3), KC_TRNS, \
|
||||||
@@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | 0 | . | / | = |
|
* | 0 | . | / | = |
|
||||||
* `---------------------- '
|
* `---------------------- '
|
||||||
*/
|
*/
|
||||||
[1] = KEYMAP( /* NUMPAD */
|
[1] = LAYOUT( /* NUMPAD */
|
||||||
KC_P7, KC_P8, KC_P9, KC_PAST, \
|
KC_P7, KC_P8, KC_P9, KC_PAST, \
|
||||||
KC_P4, KC_P5, KC_P6, KC_PMNS, \
|
KC_P4, KC_P5, KC_P6, KC_PMNS, \
|
||||||
KC_P1, KC_P2, KC_P3, KC_PPLS, \
|
KC_P1, KC_P2, KC_P3, KC_PPLS, \
|
||||||
@@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | | | | |
|
* | | | | |
|
||||||
* `---------------------- '
|
* `---------------------- '
|
||||||
*/
|
*/
|
||||||
[5] = KEYMAP( /* NUMPAD SUPPLEMENT */
|
[5] = LAYOUT( /* NUMPAD SUPPLEMENT */
|
||||||
KC_NLCK, KC_TRNS, KC_TRNS, TO(0), \
|
KC_NLCK, KC_TRNS, KC_TRNS, TO(0), \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
@@ -69,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* |LEFT |DOWN |RIGHT|ENTER|
|
* |LEFT |DOWN |RIGHT|ENTER|
|
||||||
* `---------------------- '
|
* `---------------------- '
|
||||||
*/
|
*/
|
||||||
[2] = KEYMAP( /* NAV CLUSTER */
|
[2] = LAYOUT( /* NAV CLUSTER */
|
||||||
KC_INS, KC_PGUP, KC_TAB, KC_PSCR, \
|
KC_INS, KC_PGUP, KC_TAB, KC_PSCR, \
|
||||||
KC_DEL, KC_PGDN, KC_VOLD, KC_VOLU, \
|
KC_DEL, KC_PGDN, KC_VOLD, KC_VOLU, \
|
||||||
KC_HOME, KC_UP, KC_END, TO(0), \
|
KC_HOME, KC_UP, KC_END, TO(0), \
|
||||||
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* |CTRL | C | R |SPACE|
|
* |CTRL | C | R |SPACE|
|
||||||
* `---------------------- '
|
* `---------------------- '
|
||||||
*/
|
*/
|
||||||
[3] = KEYMAP( /* GAMING */
|
[3] = LAYOUT( /* GAMING */
|
||||||
LT(4, KC_ESC), KC_1, KC_2, KC_3, \
|
LT(4, KC_ESC), KC_1, KC_2, KC_3, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, \
|
KC_TAB, KC_Q, KC_W, KC_E, \
|
||||||
KC_LSFT, KC_A, KC_S, KC_D, \
|
KC_LSFT, KC_A, KC_S, KC_D, \
|
||||||
@@ -103,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* |TOGGL|MODE | | |
|
* |TOGGL|MODE | | |
|
||||||
* `---------------------- '
|
* `---------------------- '
|
||||||
*/
|
*/
|
||||||
[4] = KEYMAP( /* NUMPAD SUPPLEMENT */
|
[4] = LAYOUT( /* NUMPAD SUPPLEMENT */
|
||||||
KC_NO, KC_NO, KC_NO, KC_NO, \
|
KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
KC_NO, KC_NO, KC_NO, KC_NO, \
|
KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
KC_NO, KC_NO, KC_NO, KC_NO, \
|
KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
// The following is an example using the Planck MIT layout
|
// The following is an example using the Planck MIT layout
|
||||||
// The first section contains all of the arguements
|
// The first section contains all of the arguements
|
||||||
// The second converts the arguments into a two-dimensional array
|
// The second converts the arguments into a two-dimensional array
|
||||||
#define KEYMAP( \
|
#define LAYOUT( \
|
||||||
k00, k01, k02, k03, \
|
k00, k01, k02, k03, \
|
||||||
k10, k11, k12, k13, \
|
k10, k11, k12, k13, \
|
||||||
k20, k21, k22, k23, \
|
k20, k21, k22, k23, \
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
* @details Frequency of the system timer that drives the system ticks. This
|
* @details Frequency of the system timer that drives the system ticks. This
|
||||||
* setting also defines the system tick time unit.
|
* setting also defines the system tick time unit.
|
||||||
*/
|
*/
|
||||||
#define CH_CFG_ST_FREQUENCY 10000
|
#define CH_CFG_ST_FREQUENCY 100000
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Time delta constant for the tick-less mode.
|
* @brief Time delta constant for the tick-less mode.
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
#include "../config.h"
|
|
||||||
|
|
||||||
#define TAPPING_TERM 600 // ms
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
// This a shortcut to help you visually see your layout.
|
// This a shortcut to help you visually see your layout.
|
||||||
// The first section contains all of the arguments
|
// The first section contains all of the arguments
|
||||||
// The second converts the arguments into a two-dimensional array
|
// The second converts the arguments into a two-dimensional array
|
||||||
#define LAYOUT_ALL( \
|
#define LAYOUT_all( \
|
||||||
K00, K01, K02, \
|
K00, K01, K02, \
|
||||||
K10, K11, K12, \
|
K10, K11, K12, \
|
||||||
\
|
\
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "DC01 Arrow Cluster",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 3,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_all": {
|
||||||
|
"layout": [{"label":"Insert", "x":0, "y":0}, {"label":"Home", "x":1, "y":0}, {"label":"PgUp", "x":2, "y":0}, {"label":"Delete", "x":0, "y":1}, {"label":"End", "x":1, "y":1}, {"label":"PgDn", "x":2, "y":1}, {"label":"\u2191", "x":1, "y":3}, {"label":"\u2190", "x":0, "y":4}, {"label":"\u2193", "x":1, "y":4}, {"label":"\u2192", "x":2, "y":4}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_ALL( /* Base */
|
[0] = LAYOUT_all( /* Base */
|
||||||
KC_INS, KC_HOME, KC_PGUP, \
|
KC_INS, KC_HOME, KC_PGUP, \
|
||||||
KC_DEL, KC_END, KC_PGDN, \
|
KC_DEL, KC_END, KC_PGDN, \
|
||||||
\
|
\
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
A hotpluggable four part keyboard which comes together with magnets and pogo pins! This is the arrow cluster
|
A hotpluggable four part keyboard which comes together with magnets and pogo pins! This is the arrow cluster.
|
||||||
|
|
||||||
Keyboard Maintainer: [Yiancar](https://github.com/yiancar)
|
Keyboard Maintainer: [Yiancar](https://github.com/yiancar)
|
||||||
Hardware Supported: Runs on an atmega32u4
|
Hardware Supported: Runs on an atmega32u4
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "DC01 Left Half",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 22.5,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_ansi": {
|
||||||
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Insert", "x":15.25, "y":0}, {"label":"Home", "x":16.25, "y":0}, {"label":"PgUp", "x":17.25, "y":0}, {"label":"Num Lock", "x":18.5, "y":0}, {"label":"/", "x":19.5, "y":0}, {"label":"*", "x":20.5, "y":0}, {"label":"-", "x":21.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Delete", "x":15.25, "y":1}, {"label":"End", "x":16.25, "y":1}, {"label":"PgDn", "x":17.25, "y":1}, {"label":"7", "x":18.5, "y":1}, {"label":"8", "x":19.5, "y":1}, {"label":"9", "x":20.5, "y":1}, {"label":"+", "x":21.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":18.5, "y":2}, {"label":"5", "x":19.5, "y":2}, {"label":"6", "x":20.5, "y":2}, {"label":"KC_NO", "x":21.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"\u2191", "x":16.25, "y":3}, {"label":"1", "x":18.5, "y":3}, {"label":"2", "x":19.5, "y":3}, {"label":"3", "x":20.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.75}, {"x":6.5, "y":4, "w":1.25}, {"x":7.75, "y":4, "w":2.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"GUI", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}, {"label":"\u2190", "x":15.25, "y":4}, {"label":"\u2193", "x":16.25, "y":4}, {"label":"\u2192", "x":17.25, "y":4}, {"label":"0", "x":18.5, "y":4}, {"label":"KC_NO", "x":19.5, "y":4}, {"label":".", "x":20.5, "y":4}, {"label":"Enter", "x":21.5, "y":3, "h":2}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_ANSI( /* Base */
|
[0] = LAYOUT_ansi( /* Base */
|
||||||
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_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
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_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||||
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_P7, KC_P8, KC_P9, KC_PPLS, \
|
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_P7, KC_P8, KC_P9, KC_PPLS, \
|
||||||
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_P4, KC_P5, KC_P6, KC_NO, \
|
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_P4, KC_P5, KC_P6, KC_NO, \
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
// This a shortcut to help you visually see your layout.
|
// This a shortcut to help you visually see your layout.
|
||||||
// The first section contains all of the arguments
|
// The first section contains all of the arguments
|
||||||
// The second converts the arguments into a two-dimensional array
|
// The second converts the arguments into a two-dimensional array
|
||||||
#define LAYOUT_ANSI( \
|
#define LAYOUT_ansi( \
|
||||||
K00, K01, K02, K03, K04, K05, K45, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0J, K0K, K0L, \
|
K00, K01, K02, K03, K04, K05, K45, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0J, K0K, K0L, \
|
||||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1J, K1K, K1L, \
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1J, K1K, K1L, \
|
||||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2H, K2J, K2K, K2L, \
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2H, K2J, K2K, K2L, \
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "DC01 Numpad",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 4,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_numpad_5x4": {
|
||||||
|
"layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"+", "x":3, "y":1, "h":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"0", "x":0, "y":4, "w":2}, {"label":".", "x":2, "y":4}, {"label":"Enter", "x":3, "y":3, "h":2}]
|
||||||
|
},
|
||||||
|
"LAYOUT_ortho_5x4": {
|
||||||
|
"layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"+", "x":3, "y":1}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"+", "x":3, "y":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"Enter", "x":3, "y":3}, {"label":"0", "x":0, "y":4}, {"label":"00", "x":1, "y":4}, {"label":".", "x":2, "y":4}, {"label":"Enter", "x":3, "y":4}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,8 +25,8 @@
|
|||||||
// The second converts the arguments into a two-dimensional array
|
// The second converts the arguments into a two-dimensional array
|
||||||
#define LAYOUT_numpad_5x4( \
|
#define LAYOUT_numpad_5x4( \
|
||||||
K00, K01, K02, K03, \
|
K00, K01, K02, K03, \
|
||||||
K10, K11, K12, K13, \
|
K10, K11, K12, \
|
||||||
K20, K21, K22, \
|
K20, K21, K22, K13, \
|
||||||
K30, K31, K32, \
|
K30, K31, K32, \
|
||||||
K40, K42, K43 \
|
K40, K42, K43 \
|
||||||
) \
|
) \
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
A hotpluggable four part keyboard which comes together with magnets and pogo pins! This is the numpad
|
A hotpluggable four part keyboard which comes together with magnets and pogo pins! This is the numpad.
|
||||||
|
|
||||||
Keyboard Maintainer: [Yiancar](https://github.com/yiancar)
|
Keyboard Maintainer: [Yiancar](https://github.com/yiancar)
|
||||||
Hardware Supported: Runs on an atmega32u4
|
Hardware Supported: Runs on an atmega32u4
|
||||||
|
|||||||
@@ -71,4 +71,7 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||||
NO_USB_STARTUP_CHECK = yes # Disable initialization only when usb is plugged in
|
NO_USB_STARTUP_CHECK = yes # Disable initialization only when usb is plugged in
|
||||||
CUSTOM_MATRIX = yes # Use custom matrix
|
CUSTOM_MATRIX = yes # Use custom matrix
|
||||||
|
|
||||||
|
# Community layouts supported
|
||||||
|
LAYOUTS = numpad_5x4 ortho_5x4
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "DC01 Right Half",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 8.5,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_ansi": {
|
||||||
|
"layout": [{"label":"&", "x":0.5, "y":0}, {"label":"*", "x":1.5, "y":0}, {"label":"(", "x":2.5, "y":0}, {"label":")", "x":3.5, "y":0}, {"label":"_", "x":4.5, "y":0}, {"label":"+", "x":5.5, "y":0}, {"label":"Backspace", "x":6.5, "y":0, "w":2}, {"label":"Y", "x":0, "y":1}, {"label":"U", "x":1, "y":1}, {"label":"I", "x":2, "y":1}, {"label":"O", "x":3, "y":1}, {"label":"P", "x":4, "y":1}, {"label":"{", "x":5, "y":1}, {"label":"}", "x":6, "y":1}, {"label":"|", "x":7, "y":1, "w":1.5}, {"label":"H", "x":0.25, "y":2}, {"label":"J", "x":1.25, "y":2}, {"label":"K", "x":2.25, "y":2}, {"label":"L", "x":3.25, "y":2}, {"label":":", "x":4.25, "y":2}, {"label":"\"", "x":5.25, "y":2}, {"label":"Enter", "x":6.25, "y":2, "w":2.25}, {"label":"N", "x":0.75, "y":3}, {"label":"M", "x":1.75, "y":3}, {"label":"<", "x":2.75, "y":3}, {"label":">", "x":3.75, "y":3}, {"label":"?", "x":4.75, "y":3}, {"label":"Shift", "x":5.75, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":2.25}, {"label":"Alt", "x":3.5, "y":4, "w":1.25}, {"label":"GUI", "x":4.75, "y":4, "w":1.25}, {"label":"Menu", "x":6, "y":4, "w":1.25}, {"label":"Ctrl", "x":7.25, "y":4, "w":1.25}]
|
||||||
|
},
|
||||||
|
"LAYOUT_iso": {
|
||||||
|
"layout": [{"label":"&", "x":0.5, "y":0}, {"label":"*", "x":1.5, "y":0}, {"label":"(", "x":2.5, "y":0}, {"label":")", "x":3.5, "y":0}, {"label":"_", "x":4.5, "y":0}, {"label":"+", "x":5.5, "y":0}, {"label":"Backspace", "x":6.5, "y":0, "w":2}, {"label":"Y", "x":0, "y":1}, {"label":"U", "x":1, "y":1}, {"label":"I", "x":2, "y":1}, {"label":"O", "x":3, "y":1}, {"label":"P", "x":4, "y":1}, {"label":"{", "x":5, "y":1}, {"label":"}", "x":6, "y":1}, {"label":"H", "x":0.25, "y":2}, {"label":"J", "x":1.25, "y":2}, {"label":"K", "x":2.25, "y":2}, {"label":"L", "x":3.25, "y":2}, {"label":":", "x":4.25, "y":2}, {"label":"@", "x":5.25, "y":2}, {"label":"~", "x":6.25, "y":2}, {"label":"Enter", "x":7.25, "y":1, "w":1.25, "h":2}, {"label":"N", "x":0.75, "y":3}, {"label":"M", "x":1.75, "y":3}, {"label":"<", "x":2.75, "y":3}, {"label":">", "x":3.75, "y":3}, {"label":"?", "x":4.75, "y":3}, {"label":"Shift", "x":5.75, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":2.25}, {"label":"AltGr", "x":3.5, "y":4, "w":1.25}, {"label":"GUI", "x":4.75, "y":4, "w":1.25}, {"label":"Menu", "x":6, "y":4, "w":1.25}, {"label":"Ctrl", "x":7.25, "y":4, "w":1.25}]
|
||||||
|
},
|
||||||
|
"LAYOUT_hhkb_ansi": {
|
||||||
|
"layout": [{"label":"&", "x":0.5, "y":0}, {"label":"*", "x":1.5, "y":0}, {"label":"(", "x":2.5, "y":0}, {"label":")", "x":3.5, "y":0}, {"label":"_", "x":4.5, "y":0}, {"label":"+", "x":5.5, "y":0}, {"label":"Backspace", "x":6.5, "y":0}, {"label":"~", "x":7.5, "y":0}, {"label":"Y", "x":0, "y":1}, {"label":"U", "x":1, "y":1}, {"label":"I", "x":2, "y":1}, {"label":"O", "x":3, "y":1}, {"label":"P", "x":4, "y":1}, {"label":"{", "x":5, "y":1}, {"label":"}", "x":6, "y":1}, {"label":"|", "x":7, "y":1, "w":1.5}, {"label":"H", "x":0.25, "y":2}, {"label":"J", "x":1.25, "y":2}, {"label":"K", "x":2.25, "y":2}, {"label":"L", "x":3.25, "y":2}, {"label":":", "x":4.25, "y":2}, {"label":"\"", "x":5.25, "y":2}, {"label":"Enter", "x":6.25, "y":2, "w":2.25}, {"label":"N", "x":0.75, "y":3}, {"label":"M", "x":1.75, "y":3}, {"label":"<", "x":2.75, "y":3}, {"label":">", "x":3.75, "y":3}, {"label":"?", "x":4.75, "y":3}, {"label":"Shift", "x":5.75, "y":3, "w":1.75}, {"label":"Fn", "x":7.5, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":2.25}, {"label":"Alt", "x":3.5, "y":4, "w":1.25}, {"label":"GUI", "x":4.75, "y":4, "w":1.25}, {"label":"Menu", "x":6, "y":4, "w":1.25}, {"label":"Ctrl", "x":7.25, "y":4, "w":1.25}]
|
||||||
|
},
|
||||||
|
"LAYOUT_hhkb_iso": {
|
||||||
|
"layout": [{"label":"&", "x":0.5, "y":0}, {"label":"*", "x":1.5, "y":0}, {"label":"(", "x":2.5, "y":0}, {"label":")", "x":3.5, "y":0}, {"label":"_", "x":4.5, "y":0}, {"label":"+", "x":5.5, "y":0}, {"label":"|", "x":6.5, "y":0}, {"label":"Backspace", "x":7.5, "y":0}, {"label":"Y", "x":0, "y":1}, {"label":"U", "x":1, "y":1}, {"label":"I", "x":2, "y":1}, {"label":"O", "x":3, "y":1}, {"label":"P", "x":4, "y":1}, {"label":"{", "x":5, "y":1}, {"label":"}", "x":6, "y":1}, {"label":"H", "x":0.25, "y":2}, {"label":"J", "x":1.25, "y":2}, {"label":"K", "x":2.25, "y":2}, {"label":"L", "x":3.25, "y":2}, {"label":":", "x":4.25, "y":2}, {"label":"@", "x":5.25, "y":2}, {"label":"~", "x":6.25, "y":2}, {"label":"Enter", "x":7.25, "y":1, "w":1.25, "h":2}, {"label":"N", "x":0.75, "y":3}, {"label":"M", "x":1.75, "y":3}, {"label":"<", "x":2.75, "y":3}, {"label":">", "x":3.75, "y":3}, {"label":"?", "x":4.75, "y":3}, {"label":"Shift", "x":5.75, "y":3, "w":1.75}, {"label":"Fn", "x":7.5, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":2.25}, {"label":"AltGr", "x":3.5, "y":4, "w":1.25}, {"label":"GUI", "x":4.75, "y":4, "w":1.25}, {"label":"Menu", "x":6, "y":4, "w":1.25}, {"label":"Ctrl", "x":7.25, "y":4, "w":1.25}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_ANSI( /* Base */
|
[0] = LAYOUT_ansi( /* Base */
|
||||||
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
||||||
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \
|
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \
|
||||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_HHKB_ANSI( /* Base */
|
[0] = LAYOUT_hhkb_ansi( /* Base */
|
||||||
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
|
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
|
||||||
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSPC, \
|
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSPC, \
|
||||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
|
||||||
@@ -24,12 +24,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RGUI, KC_RCTL \
|
KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RGUI, KC_RCTL \
|
||||||
),
|
),
|
||||||
|
|
||||||
[1] = LAYOUT_HHKB_ANSI(
|
[1] = LAYOUT_hhkb_ansi(
|
||||||
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
|
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
|
||||||
KC_TRNS,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
|
KC_TRNS,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
|
||||||
KC_PAST,KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
|
KC_PAST,KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
|
||||||
KC_PPLS,KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
|
KC_PPLS,KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_HHKB_ISO( /* Base */
|
[0] = LAYOUT_hhkb_iso( /* Base */
|
||||||
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, \
|
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, \
|
||||||
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, \
|
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, \
|
||||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS,KC_ENT, \
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS,KC_ENT, \
|
||||||
@@ -24,12 +24,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RGUI, KC_RCTL \
|
KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RGUI, KC_RCTL \
|
||||||
),
|
),
|
||||||
|
|
||||||
[1] = LAYOUT_HHKB_ISO(
|
[1] = LAYOUT_hhkb_iso(
|
||||||
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
|
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
|
||||||
KC_TRNS,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, \
|
KC_TRNS,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, \
|
||||||
KC_PAST,KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_PENT, \
|
KC_PAST,KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_PENT, \
|
||||||
KC_PPLS,KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
|
KC_PPLS,KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_ISO( /* Base */
|
[0] = LAYOUT_iso( /* Base */
|
||||||
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
||||||
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, \
|
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, \
|
||||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS,KC_ENT, \
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS,KC_ENT, \
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
A hotpluggable four part keyboard which comes together with magnets and pogo pins! This is the right part
|
A hotpluggable four part keyboard which comes together with magnets and pogo pins! This is the right part.
|
||||||
|
|
||||||
Keyboard Maintainer: [Yiancar](https://github.com/yiancar)
|
Keyboard Maintainer: [Yiancar](https://github.com/yiancar)
|
||||||
Hardware Supported: Runs on an atmega32u4
|
Hardware Supported: Runs on an atmega32u4
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
// This a shortcut to help you visually see your layout.
|
// This a shortcut to help you visually see your layout.
|
||||||
// The first section contains all of the arguments
|
// The first section contains all of the arguments
|
||||||
// The second converts the arguments into a two-dimensional array
|
// The second converts the arguments into a two-dimensional array
|
||||||
#define LAYOUT_ANSI( \
|
#define LAYOUT_ansi( \
|
||||||
K01, K02, K03, K04, K05, K06, K07, \
|
K01, K02, K03, K04, K05, K06, K07, \
|
||||||
K10, K11, K12, K13, K14, K15, K16, K17, \
|
K10, K11, K12, K13, K14, K15, K16, K17, \
|
||||||
K20, K21, K22, K23, K24, K25, K27, \
|
K20, K21, K22, K23, K24, K25, K27, \
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
{ K40, K41, K42, K43, K44, K45, XXX, XXX } \
|
{ K40, K41, K42, K43, K44, K45, XXX, XXX } \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LAYOUT_ISO( \
|
#define LAYOUT_iso( \
|
||||||
K01, K02, K03, K04, K05, K06, K07, \
|
K01, K02, K03, K04, K05, K06, K07, \
|
||||||
K10, K11, K12, K13, K14, K15, K16, \
|
K10, K11, K12, K13, K14, K15, K16, \
|
||||||
K20, K21, K22, K23, K24, K25, K26, K27, \
|
K20, K21, K22, K23, K24, K25, K26, K27, \
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
{ K40, K41, K42, K43, K44, K45, XXX, XXX } \
|
{ K40, K41, K42, K43, K44, K45, XXX, XXX } \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LAYOUT_HHKB_ANSI( \
|
#define LAYOUT_hhkb_ansi( \
|
||||||
K01, K02, K03, K04, K05, K06, K07, K00, \
|
K01, K02, K03, K04, K05, K06, K07, K00, \
|
||||||
K10, K11, K12, K13, K14, K15, K16, K17, \
|
K10, K11, K12, K13, K14, K15, K16, K17, \
|
||||||
K20, K21, K22, K23, K24, K25, K27, \
|
K20, K21, K22, K23, K24, K25, K27, \
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
{ K40, K41, K42, K43, K44, K45, XXX, XXX } \
|
{ K40, K41, K42, K43, K44, K45, XXX, XXX } \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LAYOUT_HHKB_ISO( \
|
#define LAYOUT_hhkb_iso( \
|
||||||
K01, K02, K03, K04, K05, K06, K07, K00, \
|
K01, K02, K03, K04, K05, K06, K07, K00, \
|
||||||
K10, K11, K12, K13, K14, K15, K16, \
|
K10, K11, K12, K13, K14, K15, K16, \
|
||||||
K20, K21, K22, K23, K24, K25, K26, K27, \
|
K20, K21, K22, K23, K24, K25, K26, K27, \
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
#pragma once
|
||||||
|
#define USB_MAX_POWER_CONSUMPTION 100
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
LAYOUT(
|
||||||
|
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_BSLS, KC_GRV,
|
||||||
|
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_BSPC,
|
||||||
|
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_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_APP, KC_RCTL),
|
||||||
|
|
||||||
|
LAYOUT(
|
||||||
|
KC_GRV, 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_INS, KC_DEL,
|
||||||
|
KC_CAPS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_VAD, RGB_VAI, RGB_SAD, RGB_SAI, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, RESET,
|
||||||
|
_______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
|
||||||
|
_______, KC_NO, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
|
||||||
|
};
|
||||||
|
|
||||||
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||||
|
DDRB |= (1 << 2); PORTB &= ~(1 << 2);
|
||||||
|
} else {
|
||||||
|
DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
AUDIO_ENABLE = no
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi
|
||||||
@@ -1 +0,0 @@
|
|||||||
#include "e6v2.h"
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
#ifndef E6V2_H
|
|
||||||
#define E6V2_H
|
|
||||||
|
|
||||||
#include "quantum.h"
|
|
||||||
|
|
||||||
#ifdef KEYBOARD_e6v2_oe
|
|
||||||
#include "oe.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef KEYBOARD_e6v2_le
|
|
||||||
#include "le.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -7,6 +7,10 @@
|
|||||||
"layouts": {
|
"layouts": {
|
||||||
"LAYOUT": {
|
"LAYOUT": {
|
||||||
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.75}, {"label":"Ctrl", "x":1.75, "y":4, "w":1.25}, {"label":"Win", "x":3, "y":4, "w":1.25}, {"label":"Alt", "x":4.25, "y":4, "w":1.25}, {"x":5.5, "y":4, "w":2.75}, {"x":8.25, "y":4, "w":1.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.75}, {"label":"Ctrl", "x":1.75, "y":4, "w":1.25}, {"label":"Win", "x":3, "y":4, "w":1.25}, {"label":"Alt", "x":4.25, "y":4, "w":1.25}, {"x":5.5, "y":4, "w":2.75}, {"x":8.25, "y":4, "w":1.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
|
||||||
|
},
|
||||||
|
|
||||||
|
"LAYOUT_60_ansi": {
|
||||||
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+8
-19
@@ -21,24 +21,13 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
|||||||
return process_record_user(keycode, record);
|
return process_record_user(keycode, record);
|
||||||
}
|
}
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
void led_set_user(uint8_t usb_led) {
|
||||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||||
DDRB |= (1<<7);
|
DDRB |= (1 << 7);
|
||||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
PORTB &= ~(1 << 7);
|
||||||
// output low
|
} else {
|
||||||
DDRB |= (1<<2);
|
DDRB &= ~(1 << 7);
|
||||||
PORTB &= ~(1<<2);
|
PORTB &= ~(1 << 7);
|
||||||
} else {
|
|
||||||
// Hi-Z
|
|
||||||
DDRB &= ~(1<<2);
|
|
||||||
PORTB &= ~(1<<2);
|
|
||||||
}
|
|
||||||
if (usb_led == 0){
|
|
||||||
PORTB |= (1<<7);
|
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
PORTB &= ~(1<<7);
|
|
||||||
}
|
|
||||||
|
|
||||||
led_set_user(usb_led);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+17
-2
@@ -1,7 +1,7 @@
|
|||||||
#ifndef LE_H
|
#ifndef LE_H
|
||||||
#define LE_H
|
#define LE_H
|
||||||
|
|
||||||
#include "../e6v2.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define LAYOUT( \
|
#define LAYOUT( \
|
||||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0D, \
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0D, \
|
||||||
@@ -18,4 +18,19 @@
|
|||||||
{ K40, KC_NO, K42, K43, K44, KC_NO, KC_NO, K47, KC_NO, K49, K4A, K4B, K4C, K4D, K4E }, \
|
{ K40, KC_NO, K42, K43, K44, KC_NO, KC_NO, K47, KC_NO, K49, K4A, K4B, K4C, K4D, K4E }, \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#define LAYOUT_60_ansi( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
|
||||||
|
K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
|
||||||
|
K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
|
||||||
|
K40, K42, K43, K47, K4A, K4B, K4D, K4E \
|
||||||
|
)\
|
||||||
|
{\
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO }, \
|
||||||
|
{ K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
|
||||||
|
{ K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
|
||||||
|
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO }, \
|
||||||
|
{ K40, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, K4B, KC_NO, K4D, K4E }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
# E6-V2 Last Edition (LE)
|
# E6-V2 Last Edition (LE)
|
||||||
|
|
||||||
These docs are for the QMK version of the PCB. [More info on qmk.fm](http://qmk.fm/)
|
These docs are for the QMK version of the E6-V2 PCB. [More info on qmk.fm](http://qmk.fm/)
|
||||||
|
|
||||||
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
|
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
|
||||||
Hardware Supported: E6-V2 LE Mid Port rev.qmk
|
Hardware Supported: E6-V2 LE Mid Port rev.qmk
|
||||||
Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
|
Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
|
||||||
|
|
||||||
|
**Please do not flash LE firmware on OE hardware.**
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
|||||||
@@ -66,3 +66,5 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#ifndef OE_H
|
#ifndef OE_H
|
||||||
#define OE_H
|
#define OE_H
|
||||||
|
|
||||||
#include "../e6v2.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define LAYOUT( \
|
#define LAYOUT( \
|
||||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
# E6-V2 Original Edition (OE)
|
# E6-V2 Original Edition (OE)
|
||||||
|
|
||||||
These docs are for the QMK version of the PCB. [More info on qmk.fm](http://qmk.fm/)
|
These docs are for the QMK version of the E6-V2 PCB. [More info on qmk.fm](http://qmk.fm/)
|
||||||
|
|
||||||
Keyboard Maintainer: [amnesia0287](https://github.com/amnesia0287)
|
Keyboard Maintainer: [amnesia0287](https://github.com/amnesia0287)
|
||||||
Hardware Supported: E6-V2 OE Mid Port rev.qmk
|
Hardware Supported: E6-V2 OE Mid Port rev.qmk
|
||||||
Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
|
Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
|
||||||
|
|
||||||
|
**Please do not flash OE firmware on LE hardware.**
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,20 @@
|
|||||||
# E6-V2
|
# E6-V2
|
||||||
|
|
||||||
These docs are for the QMK version of the PCB. [More info on qmk.fm](http://qmk.fm/)
|
The E6-V2 is a 60% keyboard manufactured by Exclusive.
|
||||||
|
|
||||||
|
### Round 1:
|
||||||
|
- ps2avrGB PCB and QMK powered PCB option (OE PCB)
|
||||||
|
- Center mount and side mount USB
|
||||||
|
|
||||||
|
### Round 2
|
||||||
|
- ps2avrGB PCB and QMK powered PCB option (LE PCB)
|
||||||
|
- Only center mount USB offered
|
||||||
|
- All brass option
|
||||||
|
|
||||||
|
These docs are for the QMK version of the E6-V2 PCB. [More info on qmk.fm](http://qmk.fm/)
|
||||||
|
|
||||||
The E6V2 has been available with either a bootmapper client or QMK powered PCB. During the second round, the QMK powered PCB was redesigned and used different ports and a different switch matrix.
|
The E6V2 has been available with either a bootmapper client or QMK powered PCB. During the second round, the QMK powered PCB was redesigned and used different ports and a different switch matrix.
|
||||||
|
|
||||||
Please use the appropriate version when making your firmware.
|
Please use the appropriate version when making your firmware. Flashing one in place of the other, can brick your PCB. Please be certain whether you have a OE or LE PCB.
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
@@ -1 +0,0 @@
|
|||||||
DEFAULT_FOLDER = e6v2/oe
|
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Jacob Jerrell <[email protected]>
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
// Layers
|
||||||
|
enum layers {
|
||||||
|
_SWRKMN = 0,
|
||||||
|
_HWRKMN,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
_DIABLO
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
KC_EPRM = SAFE_RANGE,
|
||||||
|
KC_SWRK,
|
||||||
|
KC_HWRK,
|
||||||
|
KC_VRSN,
|
||||||
|
JJ_COPY,
|
||||||
|
JJ_PASTE,
|
||||||
|
JJ_ARRW,
|
||||||
|
MC_LOCK,
|
||||||
|
KC_DIABLO_CLEAR,
|
||||||
|
KC_NMPD
|
||||||
|
// UC_FLIP
|
||||||
|
};
|
||||||
|
|
||||||
|
// Space Cadet Hyper/Meh and [/]
|
||||||
|
#define HYP_LBK ALL_T(KC_LBRACKET)
|
||||||
|
#define MEH_RBK MEH_T(KC_RBRACKET)
|
||||||
|
|
||||||
|
#define KC_LWSP LT(_LOWER, KC_SPACE)
|
||||||
|
#define KC_RSEN LT(_RAISE, KC_ENTER)
|
||||||
|
#define KC_ADJS TT(_ADJUST)
|
||||||
|
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
#ifdef TAP_DANCE_ENABLE
|
||||||
|
enum {
|
||||||
|
TD_D3_1 = 0,
|
||||||
|
TD_D3_2,
|
||||||
|
TD_D3_3,
|
||||||
|
TD_D3_4
|
||||||
|
};
|
||||||
|
#endif // TAP_DANCE_ENABLE
|
||||||
|
|
||||||
|
// Custom Keycodes for Diablo 3 layer
|
||||||
|
// But since TD() doesn't work when tap dance is disabled
|
||||||
|
// We use custom codes here, so we can substitute the right stuff
|
||||||
|
#ifdef TAP_DANCE_ENABLE
|
||||||
|
#define KC_D3_1 TD(TD_D3_1)
|
||||||
|
#define KC_D3_2 TD(TD_D3_2)
|
||||||
|
#define KC_D3_3 TD(TD_D3_3)
|
||||||
|
#define KC_D3_4 TD(TD_D3_4)
|
||||||
|
#else // TAP_DANCE_ENABLE
|
||||||
|
#define KC_D3_1 KC_1
|
||||||
|
#define KC_D3_2 KC_2
|
||||||
|
#define KC_D3_3 KC_3
|
||||||
|
#define KC_D3_4 KC_4
|
||||||
|
#endif // TAP_DANCE_ENABLE
|
||||||
|
|
||||||
|
//define diablo macro timer variables
|
||||||
|
extern uint16_t diablo_timer[4];
|
||||||
|
extern uint8_t diablo_times[];
|
||||||
|
extern uint8_t diablo_key_time[4];
|
||||||
|
|
||||||
|
|
||||||
|
void run_diablo_macro_check(void);
|
||||||
|
|
||||||
|
|
||||||
|
#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
|
||||||
|
|
||||||
|
/* Pretty Layout
|
||||||
|
.---------------------------------------------. .---------------------------------------------.
|
||||||
|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | ! 8 | 9 | 10 | 11 | 12 | 13 | 14 |
|
||||||
|
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
|
||||||
|
| 15 | 16 | 17 | 18 | 19 | 20 | 21 | ! 22 | 23 | 24 | 25 | 26 | 27 | 28 |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| 29 | 30 | 31 | 32 | 33 | 34 |-------! !-------! 35 | 36 | 37 | 38 | 39 | 40 |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| 41 | 42 | 43 | 44 | 45 | 46 | 47 | ! 48 | 49 | 50 | 51 | 52 | 53 | 54 |
|
||||||
|
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
|
||||||
|
| 55 | 56 | 57 | 58 | 59 | .---------------. .---------------. ! 60 | 61 | 62 | 63 | 64 |
|
||||||
|
'------------------------------' | 65 | 66 | ! 67 | 68 | '------------------------------'
|
||||||
|
.-------+-------+-------! !-------+-------+-------.
|
||||||
|
! ! | 69 | ! 70 | ! !
|
||||||
|
! ! !-------! !-------! ! !
|
||||||
|
| 71 | 72 | 73 | ! 74 | 75 | 76 |
|
||||||
|
'-----------------------' '-----------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define ______________________NUMBER_LEFT________________________ KC_1, KC_2, KC_3, KC_4, KC_5
|
||||||
|
#define ______________________NUMBER_RIGHT_______________________ KC_6, KC_7, KC_8, KC_9, KC_0
|
||||||
|
|
||||||
|
#define ______________________SPECIAL_LEFT_______________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
|
||||||
|
#define ______________________SPECIAL_RIGHT______________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
|
||||||
|
|
||||||
|
#define _______________________FUNC_LEFT_________________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
|
||||||
|
#define _______________________FUNC_RIGHT________________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
|
||||||
|
|
||||||
|
#define _________________________________________________________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
#define XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
|
||||||
|
|
||||||
|
#define _______________________SWORKMAN_L1_______________________ KC_Q, KC_W, KC_E, KC_R, KC_T
|
||||||
|
#define _______________________SWORKMAN_L2_______________________ KC_A, SFT_T(KC_S), GUI_T(KC_D), ALT_T(KC_F), KC_G
|
||||||
|
#define _______________________SWORKMAN_L3_______________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B
|
||||||
|
|
||||||
|
#define _______________________SWORKMAN_R1_______________________ KC_Y, KC_U, KC_I, KC_O, KC_P
|
||||||
|
#define _______________________SWORKMAN_R2_______________________ KC_H, ALT_T(KC_J), GUI_T(KC_K), SFT_T(KC_L), KC_SCLN
|
||||||
|
#define _______________________SWORKMAN_R3_______________________ KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
|
||||||
|
|
||||||
|
// Hardware Driven Workman
|
||||||
|
#define _______________________HWORKMAN_L1_______________________ KC_Q, KC_D, KC_R, KC_W, KC_B
|
||||||
|
#define _______________________HWORKMAN_L2_______________________ KC_A, SFT_T(KC_S), GUI_T(KC_H), ALT_T(KC_T), KC_G
|
||||||
|
#define _______________________HWORKMAN_L3_______________________ CTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V
|
||||||
|
|
||||||
|
#define _______________________HWORKMAN_R1_______________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
|
||||||
|
#define _______________________HWORKMAN_R2_______________________ KC_Y, ALT_T(KC_N), GUI_T(KC_E), SFT_T(KC_O), KC_I
|
||||||
|
#define _______________________HWORKMAN_R3_______________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
|
||||||
|
|
||||||
|
#define ___________________ERGODOX_BOTTOM_LEFT___________________ TT(_DIABLO), TT(_ADJUST), XXXXXXX, KC_UP, KC_LEFT
|
||||||
|
#define ___________________ERGODOX_BOTTOM_RIGHT__________________ KC_RIGHT, KC_DOWN, TT(_RAISE), TT(_LOWER), TT(_ADJUST)
|
||||||
|
|
||||||
|
// LEFT | RIGHT
|
||||||
|
#define ______________________ERGODOX_THUMBS_____________________ KC_APP,KC_HOME, KC_PGUP,KC_ESC, \
|
||||||
|
KC_END, KC_PGDOWN, \
|
||||||
|
KC_LWSP,KC_BSPACE,JJ_COPY, JJ_PASTE,KC_TAB,KC_RSEN
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#ifndef USERSPACE_CONFIG_H
|
||||||
|
#define USERSPACE_CONFIG_H
|
||||||
|
|
||||||
|
#ifndef QMK_KEYS_PER_SCAN
|
||||||
|
#define QMK_KEYS_PER_SCAN 4
|
||||||
|
#endif // QMK KEYS PER SCAN
|
||||||
|
|
||||||
|
// this makes it possible to do rolling combos (zx) with keys that
|
||||||
|
// convert to other keys on hold (z becomes ctrl when you hold it,
|
||||||
|
// and when this option isn't enabled, z rapidly followed by x
|
||||||
|
// actually sends Ctrl-x. That's bad.)
|
||||||
|
#define IGNORE_MOD_TAP_INTERRUPT
|
||||||
|
#define PERMISSIVE_HOLD
|
||||||
|
#undef PREVENT_STUCK_MODIFIERS
|
||||||
|
|
||||||
|
// Disable action_get_macro and fn_actions, since we don't use these
|
||||||
|
// and it saves on space in the firmware.
|
||||||
|
#define NO_ACTION_MACRO
|
||||||
|
#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif // !USERSPACE_CONFIG_H
|
||||||
@@ -0,0 +1,340 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Jacob Jerrell <[email protected]>
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "bocaj.h"
|
||||||
|
|
||||||
|
#ifdef UNICODEMAP_ENABLE
|
||||||
|
#include "bocaj_unicode.h"
|
||||||
|
#endif // UNICODEMAP_ENABLE
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Software Workman / QWERTY - http://www.keyboard-layout-editor.com/#/gists/b6c016a22a9d31381a276a603a42fe5f
|
||||||
|
.---------------------------------------------. .---------------------------------------------.
|
||||||
|
| ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
|
||||||
|
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
|
||||||
|
| DEL | Q | W | E | R | T | ( | ! ) | Y | U | I | O | P | \ |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| ADJST | A | S | D | F | G |-------! !-------! H | J | K | L | ; | ' |
|
||||||
|
!-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
|
||||||
|
| SHIFT | Z | X | C | V | B | { | ! } | N | M | , | . | / | SHIFT |
|
||||||
|
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
|
||||||
|
| GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
|
||||||
|
'------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
|
||||||
|
.-------+-------+-------! !-------+-------+-------.
|
||||||
|
! SPACE ! | END | ! PGDN | ! ENTER !
|
||||||
|
! / ! BSPCE !-------! !-------! TAB ! / !
|
||||||
|
| LOWER | | COPY | ! PASTE | | RAISE |
|
||||||
|
'-----------------------' '-----------------------'
|
||||||
|
*/
|
||||||
|
[_SWRKMN] = LAYOUT_ergodox_pretty_wrapper(
|
||||||
|
KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
|
||||||
|
KC_DEL, _______________________SWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________SWORKMAN_R1_______________________, KC_BSLS,
|
||||||
|
KC_ADJS,_______________________SWORKMAN_L2_______________________, _______________________SWORKMAN_R2_______________________, KC_QUOTE,
|
||||||
|
KC_LSFT,_______________________SWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________SWORKMAN_R3_______________________, KC_RSFT,
|
||||||
|
___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
|
||||||
|
______________________ERGODOX_THUMBS_____________________
|
||||||
|
),
|
||||||
|
/* Hardware Workman - http://www.keyboard-layout-editor.com/#/gists/7a07cb982ec3597ba3e3d947554225f1
|
||||||
|
.---------------------------------------------. .---------------------------------------------.
|
||||||
|
| ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
|
||||||
|
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
|
||||||
|
| DEL | Q | D | R | W | B | ( | ! ) | J | F | U | P | ; | \ |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| ADJST | A | S | H | T | G |-------! !-------! Y | N | E | O | I | ' |
|
||||||
|
!-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
|
||||||
|
| SHIFT | Z | X | M | C | V | { | ! } | K | L | , | . | / | SHIFT |
|
||||||
|
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
|
||||||
|
| GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
|
||||||
|
'------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
|
||||||
|
.-------+-------+-------! !-------+-------+-------.
|
||||||
|
! SPACE ! | END | ! PGDN | ! ENTER !
|
||||||
|
! / ! BSPCE !-------! !-------! TAB ! / !
|
||||||
|
| LOWER | | COPY | ! PASTE | | RAISE |
|
||||||
|
'-----------------------' '-----------------------'
|
||||||
|
*/
|
||||||
|
[_HWRKMN] = LAYOUT_ergodox_pretty_wrapper(
|
||||||
|
KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
|
||||||
|
KC_DEL, _______________________HWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________HWORKMAN_R1_______________________, KC_BSLS,
|
||||||
|
KC_ADJS,_______________________HWORKMAN_L2_______________________, _______________________HWORKMAN_R2_______________________, KC_QUOTE,
|
||||||
|
KC_LSFT,_______________________HWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________HWORKMAN_R3_______________________, KC_RSFT,
|
||||||
|
___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
|
||||||
|
______________________ERGODOX_THUMBS_____________________
|
||||||
|
),
|
||||||
|
/* Lower - http://www.keyboard-layout-editor.com/#/gists/f1d745a88d1c48ab55e095efd9e7a43a
|
||||||
|
.---------------------------------------------. .---------------------------------------------.
|
||||||
|
| | F1 | F2 | F3 | F4 | F5 | | ! | F6 | F7 | F8 | F9 | F10 | |
|
||||||
|
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
|
||||||
|
| ` | 1 | 2 | 3 | 4 | 5 | | ! | 6 | 7 | 8 | 9 | 0 | |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| | | | | | |-------! !-------! | | | | | |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| | | | | | | | ! | | | | | | |
|
||||||
|
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
|
||||||
|
| | | | | | .---------------. .---------------. ! | | | | |
|
||||||
|
'------------------------------' | | | ! | | '------------------------------'
|
||||||
|
.-------+-------+-------! !-------+-------+-------.
|
||||||
|
! ! | | ! | ! !
|
||||||
|
! ! !-------! !-------! ! !
|
||||||
|
| | | | ! | | |
|
||||||
|
'-----------------------' '-----------------------'
|
||||||
|
*/
|
||||||
|
[_LOWER] = LAYOUT_ergodox_pretty_wrapper(
|
||||||
|
_______,_______________________FUNC_LEFT_________________________, _______, _______, _______________________FUNC_RIGHT________________________, _______,
|
||||||
|
KC_GRV ,______________________NUMBER_LEFT________________________, _______, _______, ______________________NUMBER_RIGHT_______________________, _______,
|
||||||
|
_______,_________________________________________________________, _________________________________________________________, _______,
|
||||||
|
_______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
|
||||||
|
_________________________________________________________, _________________________________________________________,
|
||||||
|
______________________ERGODOX_THUMBS_____________________
|
||||||
|
),
|
||||||
|
/* Raise - http://www.keyboard-layout-editor.com/#/gists/e0f591ec2ce9f24675a02d15c7048b25
|
||||||
|
.---------------------------------------------. .---------------------------------------------.
|
||||||
|
| | F1 | F2 | F3 | F4 | F5 | | ! _ | F6 | F7 | F8 | F9 | F10 | |
|
||||||
|
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
|
||||||
|
| ~ | ! | @ | # | $ | % | | ! | ^ | & | * | ( | ) | |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| | | | | | |-------! !-------! | | | | | |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| | | | | | | | ! | | | | | | |
|
||||||
|
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
|
||||||
|
| | | | | | .---------------. .---------------. ! | | | | |
|
||||||
|
'------------------------------' | | | ! | | '------------------------------'
|
||||||
|
.-------+-------+-------! !-------+-------+-------.
|
||||||
|
! ! | | ! | ! !
|
||||||
|
! ! !-------! !-------! ! !
|
||||||
|
| | | | ! | | |
|
||||||
|
'-----------------------' '-----------------------'
|
||||||
|
*/
|
||||||
|
[_RAISE] = LAYOUT_ergodox_pretty_wrapper(
|
||||||
|
_______,_______________________FUNC_LEFT_________________________, _______, KC_UNDS, _______________________FUNC_RIGHT________________________, _______,
|
||||||
|
KC_TILD,______________________SPECIAL_LEFT_______________________, _______, _______, ______________________SPECIAL_RIGHT______________________, _______,
|
||||||
|
_______,_________________________________________________________, _________________________________________________________, _______,
|
||||||
|
_______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
|
||||||
|
_________________________________________________________, _________________________________________________________,
|
||||||
|
______________________ERGODOX_THUMBS_____________________
|
||||||
|
),
|
||||||
|
/* Adjust - http://www.keyboard-layout-editor.com/#/gists/dedeae17b35a5d5f745a42aaea78f007
|
||||||
|
.---------------------------------------------. .---------------------------------------------.
|
||||||
|
| | | | | | | EPRM | ! EPRM | | | | | | |
|
||||||
|
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
|
||||||
|
| | | | | | | | ! | | 7 | 8 | 9 | * | |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| | 🔇 | 🔉 | 🔊 | LCK | |-------! !-------! | 4 | 5 | 6 | + | SWRKM |
|
||||||
|
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||||
|
| | | | | | | | ! | | 1 | 2 | 3 | - | HWRKM |
|
||||||
|
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
|
||||||
|
| | | | | | .---------------. .---------------. ! 0 | . | , | = | |
|
||||||
|
'------------------------------' | | | ! | | '------------------------------'
|
||||||
|
.-------+-------+-------! !-------+-------+-------.
|
||||||
|
! ! | | ! | ! !
|
||||||
|
! ! !-------! !-------! ! !
|
||||||
|
| | | | ! | | |
|
||||||
|
'-----------------------' '-----------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
|
||||||
|
XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, KC_EPRM, KC_EPRM, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, XXXXXXX,
|
||||||
|
_______,KC__MUTE, KC__VOLDOWN, KC__VOLUP, MC_LOCK, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_SWRK,
|
||||||
|
XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, KC_HWRK,
|
||||||
|
XXXXXXX,_______,XXXXXXX,XXXXXXX,XXXXXXX, KC_KP_0, KC_PDOT, KC_COMM, KC_PEQL, _______,
|
||||||
|
______________________ERGODOX_THUMBS_____________________
|
||||||
|
),
|
||||||
|
// Diablo - http://www.keyboard-layout-editor.com/#/gists/28476e4237e77d4835ac8a9d7e5f9b2c
|
||||||
|
[_DIABLO] = LAYOUT_ergodox_pretty_wrapper(
|
||||||
|
KC_ESC , KC_V , KC_D ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
KC_TAB , KC_S , KC_I , KC_F , KC_T , KC_J ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, XXXXXXX, XXXXXXX,
|
||||||
|
KC_Q , KC_1 , KC_2 , KC_3 , KC_4 , KC_M , XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, XXXXXXX,
|
||||||
|
KC_LSFT,KC_D3_1 ,KC_D3_2 ,KC_D3_3 ,KC_D3_4 ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, XXXXXXX,
|
||||||
|
_______,ALT_T(KC_Z) ,KC_G ,KC_Y ,XXXXXXX , KC_KP_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX,
|
||||||
|
KC_BTN1,KC_BTN2,KC_DIABLO_CLEAR, XXXXXXX,XXXXXXX,XXXXXXX
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Defines actions for my custom keycodes
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
// KC_COPY and KC_PASTE have problems with different hardware/software mappings
|
||||||
|
// e.g. If the mappings conflict, KC_COPY will send Cmd+M which minimizes the
|
||||||
|
// window and is very annoying. JJ_COPY and JJ_PASTE fix this by sending the
|
||||||
|
// raw character rather than the KC_* code
|
||||||
|
case JJ_COPY:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
SEND_STRING(SS_LGUI("c"));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case JJ_PASTE:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
SEND_STRING(SS_LGUI("v"));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case JJ_ARRW:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
SEND_STRING("->");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case KC_SWRK:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_SWRKMN);
|
||||||
|
layer_move(_SWRKMN);
|
||||||
|
ergodox_blink_all_leds();
|
||||||
|
ergodox_blink_all_leds();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case KC_HWRK:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_HWRKMN);
|
||||||
|
layer_move(_HWRKMN);
|
||||||
|
ergodox_blink_all_leds();
|
||||||
|
ergodox_blink_all_leds();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case KC_EPRM:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
ergodox_blink_all_leds();
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case MC_LOCK:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
layer_move(_HWRKMN);
|
||||||
|
SEND_STRING(SS_LCTRL(SS_LGUI("q")));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case KC_DIABLO_CLEAR:
|
||||||
|
#ifdef TAP_DANCE_ENABLE
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t dtime;
|
||||||
|
for (dtime = 0; dtime < 4; dtime++) {
|
||||||
|
diablo_key_time[dtime] = diablo_times[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // TAP_DANCE_ENABLE
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
|
||||||
|
|
||||||
|
// Diablo III Fun stuff
|
||||||
|
//define diablo macro timer variables
|
||||||
|
uint16_t diablo_timer[4];
|
||||||
|
uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
|
||||||
|
uint8_t diablo_key_time[4];
|
||||||
|
|
||||||
|
// has the correct number of seconds elapsed (as defined by diablo_times)
|
||||||
|
bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; };
|
||||||
|
|
||||||
|
// Cycle through the times for the macro, starting at 0, for disabled.
|
||||||
|
// Max of six values, so don't exceed
|
||||||
|
void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
|
||||||
|
if (state->count >= 7) {
|
||||||
|
diablo_key_time[diablo_key] = diablo_times[0];
|
||||||
|
reset_tap_dance(state);
|
||||||
|
} else {
|
||||||
|
diablo_key_time[diablo_key] = diablo_times[state->count - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Would rather have one function for all of this, but no idea how to do that...
|
||||||
|
void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); }
|
||||||
|
void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); }
|
||||||
|
void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); }
|
||||||
|
void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); }
|
||||||
|
|
||||||
|
//Tap Dance Definitions
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
// tap once to disable, and more to enable timed micros
|
||||||
|
[TD_D3_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
|
||||||
|
[TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
|
||||||
|
[TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
|
||||||
|
[TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Sends the key press to system, but only if on the Diablo layer
|
||||||
|
void send_diablo_keystroke(uint8_t diablo_key) {
|
||||||
|
if (biton32(layer_state) == _DIABLO) {
|
||||||
|
switch (diablo_key) {
|
||||||
|
case 0:
|
||||||
|
tap(KC_1); break;
|
||||||
|
case 1:
|
||||||
|
tap(KC_2); break;
|
||||||
|
case 2:
|
||||||
|
tap(KC_3); break;
|
||||||
|
case 3:
|
||||||
|
tap(KC_4); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Checks each of the 4 timers/keys to see if enough time has elapsed
|
||||||
|
// Runs the "send string" command if enough time has passed, and resets the timer.
|
||||||
|
void run_diablo_macro_check(void) {
|
||||||
|
uint8_t dtime;
|
||||||
|
for (dtime = 0; dtime < 4; dtime++) {
|
||||||
|
if (check_dtimer(dtime) && diablo_key_time[dtime]) {
|
||||||
|
diablo_timer[dtime] = timer_read();
|
||||||
|
send_diablo_keystroke(dtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
/*
|
||||||
|
Lights are treated as binary here for easy identification.
|
||||||
|
LED1 = 4; LED2 = 2; LED1 = 1
|
||||||
|
This allows for up to 8 identified layers (default layers being no lights on)
|
||||||
|
Which is way more than I should ever need
|
||||||
|
*/
|
||||||
|
case _LOWER:
|
||||||
|
ergodox_right_led_3_on();
|
||||||
|
ergodox_right_led_3_set(10); // Default brightness is deadly in a dark room
|
||||||
|
break;
|
||||||
|
case _RAISE:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
ergodox_right_led_2_set(10);
|
||||||
|
break;
|
||||||
|
case _ADJUST:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
ergodox_right_led_2_set(10);
|
||||||
|
ergodox_right_led_3_on();
|
||||||
|
ergodox_right_led_3_set(10);
|
||||||
|
break;
|
||||||
|
case _DIABLO:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
ergodox_right_led_1_set(10);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#ifdef TAP_DANCE_ENABLE
|
||||||
|
run_diablo_macro_check();
|
||||||
|
#endif
|
||||||
|
};
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# Ergodox EZ Layout by JacobJerrell
|
||||||
|
|
||||||
|
My personal Ergodox EZ layout.
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Contains two base layers because I carry my keyboard between different machines and occassionally use the machines without this keyboard. A side-effect to using it in this manner (with a non-QWERTY layout) is that software/hardware mappings conflict so this allows a quick (2-buttons) to get the keyboard to a compatible layer
|
||||||
|
|
||||||
|
## Layers
|
||||||
|
|
||||||
|
| Layer | Purpose |
|
||||||
|
| ----- | ------- |
|
||||||
|
| 0 | [Hardware Workman](#hardware-workman) - For OS mapped to QWERTY |
|
||||||
|
| 1 | [Software Workman](#software-workman) - For OS mapped to Workman |
|
||||||
|
| 2 | [Lower](#lower) |
|
||||||
|
| 3 | [Raise](#raise) |
|
||||||
|
| 4 | [Adjust](#adjust) |
|
||||||
|
| 5 | [Diablo III](#diablo-iii) |
|
||||||
|
|
||||||
|
### Hardware Workman
|
||||||
|
|
||||||
|
For easy plug and play into QWERTY machines
|
||||||
|

|
||||||
|
|
||||||
|
### Software Workman
|
||||||
|
|
||||||
|
To switch to when I was previously using the laptop keyboard with software mapped to Workman. Or so other people can take the Ergodox for a spin.
|
||||||
|

|
||||||
|
|
||||||
|
### Lower
|
||||||
|
|
||||||
|
Reveals F1-12 keys and brings numkeys down.
|
||||||
|

|
||||||
|
|
||||||
|
### Raise
|
||||||
|
|
||||||
|
Reveals F1-F12 keys and gives shifted numkeys.
|
||||||
|

|
||||||
|
|
||||||
|
### Adjust
|
||||||
|
|
||||||
|
Numpad, Wipe EEPROM, OSX Volume Control, OSX Lockscreen, and Default Layer Switching.
|
||||||
|

|
||||||
|
|
||||||
|
### Diablo III
|
||||||
|
|
||||||
|
Arranged to make playing on a laptop much more enjoyable. Credit for the D1-4 macros (as well as much of the ideas in this layout goes to Drashna)
|
||||||
|

|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
AUTO_SHIFT_ENABLE = no
|
||||||
|
COMMAND_ENABLE = no
|
||||||
|
SWAP_HANDS_ENABLE = no
|
||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
|
EXTRAKEY_ENABLE = no
|
||||||
@@ -12,7 +12,8 @@ Layers
|
|||||||
* BASE: basic dvorak layout
|
* BASE: basic dvorak layout
|
||||||
* KEYNAV: arrow-key navigation. Momentary toggle held by thumb allows the right hand to navigate through text as well as copy/paste/cut, page up/page down
|
* KEYNAV: arrow-key navigation. Momentary toggle held by thumb allows the right hand to navigate through text as well as copy/paste/cut, page up/page down
|
||||||
* KEYSEL: similar to KEYNAV, except for shift-selection
|
* KEYSEL: similar to KEYNAV, except for shift-selection
|
||||||
* COMBINED: this is a layer that combines numbers, brackets and special characters. !@#$%^&*( can be type by shift+COMBINED+1/2/3/etc..
|
* COMBINED: this is a layer that combines numbers, brackets and special characters. !@#$%^&*( can be typed by shift+COMBINED+1/2/3/etc..
|
||||||
* MOUSE: mouse navigation, as well as browser tab-left/tab-right shortcuts
|
* BROWSER_CONTROL: primarily browser left/right tab, open new tab/delete tab, but also mouse keys.
|
||||||
* SHELL_NAV: Linux Bash shortcuts (move forward/backward in command line, Ctrl+C, recall last argument, etc
|
* SHELL_NAV: Linux Bash shortcuts (move forward/backward in command line, Ctrl+C, recall last argument, etc
|
||||||
* SHELL_SCREEN: Linux screen (run multiple terminals in one window) shortcuts such as open new tabs, switch between tabs
|
* SHELL_SCREEN: Linux screen (run multiple terminals in one window) shortcuts such as open new tabs, switch between tabs
|
||||||
|
* SCREEN_NAV: special layer for copy/pasting within Linux screen, allows using various copy/paste buffers
|
||||||
@@ -15,8 +15,6 @@
|
|||||||
// pushing dev branch
|
// pushing dev branch
|
||||||
// git push origin dev:dev
|
// git push origin dev:dev
|
||||||
|
|
||||||
static bool mouse_lock = false;
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||||
EPRM,
|
EPRM,
|
||||||
@@ -40,7 +38,12 @@ enum custom_keycodes {
|
|||||||
SHELL_SCREEN_LIST,
|
SHELL_SCREEN_LIST,
|
||||||
SHELL_MKE,
|
SHELL_MKE,
|
||||||
SHELL_HTCSTATUS,
|
SHELL_HTCSTATUS,
|
||||||
|
SHELL_HTCBOUNCE,
|
||||||
|
SHELL_DUMPTLOG,
|
||||||
|
|
||||||
|
SHELL_EXPAND_OE_LOGPATTERN,
|
||||||
|
SHELL_EXPAND_OE_TRANPATTERN,
|
||||||
|
|
||||||
// Cloud9 macros
|
// Cloud9 macros
|
||||||
CLOUD9_TAB_LEFT,
|
CLOUD9_TAB_LEFT,
|
||||||
CLOUD9_TAB_RIGHT,
|
CLOUD9_TAB_RIGHT,
|
||||||
@@ -57,19 +60,15 @@ enum custom_keycodes {
|
|||||||
#define KEYSEL 2 // arrow navigation + shift (allow text selection)
|
#define KEYSEL 2 // arrow navigation + shift (allow text selection)
|
||||||
#define SHELL_NAV 3 // bash shortcuts
|
#define SHELL_NAV 3 // bash shortcuts
|
||||||
#define SHELL_SCREEN 4 // linux screen shortcuts
|
#define SHELL_SCREEN 4 // linux screen shortcuts
|
||||||
#define SCREEN_NAV 5 // navigate between linux screen tabs
|
#define SCREEN_NAV 5 // navigate between linux screen tabs
|
||||||
#define MOUSE 6 // mouse layer (can be locked with lock key), unmapped for now
|
#define BROWSER_CONTROL 6 // control browser and mouse
|
||||||
#define BROWSER_CONTROL 7 // control browser and mouse
|
#define COMBINED 7 // combined numbers and symbols layer
|
||||||
#define COMBINED 8 // combined numbers and symbols layer
|
|
||||||
|
|
||||||
|
|
||||||
// macros
|
// macros
|
||||||
#define MOUSE_TOGGLE 1
|
|
||||||
#define MOUSE_LOCK 2
|
|
||||||
#define SCREEN_TAB_LEFT 4
|
#define SCREEN_TAB_LEFT 4
|
||||||
#define SCREEN_TAB_RIGHT 5
|
#define SCREEN_TAB_RIGHT 5
|
||||||
#define SCREEN_NEW_TAB 6
|
#define SCREEN_NEW_TAB 6
|
||||||
#define SWITCH_NDS 7
|
|
||||||
#define SCREEN_COPY_MODE 8
|
#define SCREEN_COPY_MODE 8
|
||||||
#define SCREEN_PASTE 9
|
#define SCREEN_PASTE 9
|
||||||
#define SCREEN_RENAME 10
|
#define SCREEN_RENAME 10
|
||||||
@@ -93,9 +92,8 @@ enum custom_keycodes {
|
|||||||
#define SCREEN_PASTEREG_1 28
|
#define SCREEN_PASTEREG_1 28
|
||||||
#define SCREEN_PASTEREG_2 29
|
#define SCREEN_PASTEREG_2 29
|
||||||
#define SCREEN_PASTEREG_3 30
|
#define SCREEN_PASTEREG_3 30
|
||||||
#define SHELL_WRITE_LOGPATTERN 31
|
#define DEL_TO_HOME 36
|
||||||
#define SHELL_WRITE_TRANPATTERN 32
|
|
||||||
#define SHELL_EXPAND_PATTERN 33
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -175,13 +173,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_TRNS,MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS,
|
KC_TRNS,MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS,
|
||||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
// left thumb cluster
|
// left thumb cluster
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,TO(MOUSE),KC_TRNS,KC_TRNS,
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
|
||||||
|
|
||||||
// right hand
|
// right hand
|
||||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_G),
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_G),
|
||||||
KC_TRNS,KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP, MEH(KC_H),
|
KC_TRNS,KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP, MEH(KC_H),
|
||||||
LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), MEH(KC_I),
|
LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), MEH(KC_I),
|
||||||
KC_TRNS,KC_NO, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, MEH(KC_J),
|
KC_TRNS,M(DEL_TO_HOME),RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, MEH(KC_J),
|
||||||
KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), MEH(KC_K),
|
KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), MEH(KC_K),
|
||||||
|
|
||||||
// right thumb cluster
|
// right thumb cluster
|
||||||
@@ -218,7 +217,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
[SHELL_NAV] = LAYOUT_ergodox(
|
[SHELL_NAV] = LAYOUT_ergodox(
|
||||||
// left hand
|
// left hand
|
||||||
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS,KC_TRNS, SHELL_PGREP, SHELL_PLESS, SHELL_LESS, KC_TRNS, SHELL_H3,
|
KC_TRNS,KC_TRNS, SHELL_PGREP, SHELL_PLESS, SHELL_LESS, SHELL_HTCBOUNCE, SHELL_H3,
|
||||||
KC_TRNS,SHELL_MKE, SHELL_CDPRE, SHELL_LSLTR, SHELL_LS, SHELL_LSLA,
|
KC_TRNS,SHELL_MKE, SHELL_CDPRE, SHELL_LSLTR, SHELL_LS, SHELL_LSLA,
|
||||||
KC_TRNS,SHELL_SCREEN_LIST, SHELL_SCREENRD, SHELL_SCREEN_NEW, SHELL_TAILF, SHELL_HTCSTATUS, SHELL_AMMCOLO,
|
KC_TRNS,SHELL_SCREEN_LIST, SHELL_SCREENRD, SHELL_SCREEN_NEW, SHELL_TAILF, SHELL_HTCSTATUS, SHELL_AMMCOLO,
|
||||||
// bottom row
|
// bottom row
|
||||||
@@ -228,10 +227,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
// right hand
|
// right hand
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(SHELL_WRITE_TRANPATTERN),
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, SHELL_EXPAND_OE_TRANPATTERN,
|
||||||
RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, M(SHELL_WRITE_LOGPATTERN),
|
RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, SHELL_EXPAND_OE_LOGPATTERN,
|
||||||
LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), RCTL(KC_W),
|
LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), RCTL(KC_W),
|
||||||
RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), MEH(KC_V), RCTL(KC_K), M(SHELL_EXPAND_PATTERN),
|
RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), MEH(KC_V), RCTL(KC_K), SHELL_DUMPTLOG,
|
||||||
// bottom row (match functionality of base layer)
|
// bottom row (match functionality of base layer)
|
||||||
KC_BSPC, RCTL(KC_W), KC_DELETE, LALT(KC_D), RCTL(KC_U),
|
KC_BSPC, RCTL(KC_W), KC_DELETE, LALT(KC_D), RCTL(KC_U),
|
||||||
// thumb cluster
|
// thumb cluster
|
||||||
@@ -320,30 +319,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_TRNS,KC_TRNS,
|
KC_TRNS,KC_TRNS,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS),
|
KC_TRNS,KC_TRNS,KC_TRNS),
|
||||||
|
|
||||||
|
|
||||||
[MOUSE] = LAYOUT_ergodox(
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_PGUP, KC_MS_WH_UP, KC_UP, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_MS_ACCEL0, KC_PGDN, KC_MS_WH_DOWN, KC_DOWN, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, M(MOUSE_LOCK), KC_TRNS, KC_MS_ACCEL0,
|
|
||||||
|
|
||||||
KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS,
|
|
||||||
KC_TRNS, KC_BTN3, KC_TRNS,
|
|
||||||
// right hand
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_UP, KC_HOME, KC_MS_U, KC_END, KC_MS_WH_UP, KC_TRNS,
|
|
||||||
KC_DOWN, KC_MS_L, KC_MS_D, KC_MS_R, KC_MS_WH_DOWN, KC_TRNS,
|
|
||||||
KC_TRNS, MEH(KC_X), MEH(KC_Y), MEH(KC_Z), KC_F5, RCTL(KC_W), KC_TRNS,
|
|
||||||
// browser tab control
|
|
||||||
RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS,
|
|
||||||
KC_TRNS, KC_BTN1, KC_BTN2
|
|
||||||
),
|
|
||||||
|
|
||||||
[BROWSER_CONTROL] = LAYOUT_ergodox(
|
[BROWSER_CONTROL] = LAYOUT_ergodox(
|
||||||
// left hand
|
// left hand
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
@@ -379,26 +356,6 @@ const uint16_t PROGMEM fn_actions[] = {
|
|||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
{
|
{
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case MOUSE_TOGGLE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_on(MOUSE);
|
|
||||||
} else {
|
|
||||||
if(!mouse_lock)
|
|
||||||
layer_off(MOUSE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MOUSE_LOCK:
|
|
||||||
if (record->event.pressed)
|
|
||||||
{
|
|
||||||
if(mouse_lock)
|
|
||||||
{
|
|
||||||
mouse_lock = false;
|
|
||||||
layer_off(MOUSE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mouse_lock = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SCREEN_TAB_LEFT:
|
case SCREEN_TAB_LEFT:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
return MACRO( D(LCTL), T(A), U(LCTL), T(P), END);
|
return MACRO( D(LCTL), T(A), U(LCTL), T(P), END);
|
||||||
@@ -478,40 +435,19 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END);
|
return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHELL_WRITE_LOGPATTERN:
|
case DEL_TO_HOME:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
return MACRO( D(LSFT),
|
return MACRO(
|
||||||
T(8),
|
// delete to the beginning of the line
|
||||||
T(8),
|
D(LSFT), T(HOME), U(LSFT),
|
||||||
U(LSFT),
|
T(DELETE),
|
||||||
T(L),
|
END);
|
||||||
T(O),
|
}
|
||||||
T(G),
|
break;
|
||||||
T(LEFT),
|
|
||||||
T(LEFT),
|
|
||||||
T(LEFT),
|
|
||||||
T(LEFT),
|
|
||||||
END);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SHELL_WRITE_TRANPATTERN:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
return MACRO( D(LSFT),
|
|
||||||
T(8),
|
|
||||||
T(8),
|
|
||||||
U(LSFT), T(T), T(R), T(A), T(N), T(LEFT), T(LEFT), T(LEFT), T(LEFT), T(LEFT), END);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SHELL_EXPAND_PATTERN:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
return MACRO( D(LALT), T(F), U(LALT), D(LCTL), T(X), U(LCTL), D(LSFT), T(8), D(LSFT), END);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
@@ -599,15 +535,29 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
case SHELL_MKE:
|
case SHELL_MKE:
|
||||||
SEND_STRING("mke\n");
|
SEND_STRING("mki -j8\n");
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
case SHELL_HTCSTATUS:
|
case SHELL_HTCSTATUS:
|
||||||
SEND_STRING("htcStatus -j ");
|
SEND_STRING("htcStatus -j ");
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
// Cloud9 macros
|
case SHELL_HTCBOUNCE:
|
||||||
case CLOUD9_TAB_LEFT:
|
SEND_STRING("htcBounce -j ");
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case SHELL_EXPAND_OE_LOGPATTERN:
|
||||||
|
SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.log"SS_LCTRL("x")SS_LSFT("8"));
|
||||||
|
break;
|
||||||
|
case SHELL_EXPAND_OE_TRANPATTERN:
|
||||||
|
SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.tran"SS_LCTRL("x")SS_LSFT("8"));
|
||||||
|
break;
|
||||||
|
case SHELL_DUMPTLOG:
|
||||||
|
SEND_STRING(" | dumptlog - ");
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
// Cloud9 macros
|
||||||
|
case CLOUD9_TAB_LEFT:
|
||||||
SEND_STRING(SS_LCTRL("["));
|
SEND_STRING(SS_LCTRL("["));
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
@@ -664,8 +614,7 @@ void matrix_scan_user(void) {
|
|||||||
case SCREEN_NAV:
|
case SCREEN_NAV:
|
||||||
ergodox_right_led_3_on();
|
ergodox_right_led_3_on();
|
||||||
break;
|
break;
|
||||||
case MOUSE:
|
case BROWSER_CONTROL:
|
||||||
case BROWSER_CONTROL:
|
|
||||||
ergodox_right_led_2_on();
|
ergodox_right_led_2_on();
|
||||||
ergodox_right_led_3_on();
|
ergodox_right_led_3_on();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
This is the c configuration file for the keymap
|
||||||
|
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
Copyright 2015 Jack Humbert
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
#define TAPPING_TERM 100
|
||||||
|
|
||||||
|
/* Try to prevent sticky keys */
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
|
||||||
|
/* Use I2C or Serial, not both */
|
||||||
|
|
||||||
|
#define USE_SERIAL
|
||||||
|
// #define USE_I2C
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _BASE 0
|
||||||
|
#define _FN1 1
|
||||||
|
#define _FN2 2
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define KC_ KC_TRNS
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
#define KC_FN1 MO(_FN1)
|
||||||
|
#define KC_FN2 MO(_FN2)
|
||||||
|
#define KC_SPFN1 LT(_FN1, KC_SPACE)
|
||||||
|
#define KC_SPFN2 LT(_FN2, KC_SPACE)
|
||||||
|
#define KC_BSFN1 LT(_FN1, KC_BSPC)
|
||||||
|
#define KC_BSFN2 LT(_FN2, KC_BSPC)
|
||||||
|
#define KC_RST RESET
|
||||||
|
#define KC_DBUG DEBUG
|
||||||
|
#define KC_RTOG RGB_TOG
|
||||||
|
#define KC_RMOD RGB_MOD
|
||||||
|
#define KC_RHUI RGB_HUI
|
||||||
|
#define KC_RHUD RGB_HUD
|
||||||
|
#define KC_RSAI RGB_SAI
|
||||||
|
#define KC_RSAD RGB_SAD
|
||||||
|
#define KC_RVAI RGB_VAI
|
||||||
|
#define KC_RVAD RGB_VAD
|
||||||
|
|
||||||
|
//Tap Dance Declarations
|
||||||
|
enum {
|
||||||
|
ESC_GR = 0,
|
||||||
|
Q_1,
|
||||||
|
W_2,
|
||||||
|
E_3,
|
||||||
|
R_4,
|
||||||
|
T_5,
|
||||||
|
Y_6,
|
||||||
|
U_7,
|
||||||
|
I_8,
|
||||||
|
O_9,
|
||||||
|
P_0,
|
||||||
|
MIN_LB,
|
||||||
|
EQL_RB,
|
||||||
|
SCL_QUO
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_BASE] = LAYOUT(
|
||||||
|
// ,----+----+----+----+----+----|----+----+----+----+----+----+----.
|
||||||
|
// |ESC | Q1 | W2 | E3 | R4 | T5 | Y6 | U7 | I8 | O9 | P0 | -[ | =] |
|
||||||
|
// |----`----`----`----`----`----|----`----`----`----`----`----`----|
|
||||||
|
// | TAB | A | S | D | F | G | H | H | J | K | L | BKSP |
|
||||||
|
// |-----`----`----`----`----`----|----`----`----`----`----`--------|
|
||||||
|
// | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHFT |
|
||||||
|
// |-------`----`----`----`----`----|----`----`----`----`----`------|
|
||||||
|
// | CTL | SYS| ALT | SP SPACE | SPACE | FN1 | CTL | \ | ENT |
|
||||||
|
// `-----+----+-----+----+--------|--------+-----+------+----+------'
|
||||||
|
|
||||||
|
TD(ESC_GR), TD(Q_1), TD(W_2), TD(E_3), TD(R_4), TD(T_5), TD(Y_6), TD(U_7), TD(I_8), TD(O_9), TD(P_0),TD(MIN_LB),TD(EQL_RB), \
|
||||||
|
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD(SCL_QUO), KC_BSPC, \
|
||||||
|
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_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_SPACE, KC_SPACE, KC_FN1, KC_LCTL, KC_NUBS, KC_ENTER
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN1] = LAYOUT_kc(
|
||||||
|
// ,----+----+----+----+----+----|----+----+----+----+----+----+----.
|
||||||
|
// | | | UP | | | | | | | | | | |
|
||||||
|
// |----`----`----`----`----`----|----`----`----`----`----`----`----|
|
||||||
|
// | | LT | DN | RT | | | | | | | ' | DEL |
|
||||||
|
// |-----`----`----`----`----`----|----`----`----`----`----`--------|
|
||||||
|
// | | | | | | | | | | |PIPE| |
|
||||||
|
// |-------`----`----`----`----`----|----`----`----`----`----`------|
|
||||||
|
// | | | | | | | | | | |
|
||||||
|
// `-----+----+-----+----+--------|--------+-----+------+----+------'
|
||||||
|
|
||||||
|
, , UP, , , , , , , , , , , \
|
||||||
|
, LEFT, DOWN, RIGHT, , , , , , , QUOT, DEL, \
|
||||||
|
, , , , , , , , , , NUBS, , \
|
||||||
|
, , , , , , , , ,
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN2] = LAYOUT_kc(
|
||||||
|
// ,----+----+----+----+----+----|----+----+----+----+----+----+----.
|
||||||
|
// | | | | | | | | | | | | | |
|
||||||
|
// |----`----`----`----`----`----|----`----`----`----`----`----`----|
|
||||||
|
// | | | | | | | | | | | | |
|
||||||
|
// |-----`----`----`----`----`----|----`----`----`----`----`--------|
|
||||||
|
// | | | | | | | | | | | | |
|
||||||
|
// |-------`----`----`----`----`----|----`----`----`----`----`------|
|
||||||
|
// | | | | | | | | | | |
|
||||||
|
// `-----+----+-----+----+--------|--------+-----+------+----+------'
|
||||||
|
|
||||||
|
, , , , , , , , , , , , , \
|
||||||
|
, , , , , , , , , , , , \
|
||||||
|
, , , , , , , , , , , , \
|
||||||
|
, , , , , , , , ,
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
void esc_gr_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
register_code (KC_ESC);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
register_code (KC_GRV);
|
||||||
|
} else {
|
||||||
|
register_code (KC_LSFT);
|
||||||
|
register_code (KC_GRV);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void esc_gr_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
unregister_code (KC_ESC);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
unregister_code (KC_GRV);
|
||||||
|
} else {
|
||||||
|
unregister_code (KC_LSFT);
|
||||||
|
unregister_code (KC_GRV);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Tap Dance Definitions
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
[ESC_GR] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, esc_gr_finished, esc_gr_reset), //Tap once for ESC, twice for `, thrice for ~
|
||||||
|
[Q_1] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_1), //Tap once for Q, twice for 1/!
|
||||||
|
[W_2] = ACTION_TAP_DANCE_DOUBLE(KC_W, KC_2), //Tap once for W, twice for 2/@
|
||||||
|
[E_3] = ACTION_TAP_DANCE_DOUBLE(KC_E, KC_3), //Tap once for E, twice for 3/#
|
||||||
|
[R_4] = ACTION_TAP_DANCE_DOUBLE(KC_R, KC_4), //Tap once for R, twice for 4/$
|
||||||
|
[T_5] = ACTION_TAP_DANCE_DOUBLE(KC_T, KC_5), //Tap once for T, twice for 5/%
|
||||||
|
[Y_6] = ACTION_TAP_DANCE_DOUBLE(KC_Y, KC_6), //Tap once for Y, twice for 6/^
|
||||||
|
[U_7] = ACTION_TAP_DANCE_DOUBLE(KC_U, KC_7), //Tap once for U, twice for 7/&
|
||||||
|
[I_8] = ACTION_TAP_DANCE_DOUBLE(KC_I, KC_8), //Tap once for I, twice for 8/*
|
||||||
|
[O_9] = ACTION_TAP_DANCE_DOUBLE(KC_O, KC_9), //Tap once for O, twice for 9/(
|
||||||
|
[P_0] = ACTION_TAP_DANCE_DOUBLE(KC_P, KC_0), //Tap once for P, twice for 0/)
|
||||||
|
[MIN_LB] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_LBRC), //Tap once for -, twice for [/{
|
||||||
|
[EQL_RB] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_RBRC), //Tap once for =, twice for ]/}
|
||||||
|
[SCL_QUO] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_QUOT) //Tap once for ;, '/"
|
||||||
|
// Other declarations would go here, separated by commas, if you have them
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
Executable
+58
@@ -0,0 +1,58 @@
|
|||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6060
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER KeyPCB
|
||||||
|
#define PRODUCT Fractal
|
||||||
|
#define DESCRIPTION Keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 12
|
||||||
|
|
||||||
|
/* key matrix pins */
|
||||||
|
#define MATRIX_ROW_PINS { B1, F7, F6, F5, F4 }
|
||||||
|
#define MATRIX_COL_PINS { B3, B2, B6, B5, B4, E6, D7, C6, D4, D0, D1, D2 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
|
||||||
|
#ifdef BACKLIGHT_PIN
|
||||||
|
#define BACKLIGHT_LEVELS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCING_DELAY 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
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* prevent stuck modifiers */
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef RGB_DI_PIN
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
#define RGBLED_NUM 0
|
||||||
|
#define RGBLIGHT_HUE_STEP 8
|
||||||
|
#define RGBLIGHT_SAT_STEP 8
|
||||||
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
Executable
+1
@@ -0,0 +1 @@
|
|||||||
|
#include "fractal.h"
|
||||||
Executable
+36
@@ -0,0 +1,36 @@
|
|||||||
|
#ifndef FRACTAL_H
|
||||||
|
#define FRACTAL_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define LAYOUT_ortho_5x12( \
|
||||||
|
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
|
||||||
|
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
|
||||||
|
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
|
||||||
|
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, \
|
||||||
|
K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411 \
|
||||||
|
) { \
|
||||||
|
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
|
||||||
|
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
|
||||||
|
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \
|
||||||
|
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 }, \
|
||||||
|
{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_preonic_mit( \
|
||||||
|
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
|
||||||
|
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
|
||||||
|
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
|
||||||
|
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, \
|
||||||
|
K400, K401, K402, K403, K404, K406, K407, K408, K409, K410, K411 \
|
||||||
|
) { \
|
||||||
|
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
|
||||||
|
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
|
||||||
|
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \
|
||||||
|
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 }, \
|
||||||
|
{ K400, K401, K402, K403, K404, KC_NO, K406, K407, K408, K409, K410, K411 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KEYMAP LAYOUT_preonic_mit
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Fractal",
|
||||||
|
"url": "https://keypcb.bigcartel.com/product/fractal-keyboard-group-buy",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 12,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_ortho_5x12": {
|
||||||
|
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}]
|
||||||
|
},
|
||||||
|
"LAYOUT_preonic_mit": {
|
||||||
|
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4, "w":2}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#define STARTUP_SONG SONG(PLANCK_SOUND)
|
||||||
|
// #define STARTUP_SONG SONG(NO_SOUND)
|
||||||
|
|
||||||
|
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
|
||||||
|
SONG(COLEMAK_SOUND), \
|
||||||
|
SONG(DVORAK_SOUND) \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MUSIC_MASK (keycode != KC_NO)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MIDI options
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent use of disabled MIDI features in the keymap */
|
||||||
|
//#define MIDI_ENABLE_STRICT 1
|
||||||
|
|
||||||
|
/* enable basic MIDI features:
|
||||||
|
- MIDI notes can be sent when in Music mode is on
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MIDI_BASIC
|
||||||
|
|
||||||
|
/* enable advanced MIDI features:
|
||||||
|
- MIDI notes can be added to the keymap
|
||||||
|
- Octave shift and transpose
|
||||||
|
- Virtual sustain, portamento, and modulation wheel
|
||||||
|
- etc.
|
||||||
|
*/
|
||||||
|
//#define MIDI_ADVANCED
|
||||||
|
|
||||||
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
|
//#define MIDI_TONE_KEYCODE_OCTAVES 2
|
||||||
|
|
||||||
@@ -0,0 +1,225 @@
|
|||||||
|
/* Copyright 2015-2017 Jack Humbert
|
||||||
|
* Modified by KeyPCB for the Fractal keyboard
|
||||||
|
* Backlight isn't on the Fractal, so I've removed the keycode from the keymaps
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum preonic_layers {
|
||||||
|
_QWERTY,
|
||||||
|
_COLEMAK,
|
||||||
|
_DVORAK,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST
|
||||||
|
};
|
||||||
|
|
||||||
|
enum preonic_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
COLEMAK,
|
||||||
|
DVORAK,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
BACKLIT
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Qwerty
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Ctrl | Alt | GUI |Lower | Bksp | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_QWERTY] = LAYOUT_ortho_5x12( \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Colemak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_COLEMAK] = LAYOUT_ortho_5x12( \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL, \
|
||||||
|
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Dvorak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_DVORAK] = LAYOUT_ortho_5x12( \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||||
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
|
||||||
|
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
|
||||||
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Lower
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_LOWER] = LAYOUT_ortho_5x12( \
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Raise
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_RAISE] = LAYOUT_ortho_5x12( \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Adjust (Lower + Raise)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | Reset| | | | | | | | | | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = LAYOUT_ortho_5x12( \
|
||||||
|
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
|
||||||
|
_______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL, \
|
||||||
|
_______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
|
||||||
|
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_QWERTY);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case COLEMAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_COLEMAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_DVORAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case LOWER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case BACKLIT:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
backlight_step();
|
||||||
|
#endif
|
||||||
|
PORTE &= ~(1<<6);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
PORTE |= (1<<6);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# The Default Fractal Layout
|
||||||
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
Fractal
|
||||||
|
===
|
||||||
|
|
||||||
|
The Fractal keyboard has a layout inspired by keyboards such as Preonic and JJ50. It aims to deliver a good quality but affordable keyboard. It supports Alps and MX switches and uses a Pro Micro as the controller.
|
||||||
|
|
||||||
|
Keyboard Maintainer: The QMK Community
|
||||||
|
Hardware Supported: Fractal
|
||||||
|
Hardware Availability: [KeyPCB](https://keypcb.bigcartel.com/product/fractal-keyboard-group-buy)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make fractal:default
|
||||||
|
|
||||||
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
Executable
+61
@@ -0,0 +1,61 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
|
||||||
|
LAYOUTS = preonic_mit ortho_5x12
|
||||||
|
LAYOUTS_HAS_RGB = no
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 Jun Wako <[email protected]>
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6464
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Lukas
|
||||||
|
#define PRODUCT nicekey
|
||||||
|
#define DESCRIPTION a compliment one key keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 1
|
||||||
|
#define MATRIX_COLS 1
|
||||||
|
|
||||||
|
#define MATRIX_COL_PINS { C6 }
|
||||||
|
#define MATRIX_ROW_PINS { B6 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't 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
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
RANDOM_STRING_MACRO = SAFE_RANGE
|
||||||
|
};
|
||||||
|
|
||||||
|
const int delay = 100;
|
||||||
|
const char *sentences[] = {
|
||||||
|
"I hope you have a great day!\n",
|
||||||
|
"You are an awesome person.\n",
|
||||||
|
"I wish I knew you better, you seem nice!\n",
|
||||||
|
"Your views restore my faith in humanity\n",
|
||||||
|
"You are as cool as a norm-critical disney princess\n",
|
||||||
|
"You have impeccable manners.\n",
|
||||||
|
"You are making me smile\n",
|
||||||
|
"You are making a difference\n",
|
||||||
|
"You bring out the best in other people\n",
|
||||||
|
"You are all that and a super-size bag of chips.\n",
|
||||||
|
"You are not someone I pretend to not see in public.\n",
|
||||||
|
"Are you a beaver, because damn.\n",
|
||||||
|
"I bet you make babies smile.\n",
|
||||||
|
"You are awkward, in a cute way. Like an elevator ride, but with puppies.\n",
|
||||||
|
"Looking like a complete idiot with you is really fun.\n",
|
||||||
|
"If you cooked something really bad, I would tell you instead of eating it.\n",
|
||||||
|
"I love how passionate you are about your hobby.\n",
|
||||||
|
"Our conversations always make me feel better.\n",
|
||||||
|
"It is amazing how far out of your way you go to help people.\n",
|
||||||
|
"I am so glad that you wrote something here.\n",
|
||||||
|
"Hey you! How nice to see a friendly person in my feed!\n",
|
||||||
|
"I hope we know each other for a long time.\n",
|
||||||
|
"I bet if Britney Spears knew you, 2008 would have gone a lot differently.\n",
|
||||||
|
"I would trust you with my passwords.\n",
|
||||||
|
"You are a great problem solver\n",
|
||||||
|
"I would love to hear you laugh!\n",
|
||||||
|
"Please, have a monologue about your week, I just want to listen to you!\n",
|
||||||
|
"You are very far from being Trump.\n",
|
||||||
|
"I think my dog might like you more than me\n",
|
||||||
|
"I feel like you would be a great person to do a group project with\n",
|
||||||
|
"I bet animals love you\n",
|
||||||
|
"I bet even Kanye would like you more than himself\n",
|
||||||
|
"You are just doing a great job at life\n",
|
||||||
|
"I like how you are challenging me.\n",
|
||||||
|
"You would do be a great mother!\n",
|
||||||
|
"I... Baked bread for you.\n",
|
||||||
|
"Wow. You.\n",
|
||||||
|
"You would not have let that balrog pass!\n",
|
||||||
|
"Thank you.\n",
|
||||||
|
"You would be standing out in a crowd\n",
|
||||||
|
"Your sense of style is amazing.\n",
|
||||||
|
"You have a beautiful mind.\n",
|
||||||
|
"I like that big juicy brain of yours\n",
|
||||||
|
"I would share my cinnamon bun with you\n",
|
||||||
|
"I like you more than i like my moms apple pie\n",
|
||||||
|
"You give me the same feeling as a summers night\n",
|
||||||
|
"I enjoy you more than the click of my mechanical switch\n",
|
||||||
|
"I would let you pop my bubble wrap\n",
|
||||||
|
"Being near you is like being inside of a poem\n"
|
||||||
|
};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
if (record->event.pressed) {
|
||||||
|
int sentences_size = sizeof(sentences) / sizeof(sentences[0]);
|
||||||
|
int i = rand() % sentences_size;
|
||||||
|
switch(keycode) {
|
||||||
|
case RANDOM_STRING_MACRO:
|
||||||
|
send_string_with_delay(sentences[i], delay);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
{{ RANDOM_STRING_MACRO }}
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#include "nicekey.h"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#include "quantum.h"
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# nicekey handwired
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
Custom handwired nicekey, a one key keyboard that writes random compliments.
|
||||||
|
|
||||||
|
Keyboard Maintainer: spydon
|
||||||
|
Hardware Supported: Custom handwired one key
|
||||||
|
Hardware Availability:
|
||||||
|
|
||||||
|
Switch must be connected to pins C6 and B6.
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make handwired/nicekey:default
|
||||||
|
|
||||||
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||||
|
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
QC60
|
||||||
|
========
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A split 60% staggered keyboard made by Peioris.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [Peioris](https://github.com/coarse)
|
||||||
|
Hardware Supported: [QC60 PCB](https://imgur.com/6tIxJ1N), Pro Micro
|
||||||
|
Hardware Availability: N/A at the moment
|
||||||
|
|
||||||
|
Handwiring Resources: [Pro Micro Wiring](https://imgur.com/UycEYlG), [Keymapping](http://www.keyboard-layout-editor.com/#/gists/a54720ecfd934155b179657938e8e87b)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make handwired/qc60/proto:default
|
||||||
|
|
||||||
|
Example of flashing this keyboard:
|
||||||
|
|
||||||
|
make handwired/qc60/proto:avrdude
|
||||||
|
|
||||||
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x0C60
|
||||||
|
#define DEVICE_VER 0x00C6
|
||||||
|
#define MANUFACTURER PeiorisBoards
|
||||||
|
#define PRODUCT QC60
|
||||||
|
#define DESCRIPTION Split 60% staggered keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
// Rows are doubled-up
|
||||||
|
#define MATRIX_ROWS 10
|
||||||
|
#define MATRIX_COLS 8
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "QC60",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "coarse",
|
||||||
|
"width": 15,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_ANSI_DEFAULT": {
|
||||||
|
"key_count": 64,
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "x":0, "y":0},
|
||||||
|
{"label":"1", "x":1, "y":0},
|
||||||
|
{"label":"2", "x":2, "y":0},
|
||||||
|
{"label":"3", "x":3, "y":0},
|
||||||
|
{"label":"4", "x":4, "y":0},
|
||||||
|
{"label":"5", "x":5, "y":0},
|
||||||
|
{"label":"6", "x":6, "y":0},
|
||||||
|
|
||||||
|
{"label":"7", "x":7, "y":0},
|
||||||
|
{"label":"8", "x":8, "y":0},
|
||||||
|
{"label":"9", "x":9, "y":0},
|
||||||
|
{"label":"0", "x":10, "y":0},
|
||||||
|
{"label":"-", "x":11, "y":0},
|
||||||
|
{"label":"=", "x":12, "y":0},
|
||||||
|
{"label":"Backspace", "x":13, "y":0, "w":2.0},
|
||||||
|
|
||||||
|
{"label":"Tab", "x":0, "y":1, "w":1.5},
|
||||||
|
{"label":"Q", "x":1.5, "y":1},
|
||||||
|
{"label":"W", "x":2.5, "y":1},
|
||||||
|
{"label":"E", "x":3.5, "y":1},
|
||||||
|
{"label":"R", "x":4.5, "y":1},
|
||||||
|
{"label":"T", "x":5.5, "y":1},
|
||||||
|
|
||||||
|
{"label":"Y", "x":6.5, "y":1},
|
||||||
|
{"label":"U", "x":7.5, "y":1},
|
||||||
|
{"label":"I", "x":8.5, "y":1},
|
||||||
|
{"label":"O", "x":9.5, "y":1},
|
||||||
|
{"label":"P", "x":10.5, "y":1},
|
||||||
|
{"label":"[", "x":11.5, "y":1},
|
||||||
|
{"label":"]", "x":12.5, "y":1},
|
||||||
|
{"label":"\\", "x":13.5, "y":1, "w":1.5},
|
||||||
|
|
||||||
|
{"label":"CapsLock", "x":0, "y":2, "w":1.75},
|
||||||
|
{"label":"A", "x":1.75, "y":2},
|
||||||
|
{"label":"S", "x":2.75, "y":2},
|
||||||
|
{"label":"D", "x":3.75, "y":2},
|
||||||
|
{"label":"F", "x":4.75, "y":2},
|
||||||
|
{"label":"G", "x":5.75, "y":2},
|
||||||
|
|
||||||
|
{"label":"H", "x":6.75, "y":2},
|
||||||
|
{"label":"J", "x":7.75, "y":2},
|
||||||
|
{"label":"K", "x":8.75, "y":2},
|
||||||
|
{"label":"L", "x":9.75, "y":2},
|
||||||
|
{"label":";", "x":10.75, "y":2},
|
||||||
|
{"label":"'", "x":11.75, "y":2},
|
||||||
|
{"label":"Enter", "x":12.75, "y":2, "w":2.25},
|
||||||
|
|
||||||
|
{"label":"Shift", "x":0, "y":3, "w":2.25},
|
||||||
|
{"label":"Z", "x":2.25, "y":3},
|
||||||
|
{"label":"X", "x":3.25, "y":3},
|
||||||
|
{"label":"C", "x":4.25, "y":3},
|
||||||
|
{"label":"V", "x":5.25, "y":3},
|
||||||
|
{"label":"B", "x":6.25, "y":3},
|
||||||
|
|
||||||
|
{"label":"N", "x":7.25, "y":3},
|
||||||
|
{"label":"M", "x":8.25, "y":3},
|
||||||
|
{"label":",", "x":9.25, "y":3},
|
||||||
|
{"label":".", "x":10.25, "y":3},
|
||||||
|
{"label":"/", "x":11.25, "y":3},
|
||||||
|
{"label":"Shift", "x":12.25, "y":3, "w":2.75},
|
||||||
|
|
||||||
|
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
|
||||||
|
{"label":"Win", "x":1.25, "y":4, "w":1.25},
|
||||||
|
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
|
||||||
|
{"x":3.75, "y":4, "w":2.75},
|
||||||
|
{"x":6.5, "y":4, "w":1.25},
|
||||||
|
|
||||||
|
{"x":7.75, "y":4, "w":1.25},
|
||||||
|
{"x":9, "y":4, "w":2.0},
|
||||||
|
{"label":"Alt", "x":11, "y":4},
|
||||||
|
{"label":"Win", "x":12, "y":4},
|
||||||
|
{"label":"Menu", "x":13, "y":4},
|
||||||
|
{"label":"Ctrl", "x":14, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define USE_I2C
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/* Copyright 2018 Michael Pio Mayol <[email protected]>
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _BASE 0
|
||||||
|
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_BASE] = LAYOUT_ansi_default(
|
||||||
|
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_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, RGB_TOG, KC_RGHT, KC_SPC, KC_RALT, KC_UP, KC_DOWN, KC_RCTL
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define USE_SERIAL
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/* Copyright 2018 Michael Pio Mayol <[email protected]>
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _BASE 0
|
||||||
|
#define _FN 1
|
||||||
|
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
#define FN MO(_FN)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_BASE] = LAYOUT_hhkb_split_lshift(
|
||||||
|
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_GRV, KC_DEL, \
|
||||||
|
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_BSPC, \
|
||||||
|
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_LSFT, KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_CAPS, \
|
||||||
|
FN, KC_LALT, KC_SPC, KC_F13, KC_BSLS, KC_SPC, KC_RALT, KC_LGUI
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN] = LAYOUT_hhkb_split_lshift(
|
||||||
|
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, KC_NLCK, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
// wiring of each half
|
||||||
|
#define MATRIX_ROW_PINS { F4, F5, C6, D7, E6 }
|
||||||
|
#define MATRIX_COL_PINS { F7, F6, B1, B3, B2, B6, B5, B4 }
|
||||||
|
#define DIODE_DIRECTION ROW2COL
|
||||||
|
|
||||||
|
/* ws2812 RGB LED */
|
||||||
|
#define RGB_DI_PIN D3
|
||||||
|
#define RGBLED_NUM 1 // Number of LEDs
|
||||||
|
// #define ws2812_PORTREG PORTD
|
||||||
|
// #define ws2812_DDRREG DDRD
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/* Copyright 2018 Michael Pio Mayol <[email protected]>
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qc60.h"
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
matrix_init_user();
|
||||||
|
};
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
/* Copyright 2018 Michael Pio Mayol <[email protected]>
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PROTO_H
|
||||||
|
#define PROTO_H
|
||||||
|
|
||||||
|
#include "qc60.h"
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
// readability
|
||||||
|
#define XXX KC_NO
|
||||||
|
|
||||||
|
/* Split Backspace
|
||||||
|
* {R07, XXX, R05, R04, R03, R02, R01, R00}
|
||||||
|
*
|
||||||
|
* Split Right Shift
|
||||||
|
* {R37, R36, R35, R34, R33, R32, R31, XXX}
|
||||||
|
*
|
||||||
|
* Split Left Shift
|
||||||
|
* {L30, L31, L32, L33, L34, L35, L36, XXX}
|
||||||
|
*
|
||||||
|
* 6-key Bottom-left row
|
||||||
|
* {R47, R46, R45, R44, R43, R42, XXX, XXX}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, R07, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, R37, \
|
||||||
|
L40, L41, L42, L43, L44, R43, R44, R42, R45, R46, R47 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||||
|
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||||
|
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||||
|
{L30, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||||
|
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||||
|
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
|
||||||
|
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||||
|
{R27, R26, R25, R24, R23, R22, R21, XXX}, \
|
||||||
|
{R37, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||||
|
{R47, R46, R45, R44, R43, R42, XXX, XXX}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_ansi_default( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
|
||||||
|
L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L41, L42, L43, L44, R43, R44, R42, R45, R46, R47 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||||
|
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||||
|
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||||
|
{XXX, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||||
|
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||||
|
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
|
||||||
|
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||||
|
{R27, R26, R25, R24, R23, R22, R21, XXX}, \
|
||||||
|
{XXX, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||||
|
{R47, R46, R45, R44, R43, R42, XXX, XXX}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_ansi_alt( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
|
||||||
|
L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L41, L42, L43, L44, R43, R44, R45, R46, R47 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||||
|
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||||
|
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||||
|
{XXX, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||||
|
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||||
|
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
|
||||||
|
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||||
|
{R27, R26, R25, R24, R23, R22, R21, XXX}, \
|
||||||
|
{XXX, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||||
|
{R47, R46, R45, R44, R43, XXX, XXX, XXX}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_iso_default( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R17, R27, \
|
||||||
|
L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L41, L42, L43, L44, R43, R44, R42, R45, R46, R47 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||||
|
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||||
|
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||||
|
{XXX, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||||
|
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||||
|
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
|
||||||
|
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||||
|
{R27, R26, R25, R24, R23, R22, R21, XXX}, \
|
||||||
|
{XXX, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||||
|
{R47, R46, R45, R44, R43, R42, XXX, XXX}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_iso_alt( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
|
||||||
|
L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L41, L42, L43, L44, R43, R44, R45, R46, R47 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||||
|
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||||
|
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||||
|
{XXX, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||||
|
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||||
|
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
|
||||||
|
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||||
|
{R27, R26, R25, R24, R23, R22, R21, XXX}, \
|
||||||
|
{XXX, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||||
|
{R47, R46, R45, R44, R43, XXX, XXX, XXX}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_hhkb_default( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, R07, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
|
||||||
|
L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, R37, \
|
||||||
|
L41, L42, L43, L44, R43, R44, R45, R46 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||||
|
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||||
|
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||||
|
{XXX, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||||
|
{XXX, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||||
|
{R07, R06, R05, R04, R03, R02, R01, R00}, \
|
||||||
|
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||||
|
{R27, R26, R25, R24, R23, R22, R21, XXX}, \
|
||||||
|
{R37, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||||
|
{XXX, R46, R45, R44, R43, XXX, XXX, XXX}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_hhkb_split_lshift( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, R07, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, R37, \
|
||||||
|
L41, L42, L43, L44, R43, R44, R45, R46 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||||
|
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||||
|
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||||
|
{L30, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||||
|
{XXX, L41, L42, L43, L44, XXX, XXX, XXX}, \
|
||||||
|
{R07, R06, R05, R04, R03, R02, R01, R00}, \
|
||||||
|
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||||
|
{R27, R26, R25, R24, R23, R22, R21, XXX}, \
|
||||||
|
{R37, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||||
|
{XXX, R46, R45, R44, R43, XXX, XXX, XXX}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_wkl_default( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
|
||||||
|
L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
|
||||||
|
L40, L42, L43, L44, R43, R44, R45, R47 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
|
||||||
|
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
|
||||||
|
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
|
||||||
|
{XXX, L31, L32, L33, L34, L35, L36, XXX}, \
|
||||||
|
{L40, XXX, L42, L43, L44, XXX, XXX, XXX}, \
|
||||||
|
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
|
||||||
|
{R17, R16, R15, R14, R13, R12, R11, R10}, \
|
||||||
|
{R27, R26, R25, R24, R23, R22, R21, XXX}, \
|
||||||
|
{XXX, R36, R35, R34, R33, R32, R31, XXX}, \
|
||||||
|
{R47, XXX, R45, R44, R43, XXX, XXX, XXX}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#include "qc60.h"
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#ifndef QC60_H
|
||||||
|
#define QC60_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#ifdef KEYBOARD_handwired_qc60_proto
|
||||||
|
#include "proto.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// Used to create a keymap using only KC_ prefixed keys
|
||||||
|
#define LAYOUT_kc( \
|
||||||
|
LA1, LA2, LA3, LA4, LA5, LA6, RA1, RA2, RA3, RA4, RA5, RA6, RA7, \
|
||||||
|
LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB7, \
|
||||||
|
LC1, LC2, LC3, LC4, LC5, LC6, RC1, RC3, RC4, RC5, RC6, RC7, \
|
||||||
|
LD1, LD2, LD3, LD4, LD5, RD1, RD4, RD5, RD6, RD7 \
|
||||||
|
) \
|
||||||
|
LAYOUT( \
|
||||||
|
KC_##LA1, KC_##LA2, KC_##LA3, KC_##LA4, KC_##LA5, KC_##LA6, KC_##RA1, KC_##RA2, KC_##RA3, KC_##RA4, KC_##RA5, KC_##RA6, KC_##RA7, \
|
||||||
|
KC_##LB1, KC_##LB2, KC_##LB3, KC_##LB4, KC_##LB5, KC_##LB6, KC_##RB1, KC_##RB2, KC_##RB3, KC_##RB4, KC_##RB5, KC_##RB7, \
|
||||||
|
KC_##LC1, KC_##LC2, KC_##LC3, KC_##LC4, KC_##LC5, KC_##LC6, KC_##RC1, KC_##RC3, KC_##RC4, KC_##RC5, KC_##RC6, KC_##RC7, \
|
||||||
|
KC_##LD1, KC_##LD2, KC_##LD3, KC_##LD4, KC_##LD5, KC_##RD1, KC_##RD4, KC_##RD5, KC_##RD6, KC_##RD7 \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Bootloader
|
||||||
|
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||||
|
# different sizes, comment this out, and the correct address will be loaded
|
||||||
|
# automatically (+60). See bootloader.mk for all options.
|
||||||
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
|
||||||
|
SPLIT_KEYBOARD = yes
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
DEFAULT_FOLDER = handwired/qc60/proto
|
||||||
@@ -7,6 +7,9 @@
|
|||||||
#ifdef KEYBOARD_helix_rev2
|
#ifdef KEYBOARD_helix_rev2
|
||||||
#include "rev2.h"
|
#include "rev2.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef KEYBOARD_helix_pico
|
||||||
|
#include "pico.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
Copyright 2015 Jack Humbert
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PICO_CONFIG_H
|
||||||
|
#define PICO_CONFIG_H
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x3060
|
||||||
|
#define DEVICE_VER 0x0002
|
||||||
|
#define MANUFACTURER Yushakobo
|
||||||
|
#define PRODUCT HelixPico
|
||||||
|
#define DESCRIPTION A split keyboard for the cheap makers
|
||||||
|
|
||||||
|
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
|
#define TAPPING_TERM 100
|
||||||
|
|
||||||
|
/* Use I2C or Serial */
|
||||||
|
#define USE_I2C
|
||||||
|
#define USE_SERIAL
|
||||||
|
//#define USE_MATRIX_I2C
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
// Helix keyboard OLED support
|
||||||
|
// see ./rules.mk: OLED_ENABLE=yes or no
|
||||||
|
#ifdef OLED_ENABLE
|
||||||
|
#define SSD1306OLED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
// Rows are doubled-up
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
|
||||||
|
|
||||||
|
// wiring of each half
|
||||||
|
#define MATRIX_COLS 7
|
||||||
|
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
|
||||||
|
// #define MATRIX_COL_PINS { B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
// #define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCING_DELAY 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
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Audio */
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#define B5_AUDIO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ws2812 RGB LED */
|
||||||
|
#define RGB_DI_PIN D3
|
||||||
|
#define RGBLIGHT_TIMER
|
||||||
|
//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h
|
||||||
|
#define ws2812_PORTREG PORTD
|
||||||
|
#define ws2812_DDRREG DDRD
|
||||||
|
|
||||||
|
// Helix keyboard RGB LED support
|
||||||
|
//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
|
||||||
|
// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
|
||||||
|
#ifdef RGBLED_BACK
|
||||||
|
#define RGBLED_NUM 25
|
||||||
|
#else
|
||||||
|
#define RGBLED_NUM 6
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef IOS_DEVICE_ENABLE
|
||||||
|
#if RGBLED_NUM <= 6
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 255
|
||||||
|
#else
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 130
|
||||||
|
#endif
|
||||||
|
#define RGBLIGHT_VAL_STEP 17
|
||||||
|
#else
|
||||||
|
#if RGBLED_NUM <= 6
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 90
|
||||||
|
#else
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 45
|
||||||
|
#endif
|
||||||
|
#define RGBLIGHT_VAL_STEP 4
|
||||||
|
#endif
|
||||||
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
|
#define RGBLIGHT_SAT_STEP 17
|
||||||
|
|
||||||
|
#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
|
||||||
|
// USB_MAX_POWER_CONSUMPTION value for Helix keyboard
|
||||||
|
// 120 RGBoff, OLEDoff
|
||||||
|
// 120 OLED
|
||||||
|
// 330 RGB 6
|
||||||
|
// 300 RGB 32
|
||||||
|
// 310 OLED & RGB 32
|
||||||
|
#define USB_MAX_POWER_CONSUMPTION 400
|
||||||
|
#else
|
||||||
|
// fix iPhone and iPad power adapter issue
|
||||||
|
// iOS device need lessthan 100
|
||||||
|
#define USB_MAX_POWER_CONSUMPTION 100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
// #define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
// #define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "HelixPico",
|
||||||
|
"url": "https://github.com/MakotoKurauchi/helix",
|
||||||
|
"maintainer": "MakotoKurauchi",
|
||||||
|
"width": 15,
|
||||||
|
"height": 4,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"key_count": 50,
|
||||||
|
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
This is the c configuration file for the keymap
|
||||||
|
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
Copyright 2015 Jack Humbert
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#define STARTUP_SONG SONG(STARTUP_SOUND)
|
||||||
|
#define AUDIO_CLICKY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* CONFIG_USER_H */
|
||||||
@@ -0,0 +1,474 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "bootloader.h"
|
||||||
|
#ifdef PROTOCOL_LUFA
|
||||||
|
#include "lufa.h"
|
||||||
|
#include "split_util.h"
|
||||||
|
#endif
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#include "audio.h"
|
||||||
|
#endif
|
||||||
|
#ifdef SSD1306OLED
|
||||||
|
#include "ssd1306.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//Following line allows macro to read current RGB settings
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern uint8_t is_master;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_number {
|
||||||
|
_QWERTY = 0,
|
||||||
|
_COLEMAK,
|
||||||
|
_DVORAK,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
COLEMAK,
|
||||||
|
DVORAK,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
BACKLIT,
|
||||||
|
EISU,
|
||||||
|
KANA,
|
||||||
|
RGBRST
|
||||||
|
};
|
||||||
|
|
||||||
|
enum macro_keycodes {
|
||||||
|
KC_SAMPLEMACRO,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
//Macros
|
||||||
|
#define M_SAMPLE M(KC_SAMPLEMACRO)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Qwerty
|
||||||
|
* ,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
* |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_QWERTY] = LAYOUT( \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
|
||||||
|
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
|
||||||
|
ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
/* Colemak
|
||||||
|
* ,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
* |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_COLEMAK] = LAYOUT( \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
|
||||||
|
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
|
||||||
|
ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Dvorak
|
||||||
|
* ,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
* | Tab | ' | , | . | P | Y | | F | G | C | R | L | Bksp |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
|
||||||
|
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
* |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_DVORAK] = LAYOUT( \
|
||||||
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
|
||||||
|
KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
|
||||||
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
|
||||||
|
ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Lower
|
||||||
|
* ,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
* | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | | F12 | | PrSc | Home | End | |
|
||||||
|
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_LOWER] = LAYOUT( \
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSCR, KC_HOME, KC_END, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Raise
|
||||||
|
* ,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | | F12 | | PrSc |PageDn|PageUp| |
|
||||||
|
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_RAISE] = LAYOUT( \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSCR, KC_PGDN, KC_PGUP, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Adjust (Lower + Raise)
|
||||||
|
* ,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
* | | Reset| | | | | | | | | | | |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | |Aud on|Audoff|MU TOG|MU MOD| Mac | | Win |Qwerty|Colemk|Dvorak| | |
|
||||||
|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
* | |CK TOG|CK RST| CK UP|CK DWN| | | | |RGB ON| HUE+ | SAT+ | VAL+ |
|
||||||
|
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | MODE | HUE- | SAT- | VAL- |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = LAYOUT( \
|
||||||
|
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, AU_ON, AU_OFF, MU_TOG, MU_MOD, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
|
||||||
|
_______, CK_TOGG, CK_RST, CK_UP, CK_DOWN, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD \
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
|
||||||
|
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
|
||||||
|
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
|
||||||
|
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
|
||||||
|
float tone_plover[][2] = SONG(PLOVER_SOUND);
|
||||||
|
float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
|
||||||
|
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// define variables for reactive RGB
|
||||||
|
bool TOG_STATUS = false;
|
||||||
|
int RGB_current_mode;
|
||||||
|
|
||||||
|
void persistent_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_update_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setting ADJUST layer RGB back to default
|
||||||
|
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//rgblight_mode(RGB_current_mode);
|
||||||
|
#endif
|
||||||
|
layer_on(layer3);
|
||||||
|
} else {
|
||||||
|
layer_off(layer3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_SONG(tone_qwerty);
|
||||||
|
#endif
|
||||||
|
persistent_default_layer_set(1UL<<_QWERTY);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case COLEMAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_SONG(tone_colemak);
|
||||||
|
#endif
|
||||||
|
persistent_default_layer_set(1UL<<_COLEMAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_SONG(tone_dvorak);
|
||||||
|
#endif
|
||||||
|
persistent_default_layer_set(1UL<<_DVORAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case LOWER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
//not sure how to have keyboard check mode and set it to a variable, so my work around
|
||||||
|
//uses another variable that would be set to true after the first time a reactive key is pressed.
|
||||||
|
if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
|
||||||
|
} else {
|
||||||
|
TOG_STATUS = !TOG_STATUS;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//rgblight_mode(16);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
layer_on(_LOWER);
|
||||||
|
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
|
||||||
|
#endif
|
||||||
|
TOG_STATUS = false;
|
||||||
|
layer_off(_LOWER);
|
||||||
|
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
//not sure how to have keyboard check mode and set it to a variable, so my work around
|
||||||
|
//uses another variable that would be set to true after the first time a reactive key is pressed.
|
||||||
|
if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
|
||||||
|
} else {
|
||||||
|
TOG_STATUS = !TOG_STATUS;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//rgblight_mode(15);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
layer_on(_RAISE);
|
||||||
|
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
|
||||||
|
#endif
|
||||||
|
layer_off(_RAISE);
|
||||||
|
TOG_STATUS = false;
|
||||||
|
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case ADJUST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
//led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
|
||||||
|
case RGB_MOD:
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(RGB_current_mode);
|
||||||
|
rgblight_step();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case EISU:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if(keymap_config.swap_lalt_lgui==false){
|
||||||
|
register_code(KC_LANG2);
|
||||||
|
}else{
|
||||||
|
SEND_STRING(SS_LALT("`"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_LANG2);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case KANA:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if(keymap_config.swap_lalt_lgui==false){
|
||||||
|
register_code(KC_LANG1);
|
||||||
|
}else{
|
||||||
|
SEND_STRING(SS_LALT("`"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_LANG1);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case RGBRST:
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
if (record->event.pressed) {
|
||||||
|
eeconfig_update_rgblight_default();
|
||||||
|
rgblight_enable();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
startup_user();
|
||||||
|
#endif
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
#endif
|
||||||
|
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
|
||||||
|
#ifdef SSD1306OLED
|
||||||
|
iota_gfx_init(!has_usb()); // turns on the display
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
|
||||||
|
void startup_user()
|
||||||
|
{
|
||||||
|
_delay_ms(50); // gets rid of tick
|
||||||
|
}
|
||||||
|
|
||||||
|
void shutdown_user()
|
||||||
|
{
|
||||||
|
_delay_ms(150);
|
||||||
|
stop_all_notes();
|
||||||
|
}
|
||||||
|
|
||||||
|
void music_on_user(void)
|
||||||
|
{
|
||||||
|
music_scale_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void music_scale_user(void)
|
||||||
|
{
|
||||||
|
PLAY_SONG(music_scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
||||||
|
#ifdef SSD1306OLED
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
iota_gfx_task(); // this is what updates the display continuously
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_update(struct CharacterMatrix *dest,
|
||||||
|
const struct CharacterMatrix *source) {
|
||||||
|
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||||
|
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||||
|
dest->dirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//assign the right code to your layers for OLED display
|
||||||
|
#define L_BASE 0
|
||||||
|
#define L_LOWER (1<<_LOWER)
|
||||||
|
#define L_RAISE (1<<_RAISE)
|
||||||
|
#define L_ADJUST (1<<_ADJUST)
|
||||||
|
#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
|
||||||
|
|
||||||
|
static void render_logo(struct CharacterMatrix *matrix) {
|
||||||
|
|
||||||
|
static char logo[]={
|
||||||
|
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
|
||||||
|
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
|
||||||
|
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
|
||||||
|
0};
|
||||||
|
matrix_write(matrix, logo);
|
||||||
|
//matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void render_status(struct CharacterMatrix *matrix) {
|
||||||
|
|
||||||
|
// Render to mode icon
|
||||||
|
static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
|
||||||
|
if(keymap_config.swap_lalt_lgui==false){
|
||||||
|
matrix_write(matrix, logo[0][0]);
|
||||||
|
matrix_write_P(matrix, PSTR("\n"));
|
||||||
|
matrix_write(matrix, logo[0][1]);
|
||||||
|
}else{
|
||||||
|
matrix_write(matrix, logo[1][0]);
|
||||||
|
matrix_write_P(matrix, PSTR("\n"));
|
||||||
|
matrix_write(matrix, logo[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
|
||||||
|
char buf[40];
|
||||||
|
snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
|
||||||
|
matrix_write_P(matrix, PSTR("\nLayer: "));
|
||||||
|
switch (layer_state) {
|
||||||
|
case L_BASE:
|
||||||
|
matrix_write_P(matrix, PSTR("Default"));
|
||||||
|
break;
|
||||||
|
case L_RAISE:
|
||||||
|
matrix_write_P(matrix, PSTR("Raise"));
|
||||||
|
break;
|
||||||
|
case L_LOWER:
|
||||||
|
matrix_write_P(matrix, PSTR("Lower"));
|
||||||
|
break;
|
||||||
|
case L_ADJUST:
|
||||||
|
case L_ADJUST_TRI:
|
||||||
|
matrix_write_P(matrix, PSTR("Adjust"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
matrix_write(matrix, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
char led[40];
|
||||||
|
snprintf(led, sizeof(led), "\n%s %s %s",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
|
||||||
|
matrix_write(matrix, led);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void iota_gfx_task_user(void) {
|
||||||
|
struct CharacterMatrix matrix;
|
||||||
|
|
||||||
|
#if DEBUG_TO_SCREEN
|
||||||
|
if (debug_enable) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
matrix_clear(&matrix);
|
||||||
|
if(is_master){
|
||||||
|
render_status(&matrix);
|
||||||
|
}else{
|
||||||
|
render_logo(&matrix);
|
||||||
|
}
|
||||||
|
matrix_update(&display, &matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
# The Default HelixPico Layout
|
||||||
|
## Layout
|
||||||
|
|
||||||
|
### Qwerty
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
|Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Colemak
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
|Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dvorak
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| Tab | ' | , | . | P | Y | | F | G | C | R | L | Bksp |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
|Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Layers
|
||||||
|
|
||||||
|
|Priority|number|name|description|
|
||||||
|
| ---- | ---- | --- | --- |
|
||||||
|
|high|16|Adjust|Functions|
|
||||||
|
||4|Raise|Numeric charactors|
|
||||||
|
||3|Lower|Other charactors|
|
||||||
|
||2|Dvorak|Dvorak leyout|
|
||||||
|
||1|Colemak|Colemak leyout|
|
||||||
|
|low|0|Qwerty|QWERTY leyout(base)|
|
||||||
|
|
||||||
|
### Lower
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | F7 | F8 | F9 | F10 | F11 | | F12 | | PrSc | Home | End | |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Raise
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | F7 | F8 | F9 | F10 | F11 | | F12 | | PrSc |PageDn|PageUp| |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adjust (Lower + Raise)
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| | Reset| | | | | | | | | | | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| |Aud on|Audoff|MU TOG|MU MOD| Mac | | Win |Qwerty|Colemk|Dvorak| | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| |CK TOG|CK RST| CK UP|CK DWN| | | | |RGB ON| HUE+ | SAT+ | VAL+ |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | | | | MODE | HUE- | SAT- | VAL- |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Customize
|
||||||
|
|
||||||
|
see `qmk_firmware/keyboards/helix/pico/keymaps/default/rules.mk`
|
||||||
|
|
||||||
|
```
|
||||||
|
# Helix keyboard customize
|
||||||
|
# you can edit follows 6 Variables
|
||||||
|
# jp: 以下の6つの変数を必要に応じて編集します。
|
||||||
|
OLED_ENABLE = no # OLED_ENABLE
|
||||||
|
LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
|
||||||
|
LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
|
||||||
|
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
|
||||||
|
|
||||||
|
```
|
||||||
|
## Compile
|
||||||
|
|
||||||
|
go to qmk top directory.
|
||||||
|
```
|
||||||
|
$ cd qmk_firmware
|
||||||
|
```
|
||||||
|
|
||||||
|
build
|
||||||
|
```
|
||||||
|
$ make helix/pico:default
|
||||||
|
```
|
||||||
|
|
||||||
|
flash to keyboard
|
||||||
|
```
|
||||||
|
$ make helix/pico:default:avrdude
|
||||||
|
```
|
||||||
|
|
||||||
|
## Link
|
||||||
|
* more detail wrote in Japanese [helix/Doc/firmware_jp.md](https://github.com/MakotoKurauchi/helix/blob/master/Doc/firmware_jp.md)
|
||||||
|
* [Helix top](https://github.com/MakotoKurauchi/helix)
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
# The Default HelixPico Layout
|
||||||
|
## 配列
|
||||||
|
|
||||||
|
### Qwerty配列
|
||||||
|
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
|Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Lower
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | F7 | F8 | F9 | F10 | F11 | | F12 | | PrSc | Home | End | |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Raise
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | F7 | F8 | F9 | F10 | F11 | | F12 | | PrSc |PageDn|PageUp| |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adjust (Lower + Raise)
|
||||||
|
```
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| | Reset| | | | | | | | | | | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| |Aud on|Audoff|MU TOG|MU MOD| Mac | | Win |Qwerty|Colemk|Dvorak| | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| |CK TOG|CK RST| CK UP|CK DWN| | | | |RGB ON| HUE+ | SAT+ | VAL+ |
|
||||||
|
|------+------+------+------+------+------+-------------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | | | | MODE | HUE- | SAT- | VAL- |
|
||||||
|
`-------------------------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
他の配列(Colemak,Dvorak)は、[readme.md](readme.md) を参照
|
||||||
|
|
||||||
|
## コンパイルの仕方
|
||||||
|
|
||||||
|
コンパイルは、qmk_firmware のトップディレクトリで行います。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cd qmk_firmware
|
||||||
|
```
|
||||||
|
qmk_firmwareでは各キーボードのコンパイルは、`<キーボード名>:<キーマップ名>`という指定で行います。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make helix/pico:default
|
||||||
|
```
|
||||||
|
|
||||||
|
キーボードへの書き込みまで同時に行うには下記のように`:avrdude`を付けます。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make helix/pico:default:avrdude
|
||||||
|
```
|
||||||
|
|
||||||
|
コンパイル結果と中間生成物を消去したい場合は以下のようにします。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make helix/pico:default:clean
|
||||||
|
```
|
||||||
|
|
||||||
|
## カスタマイズ
|
||||||
|
|
||||||
|
オプションの OLED をつけたり、
|
||||||
|
RGB バックライトまたは、RGB Underglow をつけた場合は、
|
||||||
|
`qmk_firmware/keyboards/helix/pico/keymaps/default/rules.mk` の以下の部分を編集して機能を有効化してください。
|
||||||
|
|
||||||
|
```
|
||||||
|
# Helix keyboard customize
|
||||||
|
# you can edit follows 6 Variables
|
||||||
|
# jp: 以下の6つの変数を必要に応じて編集します。
|
||||||
|
OLED_ENABLE = no # OLED_ENABLE
|
||||||
|
LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
|
||||||
|
LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
|
||||||
|
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## RGB バックライトを有効にする
|
||||||
|
|
||||||
|
rules.mk の下記の部分を編集して no を yes に変更してください。
|
||||||
|
|
||||||
|
```
|
||||||
|
LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.)
|
||||||
|
```
|
||||||
|
|
||||||
|
## RGB Underglow を有効にする
|
||||||
|
|
||||||
|
rules.mk の下記の部分を編集して no を yes に変更してください。
|
||||||
|
```
|
||||||
|
LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
|
||||||
|
```
|
||||||
|
|
||||||
|
## OLEDを有効にする
|
||||||
|
|
||||||
|
rules.mk の下記の部分を編集して no を yes に変更してください。
|
||||||
|
```
|
||||||
|
OLED_ENABLE = yes # OLED_ENABLE
|
||||||
|
```
|
||||||
|
|
||||||
|
## iPad/iPhoneサポートを有効にする。
|
||||||
|
|
||||||
|
rules.mk の下記の部分を編集して no を yes に変更してください。
|
||||||
|
RBG Underglow や RGBバックライトの輝度を抑えて、iPad, iPhone にも接続できるようになります。
|
||||||
|
|
||||||
|
```
|
||||||
|
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
|
||||||
|
```
|
||||||
|
|
||||||
|
## リンク
|
||||||
|
|
||||||
|
* さらに詳細は、[こちら helix/Doc/firmware_jp.md](https://github.com/MakotoKurauchi/helix/blob/master/Doc/firmware_jp.md)をご覧ください。
|
||||||
|
* [Helix top](https://github.com/MakotoKurauchi/helix)
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = yes # Audio output on port B5
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
|
define HELIX_CUSTOMISE_MSG
|
||||||
|
$(info Helix customize)
|
||||||
|
$(info - OLED_ENABLE=$(OLED_ENABLE))
|
||||||
|
$(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
|
||||||
|
$(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
|
||||||
|
$(info - LED_ANIMATION=$(LED_ANIMATIONS))
|
||||||
|
$(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
|
||||||
|
endef
|
||||||
|
|
||||||
|
# Helix keyboard customize
|
||||||
|
# you can edit follows 6 Variables
|
||||||
|
# jp: 以下の6つの変数を必要に応じて編集します。
|
||||||
|
OLED_ENABLE = no # OLED_ENABLE
|
||||||
|
LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
|
||||||
|
LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
|
||||||
|
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
|
||||||
|
LED_ANIMATIONS = yes # LED animations
|
||||||
|
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
|
||||||
|
|
||||||
|
#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
|
||||||
|
#### Do not enable these with audio at the same time.
|
||||||
|
|
||||||
|
### Helix keyboard 'default' keymap: convenient command line option
|
||||||
|
## make HELIX=<options> helix:defualt
|
||||||
|
## option= oled | back | under | na | ios
|
||||||
|
## ex.
|
||||||
|
## make HELIX=oled helix:defualt
|
||||||
|
## make HELIX=oled,back helix:defualt
|
||||||
|
## make HELIX=oled,under helix:defualt
|
||||||
|
## make HELIX=oled,back,na helix:defualt
|
||||||
|
## make HELIX=oled,back,ios helix:defualt
|
||||||
|
##
|
||||||
|
ifneq ($(strip $(HELIX)),)
|
||||||
|
ifeq ($(findstring oled,$(HELIX)), oled)
|
||||||
|
OLED_ENABLE = yes
|
||||||
|
endif
|
||||||
|
ifeq ($(findstring back,$(HELIX)), back)
|
||||||
|
LED_BACK_ENABLE = yes
|
||||||
|
else ifeq ($(findstring under,$(HELIX)), under)
|
||||||
|
LED_UNDERGLOW_ENABLE = yes
|
||||||
|
endif
|
||||||
|
ifeq ($(findstring na,$(HELIX)), na)
|
||||||
|
LED_ANIMATIONS = no
|
||||||
|
endif
|
||||||
|
ifeq ($(findstring ios,$(HELIX)), ios)
|
||||||
|
IOS_DEVICE_ENABLE = yes
|
||||||
|
endif
|
||||||
|
$(eval $(call HELIX_CUSTOMISE_MSG))
|
||||||
|
$(info )
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Uncomment these for checking
|
||||||
|
# jp: コンパイル時にカスタマイズの状態を表示したい時はコメントをはずします。
|
||||||
|
# $(eval $(call HELIX_CUSTOMISE_MSG))
|
||||||
|
# $(info )
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_BACK_ENABLE)), yes)
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
OPT_DEFS += -DRGBLED_BACK
|
||||||
|
ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
|
||||||
|
$(eval $(call HELIX_CUSTOMISE_MSG))
|
||||||
|
$(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
|
||||||
|
endif
|
||||||
|
else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
else
|
||||||
|
RGBLIGHT_ENABLE = no
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DIOS_DEVICE_ENABLE
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(LED_ANIMATIONS)), yes)
|
||||||
|
OPT_DEFS += -DRGBLIGHT_ANIMATIONS
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(OLED_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DOLED_ENABLE
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
|
||||||
|
OPT_DEFS += -DLOCAL_GLCDFONT
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Uncomment these for debugging
|
||||||
|
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
|
||||||
|
# $(info -- OPT_DEFS=$(OPT_DEFS))
|
||||||
|
# $(info )
|
||||||
@@ -0,0 +1,351 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* scan matrix
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/wdt.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include "print.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "split_util.h"
|
||||||
|
#include "pro_micro.h"
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
# include "i2c.h"
|
||||||
|
#else // USE_SERIAL
|
||||||
|
# include "serial.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEBOUNCE
|
||||||
|
# define DEBOUNCE 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ERROR_DISCONNECT_COUNT 5
|
||||||
|
|
||||||
|
static uint8_t debouncing = DEBOUNCE;
|
||||||
|
static const int ROWS_PER_HAND = MATRIX_ROWS/2;
|
||||||
|
static uint8_t error_count = 0;
|
||||||
|
uint8_t is_master = 0 ;
|
||||||
|
|
||||||
|
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
|
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
||||||
|
|
||||||
|
/* matrix state(1:on, 0:off) */
|
||||||
|
static matrix_row_t matrix[MATRIX_ROWS];
|
||||||
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
|
static matrix_row_t read_cols(void);
|
||||||
|
static void init_cols(void);
|
||||||
|
static void unselect_rows(void);
|
||||||
|
static void select_row(uint8_t row);
|
||||||
|
static uint8_t matrix_master_scan(void);
|
||||||
|
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_rows(void)
|
||||||
|
{
|
||||||
|
return MATRIX_ROWS;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_cols(void)
|
||||||
|
{
|
||||||
|
return MATRIX_COLS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void)
|
||||||
|
{
|
||||||
|
debug_enable = true;
|
||||||
|
debug_matrix = true;
|
||||||
|
debug_mouse = true;
|
||||||
|
// initialize row and col
|
||||||
|
unselect_rows();
|
||||||
|
init_cols();
|
||||||
|
|
||||||
|
TX_RX_LED_INIT;
|
||||||
|
TXLED0;
|
||||||
|
RXLED0;
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
|
matrix[i] = 0;
|
||||||
|
matrix_debouncing[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_master = has_usb();
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t _matrix_scan(void)
|
||||||
|
{
|
||||||
|
// Right hand is stored after the left in the matirx so, we need to offset it
|
||||||
|
int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
|
||||||
|
select_row(i);
|
||||||
|
_delay_us(30); // without this wait read unstable value.
|
||||||
|
matrix_row_t cols = read_cols();
|
||||||
|
if (matrix_debouncing[i+offset] != cols) {
|
||||||
|
matrix_debouncing[i+offset] = cols;
|
||||||
|
debouncing = DEBOUNCE;
|
||||||
|
}
|
||||||
|
unselect_rows();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debouncing) {
|
||||||
|
if (--debouncing) {
|
||||||
|
_delay_ms(1);
|
||||||
|
} else {
|
||||||
|
for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
|
||||||
|
matrix[i+offset] = matrix_debouncing[i+offset];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
|
||||||
|
// Get rows from other half over i2c
|
||||||
|
int i2c_transaction(void) {
|
||||||
|
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||||
|
|
||||||
|
int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
|
||||||
|
if (err) goto i2c_error;
|
||||||
|
|
||||||
|
// start of matrix stored at 0x00
|
||||||
|
err = i2c_master_write(0x00);
|
||||||
|
if (err) goto i2c_error;
|
||||||
|
|
||||||
|
// Start read
|
||||||
|
err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
|
||||||
|
if (err) goto i2c_error;
|
||||||
|
|
||||||
|
if (!err) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < ROWS_PER_HAND-1; ++i) {
|
||||||
|
matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
|
||||||
|
}
|
||||||
|
matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
|
||||||
|
i2c_master_stop();
|
||||||
|
} else {
|
||||||
|
i2c_error: // the cable is disconnceted, or something else went wrong
|
||||||
|
i2c_reset_state();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // USE_SERIAL
|
||||||
|
|
||||||
|
int serial_transaction(void) {
|
||||||
|
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||||
|
int ret=serial_update_buffers();
|
||||||
|
if (ret ) {
|
||||||
|
if(ret==2)RXLED1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
RXLED0;
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
if (is_master) {
|
||||||
|
matrix_master_scan();
|
||||||
|
}else{
|
||||||
|
matrix_slave_scan();
|
||||||
|
|
||||||
|
// if(serial_slave_DATA_CORRUPT()){
|
||||||
|
// TXLED0;
|
||||||
|
int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
matrix[offset+i] = serial_master_buffer[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// }else{
|
||||||
|
// TXLED1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
matrix_scan_quantum();
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t matrix_master_scan(void) {
|
||||||
|
|
||||||
|
int ret = _matrix_scan();
|
||||||
|
|
||||||
|
#ifndef KEYBOARD_helix_rev1
|
||||||
|
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
// for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
/* i2c_slave_buffer[i] = matrix[offset+i]; */
|
||||||
|
// i2c_slave_buffer[i] = matrix[offset+i];
|
||||||
|
// }
|
||||||
|
#else // USE_SERIAL
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
serial_master_buffer[i] = matrix[offset+i];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
if( i2c_transaction() ) {
|
||||||
|
#else // USE_SERIAL
|
||||||
|
if( serial_transaction() ) {
|
||||||
|
#endif
|
||||||
|
// turn on the indicator led when halves are disconnected
|
||||||
|
TXLED1;
|
||||||
|
|
||||||
|
error_count++;
|
||||||
|
|
||||||
|
if (error_count > ERROR_DISCONNECT_COUNT) {
|
||||||
|
// reset other half if disconnected
|
||||||
|
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
matrix[slaveOffset+i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// turn off the indicator led on no error
|
||||||
|
TXLED0;
|
||||||
|
error_count = 0;
|
||||||
|
}
|
||||||
|
matrix_scan_quantum();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_slave_scan(void) {
|
||||||
|
_matrix_scan();
|
||||||
|
|
||||||
|
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
|
||||||
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
/* i2c_slave_buffer[i] = matrix[offset+i]; */
|
||||||
|
i2c_slave_buffer[i] = matrix[offset+i];
|
||||||
|
}
|
||||||
|
#else // USE_SERIAL
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
serial_slave_buffer[i] = matrix[offset+i];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool matrix_is_modified(void)
|
||||||
|
{
|
||||||
|
if (debouncing) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||||
|
{
|
||||||
|
return (matrix[row] & ((matrix_row_t)1<<col));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
matrix_row_t matrix_get_row(uint8_t row)
|
||||||
|
{
|
||||||
|
return matrix[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void)
|
||||||
|
{
|
||||||
|
print("\nr/c 0123456789ABCDEF\n");
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
phex(row); print(": ");
|
||||||
|
pbin_reverse16(matrix_get_row(row));
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_key_count(void)
|
||||||
|
{
|
||||||
|
uint8_t count = 0;
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||||
|
count += bitpop16(matrix[i]);
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init_cols(void)
|
||||||
|
{
|
||||||
|
for(int x = 0; x < MATRIX_COLS; x++) {
|
||||||
|
_SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF);
|
||||||
|
_SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static matrix_row_t read_cols(void)
|
||||||
|
{
|
||||||
|
matrix_row_t result = 0;
|
||||||
|
for(int x = 0; x < MATRIX_COLS; x++) {
|
||||||
|
result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unselect_rows(void)
|
||||||
|
{
|
||||||
|
for(int x = 0; x < ROWS_PER_HAND; x++) {
|
||||||
|
_SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
|
||||||
|
_SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void select_row(uint8_t row)
|
||||||
|
{
|
||||||
|
_SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
|
||||||
|
_SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#include "helix.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SSD1306OLED
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||||
|
//led_set_user(usb_led);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
};
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#ifndef PICO_H
|
||||||
|
#define PICO_CONFIG_H
|
||||||
|
|
||||||
|
#include "../helix.h"
|
||||||
|
|
||||||
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
//rgb led driver
|
||||||
|
#include "ws2812.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_I2C
|
||||||
|
#include <stddef.h>
|
||||||
|
#ifdef __AVR__
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef FLIP_HALF
|
||||||
|
// Standard Keymap
|
||||||
|
// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
|
||||||
|
#define LAYOUT( \
|
||||||
|
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, KC_NO }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, KC_NO }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, KC_NO }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, L36 }, \
|
||||||
|
{ R05, R04, R03, R02, R01, R00, KC_NO }, \
|
||||||
|
{ R15, R14, R13, R12, R11, R10, KC_NO }, \
|
||||||
|
{ R25, R24, R23, R22, R21, R20, KC_NO }, \
|
||||||
|
{ R35, R34, R33, R32, R31, R30, R36 }, \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// Keymap with right side flipped
|
||||||
|
// (TRRS jack on both halves are to the right)
|
||||||
|
#define LAYOUT( \
|
||||||
|
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
|
||||||
|
L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, KC_NO }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, KC_NO }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, KC_NO }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, L36 }, \
|
||||||
|
{ KC_NO, R00, R01, R02, R03, R04, R05 }, \
|
||||||
|
{ KC_NO, R10, R11, R12, R13, R14, R15 }, \
|
||||||
|
{ KC_NO, R20, R21, R22, R23, R24, R25 }, \
|
||||||
|
{ R36, R30, R31, R32, R33, R34, R35 }, \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
SRC += pico/matrix.c \
|
||||||
|
pico/split_util.c \
|
||||||
|
ws2812.c
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef SOFT_SERIAL_CONFIG_H
|
||||||
|
#define SOFT_SERIAL_CONFIG_H
|
||||||
|
|
||||||
|
/* Soft Serial defines */
|
||||||
|
#define SERIAL_PIN_DDR DDRD
|
||||||
|
#define SERIAL_PIN_PORT PORTD
|
||||||
|
#define SERIAL_PIN_INPUT PIND
|
||||||
|
#define SERIAL_PIN_MASK _BV(PD2)
|
||||||
|
#define SERIAL_PIN_INTERRUPT INT2_vect
|
||||||
|
|
||||||
|
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
|
||||||
|
//// #error rev2 serial config
|
||||||
|
|
||||||
|
#endif /* SOFT_SERIAL_CONFIG_H */
|
||||||
@@ -7,10 +7,8 @@
|
|||||||
#include "split_util.h"
|
#include "split_util.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
#include "config.h"
|
|
||||||
#include "timer.h"
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
#else
|
#else
|
||||||
# include "serial.h"
|
# include "serial.h"
|
||||||
@@ -32,19 +30,17 @@ static void setup_handedness(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void keyboard_master_setup(void) {
|
static void keyboard_master_setup(void) {
|
||||||
#ifdef USE_I2C
|
|
||||||
|
#ifdef USE_MATRIX_I2C
|
||||||
i2c_master_init();
|
i2c_master_init();
|
||||||
#ifdef SSD1306OLED
|
|
||||||
matrix_master_OLED_init ();
|
|
||||||
#endif
|
|
||||||
#else
|
#else
|
||||||
serial_master_init();
|
serial_master_init();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void keyboard_slave_setup(void) {
|
static void keyboard_slave_setup(void) {
|
||||||
timer_init();
|
|
||||||
#ifdef USE_I2C
|
#ifdef USE_MATRIX_I2C
|
||||||
i2c_slave_init(SLAVE_I2C_ADDRESS);
|
i2c_slave_init(SLAVE_I2C_ADDRESS);
|
||||||
#else
|
#else
|
||||||
serial_slave_init();
|
serial_slave_init();
|
||||||
@@ -68,19 +64,7 @@ void split_keyboard_setup(void) {
|
|||||||
sei();
|
sei();
|
||||||
}
|
}
|
||||||
|
|
||||||
void keyboard_slave_loop(void) {
|
|
||||||
matrix_init();
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
matrix_slave_scan();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// this code runs before the usb and keyboard is initialized
|
// this code runs before the usb and keyboard is initialized
|
||||||
void matrix_setup(void) {
|
void matrix_setup(void) {
|
||||||
split_keyboard_setup();
|
split_keyboard_setup();
|
||||||
|
|
||||||
if (!has_usb()) {
|
|
||||||
keyboard_slave_loop();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,6 @@ void matrix_slave_scan(void);
|
|||||||
|
|
||||||
void split_keyboard_setup(void);
|
void split_keyboard_setup(void);
|
||||||
bool has_usb(void);
|
bool has_usb(void);
|
||||||
void keyboard_slave_loop(void);
|
|
||||||
|
|
||||||
void matrix_master_OLED_init (void);
|
void matrix_master_OLED_init (void);
|
||||||
|
|
||||||
@@ -21,98 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#ifndef CONFIG_USER_H
|
#ifndef CONFIG_USER_H
|
||||||
#define CONFIG_USER_H
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
/* Use I2C or Serial */
|
// place overrides here
|
||||||
|
|
||||||
#define USE_I2C
|
|
||||||
#define USE_SERIAL
|
|
||||||
//#define USE_MATRIX_I2C
|
|
||||||
|
|
||||||
/* Select hand configuration */
|
|
||||||
|
|
||||||
#define MASTER_LEFT
|
|
||||||
// #define MASTER_RIGHT
|
|
||||||
// #define EE_HANDS
|
|
||||||
|
|
||||||
// Helix keyboard OLED support
|
|
||||||
// see ./rules.mk: OLED_ENABLE=yes or no
|
|
||||||
#ifdef OLED_ENABLE
|
|
||||||
#define SSD1306OLED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Select rows configuration */
|
|
||||||
// Rows are 4 or 5
|
|
||||||
// #define HELIX_ROWS 5 see ./rules.mk
|
|
||||||
|
|
||||||
/* key matrix size */
|
|
||||||
// Rows are doubled-up
|
|
||||||
#if HELIX_ROWS == 4
|
|
||||||
#define MATRIX_ROWS 8
|
|
||||||
#define MATRIX_COLS 7
|
|
||||||
#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
|
|
||||||
#elif HELIX_ROWS == 5
|
|
||||||
#define MATRIX_ROWS 10
|
|
||||||
#define MATRIX_COLS 7
|
|
||||||
#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 }
|
|
||||||
#else
|
|
||||||
#error "expected HELIX_ROWS 4 or 5"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define PREVENT_STUCK_MODIFIERS
|
|
||||||
#define TAPPING_FORCE_HOLD
|
|
||||||
#define TAPPING_TERM 100
|
|
||||||
|
|
||||||
// Helix keyboard RGB LED support
|
|
||||||
//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
|
|
||||||
// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
|
|
||||||
#ifdef RGBLED_BACK
|
|
||||||
#if HELIX_ROWS == 4
|
|
||||||
#define RGBLED_NUM 25
|
|
||||||
#elif HELIX_ROWS == 5
|
|
||||||
#define RGBLED_NUM 32
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define RGBLED_NUM 6
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef IOS_DEVICE_ENABLE
|
|
||||||
#if RGBLED_NUM <= 6
|
|
||||||
#define RGBLIGHT_LIMIT_VAL 255
|
|
||||||
#else
|
|
||||||
#if HELIX_ROWS == 5
|
|
||||||
#define RGBLIGHT_LIMIT_VAL 120
|
|
||||||
#else
|
|
||||||
#define RGBLIGHT_LIMIT_VAL 130
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#define RGBLIGHT_VAL_STEP 17
|
|
||||||
#else
|
|
||||||
#if RGBLED_NUM <= 6
|
|
||||||
#define RGBLIGHT_LIMIT_VAL 90
|
|
||||||
#else
|
|
||||||
#if HELIX_ROWS == 5
|
|
||||||
#define RGBLIGHT_LIMIT_VAL 35
|
|
||||||
#else
|
|
||||||
#define RGBLIGHT_LIMIT_VAL 45
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#define RGBLIGHT_VAL_STEP 4
|
|
||||||
#endif
|
|
||||||
#define RGBLIGHT_HUE_STEP 10
|
|
||||||
#define RGBLIGHT_SAT_STEP 17
|
|
||||||
|
|
||||||
#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
|
|
||||||
// USB_MAX_POWER_CONSUMPTION value for Helix keyboard
|
|
||||||
// 120 RGBoff, OLEDoff
|
|
||||||
// 120 OLED
|
|
||||||
// 330 RGB 6
|
|
||||||
// 300 RGB 32
|
|
||||||
// 310 OLED & RGB 32
|
|
||||||
#define USB_MAX_POWER_CONSUMPTION 400
|
|
||||||
#else
|
|
||||||
// fix iPhone and iPad power adapter issue
|
|
||||||
// iOS device need lessthan 100
|
|
||||||
#define USB_MAX_POWER_CONSUMPTION 100
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef MOUSEKEY_ENABLE
|
#ifdef MOUSEKEY_ENABLE
|
||||||
#undef MOUSEKEY_INTERVAL
|
#undef MOUSEKEY_INTERVAL
|
||||||
|
|||||||
Loaded 100 of 189 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user