Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2cd80f84a4 | ||
|
|
94f92cedef | ||
|
|
be94e5e591 | ||
|
|
b61653739b | ||
|
|
ce3ccd3f4a | ||
|
|
2fcfd5cff7 | ||
|
|
2b707f3470 | ||
|
|
1acaf2b2c2 | ||
|
|
4cd4e1ded6 | ||
|
|
11f49d6388 | ||
|
|
97d09ef8fa | ||
|
|
3cafc4e7c6 | ||
|
|
097f1a299f | ||
|
|
d12d058bae | ||
|
|
972388447b | ||
|
|
6794a5c9dc | ||
|
|
621ce29a53 | ||
|
|
30680c6eb3 | ||
|
|
a6c770432f | ||
|
|
190fcdde26 | ||
|
|
836efb50c6 | ||
|
|
74f2f855a3 | ||
|
|
e4bbe057f2 | ||
|
|
661ca4440c | ||
|
|
08c682c193 | ||
|
|
9bd6d6112d | ||
|
|
af5f59636e | ||
|
|
3892829d74 | ||
|
|
3c20983055 | ||
|
|
b1935c5e0d | ||
|
|
3916b06168 | ||
|
|
444def8411 |
No files matched your search
@@ -144,6 +144,9 @@ endif
|
|||||||
ifdef MCU_FAMILY
|
ifdef MCU_FAMILY
|
||||||
FIRMWARE_FORMAT?=bin
|
FIRMWARE_FORMAT?=bin
|
||||||
PLATFORM=CHIBIOS
|
PLATFORM=CHIBIOS
|
||||||
|
else ifdef ARM_ATSAM
|
||||||
|
PLATFORM=ARM_ATSAM
|
||||||
|
FIRMWARE_FORMAT=bin
|
||||||
else
|
else
|
||||||
PLATFORM=AVR
|
PLATFORM=AVR
|
||||||
FIRMWARE_FORMAT?=hex
|
FIRMWARE_FORMAT?=hex
|
||||||
@@ -286,6 +289,11 @@ endif
|
|||||||
include $(TMK_PATH)/avr.mk
|
include $(TMK_PATH)/avr.mk
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLATFORM),ARM_ATSAM)
|
||||||
|
include $(TMK_PATH)/arm_atsam.mk
|
||||||
|
include $(TMK_PATH)/protocol/arm_atsam.mk
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(PLATFORM),CHIBIOS)
|
ifeq ($(PLATFORM),CHIBIOS)
|
||||||
include $(TMK_PATH)/protocol/chibios.mk
|
include $(TMK_PATH)/protocol/chibios.mk
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
A QMK collaborator is a keyboard maker/designer that is interested in helping QMK grow and fully support their keyboard(s), and encouraging their users/customers to submit features, ideas, and keymaps. We're always looking to add more keyboards and collaborators, but we ask that they fulfill these requirements:
|
# Becoming a QMK Collaborator
|
||||||
|
|
||||||
* **Have a PCB available for sale** - unfortunately there's just too much variation and complications with handwired keyboards.
|
A QMK collaborator is a keyboard maker or designer that is interested in helping QMK grow and fully support their keyboard(s), and encouraging their users and customers to submit features, ideas, and keymaps. We're always looking to add more keyboards and collaborators, but we ask that they fulfill these requirements:
|
||||||
* **Maintain the your keyboard's directory** - this may just require an initial setup to get your keyboard working, but it could also include accommodating changes made to QMK's core.
|
|
||||||
* **Approve and merge your keyboard's keymap pull requests** - we like to encourage users to contribute their keymaps for others to see and work from when creating their own.
|
* **Have a PCB available for sale.** Unfortunately there's just too much variation and complications with handwired keyboards.
|
||||||
|
* **Maintain your keyboard in QMK.** This may just require an initial setup to get your keyboard working, but it could also include accommodating changes made to QMK's core that might break or render any custom code redundant.
|
||||||
|
* **Approve and merge keymap pull requests for your keyboard.** We like to encourage users to contribute their keymaps for others to see and work from when creating their own.
|
||||||
|
|
||||||
If you feel you meet these requirements, shoot us an email at hello@qmk.fm with an introduction and some links to your keyboard!
|
If you feel you meet these requirements, shoot us an email at hello@qmk.fm with an introduction and some links to your keyboard!
|
||||||
@@ -13,9 +13,11 @@ People often define custom names using `#define`. For example:
|
|||||||
|
|
||||||
This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable.
|
This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable.
|
||||||
|
|
||||||
### Limits of These Aliases
|
### Caveats
|
||||||
|
|
||||||
Currently, the keycodes able to used with these functions are limited to the [Basic Keycodes](keycodes_basic.md), meaning you can't use keycodes like `KC_TILD`, or anything greater than 0xFF. For a full list of the keycodes able to be used see [Basic Keycodes](keycodes_basic.md).
|
Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored.
|
||||||
|
|
||||||
|
Additionally, if at least one right-handed modifier is specified in a Mod Tap or Layer Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two.
|
||||||
|
|
||||||
# Switching and Toggling Layers
|
# Switching and Toggling Layers
|
||||||
|
|
||||||
@@ -55,57 +57,73 @@ Sometimes, you might want to switch between layers in a macro or as part of a ta
|
|||||||
|
|
||||||
# Modifier Keys
|
# Modifier Keys
|
||||||
|
|
||||||
These functions allow you to combine a mod with a keycode. When pressed the keydown for the mod will be sent first, and then *kc* will be sent. When released the keyup for *kc* will be sent and then the mod will be sent.
|
These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent.
|
||||||
|
|
||||||
* `LSFT(kc)` or `S(kc)` - applies left Shift to *kc* (keycode)
|
|Key |Aliases |Description |
|
||||||
* `RSFT(kc)` - applies right Shift to *kc*
|
|----------|----------------------|----------------------------------------------------|
|
||||||
* `LCTL(kc)` - applies left Control to *kc*
|
|`LCTL(kc)`| |Hold Left Control and press `kc` |
|
||||||
* `RCTL(kc)` - applies right Control to *kc*
|
|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
|
||||||
* `LALT(kc)` - applies left Alt to *kc*
|
|`LALT(kc)`| |Hold Left Alt and press `kc` |
|
||||||
* `RALT(kc)` - applies right Alt to *kc*
|
|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
|
||||||
* `LGUI(kc)` - applies left GUI (command/win) to *kc*
|
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|
||||||
* `RGUI(kc)` - applies right GUI (command/win) to *kc*
|
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|
||||||
* `HYPR(kc)` - applies Hyper (all modifiers) to *kc*
|
|`RALT(kc)`| |Hold Right Alt and press `kc` |
|
||||||
* `MEH(kc)` - applies Meh (all modifiers except Win/Cmd) to *kc*
|
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
|
||||||
* `LCAG(kc)` - applies CtrlAltGui to *kc*
|
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
|
||||||
|
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|
||||||
|
|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
|
||||||
|
|`ALTG(kc)`| |Hold Right Control and Alt and press `kc` |
|
||||||
|
|`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` |
|
||||||
|
|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
|
||||||
|
|
||||||
You can also chain these, like this:
|
You can also chain them, for example `LCTL(LALT(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress.
|
||||||
|
|
||||||
LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
|
# Mod-Tap
|
||||||
|
|
||||||
# Mod Tap
|
The Mod-Tap key `MT(mod, kc)` acts like a modifier when held, and a regular keycode when tapped. In other words, you can have a key that sends Escape when you tap it, but functions as a Control or Shift key when you hold it down.
|
||||||
|
|
||||||
`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
|
The modifiers this keycode and `OSM()` accept are prefixed with `MOD_`, not `KC_`:
|
||||||
|
|
||||||
These are the values you can use for the `mod` in `MT()` and `OSM()`:
|
|Modifier |Description |
|
||||||
|
|----------|----------------------------------------|
|
||||||
|
|`MOD_LCTL`|Left Control |
|
||||||
|
|`MOD_LSFT`|Left Shift |
|
||||||
|
|`MOD_LALT`|Left Alt |
|
||||||
|
|`MOD_LGUI`|Left GUI (Windows/Command/Meta key) |
|
||||||
|
|`MOD_RCTL`|Right Control |
|
||||||
|
|`MOD_RSFT`|Right Shift |
|
||||||
|
|`MOD_RALT`|Right Alt |
|
||||||
|
|`MOD_RGUI`|Right GUI (Windows/Command/Meta key) |
|
||||||
|
|`MOD_HYPR`|Hyper (Left Control, Shift, Alt and GUI)|
|
||||||
|
|`MOD_MEH` |Meh (Left Control, Shift, and Alt) |
|
||||||
|
|
||||||
* MOD_LCTL
|
You can combine these by ORing them together like so:
|
||||||
* MOD_LSFT
|
|
||||||
* MOD_LALT
|
|
||||||
* MOD_LGUI
|
|
||||||
* MOD_RCTL
|
|
||||||
* MOD_RSFT
|
|
||||||
* MOD_RALT
|
|
||||||
* MOD_RGUI
|
|
||||||
* MOD_HYPR
|
|
||||||
* MOD_MEH
|
|
||||||
|
|
||||||
These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
|
```c
|
||||||
|
MT(MOD_LCTL | MOD_LSFT, KC_ESC)
|
||||||
|
```
|
||||||
|
|
||||||
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
|
This key would activate Left Control and Left Shift when held, and send Escape when tapped.
|
||||||
|
|
||||||
* `CTL_T(kc)` - is LCTL when held and *kc* when tapped
|
For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap:
|
||||||
* `SFT_T(kc)` - is LSFT when held and *kc* when tapped
|
|
||||||
* `ALT_T(kc)` - is LALT when held and *kc* when tapped
|
|
||||||
* `ALGR_T(kc)` - is AltGr when held and *kc* when tapped
|
|
||||||
* `GUI_T(kc)` - is LGUI when held and *kc* when tapped
|
|
||||||
* `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
|
|
||||||
* `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
|
|
||||||
* `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
|
|
||||||
|
|
||||||
?> 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.
|
|Key |Aliases |Description |
|
||||||
|
|------------|---------------------------------------|-------------------------------------------------------|
|
||||||
?> 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.
|
|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
|
||||||
|
|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
|
||||||
|
|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
|
||||||
|
|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
|
||||||
|
|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
|
||||||
|
|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
|
||||||
|
|`LGUI_T(kc)`|`LCMD_T(kc)`, `RWIN_T(kc)`, `GUI_T(kc)`|Left GUI when held, `kc` when tapped |
|
||||||
|
|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
|
||||||
|
|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
|
||||||
|
|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped|
|
||||||
|
|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
|
||||||
|
|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
|
||||||
|
|`ALL_T(kc)` | |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
|
||||||
|
|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|
||||||
|
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|
||||||
|
|
||||||
# One Shot Keys
|
# One Shot Keys
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ but the `LAYOUT_<layout>` variable must be defined in `<folder>.h` as well.
|
|||||||
|
|
||||||
## Tips for Making Layouts Keyboard-Agnostic
|
## Tips for Making Layouts Keyboard-Agnostic
|
||||||
|
|
||||||
|
### Includes
|
||||||
|
|
||||||
Instead of using `#include "planck.h"`, you can use this line to include whatever `<keyboard>.h` (`<folder>.h` should not be included here) file that is being compiled:
|
Instead of using `#include "planck.h"`, you can use this line to include whatever `<keyboard>.h` (`<folder>.h` should not be included here) file that is being compiled:
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
@@ -72,3 +74,7 @@ For example:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Note that the names are lowercase and match the folder/file names for the keyboard/revision exactly.
|
Note that the names are lowercase and match the folder/file names for the keyboard/revision exactly.
|
||||||
|
|
||||||
|
### Keymaps
|
||||||
|
|
||||||
|
In order to support both split and non-split keyboards with the same layout, you need to use the keyboard agnostic `LAYOUT_<layout name>` macro in your keymap. For instance, in order for a Let's Split and Planck to share the same layout file, you need to use `LAYOUT_ortho_4x12` instead of `LAYOUT_planck_grid` or just `{}` for a C array.
|
||||||
+2
-2
@@ -318,7 +318,7 @@ This is a reference only. Each group of keys links to the page documenting their
|
|||||||
## [Modifiers](feature_advanced_keycodes.md#modifier-keys)
|
## [Modifiers](feature_advanced_keycodes.md#modifier-keys)
|
||||||
|
|
||||||
|Key |Aliases |Description |
|
|Key |Aliases |Description |
|
||||||
|----------|---------- |----------------------------------------------------|
|
|----------|----------------------|----------------------------------------------------|
|
||||||
|`KC_HYPR` | |Hold Left Control, Shift, Alt and GUI |
|
|`KC_HYPR` | |Hold Left Control, Shift, Alt and GUI |
|
||||||
|`KC_MEH` | |Hold Left Control, Shift and Alt |
|
|`KC_MEH` | |Hold Left Control, Shift and Alt |
|
||||||
|`LCTL(kc)`| |Hold Left Control and press `kc` |
|
|`LCTL(kc)`| |Hold Left Control and press `kc` |
|
||||||
@@ -353,7 +353,7 @@ This is a reference only. Each group of keys links to the page documenting their
|
|||||||
|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
|
|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
|
||||||
|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
|
|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
|
||||||
|`ALL_T(kc)` | |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
|
|`ALL_T(kc)` | |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
|
||||||
|`SCMD_T(kc)`|`SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|
|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|
||||||
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|
||||||
|
|
||||||
## [RGB Lighting](feature_rgblight.md)
|
## [RGB Lighting](feature_rgblight.md)
|
||||||
|
|||||||
+28
-23
@@ -12,7 +12,7 @@ You can think of QMK as no different from any other computer program. It is star
|
|||||||
|
|
||||||
The reason for this is the different platforms that QMK supports. The most common platform is `lufa`, which runs on AVR processors such at the atmega32u4. We also support `chibios` and `vusb`.
|
The reason for this is the different platforms that QMK supports. The most common platform is `lufa`, which runs on AVR processors such at the atmega32u4. We also support `chibios` and `vusb`.
|
||||||
|
|
||||||
We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/protocol/lufa/lufa.c#L1129). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/protocol/lufa/lufa.c#L1182). This is [The Main Loop](#the_main_loop).
|
We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/protocol/lufa/lufa.c#L1019). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/protocol/lufa/lufa.c#L1060). This is [The Main Loop](#the-main-loop).
|
||||||
|
|
||||||
## The Main Loop
|
## The Main Loop
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ This section of code is called "The Main Loop" because it's responsible for loop
|
|||||||
keyboard_task();
|
keyboard_task();
|
||||||
```
|
```
|
||||||
|
|
||||||
This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keyboard.c#L154), and it is responsible for detecting changes in the matrix and turning status LED's on and off.
|
This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/common/keyboard.c#L206), and it is responsible for detecting changes in the matrix and turning status LED's on and off.
|
||||||
|
|
||||||
Within `keyboard_task()` you'll find code to handle:
|
Within `keyboard_task()` you'll find code to handle:
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ At the keyboard level we define a C macro (typically named `KEYMAP()`) which map
|
|||||||
|
|
||||||
Notice how the second block of our `KEYMAP()` macro matches the Matrix Scanning array above? This macro is what will map the matrix scanning array to keycodes. However, if you look at a 17 key numpad you'll notice that it has 3 places where the matrix could have a switch but doesn't, due to larger keys. We have populated those spaces with `KC_NO` so that our keymap definition doesn't have to.
|
Notice how the second block of our `KEYMAP()` macro matches the Matrix Scanning array above? This macro is what will map the matrix scanning array to keycodes. However, if you look at a 17 key numpad you'll notice that it has 3 places where the matrix could have a switch but doesn't, due to larger keys. We have populated those spaces with `KC_NO` so that our keymap definition doesn't have to.
|
||||||
|
|
||||||
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
|
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
|
||||||
|
|
||||||
##### Keycode Assignment
|
##### Keycode Assignment
|
||||||
|
|
||||||
@@ -129,27 +129,32 @@ Comparing against our keymap we can see that the pressed key is KC_NLCK. From he
|
|||||||
<!-- FIXME: Magic happens between here and process_record -->
|
<!-- FIXME: Magic happens between here and process_record -->
|
||||||
|
|
||||||
##### Process Record
|
##### Process Record
|
||||||
|
The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is listed below, using cluecard whenever we need to look at the keyboard/keymap level functions. Depending on options set in rule.mk or elsewhere, only a subset of the functions below will be included in final firmware.
|
||||||
|
|
||||||
The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is described below, using cluecard whenever we need to look at the keyboard/keymap level functions.
|
* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/tmk_core/common/action.c#L172)
|
||||||
|
* [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/quantum.c#L193)
|
||||||
* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action.c#L128)
|
* [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/quantum.c#L213)
|
||||||
* [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum.c#L140)
|
* [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_tap_dance.c#L115)
|
||||||
* [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum.c#L143)
|
* [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_key_lock.c#L62)
|
||||||
* [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/card/card.c#L20)
|
* [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_clicky.c#L44)
|
||||||
* [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
|
* [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/keyboards/clueboard/card/card.c#L20)
|
||||||
* [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_midi.c#L102)
|
* [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
|
||||||
* [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_audio.c#L10)
|
* [`bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/fdd0f915271f79b104aa5d216566bcc3fd134e85/quantum/rgb_matrix.c#L139)
|
||||||
* [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_music.c#L69)
|
* [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_midi.c#L81)
|
||||||
* [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_tap_dance.c#L75)
|
* [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_audio.c#L19)
|
||||||
* [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_leader.c#L32)
|
* [`bool process_steno(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_steno.c#L160)
|
||||||
* [`bool process_chording(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_chording.c#L41)
|
* [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_music.c#L114)
|
||||||
* [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_combo.c#L115)
|
* [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_tap_dance.c#L136)
|
||||||
* [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode.c#L22)
|
* [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_leader.c#L38)
|
||||||
* [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c#L91)
|
* [`bool process_chording(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_chording.c#L41)
|
||||||
* [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_printer.c#L77)
|
* [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_combo.c#L115)
|
||||||
* [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_auto_shift.c#L47)
|
* [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_unicode.c#L22)
|
||||||
* [`bool process_unicode_map(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicodemap.c#L47)
|
* [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_ucis.c#L91)
|
||||||
* [Identify and process quantum specific keycodes](https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum.c#L211)
|
* [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_printer.c#L77)
|
||||||
|
* [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_auto_shift.c#L94)
|
||||||
|
* [`bool process_unicode_map(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_unicodemap.c#L47)
|
||||||
|
* [`bool process_terminal(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_terminal.c#L264)
|
||||||
|
* [Identify and process quantum specific keycodes](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/quantum.c#L287)
|
||||||
|
|
||||||
At any step during this chain of events a function (such as `process_record_kb()`) can `return false` to halt all further processing.
|
At any step during this chain of events a function (such as `process_record_kb()`) can `return false` to halt all further processing.
|
||||||
|
|
||||||
|
|||||||
@@ -71,4 +71,4 @@ 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)
|
||||||
|
|
||||||
LAYOUT = ortho_4x4 ortho_4x8 ortho_4x12 ortho_4x16
|
LAYOUTS = ortho_4x4 ortho_4x8 ortho_4x12 ortho_4x16
|
||||||
@@ -71,4 +71,4 @@ 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)
|
||||||
|
|
||||||
LAYOUT = ortho_5x5 ortho_5x10 ortho_5x15
|
LAYOUTS = ortho_5x5 ortho_5x10 ortho_5x15
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#include "at101_blackheart.h"
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#ifndef at101_blackheart_H
|
||||||
|
#define at101_blackheart_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
K0000, K0100, K0001, K0101, K0002, K0102, K0003, K0103, K0004, K0104, K0005, K0105, K0006, K0106, K0007, K0107, \
|
||||||
|
K0200, K0300, K0201, K0301, K0202, K0302, K0203, K0303, K0204, K0304, K0205, K0305, K0206, K0306, K0207, K0307, K0208, K0308, K0209, K0309, K0009, \
|
||||||
|
K0400, K0500, K0401, K0501, K0402, K0502, K0403, K0503, K0404, K0504, K0405, K0505, K0406, K0506, K0407, K0507, K0408, K0508, K0409, K0509, K0109, \
|
||||||
|
K0600, K0700, K0601, K0701, K0602, K0702, K0603, K0703, K0604, K0704, K0605, K0705, K0606, K0608, K0708, K0609, K0709, \
|
||||||
|
K0800, K1101, K0900, K0801, K0901, K0802, K0902, K0803, K0903, K0804, K0904, K0805, K0905, K0806, K0807, K0808, K0908, K0809, K0909, \
|
||||||
|
K1000, K1100, K1001, K1102, K1005, K1105, K1006, K1106, K1007, K1107, K1008, K1108, K1009 \
|
||||||
|
) { \
|
||||||
|
{ K0000, K0001, K0002, K0003, K0004, K0005, K0006, K0007, KC_NO, K0009 }, \
|
||||||
|
{ K0100, K0101, K0102, K0103, K0104, K0105, K0106, K0107, KC_NO, K0109 }, \
|
||||||
|
{ K0200, K0201, K0202, K0203, K0204, K0205, K0206, K0207, K0208, K0209 }, \
|
||||||
|
{ K0300, K0301, K0302, K0303, K0304, K0305, K0306, K0307, K0308, K0309 }, \
|
||||||
|
{ K0400, K0401, K0402, K0403, K0404, K0405, K0406, K0407, K0408, K0409 }, \
|
||||||
|
{ K0500, K0501, K0502, K0503, K0504, K0505, K0506, K0507, K0508, K0509 }, \
|
||||||
|
{ K0600, K0601, K0602, K0603, K0604, K0605, K0606, KC_NO, K0608, K0609 }, \
|
||||||
|
{ K0700, K0701, K0702, K0703, K0704, K0705, KC_NO, KC_NO, K0708, K0709 }, \
|
||||||
|
{ K0800, K0801, K0802, K0803, K0804, K0805, K0806, K0807, K0808, K0809 }, \
|
||||||
|
{ K0900, K0901, K0902, K0903, K0904, K0905, KC_NO, KC_NO, K0908, K0909 }, \
|
||||||
|
{ K1000, K1001, KC_NO, KC_NO, KC_NO, K1005, K1006, K1007, K1008, K1009 }, \
|
||||||
|
{ K1100, K1101, K1102, KC_NO, KC_NO, K1105, K1106, K1107, K1108, KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6060
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER blindassassin111
|
||||||
|
#define PRODUCT AT101_Blackheart PCB
|
||||||
|
#define DESCRIPTION Replacement AT101 PCB
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 12
|
||||||
|
#define MATRIX_COLS 10
|
||||||
|
|
||||||
|
/* key matrix pins */
|
||||||
|
#define MATRIX_ROW_PINS { F0, F1, F4, D4, F6, F5, F7, B6, B5, D5, C7, C6 }
|
||||||
|
#define MATRIX_COL_PINS { D1, D0, B7, B3, B2, B1, B0, E6, D2, D3 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* force n-key rollover*/
|
||||||
|
#define FORCE_NKRO
|
||||||
|
|
||||||
|
/* 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
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
LAYOUT(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK, KC_PAUS,
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_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_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_PEQL,
|
||||||
|
KC_LSFT,KC_BSLS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_LSFT,MO(1), KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||||
|
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI,KC_MENU, KC_RCTL, KC_LEFT,KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
|
||||||
|
|
||||||
|
LAYOUT(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
DDRB |= (1 << 4);
|
||||||
|
DDRD |= (1 << 6) | (1 << 7);
|
||||||
|
|
||||||
|
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
|
||||||
|
PORTD |= (1 << 7);
|
||||||
|
} else {
|
||||||
|
PORTD &= ~(1 << 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||||
|
PORTB |= (1 << 4);
|
||||||
|
} else {
|
||||||
|
PORTB &= ~(1 << 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
|
||||||
|
PORTD |= (1 << 6);
|
||||||
|
} else {
|
||||||
|
PORTD &= ~(1 << 6);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
AT101 Blackheart PCB
|
||||||
|
===
|
||||||
|
|
||||||
|
A replacement PCB for AT101 keyboards.
|
||||||
|
|
||||||
|
Keyboard Maintainer: QMK Community and blindassassin111
|
||||||
|
Hardware Supported: AT101 blackheart PCB
|
||||||
|
Hardware Availability: https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make at101_blackheart: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,59 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = halfkay
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# 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 = no
|
||||||
File renamed without changes.
@@ -8,5 +8,5 @@ Newest version is the [Eagle/Viper V2](http://duck0113.tistory.com/127)
|
|||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make eagle_viper/v2:default
|
make duck/eagle_viper/v2:default
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
DEFAULT_FOLDER = duck/eagle_viper/v2
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -16,7 +16,7 @@
|
|||||||
#ifndef V2_H
|
#ifndef V2_H
|
||||||
#define V2_H
|
#define V2_H
|
||||||
|
|
||||||
#include "../eagle_viper.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define ___ KC_NO
|
#define ___ KC_NO
|
||||||
|
|
||||||
@@ -13,6 +13,6 @@ To get into bootloader mode, hold the top top most key above the 2 navigation ke
|
|||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make jetfire:default
|
make duck/jetfire: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.
|
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.
|
||||||
+14
-16
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2017 MechMerlin <[email protected]>
|
/* Copyright 2018 MechMerlin <[email protected]>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -15,25 +15,23 @@
|
|||||||
*/
|
*/
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
#define _BL 0 // Base Layer
|
||||||
/* layer 0: qwerty */
|
#define _FL 1 // Fn Layer
|
||||||
[0] = LAYOUT_75_ansi(\
|
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL,
|
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
|
|
||||||
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_PGUP,
|
|
||||||
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_PGDN,
|
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
|
||||||
|
|
||||||
[1] = LAYOUT_75_ansi(\
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_BL] = LAYOUT_75_ansi(\
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL,
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
|
||||||
|
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_PGUP,
|
||||||
|
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_PGDN,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
[_FL] = LAYOUT_75_ansi(\
|
||||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
};
|
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|
||||||
return MACRO_NONE;
|
|
||||||
};
|
};
|
||||||
File renamed without changes.
@@ -8,4 +8,4 @@ Newest version is the [Octagon V2](http://duck0113.tistory.com/127)
|
|||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make octagon/v2:default
|
make duck/octagon/v2:default
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
DEFAULT_FOLDER = duck/octagon/v2
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -9,7 +9,7 @@ Hardware Availability: Wait until GB of the next revision
|
|||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make octagon/v1:default
|
make duck/octagon/v1: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.
|
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.
|
||||||
|
|
||||||
File renamed without changes.
File renamed without changes.
@@ -16,7 +16,7 @@
|
|||||||
#ifndef V1_H
|
#ifndef V1_H
|
||||||
#define V1_H
|
#define V1_H
|
||||||
|
|
||||||
#include "../octagon.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define LAYOUT( \
|
#define LAYOUT( \
|
||||||
K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5P, \
|
K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5P, \
|
||||||
@@ -33,4 +33,20 @@
|
|||||||
{ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, KC_NO, K1M, K1N, KC_NO, K1P }, \
|
{ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, KC_NO, K1M, K1N, KC_NO, K1P }, \
|
||||||
{ K0A, K0B, K0C, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, K0K, K0L, KC_NO, K0M, K0N, KC_NO, K0P } \
|
{ K0A, K0B, K0C, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, K0K, K0L, KC_NO, K0M, K0N, KC_NO, K0P } \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_75_ansi( \
|
||||||
|
K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \
|
||||||
|
K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4P, \
|
||||||
|
K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
|
||||||
|
K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2P, \
|
||||||
|
K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1P, \
|
||||||
|
K0A, K0B, K0C, K0G, K0J, K0K, K0L, K0M, K0N, K0P \
|
||||||
|
) { \
|
||||||
|
{ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P }, \
|
||||||
|
{ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, KC_NO, K4P }, \
|
||||||
|
{ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
|
||||||
|
{ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \
|
||||||
|
{ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, KC_NO, K1M, K1N, KC_NO, K1P }, \
|
||||||
|
{ K0A, K0B, K0C, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, K0K, K0L, KC_NO, K0M, K0N, KC_NO, K0P } \
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -16,7 +16,7 @@
|
|||||||
#ifndef V2_H
|
#ifndef V2_H
|
||||||
#define V2_H
|
#define V2_H
|
||||||
|
|
||||||
#include "../octagon.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define LAYOUT( \
|
#define LAYOUT( \
|
||||||
K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5Q, \
|
K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5Q, \
|
||||||
@@ -5,9 +5,13 @@ enum layers {
|
|||||||
_QWERTY,
|
_QWERTY,
|
||||||
_FUN,
|
_FUN,
|
||||||
_MOVE,
|
_MOVE,
|
||||||
_MOUSE
|
_MOUSE,
|
||||||
|
_CMD
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern uint8_t vim_cmd_layer(void) { return _CMD; }
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
[_QWERTY] = LAYOUT(
|
[_QWERTY] = LAYOUT(
|
||||||
@@ -15,21 +19,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
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_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,
|
||||||
LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT, KC_ENT,
|
LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,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, KC_NO,
|
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, KC_NO,
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, VIM_START, TG(_MOUSE), KC_SPC, KC_RGUI, KC_RALT, X_____X, KC_RCTL, MO(_FUN)),
|
LSFT(KC_LALT), KC_LALT, KC_LGUI, VIM_START, TG(_MOUSE), KC_SPC, KC_RGUI, KC_RALT, X_____X, KC_RCTL, MO(_FUN)),
|
||||||
|
|
||||||
[_FUN] = LAYOUT(
|
[_FUN] = 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_DEL,
|
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_DEL,
|
||||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET,
|
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
||||||
TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY)),
|
||||||
|
|
||||||
[_MOVE] = LAYOUT(
|
[_MOVE] = LAYOUT(
|
||||||
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
|
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
|
||||||
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, X_____X, X_____X,
|
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, X_____X, X_____X,
|
||||||
X_____X, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X, X_____X,
|
X_____X, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X, X_____X,
|
||||||
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
|
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
|
||||||
TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY)),
|
||||||
|
|
||||||
|
|
||||||
[_MOUSE] = LAYOUT(
|
[_MOUSE] = LAYOUT(
|
||||||
@@ -37,21 +41,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
X_____X, X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X, X_____X, X_____X,
|
X_____X, X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X, X_____X, X_____X,
|
||||||
X_____X, X_____X,KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X, X_____X,
|
X_____X, X_____X,KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X, X_____X,
|
||||||
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
|
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
|
||||||
TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY)),
|
||||||
|
|
||||||
[_EDIT] = LAYOUT(
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
TO(_QWERTY), _______, _______, VIM_START, _______, _______, _______, _______, _______, _______, _______),
|
|
||||||
|
|
||||||
[_CMD] = LAYOUT(
|
[_CMD] = LAYOUT(
|
||||||
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
|
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
|
||||||
X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, X_____X, X_____X,
|
X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, X_____X, X_____X,
|
||||||
VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, X_____X,
|
VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, X_____X,
|
||||||
VIM_SHIFT, X_____X, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,X_____X,
|
VIM_SHIFT, X_____X, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,X_____X,
|
||||||
TO(_QWERTY), _______, _______, TO(_QWERTY), X_____X, X_____X, _______, _______, _______, _______, _______),
|
_______, _______, _______, TO(_QWERTY), X_____X, X_____X, _______, _______, _______, _______, TO(_QWERTY)),
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
#include "eagle_viper.h"
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#ifndef EAGLE_VIPER_H
|
|
||||||
#define EAGLE_VIPER_H
|
|
||||||
|
|
||||||
#include "quantum.h"
|
|
||||||
|
|
||||||
#ifdef KEYBOARD_eagle_viper_v2
|
|
||||||
#include "v2.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
DEFAULT_FOLDER = eagle_viper/v2
|
|
||||||
|
|
||||||
LAYOUTS = 60_ansi
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#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
|
|
||||||
@@ -1,340 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com>
|
|
||||||
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
|
|
||||||
};
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
# 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)
|
|
||||||

|
|
||||||
@@ -48,8 +48,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
static const uint8_t onboard_row_pins[MATRIX_ROWS] = MATRIX_ONBOARD_ROW_PINS;
|
static const uint8_t onboard_row_pins[MATRIX_ROWS] = MATRIX_ONBOARD_ROW_PINS;
|
||||||
static const uint8_t onboard_col_pins[MATRIX_COLS] = MATRIX_ONBOARD_COL_PINS;
|
static const uint8_t onboard_col_pins[MATRIX_COLS] = MATRIX_ONBOARD_COL_PINS;
|
||||||
static const bool col_expanded[MATRIX_COLS] = COL_EXPANDED;
|
static const bool col_expanded[MATRIX_COLS] = COL_EXPANDED;
|
||||||
static const uint8_t expander_row_pins[MATRIX_ROWS] = MATRIX_EXPANDER_ROW_PINS;
|
|
||||||
static const uint8_t expander_col_pins[MATRIX_COLS] = MATRIX_EXPANDER_COL_PINS;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* matrix state(1:on, 0:off) */
|
/* matrix state(1:on, 0:off) */
|
||||||
@@ -58,12 +56,14 @@ static matrix_row_t matrix[MATRIX_ROWS];
|
|||||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
#if (DIODE_DIRECTION == COL2ROW)
|
#if (DIODE_DIRECTION == COL2ROW)
|
||||||
|
static const uint8_t expander_col_pins[MATRIX_COLS] = MATRIX_EXPANDER_COL_PINS;
|
||||||
static void init_cols(void);
|
static void init_cols(void);
|
||||||
static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
|
static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
|
||||||
static void unselect_rows(void);
|
static void unselect_rows(void);
|
||||||
static void select_row(uint8_t row);
|
static void select_row(uint8_t row);
|
||||||
static void unselect_row(uint8_t row);
|
static void unselect_row(uint8_t row);
|
||||||
#elif (DIODE_DIRECTION == ROW2COL)
|
#elif (DIODE_DIRECTION == ROW2COL)
|
||||||
|
static const uint8_t expander_row_pins[MATRIX_ROWS] = MATRIX_EXPANDER_ROW_PINS;
|
||||||
static void init_rows(void);
|
static void init_rows(void);
|
||||||
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
|
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
|
||||||
static void unselect_cols(void);
|
static void unselect_cols(void);
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
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
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* Use I2C or Serial, not both */
|
||||||
|
|
||||||
|
// #define USE_SERIAL
|
||||||
|
#define USE_I2C
|
||||||
|
#define SCL_CLOCK 400000UL
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
|
||||||
|
//#define DEBUG_MATRIX_SCAN_RATE //Use this to determine scan-rate.
|
||||||
|
#define FORCE_NKRO
|
||||||
|
|
||||||
|
#define QMK_KEYS_PER_SCAN 4 //if we press four keys simultaneously, lets process them simultaneously...
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#define C6_AUDIO
|
||||||
|
#define STARTUP_SONG SONG(STARTUP_SOUND)
|
||||||
|
#define NO_MUSIC_MODE
|
||||||
|
#define TONE_QWERTY SONG(Q__NOTE(_E4));
|
||||||
|
#define TONE_NUMPAD SONG(Q__NOTE(_D4));
|
||||||
|
#endif
|
||||||
|
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Xealous",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "alex-ong",
|
||||||
|
"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,105 @@
|
|||||||
|
#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 _QWERTY 0
|
||||||
|
#define _NUMPAD 1
|
||||||
|
#define _FN 2
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
#define FN MO(_FN)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/*
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |FN | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Ctrl|Gui |Alt | NUM | Space | Space |Alt |FN |Menu |Ctrl |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
/* Layer 0: Qwerty */
|
||||||
|
[_QWERTY] = LAYOUT_split60( \
|
||||||
|
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, \
|
||||||
|
FN, 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, DF(_NUMPAD), KC_SPC, KC_SPC, KC_RALT, FN, KC_APP, KC_RCTL \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | | | | | | | |Nlck| /| *| -| | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | 7| 8| 9| +| | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | 4| 5| 6|Bspc| |Return |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | 1| 2| 3| .| |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | QWE | | 0 | . |A_ON |A_OFF| |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Layer 1: Numpad */
|
||||||
|
[_NUMPAD] = LAYOUT_split60( \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_NLCK, KC_PSLS, KC_PAST, KC_MINUS, _______, _______, KC_BSPC, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PLUS, _______, _______, KC_BSLS, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_BSPC, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_DOT, _______, \
|
||||||
|
_______, _______, _______,DF(_QWERTY), _______, KC_P0, KC_PDOT, AU_ON, AU_OFF, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | ` |F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Delete|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | Caps|pUp| ^ |pDn| | | |pUp| ^ |pDn|PSR|SLK|Pau| |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | < | v | > | |Hom|Hom| < | v | > |INS| DEL| |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | |End|End| |Vo-|Vo+|VoX| |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Layer 2: RAISE */
|
||||||
|
[_FN] = LAYOUT_split60( \
|
||||||
|
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_DEL, \
|
||||||
|
KC_CAPS, KC_PGUP, KC_UP, KC_PGDN, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
|
||||||
|
_______, KC_LEFT, KC_DOWN,KC_RIGHT, _______, KC_HOME, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, _______, \
|
||||||
|
_______, _______, _______, _______, _______, KC_END, KC_END, AU_TOG, KC_VOLD, KC_VOLU, KC_MUTE, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
float tone_qwerty[][2] = TONE_QWERTY;
|
||||||
|
float tone_numpad[][2] = TONE_NUMPAD;
|
||||||
|
|
||||||
|
uint32_t default_layer_state_set_kb(uint32_t state) {
|
||||||
|
if (state == 1UL<<_QWERTY) {
|
||||||
|
PLAY_SONG(tone_qwerty);
|
||||||
|
} else if (state == 1UL<<_NUMPAD) {
|
||||||
|
PLAY_SONG(tone_numpad);
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void led_set_keymap(uint8_t usb_led) {
|
||||||
|
}
|
||||||
@@ -0,0 +1,376 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
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 "wait.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "split_util.h"
|
||||||
|
#include "pro_micro.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "timer.h"
|
||||||
|
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||||
|
#include "matrix_scanrate.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_I2C
|
||||||
|
# include "i2c.h"
|
||||||
|
#else // USE_SERIAL
|
||||||
|
# error "only i2c supported"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEBOUNCING_DELAY
|
||||||
|
# define DEBOUNCING_DELAY 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if (MATRIX_COLS <= 8)
|
||||||
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
|
# define matrix_bitpop(i) bitpop(matrix[i])
|
||||||
|
# define ROW_SHIFTER ((uint8_t)1)
|
||||||
|
#else
|
||||||
|
# error "Currently only supports 8 COLS"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ERROR_DISCONNECT_COUNT 5
|
||||||
|
|
||||||
|
#define ROWS_PER_HAND (MATRIX_ROWS/2)
|
||||||
|
|
||||||
|
static uint8_t error_count = 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* debouncing_matrix_hand_offsetted; //pointer to matrix_debouncing for our hand
|
||||||
|
static matrix_row_t* matrix_hand_offsetted; // pointer to matrix for our hand
|
||||||
|
|
||||||
|
//Debouncing counters
|
||||||
|
typedef uint8_t debounce_counter_t;
|
||||||
|
#define DEBOUNCE_COUNTER_MODULO 250
|
||||||
|
#define DEBOUNCE_COUNTER_INACTIVE 251
|
||||||
|
static debounce_counter_t debounce_counters[MATRIX_ROWS * MATRIX_COLS];
|
||||||
|
static debounce_counter_t *debounce_counters_hand_offsetted;
|
||||||
|
|
||||||
|
|
||||||
|
#if (DIODE_DIRECTION == ROW2COL)
|
||||||
|
error "Only Col2Row supported";
|
||||||
|
#endif
|
||||||
|
static void init_cols(void);
|
||||||
|
static void unselect_rows(void);
|
||||||
|
static void select_row(uint8_t row);
|
||||||
|
static void unselect_row(uint8_t row);
|
||||||
|
static matrix_row_t optimized_col_reader(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) {
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_slave_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)
|
||||||
|
{
|
||||||
|
#ifdef DISABLE_JTAG
|
||||||
|
// JTAG disable for PORT F. write JTD bit twice within four cycles.
|
||||||
|
MCUCR |= (1<<JTD);
|
||||||
|
MCUCR |= (1<<JTD);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
debug_enable = true;
|
||||||
|
debug_matrix = false;
|
||||||
|
debug_mouse = false;
|
||||||
|
// initialize row and col
|
||||||
|
unselect_rows();
|
||||||
|
init_cols();
|
||||||
|
|
||||||
|
TX_RX_LED_INIT;
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
|
matrix[i] = 0;
|
||||||
|
matrix_debouncing[i] = 0;
|
||||||
|
}
|
||||||
|
int my_hand_offset = isLeftHand ? 0 : (ROWS_PER_HAND);
|
||||||
|
debouncing_matrix_hand_offsetted = matrix_debouncing + my_hand_offset;
|
||||||
|
matrix_hand_offsetted = matrix + my_hand_offset;
|
||||||
|
debounce_counters_hand_offsetted = debounce_counters + my_hand_offset;
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS * MATRIX_COLS; i++) {
|
||||||
|
debounce_counters[i] = DEBOUNCE_COUNTER_INACTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//#define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a))
|
||||||
|
void update_debounce_counters(uint8_t current_time)
|
||||||
|
{
|
||||||
|
debounce_counter_t *debounce_pointer = debounce_counters_hand_offsetted;
|
||||||
|
for (uint8_t row = 0; row < ROWS_PER_HAND; row++)
|
||||||
|
{
|
||||||
|
for (uint8_t col = 0; col < MATRIX_COLS; col++)
|
||||||
|
{
|
||||||
|
if (*debounce_pointer != DEBOUNCE_COUNTER_INACTIVE)
|
||||||
|
{
|
||||||
|
if (TIMER_DIFF(current_time, *debounce_pointer, DEBOUNCE_COUNTER_MODULO) >=
|
||||||
|
DEBOUNCING_DELAY) {
|
||||||
|
*debounce_pointer = DEBOUNCE_COUNTER_INACTIVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debounce_pointer++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void transfer_matrix_values(uint8_t current_time)
|
||||||
|
{
|
||||||
|
//upload from debounce_matrix to final matrix;
|
||||||
|
debounce_counter_t *debounce_pointer = debounce_counters_hand_offsetted;
|
||||||
|
for (uint8_t row = 0; row < ROWS_PER_HAND; row++)
|
||||||
|
{
|
||||||
|
matrix_row_t row_value = matrix_hand_offsetted[row];
|
||||||
|
matrix_row_t debounce_value = debouncing_matrix_hand_offsetted[row];
|
||||||
|
|
||||||
|
for (uint8_t col = 0; col < MATRIX_COLS; col++)
|
||||||
|
{
|
||||||
|
bool final_value = debounce_value & (1 << col);
|
||||||
|
bool current_value = row_value & (1 << col);
|
||||||
|
if (*debounce_pointer == DEBOUNCE_COUNTER_INACTIVE
|
||||||
|
&& (current_value != final_value))
|
||||||
|
{
|
||||||
|
*debounce_pointer = current_time;
|
||||||
|
row_value ^= (1 << col);
|
||||||
|
}
|
||||||
|
debounce_pointer++;
|
||||||
|
}
|
||||||
|
matrix_hand_offsetted[row] = row_value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t _matrix_scan(void)
|
||||||
|
{
|
||||||
|
uint8_t current_time = timer_read() % DEBOUNCE_COUNTER_MODULO;
|
||||||
|
|
||||||
|
// Set row, read cols
|
||||||
|
for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
|
||||||
|
select_row(current_row);
|
||||||
|
asm volatile ("nop"); asm volatile("nop");
|
||||||
|
|
||||||
|
debouncing_matrix_hand_offsetted[current_row] = optimized_col_reader();
|
||||||
|
// Unselect row
|
||||||
|
unselect_row(current_row);
|
||||||
|
}
|
||||||
|
|
||||||
|
update_debounce_counters(current_time);
|
||||||
|
transfer_matrix_values(current_time);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 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(I2C_KEYMAP_START);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||||
|
matrix_check_scan_rate();
|
||||||
|
matrix_time_between_scans();
|
||||||
|
#endif
|
||||||
|
uint8_t ret = _matrix_scan();
|
||||||
|
|
||||||
|
if( i2c_transaction() ) {
|
||||||
|
// 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;
|
||||||
|
|
||||||
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
|
i2c_slave_buffer[I2C_KEYMAP_START+i] = matrix[offset+i];
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_slave_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
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(uint8_t x = 0; x < MATRIX_COLS; x++) {
|
||||||
|
uint8_t pin = col_pins[x];
|
||||||
|
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
||||||
|
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
static matrix_row_t optimized_col_reader(void) {
|
||||||
|
//MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5, F4 }
|
||||||
|
return (PINB & (1 << 6) ? 0 : (ROW_SHIFTER << 0)) |
|
||||||
|
(PINB & (1 << 2) ? 0 : (ROW_SHIFTER << 1)) |
|
||||||
|
(PINB & (1 << 3) ? 0 : (ROW_SHIFTER << 2)) |
|
||||||
|
(PINB & (1 << 1) ? 0 : (ROW_SHIFTER << 3)) |
|
||||||
|
(PINF & (1 << 7) ? 0 : (ROW_SHIFTER << 4)) |
|
||||||
|
(PINF & (1 << 6) ? 0 : (ROW_SHIFTER << 5)) |
|
||||||
|
(PINF & (1 << 5) ? 0 : (ROW_SHIFTER << 6)) |
|
||||||
|
(PINF & (1 << 4) ? 0 : (ROW_SHIFTER << 7));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void select_row(uint8_t row)
|
||||||
|
{
|
||||||
|
uint8_t pin = row_pins[row];
|
||||||
|
_SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
|
||||||
|
_SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unselect_row(uint8_t row)
|
||||||
|
{
|
||||||
|
uint8_t pin = row_pins[row];
|
||||||
|
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
||||||
|
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unselect_rows(void)
|
||||||
|
{
|
||||||
|
for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
|
||||||
|
uint8_t pin = row_pins[x];
|
||||||
|
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
||||||
|
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include "wait.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "timer.h"
|
||||||
|
|
||||||
|
#ifdef CONSOLE_ENABLE
|
||||||
|
static uint16_t matrix_scan_count = 0;
|
||||||
|
static uint32_t matrix_timer = 0;
|
||||||
|
void matrix_check_scan_rate(void) {
|
||||||
|
matrix_scan_count++;
|
||||||
|
if (matrix_scan_count > 1000) {
|
||||||
|
uint32_t timer_now = timer_read32();
|
||||||
|
uint16_t ms_per_thousand = TIMER_DIFF_32(timer_now, matrix_timer);
|
||||||
|
uint16_t rate_per_second = 1000000UL / ms_per_thousand;
|
||||||
|
print("scan_rate: ");
|
||||||
|
pdec(rate_per_second);
|
||||||
|
print("\n");
|
||||||
|
matrix_timer = timer_now;
|
||||||
|
matrix_scan_count = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t last_scan_time = 0;
|
||||||
|
void matrix_time_between_scans(void) {
|
||||||
|
if (timer_elapsed(last_scan_time) > 1)
|
||||||
|
{
|
||||||
|
print(">1ms elapsed since last scan: ");
|
||||||
|
pdec(timer_elapsed(last_scan_time));
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
last_scan_time = timer_read();
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
__attribute__((weak))
|
||||||
|
void matrix_check_scan_rate(void) {}
|
||||||
|
__attribute__((weak))
|
||||||
|
void matrix_time_between_scans(void) {}
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
XeaL60
|
||||||
|
======
|
||||||
|
|
||||||
|
Split keyboard firmware for Arduino Pro Micro or other ATmega32u4
|
||||||
|
based boards.
|
||||||
|
|
||||||
|
|
||||||
|
## Build Guide
|
||||||
|
|
||||||
|
A build guide for putting together the Xealous can be found here: https://github.com/alex-ong/Split60
|
||||||
|
|
||||||
|
|
||||||
|
## First Time Setup
|
||||||
|
|
||||||
|
Download or clone the `qmk_firmware` repo and navigate to its top level directory. Once your build environment is setup, you'll be able to generate the default .hex using:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make handwired/xeal60/rev1:default
|
||||||
|
```
|
||||||
|
|
||||||
|
You will see a lot of output and if everything worked correctly you will see the built hex file:
|
||||||
|
|
||||||
|
```
|
||||||
|
handwired_xeal60_rev1_default.hex
|
||||||
|
```
|
||||||
|
|
||||||
|
If you would like to use one of the alternative keymaps, or create your own, copy one of the existing [keymaps](keymaps/) and run make like so:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make handwired/xeal60/rev1:YOUR_KEYMAP_NAME
|
||||||
|
```
|
||||||
|
|
||||||
|
If everything worked correctly you will see a file:
|
||||||
|
|
||||||
|
```
|
||||||
|
handwired_xeal60_rev1_YOUR_KEYMAP_NAME.hex
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/docs/faq_keymap.md) in the main readme.md.
|
||||||
|
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
|
Some features supported by the firmware:
|
||||||
|
|
||||||
|
* Either half can connect to the computer via USB, or both halves can be used
|
||||||
|
independently.
|
||||||
|
* I2C connection between the two halves if for some
|
||||||
|
reason you require a faster connection between the two halves. Note this
|
||||||
|
requires an extra wire between halves and pull-up resistors on the data lines.
|
||||||
|
|
||||||
|
Required Hardware
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Apart from diodes and key switches for the keyboard matrix in each half, you
|
||||||
|
will need:
|
||||||
|
|
||||||
|
* 2 Arduino Pro Micros. You can find these on AliExpress for ≈3.50USD each.
|
||||||
|
* 2 TRRS sockets and 1 TRRS cable, or 2 TRS sockets and 1 TRS cable
|
||||||
|
|
||||||
|
Alternatively, you can use any sort of cable and socket that has at least 4
|
||||||
|
wires. You will need a cable with at least 4 wires and 2x 4.7kΩ pull-up resistors
|
||||||
|
|
||||||
|
Optional Hardware
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
A speaker can be hooked-up to either side to the `5` (`C6`) pin and `GND`, and turned on via `AUDIO_ENABLE`.
|
||||||
|
|
||||||
|
Wiring
|
||||||
|
------
|
||||||
|
|
||||||
|
The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and digital pin 3 (i.e.
|
||||||
|
PD0 on the ATmega32u4) between the two Pro Micros.
|
||||||
|
|
||||||
|
Next, wire your key matrix to any of the remaining 17 IO pins of the pro micro
|
||||||
|
and modify the `matrix.c` accordingly.
|
||||||
|
|
||||||
|
The wiring for serial:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
Notes on Software Configuration
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
Configuring the firmware is similar to any other QMK project. One thing
|
||||||
|
to note is that `MATRIX_ROWS` in `config.h` is the total number of rows between
|
||||||
|
the two halves, i.e. if your split keyboard has 5 rows in each half, then use
|
||||||
|
`MATRIX_ROWS=10`.
|
||||||
|
|
||||||
|
Also, the current implementation assumes a maximum of 8 columns, but it would
|
||||||
|
not be very difficult to adapt it to support more if required.
|
||||||
|
|
||||||
|
Flashing
|
||||||
|
-------
|
||||||
|
From the top level `qmk_firmware` directory run `make KEYBOARD:KEYMAP:avrdude` for automatic serial port resolution and flashing.
|
||||||
|
Example: `make handwired/xeal60/rev1:default:avrdude`
|
||||||
|
|
||||||
|
|
||||||
|
Choosing which board to plug the USB cable into (choosing Master)
|
||||||
|
--------
|
||||||
|
Because the two boards are identical, the firmware has logic to differentiate the left and right board.
|
||||||
|
|
||||||
|
It uses two strategies to figure things out: looking at the EEPROM (memory on the chip) or looking if the current board has the usb cable.
|
||||||
|
|
||||||
|
The EEPROM approach requires additional setup (flashing the eeprom) but allows you to swap the usb cable to either side.
|
||||||
|
|
||||||
|
The USB cable approach is easier to setup and if you just want the usb cable on the left board, you do not need to do anything extra.
|
||||||
|
|
||||||
|
### Setting the left hand as master
|
||||||
|
If you always plug the usb cable into the left board, nothing extra is needed as this is the default. Comment out `EE_HANDS` and comment out `I2C_MASTER_RIGHT` or `MASTER_RIGHT` if for some reason it was set.
|
||||||
|
|
||||||
|
### Setting the right hand as master
|
||||||
|
If you always plug the usb cable into the right board, add an extra flag to your `config.h`
|
||||||
|
```
|
||||||
|
#define MASTER_RIGHT
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setting EE_hands to use either hands as master
|
||||||
|
If you define `EE_HANDS` in your `config.h`, you will need to set the
|
||||||
|
EEPROM for the left and right halves.
|
||||||
|
|
||||||
|
The EEPROM is used to store whether the
|
||||||
|
half is left handed or right handed. This makes it so that the same firmware
|
||||||
|
file will run on both hands instead of having to flash left and right handed
|
||||||
|
versions of the firmware to each half. To flash the EEPROM file for the left
|
||||||
|
half run:
|
||||||
|
```
|
||||||
|
avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep
|
||||||
|
// or the equivalent in dfu-programmer
|
||||||
|
|
||||||
|
```
|
||||||
|
and similarly for right half
|
||||||
|
```
|
||||||
|
avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep
|
||||||
|
// or the equivalent in dfu-programmer
|
||||||
|
```
|
||||||
|
|
||||||
|
NOTE: replace `$(COM_PORT)` with the port of your device (e.g. `/dev/ttyACM0`)
|
||||||
|
|
||||||
|
After you have flashed the EEPROM, you then need to set `EE_HANDS` in your config.h, rebuild the hex files and reflash.
|
||||||
|
|
||||||
|
Note that you need to program both halves, but you have the option of using
|
||||||
|
different keymaps for each half. You could program the left half with a QWERTY
|
||||||
|
layout and the right half with a Colemak layout using bootmagic's default layout option.
|
||||||
|
Then if you connect the left half to a computer by USB the keyboard will use QWERTY and Colemak when the
|
||||||
|
right half is connected.
|
||||||
|
|
||||||
|
|
||||||
|
Notes on Using Pro Micro 3.3V
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Do update the `F_CPU` parameter in `rules.mk` to `8000000` which reflects
|
||||||
|
the frequency on the 3.3V board.
|
||||||
|
|
||||||
|
Also, if the slave board is producing weird characters in certain columns,
|
||||||
|
update the following line in `matrix.c` to the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
// _delay_us(30); // without this wait read unstable value.
|
||||||
|
_delay_us(300); // without this wait read unstable value.
|
||||||
|
```
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
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 REV1_CONFIG_H
|
||||||
|
#define REV1_CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x4131
|
||||||
|
#define PRODUCT_ID 0x5141
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER XeaLouS
|
||||||
|
#define PRODUCT XeaL60
|
||||||
|
#define DESCRIPTION A split keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
// Rows are doubled-up
|
||||||
|
#define MATRIX_ROWS 10
|
||||||
|
#define MATRIX_COLS 8
|
||||||
|
|
||||||
|
// wiring of each half
|
||||||
|
// Ascii art of pro micro. Pin names PD3, PD2, etc.
|
||||||
|
//Usage| Name | Label Label| Name | Usage
|
||||||
|
// PORT
|
||||||
|
// | PD3 TX0 RAW |
|
||||||
|
// | PD2 RX1 GND |SerGnd
|
||||||
|
// | GND RESET |
|
||||||
|
// | GND VCC |SerVCc
|
||||||
|
// | PD1 2 A3 PF4 | Col7
|
||||||
|
//Ser | PD0 3 A2 PF5 | Col6
|
||||||
|
//Row4 | PD4 4 A1 PF6 | Col5
|
||||||
|
//AUDIO| PC6 5 A0 PF7 | Col4
|
||||||
|
//Row3 | PD7 6 15 PB1 | Col3
|
||||||
|
//Row2 | PE6 7 14 PB3 | Col2
|
||||||
|
//Row1 | PB4 8 13 PB2 | Col1
|
||||||
|
//Row0 | PB5 9 10 PB6 | Col0
|
||||||
|
|
||||||
|
// Note reservation of C6 for audio
|
||||||
|
#define MATRIX_ROW_PINS { B5, B4, E6, D7, D4 }
|
||||||
|
#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5, F4 }
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
#define IGNORE_MOD_TAP_INTERRUPT
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#include "quantum.h"
|
||||||
|
#include "rev1.h"
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#ifndef REV1_H
|
||||||
|
#define REV1_H
|
||||||
|
|
||||||
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
#define XXX KC_NO
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R17, R16, R15, R14, R13, R12, R11, R10, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R26, R25, R24, R23, R22, R21, R20, \
|
||||||
|
L30, L31, L32, L33, L34, L35, R35, R34, R33, R32, R31, R30, \
|
||||||
|
L40, L41, L42, L43, L44, R44, R43, R42, R41, R40 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ XXX, L06, L05, L04, L03, L02, L01, L00 }, \
|
||||||
|
{ XXX, XXX, L15, L14, L13, L12, L11, L10 }, \
|
||||||
|
{ XXX, XXX, L25, L24, L23, L22, L21, L20 }, \
|
||||||
|
{ XXX, XXX, L35, L34, L33, L32, L31, L30 }, \
|
||||||
|
{ XXX, XXX, XXX, L44, L43, L42, L41, L40 }, \
|
||||||
|
{ R00, R01, R02, R03, R04, R05, R06, XXX }, \
|
||||||
|
{ R10, R11, R12, R13, R14, R15, R16, R17 }, \
|
||||||
|
{ R20, R21, R22, R23, R24, R25, R26, XXX }, \
|
||||||
|
{ R30, R31, R32, R33, R34, R35, XXX, XXX }, \
|
||||||
|
{ R40, R41, R42, R43, R44, XXX, XXX, XXX } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_split60 LAYOUT
|
||||||
|
|
||||||
|
#endif
|
||||||
Whitespace-only changes.
@@ -0,0 +1,73 @@
|
|||||||
|
SRC += matrix_scanrate.c matrix.c
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
# 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 = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = yes # 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 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 # Use shared split_common code
|
||||||
|
SUBPROJECT_rev1 = 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
|
||||||
|
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
|
LAYOUTS = split60
|
||||||
|
|
||||||
|
DEFAULT_FOLDER = handwired/xealous/rev1
|
||||||
@@ -2,9 +2,6 @@ SRC += i2c.c
|
|||||||
SRC += serial.c
|
SRC += serial.c
|
||||||
SRC += ssd1306.c
|
SRC += ssd1306.c
|
||||||
|
|
||||||
# if firmware size over limit, try this option
|
|
||||||
# CFLAGS += -flto
|
|
||||||
|
|
||||||
# MCU name
|
# MCU name
|
||||||
#MCU = at90usb1287
|
#MCU = at90usb1287
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|||||||
@@ -2,36 +2,34 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
#define KC_ALAP ALT_T(KC_APP)
|
|
||||||
#define KC_OSLG OSM(MOD_LGUI)
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
[_QWERTY] = LAYOUT_wrapper(
|
[_QWERTY] = LAYOUT_wrapper(
|
||||||
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
|
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
|
||||||
KC_TAB , _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS,
|
KC_TAB , _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS,
|
||||||
KC_CCCV, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
|
KC_C1R3, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
|
||||||
KC_MLSF, _________________QWERTY_L3_________________, KC_ALAP, KC_OSLG, _________________QWERTY_R3_________________, KC_MRSF,
|
KC_MLSF, _________________QWERTY_L3_________________, ALT_APP, OS_RGUI, _________________QWERTY_R3_________________, KC_MRSF,
|
||||||
LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
|
LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
|
||||||
),
|
),
|
||||||
[_COLEMAK] = LAYOUT_wrapper(
|
[_COLEMAK] = LAYOUT_wrapper(
|
||||||
KC_ESC , ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
|
KC_ESC , ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
|
||||||
KC_TAB , _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSLS,
|
KC_TAB , _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSLS,
|
||||||
KC_CCCV, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT,
|
KC_C1R3, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT,
|
||||||
KC_MLSF, _________________COLEMAK_L3________________, KC_ALAP, KC_OSLG, _________________COLEMAK_R3________________, KC_MRSF,
|
KC_MLSF, _________________COLEMAK_L3________________, ALT_APP, OS_RGUI, _________________COLEMAK_R3________________, KC_MRSF,
|
||||||
LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
|
LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
|
||||||
),
|
),
|
||||||
[_DVORAK] = LAYOUT_wrapper(
|
[_DVORAK] = LAYOUT_wrapper(
|
||||||
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
|
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
|
||||||
KC_TAB , _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSLS,
|
KC_TAB , _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSLS,
|
||||||
KC_CCCV, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_QUOT,
|
KC_C1R3, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_QUOT,
|
||||||
KC_MLSF, _________________DVORAK_L3_________________, KC_ALAP, KC_OSLG, _________________DVORAK_R3_________________, KC_MRSF,
|
KC_MLSF, _________________DVORAK_L3_________________, ALT_APP, OS_RGUI, _________________DVORAK_R3_________________, KC_MRSF,
|
||||||
LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
|
LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
|
||||||
),
|
),
|
||||||
[_WORKMAN] = LAYOUT_wrapper(
|
[_WORKMAN] = LAYOUT_wrapper(
|
||||||
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
|
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
|
||||||
KC_TAB , _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSLS,
|
KC_TAB , _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSLS,
|
||||||
KC_CCCV, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT,
|
KC_C1R3, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT,
|
||||||
KC_MLSF, _________________WORKMAN_L3________________, KC_ALAP, KC_OSLG, _________________WORKMAN_R3________________, KC_MRSF,
|
KC_MLSF, _________________WORKMAN_L3________________, ALT_APP, OS_RGUI, _________________WORKMAN_R3________________, KC_MRSF,
|
||||||
LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
|
LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
|
||||||
),
|
),
|
||||||
|
|
||||||
@@ -53,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
|
|
||||||
[_LOWER] = LAYOUT_wrapper(
|
[_LOWER] = LAYOUT_wrapper(
|
||||||
_______, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, _______,
|
KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11,
|
||||||
KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, _______,
|
KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, _______,
|
||||||
_______, ___________________BLANK___________________, _________________LOWER_R2__________________, KC_PIPE,
|
_______, ___________________BLANK___________________, _________________LOWER_R2__________________, KC_PIPE,
|
||||||
_______, ___________________BLANK___________________, _______, _______, _________________LOWER_R3__________________, _______,
|
_______, ___________________BLANK___________________, _______, _______, _________________LOWER_R3__________________, _______,
|
||||||
@@ -61,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
),
|
),
|
||||||
|
|
||||||
[_RAISE] = LAYOUT_wrapper(
|
[_RAISE] = LAYOUT_wrapper(
|
||||||
_______, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, _______,
|
KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11,
|
||||||
KC_GRV, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
|
KC_GRV, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
|
||||||
_______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
|
_______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
|
||||||
_______, _________________RAISE_L3__________________, _______, _______, _________________RAISE_R3__________________, _______,
|
_______, _________________RAISE_L3__________________, _______, _______, _________________RAISE_R3__________________, _______,
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ SWAP_HANDS_ENABLE = no
|
|||||||
|
|
||||||
INDICATOR_LIGHTS = yes
|
INDICATOR_LIGHTS = yes
|
||||||
MACROS_ENABLED = no
|
MACROS_ENABLED = no
|
||||||
RGBLIGHT_TWINKLE = yes
|
RGBLIGHT_TWINKLE = no
|
||||||
|
|
||||||
BOOTLOADER = qmk-dfu
|
BOOTLOADER = qmk-dfu
|
||||||
@@ -78,454 +78,327 @@ qk_tap_dance_action_t tap_dance_actions[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Fundtion Row Keys
|
|
||||||
/ (Identical across layers, unless otherwise noted; Numpad is a toggle; Adjust is mometary)
|
|
||||||
* ,-----------------------------------------------------------------------------------------------------------.
|
|
||||||
* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
|
||||||
* `-----------------------------------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Colemak
|
/* Colemak
|
||||||
* (Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
|
(Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
|
||||||
* ,-------------------------------------------. ,-------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
|
,-------------------------------------------. ,-------------------------------------------.
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
* |Esc/Ctrl| A | R | S | T | D | | H | N | E | I | O | ' |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
|
||||||
* |SC Shift| Z | X | C | V | B | | K | M | , | . | / |SC Shift|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
|Esc/Ctrl| A | R | S | T | D | | H | N | E | I | O | ' |
|
||||||
* | Ins | ` | [ | ] | | Left | Down | Up | Right|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `---------------------------' `---------------------------'
|
|SC Shift| Z | X | C | V | B | | K | M | , | . | / |SC Shift|
|
||||||
* ,---------------. ,---------------.
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
* |Esc/Ctl| Hyper | | RAlt | RCtl |
|
| Ins | ` | [ | ] | | Left | Down | Up | Right|
|
||||||
* ,-------|-------|-------| |-------+-------+-------.
|
`---------------------------' `---------------------------'
|
||||||
* | Space | Enter |App/Alt| | RGUI | Delete| Bspc |
|
,---------------. ,---------------.
|
||||||
* | / | / |-------| |-------| / | / |
|
|Esc/Ctl| Hyper | | RAlt | RCtl |
|
||||||
* | Fn | Number| Bspc | | Enter |Number2| Fn2 |
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
* `-----------------------' `-----------------------'
|
| Space | Enter |App/Alt| | RGUI | Delete| Bspc |
|
||||||
|
| / | / |-------| |-------| / | / |
|
||||||
|
| Fn | Number| Bspc | | Enter |Number2| Fn2 |
|
||||||
|
`-----------------------' `-----------------------'
|
||||||
*/
|
*/
|
||||||
[_COLEMAK] = LAYOUT(
|
[_COLEMAK] = LAYOUT_pretty(
|
||||||
// Left Hand
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
|
KC_EQL, 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_1, KC_2, KC_3, KC_4, KC_5,
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
|
||||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G,
|
CTLESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||||
CTLESC, KC_A, KC_R, KC_S, KC_T, KC_D,
|
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
||||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B,
|
KC_INS, KC_GRV, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||||
KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
|
CTLESC, ALL_T(KC_NO), KC_RALT, KC_RCTL,
|
||||||
//Left Thumb
|
ALTAPP, KC_RGUI,
|
||||||
CTLESC, ALL_T(KC_NO),
|
SPCFN, ENTNS, KC_BSPC, KC_ENT, DELNS, BSPCFN
|
||||||
ALTAPP,
|
|
||||||
SPCFN, ENTNS, KC_BSPC,
|
|
||||||
//Right Hand
|
|
||||||
KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
|
|
||||||
KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
|
||||||
KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
|
|
||||||
KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
|
||||||
KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
|
||||||
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
|
||||||
//Right Thumb
|
|
||||||
KC_RALT, KC_RCTL,
|
|
||||||
KC_RGUI,
|
|
||||||
KC_ENT, DELNS, BSPCFN
|
|
||||||
),
|
),
|
||||||
|
|
||||||
/* QWERTY
|
/* QWERTY
|
||||||
* (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
|
(Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
|
||||||
* ,-------------------------------------------. ,-------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
|
,-------------------------------------------. ,-------------------------------------------.
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
* |Esc/Ctrl| A | S | D | F | G | | H | J | K | L | ; | ' |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
|
||||||
* |SC Shift| Z | X | C | V | B | | N | M | , | . | / |SC Shift|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
|Esc/Ctrl| A | S | D | F | G | | H | J | K | L | ; | ' |
|
||||||
* | Ins | ` | [ | ] | | Left | Down | Up | Right|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `---------------------------' `---------------------------'
|
|SC Shift| Z | X | C | V | B | | N | M | , | . | / |SC Shift|
|
||||||
* ,---------------. ,---------------.
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
* |Esc/Ctl| Hyper | | RAlt | RCtl |
|
| Ins | ` | [ | ] | | Left | Down | Up | Right|
|
||||||
* ,-------|-------|-------| |-------+-------+-------.
|
`---------------------------' `---------------------------'
|
||||||
* | Space | Enter |App/Alt| | RGUI | Delete| Bspc |
|
,---------------. ,---------------.
|
||||||
* | / | / |-------| |-------| / | / |
|
|Esc/Ctl| Hyper | | RAlt | RCtl |
|
||||||
* | Fn | Number| Bspc | | Enter |Number2| Fn2 |
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
* `-----------------------' `-----------------------'
|
| Space | Enter |App/Alt| | RGUI | Delete| Bspc |
|
||||||
|
| / | / |-------| |-------| / | / |
|
||||||
|
| Fn | Number| Bspc | | Enter |Number2| Fn2 |
|
||||||
|
`-----------------------' `-----------------------'
|
||||||
*/
|
*/
|
||||||
[_QWERTY] = LAYOUT(
|
[_QWERTY] = LAYOUT_pretty(
|
||||||
// Left Hand
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
|
KC_EQL, 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_1, KC_2, KC_3, KC_4, KC_5,
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
|
CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B,
|
KC_INS, KC_GRV, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||||
KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
|
CTLESC, ALL_T(KC_NO), KC_RALT, KC_RCTL,
|
||||||
//Left Thumb
|
ALTAPP, KC_RGUI,
|
||||||
CTLESC, ALL_T(KC_NO),
|
SPCFN, ENTNS, KC_BSPC, KC_ENT, DELNS, BSPCFN
|
||||||
ALTAPP,
|
|
||||||
SPCFN, ENTNS, KC_BSPC,
|
|
||||||
|
|
||||||
//Right Hand
|
|
||||||
KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
|
|
||||||
KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
|
||||||
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
|
||||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
|
||||||
KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
|
||||||
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
|
||||||
//Right Thumb
|
|
||||||
KC_RALT, KC_RCTL,
|
|
||||||
KC_RGUI,
|
|
||||||
KC_ENT, DELNS, BSPCFN
|
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Number/symbol layer
|
/* Number/symbol layer
|
||||||
* (Multiple characters: single-tap for first, double-tap for second)
|
(Multiple characters: single-tap for first, double-tap for second)
|
||||||
* ,-------------------------------------------. ,-------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
* | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
|
| | | | | | | | | | | | | | | | | | |
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
* | | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | |
|
,-------------------------------------------. ,-------------------------------------------.
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
* | | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | |
|
||||||
* | | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
| | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | |
|
||||||
* | ( | ) | [ { | ] } | | | | | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `---------------------------' `---------------------------'
|
| | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
|
||||||
* ,---------------. ,---------------.
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
* | | | | | |
|
| ( | ) | [ { | ] } | | | | | |
|
||||||
* ,-------|-------|-------| |-------+-------+-------.
|
`---------------------------' `---------------------------'
|
||||||
* | | | | | | | |
|
,---------------. ,---------------.
|
||||||
* | | |-------| |-------| | |
|
| | | | | |
|
||||||
* | | | | | | | |
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
* `-----------------------' `-----------------------'
|
| | | | | | | |
|
||||||
|
| | |-------| |-------| | |
|
||||||
|
| | | | | | | |
|
||||||
|
`-----------------------' `-----------------------'
|
||||||
*/
|
*/
|
||||||
[_NUMBERS] = LAYOUT(
|
[_NUMBERS] = LAYOUT_pretty(
|
||||||
// Left Hand
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
KC_F12, 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_F1, KC_F2, KC_F3, KC_F4, KC_F5,
|
_______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
|
||||||
_______, KC_6, KC_7, KC_8, KC_9, KC_0,
|
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
|
||||||
_______, KC_1, KC_2, KC_3, KC_4, KC_5,
|
_______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ), TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
|
||||||
_______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ),
|
KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), _______, _______, _______, _______,
|
||||||
KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
|
_______, _______, _______, _______,
|
||||||
// Left Thumb
|
_______, _______,
|
||||||
_______, _______,
|
_______, _______, _______, _______, _______, _______
|
||||||
_______,
|
|
||||||
_______, _______, _______,
|
|
||||||
// Right Hand
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
|
||||||
KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
|
|
||||||
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
|
|
||||||
TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
// Right Thumb
|
|
||||||
_______, _______,
|
|
||||||
_______,
|
|
||||||
_______, _______, _______
|
|
||||||
),
|
),
|
||||||
|
|
||||||
[_NUMBERS2] = LAYOUT(
|
[_NUMBERS2] = LAYOUT_pretty(
|
||||||
// Left Hand
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
KC_F12, 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_F1, KC_F2, KC_F3, KC_F4, KC_F5,
|
_______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
|
||||||
_______, KC_6, KC_7, KC_8, KC_9, KC_0,
|
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
|
||||||
_______, KC_1, KC_2, KC_3, KC_4, KC_5,
|
_______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ), TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
|
||||||
_______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ),
|
KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), _______, _______, _______, _______,
|
||||||
KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
|
_______, _______, _______, _______,
|
||||||
// Left Thumb
|
_______, _______,
|
||||||
_______, _______,
|
_______, _______, _______, _______, _______, _______
|
||||||
_______,
|
|
||||||
_______, _______, _______,
|
|
||||||
// Right Hand
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
|
||||||
KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
|
|
||||||
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
|
|
||||||
TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
// Right Thumb
|
|
||||||
_______, _______,
|
|
||||||
_______,
|
|
||||||
_______, _______, _______
|
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Function layer
|
/* Function layer
|
||||||
* ,-------------------------------------------. ,-------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
* | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
|
| | | | | | | | | | | | | | | | | | |
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
* | | | | Up | | | | | | Up |Ctrl+Y| | |
|
,-------------------------------------------. ,-------------------------------------------.
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
* | |Ctrl+A| Left | Down | Right|C+A+Tb| | PgUp | Right| Down | Left | Home | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| | | | Up | | | | | | Up |Ctrl+Y| | |
|
||||||
* | |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
| |Ctrl+A| Left | Down | Right|C+A+Tb| | PgUp | Right| Down | Left | Home | |
|
||||||
* | | | | | | Prev | Play | Next | Stop |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `---------------------------' `---------------------------'
|
| |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
|
||||||
* ,---------------. ,---------------.
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
* | | | | | |
|
| | | | | | Prev | Play | Next | Stop |
|
||||||
* ,-------|-------|-------| |-------+-------+-------.
|
`---------------------------' `---------------------------'
|
||||||
* | | | | | | | |
|
,---------------. ,---------------.
|
||||||
* | | |-------| |-------| | |
|
| | | | | |
|
||||||
* | | | | | | | |
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
* `-----------------------' `-----------------------'
|
| | | | | | | |
|
||||||
|
| | |-------| |-------| | |
|
||||||
|
| | | | | | | |
|
||||||
|
`-----------------------' `-----------------------'
|
||||||
*/
|
*/
|
||||||
[_FUNCTION] = LAYOUT(
|
[_FUNCTION] = LAYOUT_pretty(
|
||||||
// Left Hand
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
KC_F12, 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_F1, KC_F2, KC_F3, KC_F4, KC_F5,
|
_______, _______, _______, KC_UP, _______, _______, _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
|
||||||
_______, _______, _______, KC_UP, _______, _______,
|
_______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB), KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
|
||||||
_______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB),
|
_______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
|
||||||
_______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC,
|
_______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
|
||||||
_______, _______, _______, _______,
|
_______, _______, _______, _______,
|
||||||
// Left Thumb
|
_______, _______,
|
||||||
_______, _______,
|
_______, _______, _______, _______, _______, _______
|
||||||
_______,
|
|
||||||
_______, _______, _______,
|
|
||||||
// Right Hand
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
|
||||||
_______, _______, KC_UP, LCTL(KC_Y), _______, _______,
|
|
||||||
KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
|
|
||||||
KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
|
|
||||||
KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
|
|
||||||
// Right Thumb
|
|
||||||
_______, _______,
|
|
||||||
_______,
|
|
||||||
_______, _______, _______
|
|
||||||
),
|
),
|
||||||
|
|
||||||
[_FUNCTION2] = LAYOUT(
|
[_FUNCTION2] = LAYOUT_pretty(
|
||||||
// Left Hand
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
KC_F12, 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_F1, KC_F2, KC_F3, KC_F4, KC_F5,
|
_______, _______, _______, KC_UP, _______, _______, _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
|
||||||
_______, _______, _______, KC_UP, _______, _______,
|
_______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB), KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
|
||||||
_______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB),
|
_______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
|
||||||
_______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC,
|
_______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
|
||||||
_______, _______, _______, _______,
|
_______, _______, _______, _______,
|
||||||
// Left Thumb
|
_______, _______,
|
||||||
_______, _______,
|
_______, _______, _______, _______, _______, _______
|
||||||
_______,
|
|
||||||
_______, _______, _______,
|
|
||||||
// Right Hand
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
|
||||||
_______, _______, KC_UP, LCTL(KC_Y), _______, _______,
|
|
||||||
KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
|
|
||||||
KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
|
|
||||||
KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
|
|
||||||
// Right Thumb
|
|
||||||
_______, _______,
|
|
||||||
_______,
|
|
||||||
_______, _______, _______
|
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Numpad layer
|
/* Numpad layer
|
||||||
* (Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
|
(Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
|
||||||
* ,-------------------------------------------. ,-------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
* | | NumLk| | | | | | Tab | NumLk| KP / | KP * | KP - | |
|
| | | | | | | | | | | | | | | | | | |
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
* | | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | | KP 7 | KP 8 | KP 9 | KP + | |
|
,-------------------------------------------. ,-------------------------------------------.
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| | NumLk| | | | | | Tab | NumLk| KP / | KP * | KP - | |
|
||||||
* | | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | | KP 4 | KP 5 | KP 6 | = | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | | KP 7 | KP 8 | KP 9 | KP + | |
|
||||||
* | | | KP . |KP/KP*| KP- _| KP+ =| | | KP 1 | KP 2 | KP 3 |KP Ent| |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
| | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | | KP 4 | KP 5 | KP 6 | = | |
|
||||||
* | ( | ) | [ { | ] } | | KP 0 | , | KP . |KP Ent|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `---------------------------' `---------------------------'
|
| | | KP . |KP/KP*| KP- _| KP+ =| | | KP 1 | KP 2 | KP 3 |KP Ent| |
|
||||||
* ,---------------. ,---------------.
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
* | | | | | |
|
| ( | ) | [ { | ] } | | KP 0 | , | KP . |KP Ent|
|
||||||
* ,-------|-------|-------| |-------+-------+-------.
|
`---------------------------' `---------------------------'
|
||||||
* | | | | | | | |
|
,---------------. ,---------------.
|
||||||
* | | |-------| |-------| | |
|
| | | | | |
|
||||||
* | | | | | KP Ent| | |
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
* `-----------------------' `-----------------------'
|
| | | | | | | |
|
||||||
|
| | |-------| |-------| | |
|
||||||
|
| | | | | | | |
|
||||||
|
`-----------------------' `-----------------------'
|
||||||
*/
|
*/
|
||||||
[_NUMPAD] = LAYOUT(
|
[_NUMPAD] = LAYOUT_pretty(
|
||||||
// Left Hand
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, KC_NLCK, _______, _______, _______, _______, KC_TAB, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
|
||||||
_______, KC_NLCK, _______, _______, _______, _______,
|
_______, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
|
||||||
_______, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0,
|
_______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, _______, KC_P4, KC_P5, KC_P6, KC_EQL, _______,
|
||||||
_______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5,
|
_______, _______, KC_PDOT, TD(PSLPAS), TD(PMNUN), TD(PPLEQ), _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
|
||||||
_______, _______, KC_PDOT, TD(PSLPAS), TD(PMNUN), TD(PPLEQ),
|
KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), KC_P0, KC_COMM, KC_PDOT, KC_PENT,
|
||||||
KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
|
_______, _______, _______, _______,
|
||||||
// Left Thumb
|
_______, _______,
|
||||||
_______, _______,
|
_______, _______, _______, _______, _______, _______
|
||||||
_______,
|
|
||||||
_______, _______, _______,
|
|
||||||
// Right Hand
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC_TAB, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
|
|
||||||
_______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
|
|
||||||
_______, KC_P4, KC_P5, KC_P6, KC_EQL, _______,
|
|
||||||
_______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
|
|
||||||
KC_P0, KC_COMM, KC_PDOT, KC_PENT,
|
|
||||||
// Right Thumb
|
|
||||||
_______, _______,
|
|
||||||
_______,
|
|
||||||
_______, _______, _______
|
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Colemak gaming/vanilla
|
/* Colemak gaming/vanilla
|
||||||
* (Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
|
(Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
|
||||||
* ,-------------------------------------------. ,-------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
|
,-------------------------------------------. ,-------------------------------------------.
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
* | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
|
||||||
* | Shift | Z | X | C | V | B | | K | M | , | . | / | Shift |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
| Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
|
||||||
* | Ins | ` | [ | ] | | Left | Down | Up | Right|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `---------------------------' `---------------------------'
|
| Shift | Z | X | C | V | B | | K | M | , | . | / | Shift |
|
||||||
* ,---------------. ,---------------.
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
* |Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
|
| Ins | ` | [ | ] | | Left | Down | Up | Right|
|
||||||
* ,-------|-------|-------| |-------+-------+-------.
|
`---------------------------' `---------------------------'
|
||||||
* | | | LAlt | | RGUI | | |
|
,---------------. ,---------------.
|
||||||
* | Space | Enter |-------| |-------| Delete| Bspc |
|
|Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
|
||||||
* | | |Bspc/FN| | Ent/NS| | |
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
* `-----------------------' `-----------------------'
|
| | | LAlt | | RGUI | | |
|
||||||
|
| Space | Enter |-------| |-------| Delete| Bspc |
|
||||||
|
| | |Bspc/FN| | Ent/NS| | |
|
||||||
|
`-----------------------' `-----------------------'
|
||||||
*/
|
*/
|
||||||
[_COLEMAKGM] = LAYOUT(
|
[_COLEMAKGM] = LAYOUT_pretty(
|
||||||
// Left Hand
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
|
KC_EQL, 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_1, KC_2, KC_3, KC_4, KC_5,
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
|
||||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G,
|
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_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D,
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
|
KC_INS, KC_GRV, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||||
KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
|
CTLESC, TD(ADJ), KC_RALT, KC_RCTL,
|
||||||
//Left Thumb
|
KC_LALT, KC_RGUI,
|
||||||
CTLESC, TD(ADJ),
|
KC_SPC, KC_ENT, BSPCFN, ENTNS, KC_DEL, KC_BSPC
|
||||||
KC_LALT,
|
|
||||||
KC_SPC, KC_ENT, BSPCFN,
|
|
||||||
//Right Hand
|
|
||||||
KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
|
|
||||||
KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
|
||||||
KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
|
|
||||||
KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
|
||||||
KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
|
||||||
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
|
||||||
//Right Thumb
|
|
||||||
KC_RALT, KC_RCTL,
|
|
||||||
KC_RGUI,
|
|
||||||
ENTNS, KC_DEL, KC_BSPC
|
|
||||||
),
|
),
|
||||||
|
|
||||||
/* QWERTY gaming/vanilla
|
/* QWERTY gaming/vanilla
|
||||||
* (Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
|
(Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
|
||||||
* ,-------------------------------------------. ,-------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
|
,-------------------------------------------. ,-------------------------------------------.
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
* | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
|
||||||
* | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
| Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
|
||||||
* | Ins | ` | [ | ] | | Left | Down | Up | Right|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `---------------------------' `---------------------------'
|
| Shift | Z | X | C | V | B | | N | M | , | . | / | Shift |
|
||||||
* ,---------------. ,---------------.
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
* |Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
|
| Ins | ` | [ | ] | | Left | Down | Up | Right|
|
||||||
* ,-------|-------|-------| |-------+-------+-------.
|
`---------------------------' `---------------------------'
|
||||||
* | | | LAlt | | RGUI | | |
|
,---------------. ,---------------.
|
||||||
* | Space | Enter |-------| |-------| Delete| Bspc |
|
|Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
|
||||||
* | | |Bspc/FN| | Ent/NS| | |
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
* `-----------------------' `-----------------------'
|
| | | LAlt | | RGUI | | |
|
||||||
|
| Space | Enter |-------| |-------| Delete| Bspc |
|
||||||
|
| | |Bspc/FN| | Ent/NS| | |
|
||||||
|
`-----------------------' `-----------------------'
|
||||||
*/
|
*/
|
||||||
[_QWERTYGM] = LAYOUT(
|
[_QWERTYGM] = LAYOUT_pretty(
|
||||||
// Left Hand
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
|
KC_EQL, 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_1, KC_2, KC_3, KC_4, KC_5,
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
|
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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
|
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
|
KC_INS, KC_GRV, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||||
KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
|
CTLESC, TD(ADJ), KC_RALT, KC_RCTL,
|
||||||
//Left Thumb
|
KC_LALT, KC_RGUI,
|
||||||
CTLESC, TD(ADJ),
|
KC_SPC, KC_ENT, BSPCFN, ENTNS, KC_DEL, KC_BSPC
|
||||||
KC_LALT,
|
|
||||||
KC_SPC, KC_ENT, BSPCFN,
|
|
||||||
//Right Hand
|
|
||||||
KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
|
|
||||||
KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
|
||||||
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
|
||||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
|
||||||
KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
|
||||||
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
|
||||||
//Right Thumb
|
|
||||||
KC_RALT, KC_RCTL,
|
|
||||||
KC_RGUI,
|
|
||||||
ENTNS, KC_DEL, KC_BSPC
|
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Adjust layer
|
/* Adjust layer
|
||||||
* (Enter/Number + Delete/Number2 under non-gaming/vanilla layers; Numpad is a toggle)
|
(Enter/Number + Delete/Number2 under non-gaming/vanilla layers or press & hold Adjust key on function row; Numpad is a toggle)
|
||||||
* ,-------------------------------------------. ,-------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
* | |Colmak|Qwerty| |ClmkGM| QWGM | |Numpad| | | | | RESET |
|
| | | | | | | | | | | | | | | | | | |
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
* | | | | | | | | | | | | | |
|
,-------------------------------------------. ,-------------------------------------------.
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| |Colmak|Qwerty| |ClmkGM| QWGM | |Numpad| | | | | RESET |
|
||||||
* | | | | | | | | |NKROTG| | | | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
| | | | | | | | | | | | | |
|
||||||
* | | | | | | | | | | | | | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
| | | | | | | | | NKRO | | | | |
|
||||||
* | | | | | | | | | |
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
* `---------------------------' `---------------------------'
|
| | | | | | | | | | | | | |
|
||||||
* ,---------------. ,---------------.
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
* | | | | | |
|
| | | | | | | | | |
|
||||||
* ,-------|-------|-------| |-------+-------+-------.
|
`---------------------------' `---------------------------'
|
||||||
* | | | | | | | |
|
,---------------. ,---------------.
|
||||||
* | | |-------| |-------| | |
|
| | | | | |
|
||||||
* | | | | | | | |
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
* `-----------------------' `-----------------------'
|
| | | | | | | |
|
||||||
|
| | |-------| |-------| | |
|
||||||
|
| | | | | | | |
|
||||||
|
`-----------------------' `-----------------------'
|
||||||
*/
|
*/
|
||||||
[_ADJUST] = LAYOUT(
|
[_ADJUST] = LAYOUT_pretty(
|
||||||
// Left Hand
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM, NUMPAD, _______, _______, _______, _______, RESET,
|
||||||
_______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, NKROTG, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______,
|
_______, _______, _______, _______,
|
||||||
// Left Thumb
|
_______, _______,
|
||||||
_______, _______,
|
_______, _______, _______, _______, _______, _______
|
||||||
_______,
|
|
||||||
_______, _______, _______,
|
|
||||||
// Right Hand
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
NUMPAD, _______, _______, _______, _______, RESET,
|
|
||||||
_______, _______, _______, _______, _______, _______,
|
|
||||||
_______, NKROTG, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
// Right Thumb
|
|
||||||
_______, _______,
|
|
||||||
_______,
|
|
||||||
_______, _______, _______
|
|
||||||
),
|
),
|
||||||
|
|
||||||
[_ADJUST2] = LAYOUT(
|
[_ADJUST2] = LAYOUT_pretty(
|
||||||
// Left Hand
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM, NUMPAD, _______, _______, _______, _______, RESET,
|
||||||
_______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, NKROTG, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______,
|
_______, _______, _______, _______,
|
||||||
// Left Thumb
|
_______, _______,
|
||||||
_______, _______,
|
_______, _______, _______, _______, _______, _______
|
||||||
_______,
|
|
||||||
_______, _______, _______,
|
|
||||||
// Right Hand
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
NUMPAD, _______, _______, _______, _______, RESET,
|
|
||||||
_______, _______, _______, _______, _______, _______,
|
|
||||||
_______, NKROTG, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
// Right Thumb
|
|
||||||
_______, _______,
|
|
||||||
_______,
|
|
||||||
_______, _______, _______
|
|
||||||
)
|
)
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ I've largely left the function keys untouched, with the intension of not using t
|
|||||||
|
|
||||||
I use Colemak as my default layout. I've included QWERTY here as well.
|
I use Colemak as my default layout. I've included QWERTY here as well.
|
||||||
|
|
||||||
Additionally, I've added gaming/vanilla version of Colemak and QWERTY layouts. These layouts have no access to the Function or Numbers layers, thus no dual-role keys with layer access, and are mainly used for gaming.
|
Additionally, I've added gaming/vanilla version of Colemak and QWERTY layouts. These layouts have limited access to the Function or Numbers layers, and are mainly used for gaming.
|
||||||
|
|
||||||
Persistent default layer has been enabled for Colemak and QWERTY. The gaming/vanilla Colemak and QWERTY can be set as default layer, but will not be persistent.
|
Persistent default layer has been enabled for Colemak and QWERTY. The gaming/vanilla Colemak and QWERTY can be set as default layer, but will not be persistent.
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
|
|||||||
,-------|-------|-------| |-------+-------+-------.
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
| Space | Enter |App/Alt| | RGUI | Delete| Bspc |
|
| Space | Enter |App/Alt| | RGUI | Delete| Bspc |
|
||||||
| / | / |-------| |-------| / | / |
|
| / | / |-------| |-------| / | / |
|
||||||
| Fn | Number| Bspc | | Tab |Number2| Fn2 |
|
| Fn | Number| Bspc | | Enter |Number2| Fn2 |
|
||||||
`-----------------------' `-----------------------'
|
`-----------------------' `-----------------------'
|
||||||
|
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
|
|||||||
,-------|-------|-------| |-------+-------+-------.
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
| Space | Enter |App/Alt| | RGUI | Delete| Bspc |
|
| Space | Enter |App/Alt| | RGUI | Delete| Bspc |
|
||||||
| / | / |-------| |-------| / | / |
|
| / | / |-------| |-------| / | / |
|
||||||
| Fn | Number| Bspc | | Tab |Number2| Fn2 |
|
| Fn | Number| Bspc | | Enter |Number2| Fn2 |
|
||||||
`-----------------------' `-----------------------'
|
`-----------------------' `-----------------------'
|
||||||
|
|
||||||
|
|
||||||
@@ -109,9 +109,9 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
|
|||||||
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
| | | | Up | | | | | | Up |Ctrl+Y| | |
|
| | | | Up | | | | | | Up |Ctrl+Y| | |
|
||||||
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
| |Ctrl+A| Left | Down | Right| | | PgUp | Right| Down | Left | Home | |
|
| |Ctrl+A| Left | Down | Right|C+A+Tb| | PgUp | Right| Down | Left | Home | |
|
||||||
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
|
||||||
| |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| | | PgDn | Mute | Vol- | Vol+ | End | |
|
| |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
|
||||||
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
|
||||||
| | | | | | Prev | Play | Next | Stop |
|
| | | | | | Prev | Play | Next | Stop |
|
||||||
`---------------------------' `---------------------------'
|
`---------------------------' `---------------------------'
|
||||||
@@ -120,7 +120,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
|
|||||||
,-------|-------|-------| |-------+-------+-------.
|
,-------|-------|-------| |-------+-------+-------.
|
||||||
| | | | | | | |
|
| | | | | | | |
|
||||||
| | |-------| |-------| | |
|
| | |-------| |-------| | |
|
||||||
| | | | |C+A+Tab| | |
|
| | | | | | | |
|
||||||
`-----------------------' `-----------------------'
|
`-----------------------' `-----------------------'
|
||||||
|
|
||||||
|
|
||||||
@@ -150,7 +150,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
|
|||||||
|
|
||||||
|
|
||||||
### Colemak gaming/vanilla
|
### Colemak gaming/vanilla
|
||||||
(Limited access to Function or Numbers layers; mainly used for gaming; double-tap TD(ADJ) for one shot access to Adjust layer)
|
(Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
|
||||||
,-----------------------------------------------------------------------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
||||||
`-----------------------------------------------------------------------------------------------------------'
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
@@ -175,7 +175,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
|
|||||||
|
|
||||||
|
|
||||||
### QWERTY gaming/vanilla
|
### QWERTY gaming/vanilla
|
||||||
(Limited access to Function or Numbers layers; mainly used for gaming; double-tap TD(ADJ) for one shot access to Adjust layer)
|
(Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
|
||||||
,-----------------------------------------------------------------------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
|
||||||
`-----------------------------------------------------------------------------------------------------------'
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
@@ -199,7 +199,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
|
|||||||
`-----------------------' `-----------------------'
|
`-----------------------' `-----------------------'
|
||||||
|
|
||||||
### Adjust layer
|
### Adjust layer
|
||||||
(Press Enter/Number + Delete/Number2 together under non-gaming/vanilla layers; Numpad is a toggle)
|
(Press Enter/Number + Delete/Number2 under non-gaming/vanilla layers or press & hold Adjust key on function row; Numpad is a toggle)
|
||||||
,-----------------------------------------------------------------------------------------------------------.
|
,-----------------------------------------------------------------------------------------------------------.
|
||||||
| | | | | | | | | | | | | | | | | | |
|
| | | | | | | | | | | | | | | | | | |
|
||||||
`-----------------------------------------------------------------------------------------------------------'
|
`-----------------------------------------------------------------------------------------------------------'
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
DEFAULT_FOLDER = kinesis/stapelberg
|
DEFAULT_FOLDER = kinesis/stapelberg
|
||||||
|
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
#include "config_led.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
|
||||||
|
#include "i2c_master.h"
|
||||||
|
#include "led_matrix.h" //For led keycodes
|
||||||
|
#include "usb/udi_cdc.h"
|
||||||
|
#include "usb/usb2422.h"
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, \
|
||||||
|
K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, \
|
||||||
|
K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, \
|
||||||
|
K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, \
|
||||||
|
K61, K62, K63, K64, K65, K66, K67 \
|
||||||
|
) { \
|
||||||
|
{ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, }, \
|
||||||
|
{ K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, }, \
|
||||||
|
{ K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, KC_NO, K43, K44, }, \
|
||||||
|
{ K45, KC_NO, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, }, \
|
||||||
|
{ K59, K60, K61, KC_NO, KC_NO, KC_NO, K62, KC_NO, KC_NO, KC_NO, K63, K64, K65, K66, K67, }, \
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x04D8
|
||||||
|
#define PRODUCT_ID 0xEED3
|
||||||
|
#define DEVICE_VER 0x0101
|
||||||
|
|
||||||
|
#define MANUFACTURER "Massdrop Inc."
|
||||||
|
#define PRODUCT "ALT67 Keyboard"
|
||||||
|
#define SERIAL_NUM "Unavailable"
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 15
|
||||||
|
|
||||||
|
#define PA 0
|
||||||
|
#define PB 1
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PORTS PA, PA, PA, PA, PA
|
||||||
|
#define MATRIX_ROW_PINS 0, 1, 2, 3, 4
|
||||||
|
|
||||||
|
#define MATRIX_COL_PORTS PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PA, PA, PA, PA, PA
|
||||||
|
#define MATRIX_COL_PINS 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 10, 11
|
||||||
|
|
||||||
|
/* Print boot debug codes using debug LED when M28 and M30 shorted */
|
||||||
|
#define DEBUG_BOOT_TRACING
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not 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)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Force boot in NKRO mode */
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Massdrop Inc.
|
||||||
|
|
||||||
|
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_led_h_
|
||||||
|
#define _config_led_h_
|
||||||
|
|
||||||
|
//Define number of ISSI3733 drivers being used (1...16)
|
||||||
|
#define ISSI3733_DRIVER_COUNT 2
|
||||||
|
|
||||||
|
//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
|
||||||
|
#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
|
||||||
|
|
||||||
|
//LED I2C bus speed
|
||||||
|
#define I2C_HZ 580000
|
||||||
|
|
||||||
|
//Count of LED bodies
|
||||||
|
#define ISSI3733_LED_COUNT 105
|
||||||
|
|
||||||
|
//Default Global Current Register value (Default brightness 0 - 255)
|
||||||
|
#define ISSI3733_GCR_DEFAULT 128
|
||||||
|
|
||||||
|
#define LED_GCR_MAX 165 //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
|
||||||
|
#define LED_GCR_STEP 10 //GCR increment/decrement value
|
||||||
|
|
||||||
|
//Automatic power rollback and recovery
|
||||||
|
#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
|
||||||
|
#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
|
||||||
|
#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)
|
||||||
|
|
||||||
|
#define ANIMATION_SPEED_STEP 1
|
||||||
|
|
||||||
|
#define BREATHE_MIN_STEP 0
|
||||||
|
#define BREATHE_MAX_STEP 255
|
||||||
|
|
||||||
|
//LED Mapping - More practically generated from a spreadsheet program
|
||||||
|
//id: ID of the LED (Sync with PCB callouts)
|
||||||
|
//x: Physical X coordinate of LED (units do not matter)
|
||||||
|
//y: Physical Y coordinate of LED (units do not matter)
|
||||||
|
//drv: 1-Based index of ISSI3773_DRIVER_ADDRESSES
|
||||||
|
//cs: Matrix wiring CS col (1-16)
|
||||||
|
//swr: Matrix wiring SW Red row (1-12)
|
||||||
|
//swg: Matrix wiring SW Green row (1-12)
|
||||||
|
//swb: Matrix wiring SW Blue row (1-12)
|
||||||
|
//scan: Associated key scancode if any
|
||||||
|
//Note: Origin 0,0 may be located anywhere as the software will do the final layout
|
||||||
|
#define ISSI3733_LED_MAP { \
|
||||||
|
{ .id = 1, .x = 0, .y = 0, .adr = { .drv = 2, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 0 }, \
|
||||||
|
{ .id = 2, .x = 0.75, .y = 0, .adr = { .drv = 2, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 1 }, \
|
||||||
|
{ .id = 3, .x = 1.5, .y = 0, .adr = { .drv = 2, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 2 }, \
|
||||||
|
{ .id = 4, .x = 2.25, .y = 0, .adr = { .drv = 2, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 3 }, \
|
||||||
|
{ .id = 5, .x = 3, .y = 0, .adr = { .drv = 2, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 4 }, \
|
||||||
|
{ .id = 6, .x = 3.75, .y = 0, .adr = { .drv = 2, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 5 }, \
|
||||||
|
{ .id = 7, .x = 4.5, .y = 0, .adr = { .drv = 2, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 6 }, \
|
||||||
|
{ .id = 8, .x = 5.25, .y = 0, .adr = { .drv = 2, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 7 }, \
|
||||||
|
{ .id = 9, .x = 6, .y = 0, .adr = { .drv = 1, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 8 }, \
|
||||||
|
{ .id = 10, .x = 6.75, .y = 0, .adr = { .drv = 1, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 9 }, \
|
||||||
|
{ .id = 11, .x = 7.5, .y = 0, .adr = { .drv = 1, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 10 }, \
|
||||||
|
{ .id = 12, .x = 8.25, .y = 0, .adr = { .drv = 1, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 11 }, \
|
||||||
|
{ .id = 13, .x = 9, .y = 0, .adr = { .drv = 1, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 12 }, \
|
||||||
|
{ .id = 14, .x = 10.125, .y = 0, .adr = { .drv = 1, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 13 }, \
|
||||||
|
{ .id = 15, .x = 11.25, .y = 0, .adr = { .drv = 1, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 14 }, \
|
||||||
|
{ .id = 16, .x = 0.188, .y = -0.75, .adr = { .drv = 2, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 15 }, \
|
||||||
|
{ .id = 17, .x = 1.125, .y = -0.75, .adr = { .drv = 2, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 16 }, \
|
||||||
|
{ .id = 18, .x = 1.875, .y = -0.75, .adr = { .drv = 2, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 17 }, \
|
||||||
|
{ .id = 19, .x = 2.625, .y = -0.75, .adr = { .drv = 2, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 18 }, \
|
||||||
|
{ .id = 20, .x = 3.375, .y = -0.75, .adr = { .drv = 2, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 19 }, \
|
||||||
|
{ .id = 21, .x = 4.125, .y = -0.75, .adr = { .drv = 2, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 20 }, \
|
||||||
|
{ .id = 22, .x = 4.875, .y = -0.75, .adr = { .drv = 2, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 21 }, \
|
||||||
|
{ .id = 23, .x = 5.625, .y = -0.75, .adr = { .drv = 1, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 22 }, \
|
||||||
|
{ .id = 24, .x = 6.375, .y = -0.75, .adr = { .drv = 1, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 23 }, \
|
||||||
|
{ .id = 25, .x = 7.125, .y = -0.75, .adr = { .drv = 1, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 24 }, \
|
||||||
|
{ .id = 26, .x = 7.875, .y = -0.75, .adr = { .drv = 1, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 25 }, \
|
||||||
|
{ .id = 27, .x = 8.625, .y = -0.75, .adr = { .drv = 1, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 26 }, \
|
||||||
|
{ .id = 28, .x = 9.375, .y = -0.75, .adr = { .drv = 1, .cs = 11, .swr = 11, .swg = 10, .swb = 12 }, .scan = 27 }, \
|
||||||
|
{ .id = 29, .x = 10.313, .y = -0.75, .adr = { .drv = 1, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 28 }, \
|
||||||
|
{ .id = 30, .x = 11.25, .y = -0.75, .adr = { .drv = 1, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 29 }, \
|
||||||
|
{ .id = 31, .x = 0.281, .y = -1.5, .adr = { .drv = 2, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 30 }, \
|
||||||
|
{ .id = 32, .x = 1.313, .y = -1.5, .adr = { .drv = 2, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 31 }, \
|
||||||
|
{ .id = 33, .x = 2.063, .y = -1.5, .adr = { .drv = 2, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 32 }, \
|
||||||
|
{ .id = 34, .x = 2.813, .y = -1.5, .adr = { .drv = 2, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 33 }, \
|
||||||
|
{ .id = 35, .x = 3.563, .y = -1.5, .adr = { .drv = 2, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 34 }, \
|
||||||
|
{ .id = 36, .x = 4.313, .y = -1.5, .adr = { .drv = 2, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 35 }, \
|
||||||
|
{ .id = 37, .x = 5.063, .y = -1.5, .adr = { .drv = 2, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 36 }, \
|
||||||
|
{ .id = 38, .x = 5.813, .y = -1.5, .adr = { .drv = 1, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 37 }, \
|
||||||
|
{ .id = 39, .x = 6.563, .y = -1.5, .adr = { .drv = 1, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 38 }, \
|
||||||
|
{ .id = 40, .x = 7.313, .y = -1.5, .adr = { .drv = 1, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 39 }, \
|
||||||
|
{ .id = 41, .x = 8.063, .y = -1.5, .adr = { .drv = 1, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 40 }, \
|
||||||
|
{ .id = 42, .x = 8.813, .y = -1.5, .adr = { .drv = 1, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 41 }, \
|
||||||
|
{ .id = 43, .x = 10.031, .y = -1.5, .adr = { .drv = 1, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 43 }, \
|
||||||
|
{ .id = 44, .x = 11.25, .y = -1.5, .adr = { .drv = 1, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 44 }, \
|
||||||
|
{ .id = 45, .x = 0.469, .y = -2.25, .adr = { .drv = 2, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 45 }, \
|
||||||
|
{ .id = 46, .x = 1.688, .y = -2.25, .adr = { .drv = 2, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 47 }, \
|
||||||
|
{ .id = 47, .x = 2.438, .y = -2.25, .adr = { .drv = 2, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 48 }, \
|
||||||
|
{ .id = 48, .x = 3.188, .y = -2.25, .adr = { .drv = 2, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 49 }, \
|
||||||
|
{ .id = 49, .x = 3.938, .y = -2.25, .adr = { .drv = 2, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 50 }, \
|
||||||
|
{ .id = 50, .x = 4.688, .y = -2.25, .adr = { .drv = 2, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 51 }, \
|
||||||
|
{ .id = 51, .x = 5.438, .y = -2.25, .adr = { .drv = 2, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 52 }, \
|
||||||
|
{ .id = 52, .x = 6.188, .y = -2.25, .adr = { .drv = 1, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 53 }, \
|
||||||
|
{ .id = 53, .x = 6.938, .y = -2.25, .adr = { .drv = 1, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 54 }, \
|
||||||
|
{ .id = 54, .x = 7.688, .y = -2.25, .adr = { .drv = 1, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 55 }, \
|
||||||
|
{ .id = 55, .x = 8.438, .y = -2.25, .adr = { .drv = 1, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 56 }, \
|
||||||
|
{ .id = 56, .x = 9.469, .y = -2.25, .adr = { .drv = 1, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 57 }, \
|
||||||
|
{ .id = 57, .x = 10.5, .y = -2.25, .adr = { .drv = 1, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 58 }, \
|
||||||
|
{ .id = 58, .x = 11.25, .y = -2.25, .adr = { .drv = 1, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 59 }, \
|
||||||
|
{ .id = 59, .x = 0.094, .y = -3, .adr = { .drv = 2, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 60 }, \
|
||||||
|
{ .id = 60, .x = 1.031, .y = -3, .adr = { .drv = 2, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 61 }, \
|
||||||
|
{ .id = 61, .x = 1.969, .y = -3, .adr = { .drv = 2, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 62 }, \
|
||||||
|
{ .id = 62, .x = 4.781, .y = -3, .adr = { .drv = 2, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 66 }, \
|
||||||
|
{ .id = 63, .x = 7.594, .y = -3, .adr = { .drv = 1, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 70 }, \
|
||||||
|
{ .id = 64, .x = 8.531, .y = -3, .adr = { .drv = 1, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 71 }, \
|
||||||
|
{ .id = 65, .x = 9.75, .y = -3, .adr = { .drv = 1, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 72 }, \
|
||||||
|
{ .id = 66, .x = 10.5, .y = -3, .adr = { .drv = 1, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 73 }, \
|
||||||
|
{ .id = 67, .x = 11.25, .y = -3, .adr = { .drv = 1, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 74 }, \
|
||||||
|
{ .id = 68, .x = -0.338, .y = -3.338, .adr = { .drv = 2, .cs = 11, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||||
|
{ .id = 69, .x = 0.39, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||||
|
{ .id = 70, .x = 1.263, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
{ .id = 71, .x = 2.135, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 72, .x = 3.008, .y = -3.443, .adr = { .drv = 2, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 73, .x = 3.88, .y = -3.443, .adr = { .drv = 2, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
{ .id = 74, .x = 4.753, .y = -3.443, .adr = { .drv = 2, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
{ .id = 75, .x = 5.625, .y = -3.443, .adr = { .drv = 2, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||||
|
{ .id = 76, .x = 6.497, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||||
|
{ .id = 77, .x = 7.37, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
{ .id = 78, .x = 8.242, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 79, .x = 9.115, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 80, .x = 9.987, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||||
|
{ .id = 81, .x = 10.86, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
{ .id = 82, .x = 11.588, .y = -3.338, .adr = { .drv = 1, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||||
|
{ .id = 83, .x = 11.693, .y = -2.623, .adr = { .drv = 1, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||||
|
{ .id = 84, .x = 11.693, .y = -1.873, .adr = { .drv = 1, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||||
|
{ .id = 85, .x = 11.693, .y = -1.123, .adr = { .drv = 1, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||||
|
{ .id = 86, .x = 11.693, .y = -0.373, .adr = { .drv = 1, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
{ .id = 87, .x = 11.588, .y = 0.338, .adr = { .drv = 1, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 88, .x = 9.908, .y = 0.443, .adr = { .drv = 1, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 89, .x = 9.288, .y = 0.443, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 90, .x = 8.625, .y = 0.443, .adr = { .drv = 1, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 91, .x = 7.875, .y = 0.443, .adr = { .drv = 1, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 92, .x = 7.125, .y = 0.443, .adr = { .drv = 1, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 93, .x = 6.375, .y = 0.443, .adr = { .drv = 1, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 94, .x = 5.625, .y = 0.443, .adr = { .drv = 1, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 95, .x = 4.875, .y = 0.443, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 96, .x = 4.125, .y = 0.443, .adr = { .drv = 2, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 97, .x = 3.375, .y = 0.443, .adr = { .drv = 2, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 98, .x = 2.625, .y = 0.443, .adr = { .drv = 2, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 99, .x = 1.875, .y = 0.443, .adr = { .drv = 2, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 100, .x = 1.125, .y = 0.443, .adr = { .drv = 2, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 101, .x = -0.338, .y = 0.338, .adr = { .drv = 2, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 102, .x = -0.443, .y = -0.373, .adr = { .drv = 2, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
{ .id = 103, .x = -0.443, .y = -1.123, .adr = { .drv = 2, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||||
|
{ .id = 104, .x = -0.443, .y = -1.873, .adr = { .drv = 2, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||||
|
{ .id = 105, .x = -0.443, .y = -2.623, .adr = { .drv = 2, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define USB_LED_INDICATOR_ENABLE //Comment out to disable indicator functionality
|
||||||
|
#ifdef USB_LED_INDICATOR_ENABLE //Scan codes refer to actual key matrix codes, not KC_* (255 to disable)
|
||||||
|
#define USB_LED_NUM_LOCK_SCANCODE 255
|
||||||
|
#define USB_LED_CAPS_LOCK_SCANCODE 30
|
||||||
|
#define USB_LED_SCROLL_LOCK_SCANCODE 255
|
||||||
|
#define USB_LED_COMPOSE_SCANCODE 255
|
||||||
|
#define USB_LED_KANA_SCANCODE 255
|
||||||
|
#endif //USB_LED_INDICATOR_ENABLE
|
||||||
|
|
||||||
|
#endif //_config_led_h_
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "ALT",
|
||||||
|
"url": "https://www.massdrop.com/buy/massdrop-alt-mechanical-keyboard",
|
||||||
|
"maintainer": "Massdrop",
|
||||||
|
"width": 16,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"ESCAPE", "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":"MINUS", "x":11, "y":0},
|
||||||
|
{"label":"EQUALS", "x":12, "y":0},
|
||||||
|
{"label":"BACKSPACE", "x":13, "y":0, "w":2},
|
||||||
|
{"label":"DELETE", "x":15, "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":"LEFT BRACKET", "x":11.5, "y":1},
|
||||||
|
{"label":"RIGHT BRACKET", "x":12.5, "y":1},
|
||||||
|
{"label":"BACK SLASH", "x":13.5, "y":1, "w":1.5},
|
||||||
|
{"label":"HOME", "x":15, "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":"SEMICOLON", "x":10.75, "y":2},
|
||||||
|
{"label":"SINGLE TICK", "x":11.75, "y":2},
|
||||||
|
{"label":"ENTER", "x":12.75, "y":2, "w":2.25},
|
||||||
|
{"label":"PAGE UP", "x":15, "y":2},
|
||||||
|
{"label":"LEFT 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":"COMMA", "x":9.25, "y":3},
|
||||||
|
{"label":"PERIOD", "x":10.25, "y":3},
|
||||||
|
{"label":"FORWARD SLASH", "x":11.25, "y":3},
|
||||||
|
{"label":"RIGHT SHIFT", "x":12.25, "y":3, "w":1.75},
|
||||||
|
{"label":"UP ARROW", "x":14, "y":3},
|
||||||
|
{"label":"PAGE DOWN", "x":15, "y":3},
|
||||||
|
{"label":"LEFT CTRL", "x":0, "y":4, "w":1.25},
|
||||||
|
{"label":"LEFT WIN", "x":1.25, "y":4, "w":1.25},
|
||||||
|
{"label":"LEFT ALT", "x":2.5, "y":4, "w":1.25},
|
||||||
|
{"label":"SPACEBAR", "x":3.75, "y":4, "w":6.25},
|
||||||
|
{"label":"RIGHT ALT", "x":10, "y":4, "w":1.25},
|
||||||
|
{"label":"FN", "x":11.25, "y":4, "w":1.25},
|
||||||
|
{"label":"LEFT ARROW", "x":13, "y":4},
|
||||||
|
{"label":"DOWN ARROW", "x":14, "y":4},
|
||||||
|
{"label":"RIGHT ARROW", "x":15, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,200 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum alt67_keycodes {
|
||||||
|
L_BRI = SAFE_RANGE, //LED Brightness Increase
|
||||||
|
L_BRD, //LED Brightness Decrease
|
||||||
|
L_PTN, //LED Pattern Select Next
|
||||||
|
L_PTP, //LED Pattern Select Previous
|
||||||
|
L_PSI, //LED Pattern Speed Increase
|
||||||
|
L_PSD, //LED Pattern Speed Decrease
|
||||||
|
L_T_MD, //LED Toggle Mode
|
||||||
|
L_T_ONF, //LED Toggle On / Off
|
||||||
|
L_ON, //LED On
|
||||||
|
L_OFF, //LED Off
|
||||||
|
L_T_BR, //LED Toggle Breath Effect
|
||||||
|
L_T_PTD, //LED Toggle Scrolling Pattern Direction
|
||||||
|
U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
|
||||||
|
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||||
|
DBG_TOG, //DEBUG Toggle On / Off
|
||||||
|
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||||
|
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||||
|
DBG_MOU, //DEBUG Toggle Mouse Prints
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
|
||||||
|
|
||||||
|
keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = 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_BSPC, 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_BSLS, KC_HOME, \
|
||||||
|
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_PGUP, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
|
||||||
|
),
|
||||||
|
[1] = 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_TRNS, KC_MUTE, \
|
||||||
|
L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
|
||||||
|
L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \
|
||||||
|
KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_VOLD, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
|
||||||
|
),
|
||||||
|
/*
|
||||||
|
[X] = LAYOUT(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||||
|
),
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
|
||||||
|
#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
|
||||||
|
#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case L_BRI:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
|
||||||
|
else gcr_desired += LED_GCR_STEP;
|
||||||
|
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_BRD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
|
||||||
|
else gcr_desired -= LED_GCR_STEP;
|
||||||
|
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_PTN:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
|
||||||
|
else led_animation_id++;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_PTP:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
|
||||||
|
else led_animation_id--;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_PSI:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_animation_speed += ANIMATION_SPEED_STEP;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_PSD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_animation_speed -= ANIMATION_SPEED_STEP;
|
||||||
|
if (led_animation_speed < 0) led_animation_speed = 0;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_T_MD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_lighting_mode++;
|
||||||
|
if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_T_ONF:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_enabled = !led_enabled;
|
||||||
|
I2C3733_Control_Set(led_enabled);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_ON:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_enabled = 1;
|
||||||
|
I2C3733_Control_Set(led_enabled);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_OFF:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_enabled = 0;
|
||||||
|
I2C3733_Control_Set(led_enabled);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_T_BR:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_animation_breathing = !led_animation_breathing;
|
||||||
|
if (led_animation_breathing)
|
||||||
|
{
|
||||||
|
gcr_breathe = gcr_desired;
|
||||||
|
led_animation_breathe_cur = BREATHE_MIN_STEP;
|
||||||
|
breathe_dir = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_T_PTD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_animation_direction = !led_animation_direction;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case U_T_AUTO:
|
||||||
|
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||||
|
usb_extra_manual = !usb_extra_manual;
|
||||||
|
CDC_print("USB extra port manual mode ");
|
||||||
|
CDC_print(usb_extra_manual ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case U_T_AGCR:
|
||||||
|
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||||
|
usb_gcr_auto = !usb_gcr_auto;
|
||||||
|
CDC_print("USB GCR auto mode ");
|
||||||
|
CDC_print(usb_gcr_auto ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case DBG_TOG:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
debug_enable = !debug_enable;
|
||||||
|
CDC_print("Debug mode ");
|
||||||
|
CDC_print(debug_enable ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case DBG_MTRX:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
debug_matrix = !debug_matrix;
|
||||||
|
CDC_print("Debug matrix ");
|
||||||
|
CDC_print(debug_matrix ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case DBG_KBD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
debug_keyboard = !debug_keyboard;
|
||||||
|
CDC_print("Debug keyboard ");
|
||||||
|
CDC_print(debug_keyboard ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case DBG_MOU:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
debug_mouse = !debug_mouse;
|
||||||
|
CDC_print("Debug mouse ");
|
||||||
|
CDC_print(debug_mouse ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
return true; //Process all other keycodes normally
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Massdrop Inc.
|
||||||
|
|
||||||
|
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 "alt67.h"
|
||||||
|
#include "led_matrix.h"
|
||||||
|
|
||||||
|
//Teal <-> Salmon
|
||||||
|
led_setup_t leds_teal_salmon[] = {
|
||||||
|
{ .hs = 0, .he = 33, .rs = 24, .re = 24, .gs = 215, .ge = 215, .bs = 204, .be = 204, .ef = EF_NONE },
|
||||||
|
{ .hs = 33, .he = 66, .rs = 24, .re = 255, .gs = 215, .ge = 114, .bs = 204, .be = 118, .ef = EF_NONE },
|
||||||
|
{ .hs = 66, .he = 100, .rs = 255, .re = 255, .gs = 114, .ge = 114, .bs = 118, .be = 118, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Yellow
|
||||||
|
led_setup_t leds_yellow[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Off
|
||||||
|
led_setup_t leds_off[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Red
|
||||||
|
led_setup_t leds_red[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Green
|
||||||
|
led_setup_t leds_green[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Blue
|
||||||
|
led_setup_t leds_blue[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//White
|
||||||
|
led_setup_t leds_white[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//White with moving red stripe
|
||||||
|
led_setup_t leds_white_with_red_stripe[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
|
||||||
|
{ .hs = 0, .he = 15, .rs = 0, .re = 0, .gs = 0, .ge = 255, .bs = 0, .be = 255, .ef = EF_SCR_R | EF_SUBTRACT },
|
||||||
|
{ .hs = 15, .he = 30, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 0, .ef = EF_SCR_R | EF_SUBTRACT },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Black with moving red stripe
|
||||||
|
led_setup_t leds_black_with_red_stripe[] = {
|
||||||
|
{ .hs = 0, .he = 15, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
|
||||||
|
{ .hs = 15, .he = 30, .rs = 255, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Rainbow no scrolling
|
||||||
|
led_setup_t leds_rainbow_ns[] = {
|
||||||
|
{ .hs = 0, .he = 16.67, .rs = 255, .re = 255, .gs = 0, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER },
|
||||||
|
{ .hs = 16.67, .he = 33.33, .rs = 255, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER },
|
||||||
|
{ .hs = 33.33, .he = 50, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 255, .ef = EF_OVER },
|
||||||
|
{ .hs = 50, .he = 66.67, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER },
|
||||||
|
{ .hs = 66.67, .he = 83.33, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER },
|
||||||
|
{ .hs = 83.33, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 0, .ef = EF_OVER },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Rainbow scrolling
|
||||||
|
led_setup_t leds_rainbow_s[] = {
|
||||||
|
{ .hs = 0, .he = 16.67, .rs = 255, .re = 255, .gs = 0, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 16.67, .he = 33.33, .rs = 255, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 33.33, .he = 50, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 255, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 50, .he = 66.67, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 66.67, .he = 83.33, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 83.33, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 0, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Add new LED animations here using one from above as example
|
||||||
|
//The last entry must be { .end = 1 }
|
||||||
|
//Add the new animation name to the list below following its format
|
||||||
|
|
||||||
|
void *led_setups[] = {
|
||||||
|
leds_rainbow_s,
|
||||||
|
leds_rainbow_ns,
|
||||||
|
leds_teal_salmon,
|
||||||
|
leds_yellow,
|
||||||
|
leds_red,
|
||||||
|
leds_green,
|
||||||
|
leds_blue,
|
||||||
|
leds_white,
|
||||||
|
leds_white_with_red_stripe,
|
||||||
|
leds_black_with_red_stripe,
|
||||||
|
leds_off
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Massdrop Inc.
|
||||||
|
|
||||||
|
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 "alt67.h"
|
||||||
|
|
||||||
|
#include "d51_util.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "clks.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
matrix_row_t mlatest[MATRIX_ROWS];
|
||||||
|
matrix_row_t mlast[MATRIX_ROWS];
|
||||||
|
matrix_row_t mdebounced[MATRIX_ROWS];
|
||||||
|
|
||||||
|
uint8_t row_ports[] = { MATRIX_ROW_PORTS };
|
||||||
|
uint8_t row_pins[] = { MATRIX_ROW_PINS };
|
||||||
|
uint8_t col_ports[] = { MATRIX_COL_PORTS };
|
||||||
|
uint8_t col_pins[] = { MATRIX_COL_PINS };
|
||||||
|
uint32_t row_masks[2]; //NOTE: If more than PA PB used in the future, adjust code to accomodate
|
||||||
|
|
||||||
|
__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) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void)
|
||||||
|
{
|
||||||
|
memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||||
|
memset(mlast, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||||
|
memset(mdebounced, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||||
|
|
||||||
|
row_masks[PA] = 0;
|
||||||
|
row_masks[PB] = 0;
|
||||||
|
|
||||||
|
uint8_t row;
|
||||||
|
for (row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
{
|
||||||
|
PORT->Group[row_ports[row]].DIRCLR.reg = 1 << row_pins[row]; //Input
|
||||||
|
PORT->Group[row_ports[row]].OUTCLR.reg = 1 << row_pins[row]; //Low
|
||||||
|
PORT->Group[row_ports[row]].PINCFG[row_pins[row]].bit.INEN = 1; //Input Enable,
|
||||||
|
PORT->Group[row_ports[row]].PINCFG[row_pins[row]].bit.PULLEN = 1; //Pull Enable
|
||||||
|
row_masks[row_ports[row]] |= 1 << row_pins[row]; //Add pin to proper row mask
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t col;
|
||||||
|
for (col = 0; col < MATRIX_COLS; col++)
|
||||||
|
{
|
||||||
|
PORT->Group[col_ports[col]].DIRSET.reg = 1 << col_pins[col]; //Output
|
||||||
|
PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Low
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MATRIX_SCAN_DELAY 10 //Delay after setting a col to output (in us)
|
||||||
|
|
||||||
|
uint64_t mdebouncing = 0;
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
uint8_t mchanged;
|
||||||
|
uint8_t row;
|
||||||
|
uint8_t col;
|
||||||
|
uint32_t scans[2]; //PA PB
|
||||||
|
|
||||||
|
if (CLK_get_ms() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
|
||||||
|
|
||||||
|
//m15_off; //Profiling scans
|
||||||
|
|
||||||
|
memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t)); //Zero the result buffer
|
||||||
|
|
||||||
|
for (col = 0; col < MATRIX_COLS; col++)
|
||||||
|
{
|
||||||
|
PORT->Group[col_ports[col]].OUTSET.reg = 1 << col_pins[col]; //Set col output
|
||||||
|
|
||||||
|
CLK_delay_us(MATRIX_SCAN_DELAY); //Delay for output
|
||||||
|
|
||||||
|
scans[PA] = PORT->Group[PA].IN.reg & row_masks[PA]; //Read PA row pins data
|
||||||
|
scans[PB] = PORT->Group[PB].IN.reg & row_masks[PB]; //Read PB row pins data
|
||||||
|
|
||||||
|
PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Clear col output
|
||||||
|
|
||||||
|
for (row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
{
|
||||||
|
//Move scan bits from scans array into proper row bit locations
|
||||||
|
if (scans[row_ports[row]] & (1 << row_pins[row]))
|
||||||
|
mlatest[row] |= 1 << col;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mchanged = 0; //Default to no matrix change since last
|
||||||
|
|
||||||
|
for (row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
{
|
||||||
|
if (mlast[row] != mlatest[row])
|
||||||
|
mchanged = 1;
|
||||||
|
mlast[row] = mlatest[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mchanged)
|
||||||
|
{
|
||||||
|
for (row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
mdebounced[row] = mlatest[row];
|
||||||
|
mdebouncing = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Begin or extend debounce on change
|
||||||
|
mdebouncing = CLK_get_ms() + DEBOUNCING_DELAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
//m15_on; //Profiling scans
|
||||||
|
|
||||||
|
matrix_scan_quantum();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_row_t matrix_get_row(uint8_t row)
|
||||||
|
{
|
||||||
|
return mdebounced[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void)
|
||||||
|
{
|
||||||
|
char buf[(MATRIX_COLS+8)*(MATRIX_ROWS+1)] = "R C";
|
||||||
|
char *pbuf = buf+3;
|
||||||
|
uint32_t cols;
|
||||||
|
uint32_t rows;
|
||||||
|
matrix_row_t row;
|
||||||
|
|
||||||
|
for (cols = 1; cols <= MATRIX_COLS; cols++)
|
||||||
|
{
|
||||||
|
*pbuf = (cols%10)+48;
|
||||||
|
pbuf++;
|
||||||
|
}
|
||||||
|
*pbuf = '\r'; pbuf++;
|
||||||
|
*pbuf = '\n'; pbuf++;
|
||||||
|
|
||||||
|
for (rows = 1; rows <= MATRIX_ROWS; rows++)
|
||||||
|
{
|
||||||
|
row = matrix_get_row(rows-1);
|
||||||
|
if (rows < 10) { *pbuf = rows+48; pbuf++; *pbuf = ' '; pbuf++; *pbuf = ' '; pbuf++; }
|
||||||
|
else { *pbuf = (rows/10)+48; pbuf++; *pbuf = (rows%10)+48; pbuf++; *pbuf = ' '; pbuf++; }
|
||||||
|
for (cols = 0; cols < MATRIX_COLS; cols++)
|
||||||
|
{
|
||||||
|
if (row & 1 << cols) *pbuf = 'X';
|
||||||
|
else *pbuf = '.';
|
||||||
|
pbuf++;
|
||||||
|
}
|
||||||
|
*pbuf = '\r'; pbuf++;
|
||||||
|
*pbuf = '\n'; pbuf++;
|
||||||
|
}
|
||||||
|
*pbuf = 0;
|
||||||
|
dprint(buf);
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
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 MATRIX_H
|
||||||
|
#define MATRIX_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "keyboard.h"
|
||||||
|
|
||||||
|
#if (MATRIX_COLS <= 8)
|
||||||
|
typedef uint8_t matrix_row_t;
|
||||||
|
#elif (MATRIX_COLS <= 16)
|
||||||
|
typedef uint16_t matrix_row_t;
|
||||||
|
#elif (MATRIX_COLS <= 32)
|
||||||
|
typedef uint32_t matrix_row_t;
|
||||||
|
#else
|
||||||
|
#error "MATRIX_COLS: invalid value"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1<<col))
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* number of matrix rows */
|
||||||
|
uint8_t matrix_rows(void);
|
||||||
|
/* number of matrix columns */
|
||||||
|
uint8_t matrix_cols(void);
|
||||||
|
/* should be called at early stage of startup before matrix_init.(optional) */
|
||||||
|
void matrix_setup(void);
|
||||||
|
/* intialize matrix for scaning. */
|
||||||
|
void matrix_init(void);
|
||||||
|
/* scan all key states on matrix */
|
||||||
|
uint8_t matrix_scan(void);
|
||||||
|
/* whether modified from previous scan. used after matrix_scan. */
|
||||||
|
bool matrix_is_modified(void) __attribute__ ((deprecated));
|
||||||
|
/* whether a switch is on */
|
||||||
|
bool matrix_is_on(uint8_t row, uint8_t col);
|
||||||
|
/* matrix state on row */
|
||||||
|
matrix_row_t matrix_get_row(uint8_t row);
|
||||||
|
/* print matrix for debug */
|
||||||
|
void matrix_print(void);
|
||||||
|
|
||||||
|
/* power control */
|
||||||
|
void matrix_power_up(void);
|
||||||
|
void matrix_power_down(void);
|
||||||
|
|
||||||
|
/* executes code for Quantum */
|
||||||
|
void matrix_init_quantum(void);
|
||||||
|
void matrix_scan_quantum(void);
|
||||||
|
|
||||||
|
void matrix_init_kb(void);
|
||||||
|
void matrix_scan_kb(void);
|
||||||
|
|
||||||
|
void matrix_init_user(void);
|
||||||
|
void matrix_scan_user(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# ALT
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The Massdrop ALT is a 65% mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [Massdrop](https://github.com/massdrop)
|
||||||
|
Hardware Supported: Massdrop, Inc. ALT67 PCBs utilizing Microchip's ATSAMD51J18A MCU and USB2422 2-Port USB 2.0 Hi-Speed Hub Controller, and ISSI's IS31FL3733 LED Drivers.
|
||||||
|
Hardware Availability: [Massdrop ALT Mechanical Keyboard](https://www.massdrop.com/buy/massdrop-alt-mechanical-keyboard)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make massdrop/alt67:default
|
||||||
|
|
||||||
|
For information on flashing this keyboard, visit the following links:
|
||||||
|
|
||||||
|
[Massdrop Loader Releases](https://github.com/Massdrop/mdloader/releases/tag/0.0.1)
|
||||||
|
[Massdrop Loader Repository and Instructions](https://github.com/Massdrop/mdloader)
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# project specific files
|
||||||
|
SRC = led_programs.c
|
||||||
|
SRC += matrix.c
|
||||||
|
|
||||||
|
#For platform and packs
|
||||||
|
ARM_ATSAM = SAMD51J18A
|
||||||
|
MCU = cortex-m4
|
||||||
|
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
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
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||||
|
VIRTSER_ENABLE = no # USB Serial Driver
|
||||||
|
RAW_ENABLE = no # Raw device
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x04D8
|
||||||
|
#define PRODUCT_ID 0xEED2
|
||||||
|
#define DEVICE_VER 0x0101
|
||||||
|
|
||||||
|
#define MANUFACTURER "Massdrop Inc."
|
||||||
|
#define PRODUCT "CTRL Keyboard"
|
||||||
|
#define SERIAL_NUM "Unavailable"
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 11
|
||||||
|
#define MATRIX_COLS 8
|
||||||
|
|
||||||
|
#define PA 0
|
||||||
|
#define PB 1
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PORTS PB, PB, PB, PB, PB, PB, PA, PA, PB, PB, PB
|
||||||
|
#define MATRIX_ROW_PINS 4, 5, 6, 7, 8, 9, 10, 11, 10, 11, 12
|
||||||
|
|
||||||
|
#define MATRIX_COL_PORTS PA, PA, PA, PA, PA, PA, PA, PA
|
||||||
|
#define MATRIX_COL_PINS 0, 1, 2, 3, 4, 5, 6, 7
|
||||||
|
|
||||||
|
/* Print boot debug codes using debug LED when M28 and M30 shorted */
|
||||||
|
#define DEBUG_BOOT_TRACING
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not 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)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Force boot in NKRO mode */
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
@@ -0,0 +1,191 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Massdrop Inc.
|
||||||
|
|
||||||
|
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_led_h_
|
||||||
|
#define _config_led_h_
|
||||||
|
|
||||||
|
//Define number of ISSI3733 drivers being used (1...16)
|
||||||
|
#define ISSI3733_DRIVER_COUNT 2
|
||||||
|
|
||||||
|
//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
|
||||||
|
#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
|
||||||
|
|
||||||
|
//LED I2C bus speed
|
||||||
|
#define I2C_HZ 580000
|
||||||
|
|
||||||
|
//Count of LED bodies
|
||||||
|
#define ISSI3733_LED_COUNT 119
|
||||||
|
|
||||||
|
//Default Global Current Register value (Default brightness 0 - 255)
|
||||||
|
#define ISSI3733_GCR_DEFAULT 128
|
||||||
|
|
||||||
|
#define LED_GCR_MAX 165 //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
|
||||||
|
#define LED_GCR_STEP 10 //GCR increment/decrement value
|
||||||
|
|
||||||
|
//Automatic power rollback and recovery
|
||||||
|
#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
|
||||||
|
#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
|
||||||
|
#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)
|
||||||
|
|
||||||
|
#define ANIMATION_SPEED_STEP 1
|
||||||
|
|
||||||
|
#define BREATHE_MIN_STEP 0
|
||||||
|
#define BREATHE_MAX_STEP 255
|
||||||
|
|
||||||
|
//LED Mapping - More practically generated from a spreadsheet program
|
||||||
|
//id: ID of the LED (Sync with PCB callouts)
|
||||||
|
//x: Physical X coordinate of LED (units do not matter)
|
||||||
|
//y: Physical Y coordinate of LED (units do not matter)
|
||||||
|
//drv: 1-Based index of ISSI3773_DRIVER_ADDRESSES
|
||||||
|
//cs: Matrix wiring CS col (1-16)
|
||||||
|
//swr: Matrix wiring SW Red row (1-12)
|
||||||
|
//swg: Matrix wiring SW Green row (1-12)
|
||||||
|
//swb: Matrix wiring SW Blue row (1-12)
|
||||||
|
//scan: Associated key scancode if any
|
||||||
|
//Note: Origin 0,0 may be located anywhere as the software will do the final layout
|
||||||
|
#define ISSI3733_LED_MAP { \
|
||||||
|
{ .id = 1, .x = 0, .y = 0, .adr = { .drv = 2, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 0 }, \
|
||||||
|
{ .id = 2, .x = 1.5, .y = 0, .adr = { .drv = 2, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 1 }, \
|
||||||
|
{ .id = 3, .x = 2.25, .y = 0, .adr = { .drv = 2, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 2 }, \
|
||||||
|
{ .id = 4, .x = 3, .y = 0, .adr = { .drv = 2, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 3 }, \
|
||||||
|
{ .id = 5, .x = 3.75, .y = 0, .adr = { .drv = 2, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 4 }, \
|
||||||
|
{ .id = 6, .x = 4.875, .y = 0, .adr = { .drv = 2, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 5 }, \
|
||||||
|
{ .id = 7, .x = 5.625, .y = 0, .adr = { .drv = 2, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 6 }, \
|
||||||
|
{ .id = 8, .x = 6.375, .y = 0, .adr = { .drv = 1, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 7 }, \
|
||||||
|
{ .id = 9, .x = 7.125, .y = 0, .adr = { .drv = 1, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 90 }, \
|
||||||
|
{ .id = 10, .x = 8.25, .y = 0, .adr = { .drv = 1, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 91 }, \
|
||||||
|
{ .id = 11, .x = 9, .y = 0, .adr = { .drv = 1, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 92 }, \
|
||||||
|
{ .id = 12, .x = 9.75, .y = 0, .adr = { .drv = 1, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 93 }, \
|
||||||
|
{ .id = 13, .x = 10.5, .y = 0, .adr = { .drv = 1, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 94 }, \
|
||||||
|
{ .id = 14, .x = 11.625, .y = 0, .adr = { .drv = 1, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 95 }, \
|
||||||
|
{ .id = 15, .x = 12.375, .y = 0, .adr = { .drv = 1, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 96 }, \
|
||||||
|
{ .id = 16, .x = 13.125, .y = 0, .adr = { .drv = 1, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 97 }, \
|
||||||
|
{ .id = 17, .x = 0, .y = -1.125, .adr = { .drv = 2, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 15 }, \
|
||||||
|
{ .id = 18, .x = 0.75, .y = -1.125, .adr = { .drv = 2, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 16 }, \
|
||||||
|
{ .id = 19, .x = 1.5, .y = -1.125, .adr = { .drv = 2, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 17 }, \
|
||||||
|
{ .id = 20, .x = 2.25, .y = -1.125, .adr = { .drv = 2, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 18 }, \
|
||||||
|
{ .id = 21, .x = 3, .y = -1.125, .adr = { .drv = 2, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 19 }, \
|
||||||
|
{ .id = 22, .x = 3.75, .y = -1.125, .adr = { .drv = 2, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 20 }, \
|
||||||
|
{ .id = 23, .x = 4.5, .y = -1.125, .adr = { .drv = 2, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 21 }, \
|
||||||
|
{ .id = 24, .x = 5.25, .y = -1.125, .adr = { .drv = 2, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 22 }, \
|
||||||
|
{ .id = 25, .x = 6, .y = -1.125, .adr = { .drv = 1, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 105 }, \
|
||||||
|
{ .id = 26, .x = 6.75, .y = -1.125, .adr = { .drv = 1, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 106 }, \
|
||||||
|
{ .id = 27, .x = 7.5, .y = -1.125, .adr = { .drv = 1, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 107 }, \
|
||||||
|
{ .id = 28, .x = 8.25, .y = -1.125, .adr = { .drv = 1, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 108 }, \
|
||||||
|
{ .id = 29, .x = 9, .y = -1.125, .adr = { .drv = 1, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 109 }, \
|
||||||
|
{ .id = 30, .x = 10.125, .y = -1.125, .adr = { .drv = 1, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 110 }, \
|
||||||
|
{ .id = 31, .x = 11.625, .y = -1.125, .adr = { .drv = 1, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 111 }, \
|
||||||
|
{ .id = 32, .x = 12.375, .y = -1.125, .adr = { .drv = 1, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 112 }, \
|
||||||
|
{ .id = 33, .x = 13.125, .y = -1.125, .adr = { .drv = 1, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 142 }, \
|
||||||
|
{ .id = 34, .x = 0.188, .y = -1.875, .adr = { .drv = 2, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 30 }, \
|
||||||
|
{ .id = 35, .x = 1.125, .y = -1.875, .adr = { .drv = 2, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 31 }, \
|
||||||
|
{ .id = 36, .x = 1.875, .y = -1.875, .adr = { .drv = 2, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 32 }, \
|
||||||
|
{ .id = 37, .x = 2.625, .y = -1.875, .adr = { .drv = 2, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 33 }, \
|
||||||
|
{ .id = 38, .x = 3.375, .y = -1.875, .adr = { .drv = 2, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 34 }, \
|
||||||
|
{ .id = 39, .x = 4.125, .y = -1.875, .adr = { .drv = 2, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 35 }, \
|
||||||
|
{ .id = 40, .x = 4.875, .y = -1.875, .adr = { .drv = 2, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 36 }, \
|
||||||
|
{ .id = 41, .x = 5.625, .y = -1.875, .adr = { .drv = 2, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 37 }, \
|
||||||
|
{ .id = 42, .x = 6.375, .y = -1.875, .adr = { .drv = 1, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 120 }, \
|
||||||
|
{ .id = 43, .x = 7.125, .y = -1.875, .adr = { .drv = 1, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 121 }, \
|
||||||
|
{ .id = 44, .x = 7.875, .y = -1.875, .adr = { .drv = 1, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 122 }, \
|
||||||
|
{ .id = 45, .x = 8.625, .y = -1.875, .adr = { .drv = 1, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 123 }, \
|
||||||
|
{ .id = 46, .x = 9.375, .y = -1.875, .adr = { .drv = 1, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 124 }, \
|
||||||
|
{ .id = 47, .x = 10.312, .y = -1.875, .adr = { .drv = 1, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 125 }, \
|
||||||
|
{ .id = 48, .x = 11.625, .y = -1.875, .adr = { .drv = 1, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 126 }, \
|
||||||
|
{ .id = 49, .x = 12.375, .y = -1.875, .adr = { .drv = 1, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 127 }, \
|
||||||
|
{ .id = 50, .x = 13.125, .y = -1.875, .adr = { .drv = 1, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 141 }, \
|
||||||
|
{ .id = 51, .x = 0.281, .y = -2.625, .adr = { .drv = 2, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 45 }, \
|
||||||
|
{ .id = 52, .x = 1.313, .y = -2.625, .adr = { .drv = 2, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 46 }, \
|
||||||
|
{ .id = 53, .x = 2.063, .y = -2.625, .adr = { .drv = 2, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 47 }, \
|
||||||
|
{ .id = 54, .x = 2.812, .y = -2.625, .adr = { .drv = 2, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 48 }, \
|
||||||
|
{ .id = 55, .x = 3.562, .y = -2.625, .adr = { .drv = 2, .cs = 11, .swr = 11, .swg = 10, .swb = 12 }, .scan = 49 }, \
|
||||||
|
{ .id = 56, .x = 4.312, .y = -2.625, .adr = { .drv = 2, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 50 }, \
|
||||||
|
{ .id = 57, .x = 5.062, .y = -2.625, .adr = { .drv = 2, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 51 }, \
|
||||||
|
{ .id = 58, .x = 5.812, .y = -2.625, .adr = { .drv = 2, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 52 }, \
|
||||||
|
{ .id = 59, .x = 6.562, .y = -2.625, .adr = { .drv = 1, .cs = 16, .swr = 11, .swg = 10, .swb = 12 }, .scan = 135 }, \
|
||||||
|
{ .id = 60, .x = 7.312, .y = -2.625, .adr = { .drv = 1, .cs = 15, .swr = 11, .swg = 10, .swb = 12 }, .scan = 136 }, \
|
||||||
|
{ .id = 61, .x = 8.062, .y = -2.625, .adr = { .drv = 1, .cs = 14, .swr = 11, .swg = 10, .swb = 12 }, .scan = 137 }, \
|
||||||
|
{ .id = 62, .x = 8.812, .y = -2.625, .adr = { .drv = 1, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 138 }, \
|
||||||
|
{ .id = 63, .x = 10.031, .y = -2.625, .adr = { .drv = 1, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 139 }, \
|
||||||
|
{ .id = 64, .x = 0.469, .y = -3.375, .adr = { .drv = 2, .cs = 14, .swr = 5, .swg = 4, .swb = 6 }, .scan = 60 }, \
|
||||||
|
{ .id = 65, .x = 1.688, .y = -3.375, .adr = { .drv = 2, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 61 }, \
|
||||||
|
{ .id = 66, .x = 2.438, .y = -3.375, .adr = { .drv = 2, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 62 }, \
|
||||||
|
{ .id = 67, .x = 3.188, .y = -3.375, .adr = { .drv = 2, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 63 }, \
|
||||||
|
{ .id = 68, .x = 3.938, .y = -3.375, .adr = { .drv = 2, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 64 }, \
|
||||||
|
{ .id = 69, .x = 4.688, .y = -3.375, .adr = { .drv = 2, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 65 }, \
|
||||||
|
{ .id = 70, .x = 5.438, .y = -3.375, .adr = { .drv = 2, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 66 }, \
|
||||||
|
{ .id = 71, .x = 6.188, .y = -3.375, .adr = { .drv = 2, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 67 }, \
|
||||||
|
{ .id = 72, .x = 6.938, .y = -3.375, .adr = { .drv = 1, .cs = 16, .swr = 8, .swg = 7, .swb = 9 }, .scan = 150 }, \
|
||||||
|
{ .id = 73, .x = 7.688, .y = -3.375, .adr = { .drv = 1, .cs = 15, .swr = 8, .swg = 7, .swb = 9 }, .scan = 151 }, \
|
||||||
|
{ .id = 74, .x = 8.438, .y = -3.375, .adr = { .drv = 1, .cs = 14, .swr = 8, .swg = 7, .swb = 9 }, .scan = 152 }, \
|
||||||
|
{ .id = 75, .x = 9.844, .y = -3.375, .adr = { .drv = 1, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 153 }, \
|
||||||
|
{ .id = 76, .x = 12.375, .y = -3.375, .adr = { .drv = 1, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 140 }, \
|
||||||
|
{ .id = 77, .x = 0.094, .y = -4.125, .adr = { .drv = 2, .cs = 14, .swr = 11, .swg = 10, .swb = 12 }, .scan = 75 }, \
|
||||||
|
{ .id = 78, .x = 1.031, .y = -4.125, .adr = { .drv = 2, .cs = 14, .swr = 8, .swg = 7, .swb = 9 }, .scan = 76 }, \
|
||||||
|
{ .id = 79, .x = 1.969, .y = -4.125, .adr = { .drv = 2, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 77 }, \
|
||||||
|
{ .id = 80, .x = 4.781, .y = -4.125, .adr = { .drv = 2, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 78 }, \
|
||||||
|
{ .id = 81, .x = 7.594, .y = -4.125, .adr = { .drv = 1, .cs = 16, .swr = 5, .swg = 4, .swb = 6 }, .scan = 79 }, \
|
||||||
|
{ .id = 82, .x = 8.531, .y = -4.125, .adr = { .drv = 1, .cs = 15, .swr = 5, .swg = 4, .swb = 6 }, .scan = 80 }, \
|
||||||
|
{ .id = 83, .x = 9.469, .y = -4.125, .adr = { .drv = 1, .cs = 14, .swr = 5, .swg = 4, .swb = 6 }, .scan = 81 }, \
|
||||||
|
{ .id = 84, .x = 10.406, .y = -4.125, .adr = { .drv = 1, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 82 }, \
|
||||||
|
{ .id = 85, .x = 11.625, .y = -4.125, .adr = { .drv = 1, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 154 }, \
|
||||||
|
{ .id = 86, .x = 12.375, .y = -4.125, .adr = { .drv = 1, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 155 }, \
|
||||||
|
{ .id = 87, .x = 13.125, .y = -4.125, .adr = { .drv = 1, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 156 }, \
|
||||||
|
{ .id = 88, .x = 13.433, .y = -4.43, .adr = { .drv = 1, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 89, .x = 12.285, .y = -4.535, .adr = { .drv = 1, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 90, .x = 11.14, .y = -4.535, .adr = { .drv = 1, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 91, .x = 9.995, .y = -4.535, .adr = { .drv = 1, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 92, .x = 8.85, .y = -4.535, .adr = { .drv = 1, .cs = 15, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 93, .x = 7.705, .y = -4.535, .adr = { .drv = 1, .cs = 16, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 94, .x = 6.56, .y = -4.535, .adr = { .drv = 2, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 95, .x = 5.415, .y = -4.535, .adr = { .drv = 2, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 96, .x = 4.27, .y = -4.535, .adr = { .drv = 2, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 97, .x = 3.125, .y = -4.535, .adr = { .drv = 2, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 98, .x = 1.98, .y = -4.535, .adr = { .drv = 2, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 99, .x = 0.835, .y = -4.535, .adr = { .drv = 2, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 100, .x = -0.307, .y = -4.43, .adr = { .drv = 2, .cs = 15, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 101, .x = -0.41, .y = -3.245, .adr = { .drv = 2, .cs = 15, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||||
|
{ .id = 102, .x = -0.41, .y = -2.06, .adr = { .drv = 2, .cs = 15, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
{ .id = 103, .x = -0.41, .y = -0.875, .adr = { .drv = 2, .cs = 15, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||||
|
{ .id = 104, .x = -0.308, .y = 0.31, .adr = { .drv = 2, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 105, .x = 0.835, .y = 0.415, .adr = { .drv = 2, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 106, .x = 1.98, .y = 0.415, .adr = { .drv = 2, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 107, .x = 3.125, .y = 0.415, .adr = { .drv = 2, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 108, .x = 4.27, .y = 0.415, .adr = { .drv = 2, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 109, .x = 5.415, .y = 0.415, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 110, .x = 6.56, .y = 0.415, .adr = { .drv = 1, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 111, .x = 7.705, .y = 0.415, .adr = { .drv = 1, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 112, .x = 8.85, .y = 0.415, .adr = { .drv = 1, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 113, .x = 9.995, .y = 0.415, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 114, .x = 11.14, .y = 0.415, .adr = { .drv = 1, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 115, .x = 12.285, .y = 0.415, .adr = { .drv = 1, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 116, .x = 13.432, .y = 0.31, .adr = { .drv = 1, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||||
|
{ .id = 117, .x = 13.535, .y = -0.875, .adr = { .drv = 1, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||||
|
{ .id = 118, .x = 13.535, .y = -2.06, .adr = { .drv = 1, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||||
|
{ .id = 119, .x = 13.535, .y = -3.245, .adr = { .drv = 1, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||||
|
};
|
||||||
|
|
||||||
|
#define USB_LED_INDICATOR_ENABLE //Comment out to disable indicator functionality
|
||||||
|
#ifdef USB_LED_INDICATOR_ENABLE //Scan codes refer to actual key matrix codes, not KC_* (255 to disable)
|
||||||
|
#define USB_LED_NUM_LOCK_SCANCODE 255
|
||||||
|
#define USB_LED_CAPS_LOCK_SCANCODE 45
|
||||||
|
#define USB_LED_SCROLL_LOCK_SCANCODE 96
|
||||||
|
#define USB_LED_COMPOSE_SCANCODE 255
|
||||||
|
#define USB_LED_KANA_SCANCODE 255
|
||||||
|
#endif //USB_LED_INDICATOR_ENABLE
|
||||||
|
|
||||||
|
#endif //_config_led_h_
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
#include "config_led.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
|
||||||
|
#include "i2c_master.h"
|
||||||
|
#include "led_matrix.h" //For led keycodes
|
||||||
|
#include "usb/udi_cdc.h"
|
||||||
|
#include "usb/usb2422.h"
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, \
|
||||||
|
K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, \
|
||||||
|
K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, \
|
||||||
|
K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, \
|
||||||
|
K61, K62, K63, K64, K65, K66, K67, K68, K69, K70, K71, K72, K73, K74, K75, \
|
||||||
|
K76, K77, K78, K79, K80, K81, K82, K83, K84, K85, K86, K87 \
|
||||||
|
\
|
||||||
|
) { \
|
||||||
|
{ K01, K02, K03, K04, K05, K06, K07, K08 }, \
|
||||||
|
{ K17, K18, K19, K20, K21, K22, K23, K24 }, \
|
||||||
|
{ K34, K35, K36, K37, K38, K39, K40, K41 }, \
|
||||||
|
{ K51, K52, K53, K54, K55, K56, K57, K58 }, \
|
||||||
|
{ K64, K65, K66, K67, K68, K69, K70, K71 }, \
|
||||||
|
{ K77, K78, K79, K80, K81, K82, K83, K84 }, \
|
||||||
|
{ K09, K10, K11, K12, K13, K14, K15, K16 }, \
|
||||||
|
{ K25, K26, K27, K28, K29, K30, K31, K32 }, \
|
||||||
|
{ K42, K43, K44, K45, K46, K47, K48, K49 }, \
|
||||||
|
{ K59, K60, K61, K62, K63, K76, K50, K33 }, \
|
||||||
|
{ K72, K73, K74, K75, K85, K86, K87, }, \
|
||||||
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "CTRL",
|
||||||
|
"url": "https://www.massdrop.com/buy/massdrop-ctrl-mechanical-keyboard",
|
||||||
|
"maintainer": "Massdrop",
|
||||||
|
"width": 18.5,
|
||||||
|
"height": 6.5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"ESCAPE", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":2, "y":0},
|
||||||
|
{"label":"F2", "x":3, "y":0},
|
||||||
|
{"label":"F3", "x":4, "y":0},
|
||||||
|
{"label":"F4", "x":5, "y":0},
|
||||||
|
{"label":"F5", "x":6.5, "y":0},
|
||||||
|
{"label":"F6", "x":7.5, "y":0},
|
||||||
|
{"label":"F7", "x":8.5, "y":0},
|
||||||
|
{"label":"F8", "x":9.5, "y":0},
|
||||||
|
{"label":"F9", "x":11, "y":0},
|
||||||
|
{"label":"F10", "x":12, "y":0},
|
||||||
|
{"label":"F11", "x":13, "y":0},
|
||||||
|
{"label":"F12", "x":14, "y":0},
|
||||||
|
{"label":"PRINT SCREEN", "x":15.5, "y":0},
|
||||||
|
{"label":"SCROLL LOCK", "x":16.5, "y":0},
|
||||||
|
{"label":"PAUSE BREAK", "x":17.5, "y":0},
|
||||||
|
{"label":"BACKTICK", "x":0, "y":1.5},
|
||||||
|
{"label":"1", "x":1, "y":1.5},
|
||||||
|
{"label":"2", "x":2, "y":1.5},
|
||||||
|
{"label":"3", "x":3, "y":1.5},
|
||||||
|
{"label":"4", "x":4, "y":1.5},
|
||||||
|
{"label":"5", "x":5, "y":1.5},
|
||||||
|
{"label":"6", "x":6, "y":1.5},
|
||||||
|
{"label":"7", "x":7, "y":1.5},
|
||||||
|
{"label":"8", "x":8, "y":1.5},
|
||||||
|
{"label":"9", "x":9, "y":1.5},
|
||||||
|
{"label":"0", "x":10, "y":1.5},
|
||||||
|
{"label":"MINUS", "x":11, "y":1.5},
|
||||||
|
{"label":"EQUALS", "x":12, "y":1.5},
|
||||||
|
{"label":"BACKSPACE", "x":13, "y":1.5, "w":2},
|
||||||
|
{"label":"INSERT", "x":15.5, "y":1.5},
|
||||||
|
{"label":"HOME", "x":16.5, "y":1.5},
|
||||||
|
{"label":"PAGE UP", "x":17.5, "y":1.5},
|
||||||
|
{"label":"TAB", "x":0, "y":2.5, "w":1.5},
|
||||||
|
{"label":"Q", "x":1.5, "y":2.5},
|
||||||
|
{"label":"W", "x":2.5, "y":2.5},
|
||||||
|
{"label":"E", "x":3.5, "y":2.5},
|
||||||
|
{"label":"R", "x":4.5, "y":2.5},
|
||||||
|
{"label":"T", "x":5.5, "y":2.5},
|
||||||
|
{"label":"Y", "x":6.5, "y":2.5},
|
||||||
|
{"label":"U", "x":7.5, "y":2.5},
|
||||||
|
{"label":"I", "x":8.5, "y":2.5},
|
||||||
|
{"label":"O", "x":9.5, "y":2.5},
|
||||||
|
{"label":"P", "x":10.5, "y":2.5},
|
||||||
|
{"label":"LEFT BRACKET", "x":11.5, "y":2.5},
|
||||||
|
{"label":"RIGHT BRACKET", "x":12.5, "y":2.5},
|
||||||
|
{"label":"BACK SLASH", "x":13.5, "y":2.5, "w":1.5},
|
||||||
|
{"label":"DELETE", "x":15.5, "y":2.5},
|
||||||
|
{"label":"END", "x":16.5, "y":2.5},
|
||||||
|
{"label":"PAGE DOWN", "x":17.5, "y":2.5},
|
||||||
|
{"label":"CAPS LOCK", "x":0, "y":3.5, "w":1.75},
|
||||||
|
{"label":"A", "x":1.75, "y":3.5},
|
||||||
|
{"label":"S", "x":2.75, "y":3.5},
|
||||||
|
{"label":"D", "x":3.75, "y":3.5},
|
||||||
|
{"label":"F", "x":4.75, "y":3.5},
|
||||||
|
{"label":"G", "x":5.75, "y":3.5},
|
||||||
|
{"label":"H", "x":6.75, "y":3.5},
|
||||||
|
{"label":"J", "x":7.75, "y":3.5},
|
||||||
|
{"label":"K", "x":8.75, "y":3.5},
|
||||||
|
{"label":"L", "x":9.75, "y":3.5},
|
||||||
|
{"label":"SEMICOLON", "x":10.75, "y":3.5},
|
||||||
|
{"label":"SINGLE TICK", "x":11.75, "y":3.5},
|
||||||
|
{"label":"ENTER", "x":12.75, "y":3.5, "w":2.25},
|
||||||
|
{"label":"LEFT SHIFT", "x":0, "y":4.5, "w":2.25},
|
||||||
|
{"label":"Z", "x":2.25, "y":4.5},
|
||||||
|
{"label":"X", "x":3.25, "y":4.5},
|
||||||
|
{"label":"C", "x":4.25, "y":4.5},
|
||||||
|
{"label":"V", "x":5.25, "y":4.5},
|
||||||
|
{"label":"B", "x":6.25, "y":4.5},
|
||||||
|
{"label":"N", "x":7.25, "y":4.5},
|
||||||
|
{"label":"M", "x":8.25, "y":4.5},
|
||||||
|
{"label":"COMMA", "x":9.25, "y":4.5},
|
||||||
|
{"label":"PERIOD", "x":10.25, "y":4.5},
|
||||||
|
{"label":"FORWARD SLASH", "x":11.25, "y":4.5},
|
||||||
|
{"label":"RIGHT SHIFT", "x":12.25, "y":4.5, "w":2.75},
|
||||||
|
{"label":"UP ARROW", "x":16.5, "y":4.5},
|
||||||
|
{"label":"LEFT CTRL", "x":0.005, "y":5.5, "w":1.24},
|
||||||
|
{"label":"LEFT WIN", "x":1.255, "y":5.5, "w":1.24},
|
||||||
|
{"label":"LEFT ALT", "x":2.505, "y":5.5, "w":1.24},
|
||||||
|
{"label":"SPACEBAR", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"RIGHT ALT", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"FN", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"MENU", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"RIGHT CTRL", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"LEFT ARROW", "x":15.5, "y":5.5},
|
||||||
|
{"label":"DOWN ARROW", "x":16.5, "y":5.5},
|
||||||
|
{"label":"RIGHT ARROW", "x":17.5, "y":5.5}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,203 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum alt67_keycodes {
|
||||||
|
L_BRI = SAFE_RANGE, //LED Brightness Increase
|
||||||
|
L_BRD, //LED Brightness Decrease
|
||||||
|
L_PTN, //LED Pattern Select Next
|
||||||
|
L_PTP, //LED Pattern Select Previous
|
||||||
|
L_PSI, //LED Pattern Speed Increase
|
||||||
|
L_PSD, //LED Pattern Speed Decrease
|
||||||
|
L_T_MD, //LED Toggle Mode
|
||||||
|
L_T_ONF, //LED Toggle On / Off
|
||||||
|
L_ON, //LED On
|
||||||
|
L_OFF, //LED Off
|
||||||
|
L_T_BR, //LED Toggle Breath Effect
|
||||||
|
L_T_PTD, //LED Toggle Scrolling Pattern Direction
|
||||||
|
U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
|
||||||
|
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||||
|
DBG_TOG, //DEBUG Toggle On / Off
|
||||||
|
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||||
|
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||||
|
DBG_MOU, //DEBUG Toggle Mouse Prints
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
|
||||||
|
|
||||||
|
keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||||
|
),
|
||||||
|
[1] = LAYOUT(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MSTP, KC_VOLU, \
|
||||||
|
L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||||
|
L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||||
|
),
|
||||||
|
/*
|
||||||
|
[X] = LAYOUT(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||||
|
),
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
|
||||||
|
#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
|
||||||
|
#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case L_BRI:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
|
||||||
|
else gcr_desired += LED_GCR_STEP;
|
||||||
|
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_BRD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
|
||||||
|
else gcr_desired -= LED_GCR_STEP;
|
||||||
|
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_PTN:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
|
||||||
|
else led_animation_id++;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_PTP:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
|
||||||
|
else led_animation_id--;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_PSI:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_animation_speed += ANIMATION_SPEED_STEP;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_PSD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_animation_speed -= ANIMATION_SPEED_STEP;
|
||||||
|
if (led_animation_speed < 0) led_animation_speed = 0;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_T_MD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_lighting_mode++;
|
||||||
|
if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_T_ONF:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_enabled = !led_enabled;
|
||||||
|
I2C3733_Control_Set(led_enabled);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_ON:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_enabled = 1;
|
||||||
|
I2C3733_Control_Set(led_enabled);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_OFF:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_enabled = 0;
|
||||||
|
I2C3733_Control_Set(led_enabled);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_T_BR:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_animation_breathing = !led_animation_breathing;
|
||||||
|
if (led_animation_breathing)
|
||||||
|
{
|
||||||
|
gcr_breathe = gcr_desired;
|
||||||
|
led_animation_breathe_cur = BREATHE_MIN_STEP;
|
||||||
|
breathe_dir = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case L_T_PTD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
led_animation_direction = !led_animation_direction;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case U_T_AUTO:
|
||||||
|
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||||
|
usb_extra_manual = !usb_extra_manual;
|
||||||
|
CDC_print("USB extra port manual mode ");
|
||||||
|
CDC_print(usb_extra_manual ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case U_T_AGCR:
|
||||||
|
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||||
|
usb_gcr_auto = !usb_gcr_auto;
|
||||||
|
CDC_print("USB GCR auto mode ");
|
||||||
|
CDC_print(usb_gcr_auto ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case DBG_TOG:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
debug_enable = !debug_enable;
|
||||||
|
CDC_print("Debug mode ");
|
||||||
|
CDC_print(debug_enable ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case DBG_MTRX:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
debug_matrix = !debug_matrix;
|
||||||
|
CDC_print("Debug matrix ");
|
||||||
|
CDC_print(debug_matrix ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case DBG_KBD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
debug_keyboard = !debug_keyboard;
|
||||||
|
CDC_print("Debug keyboard ");
|
||||||
|
CDC_print(debug_keyboard ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case DBG_MOU:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
debug_mouse = !debug_mouse;
|
||||||
|
CDC_print("Debug mouse ");
|
||||||
|
CDC_print(debug_mouse ? "enabled" : "disabled");
|
||||||
|
CDC_print("\r\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
return true; //Process all other keycodes normally
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Massdrop Inc.
|
||||||
|
|
||||||
|
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 "ctrl.h"
|
||||||
|
#include "led_matrix.h"
|
||||||
|
|
||||||
|
//Teal <-> Salmon
|
||||||
|
led_setup_t leds_teal_salmon[] = {
|
||||||
|
{ .hs = 0, .he = 33, .rs = 24, .re = 24, .gs = 215, .ge = 215, .bs = 204, .be = 204, .ef = EF_NONE },
|
||||||
|
{ .hs = 33, .he = 66, .rs = 24, .re = 255, .gs = 215, .ge = 114, .bs = 204, .be = 118, .ef = EF_NONE },
|
||||||
|
{ .hs = 66, .he = 100, .rs = 255, .re = 255, .gs = 114, .ge = 114, .bs = 118, .be = 118, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Yellow
|
||||||
|
led_setup_t leds_yellow[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Off
|
||||||
|
led_setup_t leds_off[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Red
|
||||||
|
led_setup_t leds_red[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Green
|
||||||
|
led_setup_t leds_green[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Blue
|
||||||
|
led_setup_t leds_blue[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//White
|
||||||
|
led_setup_t leds_white[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//White with moving red stripe
|
||||||
|
led_setup_t leds_white_with_red_stripe[] = {
|
||||||
|
{ .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
|
||||||
|
{ .hs = 0, .he = 15, .rs = 0, .re = 0, .gs = 0, .ge = 255, .bs = 0, .be = 255, .ef = EF_SCR_R | EF_SUBTRACT },
|
||||||
|
{ .hs = 15, .he = 30, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 0, .ef = EF_SCR_R | EF_SUBTRACT },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Black with moving red stripe
|
||||||
|
led_setup_t leds_black_with_red_stripe[] = {
|
||||||
|
{ .hs = 0, .he = 15, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
|
||||||
|
{ .hs = 15, .he = 30, .rs = 255, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Rainbow no scrolling
|
||||||
|
led_setup_t leds_rainbow_ns[] = {
|
||||||
|
{ .hs = 0, .he = 16.67, .rs = 255, .re = 255, .gs = 0, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER },
|
||||||
|
{ .hs = 16.67, .he = 33.33, .rs = 255, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER },
|
||||||
|
{ .hs = 33.33, .he = 50, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 255, .ef = EF_OVER },
|
||||||
|
{ .hs = 50, .he = 66.67, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER },
|
||||||
|
{ .hs = 66.67, .he = 83.33, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER },
|
||||||
|
{ .hs = 83.33, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 0, .ef = EF_OVER },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Rainbow scrolling
|
||||||
|
led_setup_t leds_rainbow_s[] = {
|
||||||
|
{ .hs = 0, .he = 16.67, .rs = 255, .re = 255, .gs = 0, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 16.67, .he = 33.33, .rs = 255, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 33.33, .he = 50, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 255, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 50, .he = 66.67, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 66.67, .he = 83.33, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .hs = 83.33, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 0, .ef = EF_OVER | EF_SCR_R },
|
||||||
|
{ .end = 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
//Add new LED animations here using one from above as example
|
||||||
|
//The last entry must be { .end = 1 }
|
||||||
|
//Add the new animation name to the list below following its format
|
||||||
|
|
||||||
|
void *led_setups[] = {
|
||||||
|
leds_rainbow_s,
|
||||||
|
leds_rainbow_ns,
|
||||||
|
leds_teal_salmon,
|
||||||
|
leds_yellow,
|
||||||
|
leds_red,
|
||||||
|
leds_green,
|
||||||
|
leds_blue,
|
||||||
|
leds_white,
|
||||||
|
leds_white_with_red_stripe,
|
||||||
|
leds_black_with_red_stripe,
|
||||||
|
leds_off
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Massdrop Inc.
|
||||||
|
|
||||||
|
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 "ctrl.h"
|
||||||
|
|
||||||
|
#include "d51_util.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "clks.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
matrix_row_t mlatest[MATRIX_ROWS];
|
||||||
|
matrix_row_t mlast[MATRIX_ROWS];
|
||||||
|
matrix_row_t mdebounced[MATRIX_ROWS];
|
||||||
|
|
||||||
|
uint8_t row_ports[] = { MATRIX_ROW_PORTS };
|
||||||
|
uint8_t row_pins[] = { MATRIX_ROW_PINS };
|
||||||
|
uint8_t col_ports[] = { MATRIX_COL_PORTS };
|
||||||
|
uint8_t col_pins[] = { MATRIX_COL_PINS };
|
||||||
|
uint32_t row_masks[2]; //NOTE: If more than PA PB used in the future, adjust code to accomodate
|
||||||
|
|
||||||
|
__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) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void)
|
||||||
|
{
|
||||||
|
memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||||
|
memset(mlast, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||||
|
memset(mdebounced, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||||
|
|
||||||
|
row_masks[PA] = 0;
|
||||||
|
row_masks[PB] = 0;
|
||||||
|
|
||||||
|
uint8_t row;
|
||||||
|
for (row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
{
|
||||||
|
PORT->Group[row_ports[row]].DIRCLR.reg = 1 << row_pins[row]; //Input
|
||||||
|
PORT->Group[row_ports[row]].OUTCLR.reg = 1 << row_pins[row]; //Low
|
||||||
|
PORT->Group[row_ports[row]].PINCFG[row_pins[row]].bit.INEN = 1; //Input Enable,
|
||||||
|
PORT->Group[row_ports[row]].PINCFG[row_pins[row]].bit.PULLEN = 1; //Pull Enable
|
||||||
|
row_masks[row_ports[row]] |= 1 << row_pins[row]; //Add pin to proper row mask
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t col;
|
||||||
|
for (col = 0; col < MATRIX_COLS; col++)
|
||||||
|
{
|
||||||
|
PORT->Group[col_ports[col]].DIRSET.reg = 1 << col_pins[col]; //Output
|
||||||
|
PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Low
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MATRIX_SCAN_DELAY 10 //Delay after setting a col to output (in us)
|
||||||
|
|
||||||
|
uint64_t mdebouncing = 0;
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
uint8_t mchanged;
|
||||||
|
uint8_t row;
|
||||||
|
uint8_t col;
|
||||||
|
uint32_t scans[2]; //PA PB
|
||||||
|
|
||||||
|
if (CLK_get_ms() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
|
||||||
|
|
||||||
|
//m15_off; //Profiling scans
|
||||||
|
|
||||||
|
memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t)); //Zero the result buffer
|
||||||
|
|
||||||
|
for (col = 0; col < MATRIX_COLS; col++)
|
||||||
|
{
|
||||||
|
PORT->Group[col_ports[col]].OUTSET.reg = 1 << col_pins[col]; //Set col output
|
||||||
|
|
||||||
|
CLK_delay_us(MATRIX_SCAN_DELAY); //Delay for output
|
||||||
|
|
||||||
|
scans[PA] = PORT->Group[PA].IN.reg & row_masks[PA]; //Read PA row pins data
|
||||||
|
scans[PB] = PORT->Group[PB].IN.reg & row_masks[PB]; //Read PB row pins data
|
||||||
|
|
||||||
|
PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Clear col output
|
||||||
|
|
||||||
|
for (row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
{
|
||||||
|
//Move scan bits from scans array into proper row bit locations
|
||||||
|
if (scans[row_ports[row]] & (1 << row_pins[row]))
|
||||||
|
mlatest[row] |= 1 << col;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mchanged = 0; //Default to no matrix change since last
|
||||||
|
|
||||||
|
for (row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
{
|
||||||
|
if (mlast[row] != mlatest[row])
|
||||||
|
mchanged = 1;
|
||||||
|
mlast[row] = mlatest[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mchanged)
|
||||||
|
{
|
||||||
|
for (row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
mdebounced[row] = mlatest[row];
|
||||||
|
mdebouncing = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Begin or extend debounce on change
|
||||||
|
mdebouncing = CLK_get_ms() + DEBOUNCING_DELAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
//m15_on; //Profiling scans
|
||||||
|
|
||||||
|
matrix_scan_quantum();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_row_t matrix_get_row(uint8_t row)
|
||||||
|
{
|
||||||
|
return mdebounced[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void)
|
||||||
|
{
|
||||||
|
char buf[(MATRIX_COLS+8)*(MATRIX_ROWS+1)] = "R C";
|
||||||
|
char *pbuf = buf+3;
|
||||||
|
uint32_t cols;
|
||||||
|
uint32_t rows;
|
||||||
|
matrix_row_t row;
|
||||||
|
|
||||||
|
for (cols = 1; cols <= MATRIX_COLS; cols++)
|
||||||
|
{
|
||||||
|
*pbuf = (cols%10)+48;
|
||||||
|
pbuf++;
|
||||||
|
}
|
||||||
|
*pbuf = '\r'; pbuf++;
|
||||||
|
*pbuf = '\n'; pbuf++;
|
||||||
|
|
||||||
|
for (rows = 1; rows <= MATRIX_ROWS; rows++)
|
||||||
|
{
|
||||||
|
row = matrix_get_row(rows-1);
|
||||||
|
if (rows < 10) { *pbuf = rows+48; pbuf++; *pbuf = ' '; pbuf++; *pbuf = ' '; pbuf++; }
|
||||||
|
else { *pbuf = (rows/10)+48; pbuf++; *pbuf = (rows%10)+48; pbuf++; *pbuf = ' '; pbuf++; }
|
||||||
|
for (cols = 0; cols < MATRIX_COLS; cols++)
|
||||||
|
{
|
||||||
|
if (row & 1 << cols) *pbuf = 'X';
|
||||||
|
else *pbuf = '.';
|
||||||
|
pbuf++;
|
||||||
|
}
|
||||||
|
*pbuf = '\r'; pbuf++;
|
||||||
|
*pbuf = '\n'; pbuf++;
|
||||||
|
}
|
||||||
|
*pbuf = 0;
|
||||||
|
dprint(buf);
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
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 MATRIX_H
|
||||||
|
#define MATRIX_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "keyboard.h"
|
||||||
|
|
||||||
|
#if (MATRIX_COLS <= 8)
|
||||||
|
typedef uint8_t matrix_row_t;
|
||||||
|
#elif (MATRIX_COLS <= 16)
|
||||||
|
typedef uint16_t matrix_row_t;
|
||||||
|
#elif (MATRIX_COLS <= 32)
|
||||||
|
typedef uint32_t matrix_row_t;
|
||||||
|
#else
|
||||||
|
#error "MATRIX_COLS: invalid value"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1<<col))
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* number of matrix rows */
|
||||||
|
uint8_t matrix_rows(void);
|
||||||
|
/* number of matrix columns */
|
||||||
|
uint8_t matrix_cols(void);
|
||||||
|
/* should be called at early stage of startup before matrix_init.(optional) */
|
||||||
|
void matrix_setup(void);
|
||||||
|
/* intialize matrix for scaning. */
|
||||||
|
void matrix_init(void);
|
||||||
|
/* scan all key states on matrix */
|
||||||
|
uint8_t matrix_scan(void);
|
||||||
|
/* whether modified from previous scan. used after matrix_scan. */
|
||||||
|
bool matrix_is_modified(void) __attribute__ ((deprecated));
|
||||||
|
/* whether a switch is on */
|
||||||
|
bool matrix_is_on(uint8_t row, uint8_t col);
|
||||||
|
/* matrix state on row */
|
||||||
|
matrix_row_t matrix_get_row(uint8_t row);
|
||||||
|
/* print matrix for debug */
|
||||||
|
void matrix_print(void);
|
||||||
|
|
||||||
|
/* power control */
|
||||||
|
void matrix_power_up(void);
|
||||||
|
void matrix_power_down(void);
|
||||||
|
|
||||||
|
/* executes code for Quantum */
|
||||||
|
void matrix_init_quantum(void);
|
||||||
|
void matrix_scan_quantum(void);
|
||||||
|
|
||||||
|
void matrix_init_kb(void);
|
||||||
|
void matrix_scan_kb(void);
|
||||||
|
|
||||||
|
void matrix_init_user(void);
|
||||||
|
void matrix_scan_user(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# CTRL
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The Massdrop CTRL is a TKL mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [Massdrop](https://github.com/massdrop)
|
||||||
|
Hardware Supported: Massdrop, Inc. CTRL PCBs utilizing Microchip's ATSAMD51J18A MCU and USB2422 2-Port USB 2.0 Hi-Speed Hub Controller, and ISSI's IS31FL3733 LED Drivers.
|
||||||
|
Hardware Availability: [Massdrop CTRL Mechanical Keyboard](https://www.massdrop.com/buy/massdrop-ctrl-mechanical-keyboard)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make massdrop/ctrl:default
|
||||||
|
|
||||||
|
For information on flashing this keyboard, visit the following links:
|
||||||
|
|
||||||
|
[Massdrop Loader Releases](https://github.com/Massdrop/mdloader/releases/tag/0.0.1)
|
||||||
|
[Massdrop Loader Repository and Instructions](https://github.com/Massdrop/mdloader)
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# project specific files
|
||||||
|
SRC = led_programs.c
|
||||||
|
SRC += matrix.c
|
||||||
|
|
||||||
|
#For platform and packs
|
||||||
|
ARM_ATSAM = SAMD51J18A
|
||||||
|
MCU = cortex-m4
|
||||||
|
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
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
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||||
|
VIRTSER_ENABLE = no # USB Serial Driver
|
||||||
|
RAW_ENABLE = no # Raw device
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "../../config.h"
|
#include "../../config.h"
|
||||||
|
|
||||||
#define MUSIC_MASK (keycode != KC_NO)
|
// #define MUSIC_MASK (keycode != KC_NO)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MIDI options
|
* MIDI options
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
- MIDI notes can be sent when in Music mode is on
|
- MIDI notes can be sent when in Music mode is on
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MIDI_BASIC
|
// #define MIDI_BASIC
|
||||||
|
|
||||||
/* enable advanced MIDI features:
|
/* enable advanced MIDI features:
|
||||||
- MIDI notes can be added to the keymap
|
- MIDI notes can be added to the keymap
|
||||||
@@ -32,12 +32,6 @@
|
|||||||
// help for fast typist+dual function keys?
|
// help for fast typist+dual function keys?
|
||||||
#define PERMISSIVE_HOLD
|
#define PERMISSIVE_HOLD
|
||||||
|
|
||||||
/* disable debug print */
|
|
||||||
#define NO_DEBUG
|
|
||||||
|
|
||||||
/* disable print */
|
|
||||||
#define NO_PRINT
|
|
||||||
|
|
||||||
/* speed up mousekeys a bit */
|
/* speed up mousekeys a bit */
|
||||||
#define MOUSEKEY_DELAY 50
|
#define MOUSEKEY_DELAY 50
|
||||||
#define MOUSEKEY_INTERVAL 20
|
#define MOUSEKEY_INTERVAL 20
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
#include "xtonhasvim.h"
|
#include "xtonhasvim.h"
|
||||||
|
#include "fancylighting.h"
|
||||||
|
|
||||||
/************************************
|
/************************************
|
||||||
* states
|
* states
|
||||||
@@ -27,7 +28,15 @@ enum layers {
|
|||||||
_RAISE,
|
_RAISE,
|
||||||
_ADJUST,
|
_ADJUST,
|
||||||
_MOVE,
|
_MOVE,
|
||||||
_MOUSE
|
_MOUSE,
|
||||||
|
_CMD
|
||||||
|
};
|
||||||
|
|
||||||
|
extern uint8_t vim_cmd_layer(void) { return _CMD; }
|
||||||
|
|
||||||
|
enum keymap_keycodes {
|
||||||
|
RAISE = VIM_SAFE_RANGE,
|
||||||
|
LOWER
|
||||||
};
|
};
|
||||||
|
|
||||||
/************************************
|
/************************************
|
||||||
@@ -48,14 +57,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*
|
*
|
||||||
* - Ctrl acts as Esc when tapped.
|
* - Ctrl acts as Esc when tapped.
|
||||||
* - Holding A or ; switches to movement layer.
|
* - Holding ; switches to movement layer.
|
||||||
* - Raise and Lower are one-shot layers.
|
* - Raise and Lower are one-shot layers.
|
||||||
*/
|
*/
|
||||||
[_QWERTY] = LAYOUT_planck_mit(
|
[_QWERTY] = LAYOUT_planck_mit(
|
||||||
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||||
LCTL_T(KC_ESC), LT(_MOVE,KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT,
|
LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,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, RSFT_T(KC_ENT),
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT),
|
||||||
TG(_MOUSE), X_____X, KC_LALT, KC_LGUI, OSL(_LOWER), KC_SPC, OSL(_RAISE), KC_LGUI, KC_LALT, X_____X, VIM_START
|
LSFT(KC_LALT), TG(_MOUSE), KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LGUI, KC_LALT, X_____X, VIM_START
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Lower
|
/* Lower
|
||||||
@@ -70,10 +79,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_LOWER] = LAYOUT_planck_mit(
|
[_LOWER] = LAYOUT_planck_mit(
|
||||||
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC,
|
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC,
|
||||||
KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
|
KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
|
||||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN,
|
||||||
X_____X, TO(_QWERTY), _______, _______, _______, KC_BSPC, OSL(_ADJUST), _______, _______, TO(_QWERTY), X_____X
|
_______, TO(_QWERTY), _______, _______, _______, KC_BSPC, _______, _______, _______, TO(_QWERTY), X_____X
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Raise
|
/* Raise
|
||||||
@@ -88,10 +97,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_RAISE] = LAYOUT_planck_mit(
|
[_RAISE] = LAYOUT_planck_mit(
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC,
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||||
KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
||||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN,
|
||||||
X_____X, TO(_QWERTY), _______, _______, OSL(_ADJUST), X_____X, _______, _______, _______, TO(_QWERTY), X_____X
|
_______, TO(_QWERTY), _______, _______, _______, KC_BSPC, _______, _______, _______, TO(_QWERTY), X_____X
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|
||||||
@@ -99,17 +108,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* ,-------------------------------------------------------------------------------------.
|
* ,-------------------------------------------------------------------------------------.
|
||||||
* |RGBPlain| Reset| | | | | | | | | | Del |
|
* |RGBPlain| Reset| | | | | | | | | | Del |
|
||||||
* |--------+------+------+------+------+-------------+------+------+------+------+------|
|
* |--------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
* |RGBMode-| | |Aud on|Audoff|AGnorm|AGswap| | | | |Lite+ |
|
* |RGBMode-| | | | | | | | | | |Lite+ |
|
||||||
* |--------+------+------+------+------+------|------+------+------+------+------+------|
|
* |--------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
* |RGBMode+|Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | |Lite- |
|
* |RGBMode+| | | | | | | Next | Vol- | Vol+ | Play |Lite- |
|
||||||
* |--------+------+------+------+------+------+------+------+------+------+------+------|
|
* |--------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | RGB | Bail | | | | | | | | Bail | |
|
* | RGB | Bail | | | | | | | | Bail | |
|
||||||
* `-------------------------------------------------------------------------------------'
|
* `-------------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_ADJUST] = LAYOUT_planck_mit(
|
[_ADJUST] = LAYOUT_planck_mit(
|
||||||
RGB_MODE_PLAIN, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
|
RGB_MODE_PLAIN, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
|
||||||
RGB_MODE_REVERSE, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, RGB_VAI,
|
RGB_MODE_REVERSE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
|
||||||
RGB_MODE_FORWARD, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, RGB_VAD,
|
RGB_MODE_FORWARD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, RGB_VAD,
|
||||||
RGB_TOG, TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), X_____X
|
RGB_TOG, TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), X_____X
|
||||||
),
|
),
|
||||||
|
|
||||||
@@ -120,7 +129,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
TO(_QWERTY), X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X,
|
TO(_QWERTY), X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X,
|
||||||
_______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X,
|
_______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X,
|
||||||
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
|
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
|
||||||
X_____X, TO(_QWERTY), _______, _______, _______, X_____X, _______, _______, _______, TO(_QWERTY), X_____X
|
_______, TO(_QWERTY), _______, _______, _______, X_____X, _______, _______, _______, TO(_QWERTY), X_____X
|
||||||
),
|
),
|
||||||
|
|
||||||
/* mouse layer
|
/* mouse layer
|
||||||
@@ -132,68 +141,124 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______, TO(_QWERTY), _______, _______, _______, X_____X, _______, _______, _______, TO(_QWERTY), X_____X
|
_______, TO(_QWERTY), _______, _______, _______, X_____X, _______, _______, _______, TO(_QWERTY), X_____X
|
||||||
),
|
),
|
||||||
|
|
||||||
/* vim edit mode. just has an escape -> _CMD key */
|
|
||||||
[_EDIT] = LAYOUT_planck_mit(
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
VIM_START, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), _______
|
|
||||||
),
|
|
||||||
|
|
||||||
/* vim command layer.
|
/* vim command layer.
|
||||||
*/
|
*/
|
||||||
[_CMD] = LAYOUT_planck_mit(
|
[_CMD] = LAYOUT_planck_mit(
|
||||||
X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X,
|
X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X,
|
||||||
VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X,
|
VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X,
|
||||||
VIM_SHIFT, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,
|
VIM_SHIFT, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,
|
||||||
X_____X, TO(_QWERTY), _______, _______, X_____X, X_____X, X_____X, _______, _______, TO(_QWERTY), X_____X
|
_______, TO(_QWERTY), _______, _______, X_____X, X_____X, X_____X, _______, _______, TO(_QWERTY), X_____X
|
||||||
)
|
)
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define C_RED 0xFF, 0x00, 0x00
|
||||||
|
#define C_GRN 0x00, 0xFF, 0x00
|
||||||
|
#define C_BLU 0x00, 0x00, 0xFF
|
||||||
|
|
||||||
|
#define C_YAN 0x00, 0xFF, 0xFF
|
||||||
|
#define C_PRP 0x7A, 0x00, 0xFF
|
||||||
|
#define C_ORG 0xFF, 0x93, 0x00
|
||||||
|
|
||||||
/** Set just 4 LEDs closest to the user. Slightly less annoying to bystanders.*/
|
/** Set just 4 LEDs closest to the user. Slightly less annoying to bystanders.*/
|
||||||
void rgbflag(uint8_t r, uint8_t g, uint8_t b) {
|
void rgbflag(uint8_t r, uint8_t g, uint8_t b, uint8_t rr, uint8_t gg, uint8_t bb) {
|
||||||
for(int i = 0; i < RGBLED_NUM; i++){
|
LED_TYPE *target_led = user_rgb_mode ? shadowed_led : led;
|
||||||
switch(i) {
|
for (int i = 0; i < RGBLED_NUM; i++) {
|
||||||
case 9 ... 12:
|
switch (i) {
|
||||||
// rgblight_setrgb_at(r,g,b,i);
|
case 12: case 13:
|
||||||
led[i].r = r;
|
target_led[i].r = r;
|
||||||
led[i].g = g;
|
target_led[i].g = g;
|
||||||
led[i].b = b;
|
target_led[i].b = b;
|
||||||
break;
|
break;
|
||||||
default:
|
case 8: case 9:
|
||||||
// rgblight_setrgb_at(0,0,0,i);
|
target_led[i].r = rr;
|
||||||
led[i].r = 0;
|
target_led[i].g = gg;
|
||||||
led[i].g = 0;
|
target_led[i].b = bb;
|
||||||
led[i].b = 0;
|
break;
|
||||||
break;
|
default:
|
||||||
|
target_led[i].r = 0;
|
||||||
|
target_led[i].g = 0;
|
||||||
|
target_led[i].b = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t layer_state_set_user(uint32_t state) {
|
void set_state_leds(void) {
|
||||||
if(rgblight_get_mode() == 1) {
|
if (rgblight_get_mode() == 1) {
|
||||||
switch (biton32(state)) {
|
switch (biton32(layer_state)) {
|
||||||
case _RAISE:
|
case _RAISE:
|
||||||
|
rgbflag(C_BLU, C_GRN);
|
||||||
|
break;
|
||||||
case _LOWER:
|
case _LOWER:
|
||||||
|
rgbflag(C_BLU, C_RED);
|
||||||
|
break;
|
||||||
case _ADJUST:
|
case _ADJUST:
|
||||||
rgbflag(0x00, 0x00, 0xFF);
|
rgbflag(C_BLU, C_PRP);
|
||||||
break;
|
break;
|
||||||
case _MOVE:
|
case _MOVE:
|
||||||
|
rgbflag(C_RED, C_PRP);
|
||||||
|
break;
|
||||||
case _MOUSE:
|
case _MOUSE:
|
||||||
rgbflag(0xFF, 0x00, 0x00);
|
rgbflag(C_RED, C_GRN);
|
||||||
break;
|
break;
|
||||||
case _CMD:
|
case _CMD:
|
||||||
rgbflag(0x00, 0xFF, 0x00);
|
switch(vstate) {
|
||||||
break;
|
case VIM_V:
|
||||||
case _EDIT:
|
case VIM_VI:
|
||||||
rgbflag(0x7A, 0x00, 0xFF);
|
case VIM_VS:
|
||||||
break;
|
rgbflag(C_GRN, C_YAN);
|
||||||
|
break;
|
||||||
|
case VIM_C:
|
||||||
|
case VIM_CI:
|
||||||
|
rgbflag(C_GRN, C_ORG);
|
||||||
|
break;
|
||||||
|
case VIM_D:
|
||||||
|
case VIM_DI:
|
||||||
|
rgbflag(C_GRN, C_RED);
|
||||||
|
break;
|
||||||
|
case VIM_G:
|
||||||
|
rgbflag(C_GRN, C_BLU);
|
||||||
|
break;
|
||||||
|
case VIM_Y:
|
||||||
|
rgbflag(C_GRN, C_PRP);
|
||||||
|
break;
|
||||||
|
case VIM_START:
|
||||||
|
default:
|
||||||
|
rgbflag(C_GRN, C_GRN);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default: // for any other layers, or the default layer
|
default: // for any other layers, or the default layer
|
||||||
rgbflag(0x00, 0xFF, 0xFF);
|
rgbflag(C_YAN, C_YAN);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return state;
|
}
|
||||||
|
|
||||||
|
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch(keycode) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
@@ -4,3 +4,5 @@ endif
|
|||||||
|
|
||||||
MOUSEKEY_ENABLE = yes
|
MOUSEKEY_ENABLE = yes
|
||||||
BACKLIGHT_ENABLE = no
|
BACKLIGHT_ENABLE = no
|
||||||
|
AUDIO_ENABLE = no
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
@@ -1 +0,0 @@
|
|||||||
#include "octagon.h"
|
|
||||||
Loaded 100 of 361 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user