Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38aefaf78e | ||
|
|
60b2a9a5ea | ||
|
|
537623c9db | ||
|
|
ec053c8283 | ||
|
|
c5ffd182c8 | ||
|
|
93bce83255 | ||
|
|
b0b433f3cf | ||
|
|
3e6f7bc6bf | ||
|
|
f166a22c98 | ||
|
|
41b9be560d | ||
|
|
4f01c8623f | ||
|
|
9067dc817a | ||
|
|
afb93b7f48 | ||
|
|
99f5d6c56d | ||
|
|
de386e5972 | ||
|
|
482ec79e59 | ||
|
|
fa8359fa1a | ||
|
|
0c5b3826d1 | ||
|
|
da5b4ec733 | ||
|
|
68072e931a | ||
|
|
c7b28bffc1 | ||
|
|
c47fa31a00 | ||
|
|
edf8552970 | ||
|
|
ab3fba2cdf | ||
|
|
c6c7aec85d | ||
|
|
8c1b8cf3a3 | ||
|
|
cffe671a61 | ||
|
|
f418efcaf5 | ||
|
|
714cf021a4 | ||
|
|
5d41db6308 | ||
|
|
20a16d29fe | ||
|
|
17794e0b25 | ||
|
|
92cb0b6f2f | ||
|
|
9496d11b06 | ||
|
|
0f7be8b458 | ||
|
|
178ceba735 | ||
|
|
d143ddc062 | ||
|
|
b3d41d9d6d | ||
|
|
e6d8a6111b | ||
|
|
297a7fe0d1 | ||
|
|
ff854565ce | ||
|
|
2a948e7771 | ||
|
|
983c93fe81 | ||
|
|
dccafb64e6 | ||
|
|
475f832b0f | ||
|
|
a76a79b827 | ||
|
|
f8e4f7ea80 | ||
|
|
0850a8cb63 | ||
|
|
c61d7d7cb0 | ||
|
|
eac4ce972d | ||
|
|
00abe5d8ed | ||
|
|
0f9e2659c9 | ||
|
|
acec007dfa | ||
|
|
6c37798aac | ||
|
|
df9388fb8a | ||
|
|
460da06ce4 | ||
|
|
494fc51812 |
No files matched your search
+21
-2
@@ -229,13 +229,32 @@ ifeq ($(strip $(LCD_ENABLE)), yes)
|
|||||||
CIE1931_CURVE = yes
|
CIE1931_CURVE = yes
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
|
# backward compat
|
||||||
|
ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
|
||||||
|
BACKLIGHT_ENABLE = custom
|
||||||
|
endif
|
||||||
|
|
||||||
|
VALID_BACKLIGHT_TYPES := yes custom
|
||||||
|
|
||||||
|
BACKLIGHT_ENABLE ?= no
|
||||||
|
ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
|
||||||
|
ifeq ($(filter $(BACKLIGHT_ENABLE),$(VALID_BACKLIGHT_TYPES)),)
|
||||||
|
$(error BACKLIGHT_ENABLE="$(BACKLIGHT_ENABLE)" is not a valid backlight type)
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||||
CIE1931_CURVE = yes
|
CIE1931_CURVE = yes
|
||||||
endif
|
endif
|
||||||
ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
|
|
||||||
|
ifeq ($(strip $(BACKLIGHT_ENABLE)), custom)
|
||||||
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
|
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PLATFORM),AVR)
|
||||||
|
SRC += $(QUANTUM_DIR)/backlight/backlight_avr.c
|
||||||
|
else
|
||||||
|
SRC += $(QUANTUM_DIR)/backlight/backlight_arm.c
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(CIE1931_CURVE)), yes)
|
ifeq ($(strip $(CIE1931_CURVE)), yes)
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
# Languages
|
|
||||||
|
|
||||||
* [English](/)
|
|
||||||
* [Chinese](zh/)
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- Translations
|
||||||
|
- [:uk: English](/)
|
||||||
|
- [:cn: 中文](/zh-cn/)
|
||||||
@@ -109,6 +109,7 @@
|
|||||||
* [Using Eclipse with QMK](other_eclipse.md)
|
* [Using Eclipse with QMK](other_eclipse.md)
|
||||||
* [Using VSCode with QMK](other_vscode.md)
|
* [Using VSCode with QMK](other_vscode.md)
|
||||||
* [Support](support.md)
|
* [Support](support.md)
|
||||||
|
* [How to add translations](translating.md)
|
||||||
|
|
||||||
* QMK Internals (In Progress)
|
* QMK Internals (In Progress)
|
||||||
* [Defines](internals_defines.md)
|
* [Defines](internals_defines.md)
|
||||||
|
|||||||
@@ -6,15 +6,15 @@ This guide is catered towards advance users and assumes you can compile an ARM c
|
|||||||
|
|
||||||
## Installing the software
|
## Installing the software
|
||||||
|
|
||||||
The main objective here is to get the MCU Eclipse IDE correcly installed on our machine. The necesarry instructions are derived from [this](https://gnu-mcu-eclipse.github.io/install/) install guide.
|
The main objective here is to get the MCU Eclipse IDE correctly installed on our machine. The necessary instructions are derived from [this](https://gnu-mcu-eclipse.github.io/install/) install guide.
|
||||||
|
|
||||||
### The xPack Manager
|
### The xPack Manager
|
||||||
|
|
||||||
This tool is a software package manager and it is used to help us get the necesarry depencencies.
|
This tool is a software package manager and it is used to help us get the necessary dependencies.
|
||||||
|
|
||||||
XPM runs using Node.js so grab that form [here](https://nodejs.org/en/). After installation, open a terminal and type `npm -v`. A reply with the version number means that the instalation was successful.
|
XPM runs using Node.js so grab that from [here](https://nodejs.org/en/). After installation, open a terminal and type `npm -v`. A reply with the version number means that the installation was successful.
|
||||||
|
|
||||||
XPM instalation instructions can be found [here](https://www.npmjs.com/package/xpm) and are OS specific. Entering `xpm --version` to your terminal should return the software version.
|
XPM installation instructions can be found [here](https://www.npmjs.com/package/xpm) and are OS specific. Entering `xpm --version` to your terminal should return the software version.
|
||||||
|
|
||||||
### The ARM Toolchain
|
### The ARM Toolchain
|
||||||
|
|
||||||
@@ -26,10 +26,10 @@ If you are using windows you need to install this!
|
|||||||
|
|
||||||
`xpm install --global @gnu-mcu-eclipse/windows-build-tools`
|
`xpm install --global @gnu-mcu-eclipse/windows-build-tools`
|
||||||
|
|
||||||
### Programer/Debugger Drivers
|
### Programmer/Debugger Drivers
|
||||||
|
|
||||||
Now its the time to install your programer's drivers. This tutorial was made using an ST-Link v2 which you can get from almost anywhere.
|
Now it's time to install your programmer's drivers. This tutorial was made using an ST-Link v2 which you can get from almost anywhere.
|
||||||
If you have an ST-Link the drivers can be found [here](https://www.st.com/en/development-tools/stsw-link009.html) otherwise consult the manufuturer of your tool.
|
If you have an ST-Link the drivers can be found [here](https://www.st.com/en/development-tools/stsw-link009.html) otherwise consult the manufacturer of your tool.
|
||||||
|
|
||||||
### OpenOCD
|
### OpenOCD
|
||||||
|
|
||||||
@@ -84,4 +84,4 @@ Reset your keyboard.
|
|||||||
Press the bug icon and if all goes well you should soon find yourself in the debug perspective. Here the program counter will pause at the beginning of the main function and way for you to press Play. Most of the features of all debuggers work on ARM MCUs but for exact details google is your friend!
|
Press the bug icon and if all goes well you should soon find yourself in the debug perspective. Here the program counter will pause at the beginning of the main function and way for you to press Play. Most of the features of all debuggers work on ARM MCUs but for exact details google is your friend!
|
||||||
|
|
||||||
|
|
||||||
Happy debugging!
|
Happy debugging!
|
||||||
+1
-1
@@ -44,7 +44,7 @@ qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build
|
|||||||
We are looking for people to create and maintain a `qmk` package for more operating systems. If you would like to create a package for your OS please follow these guidelines:
|
We are looking for people to create and maintain a `qmk` package for more operating systems. If you would like to create a package for your OS please follow these guidelines:
|
||||||
|
|
||||||
* Follow best practices for your OS when they conflict with these guidelines
|
* Follow best practices for your OS when they conflict with these guidelines
|
||||||
* Documment why in a comment when you do deviate
|
* Document why in a comment when you do deviate
|
||||||
* Install using a virtualenv
|
* Install using a virtualenv
|
||||||
* Instruct the user to set the environment variable `QMK_HOME` to have the firmware source checked out somewhere other than `~/qmk_firmware`.
|
* Instruct the user to set the environment variable `QMK_HOME` to have the firmware source checked out somewhere other than `~/qmk_firmware`.
|
||||||
|
|
||||||
|
|||||||
@@ -224,6 +224,7 @@ There are a few different ways to set handedness for split keyboards (listed in
|
|||||||
2. Set `EE_HANDS` and flash `eeprom-lefthand.eep`/`eeprom-righthand.eep` to each half
|
2. Set `EE_HANDS` and flash `eeprom-lefthand.eep`/`eeprom-righthand.eep` to each half
|
||||||
* For boards with DFU bootloader you can use `:dfu-split-left`/`:dfu-split-right` to flash these EEPROM files
|
* For boards with DFU bootloader you can use `:dfu-split-left`/`:dfu-split-right` to flash these EEPROM files
|
||||||
* For boards with Caterina bootloader (like stock Pro Micros), use `:avrdude-split-left`/`:avrdude-split-right`
|
* For boards with Caterina bootloader (like stock Pro Micros), use `:avrdude-split-left`/`:avrdude-split-right`
|
||||||
|
* For boards with ARM DFU bootloader (like Proton C), use `:dfu-util-split-left`/`:dfu-util-split-right`
|
||||||
3. Set `MASTER_RIGHT`: Half that is plugged into the USB port is determined to be the master and right half (inverse of the default)
|
3. Set `MASTER_RIGHT`: Half that is plugged into the USB port is determined to be the master and right half (inverse of the default)
|
||||||
4. Default: The side that is plugged into the USB port is the master half and is assumed to be the left half. The slave side is the right half
|
4. Default: The side that is plugged into the USB port is the master half and is assumed to be the left half. The slave side is the right half
|
||||||
|
|
||||||
|
|||||||
+37
-13
@@ -1,6 +1,8 @@
|
|||||||
# Backlighting
|
# Backlighting
|
||||||
|
|
||||||
Many keyboards support backlit keys by way of individual LEDs placed through or underneath the keyswitches. QMK is able to control the brightness of these LEDs by switching them on and off rapidly in a certain ratio, a technique known as *Pulse Width Modulation*, or PWM. By altering the duty cycle of the PWM signal, it creates the illusion of dimming.
|
Many keyboards support backlit keys by way of individual LEDs placed through or underneath the keyswitches. This feature is distinct from both the [RGB underglow](feature_rgblight.md) and [RGB matrix](feature_rgb_matrix.md) features as it usually allows for only a single colour per switch, though you can obviously install multiple different single coloured LEDs on a keyboard.
|
||||||
|
|
||||||
|
QMK is able to control the brightness of these LEDs by switching them on and off rapidly in a certain ratio, a technique known as *Pulse Width Modulation*, or PWM. By altering the duty cycle of the PWM signal, it creates the illusion of dimming.
|
||||||
|
|
||||||
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
|
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
|
||||||
|
|
||||||
@@ -12,9 +14,8 @@ Most keyboards have backlighting enabled by default if they support it, but if i
|
|||||||
BACKLIGHT_ENABLE = yes
|
BACKLIGHT_ENABLE = yes
|
||||||
```
|
```
|
||||||
|
|
||||||
You should then be able to use the keycodes below to change the backlight level.
|
|
||||||
|
|
||||||
## Keycodes
|
## Keycodes
|
||||||
|
Once enabled the following keycodes below can be used to change the backlight level.
|
||||||
|
|
||||||
|Key |Description |
|
|Key |Description |
|
||||||
|---------|------------------------------------------|
|
|---------|------------------------------------------|
|
||||||
@@ -26,9 +27,9 @@ You should then be able to use the keycodes below to change the backlight level.
|
|||||||
|`BL_DEC` |Decrease the backlight level |
|
|`BL_DEC` |Decrease the backlight level |
|
||||||
|`BL_BRTG`|Toggle backlight breathing |
|
|`BL_BRTG`|Toggle backlight breathing |
|
||||||
|
|
||||||
## Caveats
|
## AVR driver
|
||||||
|
|
||||||
This feature is distinct from both the [RGB underglow](feature_rgblight.md) and [RGB matrix](feature_rgb_matrix.md) features as it usually allows for only a single colour per switch, though you can obviously use multiple different coloured LEDs on a keyboard.
|
### Caveats
|
||||||
|
|
||||||
Hardware PWM is supported according to the following table:
|
Hardware PWM is supported according to the following table:
|
||||||
|
|
||||||
@@ -58,9 +59,9 @@ All other pins will use software PWM. If the [Audio](feature_audio.md) feature i
|
|||||||
|
|
||||||
When both timers are in use for Audio, the backlight PWM will not use a hardware timer, but will instead be triggered during the matrix scan. In this case, breathing is not supported, and the backlight might flicker, because the PWM computation may not be called with enough timing precision.
|
When both timers are in use for Audio, the backlight PWM will not use a hardware timer, but will instead be triggered during the matrix scan. In this case, breathing is not supported, and the backlight might flicker, because the PWM computation may not be called with enough timing precision.
|
||||||
|
|
||||||
## Configuration
|
### AVR Configuration
|
||||||
|
|
||||||
To change the behaviour of the backlighting, `#define` these in your `config.h`:
|
To change the behavior of the backlighting, `#define` these in your `config.h`:
|
||||||
|
|
||||||
|Define |Default |Description |
|
|Define |Default |Description |
|
||||||
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
||||||
@@ -72,14 +73,14 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
|
|||||||
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|
||||||
|`BACKLIGHT_ON_STATE` |`0` |The state of the backlight pin when the backlight is "on" - `1` for high, `0` for low |
|
|`BACKLIGHT_ON_STATE` |`0` |The state of the backlight pin when the backlight is "on" - `1` for high, `0` for low |
|
||||||
|
|
||||||
## Backlight On State
|
### Backlight On State
|
||||||
|
|
||||||
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *high*.
|
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *high*.
|
||||||
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case, when the transistor is on, the pin is driven *low* instead.
|
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case, when the transistor is on, the pin is driven *low* instead.
|
||||||
|
|
||||||
This functionality is configured at the keyboard level with the `BACKLIGHT_ON_STATE` define.
|
This functionality is configured at the keyboard level with the `BACKLIGHT_ON_STATE` define.
|
||||||
|
|
||||||
## Multiple backlight pins
|
### Multiple backlight pins
|
||||||
|
|
||||||
Most keyboards have only one backlight pin which control all backlight LEDs (especially if the backlight is connected to an hardware PWM pin).
|
Most keyboards have only one backlight pin which control all backlight LEDs (especially if the backlight is connected to an hardware PWM pin).
|
||||||
In software PWM, it is possible to define multiple backlight pins. All those pins will be turned on and off at the same time during the PWM duty cycle.
|
In software PWM, it is possible to define multiple backlight pins. All those pins will be turned on and off at the same time during the PWM duty cycle.
|
||||||
@@ -87,13 +88,13 @@ This feature allows to set for instance the Caps Lock LED (or any other controll
|
|||||||
|
|
||||||
To activate multiple backlight pins, you need to add something like this to your user `config.h`:
|
To activate multiple backlight pins, you need to add something like this to your user `config.h`:
|
||||||
|
|
||||||
~~~c
|
```c
|
||||||
#define BACKLIGHT_LED_COUNT 2
|
#define BACKLIGHT_LED_COUNT 2
|
||||||
#undef BACKLIGHT_PIN
|
#undef BACKLIGHT_PIN
|
||||||
#define BACKLIGHT_PINS { F5, B2 }
|
#define BACKLIGHT_PINS { F5, B2 }
|
||||||
~~~
|
```
|
||||||
|
|
||||||
## Hardware PWM Implementation
|
### Hardware PWM Implementation
|
||||||
|
|
||||||
When using the supported pins for backlighting, QMK will use a hardware timer configured to output a PWM signal. This timer will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
|
When using the supported pins for backlighting, QMK will use a hardware timer configured to output a PWM signal. This timer will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
|
||||||
The desired brightness is calculated and stored in the `OCRxx` register. When the counter reaches this value, the backlight pin will go low, and is pulled high again when the counter resets.
|
The desired brightness is calculated and stored in the `OCRxx` register. When the counter reaches this value, the backlight pin will go low, and is pulled high again when the counter resets.
|
||||||
@@ -102,7 +103,7 @@ In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus th
|
|||||||
The breathing effect is achieved by registering an interrupt handler for `TIMER1_OVF_vect` that is called whenever the counter resets, roughly 244 times per second.
|
The breathing effect is achieved by registering an interrupt handler for `TIMER1_OVF_vect` that is called whenever the counter resets, roughly 244 times per second.
|
||||||
In this handler, the value of an incrementing counter is mapped onto a precomputed brightness curve. To turn off breathing, the interrupt handler is simply disabled, and the brightness reset to the level stored in EEPROM.
|
In this handler, the value of an incrementing counter is mapped onto a precomputed brightness curve. To turn off breathing, the interrupt handler is simply disabled, and the brightness reset to the level stored in EEPROM.
|
||||||
|
|
||||||
## Software PWM Implementation
|
### Software PWM Implementation
|
||||||
|
|
||||||
When `BACKLIGHT_PIN` is not set to a hardware backlight pin, QMK will use a hardware timer configured to trigger software interrupts. This time will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
|
When `BACKLIGHT_PIN` is not set to a hardware backlight pin, QMK will use a hardware timer configured to trigger software interrupts. This time will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
|
||||||
When resetting to 0, the CPU will fire an OVF (overflow) interrupt that will turn the LEDs on, starting the duty cycle.
|
When resetting to 0, the CPU will fire an OVF (overflow) interrupt that will turn the LEDs on, starting the duty cycle.
|
||||||
@@ -111,6 +112,29 @@ In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus th
|
|||||||
|
|
||||||
The breathing effect is the same as in the hardware PWM implementation.
|
The breathing effect is the same as in the hardware PWM implementation.
|
||||||
|
|
||||||
|
## ARM Driver
|
||||||
|
|
||||||
|
### Caveats
|
||||||
|
|
||||||
|
Currently only hardware PWM is supported, and does not provide automatic configuration.
|
||||||
|
|
||||||
|
?> STMF072 support is being investigated.
|
||||||
|
|
||||||
|
### ARM Configuration
|
||||||
|
|
||||||
|
To change the behavior of the backlighting, `#define` these in your `config.h`:
|
||||||
|
|
||||||
|
|Define |Default |Description |
|
||||||
|
|------------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
||||||
|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|
||||||
|
|`BACKLIGHT_PWM_DRIVER` |`PWMD4` |The PWM driver to use, see ST datasheets for pin to PWM timer mapping. Unless you are designing your own keyboard, you shouldn't need to change this|
|
||||||
|
|`BACKLIGHT_PWM_CHANNEL` |`3` |The PWM channel to use, see ST datasheets for pin to PWM channel mapping. Unless you are designing your own keyboard, you shouldn't need to change this|
|
||||||
|
|`BACKLIGHT_PAL_MODE` |`2` |The pin alternative function to use, see ST datasheets for pin AF mapping. Unless you are designing your own keyboard, you shouldn't need to change this|
|
||||||
|
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 31 excluding off) |
|
||||||
|
|`BACKLIGHT_CAPS_LOCK` |*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|
||||||
|
|`BACKLIGHT_BREATHING` |*Not defined*|Enable backlight breathing, if supported |
|
||||||
|
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|
||||||
|
|
||||||
## Backlight Functions
|
## Backlight Functions
|
||||||
|
|
||||||
|Function |Description |
|
|Function |Description |
|
||||||
|
|||||||
@@ -96,6 +96,8 @@ However, you'll have to flash the EEPROM files for the correct hand to each cont
|
|||||||
* `:avrdude-split-right`
|
* `:avrdude-split-right`
|
||||||
* `:dfu-split-left`
|
* `:dfu-split-left`
|
||||||
* `:dfu-split-right`
|
* `:dfu-split-right`
|
||||||
|
* `:dfu-util-split-left`
|
||||||
|
* `:dfu-util-split-right`
|
||||||
|
|
||||||
This setting is not changed when re-initializing the EEPROM using the `EEP_RST` key, or using the `eeconfig_init()` function. However, if you reset the EEPROM outside of the firmware's built in options (such as flashing a file that overwrites the `EEPROM`, like how the [QMK Toolbox]()'s "Reset EEPROM" button works), you'll need to re-flash the controller with the `EEPROM` files.
|
This setting is not changed when re-initializing the EEPROM using the `EEP_RST` key, or using the `eeconfig_init()` function. However, if you reset the EEPROM outside of the firmware's built in options (such as flashing a file that overwrites the `EEPROM`, like how the [QMK Toolbox]()'s "Reset EEPROM" button works), you'll need to re-flash the controller with the `EEPROM` files.
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -232,4 +232,6 @@ Flashing sequence:
|
|||||||
There are a number of DFU commands that you can use to flash firmware to a STM32 device:
|
There are a number of DFU commands that you can use to flash firmware to a STM32 device:
|
||||||
|
|
||||||
* `:dfu-util` - The default command for flashing to STM32 devices.
|
* `:dfu-util` - The default command for flashing to STM32 devices.
|
||||||
* `:st-link-cli` - This allows you to flash the firmware via ST-LINK's CLI utility, rather than dfu-util.
|
* `:dfu-util-split-left` - This flashes the normal firmware, just like the default option (`:dfu-util`). However, this also configures the "Left Side" EEPROM setting for split keyboards.
|
||||||
|
* `:dfu-util-split-right` - This flashes the normal firmware, just like the default option (`:dfu-util`). However, this also configures the "Right Side" EEPROM setting for split keyboards.
|
||||||
|
* `:st-link-cli` - This allows you to flash the firmware via ST-LINK's CLI utility, rather than dfu-util.
|
||||||
@@ -67,7 +67,7 @@ The presence of this file means that the folder is a keyboard target and can be
|
|||||||
|
|
||||||
### `<keyboard_name.c>`
|
### `<keyboard_name.c>`
|
||||||
|
|
||||||
This is where you will write custom code for your keyboard. Typically you will write code to initialize and interface with the hardware in your keyboard. If your keyboard consists of only a key matrix with no LEDs, speakers, or other auxillary hardware this file can be blank.
|
This is where you will write custom code for your keyboard. Typically you will write code to initialize and interface with the hardware in your keyboard. If your keyboard consists of only a key matrix with no LEDs, speakers, or other auxiliary hardware this file can be blank.
|
||||||
|
|
||||||
The following functions are typically defined in this file:
|
The following functions are typically defined in this file:
|
||||||
|
|
||||||
|
|||||||
+36
-4
@@ -3,6 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>QMK Firmware</title>
|
<title>QMK Firmware</title>
|
||||||
|
<link rel="icon" type="image/png" href="gitbook/images/favicon.png">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
<meta name="description" content="Description">
|
<meta name="description" content="Description">
|
||||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||||
@@ -20,19 +21,50 @@
|
|||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<script>
|
<script>
|
||||||
window.$docsify = {
|
window.$docsify = {
|
||||||
|
alias : {
|
||||||
|
'/en/(.*)': '/$1',
|
||||||
|
'/en-us/(.*)': '/$1',
|
||||||
|
'/en-gb/(.*)': '/$1',
|
||||||
|
'/.*/_langs.md': '/_langs.md',
|
||||||
|
},
|
||||||
|
basePath: '/',
|
||||||
name: 'QMK Firmware',
|
name: 'QMK Firmware',
|
||||||
nameLink: 'https://qmk.fm/',
|
nameLink: '/',
|
||||||
repo: 'qmk/qmk_firmware',
|
repo: 'qmk/qmk_firmware',
|
||||||
loadSidebar: '_summary.md',
|
loadSidebar: '_summary.md',
|
||||||
|
loadNavbar: '_langs.md',
|
||||||
|
mergeNavbar: true,
|
||||||
auto2top: true,
|
auto2top: true,
|
||||||
formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}',
|
formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}',
|
||||||
search: {
|
search: {
|
||||||
paths: 'auto',
|
paths: 'auto',
|
||||||
placeholder: 'Search Documentation...',
|
placeholder: {
|
||||||
noData: 'We could not find any documents matching your search.',
|
'/zh-cn/': '搜索',
|
||||||
|
'/': 'Search'
|
||||||
|
},
|
||||||
|
noData: {
|
||||||
|
'/zh-cn/': '没有结果!',
|
||||||
|
'/': 'No results!'
|
||||||
|
},
|
||||||
depth: 6
|
depth: 6
|
||||||
},
|
},
|
||||||
fallbackLanguages: ['zh']
|
plugins: [
|
||||||
|
function (hook, vm) {
|
||||||
|
hook.beforeEach(function (html) {
|
||||||
|
if (/githubusercontent\.com/.test(vm.route.file)) {
|
||||||
|
url = vm.route.file
|
||||||
|
.replace('raw.githubusercontent.com', 'github.com')
|
||||||
|
.replace(/\/master/, '/blob/master')
|
||||||
|
} else {
|
||||||
|
url = 'https://github.com/qmk/qmk_firmware/blob/master/docs/' + vm.route.file
|
||||||
|
}
|
||||||
|
var editHtml = '[:memo: Edit Document](' + url + ')\n'
|
||||||
|
return html
|
||||||
|
+ '\n\n----\n\n'
|
||||||
|
+ editHtml
|
||||||
|
})
|
||||||
|
},
|
||||||
|
]
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
|
<script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
|
||||||
|
|||||||
+14
-4
@@ -109,7 +109,7 @@ After it gets to this point, the build script will look for the DFU bootloader e
|
|||||||
dfu-programmer: no device present.
|
dfu-programmer: no device present.
|
||||||
Error: Bootloader not found. Trying again in 5s.
|
Error: Bootloader not found. Trying again in 5s.
|
||||||
|
|
||||||
Once it does this, you'll want to reset the controller. It should then show output similiar to this:
|
Once it does this, you'll want to reset the controller. It should then show output similar to this:
|
||||||
|
|
||||||
```
|
```
|
||||||
*** Attempting to flash, please don't remove device
|
*** Attempting to flash, please don't remove device
|
||||||
@@ -215,7 +215,7 @@ Additionally, if you want to flash multiple boards, use the following command:
|
|||||||
When you're done flashing boards, you'll need to hit Ctrl + C or whatever the correct keystroke is for your operating system to break the loop.
|
When you're done flashing boards, you'll need to hit Ctrl + C or whatever the correct keystroke is for your operating system to break the loop.
|
||||||
|
|
||||||
|
|
||||||
## HalfKay
|
### HalfKay
|
||||||
|
|
||||||
For the PJRC devices (Teensy's), when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
|
For the PJRC devices (Teensy's), when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
|
||||||
|
|
||||||
@@ -248,7 +248,7 @@ Programming.....................................................................
|
|||||||
Booting
|
Booting
|
||||||
```
|
```
|
||||||
|
|
||||||
## BootloadHID
|
### BootloadHID
|
||||||
|
|
||||||
For Bootmapper Client(BMC)/bootloadHID/ATmega32A based boards, when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
|
For Bootmapper Client(BMC)/bootloadHID/ATmega32A based boards, when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
|
||||||
|
|
||||||
@@ -284,7 +284,7 @@ Uploading 22016 (0x5600) bytes starting at 0 (0x0)
|
|||||||
0x05580 ... 0x05600
|
0x05580 ... 0x05600
|
||||||
```
|
```
|
||||||
|
|
||||||
## STM32 (ARM)
|
### STM32 (ARM)
|
||||||
|
|
||||||
For a majority of ARM boards (including the Proton C, Planck Rev 6, and Preonic Rev 3), when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
|
For a majority of ARM boards (including the Proton C, Planck Rev 6, and Preonic Rev 3), when you're ready to compile and flash your firmware, open up your terminal window and run the build command:
|
||||||
|
|
||||||
@@ -334,6 +334,16 @@ File downloaded successfully
|
|||||||
Transitioning to dfuMANIFEST state
|
Transitioning to dfuMANIFEST state
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### STM32 Commands
|
||||||
|
|
||||||
|
There are a number of DFU commands that you can use to flash firmware to a STM32 device:
|
||||||
|
|
||||||
|
* `:dfu-util` - The default command for flashing to STM32 devices.
|
||||||
|
* `:dfu-util-wait` - This works like the default command, but it gives you a (configurable) 10 second timeout before it attempts to flash the firmware. You can use `TIME_DELAY=20` from the command line to change the timeout.
|
||||||
|
* Eg: `make <keyboard>:<keymap>:dfu-util TIME_DELAY=5`
|
||||||
|
* `:dfu-util-split-left` - This flashes the normal firmware, just like the default option (`:dfu-util`). However, this also configures the "Left Side" EEPROM setting for split keyboards.
|
||||||
|
* `:dfu-util-split-right` - This flashes the normal firmware, just like the default option (`:dfu-util`). However, this also configures the "Right Side" EEPROM setting for split keyboards.
|
||||||
|
|
||||||
## Test It Out!
|
## Test It Out!
|
||||||
|
|
||||||
Congrats! Your custom firmware has been programmed to your keyboard!
|
Congrats! Your custom firmware has been programmed to your keyboard!
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# How to translate the QMK docs into different languages
|
||||||
|
|
||||||
|
All files in the root folder (`docs/`) should be in English - all other languages should be in subfolders with the ISO 639-1 language codes, followed by `-` and the country code where relevant. [A list of common ones can be found here](https://www.andiamo.co.uk/resources/iso-language-codes/). If this folder doesn't exist, you may create it. Each of the translated files should have the same name as the English version, so things can fall back successfully.
|
||||||
|
|
||||||
|
A `_summary.md` file should exist in this folder with a list of links to each file, with a translated name, and link preceded by the language folder:
|
||||||
|
|
||||||
|
* [QMK简介](zh-cn/getting_started_introduction.md)
|
||||||
|
|
||||||
|
Once you've finished translating a new language, you'll also need to modify the following files:
|
||||||
|
|
||||||
|
* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md)
|
||||||
|
Each line should contain a country flag in the format `:us:` followed by the name represented in its own language:
|
||||||
|
|
||||||
|
- [:cn: 中文](/zh-cn/)
|
||||||
|
|
||||||
|
* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html)
|
||||||
|
Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string:
|
||||||
|
|
||||||
|
'/zh-cn/': '没有结果!',
|
||||||
|
|
||||||
|
## Previewing the translations
|
||||||
|
|
||||||
|
Before opening a pull request, you can preview your additions if you have Python 3 installed by running this command in the `docs/` folder:
|
||||||
|
|
||||||
|
python -m http.server 9000
|
||||||
|
|
||||||
|
and navigating to http://localhost:9000/ - you should be able to select your new language from the "Translations" menu at the top-right.
|
||||||
|
|
||||||
|
Once you're happy with your work, feel free to open a pull request!
|
||||||
+90
-91
@@ -1,107 +1,106 @@
|
|||||||
* [完全菜鸟指南](newbs.md)
|
* [完全菜鸟指南](zh-cn/newbs.md)
|
||||||
* [入门](newbs_getting_started.md)
|
* [入门](zh-cn/newbs_getting_started.md)
|
||||||
* [构建你的第一个固件](newbs_building_firmware.md)
|
* [构建你的第一个固件](zh-cn/newbs_building_firmware.md)
|
||||||
* [刷新固件](newbs_flashing.md)
|
* [刷新固件](zh-cn/newbs_flashing.md)
|
||||||
* [测试和调试](newbs_testing_debugging.md)
|
* [测试和调试](zh-cn/newbs_testing_debugging.md)
|
||||||
* [Git最佳实践](newbs_best_practices.md)
|
* [Git最佳实践](zh-cn/newbs_best_practices.md)
|
||||||
* [学习资源](newbs_learn_more_resources.md)
|
* [学习资源](zh-cn/newbs_learn_more_resources.md)
|
||||||
|
|
||||||
* [QMK基础](README.md)
|
* [QMK基础](zh-cn/README.md)
|
||||||
* [QMK简介](getting_started_introduction.md)
|
* [QMK简介](zh-cn/getting_started_introduction.md)
|
||||||
* [向QMK贡献](contributing.md)
|
* [向QMK贡献](zh-cn/contributing.md)
|
||||||
* [如何使用Github](getting_started_github.md)
|
* [如何使用Github](zh-cn/getting_started_github.md)
|
||||||
* [获得帮助](getting_started_getting_help.md)
|
* [获得帮助](zh-cn/getting_started_getting_help.md)
|
||||||
|
|
||||||
* [问题解答](faq.md)
|
* [问题解答](zh-cn/faq.md)
|
||||||
* [一般问题](faq_general.md)
|
* [一般问题](zh-cn/faq_general.md)
|
||||||
* [构建/编译](faq_build.md)
|
* [构建/编译](zh-cn/faq_build.md)
|
||||||
* [调试/故障排除](faq_debug.md)
|
* [调试/故障排除](zh-cn/faq_debug.md)
|
||||||
* [键盘映射](faq_keymap.md)
|
* [键盘映射](zh-cn/faq_keymap.md)
|
||||||
|
|
||||||
* 详细指南
|
* 详细指南
|
||||||
* [安装构建工具](getting_started_build_tools.md)
|
* [安装构建工具](zh-cn/getting_started_build_tools.md)
|
||||||
* [vagrant指南](getting_started_vagrant.md)
|
* [vagrant指南](zh-cn/getting_started_vagrant.md)
|
||||||
* [构建/编译指令](getting_started_make_guide.md)
|
* [构建/编译指令](zh-cn/getting_started_make_guide.md)
|
||||||
* [刷新固件](flashing.md)
|
* [刷新固件](zh-cn/flashing.md)
|
||||||
* [定制功能](custom_quantum_functions.md)
|
* [定制功能](zh-cn/custom_quantum_functions.md)
|
||||||
* [映射概述](keymap.md)
|
* [映射概述](zh-cn/keymap.md)
|
||||||
|
|
||||||
* [硬件](hardware.md)
|
* [硬件](zh-cn/hardware.md)
|
||||||
* [AVR处理器](hardware_avr.md)
|
* [AVR处理器](zh-cn/hardware_avr.md)
|
||||||
* [驱动](hardware_drivers.md)
|
* [驱动](zh-cn/hardware_drivers.md)
|
||||||
|
|
||||||
* 参考
|
* 参考
|
||||||
* [键盘指南](hardware_keyboard_guidelines.md)
|
* [键盘指南](zh-cn/hardware_keyboard_guidelines.md)
|
||||||
* [配置选项](config_options.md)
|
* [配置选项](zh-cn/config_options.md)
|
||||||
* [键码](keycodes.md)
|
* [键码](zh-cn/keycodes.md)
|
||||||
* [记录最佳实践](documentation_best_practices.md)
|
* [记录最佳实践](zh-cn/documentation_best_practices.md)
|
||||||
* [文档模板](documentation_templates.md)
|
* [文档模板](zh-cn/documentation_templates.md)
|
||||||
* [术语表](reference_glossary.md)
|
* [术语表](zh-cn/reference_glossary.md)
|
||||||
* [单元测试](unit_testing.md)
|
* [单元测试](zh-cn/unit_testing.md)
|
||||||
* [有用的功能](ref_functions.md)
|
* [有用的功能](zh-cn/ref_functions.md)
|
||||||
* [配置器支持](reference_configurator_support.md)
|
* [配置器支持](zh-cn/reference_configurator_support.md)
|
||||||
* [info.json 格式](reference_info_json.md)
|
* [info.json 格式](zh-cn/reference_info_json.md)
|
||||||
|
|
||||||
* [特性](features.md)
|
* [特性](zh-cn/features.md)
|
||||||
* [基本键码](keycodes_basic.md)
|
* [基本键码](zh-cn/keycodes_basic.md)
|
||||||
* [US ANSI控制码](keycodes_us_ansi_shifted.md)
|
* [US ANSI控制码](zh-cn/keycodes_us_ansi_shifted.md)
|
||||||
* [量子键码](quantum_keycodes.md)
|
* [量子键码](zh-cn/quantum_keycodes.md)
|
||||||
* [高级键码](feature_advanced_keycodes.md)
|
* [高级键码](zh-cn/feature_advanced_keycodes.md)
|
||||||
* [音频](feature_audio.md)
|
* [音频](zh-cn/feature_audio.md)
|
||||||
* [自动shift](feature_auto_shift.md)
|
* [自动shift](zh-cn/feature_auto_shift.md)
|
||||||
* [背光](feature_backlight.md)
|
* [背光](zh-cn/feature_backlight.md)
|
||||||
* [蓝牙](feature_bluetooth.md)
|
* [蓝牙](zh-cn/feature_bluetooth.md)
|
||||||
* [热改键](feature_bootmagic.md)
|
* [热改键](zh-cn/feature_bootmagic.md)
|
||||||
* [组合](feature_combo)
|
* [组合](zh-cn/feature_combo)
|
||||||
* [命令](feature_command.md)
|
* [命令](zh-cn/feature_command.md)
|
||||||
* [拨动开关](feature_dip_switch.md)
|
* [拨动开关](zh-cn/feature_dip_switch.md)
|
||||||
* [动态宏指令](feature_dynamic_macros.md)
|
* [动态宏指令](zh-cn/feature_dynamic_macros.md)
|
||||||
* [编码器](feature_encoders.md)
|
* [编码器](zh-cn/feature_encoders.md)
|
||||||
* [重音号Esc复合键](feature_grave_esc.md)
|
* [重音号Esc复合键](zh-cn/feature_grave_esc.md)
|
||||||
* [自锁键](feature_key_lock.md)
|
* [自锁键](zh-cn/feature_key_lock.md)
|
||||||
* [布局](feature_layouts.md)
|
* [布局](zh-cn/feature_layouts.md)
|
||||||
* [前导键](feature_leader_key.md)
|
* [前导键](zh-cn/feature_leader_key.md)
|
||||||
* [LED阵列](feature_led_matrix.md)
|
* [LED阵列](zh-cn/feature_led_matrix.md)
|
||||||
* [宏指令](feature_macros.md)
|
* [宏指令](zh-cn/feature_macros.md)
|
||||||
* [鼠标键](feature_mouse_keys.md)
|
* [鼠标键](zh-cn/feature_mouse_keys.md)
|
||||||
* [一键功能](feature_advanced_keycodes.md#one-shot-keys)
|
* [一键功能](zh-cn/feature_advanced_keycodes.md#one-shot-keys)
|
||||||
* [指针设备](feature_pointing_device.md)
|
* [指针设备](zh-cn/feature_pointing_device.md)
|
||||||
* [PS/2鼠标](feature_ps2_mouse.md)
|
* [PS/2鼠标](zh-cn/feature_ps2_mouse.md)
|
||||||
* [RGB灯光](feature_rgblight.md)
|
* [RGB灯光](zh-cn/feature_rgblight.md)
|
||||||
* [RGB矩阵](feature_rgb_matrix.md)
|
* [RGB矩阵](zh-cn/feature_rgb_matrix.md)
|
||||||
* [空格候补换挡](feature_space_cadet_shift.md)
|
* [空格候补换挡](zh-cn/feature_space_cadet.md)
|
||||||
* [空格候补换挡回车](feature_space_cadet_shift_enter.md)
|
* [速录机](zh-cn/feature_stenography.md)
|
||||||
* [速录机](feature_stenography.md)
|
* [换手](zh-cn/feature_swap_hands.md)
|
||||||
* [换手](feature_swap_hands.md)
|
* [多击键](zh-cn/feature_tap_dance.md)
|
||||||
* [多击键](feature_tap_dance.md)
|
* [终端](zh-cn/feature_terminal.md)
|
||||||
* [终端](feature_terminal.md)
|
* [热敏打印机](zh-cn/feature_thermal_printer.md)
|
||||||
* [热敏打印机](feature_thermal_printer.md)
|
* [Unicode](zh-cn/feature_unicode.md)
|
||||||
* [Unicode](feature_unicode.md)
|
* [用户空间](zh-cn/feature_userspace.md)
|
||||||
* [用户空间](feature_userspace.md)
|
* [速度键](zh-cn/feature_velocikey.md)
|
||||||
* [速度键](feature_velocikey.md)
|
|
||||||
|
|
||||||
* 针对制造者和定制者
|
* 针对制造者和定制者
|
||||||
* [手工连线指南](hand_wire.md)
|
* [手工连线指南](zh-cn/hand_wire.md)
|
||||||
* [ISP刷新指南](isp_flashing_guide.md)
|
* [ISP刷新指南](zh-cn/isp_flashing_guide.md)
|
||||||
* [ARM调试指南](arm_debugging.md)
|
* [ARM调试指南](zh-cn/arm_debugging.md)
|
||||||
* [I2C驱动](i2c_driver.md)
|
* [I2C驱动](zh-cn/i2c_driver.md)
|
||||||
* [GPIO控制器](internals_gpio_control.md)
|
* [GPIO控制器](zh-cn/internals_gpio_control.md)
|
||||||
* [Proton C转换](proton_c_conversion.md)
|
* [Proton C转换](zh-cn/proton_c_conversion.md)
|
||||||
|
|
||||||
* 深入了解
|
* 深入了解
|
||||||
* [键盘如何工作](how_keyboards_work.md)
|
* [键盘如何工作](zh-cn/how_keyboards_work.md)
|
||||||
* [理解QMK](understanding_qmk.md)
|
* [理解QMK](zh-cn/understanding_qmk.md)
|
||||||
|
|
||||||
* 其他话题
|
* 其他话题
|
||||||
* [使用Eclipse开发QMK](other_eclipse.md)
|
* [使用Eclipse开发QMK](zh-cn/other_eclipse.md)
|
||||||
* [使用VSCode开发QMK](other_vscode.md)
|
* [使用VSCode开发QMK](zh-cn/other_vscode.md)
|
||||||
* [支持](support.md)
|
* [支持](zh-cn/support.md)
|
||||||
|
|
||||||
* QMK 内构 (正在编写)
|
* QMK 内构 (正在编写)
|
||||||
* [定义](internals_defines.md)
|
* [定义](zh-cn/internals_defines.md)
|
||||||
* [输入回调寄存器](internals_input_callback_reg.md)
|
* [输入回调寄存器](zh-cn/internals_input_callback_reg.md)
|
||||||
* [Midi设备](internals_midi_device.md)
|
* [Midi设备](zh-cn/internals_midi_device.md)
|
||||||
* [Midi设备设置过程](internals_midi_device_setup_process.md)
|
* [Midi设备设置过程](zh-cn/internals_midi_device_setup_process.md)
|
||||||
* [Midi工具库](internals_midi_util.md)
|
* [Midi工具库](zh-cn/internals_midi_util.md)
|
||||||
* [发送函数](internals_send_functions.md)
|
* [发送函数](zh-cn/internals_send_functions.md)
|
||||||
* [Sysex工具](internals_sysex_tools.md)
|
* [Sysex工具](zh-cn/internals_sysex_tools.md)
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
# QMK鍵盤固件
|
|
||||||
|
|
||||||
[](https://github.com/qmk/qmk_firmware/tags)
|
|
||||||
[](https://travis-ci.org/qmk/qmk_firmware)
|
|
||||||
[](https://discord.gg/Uq7gcHh)
|
|
||||||
[](https://docs.qmk.fm)
|
|
||||||
[](https://github.com/qmk/qmk_firmware/pulse/monthly)
|
|
||||||
[](https://github.com/qmk/qmk_firmware/)
|
|
||||||
|
|
||||||
## 什麼是QMK固件?
|
|
||||||
|
|
||||||
QMK是一個由社群維護的開源鍵盤韌體,其中包含了QMK Toolbox、qmk.fm和其它文件。QMK韌體是以[tmk\_keyboard](http://github.com/tmk/tmk_keyboard)為基礎,讓一些有用的功能在Atmel AVR控制器實現,使用於[OLKB](https://olkb.com)、[ergodox EZ](http://www.ergodox-ez.com),和[Clueboard](http://clueboard.co/)的產品中。它也被移植到使用ChibiOS的ARM晶片上。你也可以用它來讓你徒手佈線,或是客製的鍵盤PCB發揮功能。
|
|
||||||
|
|
||||||
## 如何得到QMK
|
|
||||||
|
|
||||||
如果你打算貢獻鍵盤佈局,鍵盤或功能QMK,最容易做的事情是[叉通過Github上爬行](https://github.com/qmk/qmk_firmware#fork-destination-box),和克隆你爬在本地進行更改,推動他們,然後打開從你的叉子[拉請求](https://github.com/qmk/qmk_firmware/pulls)。
|
|
||||||
|
|
||||||
否則,您可以直接下載([拉鍊](https://github.com/qmk/qmk_firmware/zipball/master) [焦油](https://github.com/qmk/qmk_firmware/tarball/master)),或者通過GIT中克隆它(`[email protected]:qmk/qmk_firmware.git`)或HTTP(`https://github.com/qmk/qmk_firmware.git`)。
|
|
||||||
|
|
||||||
## 如何編譯
|
|
||||||
|
|
||||||
你可以編譯之前,你需要[安裝環境](getting_started_build_tools.md)用於AVR或/和ARM開發。一旦完成,你會使用`make`命令建立一個鍵盤並用以下符號鍵盤佈局
|
|
||||||
|
|
||||||
make planck/rev4:default
|
|
||||||
|
|
||||||
這將建立`rev4` `planck`的修訂與`default`鍵盤映射。並非所有鍵盤有一個修訂版(也稱為子項目或文件夾),在這種情況下,它可以被省略:
|
|
||||||
|
|
||||||
make preonic:default
|
|
||||||
|
|
||||||
## 如何赶近
|
|
||||||
|
|
||||||
QMK有很多[特點](features.md)探索和很好的協議[參考文獻](http://docs.qmk.fm)挖通的。大部分功能通過修改[鍵盤映射(keymap.md),並改變[鍵碼](keycodes.md)冤大頭。
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
* [完全指南菜鳥](zh/newbs.md)
|
|
||||||
* [入門](zh/newbs_getting_started.md)
|
|
||||||
* [構建第一個固件](zh/newbs_building_firmware.md)
|
|
||||||
* [刷新固件](zh/newbs_flashing.md)
|
|
||||||
* [測試和調試](zh/newbs_testing_debugging.md)
|
|
||||||
* [最佳實踐](zh/newbs_best_practices.md)
|
|
||||||
* [學習資源](zh/newbs_learn_more_resources.md)
|
|
||||||
|
|
||||||
* [QMK基礎](zh/README.md)
|
|
||||||
* [QMK簡介](zh/getting_started_introduction.md)
|
|
||||||
* [特約QMK](zh/contributing.md)
|
|
||||||
* [如何使用Github上](zh/getting_started_github.md)
|
|
||||||
* [獲得幫助](zh/getting_started_getting_help.md)
|
|
||||||
|
|
||||||
* [常問問題](zh/faq.md)
|
|
||||||
* [常問問題](zh/faq_general.md)
|
|
||||||
* [構建/編譯QMK](zh/faq_build.md)
|
|
||||||
* [調試/故障排除QMK](zh/faq_debug.md)
|
|
||||||
* [鍵盤佈局](zh/faq_keymap.md)
|
|
||||||
|
|
||||||
* 詳細指南
|
|
||||||
* [安裝編譯工具](zh/getting_started_build_tools.md)
|
|
||||||
* [流浪漢指南](zh/getting_started_vagrant.md)
|
|
||||||
* [構建/編譯器指令](zh/getting_started_make_guide.md)
|
|
||||||
* [刷新固件](zh/flashing.md)
|
|
||||||
* [定制功能](zh/custom_quantum_functions.md)
|
|
||||||
* [鍵盤映射概述](zh/keymap.md)
|
|
||||||
|
|
||||||
* [硬件](zh/hardware.md)
|
|
||||||
* [AVR處理器](zh/hardware_avr.md)
|
|
||||||
* [司機](zh/hardware_drivers.md)
|
|
||||||
|
|
||||||
* 參考
|
|
||||||
* [Keyboard Guidelines](zh/hardware_keyboard_guidelines.md)
|
|
||||||
* [Config Options](zh/config_options.md)
|
|
||||||
* [Keycodes](zh/keycodes.md)
|
|
||||||
* [Documentation Best Practices](zh/documentation_best_practices.md)
|
|
||||||
* [Documentation Templates](zh/documentation_templates.md)
|
|
||||||
* [Glossary](zh/reference_glossary.md)
|
|
||||||
* [Unit Testing](zh/unit_testing.md)
|
|
||||||
* [Useful Functions](zh/ref_functions.md)
|
|
||||||
* [Configurator Support](zh/reference_configurator_support.md)
|
|
||||||
|
|
||||||
* [特點](zh/features.md)
|
|
||||||
* [Basic Keycodes](zh/keycodes_basic.md)
|
|
||||||
* [Quantum Keycodes](zh/quantum_keycodes.md)
|
|
||||||
* [Advanced Keycodes](zh/feature_advanced_keycodes.md)
|
|
||||||
* [Audio](zh/feature_audio.md)
|
|
||||||
* [Auto Shift](zh/feature_auto_shift.md)
|
|
||||||
* [Backlight](zh/feature_backlight.md)
|
|
||||||
* [Bluetooth](zh/feature_bluetooth.md)
|
|
||||||
* [Bootmagic](zh/feature_bootmagic.md)
|
|
||||||
* [Combos](zh/feature_combo)
|
|
||||||
* [Command](zh/feature_command.md)
|
|
||||||
* [Dynamic Macros](zh/feature_dynamic_macros.md)
|
|
||||||
* [Encoders](zh/feature_encoders.md)
|
|
||||||
* [Grave Escape](zh/feature_grave_esc.md)
|
|
||||||
* [Key Lock](zh/feature_key_lock.md)
|
|
||||||
* [Layouts](zh/feature_layouts.md)
|
|
||||||
* [Leader Key](zh/feature_leader_key.md)
|
|
||||||
* [Macros](zh/feature_macros.md)
|
|
||||||
* [Mouse Keys](zh/feature_mouse_keys.md)
|
|
||||||
* [One Shot Keys](zh/feature_advanced_keycodes.md#one-shot-keys)
|
|
||||||
* [Pointing Device](zh/feature_pointing_device.md)
|
|
||||||
* [PS/2 Mouse](zh/feature_ps2_mouse.md)
|
|
||||||
* [RGB Lighting](zh/feature_rgblight.md)
|
|
||||||
* [RGB Matrix](zh/feature_rgb_matrix.md)
|
|
||||||
* [Space Cadet Shift](zh/feature_space_cadet_shift.md)
|
|
||||||
* [Space Cadet Shift Enter](zh/feature_space_cadet_shift_enter.md)
|
|
||||||
* [Stenography](zh/feature_stenography.md)
|
|
||||||
* [Swap Hands](zh/feature_swap_hands.md)
|
|
||||||
* [Tap Dance](zh/feature_tap_dance.md)
|
|
||||||
* [Terminal](zh/feature_terminal.md)
|
|
||||||
* [Thermal Printer](zh/feature_thermal_printer.md)
|
|
||||||
* [Unicode](zh/feature_unicode.md)
|
|
||||||
* [Userspace](zh/feature_userspace.md)
|
|
||||||
* [US ANSI Shifted Keys](zh/keycodes_us_ansi_shifted.md)
|
|
||||||
|
|
||||||
* 對於製造商和遊戲模組
|
|
||||||
* [Hand Wiring Guide](zh/hand_wire.md)
|
|
||||||
* [ISP Flashing Guide](zh/isp_flashing_guide.md)
|
|
||||||
* [ARM Debugging Guide](zh/arm_debugging.md)
|
|
||||||
* [I2C Driver](zh/i2c_driver.md)
|
|
||||||
|
|
||||||
* 為了更深入的了解
|
|
||||||
* [How Keyboards Work](zh/how_keyboards_work.md)
|
|
||||||
* [Understanding QMK](zh/understanding_qmk.md)
|
|
||||||
|
|
||||||
* 其它主題
|
|
||||||
* [Using Eclipse with QMK](zh/eclipse.md)
|
|
||||||
|
|
||||||
* QMK內部(進行中)
|
|
||||||
* [Defines](zh/internals_defines.md)
|
|
||||||
* [Input Callback Reg](zh/internals_input_callback_reg.md)
|
|
||||||
* [Midi Device](zh/internals_midi_device.md)
|
|
||||||
* [Midi Device Setup Process](zh/internals_midi_device_setup_process.md)
|
|
||||||
* [Midi Util](zh/internals_midi_util.md)
|
|
||||||
* [Send Functions](zh/internals_send_functions.md)
|
|
||||||
* [Sysex Tools](zh/internals_sysex_tools.md)
|
|
||||||
@@ -32,6 +32,17 @@
|
|||||||
|
|
||||||
static uint8_t i2c_address;
|
static uint8_t i2c_address;
|
||||||
|
|
||||||
|
// ChibiOS uses two initialization structure for v1 and v2/v3 i2c APIs.
|
||||||
|
// The F1 series uses the v1 api, which have to initialized this way.
|
||||||
|
#ifdef STM32F103xB
|
||||||
|
static const I2CConfig i2cconfig = {
|
||||||
|
OPMODE_I2C,
|
||||||
|
400000,
|
||||||
|
FAST_DUTY_CYCLE_2,
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
// This configures the I2C clock to 400khz assuming a 72Mhz clock
|
||||||
|
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
|
||||||
static const I2CConfig i2cconfig = {
|
static const I2CConfig i2cconfig = {
|
||||||
#ifdef USE_I2CV1
|
#ifdef USE_I2CV1
|
||||||
I2C1_OPMODE,
|
I2C1_OPMODE,
|
||||||
@@ -41,6 +52,7 @@ static const I2CConfig i2cconfig = {
|
|||||||
STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), 0, 0
|
STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), 0, 0
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static i2c_status_t chibios_to_qmk(const msg_t* status) {
|
static i2c_status_t chibios_to_qmk(const msg_t* status) {
|
||||||
switch (*status) {
|
switch (*status) {
|
||||||
@@ -60,7 +72,6 @@ __attribute__((weak)) void i2c_init(void) {
|
|||||||
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
|
||||||
|
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
#ifdef USE_I2CV1
|
#ifdef USE_I2CV1
|
||||||
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
@@ -68,8 +79,6 @@ __attribute__((weak)) void i2c_init(void) {
|
|||||||
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
||||||
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// i2cInit(); //This is invoked by halInit() so no need to redo it.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
i2c_status_t i2c_start(uint8_t address) {
|
i2c_status_t i2c_start(uint8_t address) {
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
),
|
),
|
||||||
/* FN Layer */
|
/* FN Layer */
|
||||||
[_FN1] = LAYOUT_68_ansi(
|
[_FN1] = LAYOUT_68_ansi(
|
||||||
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_BSPC, _______,KC_HOME,
|
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_BSPC, KC_VOLU,KC_HOME,
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______, _______,KC_END,
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______, KC_VOLD,KC_END,
|
||||||
X0 ,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MRWD,KC_MFFD, _______,
|
X0 ,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MRWD,KC_MFFD, _______,
|
||||||
_______ ,_______,KC_MPLY,KC_MSTP,KC_MPRV,KC_MNXT,KC_VOLD,KC_VOLU,KC_MUTE,_______,_______, _______, _______,
|
_______ ,_______,_______,KC_MSTP,KC_MPRV,KC_MNXT,KC_MPLY,KC_VOLD,KC_VOLU,KC_MUTE,_______, _______, _______,
|
||||||
_______ ,_______ ,_______ , _______, _______,_______,_______, _______,_______,_______
|
_______ ,_______ ,_______ , _______, _______,_______,_______, _______,_______,_______
|
||||||
),
|
),
|
||||||
|
|
||||||
@@ -30,8 +30,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
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_BSPC, KC_VOLU,KC_HOME,
|
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_BSPC, KC_VOLU,KC_HOME,
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_VOLD,KC_END,
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_VOLD,KC_END,
|
||||||
_______,_______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP ,KC_RGHT,_______,_______, _______,
|
_______,_______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP ,KC_RGHT,_______,_______, _______,
|
||||||
_______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MUTE,
|
_______ ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
|
||||||
_______ ,_______ ,_______ , _______, _______,_______,_______, KC_MPRV,KC_MPLY,KC_MNXT
|
_______ ,_______ ,_______ , _______, _______,_______,_______, _______,_______,_______
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Executable
+51
@@ -0,0 +1,51 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
HOME,
|
||||||
|
MODS,
|
||||||
|
MODS2,
|
||||||
|
OTHER,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
MACRO1 = SAFE_RANGE
|
||||||
|
};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
if (record->event.pressed) {
|
||||||
|
switch (keycode) {
|
||||||
|
case MACRO1:
|
||||||
|
SEND_STRING("I'm so sorry... -PyroL");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[HOME] = LAYOUT(
|
||||||
|
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, MT(MOD_LCTL,KC_P),
|
||||||
|
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MT(MOD_LSFT,KC_ENT),
|
||||||
|
KC_Z, KC_X, KC_C, LT(MODS2,KC_V), LT(MODS, KC_SPC), LT(OTHER,KC_B), KC_N, KC_M),
|
||||||
|
|
||||||
|
[MODS] = LAYOUT(
|
||||||
|
KC_TAB, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_BSPC,
|
||||||
|
KC_LSFT, KC_ESC, _______, KC_SCLN, KC_QUOT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, _______, _______, KC_COMM, KC_DOT, KC_SLSH),
|
||||||
|
|
||||||
|
[MODS2] = LAYOUT(
|
||||||
|
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
|
||||||
|
KC_LSFT, KC_ESC, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, _______,
|
||||||
|
RGB_VAI, RGB_VAD, RGB_HUI, _______, _______, KC_MPLY, KC_VOLD, KC_VOLU),
|
||||||
|
|
||||||
|
[OTHER] = LAYOUT(
|
||||||
|
KC_ESC, RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
|
||||||
|
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_NO, KC_NO, KC_NO),
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "angel17.h"
|
#include "alpha.h"
|
||||||
|
|
||||||
// Optional override functions below.
|
// Optional override functions below.
|
||||||
// You can leave any or all of these undefined.
|
// You can leave any or all of these undefined.
|
||||||
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,46 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# atmega32a bootloadHID
|
||||||
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
|
||||||
|
# If you don't know the bootloader type, then you can specify the
|
||||||
|
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
# 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 = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
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)
|
||||||
|
|
||||||
|
LAYOUTS = numpad_5x4
|
||||||
@@ -15,13 +15,25 @@
|
|||||||
*/
|
*/
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layers{
|
||||||
|
BASE,
|
||||||
|
COMMAND,
|
||||||
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_numpad_5x4( /* Base */
|
[BASE] = LAYOUT_numpad_5x4( /* Base */
|
||||||
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
|
LT(COMMAND,KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS,
|
||||||
KC_P7, KC_P8, KC_P9,
|
KC_P7, KC_P8, KC_P9,
|
||||||
KC_P4, KC_P5, KC_P6, KC_PPLS,
|
KC_P4, KC_P5, KC_P6, KC_PPLS,
|
||||||
KC_P1, KC_P2, KC_P3,
|
KC_P1, KC_P2, KC_P3,
|
||||||
KC_P0, KC_PDOT, KC_PENT
|
KC_P0, KC_PDOT, KC_PENT
|
||||||
|
),
|
||||||
|
[COMMAND] = LAYOUT_numpad_5x4( /* Base */
|
||||||
|
_______, KC_NO, KC_NO, RGB_RMOD,
|
||||||
|
KC_NO, KC_NO, KC_NO,
|
||||||
|
RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD,
|
||||||
|
RGB_HUD, RGB_SAD, RGB_VAD,
|
||||||
|
RGB_TOG, KC_NO, KC_NO
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,244 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 kakunpc
|
||||||
|
|
||||||
|
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 0xFEED
|
||||||
|
#define PRODUCT_ID 0x0000
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER kakunpc
|
||||||
|
#define PRODUCT angel17
|
||||||
|
#define DESCRIPTION A custom keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 4
|
||||||
|
#define MATRIX_COLS 5
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
|
||||||
|
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
// #define BACKLIGHT_PIN B7
|
||||||
|
// #define BACKLIGHT_BREATHING
|
||||||
|
// #define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
#define RGB_DI_PIN D3
|
||||||
|
#ifdef RGB_DI_PIN
|
||||||
|
#define RGBLED_NUM 17
|
||||||
|
#define RGBLIGHT_HUE_STEP 8
|
||||||
|
#define RGBLIGHT_SAT_STEP 8
|
||||||
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||||
|
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||||
|
/*== all animations enable ==*/
|
||||||
|
// #define RGBLIGHT_ANIMATIONS
|
||||||
|
// /*== or choose animations ==*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
// #define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
// #define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
// #define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
// #define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
// #define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
// /*== customize breathing effect ==*/
|
||||||
|
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||||
|
// /*==== use exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* key combination for magic key command */
|
||||||
|
/* defined by default; to change, uncomment and set to the combination you want */
|
||||||
|
// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
|
||||||
|
|
||||||
|
/* control how magic key switches layers */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||||
|
|
||||||
|
/* override magic key keymap */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||||
|
//#define MAGIC_KEY_HELP H
|
||||||
|
//#define MAGIC_KEY_HELP_ALT SLASH
|
||||||
|
//#define MAGIC_KEY_DEBUG D
|
||||||
|
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||||
|
//#define MAGIC_KEY_DEBUG_KBD K
|
||||||
|
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||||
|
//#define MAGIC_KEY_VERSION V
|
||||||
|
//#define MAGIC_KEY_STATUS S
|
||||||
|
//#define MAGIC_KEY_CONSOLE C
|
||||||
|
//#define MAGIC_KEY_LAYER0 0
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT GRAVE
|
||||||
|
//#define MAGIC_KEY_LAYER1 1
|
||||||
|
//#define MAGIC_KEY_LAYER2 2
|
||||||
|
//#define MAGIC_KEY_LAYER3 3
|
||||||
|
//#define MAGIC_KEY_LAYER4 4
|
||||||
|
//#define MAGIC_KEY_LAYER5 5
|
||||||
|
//#define MAGIC_KEY_LAYER6 6
|
||||||
|
//#define MAGIC_KEY_LAYER7 7
|
||||||
|
//#define MAGIC_KEY_LAYER8 8
|
||||||
|
//#define MAGIC_KEY_LAYER9 9
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER B
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
|
||||||
|
//#define MAGIC_KEY_LOCK CAPS
|
||||||
|
//#define MAGIC_KEY_EEPROM E
|
||||||
|
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
|
||||||
|
//#define MAGIC_KEY_NKRO N
|
||||||
|
//#define MAGIC_KEY_SLEEP_LED Z
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MIDI options
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent use of disabled MIDI features in the keymap */
|
||||||
|
//#define MIDI_ENABLE_STRICT 1
|
||||||
|
|
||||||
|
/* enable basic MIDI features:
|
||||||
|
- MIDI notes can be sent when in Music mode is on
|
||||||
|
*/
|
||||||
|
//#define MIDI_BASIC
|
||||||
|
|
||||||
|
/* enable advanced MIDI features:
|
||||||
|
- MIDI notes can be added to the keymap
|
||||||
|
- Octave shift and transpose
|
||||||
|
- Virtual sustain, portamento, and modulation wheel
|
||||||
|
- etc.
|
||||||
|
*/
|
||||||
|
//#define MIDI_ADVANCED
|
||||||
|
|
||||||
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
|
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HD44780 LCD Display Configuration
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
#define LCD_LINES 2 //< number of visible lines of the display
|
||||||
|
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||||
|
|
||||||
|
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||||
|
|
||||||
|
#if LCD_IO_MODE
|
||||||
|
#define LCD_PORT PORTB //< port for the LCD lines
|
||||||
|
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||||
|
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||||
|
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||||
|
#define LCD_RS_PIN 3 //< pin for RS line
|
||||||
|
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||||
|
#define LCD_RW_PIN 2 //< pin for RW line
|
||||||
|
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||||
|
#define LCD_E_PIN 1 //< pin for Enable line
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* 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 "rev1.h"
|
||||||
|
|
||||||
|
// Optional override functions below.
|
||||||
|
// You can leave any or all of these undefined.
|
||||||
|
// These are only required if you want to perform custom actions.
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
// put your looping keyboard code here
|
||||||
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
// put your per-action keyboard code here
|
||||||
|
// runs for every action, just before processing by the firmware
|
||||||
|
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||||
|
|
||||||
|
led_set_user(usb_led);
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* This a shortcut to help you visually see your layout.
|
||||||
|
*
|
||||||
|
* The first section contains all of the arguments representing the physical
|
||||||
|
* layout of the board and position of the keys.
|
||||||
|
*
|
||||||
|
* The second converts the arguments into a two-dimensional array which
|
||||||
|
* represents the switch matrix.
|
||||||
|
*/
|
||||||
|
#define LAYOUT_numpad_5x4( \
|
||||||
|
k00, k01, k02, k03, \
|
||||||
|
k10, k11, k12, \
|
||||||
|
k20, k21, k22, k13, \
|
||||||
|
k30, k31, k32, \
|
||||||
|
k40, k41, k33 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ k00, k10, k20, k31, k41 }, \
|
||||||
|
{ k02, k12, k22, k33, KC_NO }, \
|
||||||
|
{ k01, k11, k21, k32, KC_NO }, \
|
||||||
|
{ k03, k13, k30, k40, KC_NO }, \
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# atmega32a bootloadHID
|
||||||
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
|
||||||
|
# If you don't know the bootloader type, then you can specify the
|
||||||
|
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
# 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 = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = yes # 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)
|
||||||
|
|
||||||
|
LAYOUTS = numpad_5x4
|
||||||
@@ -44,3 +44,5 @@ 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)
|
||||||
|
|
||||||
LAYOUTS = numpad_5x4
|
LAYOUTS = numpad_5x4
|
||||||
|
|
||||||
|
DEFAULT_FOLDER = angel17/rev1
|
||||||
@@ -187,6 +187,101 @@
|
|||||||
{"label":"Down", "x":16.25, "y":5.5},
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
{"label":"Right", "x":17.25, "y":5.5}
|
{"label":"Right", "x":17.25, "y":5.5}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_tkl_jis": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "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.25, "y":0},
|
||||||
|
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||||
|
{"label":"Pause", "x":17.25, "y":0},
|
||||||
|
{"label":"Half-width/Full-width", "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":"-", "x":11, "y":1.5},
|
||||||
|
{"label":"^", "x":12, "y":1.5},
|
||||||
|
{"label":"Yen", "x":13, "y":1.5},
|
||||||
|
{"label":"Backspace", "x":14, "y":1.5},
|
||||||
|
{"label":"Insert", "x":15.25, "y":1.5},
|
||||||
|
{"label":"Home", "x":16.25, "y":1.5},
|
||||||
|
{"label":"Page Up", "x":17.25, "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":"@", "x":11.5, "y":2.5},
|
||||||
|
{"label":"[", "x":12.5, "y":2.5},
|
||||||
|
{"label":"Del", "x":15.25, "y":2.5},
|
||||||
|
{"label":"End", "x":16.25, "y":2.5},
|
||||||
|
{"label":"Page Down", "x":17.25, "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":";", "x":10.75, "y":3.5},
|
||||||
|
{"label":":", "x":11.75, "y":3.5},
|
||||||
|
{"label":"]", "x":12.75, "y":3.5},
|
||||||
|
{"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
|
||||||
|
{"label":"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":",", "x":9.25, "y":4.5},
|
||||||
|
{"label":".", "x":10.25, "y":4.5},
|
||||||
|
{"label":"/", "x":11.25, "y":4.5},
|
||||||
|
{"label":"\\", "x":12.25, "y":4.5},
|
||||||
|
{"label":"Shift", "x":13.25, "y":4.5, "w":1.75},
|
||||||
|
{"label":"Up", "x":16.25, "y":4.5},
|
||||||
|
{"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":1.25, "y":5.5},
|
||||||
|
{"label":"Alt", "x":2.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Muhenkan", "x":3.5, "y":5.5},
|
||||||
|
{"label":"Space", "x":4.5, "y":5.5, "w":4.5},
|
||||||
|
{"label":"Henkan", "x":9, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Kana", "x":10.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Alt", "x":11.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Fn", "x":12.75, "y":5.5},
|
||||||
|
{"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Left", "x":15.25, "y":5.5},
|
||||||
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
|
{"label":"Right", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,9 @@
|
|||||||
"LAYOUT": {
|
"LAYOUT": {
|
||||||
"layout": [{"label":"Esc", "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":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "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":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "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":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"label":"|", "x":1.25, "y":4.5}, {"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":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
|
"layout": [{"label":"Esc", "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":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "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":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "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":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"label":"|", "x":1.25, "y":4.5}, {"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":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
|
||||||
},
|
},
|
||||||
|
"LAYOUT_tkl_iso": {
|
||||||
|
"layout": [{"label":"Esc", "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":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "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":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "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":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"~", "x":12.75, "y":3.5}, {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"label":"|", "x":1.25, "y":4.5}, {"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":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
|
||||||
|
},
|
||||||
"LAYOUT_tkl_ansi": {
|
"LAYOUT_tkl_ansi": {
|
||||||
"layout": [{"label":"Esc", "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":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "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":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "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":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"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":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
|
"layout": [{"label":"Esc", "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":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "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":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "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":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"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":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/* Copyright 2018 Alexander Fougner <fougner89 at 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 CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/* Copyright 2018 Alexander Fougner <fougner89 at 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
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_tkl_iso(\
|
||||||
|
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_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_NUHS, KC_ENT, \
|
||||||
|
KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
|
||||||
|
};
|
||||||
|
|
||||||
|
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) {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# default_iso
|
||||||
|
|
||||||
|
A standard tenkeyless ISO-layout keymap for Unloved Bastard-powered keyboards.
|
||||||
@@ -33,4 +33,4 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
|||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
SRC += matrix.c
|
SRC += matrix.c
|
||||||
|
|
||||||
LAYOUTS = tkl_ansi
|
LAYOUTS = tkl_ansi tkl_iso
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2017 REPLACE_WITH_YOUR_NAME
|
/* Copyright 2018 Alexander Fougner <fougner89 at gmail.com>
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define LAYOUT( \
|
#define LAYOUT_all( \
|
||||||
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
||||||
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
||||||
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
|
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
|
||||||
@@ -47,17 +47,32 @@
|
|||||||
KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
||||||
KP4, KN2, KN6, KQ6, KN0, KN3, KM0, KP1, KC0, KQ0, KR0 \
|
KP4, KN2, KN6, KQ6, KN0, KN3, KM0, KP1, KC0, KQ0, KR0 \
|
||||||
) \
|
) \
|
||||||
{ \
|
LAYOUT_all( \
|
||||||
/* Columns and rows need to be swapped in the below definition */ \
|
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
||||||
/* A B C D E F G H I J K L M N O P Q R */ \
|
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
||||||
/* 0 */ { KC_NO, KC_NO, KC0, KC_NO, KC_NO, KF0, KC_NO, KC_NO, KC_NO, KJ0, KK0, KC_NO, KM0, KN0, KO0, KC_NO, KQ0, KR0 }, \
|
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
|
||||||
/* 1 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KG1, KH1, KI1, KJ1, KK1, KL1, KM1, KC_NO, KO1, KP1, KC_NO, KC_NO }, \
|
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
|
||||||
/* 2 */ { KC_NO, KB2, KC_NO, KC_NO, KC_NO, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KM2, KN2, KO2, KC_NO, KC_NO, KC_NO }, \
|
KB2,KC_NO,KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
||||||
/* 3 */ { KC_NO, KB3, KC_NO, KC_NO, KC_NO, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3, KC_NO, KC_NO, KC_NO }, \
|
KP4, KN2, KN6, KQ6, KN0, KN3, KM0, KP1, KC0, KQ0, KR0 \
|
||||||
/* 4 */ { KC_NO, KC_NO, KC4, KC_NO, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KM4, KC_NO, KO4, KP4, KQ4, KR4 }, \
|
)
|
||||||
/* 5 */ { KC_NO, KC_NO, KC5, KC_NO, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KM5, KN5, KO5, KP5, KC_NO, KC_NO }, \
|
|
||||||
/* 6 */ { KC_NO, KC_NO, KC6, KC_NO, KC_NO, KF6, KG6, KC_NO, KI6, KJ6, KK6, KL6, KC_NO,KN6, KO6, KC_NO, KQ6, KC_NO }, \
|
#define LAYOUT_tkl_iso( \
|
||||||
/* 7 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KF7, KG7, KH7, KI7, KJ7, KK7, KL7, KM7, KN7, KC_NO, KP7, KC_NO, KC_NO } \
|
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
||||||
}
|
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
||||||
|
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KQ4, KC5, KE5, \
|
||||||
|
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO3, KO1, \
|
||||||
|
KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
||||||
|
KP4, KN2, KN6, KQ6, KN0, KN3, KM0, KP1, KC0, KQ0, KR0 \
|
||||||
|
) \
|
||||||
|
LAYOUT_all( \
|
||||||
|
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
||||||
|
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
||||||
|
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
|
||||||
|
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
|
||||||
|
KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
||||||
|
KP4, KN2, KN6, KQ6, KN0, KN3, KM0, KP1, KC0, KQ0, KR0 \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define LAYOUT LAYOUT_all
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -6,11 +6,33 @@
|
|||||||
"height": 4,
|
"height": 4,
|
||||||
"layouts": {
|
"layouts": {
|
||||||
"LAYOUT_ortho_4x5": {
|
"LAYOUT_ortho_4x5": {
|
||||||
"key_count": 20,
|
"key_count": 21,
|
||||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x": 4, "y":0},
|
"layout": [
|
||||||
{"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1},
|
{"label":"k00", "x":1, "y":0},
|
||||||
{"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2},
|
{"label":"k01", "x":2, "y":0},
|
||||||
{"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}]
|
{"label":"k02", "x":3, "y":0},
|
||||||
|
{"label":"k03", "x":4, "y":0},
|
||||||
|
{"label":"k04", "x":5, "y":0},
|
||||||
|
{"label":"k05 (Rotary Push)", "x":0, "y":3},
|
||||||
|
|
||||||
|
{"label":"k06", "x":1, "y":1},
|
||||||
|
{"label":"k07", "x":2, "y":1},
|
||||||
|
{"label":"k08", "x":3, "y":1},
|
||||||
|
{"label":"k09", "x":4, "y":1},
|
||||||
|
{"label":"k10", "x":5, "y":1},
|
||||||
|
|
||||||
|
{"label":"k11", "x":1, "y":2},
|
||||||
|
{"label":"k12", "x":2, "y":2},
|
||||||
|
{"label":"k13", "x":3, "y":2},
|
||||||
|
{"label":"k14", "x":4, "y":2},
|
||||||
|
{"label":"k15", "x":5, "y":2},
|
||||||
|
|
||||||
|
{"label":"k16", "x":1, "y":3},
|
||||||
|
{"label":"k17", "x":2, "y":3},
|
||||||
|
{"label":"k18", "x":3, "y":3},
|
||||||
|
{"label":"k19", "x":4, "y":3},
|
||||||
|
{"label":"k20", "x":5, "y":3}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
#include QMK_KEYBOARD_H
|
|
||||||
|
|
||||||
enum keyboard_layers {
|
|
||||||
_BL,
|
|
||||||
_FL,
|
|
||||||
_CL,
|
|
||||||
_YF
|
|
||||||
};
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
|
||||||
S_BSKTC = SAFE_RANGE,
|
|
||||||
S_ODEJY,
|
|
||||||
S_RCKBY,
|
|
||||||
S_DOEDR,
|
|
||||||
S_SCALE,
|
|
||||||
S_ONEUP,
|
|
||||||
S_COIN,
|
|
||||||
S_SONIC,
|
|
||||||
S_ZELDA
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLE
|
|
||||||
float song_basketcase[][2] = SONG(BASKET_CASE);
|
|
||||||
float song_ode_to_joy[][2] = SONG(ODE_TO_JOY);
|
|
||||||
float song_rock_a_bye_baby[][2] = SONG(ROCK_A_BYE_BABY);
|
|
||||||
float song_doe_a_deer[][2] = SONG(DOE_A_DEER);
|
|
||||||
float song_scale[][2] = SONG(MUSIC_SCALE_SOUND);
|
|
||||||
float song_coin[][2] = SONG(COIN_SOUND);
|
|
||||||
float song_one_up[][2] = SONG(ONE_UP_SOUND);
|
|
||||||
float song_sonic_ring[][2] = SONG(SONIC_RING);
|
|
||||||
float song_zelda_puzzle[][2] = SONG(ZELDA_PUZZLE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Layer 0: Default Layer
|
|
||||||
* ,-----------------------------------------------------------------.
|
|
||||||
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
|
|
||||||
* |-----------------------------------------------------------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
|
||||||
* |-----------------------------------------------------------------|
|
|
||||||
* |MT(CTL, ESC)| A| S| D| F| G| H| J| K| L| ;| '|Enter |
|
|
||||||
* |-----------------------------------------------------------------|
|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
|
|
||||||
* |-----------------------------------------------------------------'
|
|
||||||
* |Ctrl |Alt|Gui | Space |Alt |Gui|Fn |Ctrl |
|
|
||||||
* `-----------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_BL] = LAYOUT_all(
|
|
||||||
KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_GRV, 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, \
|
|
||||||
MT(MOD_LCTL, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT, \
|
|
||||||
KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(_YF), \
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
|
|
||||||
[_FL] = LAYOUT_all(
|
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______,\
|
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
|
||||||
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, MO(_YF), \
|
|
||||||
_______,_______,_______, _______, _______, _______, MO(_FL), _______),
|
|
||||||
[_CL] = LAYOUT_all(
|
|
||||||
BL_STEP,S_BSKTC,S_ODEJY,S_RCKBY,S_DOEDR,S_SCALE,S_ONEUP,S_COIN, S_SONIC,S_ZELDA,_______,_______,_______,_______,_______,\
|
|
||||||
_______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
|
||||||
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, MO(_YF), \
|
|
||||||
_______, _______, _______, _______, _______, _______, MO(_FL), _______),
|
|
||||||
[_YF] = LAYOUT_all(
|
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
|
|
||||||
_______,_______,KC_UP ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
|
||||||
_______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, MO(_YF), \
|
|
||||||
_______, _______, _______, _______, _______, _______, MO(_FL), _______)
|
|
||||||
};
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
case S_BSKTC:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_basketcase);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case S_ODEJY:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_ode_to_joy);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case S_RCKBY:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_rock_a_bye_baby);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case S_DOEDR:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_doe_a_deer);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case S_SCALE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_scale);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case S_ONEUP:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_one_up);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case S_COIN:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_coin);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case S_SONIC:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_sonic_ring);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case S_ZELDA:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
stop_all_notes();
|
|
||||||
PLAY_SONG(song_zelda_puzzle);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
# /u/yanfali keymap for clueboard 60%
|
|
||||||
|
|
||||||
Almost the same as default but differs in the following ways
|
|
||||||
|
|
||||||
1. `Caps Lock` -> `MT(KC_LCTL, KC_ESC)`.
|
|
||||||
I'm a heavy vim user and I prefer escape to be closer than default. I also move `Control` to this key if you hold it.
|
|
||||||
1. Switch Alt and GUI.
|
|
||||||
I spend most of my time on OSX, so I reverse Alt and GUI to be
|
|
||||||
more comfortable on OSX.
|
|
||||||
1. Added a custom layer.
|
|
||||||
I use this to map the cursor keys to WASD, the familiar directional
|
|
||||||
gaming keys. As I use a split right shift, this naturally leads
|
|
||||||
to the left hand being used for navigation. This is also the
|
|
||||||
best place to add custom mappings, macros and combo keys.
|
|
||||||
@@ -8,6 +8,6 @@ Clueboard makes fully customizable custom keyboards in a variety of form-factors
|
|||||||
* [`2x1800`](2x1800/): Clueboard 2x1800 PCB
|
* [`2x1800`](2x1800/): Clueboard 2x1800 PCB
|
||||||
* [`60`](60/): Clueboard 60% PCB
|
* [`60`](60/): Clueboard 60% PCB
|
||||||
* [`66`](66/): Clueboard 66% PCB
|
* [`66`](66/): Clueboard 66% PCB
|
||||||
* [`66_hotswap`](66/): Clueboard 66% USB-C Hotswappable PCB
|
* [`66_hotswap`](66_hotswap/): Clueboard 66% USB-C Hotswappable PCB
|
||||||
* [`card`](card/): Special Cluecard PCB
|
* [`card`](card/): Special Cluecard PCB
|
||||||
* Hardware Availability: [clueboard.co](https://clueboard.co/)
|
* Hardware Availability: [clueboard.co](https://clueboard.co/)
|
||||||
@@ -33,51 +33,52 @@ enum macro_keycodes {
|
|||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_QWERTY] = LAYOUT( \
|
[_QWERTY] = LAYOUT( \
|
||||||
//,-----------------------------------------. ,-----------------------------------------.
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_BSPC,\
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT,\
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_RSFT,\
|
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_LGUI, LOWER,KC_SPC, KC_ENT, RAISE,KC_RALT \
|
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT \
|
||||||
//`--------------------' `--------------------'
|
//`--------------------------' `--------------------------'
|
||||||
|
|
||||||
),
|
),
|
||||||
|
|
||||||
[_LOWER] = LAYOUT( \
|
[_LOWER] = LAYOUT( \
|
||||||
//,-----------------------------------------. ,-----------------------------------------.
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_BSPC,\
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT,KC_NO,KC_NO,\
|
KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,\
|
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
|
||||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
KC_LGUI, LOWER,KC_SPC, KC_ENT, RAISE,KC_RALT \
|
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT \
|
||||||
//`--------------------' `--------------------'
|
//`--------------------------' `--------------------------'
|
||||||
),
|
),
|
||||||
|
|
||||||
[_RAISE] = LAYOUT( \
|
[_RAISE] = LAYOUT( \
|
||||||
//,-----------------------------------------. ,-----------------------------------------.
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
KC_ESC,KC_EXLM,KC_AT,KC_HASH,KC_DLR,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_BSPC,\
|
KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MINS,KC_EQL,KC_LCBR,KC_RCBR,KC_PIPE,KC_GRV,\
|
KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UNDS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS,KC_TILD,\
|
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,\
|
||||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
KC_LGUI, LOWER,KC_SPC, KC_ENT, RAISE,KC_RALT \
|
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT \
|
||||||
//`--------------------' `--------------------'
|
//`--------------------------' `--------------------------'
|
||||||
),
|
),
|
||||||
|
|
||||||
[_ADJUST] = LAYOUT( \
|
[_ADJUST] = LAYOUT( \
|
||||||
//,-----------------------------------------. ,-----------------------------------------.
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
RESET,RGBRST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,\
|
RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
RGB_TOG,RGB_HUI,RGB_SAI,RGB_VAI,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,\
|
RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
RGB_MOD,RGB_HUD,RGB_SAD,RGB_VAD,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,\
|
RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
|
||||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
KC_LGUI, LOWER,KC_SPC, KC_ENT, RAISE,KC_RALT \
|
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT \
|
||||||
//`--------------------' `--------------------'
|
//`--------------------------' `--------------------------'
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
# ninjonas Keymap for [Corne Keyboard (crkbd)](https://github.com/foostan/crkbd)
|
||||||
|
|
||||||
|
## Keymap
|
||||||
|
This keymap is designed based off my typing habits and is subject to change. Information about custom user macros and tap dances can be found [here](../../../../users/ninjonas).
|
||||||
|
|
||||||
|
More information about the crkbd keyboard can be found [here](https://thomasbaart.nl/2018/11/26/corne-keyboard-helidox-build-log/)
|
||||||
|
|
||||||
|
### QWERTY
|
||||||
|
```c
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
// Tab, Q, W, E, R, T, Y, U, I, O, P, \
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// ESC, A, S, D, F, G, H, J, K, L, ;, '
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// LShift, Z, X, C, V, B, N, M, ,, ., /, =
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , Ctrl, Space, Enter, BackSP, Del
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### DVORAK
|
||||||
|
```c
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
// Tab, ', ,, ., P, Y, F, G, C, R, L, \
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// ESC, A, O, E, U, I, D, H, T, N, S, /
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// LShift, ;, Q, J, K, X, B, M, W, V, Z, =
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , Ctrl, Space, Enter, BackSP, Del
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### COLEMAK
|
||||||
|
```c
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
// Tab, Q, W, F, P, G, J, L, U, Y, ;, \
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// ESC, A, R, S, T, D, H, N, E, I, O, '
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// LShift, Z, X, C, V, B, K, M, ,, ., /, =
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , Ctrl, Space, Enter, BackSP, Del
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### LOWER
|
||||||
|
```c
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
// , , KC_BRIU, Play, Mute, K_CSCN, PgUp, Home, Up, End, , K_MDSH
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , , KC_BRID, Next, VolUp, , PgDn, Left, Down, Right, K_LOCK,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , , , Prev, VolDn, [, ], , , M_CODE, M_XXX1, M_PYNV,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , , , , ,
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### RAISE
|
||||||
|
```c
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
// `, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// ~, !, @, #, $, %, ^, &, *, (, ), _
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// F11, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F12
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , , , , ,
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### ADJUST
|
||||||
|
```c
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
// M_MAKE, EEP_RST, , , , , RGB_TOG, , , COLEMAK, DVORAK, QWERTY,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// M_VRSN, M_MALL, , RGB_SAI, RGB_HUI, RGB_VAI, , , , , , ,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// M_FLSH, , , RGB_SAD, RGB_HUD, RGB_VAD, RGB_M_P, RGB_M_B,RGB_M_SW, , , ,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , , , , ,
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
<!--
|
||||||
|
### TEMPLATE
|
||||||
|
```c
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
// , , , , , , , , , , ,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , , , , , , , , , , ,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , , , , , , , , , , ,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
// , , , , ,
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
```
|
||||||
|
-->
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
This is the c configuration file for the keymap
|
||||||
|
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
Copyright 2015 Jack Humbert
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
//#define USE_MATRIX_I2C
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
|
||||||
|
#define MASTER_LEFT
|
||||||
|
// #define MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
|
|
||||||
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
|
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120
|
||||||
|
#define RGB_MATRIX_HUE_STEP 10
|
||||||
|
#define RGB_MATRIX_SAT_STEP 10
|
||||||
|
#define RGB_MATRIX_VAL_STEP 10
|
||||||
|
#define RGB_MATRIX_SPD_STEP 10
|
||||||
|
// #define RGB_MATRIX_KEYPRESSES
|
||||||
|
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||||
|
|
||||||
|
// BEGIN: Disable RGB Effects
|
||||||
|
//#define DISABLE_RGB_MATRIX_SOLID_COLOR
|
||||||
|
//#define DISABLE_RGB_MATRIX_ALPHAS_MODS
|
||||||
|
//#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
||||||
|
#define DISABLE_RGB_MATRIX_BREATHING
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_SAT
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_VAL
|
||||||
|
// #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_ALL
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
|
||||||
|
#define DISABLE_RGB_MATRIX_DUAL_BEACON
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINBOW_BEACON
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINDROPS
|
||||||
|
#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||||
|
|
||||||
|
// BEGIN: RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||||
|
#define DISABLE_RGB_MATRIX_TYPING_HEATMAP
|
||||||
|
// #define DISABLE_RGB_MATRIX_DIGITAL_RAIN
|
||||||
|
// END: RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||||
|
|
||||||
|
// BEGIN: RGB_MATRIX_KEYPRESSES
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
|
||||||
|
#define DISABLE_RGB_MATRIX_SPLASH
|
||||||
|
#define DISABLE_RGB_MATRIX_MULTISPLASH
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_SPLASH
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
|
||||||
|
// END: RGB_MATRIX_KEYPRESSES
|
||||||
|
// END: Disable RGB Effects
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"
|
||||||
|
#define OLED_DISABLE_TIMEOUT
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "ninjonas.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT_wrapper(
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
_____________________QWERTY_L1______________________, _____________________QWERTY_R1______________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_____________________QWERTY_L2______________________, _____________________QWERTY_R2______________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_____________________QWERTY_L3______________________, _____________________QWERTY_R3______________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
T_GUI, KC_LCTL,LT_RAI, LT_LOW,KC_BSPC,KC_DEL
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_DVORAK] = LAYOUT_wrapper(
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
_____________________DVORAK_L1______________________, _____________________DVORAK_R1______________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_____________________DVORAK_L2______________________, _____________________DVORAK_R2______________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_____________________DVORAK_L3______________________, _____________________DVORAK_R3______________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
T_GUI, KC_LCTL,LT_RAI, LT_LOW,KC_BSPC,KC_DEL
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_COLEMAK] = LAYOUT_wrapper(
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
_____________________COLEMAK_L1_____________________, _____________________COLEMAK_R1_____________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_____________________COLEMAK_L2_____________________, _____________________COLEMAK_R2_____________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_____________________COLEMAK_L3_____________________, _____________________COLEMAK_R3_____________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
T_GUI, KC_LCTL,LT_RAI, LT_LOW,KC_BSPC,KC_DEL
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT_wrapper(
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
M_XXX2, M_XXX3, _________MEDIA_1_________, K_CSCN, _______________NAV_1______________, XXXXXXX, K_MDSH,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
M_XXX4, M_XXX5, _________MEDIA_2_________, XXXXXXX, _______________NAV_2______________, K_LOCK, XXXXXXX,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
KC_LSFT, M_SHFT, _________MEDIA_3_________, T_LBRC, T_RBRC, KC_M, XXXXXXX, M_CODE, M_XXX1, M_PYNV,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_______,_______,_______, _______,_______,_______
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT_wrapper( \
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
_____________________NUM_LEFT_______________________, _____________________NUM_RIGHT______________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_____________________SYM_LEFT_______________________, _____________________SYM_RIGHT______________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_____________________FUNC_LEFT______________________, _____________________FUNC_RIGHT_____________________,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_______,_______,_______, _______,_______,_______
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT_wrapper( \
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
M_MAKE, EEP_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, COLEMAK, DVORAK, QWERTY,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
M_VRSN, M_MALL, RGB_SPI, RGB_SAI, RGB_HUI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
M_FLSH, XXXXXXX, RGB_SPD, RGB_SAD, RGB_HUD, RGB_VAD, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_______,_______,_______, _______,_______,_______
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
),
|
||||||
|
/*
|
||||||
|
[_TEMPLATE] = LAYOUT_wrapper( \
|
||||||
|
//,----------------------------------------------------. ,----------------------------------------------------.
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
//|--------+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+-------|
|
||||||
|
_______,_______,_______, _______,_______,_______
|
||||||
|
//`---------------------' `---------------------'
|
||||||
|
),
|
||||||
|
*/
|
||||||
|
};
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
RGB_MATRIX_ENABLE = WS2812
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
OLED_DRIVER_ENABLE = yes
|
||||||
|
LINK_TIME_OPTIMIZATION_ENABLE = 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
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
This is the c configuration file for the keymap
|
||||||
|
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
Copyright 2015 Jack Humbert
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
//#define USE_MATRIX_I2C
|
||||||
|
|
||||||
|
/* Select hand configuration */
|
||||||
|
#define EE_HANDS
|
||||||
|
|
||||||
|
#undef SSD1306OLED
|
||||||
|
|
||||||
|
#define USE_SERIAL_PD2
|
||||||
|
|
||||||
|
#define FORCE_NKRO
|
||||||
|
|
||||||
|
#define QMK_ESC_OUTPUT F4 // usually COL
|
||||||
|
#define QMK_ESC_INPUT D4 // usually ROW
|
||||||
|
#define QMK_LED B0
|
||||||
|
|
||||||
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
|
#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
|
||||||
|
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
|
||||||
|
|
||||||
|
#define RGB_MATRIX_HUE_STEP 10
|
||||||
|
#define RGB_MATRIX_SAT_STEP 15
|
||||||
|
#define RGB_MATRIX_VAL_STEP 16
|
||||||
|
#define RGB_MATRIX_SPD_STEP 10
|
||||||
|
|
||||||
|
#define DISABLE_RGB_MATRIX_ALPHAS_MODS
|
||||||
|
#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
||||||
|
#define DISABLE_RGB_MATRIX_BREATHING
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_SAT
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_VAL
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
|
||||||
|
// #define DISABLE_RGB_MATRIX_CYCLE_ALL
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
|
||||||
|
// #define DISABLE_RGB_MATRIX_DUAL_BEACON
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINBOW_BEACON
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINDROPS
|
||||||
|
#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||||
|
|
||||||
|
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||||
|
// #define DISABLE_RGB_MATRIX_TYPING_HEATMAP
|
||||||
|
#define DISABLE_RGB_MATRIX_DIGITAL_RAIN
|
||||||
|
|
||||||
|
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
|
||||||
|
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
|
||||||
|
// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
|
||||||
|
|
||||||
|
// #define DISABLE_RGB_MATRIX_SPLASH
|
||||||
|
#define DISABLE_RGB_MATRIX_MULTISPLASH
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_SPLASH
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
|
||||||
|
|
||||||
|
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_TYPING_HEATMAP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define TAPPING_TERM 150
|
||||||
|
// #define PERMISSIVE_HOLD
|
||||||
|
#define IGNORE_MOD_TAP_INTERRUPT
|
||||||
|
// #define RETRO_TAPPING
|
||||||
|
|
||||||
|
#define TAPPING_TOGGLE 2
|
||||||
|
|
||||||
|
#define MOUSEKEY_DELAY 0
|
||||||
|
#define MOUSEKEY_INTERVAL 16
|
||||||
|
#define MOUSEKEY_MAX_SPEED 6
|
||||||
|
#define MOUSEKEY_TIME_TO_MAX 32
|
||||||
|
#define MOUSEKEY_WHEEL_MAX_SPEED 4
|
||||||
|
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
|
||||||
|
|
||||||
|
#define OLED_FONT_H "keyboards/crkbd/keymaps/rpbaptist/glcdfont.c"
|
||||||
|
|
||||||
|
#define NO_ACTION_ONESHOT
|
||||||
|
|
||||||
|
#undef PRODUCT
|
||||||
|
#define PRODUCT Corne Keyboard
|
||||||
@@ -0,0 +1,240 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __AVR__
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
#elif defined(ESP8266)
|
||||||
|
#include <pgmspace.h>
|
||||||
|
#else
|
||||||
|
#define PROGMEM
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Helidox 8x6 font with QMK Firmware Logo
|
||||||
|
// Online editor: http://teripom.x0.com/
|
||||||
|
|
||||||
|
const unsigned char font[] PROGMEM = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
|
||||||
|
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
|
||||||
|
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
|
||||||
|
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
|
||||||
|
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
|
||||||
|
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
|
||||||
|
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
|
||||||
|
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
|
||||||
|
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
|
||||||
|
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
|
||||||
|
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
|
||||||
|
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
|
||||||
|
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
|
||||||
|
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
|
||||||
|
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
|
||||||
|
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
|
||||||
|
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
|
||||||
|
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
|
||||||
|
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
|
||||||
|
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
|
||||||
|
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
|
||||||
|
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
|
||||||
|
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
|
||||||
|
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
|
||||||
|
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
|
||||||
|
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
|
||||||
|
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
|
||||||
|
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
|
||||||
|
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
|
||||||
|
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
|
||||||
|
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
|
||||||
|
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
|
||||||
|
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
|
||||||
|
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
|
||||||
|
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
|
||||||
|
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
|
||||||
|
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
|
||||||
|
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
|
||||||
|
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
|
||||||
|
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
|
||||||
|
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
|
||||||
|
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
|
||||||
|
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
|
||||||
|
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
|
||||||
|
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
|
||||||
|
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
|
||||||
|
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
|
||||||
|
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
|
||||||
|
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
|
||||||
|
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
|
||||||
|
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
|
||||||
|
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
|
||||||
|
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
|
||||||
|
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
|
||||||
|
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
|
||||||
|
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
|
||||||
|
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
|
||||||
|
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
|
||||||
|
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
|
||||||
|
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
|
||||||
|
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
|
||||||
|
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
|
||||||
|
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
|
||||||
|
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
|
||||||
|
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
|
||||||
|
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
|
||||||
|
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
|
||||||
|
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
|
||||||
|
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
|
||||||
|
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
|
||||||
|
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
|
||||||
|
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
|
||||||
|
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
|
||||||
|
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
|
||||||
|
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
|
||||||
|
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
|
||||||
|
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
|
||||||
|
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
|
||||||
|
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
|
||||||
|
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
|
||||||
|
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
|
||||||
|
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
|
||||||
|
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
|
||||||
|
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
|
||||||
|
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
|
||||||
|
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
|
||||||
|
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
|
||||||
|
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
|
||||||
|
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
|
||||||
|
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
|
||||||
|
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
|
||||||
|
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
|
||||||
|
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
|
||||||
|
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
|
||||||
|
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
|
||||||
|
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
|
||||||
|
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
|
||||||
|
0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
|
||||||
|
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
|
||||||
|
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
|
||||||
|
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
|
||||||
|
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
|
||||||
|
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
|
||||||
|
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
|
||||||
|
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
|
||||||
|
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
|
||||||
|
0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
|
||||||
|
0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
|
||||||
|
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
|
||||||
|
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
|
||||||
|
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
|
||||||
|
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
|
||||||
|
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
|
||||||
|
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
|
||||||
|
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
|
||||||
|
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
|
||||||
|
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
|
||||||
|
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
|
||||||
|
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
|
||||||
|
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
|
||||||
|
0x38, 0x1C, 0x0C, 0x06, 0x03, 0x03,
|
||||||
|
0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||||
|
0x03, 0x03, 0x82, 0x86, 0xCC, 0xF8,
|
||||||
|
0xF0, 0xF0, 0x38, 0x1C, 0x0C, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xC0, 0x70,
|
||||||
|
0xF8, 0x0C, 0x04, 0xC6, 0xA2, 0xB3,
|
||||||
|
0x9F, 0x87, 0x01, 0x01, 0x1F, 0x66,
|
||||||
|
0x66, 0x44, 0x4C, 0x58, 0x70, 0xE0,
|
||||||
|
0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
|
||||||
|
0xE0, 0x78, 0x18, 0x8C, 0xC6, 0xE6,
|
||||||
|
0xE3, 0xE3, 0xC3, 0x83, 0x03, 0x03,
|
||||||
|
0x73, 0x76, 0x76, 0x0C, 0x18, 0xF8,
|
||||||
|
0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
|
||||||
|
0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
|
||||||
|
0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
|
||||||
|
0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
|
||||||
|
0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
|
||||||
|
0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
|
||||||
|
0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
|
||||||
|
0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x80, 0xC0, 0x40, 0x7F, 0xF3,
|
||||||
|
0x60, 0x20, 0x30, 0x30, 0x38, 0x18,
|
||||||
|
0x9C, 0xCC, 0x6C, 0x6E, 0x3E, 0x3E,
|
||||||
|
0x1F, 0x0F, 0x0F, 0x03, 0x03, 0x01,
|
||||||
|
0xC0, 0xFF, 0x3E, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x7F, 0xC1, 0x00,
|
||||||
|
0x1D, 0x67, 0xC0, 0x80, 0x01, 0x00,
|
||||||
|
0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00,
|
||||||
|
0x0C, 0x1A, 0x32, 0xC2, 0x01, 0xC1,
|
||||||
|
0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x7E, 0xFF,
|
||||||
|
0x80, 0x00, 0x00, 0xC3, 0xC7, 0xC7,
|
||||||
|
0x8F, 0x0F, 0x07, 0x03, 0x80, 0xC0,
|
||||||
|
0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x07,
|
||||||
|
0x0F, 0xFF, 0x7F, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
|
||||||
|
0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
|
||||||
|
0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
|
||||||
|
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
|
||||||
|
0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
|
||||||
|
0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
|
||||||
|
0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
|
||||||
|
0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x01, 0x00, 0x40, 0x60, 0x31,
|
||||||
|
0x3B, 0x1E, 0x0C, 0x1E, 0x36, 0x23,
|
||||||
|
0x61, 0x60, 0x60, 0x60, 0x60, 0x60,
|
||||||
|
0x60, 0x30, 0x1C, 0x3E, 0x3E, 0x3F,
|
||||||
|
0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
|
||||||
|
0x0C, 0x18, 0x10, 0x33, 0x3E, 0x38,
|
||||||
|
0x6E, 0x67, 0x60, 0x60, 0x60, 0x20,
|
||||||
|
0x30, 0x18, 0x08, 0x0F, 0x06, 0x03,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||||
|
0x03, 0x06, 0x0C, 0x19, 0x31, 0x21,
|
||||||
|
0x60, 0x60, 0x60, 0x60, 0x61, 0x63,
|
||||||
|
0x67, 0x67, 0x33, 0x39, 0x18, 0x0E,
|
||||||
|
0x07, 0x03, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
extern uint8_t is_master;
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
_COLEMAKDHM,
|
||||||
|
_GAMING,
|
||||||
|
_GAMING_EXT,
|
||||||
|
_NUM,
|
||||||
|
_FN,
|
||||||
|
_NAV,
|
||||||
|
_UTIL
|
||||||
|
};
|
||||||
|
|
||||||
|
// Base layers
|
||||||
|
#define COLEMAK DF(_COLEMAKDHM)
|
||||||
|
#define GAMING DF(_GAMING)
|
||||||
|
|
||||||
|
// Layer toggle and switch
|
||||||
|
#define T_NAV TT(_NAV)
|
||||||
|
#define S_NAV MO(_NAV)
|
||||||
|
|
||||||
|
#define T_NUM TT(_NUM)
|
||||||
|
#define S_NUM MO(_NUM)
|
||||||
|
|
||||||
|
// Layer keys with functionality on tap
|
||||||
|
#define FN_TAB LT(_FN, KC_TAB)
|
||||||
|
#define NAV_0 LT(_NAV, KC_0)
|
||||||
|
#define EXT_SF LT(_GAMING_EXT, KC_LSHIFT)
|
||||||
|
|
||||||
|
// Tap/mod keys
|
||||||
|
#define RCTBR RCTL_T(KC_RBRACKET)
|
||||||
|
#define LCTBR LCTL_T(KC_LBRACKET)
|
||||||
|
|
||||||
|
#define SFSPC LSFT_T(KC_SPACE)
|
||||||
|
#define SFENT LSFT_T(KC_ENTER)
|
||||||
|
|
||||||
|
// Global tab forward and backward
|
||||||
|
#define TBFWD LCTL(KC_TAB)
|
||||||
|
#define TBBCK LCTL(LSFT(KC_TAB))
|
||||||
|
|
||||||
|
// Custom key for NUM layer
|
||||||
|
#define CTEQL RCTL_T(KC_EQL)
|
||||||
|
|
||||||
|
// €
|
||||||
|
#define KC_EUR ALGR(KC_5)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_COLEMAKDHM] = LAYOUT( \
|
||||||
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
|
KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
FN_TAB, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
LCTBR, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, RCTBR,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_LALT, T_NUM, SFSPC, SFENT, T_NAV, KC_RGUI \
|
||||||
|
//`--------------------------' `--------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_GAMING] = LAYOUT( \
|
||||||
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RCTL,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, EXT_SF, KC_SPC, _______, _______, _______ \
|
||||||
|
//`--------------------------' `--------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_GAMING_EXT] = LAYOUT( \
|
||||||
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
|
KC_GRV, KC_1, KC_2, _______, KC_3, KC_4, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_DEL,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_LBRC, KC_RBRC, _______, _______, _______, KC_BSLS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F11, KC_F12, KC_MINS, KC_EQL, _______, _______,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, _______, _______, KC_ENT, _______, _______ \
|
||||||
|
//`--------------------------' `--------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN] = LAYOUT( \
|
||||||
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
|
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS, KC_NLCK, XXXXXXX, KC_MINS, KC_PIPE, KC_BSLS, KC_PLUS, XXXXXXX,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, XXXXXXX, KC_PAUS, KC_SLCK, KC_PSCR, KC_INS, XXXXXXX, KC_UNDS, KC_LT, KC_GT, KC_EQL, _______,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, _______, _______, _______, _______, _______ \
|
||||||
|
//`--------------------------' `--------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_NUM] = LAYOUT( \
|
||||||
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_SLSH, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, KC_CIRC, KC_AMPR, KC_EUR, KC_LPRN, KC_RPRN, KC_ASTR, KC_1, KC_2, KC_3, KC_UNDS, CTEQL,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, S_NUM, _______, _______, NAV_0, KC_DOT \
|
||||||
|
//`--------------------------' `--------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_NAV] = LAYOUT( \
|
||||||
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
|
_______, KC_WH_U, TBBCK, KC_MS_U, TBFWD, KC_BTN2, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_DEL,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
KC_TAB, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, XXXXXXX, KC_WH_L, XXXXXXX, KC_WH_R, XXXXXXX, XXXXXXX, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, _______,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------+---------|
|
||||||
|
_______, _______, _______, _______, S_NAV, _______ \
|
||||||
|
//`--------------------------' `--------------------------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_UTIL] = LAYOUT( \
|
||||||
|
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||||
|
RESET, XXXXXXX, KC_MSTP, KC_VOLU, KC_MNXT, XXXXXXX, COLEMAK, GAMING, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_MPLY, XXXXXXX, XXXXXXX, RGB_MOD, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||||
|
XXXXXXX, KC_SLEP, XXXXXXX, KC_MUTE, XXXXXXX, XXXXXXX, RGB_TOG,RGB_RMOD, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD,\
|
||||||
|
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||||
|
_______, _______, _______, _______, _______, _______ \
|
||||||
|
//`--------------------------' `--------------------------'
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||||
|
switch (get_highest_layer(default_layer_state)) {
|
||||||
|
case _COLEMAKDHM:
|
||||||
|
state = update_tri_layer_state(state, _NUM, _NAV, _UTIL);
|
||||||
|
break;
|
||||||
|
case _GAMING:
|
||||||
|
state = update_tri_layer_state(state, _GAMING_EXT, _NAV, _UTIL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef OLED_DRIVER_ENABLE
|
||||||
|
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||||
|
if (is_master) {
|
||||||
|
return OLED_ROTATION_270;
|
||||||
|
} else {
|
||||||
|
return OLED_ROTATION_180;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void render_crkbd_logo(void) {
|
||||||
|
static const char PROGMEM crkbd_logo[] = {
|
||||||
|
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
|
||||||
|
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
|
||||||
|
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
|
||||||
|
0};
|
||||||
|
oled_write_P(crkbd_logo, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void render_status(void) {
|
||||||
|
// oled_write_P(PSTR("Layout: "), false);
|
||||||
|
switch (get_highest_layer(default_layer_state)) {
|
||||||
|
case _COLEMAKDHM:
|
||||||
|
oled_write_P(PSTR("CLMK "), false);
|
||||||
|
break;
|
||||||
|
case _GAMING:
|
||||||
|
oled_write_P(PSTR("GAME "), false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
oled_write_P(PSTR("\n"), false);
|
||||||
|
|
||||||
|
switch (get_highest_layer(layer_state)) {
|
||||||
|
case 0:
|
||||||
|
oled_write_P(PSTR(" "), false);
|
||||||
|
break;
|
||||||
|
case _NUM:
|
||||||
|
oled_write_P(PSTR("Comm "), false);
|
||||||
|
break;
|
||||||
|
case _FN:
|
||||||
|
oled_write_P(PSTR("Stage"), false);
|
||||||
|
break;
|
||||||
|
case _NAV:
|
||||||
|
oled_write_P(PSTR("Fuel "), false);
|
||||||
|
break;
|
||||||
|
case _GAMING_EXT:
|
||||||
|
oled_write_P(PSTR("Ext "), false);
|
||||||
|
break;
|
||||||
|
case _UTIL:
|
||||||
|
oled_write_P(PSTR("Util "), false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
oled_write_P(PSTR("Unkn "), false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
oled_write_P(PSTR("\n"), false);
|
||||||
|
|
||||||
|
uint8_t modifiers = get_mods();
|
||||||
|
|
||||||
|
oled_write_P( (modifiers & MOD_MASK_CTRL) ? PSTR("PROG ") : PSTR(" "), false);
|
||||||
|
oled_write_P( (modifiers & MOD_MASK_SHIFT) ? PSTR("PULSE") : PSTR(" "), false);
|
||||||
|
oled_write_P( (modifiers & MOD_MASK_ALT) ? PSTR("STBY ") : PSTR(" "), false);
|
||||||
|
oled_write_P( (modifiers & MOD_MASK_GUI) ? PSTR("GYRO ") : PSTR(" "), false);
|
||||||
|
|
||||||
|
oled_write_P(PSTR("\n"), false);
|
||||||
|
|
||||||
|
uint8_t led_usb_state = host_keyboard_leds();
|
||||||
|
oled_write_P(PSTR("Mode:\n"), false);
|
||||||
|
oled_write_P(IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK) ? PSTR(" NUM ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK) ? PSTR(" CAPS") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_LED_ON(led_usb_state, USB_LED_SCROLL_LOCK) ? PSTR(" SCRL") : PSTR(" "), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void oled_task_user(void) {
|
||||||
|
if (is_master) {
|
||||||
|
render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
|
||||||
|
} else {
|
||||||
|
render_crkbd_logo();
|
||||||
|
// oled_scroll_left(); // Turns on scrolling
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void suspend_power_down_keymap(void) {
|
||||||
|
rgb_matrix_set_suspend_state(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void suspend_wakeup_init_keymap(void) {
|
||||||
|
rgb_matrix_set_suspend_state(false);
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# Corne keyboard layout
|
||||||
|
|
||||||
|
This is my highly personalized CRKBD layout. I use Colemak DHm as main typing layer. I use this keyboard and layout in my daily programming job and for everything at home, including gaming.
|
||||||
|
|
||||||
|
This keymap is the result of an evolution from Ultimate Hacking Keyboard to Iris, to Corne. It took many iterations and changes and only now I feel this is ready to be merged into the main QMK repository, because I think further changes will be minor. This is my 1.0 release so to speak.
|
||||||
|
|
||||||
|
Many thanks to foostan for the keyboard, all QMK contributors and drashna specifically for his work on this keyboard.
|
||||||
|
|
||||||
|
## Layers
|
||||||
|
|
||||||
|
### COLEMAKDHM
|
||||||
|
|
||||||
|
Main typing layer. I really love having SHIFT available on thumbs. I am a left thumb space bar person, so I put SPACE there and ENTER on right. I use CTRL key combos lot in my text editor and desktop environment. That's why I have two of them. I also found them to be a great position for the square brackets. (`[` and `]`)
|
||||||
|
|
||||||
|
I don't know about you but "lower" and "raise" don't mean that much to me. I named my layers `NUM`, short for numbers and `NAV`, short for navigation. Holding the key will activate the layer for as long as it is held, double tapping it will switch to it. Single tapping it once will switch to main layer again.
|
||||||
|
|
||||||
|
Everything else is pretty standard I'd say.
|
||||||
|
|
||||||
|
### NUM
|
||||||
|
|
||||||
|
Includes a number row, the symbols normally on SHIFT and numbers, as well as a numpad under right side homing keys.
|
||||||
|
|
||||||
|
### NAV
|
||||||
|
|
||||||
|
This is where I access arrow keys, page up, down, home, end and mouse control. I also added general tab forward and backward keys. I use these in my browser, terminal and text editor.
|
||||||
|
|
||||||
|
## FN
|
||||||
|
|
||||||
|
Short for function. This gives access to the function keys, as well as rarely used keys on the left side and often used symbols (for me) on the right side. It is accessed by holding TAB.
|
||||||
|
|
||||||
|
### UTIL
|
||||||
|
|
||||||
|
Short for utility. This is accessed by pressing both `NUM` and `NAV` at the same time. It has a software `RESET` key, media keys, RGB control and switches main layer between Colemak and a gaming layer.
|
||||||
|
|
||||||
|
### GAMING
|
||||||
|
|
||||||
|
Sometimes I switch to type in Discord, Steam, or in game chat, so I think it's more important to keep typing functional than put WASD on where I want movement to be. This means I rebind my keys in all games. It's worth it to me.
|
||||||
|
|
||||||
|
I put movement on FRST (would be ESDF on QWERTY), because it lines up more comfortably with the columnar staggered layout of the Corne. It also gives more easy access to all keys on left half.
|
||||||
|
|
||||||
|
Most notable here is that there are no tap and hold differences anymore on left hand side besides the new layer key. This is a different layer than `NUM`.
|
||||||
|
|
||||||
|
### GAMING_EXT
|
||||||
|
|
||||||
|
This is the gaming extended layer where movement keys remain the same. This means I can keep moving while accessing second layer keys. All other keys are keys on which I can easily rebind something. Besides that it gives me the function keys and an ENTER key which does not change. This is good when a game requires you to hold ENTER.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
I use MT3 Godspeed caps and thought it would be fun to theme the OLED output towards it. The slave side has the icon and two planets. The left side refers to modifiers by matching the novelty mod legends.
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
I am using DFU and have to flash both halves individually.
|
||||||
|
|
||||||
|
Left half: `make crkbd/rev1:rpbaptist:dfu-split-left`
|
||||||
|
|
||||||
|
Right half: `make crkbd/rev1:rpbaptist:dfu-split-right RGB_MATRIX_SPLIT_RIGHT=yes`
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# This enables Link Time Optimization. This can save a good chunk of space (several KB for me), but the macro and function ... functions cause it to error out.
|
||||||
|
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
||||||
|
|
||||||
|
# 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
|
||||||
|
#
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
|
||||||
|
RGB_MATRIX_ENABLE = WS2812
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
BOOTLOADER = qmk-dfu
|
||||||
|
|
||||||
|
OLED_DRIVER_ENABLE = yes
|
||||||
|
|
||||||
|
# ifneq ($(strip $(OLED_DRIVER_ENABLE)), yes)
|
||||||
|
# RGB_MATRIX_SPLIT_RIGHT=yes
|
||||||
|
# endif
|
||||||
@@ -0,0 +1,249 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 Amber Holly
|
||||||
|
|
||||||
|
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 0xFEED
|
||||||
|
#define PRODUCT_ID 0x0000
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Amber
|
||||||
|
#define PRODUCT Wraith
|
||||||
|
#define DESCRIPTION A WKL, 75% keyboard with staggered F-row.
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 12
|
||||||
|
#define MATRIX_COLS 8
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { B6, B5, B4, D7, D6, D4, D5, D3, D2, D1, D0, B7 }
|
||||||
|
#define MATRIX_COL_PINS { C6, C7, F7, F6, F5, F4, F1, F0 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
|
||||||
|
*/
|
||||||
|
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
|
||||||
|
|
||||||
|
// #define BACKLIGHT_PIN B7
|
||||||
|
// #define BACKLIGHT_BREATHING
|
||||||
|
// #define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
// #define RGB_DI_PIN E2
|
||||||
|
// #ifdef RGB_DI_PIN
|
||||||
|
// #define RGBLED_NUM 16
|
||||||
|
// #define RGBLIGHT_HUE_STEP 8
|
||||||
|
// #define RGBLIGHT_SAT_STEP 8
|
||||||
|
// #define RGBLIGHT_VAL_STEP 8
|
||||||
|
// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||||
|
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||||
|
// /*== all animations enable ==*/
|
||||||
|
// #define RGBLIGHT_ANIMATIONS
|
||||||
|
// /*== or choose animations ==*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
// #define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
// #define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
// #define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
// #define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
// #define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
// /*== customize breathing effect ==*/
|
||||||
|
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||||
|
// /*==== use exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* key combination for magic key command */
|
||||||
|
/* defined by default; to change, uncomment and set to the combination you want */
|
||||||
|
// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
|
||||||
|
|
||||||
|
/* control how magic key switches layers */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||||
|
|
||||||
|
/* override magic key keymap */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||||
|
//#define MAGIC_KEY_HELP H
|
||||||
|
//#define MAGIC_KEY_HELP_ALT SLASH
|
||||||
|
//#define MAGIC_KEY_DEBUG D
|
||||||
|
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||||
|
//#define MAGIC_KEY_DEBUG_KBD K
|
||||||
|
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||||
|
//#define MAGIC_KEY_VERSION V
|
||||||
|
//#define MAGIC_KEY_STATUS S
|
||||||
|
//#define MAGIC_KEY_CONSOLE C
|
||||||
|
//#define MAGIC_KEY_LAYER0 0
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT GRAVE
|
||||||
|
//#define MAGIC_KEY_LAYER1 1
|
||||||
|
//#define MAGIC_KEY_LAYER2 2
|
||||||
|
//#define MAGIC_KEY_LAYER3 3
|
||||||
|
//#define MAGIC_KEY_LAYER4 4
|
||||||
|
//#define MAGIC_KEY_LAYER5 5
|
||||||
|
//#define MAGIC_KEY_LAYER6 6
|
||||||
|
//#define MAGIC_KEY_LAYER7 7
|
||||||
|
//#define MAGIC_KEY_LAYER8 8
|
||||||
|
//#define MAGIC_KEY_LAYER9 9
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER B
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
|
||||||
|
//#define MAGIC_KEY_LOCK CAPS
|
||||||
|
//#define MAGIC_KEY_EEPROM E
|
||||||
|
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
|
||||||
|
//#define MAGIC_KEY_NKRO N
|
||||||
|
//#define MAGIC_KEY_SLEEP_LED Z
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MIDI options
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent use of disabled MIDI features in the keymap */
|
||||||
|
//#define MIDI_ENABLE_STRICT 1
|
||||||
|
|
||||||
|
/* enable basic MIDI features:
|
||||||
|
- MIDI notes can be sent when in Music mode is on
|
||||||
|
*/
|
||||||
|
//#define MIDI_BASIC
|
||||||
|
|
||||||
|
/* enable advanced MIDI features:
|
||||||
|
- MIDI notes can be added to the keymap
|
||||||
|
- Octave shift and transpose
|
||||||
|
- Virtual sustain, portamento, and modulation wheel
|
||||||
|
- etc.
|
||||||
|
*/
|
||||||
|
//#define MIDI_ADVANCED
|
||||||
|
|
||||||
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
|
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HD44780 LCD Display Configuration
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
#define LCD_LINES 2 //< number of visible lines of the display
|
||||||
|
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||||
|
|
||||||
|
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||||
|
|
||||||
|
#if LCD_IO_MODE
|
||||||
|
#define LCD_PORT PORTB //< port for the LCD lines
|
||||||
|
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||||
|
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||||
|
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||||
|
#define LCD_RS_PIN 3 //< pin for RS line
|
||||||
|
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||||
|
#define LCD_RW_PIN 2 //< pin for RW line
|
||||||
|
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||||
|
#define LCD_E_PIN 1 //< pin for Enable line
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "wraith",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "amberstarlight",
|
||||||
|
"width": 16,
|
||||||
|
"height": 6,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_ansi": {
|
||||||
|
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.25, "y":0}, {"label":"F2", "x":2.25, "y":0}, {"label":"F3", "x":3.25, "y":0}, {"label":"F4", "x":4.25, "y":0}, {"label":"F5", "x":5.5, "y":0}, {"label":"F6", "x":6.5, "y":0}, {"label":"F7", "x":7.5, "y":0}, {"label":"F8", "x":8.5, "y":0}, {"label":"F9", "x":9.75, "y":0}, {"label":"F10", "x":10.75, "y":0}, {"label":"F11", "x":11.75, "y":0}, {"label":"F12", "x":12.75, "y":0}, {"label":"Prt Sc", "x":14, "y":0}, {"label":"Fn", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Insert", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Delete", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"Pg Up", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":2.25}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"Pg Dn", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.5}, {"label":"Alt", "x":2.25, "y":5, "w":1.5}, {"x":3.75, "y":5, "w":7}, {"label":"Alt", "x":10.75, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
|
||||||
|
},
|
||||||
|
"LAYOUT_iso": {
|
||||||
|
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.25, "y":0}, {"label":"F2", "x":2.25, "y":0}, {"label":"F3", "x":3.25, "y":0}, {"label":"F4", "x":4.25, "y":0}, {"label":"F5", "x":5.5, "y":0}, {"label":"F6", "x":6.5, "y":0}, {"label":"F7", "x":7.5, "y":0}, {"label":"F8", "x":8.5, "y":0}, {"label":"F9", "x":9.75, "y":0}, {"label":"F10", "x":10.75, "y":0}, {"label":"F11", "x":11.75, "y":0}, {"label":"F12", "x":12.75, "y":0}, {"label":"Prt Sc", "x":14, "y":0}, {"label":"Fn", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"\"", "x":2, "y":1}, {"label":"\u00a3", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Insert", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2}, {"label":"Delete", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"@", "x":11.75, "y":3}, {"label":"~", "x":12.75, "y":3}, {"label":"Pg Up", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"label":"|", "x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"Pg Dn", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.5}, {"label":"Alt", "x":2.25, "y":5, "w":1.5}, {"x":3.75, "y":5, "w":7}, {"label":"Alt", "x":10.75, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// Defines the keycodes used by our macros in process_record_user
|
||||||
|
enum custom_keycodes {
|
||||||
|
QMKBEST = SAFE_RANGE,
|
||||||
|
QMKURL
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_BRK,
|
||||||
|
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_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_DEL,
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, MO(1),
|
||||||
|
KC_LSFT, KC_NUBS, 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_RGUI,
|
||||||
|
KC_CAPS, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
RESET, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_TRNS,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, KC_MPRV, _______, KC_MNXT
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
// escape LED on layer 1
|
||||||
|
if (IS_LAYER_ON(1)) {
|
||||||
|
writePinLow(B0);
|
||||||
|
} else {
|
||||||
|
writePinHigh(B0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# Amber's personal keymap
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright 2019 Amber
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// Defines the keycodes used by our macros in process_record_user
|
||||||
|
enum custom_keycodes {
|
||||||
|
QMKBEST = SAFE_RANGE,
|
||||||
|
QMKURL
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, MO(1),
|
||||||
|
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_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_DEL,
|
||||||
|
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_BSLS, KC_ENT, KC_PGUP,
|
||||||
|
KC_LSFT, KC_NUBS, 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_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
RESET, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_TRNS,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
// escape LED on layer 1
|
||||||
|
if (IS_LAYER_ON(1)) {
|
||||||
|
writePinLow(B0);
|
||||||
|
} else {
|
||||||
|
writePinHigh(B0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The default keymap for the Wraith
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define LAYER_TIMEOUT 10000
|
||||||
|
#define TIMEOUT_WARNING 3000
|
||||||
|
#define FLASH_PERIOD 250
|
||||||
|
#define SPEED_SCALE 2
|
||||||
|
#define TIMEOUT_SCALE 4
|
||||||
|
#define LAYER_SWITCH 1 // the layer to switch to
|
||||||
|
#define GET_FLASH_PERIOD ((layer_time_remaining <= TIMEOUT_WARNING/TIMEOUT_SCALE) ? FLASH_PERIOD/SPEED_SCALE : FLASH_PERIOD)
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
int layer_time_remaining;
|
||||||
|
uint16_t prev_loop_time;
|
||||||
|
|
||||||
|
// Defines the keycodes used by our macros in process_record_user
|
||||||
|
enum custom_keycodes {
|
||||||
|
TIME_TOGGLE = SAFE_RANGE
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_BRK,
|
||||||
|
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_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_DEL,
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, TIME_TOGGLE,
|
||||||
|
KC_LSFT, KC_NUBS, 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_RGUI,
|
||||||
|
KC_CAPS, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
RESET, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_TRNS,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, KC_MPLY, KC_MPRV, _______, KC_MNXT
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
layer_time_remaining -= timer_read()-prev_loop_time; //amount of time elapsed since the start of the previous loop
|
||||||
|
prev_loop_time = timer_read(); //start counting the time to check at the next iteration
|
||||||
|
|
||||||
|
if (layer_time_remaining <= 0) {
|
||||||
|
// once timer run out
|
||||||
|
layer_off(LAYER_SWITCH);
|
||||||
|
}
|
||||||
|
|
||||||
|
// escape LED on layer 1
|
||||||
|
if (IS_LAYER_ON(LAYER_SWITCH)) {
|
||||||
|
if (layer_time_remaining <= TIMEOUT_WARNING) {
|
||||||
|
if ((int)(layer_time_remaining/GET_FLASH_PERIOD % 2 == 0)) {
|
||||||
|
// if even led on
|
||||||
|
writePinLow(B0);
|
||||||
|
} else {
|
||||||
|
writePinHigh(B0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
writePinLow(B0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
writePinHigh(B0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case TIME_TOGGLE:
|
||||||
|
// get the time when time toggle pressed
|
||||||
|
layer_time_remaining = LAYER_TIMEOUT;
|
||||||
|
// set the layer
|
||||||
|
layer_on(LAYER_SWITCH);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Timed function layer keymap
|
||||||
|
|
||||||
|
Amber's personal keymap for the Wraith, but with a custom timed function layer keycode. `config.h` contains defines that you can edit to control various aspects of this function.
|
||||||
|
|
||||||
|
## How does it work?
|
||||||
|
We are reading QMK's software timer in `matrix_scan_user()`.
|
||||||
|
|
||||||
|
Once the `TIME_TOGGLE` key is pressed, `layer_time_remaining` is set equal to `LAYER_TIMEOUT`, the layer defined in `LAYER_SWITCH` becomes active, and the LED on the Escape key (pin B0) will light up.
|
||||||
|
|
||||||
|
Each time the matrix is scanned, the software timer is read, and the value of `layer_time_remaining` is decreased by `prev_loop_time` - the amount of time elapsed since the last matrix scan.
|
||||||
|
|
||||||
|
When there are `TIMEOUT_WARNING`ms left in `LAYER_TIMEOUT`, the LED will begin to flash at intervals of `FLASH_PERIOD`ms.
|
||||||
|
|
||||||
|
When there are `TIMEOUT_WARNING/TIMEOUT_SCALE`ms left, the LED will begin to flash at intervals of `FLASH_PERIOD/SPEED_SCALE`ms.
|
||||||
|
|
||||||
|
When `layer_time_remaining` is equal to or less than 0, the layer defined in `LAYER_SWITCH` is removed from the layer stack.
|
||||||
|
|
||||||
|
|
||||||
|
## What are the defaults?
|
||||||
|
`LAYER_TIMEOUT` controls how long the layer will stay active for. The default is 10 seconds.
|
||||||
|
|
||||||
|
`TIMEOUT_WARNING` controls how long the warning (LED flash) will occur before the layer becomes inactive. The default is 3 seconds.
|
||||||
|
|
||||||
|
`FLASH_PERIOD` controls how long each LED flash interval is in the warning time. The default flash period is 250ms.
|
||||||
|
|
||||||
|
`SPEED_SCALE` controls how many times faster the LED will flash in the second flash period. The default scale is 2, twice as fast.
|
||||||
|
|
||||||
|
`TIMEOUT_SCALE` controls the length of the second flash period, relative to `TIMEOUT_WARNING`. The default scale is 4; for 750ms of the secondary flash period.
|
||||||
|
|
||||||
|
`LAYER_SWITCH` is the layer that will be activated by the key. The default is layer 1.
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Wraith
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Custom PCB for the Wraith keyboard.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [Amber](https://github.com/amberstarlight)
|
||||||
|
Hardware Supported: Wraith PCB
|
||||||
|
Hardware Availability: private group buy
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make cutie_club/wraith:default
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = 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 = yes # Commands for debug and configuration
|
||||||
|
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
|
||||||
|
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)
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* 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 "wraith.h"
|
||||||
|
|
||||||
|
// Optional override functions below.
|
||||||
|
// You can leave any or all of these undefined.
|
||||||
|
// These are only required if you want to perform custom actions.
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
setPinOutput(B3);
|
||||||
|
setPinOutput(B0);
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
||||||
|
writePinLow(B3);
|
||||||
|
} else {
|
||||||
|
writePinHigh(B3);
|
||||||
|
}
|
||||||
|
led_set_user(usb_led);
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define LAYOUT_all( \
|
||||||
|
K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07,\
|
||||||
|
K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K27,\
|
||||||
|
K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K47,\
|
||||||
|
K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K76, K67,\
|
||||||
|
K80, K90, K81, K91, K82, K92, K83, K93, K84, K94, K85, K95, K86, K96, K87,\
|
||||||
|
KA0, KA1, KA3, KB5, KA6, KB6, KA7\
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36 }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45, K46, K47}, \
|
||||||
|
{ K50, K51, K52, K53, K54, K55, KC_NO }, \
|
||||||
|
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
|
||||||
|
{ K70, K71, K72, K73, K74, K75, K76 }, \
|
||||||
|
{ K80, K81, K82, K83, K84, K85, K86, K87 }, \
|
||||||
|
{ K90, K91, K92, K93, K94, K95, K96 }, \
|
||||||
|
{ KA0, KA1, KC_NO, KA3, KC_NO, KC_NO, KA6, KA7 }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KB6 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_iso( \
|
||||||
|
K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07,\
|
||||||
|
K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K27,\
|
||||||
|
K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K47,\
|
||||||
|
K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K76, K67,\
|
||||||
|
K80, K90, K81, K91, K82, K92, K83, K93, K84, K94, K85, K95, K86, K96, K87,\
|
||||||
|
KA0, KA1, KA3, KB5, KA6, KB6, KA7\
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36 }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45, K46, K47}, \
|
||||||
|
{ K50, K51, K52, K53, K54, K55, KC_NO }, \
|
||||||
|
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
|
||||||
|
{ K70, K71, K72, K73, K74, K75, K76 }, \
|
||||||
|
{ K80, K81, K82, K83, K84, K85, K86, K87 }, \
|
||||||
|
{ K90, K91, K92, K93, K94, K95, K96 }, \
|
||||||
|
{ KA0, KA1, KC_NO, KA3, KC_NO, KC_NO, KA6, KA7 }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KB6 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_ansi( \
|
||||||
|
K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07,\
|
||||||
|
K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K27,\
|
||||||
|
K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K66, K47,\
|
||||||
|
K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K76, K67,\
|
||||||
|
K80, K81, K91, K82, K92, K83, K93, K84, K94, K85, K95, K86, K96, K87,\
|
||||||
|
KA0, KA1, KA3, KB5, KA6, KB6, KA7\
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36 }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45, K46, K47}, \
|
||||||
|
{ K50, K51, K52, K53, K54, K55, KC_NO }, \
|
||||||
|
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
|
||||||
|
{ K70, K71, K72, K73, K74, K75, K76 }, \
|
||||||
|
{ K80, K81, K82, K83, K84, K85, K86, K87 }, \
|
||||||
|
{ KC_NO, K91, K92, K93, K94, K95, K96 }, \
|
||||||
|
{ KA0, KA1, KC_NO, KA3, KC_NO, KC_NO, KA6, KA7 }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KB6 } \
|
||||||
|
}
|
||||||
@@ -49,6 +49,26 @@ void rgblight_set(void) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
if (rgblight_config.enable) {
|
||||||
|
i2c_init();
|
||||||
|
i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
// call user level keymaps, if any
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
rgblight_task();
|
||||||
|
#endif
|
||||||
|
matrix_scan_user();
|
||||||
|
/* Nothing else for now. */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void backlight_init_ports(void) {
|
void backlight_init_ports(void) {
|
||||||
// initialize pins D0, D1, D4 and D6 as output
|
// initialize pins D0, D1, D4 and D6 as output
|
||||||
setPinOutput(D0);
|
setPinOutput(D0);
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Duck Orion V3",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 18.25,
|
||||||
|
"height": 6.5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_tkl_ansi": {
|
||||||
|
"layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5, "w":2.25}, {"x":0, "y":4.5, "w":2.25}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":2.75}, {"x":16.25, "y":4.5}, {"x":0, "y":5.5, "w":1.25}, {"x":1.25, "y":5.5, "w":1.25}, {"x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"x":10, "y":5.5, "w":1.25}, {"x":11.25, "y":5.5, "w":1.25}, {"x":12.5, "y":5.5, "w":1.25}, {"x":13.75, "y":5.5, "w":1.25}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Duck Orion
|
||||||
|
|
||||||
|
Non official firmware for custom TKL Korean keyboard made by Duck.
|
||||||
|
|
||||||
|
Newest version is the [Orion V3](http://duck0113.tistory.com/127)
|
||||||
|
|
||||||
|
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 @@
|
|||||||
|
DEFAULT_FOLDER = duck/orion/v3
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 MechMerlin <[email protected]>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x444B // Duck ("DK")
|
||||||
|
#define PRODUCT_ID 0x4F52 // Orion ("OR")
|
||||||
|
#define DEVICE_VER 0x0002
|
||||||
|
#define MANUFACTURER Duck
|
||||||
|
#define PRODUCT Orion V3
|
||||||
|
#define DESCRIPTION TKL Korean custom keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 6
|
||||||
|
#define MATRIX_COLS 18
|
||||||
|
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
#define RGB_DI_PIN D6
|
||||||
|
#define RGBLED_NUM 17
|
||||||
|
|
||||||
|
/* Set to top left most key */
|
||||||
|
#define BOOTMAGIC_LITE_ROW 4
|
||||||
|
#define BOOTMAGIC_LITE_COLUMN 10
|
||||||
|
|
||||||
|
#define TAPPING_TERM 200
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 MechMerlin <[email protected]>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include "indicator_leds.h"
|
||||||
|
#include "duck_led/duck_led.h"
|
||||||
|
|
||||||
|
#define LED_T1H 600
|
||||||
|
#define LED_T1L 650
|
||||||
|
#define LED_T0H 250
|
||||||
|
#define LED_T0L 1000
|
||||||
|
|
||||||
|
void send_bit_d4(bool bitVal) {
|
||||||
|
if(bitVal) {
|
||||||
|
asm volatile (
|
||||||
|
"sbi %[port], %[bit] \n\t"
|
||||||
|
".rept %[onCycles] \n\t"
|
||||||
|
"nop \n\t"
|
||||||
|
".endr \n\t"
|
||||||
|
"cbi %[port], %[bit] \n\t"
|
||||||
|
".rept %[offCycles] \n\t"
|
||||||
|
"nop \n\t"
|
||||||
|
".endr \n\t"
|
||||||
|
::
|
||||||
|
[port] "I" (_SFR_IO_ADDR(PORTD)),
|
||||||
|
[bit] "I" (4),
|
||||||
|
[onCycles] "I" (NS_TO_CYCLES(LED_T1H) - 2),
|
||||||
|
[offCycles] "I" (NS_TO_CYCLES(LED_T1L) - 2));
|
||||||
|
} else {
|
||||||
|
asm volatile (
|
||||||
|
"sbi %[port], %[bit] \n\t"
|
||||||
|
".rept %[onCycles] \n\t"
|
||||||
|
"nop \n\t"
|
||||||
|
".endr \n\t"
|
||||||
|
"cbi %[port], %[bit] \n\t"
|
||||||
|
".rept %[offCycles] \n\t"
|
||||||
|
"nop \n\t"
|
||||||
|
".endr \n\t"
|
||||||
|
::
|
||||||
|
[port] "I" (_SFR_IO_ADDR(PORTD)),
|
||||||
|
[bit] "I" (4),
|
||||||
|
[onCycles] "I" (NS_TO_CYCLES(LED_T0H) - 2),
|
||||||
|
[offCycles] "I" (NS_TO_CYCLES(LED_T0L) - 2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_value(uint8_t byte, enum Device device) {
|
||||||
|
for(uint8_t b = 0; b < 8; b++) {
|
||||||
|
if(device == Device_STATUSLED) {
|
||||||
|
send_bit_d4(byte & 0b10000000);
|
||||||
|
byte <<= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send the LED indicators to the WS2811S chips
|
||||||
|
void indicator_leds_set(bool leds[8]) {
|
||||||
|
uint8_t led_cnt;
|
||||||
|
|
||||||
|
cli();
|
||||||
|
for(led_cnt = 0; led_cnt < 8; led_cnt++)
|
||||||
|
send_value(leds[led_cnt] ? 255 : 0, Device_STATUSLED);
|
||||||
|
sei();
|
||||||
|
show();
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
void indicator_leds_set(bool leds[8]);
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/* Copyright 2019 MechMerlin <[email protected]>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_tkl_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_SLCK,KC_PAUS, \
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS ,KC_HOME,KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL ,KC_END ,KC_PGDN, \
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT) \
|
||||||
|
};
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 MechMerlin <[email protected]>
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
static uint8_t debouncing = DEBOUNCE;
|
||||||
|
|
||||||
|
/* matrix state(1:on, 0:off) */
|
||||||
|
static matrix_row_t matrix[MATRIX_ROWS];
|
||||||
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
|
static uint8_t read_rows(uint8_t col);
|
||||||
|
static void init_rows(void);
|
||||||
|
static void unselect_cols(void);
|
||||||
|
static void select_col(uint8_t col);
|
||||||
|
|
||||||
|
|
||||||
|
__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 backlight_init_ports(void)
|
||||||
|
{
|
||||||
|
DDRD |= 0b11010000;
|
||||||
|
PORTD &= ~0b01010000;
|
||||||
|
PORTD |= 0b10000000;
|
||||||
|
DDRB |= 0b00011111;
|
||||||
|
PORTB &= ~0b00001110;
|
||||||
|
PORTB |= 0b00010001;
|
||||||
|
DDRE |= 0b01000000;
|
||||||
|
PORTE &= ~0b01000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void) {
|
||||||
|
backlight_init_ports();
|
||||||
|
unselect_cols();
|
||||||
|
init_rows();
|
||||||
|
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
|
matrix[i] = 0;
|
||||||
|
matrix_debouncing[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void) {
|
||||||
|
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
|
||||||
|
select_col(col);
|
||||||
|
_delay_us(3);
|
||||||
|
|
||||||
|
uint8_t rows = read_rows(col);
|
||||||
|
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
|
||||||
|
bool curr_bit = rows & (1<<row);
|
||||||
|
if (prev_bit != curr_bit) {
|
||||||
|
matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
|
||||||
|
if (debouncing) {
|
||||||
|
dprint("bounce!: "); dprintf("%02X", debouncing); dprintln();
|
||||||
|
}
|
||||||
|
debouncing = DEBOUNCE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unselect_cols();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debouncing) {
|
||||||
|
if (--debouncing) {
|
||||||
|
_delay_ms(1);
|
||||||
|
} else {
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||||
|
matrix[i] = matrix_debouncing[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_scan_quantum();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
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++) {
|
||||||
|
xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Row pin configuration - diode connected
|
||||||
|
* row: 0 1 2 3 4 5
|
||||||
|
* pin: PD0 PD1 PD2 PD3 PD5 PB7
|
||||||
|
*
|
||||||
|
* Backspace uses its own pin PE2 on the column pin, row pin is grounded
|
||||||
|
*/
|
||||||
|
static void init_rows(void) {
|
||||||
|
DDRD &= ~0b00101111;
|
||||||
|
PORTD &= ~0b00101111;
|
||||||
|
|
||||||
|
DDRB &= ~0b10000000;
|
||||||
|
PORTB &= ~0b10000000;
|
||||||
|
|
||||||
|
DDRE &= ~0b00000100;
|
||||||
|
PORTE |= 0b00000100;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t read_rows(uint8_t col) {
|
||||||
|
|
||||||
|
return (PIND&(1<<0) ? (1<<0) : 0) |
|
||||||
|
(PIND&(1<<1) ? (1<<1) : 0) |
|
||||||
|
(PIND&(1<<2) ? (1<<2) : 0) |
|
||||||
|
(PIND&(1<<3) ? (1<<3) : 0) |
|
||||||
|
(PIND&(1<<5) ? (1<<4) : 0) |
|
||||||
|
(PINB&(1<<7) ? (1<<5) : 0) |
|
||||||
|
(col== 17 ? ((PINE&(1<<2) ? 0 : (1<<1))) : 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t read_fwkey(void)
|
||||||
|
{
|
||||||
|
return PINE&(1<<2) ? 0 : (1<<2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Columns 0 - 15
|
||||||
|
*
|
||||||
|
* atmega32u4 decoder pin
|
||||||
|
* PC6 U1 E3
|
||||||
|
* PB6 U2 E3
|
||||||
|
* PF0 U1, U2 A0
|
||||||
|
* PF1 U1, U2 A1
|
||||||
|
* PC7 U1, U2 A2
|
||||||
|
*
|
||||||
|
* These columns uses two 74HC237D 3 to 8 bit demultiplexers.
|
||||||
|
* col / pin: PC6 PB6 PF0 PF1 PC7 Decoder Pin
|
||||||
|
* 0: 1 0 0 0 0 U1 Y0
|
||||||
|
* 1: 1 0 1 0 0 U1 Y1
|
||||||
|
* 2: 1 0 0 1 0 U1 Y2
|
||||||
|
* 3: 1 0 1 1 0 U1 Y3
|
||||||
|
* 4: 1 0 0 0 1 U1 Y4
|
||||||
|
* 5: 1 0 1 0 1 U1 Y5
|
||||||
|
* 6: 1 0 0 1 1 U1 Y6
|
||||||
|
* 7: 1 0 1 1 1 U1 Y7
|
||||||
|
*
|
||||||
|
* 8: 0 1 0 0 0 U2 Y0
|
||||||
|
* 9: 0 1 1 0 0 U2 Y1
|
||||||
|
* 10: 0 1 0 1 0 U2 Y2
|
||||||
|
* 11: 0 1 1 1 0 U2 Y3
|
||||||
|
* 12: 0 1 0 0 1 U2 Y4
|
||||||
|
* 13: 0 1 1 0 1 U2 Y5
|
||||||
|
* 14: 0 1 0 1 1 U2 Y6
|
||||||
|
* 15: 0 1 1 1 1 U2 Y7
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void unselect_cols(void) {
|
||||||
|
DDRB |= 0b01100000;
|
||||||
|
PORTB &= ~0b01100000;
|
||||||
|
|
||||||
|
DDRC |= 0b11000000;
|
||||||
|
PORTC &= ~0b11000000;
|
||||||
|
|
||||||
|
DDRF |= 0b00000011;
|
||||||
|
PORTF &= ~0b00000011;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void select_col(uint8_t col) {
|
||||||
|
|
||||||
|
switch (col) {
|
||||||
|
case 0:
|
||||||
|
PORTC |= 0b01000000;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
PORTC |= 0b01000000;
|
||||||
|
PORTF |= 0b00000001;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
PORTC |= 0b01000000;
|
||||||
|
PORTF |= 0b00000010;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
PORTC |= 0b01000000;
|
||||||
|
PORTF |= 0b00000011;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
PORTC |= 0b11000000;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
PORTC |= 0b11000000;
|
||||||
|
PORTF |= 0b00000001;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
PORTC |= 0b11000000;
|
||||||
|
PORTF |= 0b00000010;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
PORTC |= 0b11000000;
|
||||||
|
PORTF |= 0b00000011;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
PORTB |= 0b01000000;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
PORTB |= 0b01000000;
|
||||||
|
PORTF |= 0b00000001;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
PORTB |= 0b01000000;
|
||||||
|
PORTF |= 0b00000010;
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
PORTB |= 0b01000000;
|
||||||
|
PORTF |= 0b00000011;
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
PORTB |= 0b01000000;
|
||||||
|
PORTC |= 0b10000000;
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
PORTB |= 0b01000000;
|
||||||
|
PORTF |= 0b00000001;
|
||||||
|
PORTC |= 0b10000000;
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
PORTB |= 0b01000000;
|
||||||
|
PORTF |= 0b00000010;
|
||||||
|
PORTC |= 0b10000000;
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
PORTB |= 0b01000000;
|
||||||
|
PORTF |= 0b00000011;
|
||||||
|
PORTC |= 0b10000000;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
PORTB |= 0b00100000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Duck Orion V3
|
||||||
|
|
||||||
|
Non official firmware for custom TKL Korean keyboard made by Duck.
|
||||||
|
Group buy was run December 2018 via [geekhack](https://geekhack.org/index.php?topic=98581.0) with 100 keyboards total.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
|
||||||
|
Hardware Supported: Duck Eagle/Viper PCB Ver 2.0, Atmega32u4
|
||||||
|
Hardware Availability: Wait until GB of the next revision
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make duck/orion/v3:default
|
||||||
|
|
||||||
|
**Reset Key:** To put the Orion V3 into reset, hold Backspace key (`K4N`) while plugging in.
|
||||||
|
|
||||||
|
**CAUTION:** At this time 10/03/19 lighting has not been tested fully and may not properly work.
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
## Hardware Notes
|
||||||
|
|
||||||
|
The Orion V3 PCB consists of:
|
||||||
|
|
||||||
|
### Microchips
|
||||||
|
2 74HC237D 3-to-8 line decoders
|
||||||
|
1 Atmega32u4 microcontroller
|
||||||
|
2 WS2811 LED controller
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
Special thanks to Marcus aka Keebology for doing this remotely and mapping the matrix.
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+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 = yes # 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 = yes # Enable keyboard backlight functionality on B7 by default
|
||||||
|
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
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
SRC += indicator_leds.c \
|
||||||
|
matrix.c duck_led/duck_led.c
|
||||||
|
|
||||||
|
LAYOUTS = tkl_ansi
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
/* Copyright 2019 MechMerlin <[email protected]>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "v3.h"
|
||||||
|
#include "indicator_leds.h"
|
||||||
|
|
||||||
|
enum BACKLIGHT_AREAS {
|
||||||
|
BACKLIGHT_ALPHAS = 0b00000010,
|
||||||
|
BACKLIGHT_MODNUM = 0b00001000
|
||||||
|
};
|
||||||
|
|
||||||
|
void backlight_set(uint8_t level) {
|
||||||
|
switch(level) {
|
||||||
|
case 0:
|
||||||
|
PORTB |= BACKLIGHT_ALPHAS;
|
||||||
|
PORTB |= BACKLIGHT_MODNUM;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
PORTB &= ~BACKLIGHT_ALPHAS;
|
||||||
|
PORTB |= BACKLIGHT_MODNUM;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
PORTB |= BACKLIGHT_ALPHAS;
|
||||||
|
PORTB &= ~BACKLIGHT_MODNUM;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
PORTB &= ~BACKLIGHT_ALPHAS;
|
||||||
|
PORTB &= ~BACKLIGHT_MODNUM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Port from backlight_update_state
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
bool status[8] = {
|
||||||
|
IS_HOST_LED_ON(USB_LED_SCROLL_LOCK), /* LED 3 */
|
||||||
|
IS_HOST_LED_ON(USB_LED_CAPS_LOCK), /* LED 2 */
|
||||||
|
IS_HOST_LED_ON(USB_LED_NUM_LOCK), /* LED 1 */
|
||||||
|
|
||||||
|
layer_state & (1<<2), /* LED 6 */
|
||||||
|
layer_state & (1<<1), /* LED 5 */
|
||||||
|
layer_state & (1<<0) ? 0: 1, /* LED 4 */
|
||||||
|
|
||||||
|
layer_state & (1<<5), /* LED 8 */
|
||||||
|
layer_state & (1<<4) /* LED 7 */
|
||||||
|
};
|
||||||
|
|
||||||
|
indicator_leds_set(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/* Copyright 2019 MechMerlin <[email protected]>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define ___ KC_NO
|
||||||
|
|
||||||
|
#define LAYOUT_tkl_ansi( \
|
||||||
|
K5A, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, \
|
||||||
|
K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4R, K4O, K4P, K4Q, \
|
||||||
|
K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3O, K3P, K3Q, \
|
||||||
|
K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, \
|
||||||
|
K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1N, K1P, \
|
||||||
|
K0A, K0B, K0C, K0F, K0I, K0K, K0M, K0N, K0O, K0P, K0Q \
|
||||||
|
) { \
|
||||||
|
{ K5A, ___, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, ___ }, \
|
||||||
|
{ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, ___, K4O, K4P, K4Q, K4R }, \
|
||||||
|
{ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3O, K3P, K3Q, ___ }, \
|
||||||
|
{ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, ___, K2N, ___, ___, ___, ___ }, \
|
||||||
|
{ K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, ___, ___, K1N, ___, K1P, ___, ___ }, \
|
||||||
|
{ K0A, K0B, K0C, ___, ___, K0F, ___, ___, K0I, ___, K0K, ___, K0M, K0N, K0O, K0P, K0Q, ___ } \
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define LAYER_FN
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "konstantin.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Base layer
|
||||||
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
|
||||||
|
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │
|
||||||
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
|
||||||
|
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||||
|
* │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
|
||||||
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
|
||||||
|
* │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │RSft /│ ↑ │FnF│
|
||||||
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
|
||||||
|
* │LCtl│LGui│LAlt│ Space │RAG│RCt│ ← │ ↓ │ → │
|
||||||
|
* └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[L_BASE] = LAYOUT_60_b_ansi(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||||
|
FN_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, RSF_SLS, KC_UP, FN_FNLK,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC, XXXXXXX, RAL_RGU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Fn layer
|
||||||
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
|
||||||
|
* │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Ins│
|
||||||
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
|
||||||
|
* │ M4 │M2 │M↑ │M1 │M3 │M5 │ │ │ │Stp│Ply│Prv│Nxt│ Del │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||||
|
* │ │M← │M↓ │M→ │MW↑│ │ │ │ │ │ │ │ │
|
||||||
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
|
||||||
|
* │ │MA0│MA2│MW←│MW→│ │ │App│Vo-│Vo+│ Mute │PgU│ │
|
||||||
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
|
||||||
|
* │ │DtPR│DtNA│ MW↓ │ │ │Hom│PgD│End│
|
||||||
|
* └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[L_FN] = LAYOUT_60_b_ansi(
|
||||||
|
_______, 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_INS,
|
||||||
|
KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_DEL,
|
||||||
|
_______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______,
|
||||||
|
_______, DST_P_R, DST_N_A, XXXXXXX, KC_WH_D, XXXXXXX, _______, _______, KC_HOME, KC_PGDN, KC_END
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
BACKLIGHT_ENABLE = no
|
||||||
|
BOOTMAGIC_ENABLE = no
|
||||||
|
COMMAND_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = yes
|
||||||
|
EXTRAKEY_ENABLE = yes
|
||||||
|
MOUSEKEY_ENABLE = yes
|
||||||
|
NKRO_ENABLE = yes
|
||||||
|
RGBLIGHT_ENABLE = no
|
||||||
|
SPACE_CADET_ENABLE = no
|
||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
|
UNICODEMAP_ENABLE = no
|
||||||
|
|
||||||
|
USER_NAME = konstantin
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define FORCE_NKRO
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum tofu68_layers {
|
||||||
|
_QWERTY,
|
||||||
|
_FNM
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FNM MO(_FNM)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT_65_ansi(
|
||||||
|
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, \
|
||||||
|
KC_GRV, 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_LALT, KC_LCMD, KC_SPC, FNM, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||||
|
),
|
||||||
|
[_FNM] = LAYOUT_65_ansi(
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, KC_MUTE, KC_VOLU, \
|
||||||
|
_______, RGB_TOG, RGB_MOD, RGB_HUI ,RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET, KC_VOLD, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, AG_TOGG, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R \
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
|
VELOCIKEY_ENABLE = yes
|
||||||
|
# AUTO_SHIFT_ENABLE = yes # Auto Shift
|
||||||
|
|
||||||
|
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
||||||
|
|
||||||
@@ -0,0 +1,245 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 Amber Holly
|
||||||
|
|
||||||
|
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 0xFEED
|
||||||
|
#define PRODUCT_ID 0x0000
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Soran
|
||||||
|
#define PRODUCT Efreet
|
||||||
|
#define DESCRIPTION A 40% ortholinear keyboard.
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_COLS 6
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { B0, D6, D5, D4, D3, D2, D1, C2 }
|
||||||
|
#define MATRIX_COL_PINS { B3, B4, B5, B6, B7, C7 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
|
||||||
|
*/
|
||||||
|
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN D0
|
||||||
|
#define BACKLIGHT_BREATHING
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
// #define RGB_DI_PIN E2
|
||||||
|
// #ifdef RGB_DI_PIN
|
||||||
|
// #define RGBLED_NUM 16
|
||||||
|
// #define RGBLIGHT_HUE_STEP 8
|
||||||
|
// #define RGBLIGHT_SAT_STEP 8
|
||||||
|
// #define RGBLIGHT_VAL_STEP 8
|
||||||
|
// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||||
|
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||||
|
// /*== all animations enable ==*/
|
||||||
|
// #define RGBLIGHT_ANIMATIONS
|
||||||
|
// /*== or choose animations ==*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
// #define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
// #define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
// #define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
// #define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
// #define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
// /*== customize breathing effect ==*/
|
||||||
|
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||||
|
// /*==== use exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* control how magic key switches layers */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||||
|
|
||||||
|
/* override magic key keymap */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||||
|
//#define MAGIC_KEY_HELP H
|
||||||
|
//#define MAGIC_KEY_HELP_ALT SLASH
|
||||||
|
//#define MAGIC_KEY_DEBUG D
|
||||||
|
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||||
|
//#define MAGIC_KEY_DEBUG_KBD K
|
||||||
|
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||||
|
//#define MAGIC_KEY_VERSION V
|
||||||
|
//#define MAGIC_KEY_STATUS S
|
||||||
|
//#define MAGIC_KEY_CONSOLE C
|
||||||
|
//#define MAGIC_KEY_LAYER0 0
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT GRAVE
|
||||||
|
//#define MAGIC_KEY_LAYER1 1
|
||||||
|
//#define MAGIC_KEY_LAYER2 2
|
||||||
|
//#define MAGIC_KEY_LAYER3 3
|
||||||
|
//#define MAGIC_KEY_LAYER4 4
|
||||||
|
//#define MAGIC_KEY_LAYER5 5
|
||||||
|
//#define MAGIC_KEY_LAYER6 6
|
||||||
|
//#define MAGIC_KEY_LAYER7 7
|
||||||
|
//#define MAGIC_KEY_LAYER8 8
|
||||||
|
//#define MAGIC_KEY_LAYER9 9
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER B
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
|
||||||
|
//#define MAGIC_KEY_LOCK CAPS
|
||||||
|
//#define MAGIC_KEY_EEPROM E
|
||||||
|
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
|
||||||
|
//#define MAGIC_KEY_NKRO N
|
||||||
|
//#define MAGIC_KEY_SLEEP_LED Z
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MIDI options
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent use of disabled MIDI features in the keymap */
|
||||||
|
//#define MIDI_ENABLE_STRICT 1
|
||||||
|
|
||||||
|
/* enable basic MIDI features:
|
||||||
|
- MIDI notes can be sent when in Music mode is on
|
||||||
|
*/
|
||||||
|
//#define MIDI_BASIC
|
||||||
|
|
||||||
|
/* enable advanced MIDI features:
|
||||||
|
- MIDI notes can be added to the keymap
|
||||||
|
- Octave shift and transpose
|
||||||
|
- Virtual sustain, portamento, and modulation wheel
|
||||||
|
- etc.
|
||||||
|
*/
|
||||||
|
//#define MIDI_ADVANCED
|
||||||
|
|
||||||
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
|
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HD44780 LCD Display Configuration
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
#define LCD_LINES 2 //< number of visible lines of the display
|
||||||
|
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||||
|
|
||||||
|
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||||
|
|
||||||
|
#if LCD_IO_MODE
|
||||||
|
#define LCD_PORT PORTB //< port for the LCD lines
|
||||||
|
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||||
|
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||||
|
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||||
|
#define LCD_RS_PIN 3 //< pin for RS line
|
||||||
|
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||||
|
#define LCD_RW_PIN 2 //< pin for RW line
|
||||||
|
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||||
|
#define LCD_E_PIN 1 //< pin for Enable line
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* 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 "efreet.h"
|
||||||
|
|
||||||
|
// Optional override functions below.
|
||||||
|
// You can leave any or all of these undefined.
|
||||||
|
// These are only required if you want to perform custom actions.
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
// put your looping keyboard code here
|
||||||
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
// put your per-action keyboard code here
|
||||||
|
// runs for every action, just before processing by the firmware
|
||||||
|
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||||
|
|
||||||
|
led_set_user(usb_led);
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* This a shortcut to help you visually see your layout.
|
||||||
|
*
|
||||||
|
* The first section contains all of the arguments representing the physical
|
||||||
|
* layout of the board and position of the keys.
|
||||||
|
*
|
||||||
|
* The second converts the arguments into a two-dimensional array which
|
||||||
|
* represents the switch matrix.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LAYOUT_ortho_4x12( \
|
||||||
|
K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15,\
|
||||||
|
K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35,\
|
||||||
|
K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55,\
|
||||||
|
K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75\
|
||||||
|
) { \
|
||||||
|
{ K10, K11, K12, K13, K14, K15 }, \
|
||||||
|
{ K00, K01, K02, K03, K04, K05 }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25 }, \
|
||||||
|
{ K50, K51, K52, K53, K54, K55 }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45 }, \
|
||||||
|
{ K70, K71, K72, K73, K74, K75 }, \
|
||||||
|
{ K60, K61, K62, K63, K64, K65 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_planck_mit( \
|
||||||
|
K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15,\
|
||||||
|
K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35,\
|
||||||
|
K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55,\
|
||||||
|
K60, K70, K61, K71, K62, K72, K73, K64, K74, K65, K75\
|
||||||
|
) { \
|
||||||
|
{ K10, K11, K12, K13, K14, K15 }, \
|
||||||
|
{ K00, K01, K02, K03, K04, K05 }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25 }, \
|
||||||
|
{ K50, K51, K52, K53, K54, K55 }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45 }, \
|
||||||
|
{ K70, K71, K72, K73, K74, K75 }, \
|
||||||
|
{ K60, K61, K62, KC_NO, K64, K65 } \
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "efreet",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "amberstarlight",
|
||||||
|
"width": 12,
|
||||||
|
"height": 4,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_planck_mit": {
|
||||||
|
"layout": [{"label":"Tab", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Back Space", "x":11, "y":0}, {"label":"Esc", "x":0, "y":1}, {"label":"A", "x":1, "y":1}, {"label":"S", "x":2, "y":1}, {"label":"D", "x":3, "y":1}, {"label":"F", "x":4, "y":1}, {"label":"G", "x":5, "y":1}, {"label":"H", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1}, {"label":";", "x":10, "y":1}, {"label":"'", "x":11, "y":1}, {"label":"Shift", "x":0, "y":2}, {"label":"Z", "x":1, "y":2}, {"label":"X", "x":2, "y":2}, {"label":"C", "x":3, "y":2}, {"label":"V", "x":4, "y":2}, {"label":"B", "x":5, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":",", "x":8, "y":2}, {"label":".", "x":9, "y":2}, {"label":"/", "x":10, "y":2}, {"label":"Return", "x":11, "y":2}, {"x":0, "y":3}, {"label":"Ctrl", "x":1, "y":3}, {"label":"Alt", "x":2, "y":3}, {"label":"Super", "x":3, "y":3}, {"label":"⇓", "x":4, "y":3}, {"x":5, "y":3, "w":2}, {"label":"⇑", "x":7, "y":3}, {"label":"←", "x":8, "y":3}, {"label":"↓", "x":9, "y":3}, {"label":"↑", "x":10, "y":3}, {"label":"→", "x":11, "y":3}]
|
||||||
|
},
|
||||||
|
"LAYOUT_ortho_4x12": {
|
||||||
|
"layout": [{"label":"Tab", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Back Space", "x":11, "y":0}, {"label":"Esc", "x":0, "y":1}, {"label":"A", "x":1, "y":1}, {"label":"S", "x":2, "y":1}, {"label":"D", "x":3, "y":1}, {"label":"F", "x":4, "y":1}, {"label":"G", "x":5, "y":1}, {"label":"H", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1}, {"label":";", "x":10, "y":1}, {"label":"'", "x":11, "y":1}, {"label":"Shift", "x":0, "y":2}, {"label":"Z", "x":1, "y":2}, {"label":"X", "x":2, "y":2}, {"label":"C", "x":3, "y":2}, {"label":"V", "x":4, "y":2}, {"label":"B", "x":5, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":",", "x":8, "y":2}, {"label":".", "x":9, "y":2}, {"label":"/", "x":10, "y":2}, {"label":"Return", "x":11, "y":2}, {"x":0, "y":3}, {"label":"Ctrl", "x":1, "y":3}, {"label":"Alt", "x":2, "y":3}, {"label":"Super", "x":3, "y":3}, {"label":"⇓", "x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"label":"⇑", "x":7, "y":3}, {"label":"←", "x":8, "y":3}, {"label":"↓", "x":9, "y":3}, {"label":"↑", "x":10, "y":3}, {"label":"→", "x":11, "y":3}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/* Copyright 2019 Amber Holly
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// Defines the keycodes used by our macros in process_record_user
|
||||||
|
enum custom_keycodes {
|
||||||
|
QMKBEST = SAFE_RANGE,
|
||||||
|
QMKURL
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_ortho_4x12(
|
||||||
|
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_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
|
||||||
|
BL_TOGG, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_ortho_4x12(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
),
|
||||||
|
[2] = LAYOUT_ortho_4x12(
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_user(uint8_t usb_led) {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The default keymap for efreet
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Efreet
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Custom PCB for the Efreet (as4x) keyboard.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [Amber Holly](https://github.com/amberstarlight)
|
||||||
|
Hardware Supported: Efreet PCB
|
||||||
|
Hardware Availability: private group buy
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make efreet:default
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u2
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = 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 = yes # Commands for debug and configuration
|
||||||
|
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 = yes # Enable keyboard backlight functionality
|
||||||
|
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)
|
||||||
|
|
||||||
|
LAYOUTS = ortho_4x12 planck_mit
|
||||||
@@ -1,20 +1,6 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
#include "debug.h"
|
|
||||||
#include "action_layer.h"
|
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
#include "layers.h"
|
||||||
enum custom_layers {
|
|
||||||
_QWERTY,
|
|
||||||
_WORKMAN,
|
|
||||||
_DVORAK,
|
|
||||||
_COLEMAK,
|
|
||||||
_LOWER,
|
|
||||||
_RAISE,
|
|
||||||
_ADJUST,
|
|
||||||
_GAME,
|
|
||||||
_MOUSE,
|
|
||||||
_NUM,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
QWERTY = SAFE_RANGE,
|
QWERTY = SAFE_RANGE,
|
||||||
@@ -39,41 +25,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Tab | Q | W | E | R | T | [{ | | ]} | Y | U | I | O | P | BSPC |
|
* | Tab | Q | W | E | R | T | [{ | | ]} | Y | U | I | O | P | BSPC |
|
||||||
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
||||||
* | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
* | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||||
* |--------+-----+-----+-----+-----+-----| L1 | | L1 |-----+-----+-----+-----+-----+--------|
|
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
||||||
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | Enter |
|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | Enter |
|
||||||
* `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
|
* `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
|
||||||
* | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
|
* | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
|
||||||
* `------------------------------' `------------------------------'
|
* `------------------------------' `------------------------------'
|
||||||
* ,------------. ,------------.
|
* ,------------. ,------------.
|
||||||
* |Play |Mouse | | Num |Mouse|
|
* |Play | | | |Play |
|
||||||
* ,----|-----|------| |------+-----+-----.
|
* ,-----|-----|------| |------+-----+-----.
|
||||||
* | | | Alt | | Alt | | |
|
* | | | Alt | | Alt | | |
|
||||||
* |BSPC|LOWER|------| |------|RAISE|Space|
|
* |Space|LOWER|------| |------|RAISE|Space|
|
||||||
* | | | LGUI | | LGUI | | |
|
* | | | LGUI | | LGUI | | |
|
||||||
* `-----------------' `------------------'
|
* `------------------' `------------------'
|
||||||
*/
|
*/
|
||||||
[_QWERTY] = LAYOUT_ergodox(
|
[_QWERTY] = LAYOUT_ergodox(
|
||||||
// left hand
|
// left hand
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRACKET,
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRACKET,
|
||||||
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1,
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
|
||||||
TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
|
TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
|
||||||
|
|
||||||
KC_MPLY, TG(_MOUSE),
|
KC_MPLY, _______,
|
||||||
KC_LALT,
|
KC_LALT,
|
||||||
KC_BSPACE, LOWER, KC_LGUI,
|
KC_SPACE, LOWER, KC_LGUI,
|
||||||
|
|
||||||
// right hand
|
// right hand
|
||||||
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||||
KC_RBRACKET, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPACE,
|
KC_RBRACKET, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPACE,
|
||||||
KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE,
|
KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE,
|
||||||
KC_FN1, KC_N, KC_M, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
|
_______, KC_N, KC_M, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
|
||||||
RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
|
RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
|
||||||
|
|
||||||
TT(_NUM), TG(_MOUSE),
|
_______, KC_MPLY,
|
||||||
KC_LALT,
|
KC_LALT,
|
||||||
KC_LGUI, RAISE, KC_SPACE
|
KC_LGUI, RAISE, KC_SPACE
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Keymap 0: Basic Workman layer
|
/* Keymap 0: Basic Workman layer
|
||||||
@@ -84,41 +70,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Tab | Q | D | R | W | B | [{ | | ]} | J | F | U | P | ; | BSPC |
|
* | Tab | Q | D | R | W | B | [{ | | ]} | J | F | U | P | ; | BSPC |
|
||||||
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
||||||
* | ESC | A | S | H | T | G |------| |------| Y | N | E | O | I | ' |
|
* | ESC | A | S | H | T | G |------| |------| Y | N | E | O | I | ' |
|
||||||
* |--------+-----+-----+-----+-----+-----| L1 | | L1 |-----+-----+-----+-----+-----+--------|
|
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
||||||
* | LShift | Z | X | M | C | V | | | | K | L | , | . | / | Enter |
|
* | LShift | Z | X | M | C | V | | | | K | L | , | . | / | Enter |
|
||||||
* `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
|
* `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
|
||||||
* | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
|
* | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
|
||||||
* `------------------------------' `------------------------------'
|
* `------------------------------' `------------------------------'
|
||||||
* ,------------. ,------------.
|
* ,------------. ,------------.
|
||||||
* |Play |Mouse | | Num |Mouse|
|
* |Play | | | |Play |
|
||||||
* ,----|-----|------| |------+-----+-----.
|
* ,-----|-----|------| |------+-----+-----.
|
||||||
* | | | Alt | | Alt | | |
|
* | | | Alt | | Alt | | |
|
||||||
* |BSPC|LOWER|------| |------|RAISE|Space|
|
* |Space|LOWER|------| |------|RAISE|Space|
|
||||||
* | | | LGUI | | LGUI | | |
|
* | | | LGUI | | LGUI | | |
|
||||||
* `-----------------' `------------------'
|
* `------------------' `------------------'
|
||||||
*/
|
*/
|
||||||
[_WORKMAN] = LAYOUT_ergodox(
|
[_WORKMAN] = LAYOUT_ergodox(
|
||||||
// left hand
|
// left hand
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
||||||
KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LBRACKET,
|
KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LBRACKET,
|
||||||
KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G,
|
KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_FN1,
|
KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, _______,
|
||||||
TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
|
TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
|
||||||
|
|
||||||
KC_MPLY, TG(_MOUSE),
|
KC_MPLY, _______,
|
||||||
KC_LALT,
|
KC_LALT,
|
||||||
KC_BSPACE, LOWER, KC_LGUI,
|
KC_SPACE, LOWER, KC_LGUI,
|
||||||
|
|
||||||
// right hand
|
// right hand
|
||||||
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||||
KC_RBRACKET, KC_J, KC_F, KC_U, KC_P, KC_SCOLON, KC_BSPACE,
|
KC_RBRACKET, KC_J, KC_F, KC_U, KC_P, KC_SCOLON, KC_BSPACE,
|
||||||
KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
|
KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
|
||||||
KC_FN1, KC_K, KC_L, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
|
_______, KC_K, KC_L, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
|
||||||
RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
|
RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
|
||||||
|
|
||||||
TT(_NUM), TG(_MOUSE),
|
_______, KC_MPLY,
|
||||||
KC_LALT,
|
KC_LALT,
|
||||||
KC_LGUI, RAISE, KC_SPACE
|
KC_LGUI, RAISE, KC_SPACE
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Keymap 0: Basic Dvorak layer
|
/* Keymap 0: Basic Dvorak layer
|
||||||
@@ -129,41 +115,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Tab | ' | , | . | P | Y | [{ | | ]} | F | G | C | R | L | BSPC |
|
* | Tab | ' | , | . | P | Y | [{ | | ]} | F | G | C | R | L | BSPC |
|
||||||
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
||||||
* | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | / |
|
* | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | / |
|
||||||
* |--------+-----+-----+-----+-----+-----| L1 | | L1 |-----+-----+-----+-----+-----+--------|
|
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
||||||
* | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | Enter |
|
* | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | Enter |
|
||||||
* `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
|
* `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
|
||||||
* | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
|
* | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
|
||||||
* `------------------------------' `------------------------------'
|
* `------------------------------' `------------------------------'
|
||||||
* ,------------. ,------------.
|
* ,------------. ,------------.
|
||||||
* |Play |Mouse | | Num |Mouse|
|
* |Play | | | |Play |
|
||||||
* ,----|-----|------| |------+-----+-----.
|
* ,-----|-----|------| |------+-----+-----.
|
||||||
* | | | Alt | | Alt | | |
|
* | | | Alt | | Alt | | |
|
||||||
* |BSPC|LOWER|------| |------|RAISE|Space|
|
* |Space|LOWER|------| |------|RAISE|Space|
|
||||||
* | | | LGUI | | LGUI | | |
|
* | | | LGUI | | LGUI | | |
|
||||||
* `-----------------' `------------------'
|
* `------------------' `------------------'
|
||||||
*/
|
*/
|
||||||
[_DVORAK] = LAYOUT_ergodox(
|
[_DVORAK] = LAYOUT_ergodox(
|
||||||
// left hand
|
// left hand
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
||||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_LBRACKET,
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_LBRACKET,
|
||||||
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I,
|
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I,
|
||||||
KC_LSFT, KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, KC_FN1,
|
KC_LSFT, KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, _______,
|
||||||
TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
|
TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
|
||||||
|
|
||||||
KC_MPLY, TG(_MOUSE),
|
KC_MPLY, _______,
|
||||||
KC_LALT,
|
KC_LALT,
|
||||||
KC_BSPACE, LOWER, KC_LGUI,
|
KC_SPACE, LOWER, KC_LGUI,
|
||||||
|
|
||||||
// right hand
|
// right hand
|
||||||
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||||
KC_RBRACKET, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPACE,
|
KC_RBRACKET, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPACE,
|
||||||
KC_D, KC_H, KC_T, KC_N, KC_S, LT(MOUSE, KC_SLSH),
|
KC_D, KC_H, KC_T, KC_N, KC_S, LT(MOUSE, KC_SLSH),
|
||||||
KC_FN1, KC_B, KC_M, KC_W, KC_V, KC_Z, RSFT_T(KC_ENT),
|
_______, KC_B, KC_M, KC_W, KC_V, KC_Z, RSFT_T(KC_ENT),
|
||||||
RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
|
RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
|
||||||
|
|
||||||
TT(_NUM), TG(_MOUSE),
|
_______, KC_MPLY,
|
||||||
KC_LALT,
|
KC_LALT,
|
||||||
KC_LGUI, RAISE, KC_SPACE
|
KC_LGUI, RAISE, KC_SPACE
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Keymap 0: Basic Colemak layer
|
/* Keymap 0: Basic Colemak layer
|
||||||
@@ -174,41 +160,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* | Tab | Q | W | F | P | G | [{ | | ]} | J | L | U | Y | ; | BSPC |
|
* | Tab | Q | W | F | P | G | [{ | | ]} | J | L | U | Y | ; | BSPC |
|
||||||
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
||||||
* | ESC | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
|
* | ESC | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
|
||||||
* |--------+-----+-----+-----+-----+-----| L1 | | L1 |-----+-----+-----+-----+-----+--------|
|
* |--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
|
||||||
* | LShift | Z | X | C | V | B | | | | K | M | , | . | / | Enter |
|
* | LShift | Z | X | C | V | B | | | | K | M | , | . | / | Enter |
|
||||||
* `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
|
* `--------+-----+-----+-----+-----+------------' `------------+-----+-----+-----+-----+--------'
|
||||||
* | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
|
* | Num |Ctrl | Alt |LGUI |Lower| |Raise|Left |Down | Up |Right |
|
||||||
* `------------------------------' `------------------------------'
|
* `------------------------------' `------------------------------'
|
||||||
* ,------------. ,------------.
|
* ,------------. ,------------.
|
||||||
* |Play |Mouse | | Num |Mouse|
|
* |Play | | | |Play |
|
||||||
* ,----|-----|------| |------+-----+-----.
|
* ,-----|-----|------| |------+-----+-----.
|
||||||
* | | | Alt | | Alt | | |
|
* | | | Alt | | Alt | | |
|
||||||
* |BSPC|LOWER|------| |------|RAISE|Space|
|
* |Space|LOWER|------| |------|RAISE|Space|
|
||||||
* | | | LGUI | | LGUI | | |
|
* | | | LGUI | | LGUI | | |
|
||||||
* `-----------------' `------------------'
|
* `------------------' `------------------'
|
||||||
*/
|
*/
|
||||||
[_COLEMAK] = LAYOUT_ergodox(
|
[_COLEMAK] = LAYOUT_ergodox(
|
||||||
// left hand
|
// left hand
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
||||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRACKET,
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRACKET,
|
||||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D,
|
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1,
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
|
||||||
TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
|
TT(_NUM), KC_LCTL, KC_LALT, KC_LGUI, LOWER,
|
||||||
|
|
||||||
KC_MPLY, TG(_MOUSE),
|
KC_MPLY, _______,
|
||||||
KC_LALT,
|
KC_LALT,
|
||||||
KC_BSPACE, LOWER, KC_LGUI,
|
KC_SPACE, LOWER, KC_LGUI,
|
||||||
|
|
||||||
// right hand
|
// right hand
|
||||||
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||||
KC_RBRACKET, KC_J, KC_L, KC_U, KC_Y, KC_SCOLON, KC_BSPACE,
|
KC_RBRACKET, KC_J, KC_L, KC_U, KC_Y, KC_SCOLON, KC_BSPACE,
|
||||||
KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
|
KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
|
||||||
KC_FN1, KC_K, KC_M, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
|
_______, KC_K, KC_M, KC_COMM, KC_DOT, LT(_MOUSE, KC_SLSH), RSFT_T(KC_ENT),
|
||||||
RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
|
RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,
|
||||||
|
|
||||||
TT(_NUM), TG(_MOUSE),
|
_______, KC_MPLY,
|
||||||
KC_LALT,
|
KC_LALT,
|
||||||
KC_LGUI, RAISE, KC_SPACE
|
KC_LGUI, RAISE, KC_SPACE
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Lower
|
/* Lower
|
||||||
@@ -216,19 +202,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* ,---------------------------------------------------. ,--------------------------------------------------.
|
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
|
* | Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
|
||||||
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||||
* | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | |
|
* | ~ | ! | @ | # | $ | % | F6 | | F5 | ^ | & | * | ( | ) | |
|
||||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | Del | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | _ | + | { | } | | |
|
* | Del | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | _ | + | { | } | | |
|
||||||
* |---------+------+------+------+------+------| L2 | | L2 |------+------+------+------+------+--------|
|
* |---------+------+------+------+------+------| F12 | | F11 |------+------+------+------+------+--------|
|
||||||
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | Home | End | |
|
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | Home | End | |
|
||||||
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* | | | | | | | | Play | Vol- | Vol+ | Next |
|
* | | | | | | | | Play | Vol- | Vol+ | Next |
|
||||||
* `-----------------------------------' `----------------------------------'
|
* `-----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* |Animat| | |Toggle|Solid |
|
* | | | | | |
|
||||||
* ,------|------|------| |------+------+------.
|
* ,------|------|------| |------+------+------.
|
||||||
* |Bright|Bright| | | |Hue- |Hue+ |
|
* | | | | | | | |
|
||||||
* |ness- |ness+ |------| |------| | |
|
* | | |------| |------| | |
|
||||||
* | | | | | | | |
|
* | | | | | | | |
|
||||||
* `--------------------' `--------------------'
|
* `--------------------' `--------------------'
|
||||||
*/
|
*/
|
||||||
@@ -261,10 +247,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* ,---------------------------------------------------. ,--------------------------------------------------.
|
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | F11 |
|
* | Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||||
* | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
|
* | ` | 1 | 2 | 3 | 4 | 5 | F6 | | F5 | 6 | 7 | 8 | 9 | 0 | |
|
||||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | Del | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | - | = | [ | ] | \ |
|
* | Del | F1 | F2 | F3 | F4 | F5 |------| |------| F6 | - | = | [ | ] | \ |
|
||||||
* |---------+------+------+------+------+------| L2 | | L2 |------+------+------+------+------+--------|
|
* |---------+------+------+------+------+------| F12 | | F11 |------+------+------+------+------+--------|
|
||||||
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
|
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
|
||||||
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* | | | | | | | | Play | Vol- | Vol+ | Next |
|
* | | | | | | | | Play | Vol- | Vol+ | Next |
|
||||||
@@ -308,7 +294,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* | |Reset |Debug | | | | | | | |TRM on|TRMoff| | | Del |
|
* | |Reset |Debug | | | | | | | |TRM on|TRMoff| | | Del |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | CPSLCK | | | | |AG Nrm|------| |------|AG Swp|QWERTY|Wrkman|Dvorak| | |
|
* | CPSLCK | | | | |AG Nrm|------| |------|AG Swp|QWERTY|Wrkman|Dvorak|Colmak| |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | | | | | | | | | | | Prev | Next | | |
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
@@ -325,7 +311,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
[_ADJUST] = LAYOUT_ergodox(
|
[_ADJUST] = LAYOUT_ergodox(
|
||||||
// left hand
|
// left hand
|
||||||
VRSN, _______, _______, _______, _______, _______, _______,
|
VRSN, _______, _______, _______, _______, _______, _______,
|
||||||
_______, RESET, DEBUG, _______, _______, _______, _______,
|
_______, RESET, DEBUG, BL_TOGG, BL_STEP, _______, _______,
|
||||||
KC_CAPS, _______, _______, _______, _______, AG_NORM,
|
KC_CAPS, _______, _______, _______, _______, AG_NORM,
|
||||||
_______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______,
|
||||||
@@ -502,6 +488,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void matrix_init_user() {
|
||||||
|
backlight_enable();
|
||||||
|
backlight_level(BACKLIGHT_LEVELS);
|
||||||
|
}
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
case QWERTY:
|
case QWERTY:
|
||||||
@@ -576,34 +567,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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) {
|
|
||||||
uint8_t layer = biton32(layer_state);
|
|
||||||
|
|
||||||
ergodox_board_led_off();
|
|
||||||
ergodox_led_lower_off();
|
|
||||||
ergodox_led_raise_off();
|
|
||||||
ergodox_led_adjust_off();
|
|
||||||
|
|
||||||
switch (layer) {
|
|
||||||
case _LOWER:
|
|
||||||
ergodox_led_lower_on();
|
|
||||||
break;
|
|
||||||
case _RAISE:
|
|
||||||
ergodox_led_raise_on();
|
|
||||||
break;
|
|
||||||
case _ADJUST:
|
|
||||||
ergodox_led_adjust_on();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum custom_layers {
|
||||||
|
_QWERTY,
|
||||||
|
_WORKMAN,
|
||||||
|
_DVORAK,
|
||||||
|
_COLEMAK,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
_GAME,
|
||||||
|
_MOUSE,
|
||||||
|
_NUM,
|
||||||
|
};
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
/* Copyright 2017 Fred Sundvik
|
||||||
|
*
|
||||||
|
* 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 KEYBOARDS_ERGODOX_INFINITY_SIMPLE_VISUALIZER_H_
|
||||||
|
#define KEYBOARDS_ERGODOX_INFINITY_SIMPLE_VISUALIZER_H_
|
||||||
|
|
||||||
|
// Currently we are assuming that both the backlight and LCD are enabled
|
||||||
|
// But it's entirely possible to write a custom visualizer that use only
|
||||||
|
// one of them
|
||||||
|
#ifndef LCD_BACKLIGHT_ENABLE
|
||||||
|
#error This visualizer needs that LCD backlight is enabled
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LCD_ENABLE
|
||||||
|
#error This visualizer needs that LCD is enabled
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "visualizer.h"
|
||||||
|
#include "visualizer_keyframes.h"
|
||||||
|
#include "lcd_keyframes.h"
|
||||||
|
#include "lcd_backlight_keyframes.h"
|
||||||
|
#include "system/serial_link.h"
|
||||||
|
#include "led.h"
|
||||||
|
#include "default_animations.h"
|
||||||
|
|
||||||
|
static const uint32_t logo_background_color = LCD_COLOR(0x00, 0x00, 0xFF);
|
||||||
|
static const uint32_t initial_color = LCD_COLOR(0, 0, 0);
|
||||||
|
|
||||||
|
static bool initial_update = true;
|
||||||
|
|
||||||
|
// Feel free to modify the animations below, or even add new ones if needed
|
||||||
|
|
||||||
|
static keyframe_animation_t lcd_layer_display = {
|
||||||
|
.num_frames = 1,
|
||||||
|
.loop = false,
|
||||||
|
.frame_lengths = {gfxMillisecondsToTicks(0)},
|
||||||
|
.frame_functions = {lcd_keyframe_display_layer_and_led_states}
|
||||||
|
};
|
||||||
|
|
||||||
|
// The color animation animates the LCD color when you change layers
|
||||||
|
static keyframe_animation_t color_animation = {
|
||||||
|
.num_frames = 2,
|
||||||
|
.loop = false,
|
||||||
|
// Note that there's a 200 ms no-operation frame,
|
||||||
|
// this prevents the color from changing when activating the layer
|
||||||
|
// momentarily
|
||||||
|
.frame_lengths = {gfxMillisecondsToTicks(1), gfxMillisecondsToTicks(5)},
|
||||||
|
.frame_functions = {keyframe_no_operation, lcd_backlight_keyframe_animate_color},
|
||||||
|
};
|
||||||
|
|
||||||
|
void initialize_user_visualizer(visualizer_state_t* state) {
|
||||||
|
// The brightness will be dynamically adjustable in the future
|
||||||
|
// But for now, change it here.
|
||||||
|
lcd_backlight_brightness(130);
|
||||||
|
state->current_lcd_color = initial_color;
|
||||||
|
state->target_lcd_color = logo_background_color;
|
||||||
|
initial_update = true;
|
||||||
|
start_keyframe_animation(&default_startup_animation);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// This function should be implemented by the keymap visualizer
|
||||||
|
// Don't change anything else than state->target_lcd_color and state->layer_text as that's the only thing
|
||||||
|
// that the simple_visualizer assumes that you are updating
|
||||||
|
// Also make sure that the buffer passed to state->layer_text remains valid until the previous animation is
|
||||||
|
// stopped. This can be done by either double buffering it or by using constant strings
|
||||||
|
static void get_visualizer_layer_and_color(visualizer_state_t* state);
|
||||||
|
|
||||||
|
void update_user_visualizer_state(visualizer_state_t* state, visualizer_keyboard_status_t* prev_status) {
|
||||||
|
// Add more tests, change the colors and layer texts here
|
||||||
|
// Usually you want to check the high bits (higher layers first)
|
||||||
|
// because that's the order layers are processed for keypresses
|
||||||
|
// You can for check for example:
|
||||||
|
// state->status.layer
|
||||||
|
// state->status.default_layer
|
||||||
|
// state->status.leds (see led.h for available statuses)
|
||||||
|
|
||||||
|
uint32_t prev_color = state->target_lcd_color;
|
||||||
|
const char* prev_layer_text = state->layer_text;
|
||||||
|
|
||||||
|
get_visualizer_layer_and_color(state);
|
||||||
|
|
||||||
|
if (initial_update || prev_color != state->target_lcd_color) {
|
||||||
|
start_keyframe_animation(&color_animation);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (initial_update || prev_layer_text != state->layer_text) {
|
||||||
|
start_keyframe_animation(&lcd_layer_display);
|
||||||
|
}
|
||||||
|
// You can also stop existing animations, and start your custom ones here
|
||||||
|
// remember that you should normally have only one animation for the LCD
|
||||||
|
// and one for the background. But you can also combine them if you want.
|
||||||
|
}
|
||||||
|
|
||||||
|
void user_visualizer_suspend(visualizer_state_t* state) {
|
||||||
|
state->layer_text = "Suspending...";
|
||||||
|
uint8_t hue = LCD_HUE(state->current_lcd_color);
|
||||||
|
uint8_t sat = LCD_SAT(state->current_lcd_color);
|
||||||
|
state->target_lcd_color = LCD_COLOR(hue, sat, 0);
|
||||||
|
start_keyframe_animation(&default_suspend_animation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void user_visualizer_resume(visualizer_state_t* state) {
|
||||||
|
state->current_lcd_color = initial_color;
|
||||||
|
state->target_lcd_color = logo_background_color;
|
||||||
|
initial_update = true;
|
||||||
|
start_keyframe_animation(&default_startup_animation);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* KEYBOARDS_ERGODOX_INFINITY_SIMPLE_VISUALIZER_H_ */
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2016 Fred Sundvik <[email protected]>
|
Copyright 2017 Fred Sundvik
|
||||||
|
|
||||||
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,331 +15,65 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
#include "./simple_visualizer.h"
|
||||||
* Currently we are assuming that both the backlight and LCD are enabled
|
#include "util.h"
|
||||||
* But it's entirely possible to write a custom visualizer that use only
|
#include "layers.h"
|
||||||
* one of them
|
|
||||||
*/
|
|
||||||
#ifndef LCD_BACKLIGHT_ENABLE
|
|
||||||
#error This visualizer needs that LCD backlight is enabled
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LCD_ENABLE
|
// This function should be implemented by the keymap visualizer
|
||||||
#error This visualizer needs that LCD is enabled
|
// Don't change anything else than state->target_lcd_color and state->layer_text as that's the only thing
|
||||||
#endif
|
// that the simple_visualizer assumes that you are updating
|
||||||
|
// Also make sure that the buffer passed to state->layer_text remains valid until the previous animation is
|
||||||
#include "./visualizer.h"
|
// stopped. This can be done by either double buffering it or by using constant strings
|
||||||
#include "visualizer_keyframes.h"
|
static void get_visualizer_layer_and_color(visualizer_state_t* state) {
|
||||||
#include "lcd_keyframes.h"
|
switch(biton32(default_layer_state)) {
|
||||||
#include "lcd_backlight_keyframes.h"
|
case _QWERTY:
|
||||||
#include "system/serial_link.h"
|
state->layer_text = "QWERTY";
|
||||||
#include "default_animations.h"
|
state->target_lcd_color = LCD_COLOR(0, 255, 128);
|
||||||
|
break;
|
||||||
static const uint32_t logo_background_color = LCD_COLOR(0, 0, 255);
|
case _WORKMAN:
|
||||||
static const uint32_t initial_color = LCD_COLOR(84, 255, 255);
|
state->layer_text = "Workman";
|
||||||
|
state->target_lcd_color = LCD_COLOR(80, 255, 128);
|
||||||
static const uint32_t led_emulation_colors[4] = {
|
break;
|
||||||
LCD_COLOR(0, 0, 255),
|
case _DVORAK:
|
||||||
LCD_COLOR(141, 255, 255),
|
state->layer_text = "Dvorak";
|
||||||
LCD_COLOR(18, 255, 255),
|
state->target_lcd_color = LCD_COLOR(194, 255, 128);
|
||||||
LCD_COLOR(194, 255, 255),
|
break;
|
||||||
};
|
case _COLEMAK:
|
||||||
|
state->layer_text = "Colemak";
|
||||||
static uint32_t next_led_target_color = 0;
|
state->target_lcd_color = LCD_COLOR(18, 255, 128);
|
||||||
|
break;
|
||||||
typedef enum {
|
|
||||||
LCD_STATE_INITIAL,
|
|
||||||
LCD_STATE_LAYER_BITMAP,
|
|
||||||
LCD_STATE_BITMAP_AND_LEDS,
|
|
||||||
} lcd_state_t;
|
|
||||||
|
|
||||||
static lcd_state_t lcd_state = LCD_STATE_INITIAL;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t led_on;
|
|
||||||
uint8_t led1;
|
|
||||||
uint8_t led2;
|
|
||||||
uint8_t led3;
|
|
||||||
} visualizer_user_data_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Don't access from visualization function, use the visualizer state instead
|
|
||||||
*/
|
|
||||||
static visualizer_user_data_t user_data_keyboard = {
|
|
||||||
.led_on = 0,
|
|
||||||
.led1 = LED_BRIGHTNESS_HI,
|
|
||||||
.led2 = LED_BRIGHTNESS_HI,
|
|
||||||
.led3 = LED_BRIGHTNESS_HI,
|
|
||||||
};
|
|
||||||
|
|
||||||
_Static_assert(sizeof(visualizer_user_data_t) <= VISUALIZER_USER_DATA_SIZE,
|
|
||||||
"Please increase the VISUALIZER_USER_DATA_SIZE");
|
|
||||||
|
|
||||||
// Feel free to modify the animations below, or even add new ones if needed
|
|
||||||
|
|
||||||
// The color animation animates the LCD color when you change layers
|
|
||||||
static keyframe_animation_t one_led_color = {
|
|
||||||
.num_frames = 1,
|
|
||||||
.loop = false,
|
|
||||||
.frame_lengths = {gfxMillisecondsToTicks(0)},
|
|
||||||
.frame_functions = {lcd_backlight_keyframe_set_color},
|
|
||||||
};
|
|
||||||
|
|
||||||
bool swap_led_target_color(keyframe_animation_t* animation, visualizer_state_t* state) {
|
|
||||||
uint32_t temp = next_led_target_color;
|
|
||||||
next_led_target_color = state->target_lcd_color;
|
|
||||||
state->target_lcd_color = temp;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The color animation animates the LCD color when you change layers
|
|
||||||
static keyframe_animation_t two_led_colors = {
|
|
||||||
.num_frames = 2,
|
|
||||||
.loop = true,
|
|
||||||
.frame_lengths = {gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(0)},
|
|
||||||
.frame_functions = {lcd_backlight_keyframe_set_color, swap_led_target_color},
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The LCD animation alternates between the layer name display and a
|
|
||||||
* bitmap that displays all active layers
|
|
||||||
*/
|
|
||||||
static keyframe_animation_t lcd_bitmap_animation = {
|
|
||||||
.num_frames = 1,
|
|
||||||
.loop = false,
|
|
||||||
.frame_lengths = {gfxMillisecondsToTicks(0)},
|
|
||||||
.frame_functions = {lcd_keyframe_display_layer_bitmap},
|
|
||||||
};
|
|
||||||
|
|
||||||
static keyframe_animation_t lcd_bitmap_leds_animation = {
|
|
||||||
.num_frames = 2,
|
|
||||||
.loop = true,
|
|
||||||
.frame_lengths = {gfxMillisecondsToTicks(2000), gfxMillisecondsToTicks(2000)},
|
|
||||||
.frame_functions = {lcd_keyframe_display_layer_bitmap, lcd_keyframe_display_led_states},
|
|
||||||
};
|
|
||||||
|
|
||||||
void initialize_user_visualizer(visualizer_state_t* state) {
|
|
||||||
/**
|
|
||||||
* The brightness will be dynamically adjustable in the future
|
|
||||||
* But for now, change it here.
|
|
||||||
*/
|
|
||||||
lcd_backlight_brightness(180);
|
|
||||||
state->current_lcd_color = initial_color;
|
|
||||||
state->target_lcd_color = logo_background_color;
|
|
||||||
lcd_state = LCD_STATE_INITIAL;
|
|
||||||
start_keyframe_animation(&default_startup_animation);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool is_led_on(visualizer_user_data_t* user_data, uint8_t num) {
|
|
||||||
return user_data->led_on & (1u << num);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t get_led_index_master(visualizer_user_data_t* user_data) {
|
|
||||||
for (int i=0; i < 4; i++) {
|
|
||||||
if (is_led_on(user_data, i)) {
|
|
||||||
return i + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t get_led_index_slave(visualizer_user_data_t* user_data) {
|
|
||||||
uint8_t master_index = get_led_index_master(user_data);
|
|
||||||
if (master_index!=0) {
|
|
||||||
for (int i=master_index; i < 4; i++) {
|
|
||||||
if (is_led_on(user_data, i)) {
|
|
||||||
return i + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
switch(biton32(state->status.layer)) {
|
||||||
}
|
case _LOWER:
|
||||||
|
state->layer_text = "Lower";
|
||||||
static uint8_t get_secondary_led_index(visualizer_user_data_t* user_data) {
|
state->target_lcd_color = LCD_COLOR(141, 255, 255);
|
||||||
if (
|
break;
|
||||||
is_led_on(user_data, 0) &&
|
case _RAISE:
|
||||||
is_led_on(user_data, 1) &&
|
state->layer_text = "Raise";
|
||||||
is_led_on(user_data, 2)
|
state->target_lcd_color = LCD_COLOR(18, 255, 255);
|
||||||
) {
|
break;
|
||||||
return 3;
|
case _ADJUST:
|
||||||
}
|
state->layer_text = "Adjust";
|
||||||
return 0;
|
state->target_lcd_color = LCD_COLOR(194, 255, 255);
|
||||||
}
|
break;
|
||||||
|
case _NUM:
|
||||||
static uint8_t get_brightness(visualizer_user_data_t* user_data, uint8_t index) {
|
state->layer_text = "Numpad";
|
||||||
switch (index) {
|
state->target_lcd_color = LCD_COLOR(80, 255, 255);
|
||||||
case 1:
|
break;
|
||||||
return user_data->led1;
|
case _MOUSE:
|
||||||
case 2:
|
state->layer_text = "Mouse";
|
||||||
return user_data->led2;
|
state->target_lcd_color = LCD_COLOR(300, 255, 255);
|
||||||
case 3:
|
break;
|
||||||
return user_data->led3;
|
case _GAME:
|
||||||
}
|
state->layer_text = "Game";
|
||||||
return 0;
|
state->target_lcd_color = LCD_COLOR(300, 255, 255);
|
||||||
}
|
break;
|
||||||
|
case _QWERTY: case _WORKMAN: case _DVORAK: case _COLEMAK:
|
||||||
static void update_emulated_leds(visualizer_state_t* state, visualizer_keyboard_status_t* prev_status) {
|
break;
|
||||||
visualizer_user_data_t* user_data_new = (visualizer_user_data_t*)state->status.user_data;
|
default:
|
||||||
visualizer_user_data_t* user_data_old = (visualizer_user_data_t*)prev_status->user_data;
|
state->layer_text = "NONE";
|
||||||
|
state->target_lcd_color = LCD_COLOR(0, 255, 255);
|
||||||
uint8_t new_index;
|
break;
|
||||||
uint8_t old_index;
|
|
||||||
|
|
||||||
if (true || is_serial_link_master()) {
|
|
||||||
new_index = get_led_index_master(user_data_new);
|
|
||||||
old_index = get_led_index_master(user_data_old);
|
|
||||||
} else {
|
|
||||||
new_index = get_led_index_slave(user_data_new);
|
|
||||||
old_index = get_led_index_slave(user_data_old);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t new_secondary_index = get_secondary_led_index(user_data_new);
|
|
||||||
uint8_t old_secondary_index = get_secondary_led_index(user_data_old);
|
|
||||||
|
|
||||||
uint8_t new_brightness = get_brightness(user_data_new, new_index);
|
|
||||||
uint8_t old_brightness = get_brightness(user_data_old, old_index);
|
|
||||||
|
|
||||||
uint8_t new_secondary_brightness = get_brightness(user_data_new, new_secondary_index);
|
|
||||||
uint8_t old_secondary_brightness = get_brightness(user_data_old, old_secondary_index);
|
|
||||||
|
|
||||||
if (
|
|
||||||
lcd_state == LCD_STATE_INITIAL ||
|
|
||||||
new_index != old_index ||
|
|
||||||
new_secondary_index != old_secondary_index ||
|
|
||||||
new_brightness != old_brightness ||
|
|
||||||
new_secondary_brightness != old_secondary_brightness
|
|
||||||
) {
|
|
||||||
if (new_secondary_index != 0) {
|
|
||||||
state->target_lcd_color = change_lcd_color_intensity(
|
|
||||||
led_emulation_colors[new_index], new_brightness);
|
|
||||||
next_led_target_color = change_lcd_color_intensity(
|
|
||||||
led_emulation_colors[new_secondary_index], new_secondary_brightness);
|
|
||||||
|
|
||||||
stop_keyframe_animation(&one_led_color);
|
|
||||||
start_keyframe_animation(&two_led_colors);
|
|
||||||
} else {
|
|
||||||
state->target_lcd_color = change_lcd_color_intensity(
|
|
||||||
led_emulation_colors[new_index], new_brightness);
|
|
||||||
|
|
||||||
stop_keyframe_animation(&two_led_colors);
|
|
||||||
start_keyframe_animation(&one_led_color);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_lcd_text(visualizer_state_t* state, visualizer_keyboard_status_t* prev_status) {
|
|
||||||
if (state->status.leds) {
|
|
||||||
if (
|
|
||||||
lcd_state != LCD_STATE_BITMAP_AND_LEDS ||
|
|
||||||
state->status.leds != prev_status->leds ||
|
|
||||||
state->status.layer != prev_status->layer ||
|
|
||||||
state->status.default_layer != prev_status->default_layer
|
|
||||||
) {
|
|
||||||
// NOTE: that it doesn't matter if the animation isn't playing, stop will do nothing in that case
|
|
||||||
stop_keyframe_animation(&lcd_bitmap_animation);
|
|
||||||
|
|
||||||
lcd_state = LCD_STATE_BITMAP_AND_LEDS;
|
|
||||||
/**
|
|
||||||
* For information:
|
|
||||||
* The logic in this function makes sure that this doesn't happen, but if you call start on an
|
|
||||||
* animation that is already playing it will be restarted.
|
|
||||||
*/
|
|
||||||
start_keyframe_animation(&lcd_bitmap_leds_animation);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (
|
|
||||||
lcd_state != LCD_STATE_LAYER_BITMAP ||
|
|
||||||
state->status.layer != prev_status->layer ||
|
|
||||||
state->status.default_layer != prev_status->default_layer
|
|
||||||
) {
|
|
||||||
stop_keyframe_animation(&lcd_bitmap_leds_animation);
|
|
||||||
|
|
||||||
lcd_state = LCD_STATE_LAYER_BITMAP;
|
|
||||||
start_keyframe_animation(&lcd_bitmap_animation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void update_user_visualizer_state(visualizer_state_t* state, visualizer_keyboard_status_t* prev_status) {
|
|
||||||
/**
|
|
||||||
* Check the status here to start and stop animations
|
|
||||||
* You might have to save some state, like the current animation here so that you can start the right
|
|
||||||
* This function is called every time the status changes
|
|
||||||
*
|
|
||||||
* NOTE that this is called from the visualizer thread, so don't access anything else outside the status
|
|
||||||
* This is also important because the slave won't have access to the active layer for example outside the
|
|
||||||
* status.
|
|
||||||
*/
|
|
||||||
|
|
||||||
update_emulated_leds(state, prev_status);
|
|
||||||
update_lcd_text(state, prev_status);
|
|
||||||
}
|
|
||||||
|
|
||||||
void user_visualizer_suspend(visualizer_state_t* state) {
|
|
||||||
state->layer_text = "Suspending...";
|
|
||||||
uint8_t hue = LCD_HUE(state->current_lcd_color);
|
|
||||||
uint8_t sat = LCD_SAT(state->current_lcd_color);
|
|
||||||
state->target_lcd_color = LCD_COLOR(hue, sat, 0);
|
|
||||||
start_keyframe_animation(&default_suspend_animation);
|
|
||||||
}
|
|
||||||
|
|
||||||
void user_visualizer_resume(visualizer_state_t* state) {
|
|
||||||
state->current_lcd_color = initial_color;
|
|
||||||
state->target_lcd_color = logo_background_color;
|
|
||||||
lcd_state = LCD_STATE_INITIAL;
|
|
||||||
start_keyframe_animation(&default_startup_animation);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_board_led_on(void){
|
|
||||||
// No board led support
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_lower_on(void){
|
|
||||||
user_data_keyboard.led_on |= (1u << 0);
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_raise_on(void){
|
|
||||||
user_data_keyboard.led_on |= (1u << 1);
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_adjust_on(void){
|
|
||||||
user_data_keyboard.led_on |= (1u << 2);
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_board_led_off(void){
|
|
||||||
// No board led support
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_lower_off(void){
|
|
||||||
user_data_keyboard.led_on &= ~(1u << 0);
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_raise_off(void){
|
|
||||||
user_data_keyboard.led_on &= ~(1u << 1);
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_adjust_off(void){
|
|
||||||
user_data_keyboard.led_on &= ~(1u << 2);
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_lower_set(uint8_t n) {
|
|
||||||
user_data_keyboard.led1 = n;
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_raise_set(uint8_t n) {
|
|
||||||
user_data_keyboard.led2 = n;
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ergodox_led_adjust_set(uint8_t n) {
|
|
||||||
user_data_keyboard.led3 = n;
|
|
||||||
visualizer_set_user_data(&user_data_keyboard);
|
|
||||||
}
|
|
||||||
@@ -14,6 +14,7 @@ enum ergodox_layers {
|
|||||||
_PLOVER,
|
_PLOVER,
|
||||||
// Intermediate layers for SuperDuper (Combo keys does not work on Infinity yet)
|
// Intermediate layers for SuperDuper (Combo keys does not work on Infinity yet)
|
||||||
_SUPERDUPER,
|
_SUPERDUPER,
|
||||||
|
_DEV,
|
||||||
_MOUSE,
|
_MOUSE,
|
||||||
_ADJUST,
|
_ADJUST,
|
||||||
_MDIA,
|
_MDIA,
|
||||||
@@ -28,6 +29,7 @@ enum ergodox_keycodes {
|
|||||||
RAISE,
|
RAISE,
|
||||||
PLOVER,
|
PLOVER,
|
||||||
SUPERDUPER,
|
SUPERDUPER,
|
||||||
|
DEV,
|
||||||
MOUSE,
|
MOUSE,
|
||||||
BACKLIT,
|
BACKLIT,
|
||||||
EXT_PLV,
|
EXT_PLV,
|
||||||
@@ -60,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | Hp/Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
* | Hp/Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||||
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
* | Sft/( | Z/Mo | X | C | V | B | | | | N | M | , | . | SD-/ | Sft/) |
|
* | Sft/( | Z/Dv | X | C | V | B | | | | N | M | , | . | SD-/ | Sft/) |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* |Rse/[ | Ctrl | Alt | Gui/_| Lwr | | Rse/B| Bksp | Alt | Ctrl | Low/] |
|
* |Rse/[ | Ctrl | Alt | Gui/_| Lwr | | Rse/B| Bksp | Alt | Ctrl | Low/] |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
@@ -77,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LT(_SYMB, KC_NO),
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LT(_SYMB, KC_NO),
|
||||||
HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
SFT_PO, LT(_DEV, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
|
LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
|
||||||
KC_ENT, KC_LGUI,
|
KC_ENT, KC_LGUI,
|
||||||
KC_HOME,
|
KC_HOME,
|
||||||
@@ -87,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
LT(_SYMB, KC_NO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
LT(_SYMB, KC_NO), 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_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
|
||||||
LT(_RAISE, KC_BSPC), KC_BSPC,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
|
RAISE, KC_BSPC,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
|
||||||
KC_LALT, CTL_T(KC_ESC),
|
KC_LALT, CTL_T(KC_ESC),
|
||||||
KC_PGUP,
|
KC_PGUP,
|
||||||
KC_PGDN,KC_BSPC, KC_ENT
|
KC_PGDN,KC_BSPC, KC_ENT
|
||||||
@@ -101,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | Hp/Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
|
* | Hp/Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
|
||||||
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
* | Sft/( | Z/Mo | X | C | V | B | | | | K | M | , | . | SD-/ | Sft/) |
|
* | Sft/( | Z/Dv | X | C | V | B | | | | K | M | , | . | SD-/ | Sft/) |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* |Rse/[ | Ctrl | Alt | Gui/_| Lwr | | Rse/B| Bksp | Alt | Ctrl | Low/] |
|
* |Rse/[ | Ctrl | Alt | Gui/_| Lwr | | Rse/B| Bksp | Alt | Ctrl | Low/] |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
@@ -118,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO),
|
||||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, LT(_SYMB, KC_NO),
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, LT(_SYMB, KC_NO),
|
||||||
HPR_ESC, KC_A, KC_R, KC_S, KC_T, KC_D,
|
HPR_ESC, KC_A, KC_R, KC_S, KC_T, KC_D,
|
||||||
SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
SFT_PO, LT(_DEV, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
|
LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER,
|
||||||
KC_ENT, KC_LGUI,
|
KC_ENT, KC_LGUI,
|
||||||
KC_HOME,
|
KC_HOME,
|
||||||
@@ -128,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
LT(_SYMB, KC_NO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
|
LT(_SYMB, KC_NO), 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_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||||
MEH_T(KC_NO),KC_K, KC_M, KC_COMM,KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
|
MEH_T(KC_NO),KC_K, KC_M, KC_COMM,KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
|
||||||
LT(_RAISE, KC_BSPC), KC_BSPC,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
|
RAISE, KC_BSPC,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
|
||||||
KC_LALT, CTL_T(KC_ESC),
|
KC_LALT, CTL_T(KC_ESC),
|
||||||
KC_PGUP,
|
KC_PGUP,
|
||||||
KC_PGDN,KC_BSPC, KC_ENT
|
KC_PGDN,KC_BSPC, KC_ENT
|
||||||
@@ -149,7 +151,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
LT(_SYMB, KC_NO), CM_Y, CM_U, CM_I, CM_O, CM_P, KC_BSLS,
|
LT(_SYMB, KC_NO), CM_Y, CM_U, CM_I, CM_O, CM_P, KC_BSLS,
|
||||||
CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT,
|
CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT,
|
||||||
MEH_T(KC_NO),CM_N, CM_M, CM_COMM,CM_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
|
MEH_T(KC_NO),CM_N, CM_M, CM_COMM,CM_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_PC,
|
||||||
LT(_RAISE, KC_BSPC), KC_BSPC,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
|
RAISE, KC_BSPC,KC_RALT,KC_RCTL, LT(_LOWER, KC_RBRC),
|
||||||
KC_LALT, CTL_T(KC_ESC),
|
KC_LALT, CTL_T(KC_ESC),
|
||||||
KC_PGUP,
|
KC_PGUP,
|
||||||
KC_PGDN,KC_BSPC, KC_ENT
|
KC_PGDN,KC_BSPC, KC_ENT
|
||||||
@@ -319,6 +321,48 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______,_______, KC_LSFT
|
_______,_______, KC_LSFT
|
||||||
),
|
),
|
||||||
|
|
||||||
|
/* Dev Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | - | + | ( | ) | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | |------| |------| _ | [ | ] | { | } | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | = | | | < | > | ? | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
[_DEV] = LAYOUT_ergodox(
|
||||||
|
// left hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______,
|
||||||
|
_______,_______,_______,
|
||||||
|
// right hand
|
||||||
|
_______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, KC_MINS, S(KC_EQL), S(KC_9), S(KC_0), _______,
|
||||||
|
S(KC_MINS), KC_LBRC, KC_RBRC, S(KC_LBRC), S(KC_RBRC), _______,
|
||||||
|
_______, KC_EQL, S(KC_BSLASH), S(KC_COMM), S(KC_DOT), S(KC_SLSH), _______,
|
||||||
|
_______, _______, _______, _______, _______,
|
||||||
|
_______, _______,
|
||||||
|
_______,
|
||||||
|
_______,_______, _______
|
||||||
|
),
|
||||||
|
|
||||||
/* Mouse
|
/* Mouse
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hal.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief PAL setup.
|
||||||
|
* @details Digital I/O ports static configuration as defined in @p board.h.
|
||||||
|
* This variable is used by the HAL when initializing the PAL driver.
|
||||||
|
*/
|
||||||
|
#if HAL_USE_PAL || defined(__DOXYGEN__)
|
||||||
|
const PALConfig pal_default_config =
|
||||||
|
{
|
||||||
|
{VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
|
||||||
|
{VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
|
||||||
|
{VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
|
||||||
|
{VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
|
||||||
|
{VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Early initialization code.
|
||||||
|
* This initialization must be performed just after stack setup and before
|
||||||
|
* any other initialization.
|
||||||
|
*/
|
||||||
|
void __early_init(void) {
|
||||||
|
|
||||||
|
stm32_clock_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Board-specific initialization code.
|
||||||
|
*/
|
||||||
|
void boardInit(void) {
|
||||||
|
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
|
||||||
|
|
||||||
|
}
|
||||||
Loaded 100 of 290 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user