Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e58ab6d326 | ||
|
|
02781979d6 | ||
|
|
69b484600f | ||
|
|
de79d55187 | ||
|
|
580cb2c1df | ||
|
|
d9eae3ef03 | ||
|
|
05e6cc2655 | ||
|
|
8b572de523 | ||
|
|
18e561b82c | ||
|
|
c785148445 | ||
|
|
b43bdc1c69 | ||
|
|
5a5ecd7dd9 | ||
|
|
60be8d9f24 | ||
|
|
3f85e90126 | ||
|
|
3eefe31a54 | ||
|
|
7be65f2cd0 | ||
|
|
016b4be751 | ||
|
|
db80209e69 | ||
|
|
716924de3e | ||
|
|
d88dca3ca7 |
No files matched your search
+8
-1
@@ -144,7 +144,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
VALID_MATRIX_TYPES := yes IS31FL3731 IS31FL3733 IS31FL3737 WS2812 custom
|
VALID_MATRIX_TYPES := yes IS31FL3731 IS31FL3733 IS31FL3737 IS31FL3741 WS2812 custom
|
||||||
|
|
||||||
LED_MATRIX_ENABLE ?= no
|
LED_MATRIX_ENABLE ?= no
|
||||||
ifneq ($(strip $(LED_MATRIX_ENABLE)), no)
|
ifneq ($(strip $(LED_MATRIX_ENABLE)), no)
|
||||||
@@ -205,6 +205,13 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3737)
|
|||||||
QUANTUM_LIB_SRC += i2c_master.c
|
QUANTUM_LIB_SRC += i2c_master.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3741)
|
||||||
|
OPT_DEFS += -DIS31FL3741 -DSTM32_I2C -DHAL_USE_I2C=TRUE
|
||||||
|
COMMON_VPATH += $(DRIVER_PATH)/issi
|
||||||
|
SRC += is31fl3741.c
|
||||||
|
QUANTUM_LIB_SRC += i2c_master.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(RGB_MATRIX_ENABLE)), WS2812)
|
ifeq ($(strip $(RGB_MATRIX_ENABLE)), WS2812)
|
||||||
OPT_DEFS += -DWS2812
|
OPT_DEFS += -DWS2812
|
||||||
WS2812_DRIVER_REQUIRED := yes
|
WS2812_DRIVER_REQUIRED := yes
|
||||||
|
|||||||
+46
-43
@@ -6,34 +6,34 @@ Macros allow you to send multiple keystrokes when pressing just one key. QMK has
|
|||||||
|
|
||||||
## The New Way: `SEND_STRING()` & `process_record_user`
|
## The New Way: `SEND_STRING()` & `process_record_user`
|
||||||
|
|
||||||
Sometimes you just want a key to type out words or phrases. For the most common situations we've provided `SEND_STRING()`, which will type out your string (i.e. a sequence of characters) for you. All ASCII characters that are easily translated to a keycode are supported (e.g. `\n\t`).
|
Sometimes you want a key to type out words or phrases. For the most common situations, we've provided `SEND_STRING()`, which will type out a string (i.e. a sequence of characters) for you. All ASCII characters that are easily translatable to a keycode are supported (e.g. `qmk 123\n\t`).
|
||||||
|
|
||||||
Here is an example `keymap.c` for a two-key keyboard:
|
Here is an example `keymap.c` for a two-key keyboard:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
QMKBEST = SAFE_RANGE,
|
QMKBEST = SAFE_RANGE,
|
||||||
};
|
};
|
||||||
|
|
||||||
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 QMKBEST:
|
case QMKBEST:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
// when keycode QMKBEST is pressed
|
// when keycode QMKBEST is pressed
|
||||||
SEND_STRING("QMK is the best thing ever!");
|
SEND_STRING("QMK is the best thing ever!");
|
||||||
} else {
|
} else {
|
||||||
// when keycode QMKBEST is released
|
// when keycode QMKBEST is released
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
return true;
|
||||||
return true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
{QMKBEST, KC_ESC}
|
{QMKBEST, KC_ESC},
|
||||||
}
|
// ...
|
||||||
|
},
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -49,42 +49,45 @@ You can do that by adding another keycode and adding another case to the switch
|
|||||||
|
|
||||||
```c
|
```c
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
QMKBEST = SAFE_RANGE,
|
QMKBEST = SAFE_RANGE,
|
||||||
QMKURL,
|
QMKURL,
|
||||||
MY_OTHER_MACRO
|
MY_OTHER_MACRO,
|
||||||
};
|
};
|
||||||
|
|
||||||
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 QMKBEST:
|
case QMKBEST:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
// when keycode QMKBEST is pressed
|
// when keycode QMKBEST is pressed
|
||||||
SEND_STRING("QMK is the best thing ever!");
|
SEND_STRING("QMK is the best thing ever!");
|
||||||
} else {
|
} else {
|
||||||
// when keycode QMKBEST is released
|
// when keycode QMKBEST is released
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QMKURL:
|
case QMKURL:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
// when keycode QMKURL is pressed
|
// when keycode QMKURL is pressed
|
||||||
SEND_STRING("https://qmk.fm/\n");
|
SEND_STRING("https://qmk.fm/\n");
|
||||||
} else {
|
} else {
|
||||||
// when keycode QMKURL is released
|
// when keycode QMKURL is released
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MY_OTHER_MACRO:
|
case MY_OTHER_MACRO:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING(SS_LCTL("ac")); // selects all and copies
|
SEND_STRING(SS_LCTL("ac")); // selects all and copies
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
{MY_CUSTOM_MACRO, MY_OTHER_MACRO}
|
{MY_CUSTOM_MACRO, MY_OTHER_MACRO},
|
||||||
}
|
// ...
|
||||||
|
},
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+94
-71
@@ -2,11 +2,25 @@
|
|||||||
|
|
||||||
Unicode characters can be input straight from your keyboard! There are some limitations, however.
|
Unicode characters can be input straight from your keyboard! There are some limitations, however.
|
||||||
|
|
||||||
QMK has three different methods for enabling Unicode input and defining keycodes:
|
In order to enable Unicode support on your keyboard, you will need to do the following:
|
||||||
|
|
||||||
## Basic Unicode
|
1. Choose one of three supported Unicode implementations: [Basic Unicode](#basic-unicode), [Unicode Map](#unicode-map), [UCIS](#ucis).
|
||||||
|
2. Find which [input mode](#input-modes) is the best match for your operating system and setup.
|
||||||
|
3. [Set](#setting-the-input-mode) the appropriate input mode (or modes) in your configuration.
|
||||||
|
4. Add Unicode keycodes to your keymap.
|
||||||
|
|
||||||
This method supports Unicode code points up to `0x7FFF`. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji.
|
|
||||||
|
## 1. Methods :id=methods
|
||||||
|
|
||||||
|
QMK supports three different methods for enabling Unicode input and adding Unicode characters to your keymap. Each has its pros and cons in terms of flexibility and ease of use. Choose the one that best fits your use case.
|
||||||
|
|
||||||
|
The Basic method should be enough for most users. However, if you need a wider range of supported characters (including emoji, rare symbols etc.), you should use Unicode Map.
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
### 1.1. Basic Unicode :id=basic-unicode
|
||||||
|
|
||||||
|
The easiest to use method, albeit somewhat limited. It stores Unicode characters as keycodes in the keymap itself, so it only supports code points up to `0x7FFF`. This covers characters for most modern languages (including East Asian), as well as symbols, but it doesn't cover emoji.
|
||||||
|
|
||||||
Add the following to your `rules.mk`:
|
Add the following to your `rules.mk`:
|
||||||
|
|
||||||
@@ -14,11 +28,13 @@ Add the following to your `rules.mk`:
|
|||||||
UNICODE_ENABLE = yes
|
UNICODE_ENABLE = yes
|
||||||
```
|
```
|
||||||
|
|
||||||
Then add `UC(c)` keycodes to your keymap, where _c_ is the code point (preferably in hexadecimal, up to 4 digits long). For example: `UC(0x45B)`, `UC(0x30C4)`.
|
Then add `UC(c)` keycodes to your keymap, where _c_ is the code point of the desired character (preferably in hexadecimal, up to 4 digits long). For example, `UC(0x40B)` will output [Ћ](https://unicode-table.com/en/040B/), and `UC(0x30C4)` will output [ツ](https://unicode-table.com/en/30C4).
|
||||||
|
|
||||||
## Unicode Map
|
<br>
|
||||||
|
|
||||||
This method supports all possible code points (up to `0x10FFFF`); however, you need to maintain a separate mapping table in your keymap file, which may contain at most 16384 entries.
|
### 1.2. Unicode Map :id=unicode-map
|
||||||
|
|
||||||
|
In addition to standard character ranges, this method also covers emoji, ancient scripts, rare symbols etc. In fact, all possible code points (up to `0x10FFFF`) are supported. Here, Unicode characters are stored in a separate mapping table. You need to maintain a `unicode_map` array in your keymap file, which may contain at most 16384 entries.
|
||||||
|
|
||||||
Add the following to your `rules.mk`:
|
Add the following to your `rules.mk`:
|
||||||
|
|
||||||
@@ -26,7 +42,7 @@ Add the following to your `rules.mk`:
|
|||||||
UNICODEMAP_ENABLE = yes
|
UNICODEMAP_ENABLE = yes
|
||||||
```
|
```
|
||||||
|
|
||||||
Then add `X(i)` keycodes to your keymap, where _i_ is an array index into the mapping table:
|
Then add `X(i)` keycodes to your keymap, where _i_ is the desired character's index in the mapping table. This can be a numeric value, but it's recommended to keep the indices in an enum and access them by name.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
enum unicode_names {
|
enum unicode_names {
|
||||||
@@ -44,15 +60,17 @@ const uint32_t PROGMEM unicode_map[] = {
|
|||||||
|
|
||||||
Then you can use `X(BANG)`, `X(SNEK)` etc. in your keymap.
|
Then you can use `X(BANG)`, `X(SNEK)` etc. in your keymap.
|
||||||
|
|
||||||
### Lower and Upper Case
|
#### Lower and Upper Case
|
||||||
|
|
||||||
Characters often come in lower and upper case pairs, such as å and Å. To make inputting these characters easier, you can use `XP(i, j)` in your keymap, where _i_ and _j_ are the mapping table indices of the lower and upper case character, respectively. If you're holding down Shift or have Caps Lock turned on when you press the key, the second (upper case) character will be inserted; otherwise, the first (lower case) version will appear.
|
Characters often come in lower and upper case pairs, such as å and Å. To make inputting these characters easier, you can use `XP(i, j)` in your keymap, where _i_ and _j_ are the mapping table indices of the lower and upper case character, respectively. If you're holding down Shift or have Caps Lock turned on when you press the key, the second (upper case) character will be inserted; otherwise, the first (lower case) version will appear.
|
||||||
|
|
||||||
This is most useful when creating a keymap for an international layout with special characters. Instead of having to put the lower and upper case versions of a character on separate keys, you can have them both on the same key by using `XP()`. This helps blend Unicode keys in with regular alphas.
|
This is most useful when creating a keymap for an international layout with special characters. Instead of having to put the lower and upper case versions of a character on separate keys, you can have them both on the same key by using `XP()`. This helps blend Unicode keys in with regular alphas.
|
||||||
|
|
||||||
Due to keycode size constraints, _i_ and _j_ can each only refer to one of the first 128 characters in your `unicode_map`. In other words, 0 ≤ _i_ ≤ 127 and 0 ≤ _j_ ≤ 127. This is enough for most use cases, but if you'd like to customize the index calculation, you can override the [`unicodemap_index()`](https://github.com/qmk/qmk_firmware/blob/71f640d47ee12c862c798e1f56392853c7b1c1a8/quantum/process_keycode/process_unicodemap.c#L40) function. This also allows you to, say, check Ctrl instead of Shift/Caps.
|
Due to keycode size constraints, _i_ and _j_ can each only refer to one of the first 128 characters in your `unicode_map`. In other words, 0 ≤ _i_ ≤ 127 and 0 ≤ _j_ ≤ 127. This is enough for most use cases, but if you'd like to customize the index calculation, you can override the [`unicodemap_index()`](https://github.com/qmk/qmk_firmware/blob/71f640d47ee12c862c798e1f56392853c7b1c1a8/quantum/process_keycode/process_unicodemap.c#L36) function. This also allows you to, say, check Ctrl instead of Shift/Caps.
|
||||||
|
|
||||||
## UCIS
|
<br>
|
||||||
|
|
||||||
|
### 1.3. UCIS :id=ucis
|
||||||
|
|
||||||
This method also supports all possible code points. As with the Unicode Map method, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you have to create a custom keycode or function that invokes this functionality.
|
This method also supports all possible code points. As with the Unicode Map method, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you have to create a custom keycode or function that invokes this functionality.
|
||||||
|
|
||||||
@@ -77,7 +95,7 @@ By default, each table entry may be up to 3 code points long. This number can be
|
|||||||
|
|
||||||
To use UCIS input, call `qk_ucis_start()`. Then, type the mnemonic for the character (such as "rofl") and hit Space, Enter or Esc. QMK should erase the "rofl" text and insert the laughing emoji.
|
To use UCIS input, call `qk_ucis_start()`. Then, type the mnemonic for the character (such as "rofl") and hit Space, Enter or Esc. QMK should erase the "rofl" text and insert the laughing emoji.
|
||||||
|
|
||||||
### Customization
|
#### Customization
|
||||||
|
|
||||||
There are several functions that you can define in your keymap to customize the functionality of this feature.
|
There are several functions that you can define in your keymap to customize the functionality of this feature.
|
||||||
|
|
||||||
@@ -87,7 +105,8 @@ There are several functions that you can define in your keymap to customize the
|
|||||||
|
|
||||||
You can find the default implementations of these functions in [`process_ucis.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c).
|
You can find the default implementations of these functions in [`process_ucis.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c).
|
||||||
|
|
||||||
## Input Modes
|
|
||||||
|
## 2. Input Modes :id=input-modes
|
||||||
|
|
||||||
Unicode input in QMK works by inputting a sequence of characters to the OS, sort of like a macro. Unfortunately, the way this is done differs for each platform. Specifically, each platform requires a different combination of keys to trigger Unicode input. Therefore, a corresponding input mode has to be set in QMK.
|
Unicode input in QMK works by inputting a sequence of characters to the OS, sort of like a macro. Unfortunately, the way this is done differs for each platform. Specifically, each platform requires a different combination of keys to trigger Unicode input. Therefore, a corresponding input mode has to be set in QMK.
|
||||||
|
|
||||||
@@ -96,54 +115,67 @@ The following input modes are available:
|
|||||||
* **`UC_MAC`**: macOS built-in Unicode hex input. Supports code points up to `0x10FFFF` (all possible code points).
|
* **`UC_MAC`**: macOS built-in Unicode hex input. Supports code points up to `0x10FFFF` (all possible code points).
|
||||||
|
|
||||||
To enable, go to _System Preferences > Keyboard > Input Sources_, add _Unicode Hex Input_ to the list (it's under _Other_), then activate it from the input dropdown in the Menu Bar.
|
To enable, go to _System Preferences > Keyboard > Input Sources_, add _Unicode Hex Input_ to the list (it's under _Other_), then activate it from the input dropdown in the Menu Bar.
|
||||||
By default, this mode uses the left Option key (`KC_LALT`) for Unicode input, but this can be changed by defining [`UNICODE_KEY_MAC`](#input-key-configuration) with another keycode.
|
By default, this mode uses the left Option key (`KC_LALT`) for Unicode input, but this can be changed by defining [`UNICODE_KEY_MAC`](#input-key-configuration) with a different keycode.
|
||||||
|
|
||||||
!> Using the _Unicode Hex Input_ input source may disable some Option based shortcuts, such as Option + Left Arrow and Option + Right Arrow.
|
!> Using the _Unicode Hex Input_ input source may disable some Option-based shortcuts, such as Option+Left and Option+Right.
|
||||||
|
|
||||||
!> `UC_OSX` is a deprecated alias of `UC_MAC` that will be removed in a future version of QMK.
|
!> `UC_OSX` is a deprecated alias of `UC_MAC` that will be removed in future versions of QMK. All new keymaps should use `UC_MAC`.
|
||||||
|
|
||||||
* **`UC_LNX`**: Linux built-in IBus Unicode input. Supports code points up to `0x10FFFF` (all possible code points).
|
* **`UC_LNX`**: Linux built-in IBus Unicode input. Supports code points up to `0x10FFFF` (all possible code points).
|
||||||
|
|
||||||
Enabled by default and works almost anywhere on IBus-enabled distros. Without IBus, this mode works under GTK apps, but rarely anywhere else.
|
Enabled by default and works almost anywhere on IBus-enabled distros. Without IBus, this mode works under GTK apps, but rarely anywhere else.
|
||||||
By default, this mode uses Ctrl+Shift+U (`LCTL(LSFT(KC_U))`) to start Unicode input, but this can be changed by defining [`UNICODE_KEY_LNX`](#input-key-configuration) with another keycode. This might be required for IBus versions ≥1.5.15, where Ctrl+Shift+U behavior is consolidated into Ctrl+Shift+E.
|
By default, this mode uses Ctrl+Shift+U (`LCTL(LSFT(KC_U))`) to start Unicode input, but this can be changed by defining [`UNICODE_KEY_LNX`](#input-key-configuration) with a different keycode. This might be required for IBus versions ≥1.5.15, where Ctrl+Shift+U behavior is consolidated into Ctrl+Shift+E.
|
||||||
|
|
||||||
* **`UC_WIN`**: _(not recommended)_ Windows built-in hex numpad Unicode input. Supports code points up to `0xFFFF`.
|
* **`UC_WIN`**: _(not recommended)_ Windows built-in hex numpad Unicode input. Supports code points up to `0xFFFF`.
|
||||||
|
|
||||||
To enable, create a registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad` and set its value to `1`. This can be done from the Command Prompt by running `reg add "HKCU\Control Panel\Input Method" -v EnableHexNumpad -t REG_SZ -d 1` with administrator privileges. Reboot afterwards.
|
To enable, create a registry key under `HKEY_CURRENT_USER\Control Panel\Input Method` of type `REG_SZ` called `EnableHexNumpad` and set its value to `1`. This can be done from the Command Prompt by running `reg add "HKCU\Control Panel\Input Method" -v EnableHexNumpad -t REG_SZ -d 1` with administrator privileges. Reboot afterwards.
|
||||||
This mode is not recommended because of reliability and compatibility issues; use the `UC_WINC` mode instead.
|
This mode is not recommended because of reliability and compatibility issues; use the `UC_WINC` mode instead.
|
||||||
|
|
||||||
* **`UC_BSD`**: _(non implemented)_ Unicode input under BSD. Not implemented at this time. If you're a BSD user and want to help add support for it, please [open an issue on GitHub](https://github.com/qmk/qmk_firmware/issues).
|
* **`UC_BSD`**: _(non implemented)_ Unicode input under BSD. Not implemented at this time. If you're a BSD user and want to help add support for it, please [open an issue on GitHub](https://github.com/qmk/qmk_firmware/issues).
|
||||||
|
|
||||||
* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.9.0, supports code points up to `0x10FFFF` (all possible code points).
|
* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.9.0, supports code points up to `0x10FFFF` (all possible code points).
|
||||||
|
|
||||||
To enable, install the [latest release](https://github.com/samhocevar/wincompose/releases/latest). Once installed, WinCompose will automatically run on startup. Works reliably under all version of Windows supported by the app.
|
To enable, install the [latest release](https://github.com/samhocevar/wincompose/releases/latest). Once installed, WinCompose will automatically run on startup. This mode works reliably under all version of Windows supported by the app.
|
||||||
By default, this mode uses right Alt (`KC_RALT`) as the Compose key, but this can be changed in the WinCompose settings and by defining [`UNICODE_KEY_WINC`](#input-key-configuration) with another keycode.
|
By default, this mode uses right Alt (`KC_RALT`) as the Compose key, but this can be changed in the WinCompose settings and by defining [`UNICODE_KEY_WINC`](#input-key-configuration) with a different keycode.
|
||||||
|
|
||||||
### Switching Input Modes
|
|
||||||
|
|
||||||
There are two ways to set the input mode for Unicode: by keycode or by function. Keep in mind that both methods write to persistent storage (EEPROM), and are loaded each time the keyboard starts. So once you've set it the first time, you don't need to set it again unless you want to change it, or you've reset the EEPROM settings.
|
## 3. Setting the Input Mode :id=setting-the-input-mode
|
||||||
|
|
||||||
You can switch the input mode at any time by using one of the following keycodes. The easiest way is to add the ones you use to your keymap.
|
To set your desired input mode, add the following define to your `config.h`:
|
||||||
|
|
||||||
|Keycode |Alias |Input Mode |Description |
|
|
||||||
|----------------------|---------|------------|--------------------------------------------------------------|
|
|
||||||
|`UNICODE_MODE_FORWARD`|`UC_MOD` |Next in list|[Cycle](#input-mode-cycling) through selected modes |
|
|
||||||
|`UNICODE_MODE_REVERSE`|`UC_RMOD`|Prev in list|[Cycle](#input-mode-cycling) through selected modes in reverse|
|
|
||||||
|`UNICODE_MODE_MAC` |`UC_M_MA`|`UC_MAC` |Switch to macOS input |
|
|
||||||
|`UNICODE_MODE_LNX` |`UC_M_LN`|`UC_LNX` |Switch to Linux input |
|
|
||||||
|`UNICODE_MODE_WIN` |`UC_M_WI`|`UC_WIN` |Switch to Windows input |
|
|
||||||
|`UNICODE_MODE_BSD` |`UC_M_BS`|`UC_BSD` |Switch to BSD input (not implemented) |
|
|
||||||
|`UNICODE_MODE_WINC` |`UC_M_WC`|`UC_WINC` |Switch to Windows input using WinCompose |
|
|
||||||
|
|
||||||
You can also switch the input mode by calling `set_unicode_input_mode(x)` in your code, where _x_ is one of the above input mode constants (e.g. `UC_LNX`). Since the function only needs to be called once, it's recommended that you do it in `eeconfig_init_user()` (or a similar function). For example:
|
|
||||||
|
|
||||||
```c
|
```c
|
||||||
void eeconfig_init_user(void) {
|
#define UNICODE_SELECTED_MODES UC_LNX
|
||||||
set_unicode_input_mode(UC_LNX);
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Audio Feedback
|
This example sets the board's default input mode to `UC_LNX`. You can replace this with `UC_MAC`, `UC_WINC`, or any of the other modes listed [above](#input-modes). The board will automatically use the selected mode on startup, unless you manually switch to another mode (see [below](#keycodes)).
|
||||||
|
|
||||||
|
You can also select multiple input modes, which allows you to easily cycle through them using the `UC_MOD`/`UC_RMOD` keycodes.
|
||||||
|
|
||||||
|
```c
|
||||||
|
#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WINC
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the values are separated by commas. The board will remember the last used input mode and will continue using it on next power-up. You can disable this and force it to always start with the first mode in the list by adding `#define UNICODE_CYCLE_PERSIST false` to your `config.h`.
|
||||||
|
|
||||||
|
#### Keycodes
|
||||||
|
|
||||||
|
You can switch the input mode at any time by using the following keycodes. Adding these to your keymap allows you to quickly switch to a specific input mode, including modes not listed in `UNICODE_SELECTED_MODES`.
|
||||||
|
|
||||||
|
|Keycode |Alias |Input Mode |Description |
|
||||||
|
|----------------------|---------|------------|-----------------------------------------------------------------------------|
|
||||||
|
|`UNICODE_MODE_FORWARD`|`UC_MOD` |Next in list|Cycle through selected modes, reverse direction when Shift is held |
|
||||||
|
|`UNICODE_MODE_REVERSE`|`UC_RMOD`|Prev in list|Cycle through selected modes in reverse, forward direction when Shift is held|
|
||||||
|
|`UNICODE_MODE_MAC` |`UC_M_MA`|`UC_MAC` |Switch to macOS input |
|
||||||
|
|`UNICODE_MODE_LNX` |`UC_M_LN`|`UC_LNX` |Switch to Linux input |
|
||||||
|
|`UNICODE_MODE_WIN` |`UC_M_WI`|`UC_WIN` |Switch to Windows input |
|
||||||
|
|`UNICODE_MODE_BSD` |`UC_M_BS`|`UC_BSD` |Switch to BSD input _(not implemented)_ |
|
||||||
|
|`UNICODE_MODE_WINC` |`UC_M_WC`|`UC_WINC` |Switch to Windows input using WinCompose |
|
||||||
|
|
||||||
|
You can also switch the input mode by calling `set_unicode_input_mode(x)` in your code, where _x_ is one of the above input mode constants (e.g. `UC_LNX`).
|
||||||
|
|
||||||
|
?> Using `UNICODE_SELECTED_MODES` is preferable to calling `set_unicode_input_mode()` in `matrix_init_user()` or similar functions, since it's better integrated into the Unicode system and has the added benefit of avoiding unnecessary writes to EEPROM.
|
||||||
|
|
||||||
|
#### Audio Feedback
|
||||||
|
|
||||||
If you have the [Audio feature](feature_audio.md) enabled on the board, you can set melodies to be played when you press the above keys. That way you can have some audio feedback when switching input modes.
|
If you have the [Audio feature](feature_audio.md) enabled on the board, you can set melodies to be played when you press the above keys. That way you can have some audio feedback when switching input modes.
|
||||||
|
|
||||||
@@ -157,20 +189,21 @@ For instance, you can add these definitions to your `config.h` file:
|
|||||||
#define UNICODE_SONG_WINC UNICODE_WINDOWS
|
#define UNICODE_SONG_WINC UNICODE_WINDOWS
|
||||||
```
|
```
|
||||||
|
|
||||||
### Additional Customization
|
|
||||||
|
## Additional Customization
|
||||||
|
|
||||||
Because Unicode is a large and versatile feature, there are a number of options you can customize to make it work better on your system.
|
Because Unicode is a large and versatile feature, there are a number of options you can customize to make it work better on your system.
|
||||||
|
|
||||||
#### Start and Finish Input Functions
|
### Start and Finish Input Functions
|
||||||
|
|
||||||
The functions for starting and finishing Unicode input on your platform can be overridden locally. Possible uses include customizing input mode behavior if you don't use the default keys, or adding extra visual/audio feedback to Unicode input.
|
The functions for starting and finishing Unicode input on your platform can be overridden locally. Possible uses include customizing input mode behavior if you don't use the default keys, or adding extra visual/audio feedback to Unicode input.
|
||||||
|
|
||||||
* `void unicode_input_start(void)` – This sends the initial sequence that tells your platform to enter Unicode input mode. For example, it presses Ctrl+Shift+U on Linux and holds the Option key on macOS.
|
* `void unicode_input_start(void)` – This sends the initial sequence that tells your platform to enter Unicode input mode. For example, it holds the left Alt key followed by Num+ on Windows, and presses the `UNICODE_KEY_LNX` combination (default: Ctrl+Shift+U) on Linux.
|
||||||
* `void unicode_input_finish(void)` – This is called to exit Unicode input mode, for example by pressing Space or releasing the Option key.
|
* `void unicode_input_finish(void)` – This is called to exit Unicode input mode, for example by pressing Space or releasing the Alt key.
|
||||||
|
|
||||||
You can find the default implementations of these functions in [`process_unicode_common.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode_common.c).
|
You can find the default implementations of these functions in [`process_unicode_common.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode_common.c).
|
||||||
|
|
||||||
#### Input Key Configuration
|
### Input Key Configuration
|
||||||
|
|
||||||
You can customize the keys used to trigger Unicode input for macOS, Linux and WinCompose by adding corresponding defines to your `config.h`. The default values match the platforms' default settings, so you shouldn't need to change this unless Unicode input isn't working, or you want to use a different key (e.g. in order to free up left or right Alt).
|
You can customize the keys used to trigger Unicode input for macOS, Linux and WinCompose by adding corresponding defines to your `config.h`. The default values match the platforms' default settings, so you shouldn't need to change this unless Unicode input isn't working, or you want to use a different key (e.g. in order to free up left or right Alt).
|
||||||
|
|
||||||
@@ -180,54 +213,47 @@ You can customize the keys used to trigger Unicode input for macOS, Linux and Wi
|
|||||||
|`UNICODE_KEY_LNX` |`uint16_t`|`LCTL(LSFT(KC_U))`|`#define UNICODE_KEY_LNX LCTL(LSFT(KC_E))`|
|
|`UNICODE_KEY_LNX` |`uint16_t`|`LCTL(LSFT(KC_U))`|`#define UNICODE_KEY_LNX LCTL(LSFT(KC_E))`|
|
||||||
|`UNICODE_KEY_WINC`|`uint8_t` |`KC_RALT` |`#define UNICODE_KEY_WINC KC_RGUI` |
|
|`UNICODE_KEY_WINC`|`uint8_t` |`KC_RALT` |`#define UNICODE_KEY_WINC KC_RGUI` |
|
||||||
|
|
||||||
#### Input Mode Cycling
|
|
||||||
|
|
||||||
You can choose which input modes are available for cycling through. By default, this is disabled. If you want to enable it, limiting it to just the modes you use makes sense. Note that the values in the list are comma-delimited.
|
## Sending Unicode Strings
|
||||||
|
|
||||||
```c
|
QMK provides several functions that allow you to send Unicode input to the host programmatically:
|
||||||
#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WIN, UC_WINC
|
|
||||||
```
|
|
||||||
|
|
||||||
You can cycle through the selected modes by using the `UC_MOD`/`UC_RMOD` keycodes, or by calling `cycle_unicode_input_mode(offset)` in your code (`offset` is how many modes to move forward by, so +1 corresponds to `UC_MOD`).
|
### `send_unicode_string()`
|
||||||
|
|
||||||
By default, when the keyboard boots, it will initialize the input mode to the last one you used. You can disable this and make it start with the first mode in the list every time by adding the following to your `config.h`:
|
This function is much like `send_string()`, but it allows you to input UTF-8 characters directly. It supports all code points, provided the selected input mode also supports it. Make sure your `keymap.c` file is formatted using UTF-8 encoding.
|
||||||
|
|
||||||
```c
|
|
||||||
#define UNICODE_CYCLE_PERSIST false
|
|
||||||
```
|
|
||||||
|
|
||||||
!> Using `UNICODE_SELECTED_MODES` means you don't have to initially set the input mode in `matrix_init_user()` (or a similar function); the Unicode system will do that for you on startup. This has the added benefit of avoiding unnecessary writes to EEPROM.
|
|
||||||
|
|
||||||
## `send_unicode_string()`
|
|
||||||
|
|
||||||
This function is much like `send_string()` but allows you to input UTF-8 characters directly, and supports all code points (provided the selected input method also supports it). Make sure your `keymap.c` is formatted in UTF-8 encoding.
|
|
||||||
|
|
||||||
```c
|
```c
|
||||||
send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
|
send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
|
||||||
```
|
```
|
||||||
|
|
||||||
## `send_unicode_hex_string()`
|
Example uses include sending Unicode strings when a key is pressed, as described in [Macros](feature_macros.md).
|
||||||
|
|
||||||
Similar to `send_unicode_string()`, but the characters are represented by their code point values in ASCII, separated by spaces. For example, the table flip above would be achieved with:
|
### `send_unicode_hex_string()`
|
||||||
|
|
||||||
|
Similar to `send_unicode_string()`, but the characters are represented by their Unicode code points, written in hexadecimal and separated by spaces. For example, the table flip above would be achieved with:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
|
send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
|
||||||
```
|
```
|
||||||
|
|
||||||
An easy way to convert your Unicode string to this format is by using [this site](https://r12a.github.io/app-conversion/), and taking the result in the "Hex/UTF-32" section.
|
An easy way to convert your Unicode string to this format is to use [this site](https://r12a.github.io/app-conversion/) and take the result in the "Hex/UTF-32" section.
|
||||||
|
|
||||||
|
|
||||||
## Additional Language Support
|
## Additional Language Support
|
||||||
|
|
||||||
In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware.
|
In `quantum/keymap_extras`, you'll see various language files — these work the same way as the ones for alternative layouts such as Colemak or BÉPO. When you include one of these language headers, you gain access to keycodes specific to that language / national layout. Such keycodes are defined by a 2-letter country/language code, followed by an underscore and a 4-letter abbreviation of the character to which the key corresponds. For example, including `keymap_french.h` and using `FR_UGRV` in your keymap will output `ù` when typed on a system with a native French AZERTY layout.
|
||||||
|
|
||||||
|
If the primary system layout you use on your machine is different from US ANSI, using these language-specific keycodes can help your QMK keymaps better match what will actually be output on the screen. However, keep in mind that these keycodes are just aliases for the corresponding default US keycodes under the hood, and that the HID protocol used by keyboards is itself inherently based on US ANSI.
|
||||||
|
|
||||||
|
|
||||||
## International Characters on Windows
|
## International Characters on Windows
|
||||||
|
|
||||||
### AutoHotkey allows Windows users to create custom hotkeys among others.
|
### AutoHotkey
|
||||||
|
|
||||||
The method does not require Unicode support in the keyboard itself but depends instead of [AutoHotkey](https://autohotkey.com) running in the background.
|
The method does not require Unicode support in the keyboard itself but instead depends on [AutoHotkey](https://autohotkey.com) running in the background.
|
||||||
|
|
||||||
First you need to select a modifier combination that is not in use by any of your programs.
|
First you need to select a modifier combination that is not in use by any of your programs.
|
||||||
CtrlAltWin is not used very widely and should therefore be perfect for this.
|
Ctrl+Alt+Win is not used very widely and should therefore be perfect for this.
|
||||||
There is a macro defined for a mod-tab combo `LCAG_T`.
|
There is a macro defined for a mod-tab combo `LCAG_T`.
|
||||||
Add this mod-tab combo to a key on your keyboard, e.g.: `LCAG_T(KC_TAB)`.
|
Add this mod-tab combo to a key on your keyboard, e.g.: `LCAG_T(KC_TAB)`.
|
||||||
This makes the key behave like a tab key if pressed and released immediately but changes it to the modifier if used with another key.
|
This makes the key behave like a tab key if pressed and released immediately but changes it to the modifier if used with another key.
|
||||||
@@ -242,8 +268,5 @@ AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
|
|||||||
|
|
||||||
### US International
|
### US International
|
||||||
|
|
||||||
If you enable the US International layout on the system, it will use punctuation to accent the characters.
|
If you enable the US International layout on the system, it will use punctuation to accent the characters. For instance, typing "\`a" will result in à.
|
||||||
|
|
||||||
For instance, typing "\`a" will result in à.
|
|
||||||
|
|
||||||
You can find details on how to enable this [here](https://support.microsoft.com/en-us/help/17424/windows-change-keyboard-layout).
|
You can find details on how to enable this [here](https://support.microsoft.com/en-us/help/17424/windows-change-keyboard-layout).
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
# デバッグの FAQ
|
# デバッグの FAQ
|
||||||
|
|
||||||
<!---
|
<!---
|
||||||
original document: 376419a4f:docs/faq_debug.md
|
original document: 0.9.10:docs/faq_debug.md
|
||||||
git diff 376419a4f HEAD -- docs/faq_debug.md | cat
|
git diff 0.9.10 HEAD -- docs/faq_debug.md | cat
|
||||||
-->
|
-->
|
||||||
|
|
||||||
このページは、キーボードのトラブルシューティングについての様々な一般的な質問を説明します。
|
このページは、キーボードのトラブルシューティングについての様々な一般的な質問を説明します。
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# バックライト
|
# バックライト
|
||||||
|
|
||||||
<!---
|
<!---
|
||||||
original document: 5d5ff80:docs/feature_backlight.md
|
original document: 0.9.10:docs/feature_backlight.md
|
||||||
git diff 5d5ff80 HEAD -- docs/feature_backlight.md | cat
|
git diff 0.9.10 HEAD -- docs/feature_backlight.md | cat
|
||||||
-->
|
-->
|
||||||
|
|
||||||
多くのキーボードは、キースイッチを貫通して配置されたり、キースイッチの下に配置された個々の LED によって、バックライトキーをサポートします。この機能は通常スイッチごとに単一の色しか使用できないため、[RGB アンダーグロー](ja/feature_rgblight.md)および [RGB マトリックス](ja/feature_rgb_matrix.md)機能のどちらとも異なりますが、キーボードに複数の異なる単一色の LED を取り付けることは当然可能です。
|
多くのキーボードは、キースイッチを貫通して配置されたり、キースイッチの下に配置された個々の LED によって、バックライトキーをサポートします。この機能は通常スイッチごとに単一の色しか使用できないため、[RGB アンダーグロー](ja/feature_rgblight.md)および [RGB マトリックス](ja/feature_rgb_matrix.md)機能のどちらとも異なりますが、キーボードに複数の異なる単一色の LED を取り付けることは当然可能です。
|
||||||
@@ -94,29 +94,29 @@ BACKLIGHT_DRIVER = pwm
|
|||||||
|
|
||||||
ハードウェア PWM は以下の表に従ってサポートされます:
|
ハードウェア PWM は以下の表に従ってサポートされます:
|
||||||
|
|
||||||
| バックライトピン | AT90USB64/128 | ATmega16/32U4 | ATmega16/32U2 | ATmega32A | ATmega328P |
|
| バックライトピン | AT90USB64/128 | ATmega16/32U4 | ATmega16/32U2 | ATmega32A | ATmega328/P |
|
||||||
|-------------|-------------|-------------|-------------|---------|----------|
|
|-------------|-------------|-------------|-------------|---------|----------|
|
||||||
| `B1` | | | | | Timer 1 |
|
| `B1` | | | | | Timer 1 |
|
||||||
| `B2` | | | | | Timer 1 |
|
| `B2` | | | | | Timer 1 |
|
||||||
| `B5` | Timer 1 | Timer 1 | | | |
|
| `B5` | Timer 1 | Timer 1 | | | |
|
||||||
| `B6` | Timer 1 | Timer 1 | | | |
|
| `B6` | Timer 1 | Timer 1 | | | |
|
||||||
| `B7` | Timer 1 | Timer 1 | Timer 1 | | |
|
| `B7` | Timer 1 | Timer 1 | Timer 1 | | |
|
||||||
| `C4` | Timer 3 | | | | |
|
| `C4` | Timer 3 | | | | |
|
||||||
| `C5` | Timer 3 | | Timer 1 | | |
|
| `C5` | Timer 3 | | Timer 1 | | |
|
||||||
| `C6` | Timer 3 | Timer 3 | Timer 1 | | |
|
| `C6` | Timer 3 | Timer 3 | Timer 1 | | |
|
||||||
| `D4` | | | | Timer 1 | |
|
| `D4` | | | | Timer 1 | |
|
||||||
| `D5` | | | | Timer 1 | |
|
| `D5` | | | | Timer 1 | |
|
||||||
|
|
||||||
他の全てのピンはソフトウェア PWM を使います。[オーディオ](ja/feature_audio.md)機能が無効あるいは1つのタイマだけを使っている場合は、ハードウェアタイマによってバックライト PWM を引き起こすことができます:
|
他の全てのピンはソフトウェア PWM を使います。[オーディオ](ja/feature_audio.md)機能が無効あるいは1つのタイマだけを使っている場合は、ハードウェアタイマによってバックライト PWM を引き起こすことができます:
|
||||||
|
|
||||||
| オーディオピン | オーディオタイマ | ソフトウェア PWM タイマ |
|
| オーディオピン | オーディオタイマ | ソフトウェア PWM タイマ |
|
||||||
|---------|-----------|------------------|
|
|---------|-----------|------------------|
|
||||||
| `C4` | Timer 3 | Timer 1 |
|
| `C4` | Timer 3 | Timer 1 |
|
||||||
| `C5` | Timer 3 | Timer 1 |
|
| `C5` | Timer 3 | Timer 1 |
|
||||||
| `C6` | Timer 3 | Timer 1 |
|
| `C6` | Timer 3 | Timer 1 |
|
||||||
| `B5` | Timer 1 | Timer 3 |
|
| `B5` | Timer 1 | Timer 3 |
|
||||||
| `B6` | Timer 1 | Timer 3 |
|
| `B6` | Timer 1 | Timer 3 |
|
||||||
| `B7` | Timer 1 | Timer 3 |
|
| `B7` | Timer 1 | Timer 3 |
|
||||||
|
|
||||||
両方のタイマーがオーディオのために使われている場合、バックライト PWM はハードウェアタイマを使いませんが、代わりにマトリックススキャンの間に引き起こされます。この場合、PWM の計算は十分なタイミングの精度で呼ばれないかもしれないため、バックライトの明滅はサポートされず、バックライトもちらつくかもしれません。
|
両方のタイマーがオーディオのために使われている場合、バックライト PWM はハードウェアタイマを使いませんが、代わりにマトリックススキャンの間に引き起こされます。この場合、PWM の計算は十分なタイミングの精度で呼ばれないかもしれないため、バックライトの明滅はサポートされず、バックライトもちらつくかもしれません。
|
||||||
|
|
||||||
@@ -126,13 +126,13 @@ BACKLIGHT_DRIVER = pwm
|
|||||||
|
|
||||||
| 定義 | デフォルト | 説明 |
|
| 定義 | デフォルト | 説明 |
|
||||||
|---------------------|-------------|--------------------------------------------------------------------------------------------------------------|
|
|---------------------|-------------|--------------------------------------------------------------------------------------------------------------|
|
||||||
| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
||||||
| `BACKLIGHT_PINS` | *定義なし* | 実験的: 詳細は以下を見てください |
|
| `BACKLIGHT_PINS` | *定義なし* | 実験的: 詳細は以下を見てください |
|
||||||
| `BACKLIGHT_LEVELS` | `3` | 輝度のレベルの数 (オフを除いて最大 31) |
|
| `BACKLIGHT_LEVELS` | `3` | 輝度のレベルの数 (オフを除いて最大 31) |
|
||||||
| `BACKLIGHT_CAPS_LOCK` | *定義なし* | バックライトを使って Caps Lock のインジケータを有効にする (専用 LED の無いキーボードのため) |
|
| `BACKLIGHT_CAPS_LOCK` | *定義なし* | バックライトを使って Caps Lock のインジケータを有効にする (専用 LED の無いキーボードのため) |
|
||||||
| `BACKLIGHT_BREATHING` | *定義なし* | サポートされる場合は、バックライトの明滅動作を有効にする |
|
| `BACKLIGHT_BREATHING` | *定義なし* | サポートされる場合は、バックライトの明滅動作を有効にする |
|
||||||
| `BREATHING_PERIOD` | `6` | 各バックライトの "明滅" の長さ(秒) |
|
| `BREATHING_PERIOD` | `6` | 各バックライトの "明滅" の長さ(秒) |
|
||||||
| `BACKLIGHT_ON_STATE` | `1` | バックライトが "オン" の時のバックライトピンの状態 - high の場合は `1`、low の場合は `0` |
|
| `BACKLIGHT_ON_STATE` | `1` | バックライトが "オン" の時のバックライトピンの状態 - high の場合は `1`、low の場合は `0` |
|
||||||
|
|
||||||
### バックライトオン状態
|
### バックライトオン状態
|
||||||
|
|
||||||
@@ -192,10 +192,10 @@ BACKLIGHT_DRIVER = pwm
|
|||||||
|
|
||||||
| 定義 | デフォルト | 説明 |
|
| 定義 | デフォルト | 説明 |
|
||||||
|------------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
|------------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
||||||
| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
||||||
| `BACKLIGHT_PWM_DRIVER` | `PWMD4` | 使用する PWM ドライバ。ピンから PWM タイマへのマッピングについては、ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
| `BACKLIGHT_PWM_DRIVER` | `PWMD4` | 使用する PWM ドライバ。ピンから PWM タイマへのマッピングについては、ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
||||||
| `BACKLIGHT_PWM_CHANNEL` | `3` | 使用する PWM チャンネル。ピンから PWM チャンネルへのマッピングについては、ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
| `BACKLIGHT_PWM_CHANNEL` | `3` | 使用する PWM チャンネル。ピンから PWM チャンネルへのマッピングについては、ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
||||||
| `BACKLIGHT_PAL_MODE` | `2` | 使用するピンの代替機能。ピンの AF マッピングについては ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
| `BACKLIGHT_PAL_MODE` | `2` | 使用するピンの代替機能。ピンの AF マッピングについては ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
||||||
|
|
||||||
## Software PWM Driver :id=software-pwm-driver
|
## Software PWM Driver :id=software-pwm-driver
|
||||||
|
|
||||||
@@ -210,7 +210,7 @@ BACKLIGHT_DRIVER = software
|
|||||||
|
|
||||||
| 定義 | デフォルト | 説明 |
|
| 定義 | デフォルト | 説明 |
|
||||||
|-----------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
|-----------------|-------------|-------------------------------------------------------------------------------------------------------------|
|
||||||
| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
|
||||||
| `BACKLIGHT_PINS` | *定義なし* | 実験的: 詳細は以下を見てください |
|
| `BACKLIGHT_PINS` | *定義なし* | 実験的: 詳細は以下を見てください |
|
||||||
|
|
||||||
### 複数のバックライトピン
|
### 複数のバックライトピン
|
||||||
|
|||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
# 書き込みの手順とブートローダ情報
|
# 書き込みの手順とブートローダ情報
|
||||||
|
|
||||||
<!---
|
<!---
|
||||||
original document: 0.8.62:docs/flashing.md
|
original document: 0.9.10:docs/flashing.md
|
||||||
git diff 0.8.62 HEAD -- docs/flashing.md | cat
|
git diff 0.9.10 HEAD -- docs/flashing.md | cat
|
||||||
-->
|
-->
|
||||||
|
|
||||||
キーボードが使用するブートローダにはかなり多くの種類があり、ほぼ全てが異なる書き込みの方法を使います。幸いなことに、[QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) のようなプロジェクトは、あまり深く考える必要無しに様々なタイプと互換性を持つことを目指していますが、この文章では様々なタイプのブートローダとそれらを書き込むために利用可能な方法について説明します。
|
キーボードが使用するブートローダにはかなり多くの種類があり、ほぼ全てが異なる書き込みの方法を使います。幸いなことに、[QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) のようなプロジェクトは、あまり深く考える必要無しに様々なタイプと互換性を持つことを目指していますが、この文章では様々なタイプのブートローダとそれらを書き込むために利用可能な方法について説明します。
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# Vagrant クイックスタート
|
# Vagrant クイックスタート
|
||||||
|
|
||||||
<!---
|
<!---
|
||||||
original document: 7494490d6:docs/getting_started_vagrant.md
|
original document: 0.9.10:docs/getting_started_vagrant.md
|
||||||
git diff 7494490d6 HEAD -- docs/getting_started_vagrant.md | cat
|
git diff 0.9.10 HEAD -- docs/getting_started_vagrant.md | cat
|
||||||
-->
|
-->
|
||||||
|
|
||||||
このプロジェクトは、プライマリオペレーティングシステムに大きな変更を加えることなくキーボードの新しいファームウェアを非常に簡単に構築することができる `Vagrantfile` を含みます。これは、あなたがプロジェクトをクローンしビルドを実行した時に、ビルドのために Vagrantfile を使っている他のユーザと全く同じ環境を持つことも保証します。これにより、人々はあなたが遭遇した問題の解決をより簡単に行えるようになります。
|
このプロジェクトは、プライマリオペレーティングシステムに大きな変更を加えることなくキーボードの新しいファームウェアを非常に簡単に構築することができる `Vagrantfile` を含みます。これは、あなたがプロジェクトをクローンしビルドを実行した時に、ビルドのために Vagrantfile を使っている他のユーザと全く同じ環境を持つことも保証します。これにより、人々はあなたが遭遇した問題の解決をより簡単に行えるようになります。
|
||||||
|
|||||||
@@ -19,6 +19,15 @@ These LEDs are called "addressable" because instead of using a wire per color, e
|
|||||||
|
|
||||||
## Driver configuration
|
## Driver configuration
|
||||||
|
|
||||||
|
### All drivers
|
||||||
|
|
||||||
|
Different versions of the addressable LEDs have differing requirements for the T<sub>RST</sub> period between frames.
|
||||||
|
The default setting is 280 µs, which should work for most cases, but this can be overridden in your config.h. e.g.:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#define WS2812_TRST_US 80
|
||||||
|
```
|
||||||
|
|
||||||
### Bitbang
|
### Bitbang
|
||||||
Default driver, the absence of configuration assumes this driver. To configure it, add this to your rules.mk:
|
Default driver, the absence of configuration assumes this driver. To configure it, add this to your rules.mk:
|
||||||
|
|
||||||
@@ -99,3 +108,14 @@ While not an exhaustive list, the following table provides the scenarios that ha
|
|||||||
| f401/f411 | :heavy_check_mark: |
|
| f401/f411 | :heavy_check_mark: |
|
||||||
|
|
||||||
*Other supported ChibiOS boards and/or pins may function, it will be highly chip and configuration dependent.*
|
*Other supported ChibiOS boards and/or pins may function, it will be highly chip and configuration dependent.*
|
||||||
|
|
||||||
|
### Push Pull and Open Drain Configuration
|
||||||
|
The default configuration is a push pull on the defined pin.
|
||||||
|
This can be configured for bitbang, PWM and SPI.
|
||||||
|
|
||||||
|
Note: This only applies to STM32 boards.
|
||||||
|
|
||||||
|
To configure the `RGB_DI_PIN` to open drain configuration add this to your config.h file:
|
||||||
|
```c
|
||||||
|
#define WS2812_EXTERNAL_PULLUP
|
||||||
|
```
|
||||||
+5
-15
@@ -36,25 +36,15 @@
|
|||||||
|
|
||||||
static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t masklo, uint8_t maskhi);
|
static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t masklo, uint8_t maskhi);
|
||||||
|
|
||||||
// Setleds for standard RGB
|
void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds) {
|
||||||
void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds) {
|
DDRx_ADDRESS(RGB_DI_PIN) |= pinmask(RGB_DI_PIN);
|
||||||
// wrap up usage of RGB_DI_PIN
|
|
||||||
ws2812_setleds_pin(ledarray, number_of_leds, RGB_DI_PIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t number_of_leds, uint8_t pin) {
|
uint8_t masklo = ~(pinmask(RGB_DI_PIN)) & PORTx_ADDRESS(RGB_DI_PIN);
|
||||||
DDRx_ADDRESS(RGB_DI_PIN) |= pinmask(pin);
|
uint8_t maskhi = pinmask(RGB_DI_PIN) | PORTx_ADDRESS(RGB_DI_PIN);
|
||||||
|
|
||||||
uint8_t masklo = ~(pinmask(pin)) & PORTx_ADDRESS(pin);
|
|
||||||
uint8_t maskhi = pinmask(pin) | PORTx_ADDRESS(pin);
|
|
||||||
|
|
||||||
ws2812_sendarray_mask((uint8_t *)ledarray, number_of_leds * sizeof(LED_TYPE), masklo, maskhi);
|
ws2812_sendarray_mask((uint8_t *)ledarray, number_of_leds * sizeof(LED_TYPE), masklo, maskhi);
|
||||||
|
|
||||||
#ifdef RGBW
|
_delay_us(WS2812_TRST_US);
|
||||||
_delay_us(80);
|
|
||||||
#else
|
|
||||||
_delay_us(50);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -14,6 +14,14 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Push Pull or Open Drain Configuration
|
||||||
|
// Default Push Pull
|
||||||
|
#ifndef WS2812_EXTERNAL_PULLUP
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_OUTPUT_PUSHPULL
|
||||||
|
#else
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_OUTPUT_OPENDRAIN
|
||||||
|
#endif
|
||||||
|
|
||||||
#define NUMBER_NOPS 6
|
#define NUMBER_NOPS 6
|
||||||
#define CYCLES_PER_SEC (STM32_SYSCLK / NUMBER_NOPS * NOP_FUDGE)
|
#define CYCLES_PER_SEC (STM32_SYSCLK / NUMBER_NOPS * NOP_FUDGE)
|
||||||
#define NS_PER_SEC (1000000000L) // Note that this has to be SIGNED since we want to be able to check for negative values of derivatives
|
#define NS_PER_SEC (1000000000L) // Note that this has to be SIGNED since we want to be able to check for negative values of derivatives
|
||||||
@@ -43,7 +51,7 @@
|
|||||||
|
|
||||||
// The reset gap can be 6000 ns, but depending on the LED strip it may have to be increased
|
// The reset gap can be 6000 ns, but depending on the LED strip it may have to be increased
|
||||||
// to values like 600000 ns. If it is too small, the pixels will show nothing most of the time.
|
// to values like 600000 ns. If it is too small, the pixels will show nothing most of the time.
|
||||||
#define RES 10000 // Width of the low gap between bits to cause a frame to latch
|
#define RES (1000 * WS2812_TRST_US) // Width of the low gap between bits to cause a frame to latch
|
||||||
|
|
||||||
void sendByte(uint8_t byte) {
|
void sendByte(uint8_t byte) {
|
||||||
// WS2812 protocol wants most significant bits first
|
// WS2812 protocol wants most significant bits first
|
||||||
@@ -66,7 +74,7 @@ void sendByte(uint8_t byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ws2812_init(void) { setPinOutput(RGB_DI_PIN); }
|
void ws2812_init(void) { palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE); }
|
||||||
|
|
||||||
// Setleds for standard RGB
|
// Setleds for standard RGB
|
||||||
void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
|
void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "quantum/color.h"
|
|
||||||
|
|
||||||
/* User Interface
|
|
||||||
*
|
|
||||||
* Input:
|
|
||||||
* ledarray: An array of GRB data describing the LED colors
|
|
||||||
* number_of_leds: The number of LEDs to write
|
|
||||||
*
|
|
||||||
* The functions will perform the following actions:
|
|
||||||
* - Set the data-out pin as output
|
|
||||||
* - Send out the LED data
|
|
||||||
* - Wait 50us to reset the LEDs
|
|
||||||
*/
|
|
||||||
void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
|
|
||||||
@@ -24,6 +24,22 @@
|
|||||||
# define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP
|
# define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Push Pull or Open Drain Configuration
|
||||||
|
// Default Push Pull
|
||||||
|
#ifndef WS2812_EXTERNAL_PULLUP
|
||||||
|
# if defined(USE_GPIOV1)
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL
|
||||||
|
# else
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_PWM_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# if defined(USE_GPIOV1)
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
|
||||||
|
# else
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_PWM_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef WS2812_PWM_TARGET_PERIOD
|
#ifndef WS2812_PWM_TARGET_PERIOD
|
||||||
//# define WS2812_PWM_TARGET_PERIOD 800000 // Original code is 800k...?
|
//# define WS2812_PWM_TARGET_PERIOD 800000 // Original code is 800k...?
|
||||||
# define WS2812_PWM_TARGET_PERIOD 80000 // TODO: work out why 10x less on f303/f4x1
|
# define WS2812_PWM_TARGET_PERIOD 80000 // TODO: work out why 10x less on f303/f4x1
|
||||||
@@ -37,11 +53,10 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Number of bit-periods to hold the data line low at the end of a frame
|
* @brief Number of bit-periods to hold the data line low at the end of a frame
|
||||||
*
|
*
|
||||||
* The reset period for each frame must be at least 50 uS; so we add in 50 bit-times
|
* The reset period for each frame is defined in WS2812_TRST_US.
|
||||||
* of zeroes at the end. (50 bits)*(1.25 uS/bit) = 62.5 uS, which gives us some
|
* Calculate the number of zeroes to add at the end assuming 1.25 uS/bit:
|
||||||
* slack in the timing requirements
|
|
||||||
*/
|
*/
|
||||||
#define WS2812_RESET_BIT_N (50)
|
#define WS2812_RESET_BIT_N (1000 * WS2812_TRST_US / 1250)
|
||||||
#define WS2812_COLOR_BIT_N (RGBLED_NUM * 24) /**< Number of data bits */
|
#define WS2812_COLOR_BIT_N (RGBLED_NUM * 24) /**< Number of data bits */
|
||||||
#define WS2812_BIT_N (WS2812_COLOR_BIT_N + WS2812_RESET_BIT_N) /**< Total number of bits in a frame */
|
#define WS2812_BIT_N (WS2812_COLOR_BIT_N + WS2812_RESET_BIT_N) /**< Total number of bits in a frame */
|
||||||
|
|
||||||
@@ -142,11 +157,7 @@ void ws2812_init(void) {
|
|||||||
for (i = 0; i < WS2812_COLOR_BIT_N; i++) ws2812_frame_buffer[i] = WS2812_DUTYCYCLE_0; // All color bits are zero duty cycle
|
for (i = 0; i < WS2812_COLOR_BIT_N; i++) ws2812_frame_buffer[i] = WS2812_DUTYCYCLE_0; // All color bits are zero duty cycle
|
||||||
for (i = 0; i < WS2812_RESET_BIT_N; i++) ws2812_frame_buffer[i + WS2812_COLOR_BIT_N] = 0; // All reset bits are zero
|
for (i = 0; i < WS2812_RESET_BIT_N; i++) ws2812_frame_buffer[i + WS2812_COLOR_BIT_N] = 0; // All reset bits are zero
|
||||||
|
|
||||||
#if defined(USE_GPIOV1)
|
palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE);
|
||||||
palSetLineMode(RGB_DI_PIN, PAL_MODE_STM32_ALTERNATE_PUSHPULL);
|
|
||||||
#else
|
|
||||||
palSetLineMode(RGB_DI_PIN, PAL_MODE_ALTERNATE(WS2812_PWM_PAL_MODE) | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// PWM Configuration
|
// PWM Configuration
|
||||||
//#pragma GCC diagnostic ignored "-Woverride-init" // Turn off override-init warning for this struct. We use the overriding ability to set a "default" channel config
|
//#pragma GCC diagnostic ignored "-Woverride-init" // Turn off override-init warning for this struct. We use the overriding ability to set a "default" channel config
|
||||||
|
|||||||
@@ -16,11 +16,27 @@
|
|||||||
# define WS2812_SPI_MOSI_PAL_MODE 5
|
# define WS2812_SPI_MOSI_PAL_MODE 5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Push Pull or Open Drain Configuration
|
||||||
|
// Default Push Pull
|
||||||
|
#ifndef WS2812_EXTERNAL_PULLUP
|
||||||
|
# if defined(USE_GPIOV1)
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL
|
||||||
|
# else
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# if defined(USE_GPIOV1)
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
|
||||||
|
# else
|
||||||
|
# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#define BYTES_FOR_LED_BYTE 4
|
#define BYTES_FOR_LED_BYTE 4
|
||||||
#define NB_COLORS 3
|
#define NB_COLORS 3
|
||||||
#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * NB_COLORS)
|
#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * NB_COLORS)
|
||||||
#define DATA_SIZE (BYTES_FOR_LED * RGBLED_NUM)
|
#define DATA_SIZE (BYTES_FOR_LED * RGBLED_NUM)
|
||||||
#define RESET_SIZE 200
|
#define RESET_SIZE (1000 * WS2812_TRST_US / (2 * 1250))
|
||||||
#define PREAMBLE_SIZE 4
|
#define PREAMBLE_SIZE 4
|
||||||
|
|
||||||
static uint8_t txbuf[PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE] = {0};
|
static uint8_t txbuf[PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE] = {0};
|
||||||
@@ -52,11 +68,7 @@ static void set_led_color_rgb(LED_TYPE color, int pos) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ws2812_init(void) {
|
void ws2812_init(void) {
|
||||||
#if defined(USE_GPIOV1)
|
palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE);
|
||||||
palSetLineMode(RGB_DI_PIN, PAL_MODE_STM32_ALTERNATE_PUSHPULL);
|
|
||||||
#else
|
|
||||||
palSetLineMode(RGB_DI_PIN, PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// TODO: more dynamic baudrate
|
// TODO: more dynamic baudrate
|
||||||
static const SPIConfig spicfg = {
|
static const SPIConfig spicfg = {
|
||||||
|
|||||||
@@ -0,0 +1,289 @@
|
|||||||
|
/* Copyright 2017 Jason Williams
|
||||||
|
* Copyright 2018 Jack Humbert
|
||||||
|
* Copyright 2018 Yiancar
|
||||||
|
* Copyright 2020 MelGeek
|
||||||
|
*
|
||||||
|
* 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 "wait.h"
|
||||||
|
|
||||||
|
#include "is31fl3741.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include "i2c_master.h"
|
||||||
|
#include "progmem.h"
|
||||||
|
|
||||||
|
|
||||||
|
// This is a 7-bit address, that gets left-shifted and bit 0
|
||||||
|
// set to 0 for write, 1 for read (as per I2C protocol)
|
||||||
|
// The address will vary depending on your wiring:
|
||||||
|
// 00 <-> GND
|
||||||
|
// 01 <-> SCL
|
||||||
|
// 10 <-> SDA
|
||||||
|
// 11 <-> VCC
|
||||||
|
// ADDR1 represents A1:A0 of the 7-bit address.
|
||||||
|
// ADDR2 represents A3:A2 of the 7-bit address.
|
||||||
|
// The result is: 0b101(ADDR2)(ADDR1)
|
||||||
|
#define ISSI_ADDR_DEFAULT 0x60
|
||||||
|
|
||||||
|
#define ISSI_COMMANDREGISTER 0xFD
|
||||||
|
#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
|
||||||
|
#define ISSI_INTERRUPTMASKREGISTER 0xF0
|
||||||
|
#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
|
||||||
|
#define ISSI_IDREGISTER 0xFC
|
||||||
|
|
||||||
|
#define ISSI_PAGE_PWM0 0x00 // PG0
|
||||||
|
#define ISSI_PAGE_PWM1 0x01 // PG1
|
||||||
|
#define ISSI_PAGE_SCALING_0 0x02 // PG2
|
||||||
|
#define ISSI_PAGE_SCALING_1 0x03 // PG3
|
||||||
|
#define ISSI_PAGE_FUNCTION 0x04 // PG4
|
||||||
|
|
||||||
|
#define ISSI_REG_CONFIGURATION 0x00 // PG4
|
||||||
|
#define ISSI_REG_GLOBALCURRENT 0x01 // PG4
|
||||||
|
#define ISSI_REG_PULLDOWNUP 0x02 // PG4
|
||||||
|
#define ISSI_REG_RESET 0x3F // PG4
|
||||||
|
|
||||||
|
#ifndef ISSI_TIMEOUT
|
||||||
|
# define ISSI_TIMEOUT 100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ISSI_PERSISTENCE
|
||||||
|
# define ISSI_PERSISTENCE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ISSI_MAX_LEDS 351
|
||||||
|
|
||||||
|
// Transfer buffer for TWITransmitData()
|
||||||
|
uint8_t g_twi_transfer_buffer[20] = {0xFF};
|
||||||
|
|
||||||
|
// These buffers match the IS31FL3741 and IS31FL3741A PWM registers.
|
||||||
|
// The scaling buffers match the PG2 and PG3 LED On/Off registers.
|
||||||
|
// Storing them like this is optimal for I2C transfers to the registers.
|
||||||
|
// We could optimize this and take out the unused registers from these
|
||||||
|
// buffers and the transfers in IS31FL3741_write_pwm_buffer() but it's
|
||||||
|
// probably not worth the extra complexity.
|
||||||
|
uint8_t g_pwm_buffer[DRIVER_COUNT][ISSI_MAX_LEDS];
|
||||||
|
bool g_pwm_buffer_update_required = false;
|
||||||
|
bool g_scaling_registers_update_required[DRIVER_COUNT] = {false};
|
||||||
|
|
||||||
|
uint8_t g_scaling_registers[DRIVER_COUNT][ISSI_MAX_LEDS];
|
||||||
|
|
||||||
|
uint32_t IS31FL3741_get_cw_sw_position(uint8_t cs, uint8_t sw) {
|
||||||
|
uint32_t pos = 0;
|
||||||
|
|
||||||
|
if (cs < 31) {
|
||||||
|
if (sw < 7) {
|
||||||
|
pos = (sw - 1) * 30 + (cs - 1);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
pos = 0xB4 + (sw - 7) * 30 + (cs - 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pos = 0xB4 + 0x5A + (sw - 1) * 9 + (cs - 31);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
|
||||||
|
g_twi_transfer_buffer[0] = reg;
|
||||||
|
g_twi_transfer_buffer[1] = data;
|
||||||
|
|
||||||
|
#if ISSI_PERSISTENCE > 0
|
||||||
|
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
|
||||||
|
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
|
||||||
|
// unlock the command register and select PG2
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM0);
|
||||||
|
|
||||||
|
for (int i = 0; i < 342; i += 18) {
|
||||||
|
g_twi_transfer_buffer[0] = i % 180;
|
||||||
|
|
||||||
|
if (i == 180) {
|
||||||
|
// unlock the command register and select PG2
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM1);
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 18);
|
||||||
|
|
||||||
|
#if ISSI_PERSISTENCE > 0
|
||||||
|
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
|
||||||
|
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, ISSI_TIMEOUT) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, ISSI_TIMEOUT) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// transfer the left cause the total number is 351
|
||||||
|
g_twi_transfer_buffer[0] = 162;
|
||||||
|
memcpy(g_twi_transfer_buffer + 1, pwm_buffer + 342, 9);
|
||||||
|
|
||||||
|
#if ISSI_PERSISTENCE > 0
|
||||||
|
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
|
||||||
|
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, ISSI_TIMEOUT) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, ISSI_TIMEOUT) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_init(uint8_t addr) {
|
||||||
|
// In order to avoid the LEDs being driven with garbage data
|
||||||
|
// in the LED driver's PWM registers, shutdown is enabled last.
|
||||||
|
// Set up the mode and other settings, clear the PWM registers,
|
||||||
|
// then disable software shutdown.
|
||||||
|
// Unlock the command register.
|
||||||
|
|
||||||
|
// Unlock the command register.
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
||||||
|
|
||||||
|
// Select PG4
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
|
||||||
|
|
||||||
|
// Set to Normal operation
|
||||||
|
IS31FL3741_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
|
||||||
|
|
||||||
|
// Set Golbal Current Control Register
|
||||||
|
IS31FL3741_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
||||||
|
// Set Pull up & Down for SWx CSy
|
||||||
|
IS31FL3741_write_register(addr, ISSI_REG_PULLDOWNUP, 0x77);
|
||||||
|
|
||||||
|
// IS31FL3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF);
|
||||||
|
|
||||||
|
// Wait 10ms to ensure the device has woken up.
|
||||||
|
wait_ms(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
|
||||||
|
if (index >= 0 && index < DRIVER_LED_TOTAL) {
|
||||||
|
is31_led led = g_is31_leds[index];
|
||||||
|
uint32_t rp = 0, gp = 0, bp = 0;
|
||||||
|
|
||||||
|
rp = IS31FL3741_get_cw_sw_position(led.rcs, led.rsw);
|
||||||
|
gp = IS31FL3741_get_cw_sw_position(led.gcs, led.gsw);
|
||||||
|
bp = IS31FL3741_get_cw_sw_position(led.bcs, led.bsw);
|
||||||
|
|
||||||
|
g_pwm_buffer[led.driver][rp] = red;
|
||||||
|
g_pwm_buffer[led.driver][gp] = green;
|
||||||
|
g_pwm_buffer[led.driver][bp] = blue;
|
||||||
|
g_pwm_buffer_update_required = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
|
||||||
|
for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
|
||||||
|
IS31FL3741_set_color(i, red, green, blue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
|
||||||
|
is31_led led = g_is31_leds[index];
|
||||||
|
|
||||||
|
uint32_t scaling_register_r = IS31FL3741_get_cw_sw_position(led.rcs, led.rsw);
|
||||||
|
uint32_t scaling_register_g = IS31FL3741_get_cw_sw_position(led.gcs, led.gsw);
|
||||||
|
uint32_t scaling_register_b = IS31FL3741_get_cw_sw_position(led.bcs, led.bsw);
|
||||||
|
|
||||||
|
if (red) {
|
||||||
|
g_scaling_registers[led.driver][scaling_register_r] = 0xFF;
|
||||||
|
} else {
|
||||||
|
g_scaling_registers[led.driver][scaling_register_r] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (green) {
|
||||||
|
g_scaling_registers[led.driver][scaling_register_g] = 0xFF;
|
||||||
|
} else {
|
||||||
|
g_scaling_registers[led.driver][scaling_register_g] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blue) {
|
||||||
|
g_scaling_registers[led.driver][scaling_register_b] = 0xFF;
|
||||||
|
} else {
|
||||||
|
g_scaling_registers[led.driver][scaling_register_b] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_scaling_registers_update_required[led.driver] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_update_pwm_buffers(uint8_t addr1, uint8_t addr2) {
|
||||||
|
if (g_pwm_buffer_update_required) {
|
||||||
|
IS31FL3741_write_pwm_buffer(addr1, g_pwm_buffer[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_pwm_buffer_update_required = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
|
||||||
|
uint32_t rp = 0, gp = 0, bp = 0;
|
||||||
|
|
||||||
|
rp = IS31FL3741_get_cw_sw_position(pled->rcs, pled->rsw);
|
||||||
|
gp = IS31FL3741_get_cw_sw_position(pled->gcs, pled->gsw);
|
||||||
|
bp = IS31FL3741_get_cw_sw_position(pled->bcs, pled->bsw);
|
||||||
|
|
||||||
|
g_pwm_buffer[pled->driver][rp] = red;
|
||||||
|
g_pwm_buffer[pled->driver][gp] = green;
|
||||||
|
g_pwm_buffer[pled->driver][bp] = blue;
|
||||||
|
|
||||||
|
g_pwm_buffer_update_required = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index) {
|
||||||
|
if (g_scaling_registers_update_required[index]) {
|
||||||
|
// unlock the command register and select PG2
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_0);
|
||||||
|
|
||||||
|
for (int i = 0; i < 180; ++i) {
|
||||||
|
IS31FL3741_write_register(addr, i, g_scaling_registers[0][i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// unlock the command register and select PG3
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
||||||
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_1);
|
||||||
|
|
||||||
|
for (int i = 0; i < 171; ++i) {
|
||||||
|
IS31FL3741_write_register(addr, i, g_scaling_registers[0][180 + i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
|
||||||
|
uint32_t rp = 0, gp = 0, bp = 0;
|
||||||
|
|
||||||
|
rp = IS31FL3741_get_cw_sw_position(pled->rcs, pled->rsw);
|
||||||
|
gp = IS31FL3741_get_cw_sw_position(pled->gcs, pled->gsw);
|
||||||
|
bp = IS31FL3741_get_cw_sw_position(pled->bcs, pled->bsw);
|
||||||
|
|
||||||
|
g_scaling_registers[pled->driver][rp] = red;
|
||||||
|
g_scaling_registers[pled->driver][gp] = green;
|
||||||
|
g_scaling_registers[pled->driver][bp] = blue;
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/* Copyright 2017 Jason Williams
|
||||||
|
* Copyright 2018 Jack Humbert
|
||||||
|
* Copyright 2018 Yiancar
|
||||||
|
* Copyright 2020 MelGeek
|
||||||
|
*
|
||||||
|
* 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 <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
typedef struct is31_led {
|
||||||
|
uint8_t driver : 2;
|
||||||
|
uint8_t rcs;
|
||||||
|
uint8_t rsw;
|
||||||
|
uint8_t gcs;
|
||||||
|
uint8_t gsw;
|
||||||
|
uint8_t bcs;
|
||||||
|
uint8_t bsw;
|
||||||
|
} __attribute__((packed)) is31_led;
|
||||||
|
|
||||||
|
extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
|
||||||
|
extern const is31_led g_is31_indicator_leds[DRIVER_INDICATOR_LED_TOTAL];
|
||||||
|
|
||||||
|
void IS31FL3741_init(uint8_t addr);
|
||||||
|
void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
|
||||||
|
bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
|
||||||
|
|
||||||
|
void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
|
||||||
|
void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
|
||||||
|
|
||||||
|
void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
|
||||||
|
|
||||||
|
// This should not be called from an interrupt
|
||||||
|
// (eg. from a timer interrupt).
|
||||||
|
// Call this while idle (in between matrix scans).
|
||||||
|
// If the buffer is dirty, it will update the driver with the buffer.
|
||||||
|
void IS31FL3741_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
|
||||||
|
void IS31FL3741_update_led_control_registers(uint8_t addr1, uint8_t addr2);
|
||||||
|
void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
|
||||||
|
|
||||||
|
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
|
||||||
@@ -1,11 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* light weight WS2812 lib include
|
|
||||||
*
|
|
||||||
* Version 2.3 - Nev 29th 2015
|
|
||||||
* Author: Tim (cpldcpu@gmail.com)
|
|
||||||
*
|
|
||||||
* Please do not change this file! All configuration is handled in "ws2812_config.h"
|
|
||||||
*
|
|
||||||
* 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
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
@@ -24,12 +17,20 @@
|
|||||||
|
|
||||||
#include "quantum/color.h"
|
#include "quantum/color.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Older WS2812s can handle a reset time (TRST) of 50us, but recent
|
||||||
|
* component revisions require a minimum of 280us.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(WS2812_TRST_US)
|
||||||
|
#define WS2812_TRST_US 280
|
||||||
|
#endif
|
||||||
|
|
||||||
/* User Interface
|
/* User Interface
|
||||||
*
|
*
|
||||||
* Input:
|
* Input:
|
||||||
* ledarray: An array of GRB data describing the LED colors
|
* ledarray: An array of GRB data describing the LED colors
|
||||||
* number_of_leds: The number of LEDs to write
|
* number_of_leds: The number of LEDs to write
|
||||||
* pin (optional): A pin_t definition for the line to drive
|
|
||||||
*
|
*
|
||||||
* The functions will perform the following actions:
|
* The functions will perform the following actions:
|
||||||
* - Set the data-out pin as output
|
* - Set the data-out pin as output
|
||||||
@@ -37,4 +38,3 @@
|
|||||||
* - Wait 50us to reset the LEDs
|
* - Wait 50us to reset the LEDs
|
||||||
*/
|
*/
|
||||||
void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
|
void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
|
||||||
void ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t number_of_leds, uint8_t pin);
|
|
||||||
@@ -11,16 +11,6 @@ MCU = atmega32u4
|
|||||||
# ATmega328P USBasp
|
# ATmega328P USBasp
|
||||||
BOOTLOADER = atmel-dfu
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
# 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
|
|
||||||
# Otherwise, delete this section
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 1024
|
|
||||||
# Atmel DFU loader 4096
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
|
|
||||||
# Build Options
|
# Build Options
|
||||||
# change yes to no to disable
|
# change yes to no to disable
|
||||||
#
|
#
|
||||||
@@ -39,7 +29,5 @@ MIDI_ENABLE = no # MIDI support
|
|||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
|
||||||
ENCODER_ENABLE = yes
|
ENCODER_ENABLE = yes
|
||||||
RGBLIGHT_ENABLE = yes
|
RGBLIGHT_ENABLE = yes
|
||||||
# EXTRAFLAGS += -flto
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 AAClawson (AlisGraveNil)
|
||||||
|
|
||||||
|
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 0x17B9
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER AlisGraveNil
|
||||||
|
#define PRODUCT GameBuddy
|
||||||
|
#define DESCRIPTION A 26-key QMK-powered macropad designed for gaming!
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 7
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS { D1, D0, E6, B3, B2 }
|
||||||
|
#define MATRIX_COL_PINS { F5, F6, F7, B1, C6, D7, B6 }
|
||||||
|
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2019 Sebastian Williams
|
/* Copyright 2020 AAClawson (AlisGraveNil)
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -13,14 +13,4 @@
|
|||||||
* 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/>.
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#include "gamebuddy.h"
|
||||||
|
|
||||||
#include "quantum.h"
|
|
||||||
|
|
||||||
#define LAYOUT( \
|
|
||||||
K00, \
|
|
||||||
K01 \
|
|
||||||
) { \
|
|
||||||
{ K00 }, \
|
|
||||||
{ K01 } \
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/* Copyright 2020 AAClawson (AlisGraveNil)
|
||||||
|
*
|
||||||
|
* 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( \
|
||||||
|
K00, K01, K02, K03, K04, K05, \
|
||||||
|
K10, K11, K12, K13, K14, K15, \
|
||||||
|
K20, K22, K23, K24, K25, \
|
||||||
|
K30, K31, K32, K33, K34, K35, K46, \
|
||||||
|
K44, K45 \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, KC_NO }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, KC_NO }, \
|
||||||
|
{ K20, KC_NO, K22, K23, K24, K25, KC_NO }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, KC_NO }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, K44, K45, K46 }, \
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "GameBuddy",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 7,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"K00 (D1,F5)", "x":0, "y":0},
|
||||||
|
{"label":"K01 (D1,F6)", "x":1, "y":0},
|
||||||
|
{"label":"K02 (D1,F7)", "x":2, "y":0},
|
||||||
|
{"label":"K03 (D1,B1)", "x":3, "y":0},
|
||||||
|
{"label":"K04 (D1,C6)", "x":4, "y":0},
|
||||||
|
{"label":"K05 (D1,D7)", "x":5, "y":0},
|
||||||
|
{"label":"K10 (D0,F5)", "x":0, "y":1},
|
||||||
|
{"label":"K11 (D0,F6)", "x":1, "y":1},
|
||||||
|
{"label":"K12 (D0,F7)", "x":2, "y":1},
|
||||||
|
{"label":"K13 (D0,B1)", "x":3, "y":1},
|
||||||
|
{"label":"K14 (D0,C6)", "x":4, "y":1},
|
||||||
|
{"label":"K15 (D0,D7)", "x":5, "y":1},
|
||||||
|
{"label":"K20 (E6,F5)", "x":0, "y":2, "w":2},
|
||||||
|
{"label":"K22 (E6,F7)", "x":2, "y":2},
|
||||||
|
{"label":"K23 (E6,B1)", "x":3, "y":2},
|
||||||
|
{"label":"K24 (E6,C6)", "x":4, "y":2},
|
||||||
|
{"label":"K25 (E6,D7)", "x":5, "y":2},
|
||||||
|
{"label":"K30 (B3,F5)", "x":0, "y":3},
|
||||||
|
{"label":"K31 (B3,F6)", "x":1, "y":3},
|
||||||
|
{"label":"K32 (B3,F7)", "x":2, "y":3},
|
||||||
|
{"label":"K33 (B3,B1)", "x":3, "y":3},
|
||||||
|
{"label":"K34 (B3,C6)", "x":4, "y":3},
|
||||||
|
{"label":"K35 (B3,D7)", "x":5, "y":3},
|
||||||
|
{"label":"K46 (B2,B6)", "x":6, "y":3, "h":2},
|
||||||
|
{"label":"K44 (B2,C6)", "x":4, "y":4},
|
||||||
|
{"label":"K45 (B2,D7)", "x":5, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/* Copyright 2020 AAClawson (AlisGraveNil)
|
||||||
|
*
|
||||||
|
* 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] = {
|
||||||
|
/*
|
||||||
|
* -------------------------------
|
||||||
|
* |ESC | 1 | 2 | 3 | 4 | 5 |
|
||||||
|
* -------------------------------
|
||||||
|
* |TAB | V | Q | W | E | R |
|
||||||
|
* ------------------------------|
|
||||||
|
* |LSFT | A | S | D | G |
|
||||||
|
* ------------------------------------
|
||||||
|
* |LCTL| N | X | F | C | M |SPC |
|
||||||
|
* ------------------------------| |
|
||||||
|
* |LALT|LGUI| |
|
||||||
|
* ----------------
|
||||||
|
*/
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,
|
||||||
|
KC_TAB, KC_V, KC_Q, KC_W, KC_E, KC_R,
|
||||||
|
KC_LSFT, KC_A, KC_S, KC_D, KC_G,
|
||||||
|
KC_LCTL, KC_N, KC_X, KC_F, KC_C, KC_M, KC_SPC,
|
||||||
|
KC_LALT, KC_LGUI
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# GameBuddy
|
||||||
|
|
||||||
|
This is a 5x7 macropad designed for left-hand usage for videogames, with special focus on FPS layouts!
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [AAClawson](https://github.com/AlisGraveNil)
|
||||||
|
* Hardware Supported: GameBuddy, Pro Micro, Elite-C
|
||||||
|
* Hardware Availability: www.clawboards.xyz
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make clawsome/gamebuddy: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,25 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
|
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
|
||||||
|
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
|
||||||
@@ -0,0 +1,209 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 MechMerlin
|
||||||
|
|
||||||
|
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 0x4558 // EX
|
||||||
|
#define PRODUCT_ID 0xE851 // E8.5 Version 1
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Exclusive
|
||||||
|
#define PRODUCT E8.5 Hotswap PCB
|
||||||
|
#define DESCRIPTION A custom TKL keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 11
|
||||||
|
#define MATRIX_COLS 9
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 0 1 2 3 4 5 6 7 8 9 A
|
||||||
|
#define MATRIX_ROW_PINS { E6, B0, B1, B2, B3, B7, F7, F6, F5, F4, F1 }
|
||||||
|
#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION ROW2COL
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 B6
|
||||||
|
// #define BACKLIGHT_BREATHING
|
||||||
|
// #define BACKLIGHT_LEVELS 6
|
||||||
|
|
||||||
|
#define RGB_DI_PIN E2
|
||||||
|
#ifdef RGB_DI_PIN
|
||||||
|
#define RGBLED_NUM 18
|
||||||
|
#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
|
||||||
|
#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
|
||||||
|
|
||||||
|
/* disable these deprecated features by default */
|
||||||
|
#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
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2019 Sebastian Williams
|
/* Copyright 2020 MechMerlin
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -13,4 +13,5 @@
|
|||||||
* 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 "smd_milk.h"
|
|
||||||
|
#include "e85.h"
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
/* Copyright 2020 MechMerlin
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// This is the layout for the soldered PCB
|
||||||
|
#define LAYOUT_all( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K68, K67, K65, K64, K63, K66, K62, K61, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K78, K70, K77, K75, K74, K73, K76, K72, K71, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K88, K87, K85, K84, K94, K86, K82, K81, \
|
||||||
|
K30, K31, K32, K33, K34, K35, K36, K37, K38, K98, K97, K95, K83, \
|
||||||
|
K40, K41, K42, K43, K44, K45, K46, K47, K48, KA8, KA7, KA5, KA4, KA3, K92, \
|
||||||
|
K50, K51, K52, K56, K58, K57, K54, K53, KA6, KA2, KA1 \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
|
||||||
|
{ K50, K51, K52, K53, K54, KC_NO, K56, K57, K58 }, \
|
||||||
|
{ KC_NO, K61, K62, K63, K64, K65, K66, K67, K68 }, \
|
||||||
|
{ K70, K71, K72, K73, K74, K75, K76, K77, K78 }, \
|
||||||
|
{ KC_NO, K81, K82, K83, K84, K85, K86, K87, K88 }, \
|
||||||
|
{ KC_NO, KC_NO, K92, KC_NO, K94, K95, KC_NO, K97, K98 }, \
|
||||||
|
{ KC_NO, KA1, KA2, KA3, KA4, KA5, KA6, KA7, KA8 }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the layout for one hotswap PCB and can also be used on the soldered edition
|
||||||
|
#define LAYOUT_ansi_standard( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K68, K67, K65, K64, K63, K66, K62, K61, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K78, K70, K77, K75, K73, K76, K72, K71, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K88, K87, K85, K84, K83, K86, K82, K81, \
|
||||||
|
K30, K31, K32, K33, K34, K35, K36, K37, K38, K98, K97, K95, K93, \
|
||||||
|
K40, K42, K43, K44, K45, K46, K47, K48, KA8, KA7, KA5, KA4, K92, \
|
||||||
|
K50, K51, K52, K56, K58, K57, K54, K53, KA6, KA2, KA1 \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
|
||||||
|
{ K40, KC_NO, K42, K43, K44, K45, K46, K47, K48 }, \
|
||||||
|
{ K50, K51, K52, K53, K54, KC_NO, K56, K57, K58 }, \
|
||||||
|
{ KC_NO, K61, K62, K63, K64, K65, K66, K67, K68 }, \
|
||||||
|
{ K70, K71, K72, K73, KC_NO, K75, K76, K77, K78 }, \
|
||||||
|
{ KC_NO, K81, K82, K83, K84, K85, K86, K87, K88 }, \
|
||||||
|
{ KC_NO, KC_NO, K92, K93, KC_NO, K95, KC_NO, K97, K98 }, \
|
||||||
|
{ KC_NO, KA1, KA2, KC_NO, KA4, KA5, KA6, KA7, KA8 }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the layout for one hotswap PCB and can also be used on the soldered edition
|
||||||
|
#define LAYOUT_ansi_tsangan( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K68, K67, K65, K64, K63, K66, K62, K61, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K78, K70, K77, K75, K73, K76, K72, K71, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K88, K87, K85, K84, K83, K86, K82, K81, \
|
||||||
|
K30, K31, K32, K33, K34, K35, K36, K37, K38, K98, K97, K95, K93, \
|
||||||
|
K40, K42, K43, K44, K45, K46, K47, K48, KA8, KA7, KA5, KA4, K92, \
|
||||||
|
K50, K51, K52, K56, K57, K54, K53, KA6, KA2, KA1 \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
|
||||||
|
{ K40, KC_NO, K42, K43, K44, K45, K46, K47, K48 }, \
|
||||||
|
{ K50, K51, K52, K53, K54, KC_NO, K56, K57, KC_NO }, \
|
||||||
|
{ KC_NO, K61, K62, K63, K64, K65, K66, K67, K68 }, \
|
||||||
|
{ K70, K71, K72, K73, KC_NO, K75, K76, K77, K78 }, \
|
||||||
|
{ KC_NO, K81, K82, K83, K84, K85, K86, K87, K88 }, \
|
||||||
|
{ KC_NO, KC_NO, K92, K93, KC_NO, K95, KC_NO, K97, K98 }, \
|
||||||
|
{ KC_NO, KA1, KA2, KC_NO, KA4, KA5, KA6, KA7, KA8 }, \
|
||||||
|
}
|
||||||
@@ -0,0 +1,293 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Exclusive E8.5 TKL",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 18.25,
|
||||||
|
"height": 6.5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_all": {
|
||||||
|
"key_count": 91,
|
||||||
|
"layout": [
|
||||||
|
{"label":"K00 (E6,D0)", "x":0, "y":0},
|
||||||
|
{"label":"K01 (E6,D1)", "x":1.25, "y":0},
|
||||||
|
{"label":"K02 (E6,D2)", "x":2.25, "y":0},
|
||||||
|
{"label":"K03 (E6,D3)", "x":3.25, "y":0},
|
||||||
|
{"label":"K04 (E6,D5)", "x":4.25, "y":0},
|
||||||
|
{"label":"K05 (E6,D4)", "x":5.5, "y":0},
|
||||||
|
{"label":"K06 (E6,D6)", "x":6.5, "y":0},
|
||||||
|
{"label":"K07 (E6,D7)", "x":7.5, "y":0},
|
||||||
|
{"label":"K08 (E6,B4)", "x":8.5, "y":0},
|
||||||
|
{"label":"K68 (F7,B4)", "x":9.75, "y":0},
|
||||||
|
{"label":"K67 (F7,D7)", "x":10.75, "y":0},
|
||||||
|
{"label":"K65 (F7,D4)", "x":11.75, "y":0},
|
||||||
|
{"label":"K64 (F7,D5)", "x":12.75, "y":0},
|
||||||
|
{"label":"K63 (F7,D3)", "x":14, "y":0},
|
||||||
|
{"label":"K66 (F7,D6)", "x":15.25, "y":0},
|
||||||
|
{"label":"K62 (F7,D2)", "x":16.25, "y":0},
|
||||||
|
{"label":"K61 (F7,D1)", "x":17.25, "y":0},
|
||||||
|
{"label":"K10 (B0,D0)", "x":0, "y":1.5},
|
||||||
|
{"label":"K11 (B0,D1)", "x":1, "y":1.5},
|
||||||
|
{"label":"K12 (B0,D2)", "x":2, "y":1.5},
|
||||||
|
{"label":"K13 (B0,D3)", "x":3, "y":1.5},
|
||||||
|
{"label":"K14 (B0,D5)", "x":4, "y":1.5},
|
||||||
|
{"label":"K15 (B0,D4)", "x":5, "y":1.5},
|
||||||
|
{"label":"K16 (B0,D6)", "x":6, "y":1.5},
|
||||||
|
{"label":"K17 (B0,D7)", "x":7, "y":1.5},
|
||||||
|
{"label":"K18 (B0,B4)", "x":8, "y":1.5},
|
||||||
|
{"label":"K78 (F6,B4)", "x":9, "y":1.5},
|
||||||
|
{"label":"K70 (F6,D0)", "x":10, "y":1.5},
|
||||||
|
{"label":"K77 (F6,D7)", "x":11, "y":1.5},
|
||||||
|
{"label":"K75 (F6,D4)", "x":12, "y":1.5},
|
||||||
|
{"label":"K74 (F6,D5)", "x":13, "y":1.5},
|
||||||
|
{"label":"K73 (F6,D3)", "x":14, "y":1.5},
|
||||||
|
{"label":"K76 (F6,D6)", "x":15.25, "y":1.5},
|
||||||
|
{"label":"K72 (F6,D2)", "x":16.25, "y":1.5},
|
||||||
|
{"label":"K71 (F6,D1)", "x":17.25, "y":1.5},
|
||||||
|
{"label":"K20 (B1,D0)", "x":0, "y":2.5, "w":1.5},
|
||||||
|
{"label":"K21 (B1,D1)", "x":1.5, "y":2.5},
|
||||||
|
{"label":"K22 (B1,D2)", "x":2.5, "y":2.5},
|
||||||
|
{"label":"K23 (B1,D3)", "x":3.5, "y":2.5},
|
||||||
|
{"label":"K24 (B1,D5)", "x":4.5, "y":2.5},
|
||||||
|
{"label":"K25 (B1,D4)", "x":5.5, "y":2.5},
|
||||||
|
{"label":"K26 (B1,D6)", "x":6.5, "y":2.5},
|
||||||
|
{"label":"K27 (B1,D7)", "x":7.5, "y":2.5},
|
||||||
|
{"label":"K28 (B1,B4)", "x":8.5, "y":2.5},
|
||||||
|
{"label":"K88 (F5,B4)", "x":9.5, "y":2.5},
|
||||||
|
{"label":"K87 (F5,D7)", "x":10.5, "y":2.5},
|
||||||
|
{"label":"K85 (F5,D4)", "x":11.5, "y":2.5},
|
||||||
|
{"label":"K84 (F5,D5)", "x":12.5, "y":2.5},
|
||||||
|
{"label":"K94 (F4,D5)", "x":13.5, "y":2.5, "w":1.5},
|
||||||
|
{"label":"K86 (F5,D6)", "x":15.25, "y":2.5},
|
||||||
|
{"label":"K82 (F5,D2)", "x":16.25, "y":2.5},
|
||||||
|
{"label":"K81 (F5,D1)", "x":17.25, "y":2.5},
|
||||||
|
{"label":"K30 (B2,D0)", "x":0, "y":3.5, "w":1.75},
|
||||||
|
{"label":"K31 (B2,D1)", "x":1.75, "y":3.5},
|
||||||
|
{"label":"K32 (B2,D2)", "x":2.75, "y":3.5},
|
||||||
|
{"label":"K33 (B2,D3)", "x":3.75, "y":3.5},
|
||||||
|
{"label":"K34 (B2,D5)", "x":4.75, "y":3.5},
|
||||||
|
{"label":"K35 (B2,D4)", "x":5.75, "y":3.5},
|
||||||
|
{"label":"K36 (B2,D6)", "x":6.75, "y":3.5},
|
||||||
|
{"label":"K37 (B2,D7)", "x":7.75, "y":3.5},
|
||||||
|
{"label":"K38 (B2,B4)", "x":8.75, "y":3.5},
|
||||||
|
{"label":"K98 (F4,B4)", "x":9.75, "y":3.5},
|
||||||
|
{"label":"K97 (F4,D7)", "x":10.75, "y":3.5},
|
||||||
|
{"label":"K95 (F4,D4)", "x":11.75, "y":3.5},
|
||||||
|
{"label":"K83 (F5,D3)", "x":12.75, "y":3.5, "w":2.25},
|
||||||
|
{"label":"K40 (B3,D0)", "x":0, "y":4.5, "w":1.25},
|
||||||
|
{"label":"K41 (B3,D1)", "x":1.25, "y":4.5},
|
||||||
|
{"label":"K42 (B3,D2)", "x":2.25, "y":4.5},
|
||||||
|
{"label":"K43 (B3,D3)", "x":3.25, "y":4.5},
|
||||||
|
{"label":"K44 (B3,D5)", "x":4.25, "y":4.5},
|
||||||
|
{"label":"K45 (B3,D4)", "x":5.25, "y":4.5},
|
||||||
|
{"label":"K46 (B3,D6)", "x":6.25, "y":4.5},
|
||||||
|
{"label":"K47 (B3,D7)", "x":7.25, "y":4.5},
|
||||||
|
{"label":"K48 (B3,B4)", "x":8.25, "y":4.5},
|
||||||
|
{"label":"KA8 (F1,B4)", "x":9.25, "y":4.5},
|
||||||
|
{"label":"KA7 (F1,D7)", "x":10.25, "y":4.5},
|
||||||
|
{"label":"KA5 (F1,D4)", "x":11.25, "y":4.5},
|
||||||
|
{"label":"KA4 (F1,D5)", "x":12.25, "y":4.5, "w":1.75},
|
||||||
|
{"label":"KA3 (F1,D3)", "x":14, "y":4.5},
|
||||||
|
{"label":"K92 (F4,D2)", "x":16.25, "y":4.5},
|
||||||
|
{"label":"K50 (B7,D0)", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K51 (B7,D1)", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K52 (B7,D2)", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K56 (B7,D6)", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"K58 (B7,B4)", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K57 (B7,D7)", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K54 (B7,D5)", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K53 (B7,D3)", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"KA6 (F1,D6)", "x":15.25, "y":5.5},
|
||||||
|
{"label":"KA2 (F1,D2)", "x":16.25, "y":5.5},
|
||||||
|
{"label":"KA1 (F1,D1)", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"LAYOUT_ansi_standard": {
|
||||||
|
"key_count": 88,
|
||||||
|
"layout": [
|
||||||
|
{"label":"K00 (E6,D0)", "x":0, "y":0},
|
||||||
|
{"label":"K01 (E6,D1)", "x":1.25, "y":0},
|
||||||
|
{"label":"K02 (E6,D2)", "x":2.25, "y":0},
|
||||||
|
{"label":"K03 (E6,D3)", "x":3.25, "y":0},
|
||||||
|
{"label":"K04 (E6,D5)", "x":4.25, "y":0},
|
||||||
|
{"label":"K05 (E6,D4)", "x":5.5, "y":0},
|
||||||
|
{"label":"K06 (E6,D6)", "x":6.5, "y":0},
|
||||||
|
{"label":"K07 (E6,D7)", "x":7.5, "y":0},
|
||||||
|
{"label":"K08 (E6,B4)", "x":8.5, "y":0},
|
||||||
|
{"label":"K68 (F7,B4)", "x":9.75, "y":0},
|
||||||
|
{"label":"K67 (F7,D7)", "x":10.75, "y":0},
|
||||||
|
{"label":"K65 (F7,D4)", "x":11.75, "y":0},
|
||||||
|
{"label":"K64 (F7,D5)", "x":12.75, "y":0},
|
||||||
|
{"label":"K63 (F7,D3)", "x":14, "y":0},
|
||||||
|
{"label":"K66 (F7,D6)", "x":15.25, "y":0},
|
||||||
|
{"label":"K62 (F7,D2)", "x":16.25, "y":0},
|
||||||
|
{"label":"K61 (F7,D1)", "x":17.25, "y":0},
|
||||||
|
{"label":"K10 (B0,D0)", "x":0, "y":1.5},
|
||||||
|
{"label":"K11 (B0,D1)", "x":1, "y":1.5},
|
||||||
|
{"label":"K12 (B0,D2)", "x":2, "y":1.5},
|
||||||
|
{"label":"K13 (B0,D3)", "x":3, "y":1.5},
|
||||||
|
{"label":"K14 (B0,D5)", "x":4, "y":1.5},
|
||||||
|
{"label":"K15 (B0,D4)", "x":5, "y":1.5},
|
||||||
|
{"label":"K16 (B0,D6)", "x":6, "y":1.5},
|
||||||
|
{"label":"K17 (B0,D7)", "x":7, "y":1.5},
|
||||||
|
{"label":"K18 (B0,B4)", "x":8, "y":1.5},
|
||||||
|
{"label":"K78 (F6,B4)", "x":9, "y":1.5},
|
||||||
|
{"label":"K70 (F6,D0)", "x":10, "y":1.5},
|
||||||
|
{"label":"K77 (F6,D7)", "x":11, "y":1.5},
|
||||||
|
{"label":"K75 (F6,D4)", "x":12, "y":1.5},
|
||||||
|
{"label":"K73 (F6,D3)", "x":13, "y":1.5, "w":2},
|
||||||
|
{"label":"K76 (F6,D6)", "x":15.25, "y":1.5},
|
||||||
|
{"label":"K72 (F6,D2)", "x":16.25, "y":1.5},
|
||||||
|
{"label":"K71 (F6,D1)", "x":17.25, "y":1.5},
|
||||||
|
{"label":"K20 (B1,D0)", "x":0, "y":2.5, "w":1.5},
|
||||||
|
{"label":"K21 (B1,D1)", "x":1.5, "y":2.5},
|
||||||
|
{"label":"K22 (B1,D2)", "x":2.5, "y":2.5},
|
||||||
|
{"label":"K23 (B1,D3)", "x":3.5, "y":2.5},
|
||||||
|
{"label":"K24 (B1,D5)", "x":4.5, "y":2.5},
|
||||||
|
{"label":"K25 (B1,D4)", "x":5.5, "y":2.5},
|
||||||
|
{"label":"K26 (B1,D6)", "x":6.5, "y":2.5},
|
||||||
|
{"label":"K27 (B1,D7)", "x":7.5, "y":2.5},
|
||||||
|
{"label":"K28 (B1,B4)", "x":8.5, "y":2.5},
|
||||||
|
{"label":"K88 (F5,B4)", "x":9.5, "y":2.5},
|
||||||
|
{"label":"K87 (F5,D7)", "x":10.5, "y":2.5},
|
||||||
|
{"label":"K85 (F5,D4)", "x":11.5, "y":2.5},
|
||||||
|
{"label":"K84 (F5,D5)", "x":12.5, "y":2.5},
|
||||||
|
{"label":"K83 (F5,D3)", "x":13.5, "y":2.5, "w":1.5},
|
||||||
|
{"label":"K86 (F5,D6)", "x":15.25, "y":2.5},
|
||||||
|
{"label":"K82 (F5,D2)", "x":16.25, "y":2.5},
|
||||||
|
{"label":"K81 (F5,D1)", "x":17.25, "y":2.5},
|
||||||
|
{"label":"K30 (B2,D0)", "x":0, "y":3.5, "w":1.75},
|
||||||
|
{"label":"K31 (B2,D1)", "x":1.75, "y":3.5},
|
||||||
|
{"label":"K32 (B2,D2)", "x":2.75, "y":3.5},
|
||||||
|
{"label":"K33 (B2,D3)", "x":3.75, "y":3.5},
|
||||||
|
{"label":"K34 (B2,D5)", "x":4.75, "y":3.5},
|
||||||
|
{"label":"K35 (B2,D4)", "x":5.75, "y":3.5},
|
||||||
|
{"label":"K36 (B2,D6)", "x":6.75, "y":3.5},
|
||||||
|
{"label":"K37 (B2,D7)", "x":7.75, "y":3.5},
|
||||||
|
{"label":"K38 (B2,B4)", "x":8.75, "y":3.5},
|
||||||
|
{"label":"K98 (F4,B4)", "x":9.75, "y":3.5},
|
||||||
|
{"label":"K97 (F4,D7)", "x":10.75, "y":3.5},
|
||||||
|
{"label":"K95 (F4,D4)", "x":11.75, "y":3.5},
|
||||||
|
{"label":"K93 (F4,D3)", "x":12.75, "y":3.5, "w":2.25},
|
||||||
|
{"label":"K40 (B3,D0)", "x":0, "y":4.5, "w":2.25},
|
||||||
|
{"label":"K42 (B3,D2)", "x":2.25, "y":4.5},
|
||||||
|
{"label":"K43 (B3,D3)", "x":3.25, "y":4.5},
|
||||||
|
{"label":"K44 (B3,D5)", "x":4.25, "y":4.5},
|
||||||
|
{"label":"K45 (B3,D4)", "x":5.25, "y":4.5},
|
||||||
|
{"label":"K46 (B3,D6)", "x":6.25, "y":4.5},
|
||||||
|
{"label":"K47 (B3,D7)", "x":7.25, "y":4.5},
|
||||||
|
{"label":"K48 (B3,B4)", "x":8.25, "y":4.5},
|
||||||
|
{"label":"KA8 (F1,B4)", "x":9.25, "y":4.5},
|
||||||
|
{"label":"KA7 (F1,D7)", "x":10.25, "y":4.5},
|
||||||
|
{"label":"KA5 (F1,D4)", "x":11.25, "y":4.5},
|
||||||
|
{"label":"KA4 (F1,D5)", "x":12.25, "y":4.5, "w":2.75},
|
||||||
|
{"label":"K92 (F4,D2)", "x":16.25, "y":4.5},
|
||||||
|
{"label":"K50 (B7,D0)", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K51 (B7,D1)", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K52 (B7,D2)", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K56 (B7,D6)", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"K58 (B7,B4)", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K57 (B7,D7)", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K54 (B7,D5)", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"K53 (B7,D3)", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"KA6 (F1,D6)", "x":15.25, "y":5.5},
|
||||||
|
{"label":"KA2 (F1,D2)", "x":16.25, "y":5.5},
|
||||||
|
{"label":"KA1 (F1,D1)", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"LAYOUT_ansi_tsangan": {
|
||||||
|
"key_count": 87,
|
||||||
|
"layout": [
|
||||||
|
{"label":"K00 (E6,D0)", "x":0, "y":0},
|
||||||
|
{"label":"K01 (E6,D1)", "x":1.25, "y":0},
|
||||||
|
{"label":"K02 (E6,D2)", "x":2.25, "y":0},
|
||||||
|
{"label":"K03 (E6,D3)", "x":3.25, "y":0},
|
||||||
|
{"label":"K04 (E6,D5)", "x":4.25, "y":0},
|
||||||
|
{"label":"K05 (E6,D4)", "x":5.5, "y":0},
|
||||||
|
{"label":"K06 (E6,D6)", "x":6.5, "y":0},
|
||||||
|
{"label":"K07 (E6,D7)", "x":7.5, "y":0},
|
||||||
|
{"label":"K08 (E6,B4)", "x":8.5, "y":0},
|
||||||
|
{"label":"K68 (F7,B4)", "x":9.75, "y":0},
|
||||||
|
{"label":"K67 (F7,D7)", "x":10.75, "y":0},
|
||||||
|
{"label":"K65 (F7,D4)", "x":11.75, "y":0},
|
||||||
|
{"label":"K64 (F7,D5)", "x":12.75, "y":0},
|
||||||
|
{"label":"K63 (F7,D3)", "x":14, "y":0},
|
||||||
|
{"label":"K66 (F7,D6)", "x":15.25, "y":0},
|
||||||
|
{"label":"K62 (F7,D2)", "x":16.25, "y":0},
|
||||||
|
{"label":"K61 (F7,D1)", "x":17.25, "y":0},
|
||||||
|
{"label":"K10 (B0,D0)", "x":0, "y":1.5},
|
||||||
|
{"label":"K11 (B0,D1)", "x":1, "y":1.5},
|
||||||
|
{"label":"K12 (B0,D2)", "x":2, "y":1.5},
|
||||||
|
{"label":"K13 (B0,D3)", "x":3, "y":1.5},
|
||||||
|
{"label":"K14 (B0,D5)", "x":4, "y":1.5},
|
||||||
|
{"label":"K15 (B0,D4)", "x":5, "y":1.5},
|
||||||
|
{"label":"K16 (B0,D6)", "x":6, "y":1.5},
|
||||||
|
{"label":"K17 (B0,D7)", "x":7, "y":1.5},
|
||||||
|
{"label":"K18 (B0,B4)", "x":8, "y":1.5},
|
||||||
|
{"label":"K78 (F6,B4)", "x":9, "y":1.5},
|
||||||
|
{"label":"K70 (F6,D0)", "x":10, "y":1.5},
|
||||||
|
{"label":"K77 (F6,D7)", "x":11, "y":1.5},
|
||||||
|
{"label":"K75 (F6,D4)", "x":12, "y":1.5},
|
||||||
|
{"label":"K73 (F6,D3)", "x":13, "y":1.5, "w":2},
|
||||||
|
{"label":"K76 (F6,D6)", "x":15.25, "y":1.5},
|
||||||
|
{"label":"K72 (F6,D2)", "x":16.25, "y":1.5},
|
||||||
|
{"label":"K71 (F6,D1)", "x":17.25, "y":1.5},
|
||||||
|
{"label":"K20 (B1,D0)", "x":0, "y":2.5, "w":1.5},
|
||||||
|
{"label":"K21 (B1,D1)", "x":1.5, "y":2.5},
|
||||||
|
{"label":"K22 (B1,D2)", "x":2.5, "y":2.5},
|
||||||
|
{"label":"K23 (B1,D3)", "x":3.5, "y":2.5},
|
||||||
|
{"label":"K24 (B1,D5)", "x":4.5, "y":2.5},
|
||||||
|
{"label":"K25 (B1,D4)", "x":5.5, "y":2.5},
|
||||||
|
{"label":"K26 (B1,D6)", "x":6.5, "y":2.5},
|
||||||
|
{"label":"K27 (B1,D7)", "x":7.5, "y":2.5},
|
||||||
|
{"label":"K28 (B1,B4)", "x":8.5, "y":2.5},
|
||||||
|
{"label":"K88 (F5,B4)", "x":9.5, "y":2.5},
|
||||||
|
{"label":"K87 (F5,D7)", "x":10.5, "y":2.5},
|
||||||
|
{"label":"K85 (F5,D4)", "x":11.5, "y":2.5},
|
||||||
|
{"label":"K84 (F5,D5)", "x":12.5, "y":2.5},
|
||||||
|
{"label":"K83 (F5,D3)", "x":13.5, "y":2.5, "w":1.5},
|
||||||
|
{"label":"K86 (F5,D6)", "x":15.25, "y":2.5},
|
||||||
|
{"label":"K82 (F5,D2)", "x":16.25, "y":2.5},
|
||||||
|
{"label":"K81 (F5,D1)", "x":17.25, "y":2.5},
|
||||||
|
{"label":"K30 (B2,D0)", "x":0, "y":3.5, "w":1.75},
|
||||||
|
{"label":"K31 (B2,D1)", "x":1.75, "y":3.5},
|
||||||
|
{"label":"K32 (B2,D2)", "x":2.75, "y":3.5},
|
||||||
|
{"label":"K33 (B2,D3)", "x":3.75, "y":3.5},
|
||||||
|
{"label":"K34 (B2,D5)", "x":4.75, "y":3.5},
|
||||||
|
{"label":"K35 (B2,D4)", "x":5.75, "y":3.5},
|
||||||
|
{"label":"K36 (B2,D6)", "x":6.75, "y":3.5},
|
||||||
|
{"label":"K37 (B2,D7)", "x":7.75, "y":3.5},
|
||||||
|
{"label":"K38 (B2,B4)", "x":8.75, "y":3.5},
|
||||||
|
{"label":"K98 (F4,B4)", "x":9.75, "y":3.5},
|
||||||
|
{"label":"K97 (F4,D7)", "x":10.75, "y":3.5},
|
||||||
|
{"label":"K95 (F4,D4)", "x":11.75, "y":3.5},
|
||||||
|
{"label":"K93 (F4,D3)", "x":12.75, "y":3.5, "w":2.25},
|
||||||
|
{"label":"K40 (B3,D0)", "x":0, "y":4.5, "w":2.25},
|
||||||
|
{"label":"K42 (B3,D2)", "x":2.25, "y":4.5},
|
||||||
|
{"label":"K43 (B3,D3)", "x":3.25, "y":4.5},
|
||||||
|
{"label":"K44 (B3,D5)", "x":4.25, "y":4.5},
|
||||||
|
{"label":"K45 (B3,D4)", "x":5.25, "y":4.5},
|
||||||
|
{"label":"K46 (B3,D6)", "x":6.25, "y":4.5},
|
||||||
|
{"label":"K47 (B3,D7)", "x":7.25, "y":4.5},
|
||||||
|
{"label":"K48 (B3,B4)", "x":8.25, "y":4.5},
|
||||||
|
{"label":"KA8 (F1,B4)", "x":9.25, "y":4.5},
|
||||||
|
{"label":"KA7 (F1,D7)", "x":10.25, "y":4.5},
|
||||||
|
{"label":"KA5 (F1,D4)", "x":11.25, "y":4.5},
|
||||||
|
{"label":"KA4 (F1,D5)", "x":12.25, "y":4.5, "w":2.75},
|
||||||
|
{"label":"K92 (F4,D2)", "x":16.25, "y":4.5},
|
||||||
|
{"label":"K50 (B7,D0)", "x":0, "y":5.5, "w":1.5},
|
||||||
|
{"label":"K51 (B7,D1)", "x":1.5, "y":5.5},
|
||||||
|
{"label":"K52 (B7,D2)", "x":2.5, "y":5.5, "w":1.5},
|
||||||
|
{"label":"K56 (B7,D6)", "x":4, "y":5.5, "w":7},
|
||||||
|
{"label":"K57 (B7,D7)", "x":11, "y":5.5, "w":1.5},
|
||||||
|
{"label":"K54 (B7,D5)", "x":12.5, "y":5.5},
|
||||||
|
{"label":"K53 (B7,D3)", "x":13.5, "y":5.5, "w":1.5},
|
||||||
|
{"label":"KA6 (F1,D6)", "x":15.25, "y":5.5},
|
||||||
|
{"label":"KA2 (F1,D2)", "x":16.25, "y":5.5},
|
||||||
|
{"label":"KA1 (F1,D1)", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/* Copyright 2020 MechMerlin
|
||||||
|
*
|
||||||
|
* 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_ansi_tsangan(
|
||||||
|
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(1), KC_PSCR, KC_SLCK, KC_PAUS,
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[1] = LAYOUT_ansi_tsangan(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/* Copyright 2020 MechMerlin
|
||||||
|
*
|
||||||
|
* 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_ansi_standard(
|
||||||
|
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(1), 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_APP, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[1] = LAYOUT_ansi_standard(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/* Copyright 2020 MechMerlin
|
||||||
|
*
|
||||||
|
* 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_ansi_tsangan(
|
||||||
|
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(1), KC_PSCR, KC_SLCK, KC_PAUS,
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[1] = LAYOUT_ansi_tsangan(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#define DYNAMIC_KEYMAP_LAYER_COUNT 3
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/* Copyright 2020 MechMerlin
|
||||||
|
*
|
||||||
|
* 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_ansi_tsangan(
|
||||||
|
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(1), KC_PSCR, KC_SLCK, KC_PAUS,
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[1] = LAYOUT_ansi_tsangan(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[2] = LAYOUT_ansi_tsangan(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Exclusive E8.5 Hotswap
|
||||||
|
|
||||||
|
Custom hotswap PCB for Exclusive E8.5.
|
||||||
|
|
||||||
|
The switch matrix is identical between all three PCB variants of this board. Choose the correct LAYOUT that best matches the physical LAYOUT of your PCB.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
|
||||||
|
* Hardware Supported: E8.5 Hotswap/Soldered, atmega32u4
|
||||||
|
* Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=103520)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make exclusive/e85:default
|
||||||
|
|
||||||
|
**Reset Key**: The board can be reset by shorting the two holes underneath the PCB, or pressing the reset button on the reverse side.
|
||||||
|
|
||||||
|
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 = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
|
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
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE = no # Audio output
|
||||||
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
LTO_ENABLE = yes
|
||||||
@@ -8,3 +8,4 @@ All files related to firmware of keyboards designed by Exclusive.
|
|||||||
* [e6-v2](./e6v2/): maintainers [MechMerlin](https://github.com/mechmerlin), [amnesia0287](https://github.com/amnesia0287)
|
* [e6-v2](./e6v2/): maintainers [MechMerlin](https://github.com/mechmerlin), [amnesia0287](https://github.com/amnesia0287)
|
||||||
* [e7-v1](./e7v1): maintainer [masterzen](https://github.com/masterzen)
|
* [e7-v1](./e7v1): maintainer [masterzen](https://github.com/masterzen)
|
||||||
* [e6.5](./e65): maintainer [masterzen](https://github.com/masterzen)
|
* [e6.5](./e65): maintainer [masterzen](https://github.com/masterzen)
|
||||||
|
* [e8.5](./e85): maintainer [MechMerlin](https://github.com/mechmerlin)
|
||||||
@@ -1 +0,0 @@
|
|||||||
SRC += engine.c
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
SRC += engine.c
|
|
||||||
@@ -54,11 +54,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define SUART_IN_BIT 1
|
#define SUART_IN_BIT 1
|
||||||
|
|
||||||
#ifdef __AVR_ATmega32U4__
|
#ifdef __AVR_ATmega32U4__
|
||||||
/* iom32u4.h has no definition of UCSR1D. copy from iom32u2.h */
|
|
||||||
#define UCSR1D _SFR_MEM8(0xCB)
|
|
||||||
#define RTSEN 0
|
|
||||||
#define CTSEN 1
|
|
||||||
|
|
||||||
#define SERIAL_UART_BAUD 115200
|
#define SERIAL_UART_BAUD 115200
|
||||||
#define SERIAL_UART_DATA UDR1
|
#define SERIAL_UART_DATA UDR1
|
||||||
#define SERIAL_UART_UBRR ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
|
#define SERIAL_UART_UBRR ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
|
||||||
|
|||||||
@@ -54,11 +54,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define SUART_IN_BIT 1
|
#define SUART_IN_BIT 1
|
||||||
|
|
||||||
#ifdef __AVR_ATmega32U4__
|
#ifdef __AVR_ATmega32U4__
|
||||||
/* iom32u4.h has no definition of UCSR1D. copy from iom32u2.h */
|
|
||||||
#define UCSR1D _SFR_MEM8(0xCB)
|
|
||||||
#define RTSEN 0
|
|
||||||
#define CTSEN 1
|
|
||||||
|
|
||||||
#define SERIAL_UART_BAUD 115200
|
#define SERIAL_UART_BAUD 115200
|
||||||
#define SERIAL_UART_DATA UDR1
|
#define SERIAL_UART_DATA UDR1
|
||||||
#define SERIAL_UART_UBRR ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
|
#define SERIAL_UART_UBRR ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
BOOTLOADER = caterina
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
@@ -7,294 +7,312 @@
|
|||||||
"layouts": {
|
"layouts": {
|
||||||
"LAYOUT_all": {
|
"LAYOUT_all": {
|
||||||
"layout": [
|
"layout": [
|
||||||
{"x":0, "y":0},
|
{"x": 0, "y": 0},
|
||||||
{"x":2, "y":0},
|
{"x": 2, "y": 0},
|
||||||
{"x":3, "y":0},
|
{"x": 3, "y": 0},
|
||||||
{"x":4, "y":0},
|
{"x": 4, "y": 0},
|
||||||
{"x":5, "y":0},
|
{"x": 5, "y": 0},
|
||||||
{"x":6.5, "y":0},
|
{"x": 6.5, "y": 0},
|
||||||
{"x":7.5, "y":0},
|
{"x": 7.5, "y": 0},
|
||||||
{"x":8.5, "y":0},
|
{"x": 8.5, "y": 0},
|
||||||
{"x":9.5, "y":0},
|
{"x": 9.5, "y": 0},
|
||||||
{"x":11, "y":0},
|
{"x": 11, "y": 0},
|
||||||
{"x":12, "y":0},
|
{"x": 12, "y": 0},
|
||||||
{"x":13, "y":0},
|
{"x": 13, "y": 0},
|
||||||
{"x":14, "y":0},
|
{"x": 14, "y": 0},
|
||||||
{"x":15.25, "y":0},
|
|
||||||
{"x":16.25, "y":0},
|
{"x": 15.25, "y": 0},
|
||||||
{"x":17.25, "y":0},
|
{"x": 16.25, "y": 0},
|
||||||
|
{"x": 17.25, "y": 0},
|
||||||
|
|
||||||
|
{"x": 0, "y": 1.25},
|
||||||
|
{"x": 1, "y": 1.25},
|
||||||
|
{"x": 2, "y": 1.25},
|
||||||
|
{"x": 3, "y": 1.25},
|
||||||
|
{"x": 4, "y": 1.25},
|
||||||
|
{"x": 5, "y": 1.25},
|
||||||
|
{"x": 6, "y": 1.25},
|
||||||
|
{"x": 7, "y": 1.25},
|
||||||
|
{"x": 8, "y": 1.25},
|
||||||
|
{"x": 9, "y": 1.25},
|
||||||
|
{"x": 10, "y": 1.25},
|
||||||
|
{"x": 11, "y": 1.25},
|
||||||
|
{"x": 12, "y": 1.25},
|
||||||
|
{"x": 13, "y": 1.25},
|
||||||
|
{"x": 14, "y": 1.25},
|
||||||
|
|
||||||
|
{"x": 15.25, "y": 1.25},
|
||||||
|
{"x": 16.25, "y": 1.25},
|
||||||
|
{"x": 17.25, "y": 1.25},
|
||||||
|
|
||||||
{"x":0, "y":1.25},
|
{"x": 0, "y": 2.25, "w": 1.5},
|
||||||
{"x":1, "y":1.25},
|
{"x": 1.5, "y": 2.25},
|
||||||
{"x":2, "y":1.25},
|
{"x": 2.5, "y": 2.25},
|
||||||
{"x":3, "y":1.25},
|
{"x": 3.5, "y": 2.25},
|
||||||
{"x":4, "y":1.25},
|
{"x": 4.5, "y": 2.25},
|
||||||
{"x":5, "y":1.25},
|
{"x": 5.5, "y": 2.25},
|
||||||
{"x":6, "y":1.25},
|
{"x": 6.5, "y": 2.25},
|
||||||
{"x":7, "y":1.25},
|
{"x": 7.5, "y": 2.25},
|
||||||
{"x":8, "y":1.25},
|
{"x": 8.5, "y": 2.25},
|
||||||
{"x":9, "y":1.25},
|
{"x": 9.5, "y": 2.25},
|
||||||
{"x":10, "y":1.25},
|
{"x": 10.5, "y": 2.25},
|
||||||
{"x":11, "y":1.25},
|
{"x": 11.5, "y": 2.25},
|
||||||
{"x":12, "y":1.25},
|
{"x": 12.5, "y": 2.25},
|
||||||
{"x":13, "y":1.25},
|
{"x": 13.5, "y": 2.25, "w": 1.5},
|
||||||
{"x":14, "y":1.25},
|
|
||||||
{"x":15.25, "y":1.25},
|
{"x": 15.25, "y": 2.25},
|
||||||
{"x":16.25, "y":1.25},
|
{"x": 16.25, "y": 2.25},
|
||||||
{"x":17.25, "y":1.25},
|
{"x": 17.25, "y": 2.25},
|
||||||
|
|
||||||
{"x":0, "y":2.25, "w":1.5},
|
{"x": 0, "y": 3.25, "w": 1.75},
|
||||||
{"x":1.5, "y":2.25},
|
{"x": 1.75, "y": 3.25},
|
||||||
{"x":2.5, "y":2.25},
|
{"x": 2.75, "y": 3.25},
|
||||||
{"x":3.5, "y":2.25},
|
{"x": 3.75, "y": 3.25},
|
||||||
{"x":4.5, "y":2.25},
|
{"x": 4.75, "y": 3.25},
|
||||||
{"x":5.5, "y":2.25},
|
{"x": 5.75, "y": 3.25},
|
||||||
{"x":6.5, "y":2.25},
|
{"x": 6.75, "y": 3.25},
|
||||||
{"x":7.5, "y":2.25},
|
{"x": 7.75, "y": 3.25},
|
||||||
{"x":8.5, "y":2.25},
|
{"x": 8.75, "y": 3.25},
|
||||||
{"x":9.5, "y":2.25},
|
{"x": 9.75, "y": 3.25},
|
||||||
{"x":10.5, "y":2.25},
|
{"x": 10.75, "y": 3.25},
|
||||||
{"x":11.5, "y":2.25},
|
{"x": 11.75, "y": 3.25},
|
||||||
{"x":12.5, "y":2.25},
|
{"x": 12.75, "y": 3.25},
|
||||||
{"x":13.5, "y":2.25, "w":1.5},
|
{"x": 13.75, "y": 3.25, "w": 1.25},
|
||||||
{"x":15.25, "y":2.25},
|
|
||||||
{"x":16.25, "y":2.25},
|
{"x": 0, "y": 4.25, "w": 1.25},
|
||||||
{"x":17.25, "y":2.25},
|
{"x": 1.25, "y": 4.25},
|
||||||
|
{"x": 2.25, "y": 4.25},
|
||||||
{"x":0, "y":3.25, "w":1.75},
|
{"x": 3.25, "y": 4.25},
|
||||||
{"x":1.75, "y":3.25},
|
{"x": 4.25, "y": 4.25},
|
||||||
{"x":2.75, "y":3.25},
|
{"x": 5.25, "y": 4.25},
|
||||||
{"x":3.75, "y":3.25},
|
{"x": 6.25, "y": 4.25},
|
||||||
{"x":4.75, "y":3.25},
|
{"x": 7.25, "y": 4.25},
|
||||||
{"x":5.75, "y":3.25},
|
{"x": 8.25, "y": 4.25},
|
||||||
{"x":6.75, "y":3.25},
|
{"x": 9.25, "y": 4.25},
|
||||||
{"x":7.75, "y":3.25},
|
{"x": 10.25, "y": 4.25},
|
||||||
{"x":8.75, "y":3.25},
|
{"x": 11.25, "y": 4.25},
|
||||||
{"x":9.75, "y":3.25},
|
{"x": 12.25, "y": 4.25, "w": 1.75},
|
||||||
{"x":10.75, "y":3.25},
|
{"x": 14, "y": 4.25},
|
||||||
{"x":11.75, "y":3.25},
|
|
||||||
{"x":12.75, "y":3.25},
|
{"x": 16.25, "y": 4.25},
|
||||||
|
|
||||||
{"x":13.75, "y":3.25, "w":1.25},
|
{"x": 0, "y": 5.25, "w": 1.25},
|
||||||
{"x":0, "y":4.25, "w":1.25},
|
{"x": 1.25, "y": 5.25, "w": 1.25},
|
||||||
{"x":1.25, "y":4.25},
|
{"x": 2.5, "y": 5.25, "w": 1.25},
|
||||||
{"x":2.25, "y":4.25},
|
{"x": 3.75, "y": 5.25, "w": 2.25},
|
||||||
{"x":3.25, "y":4.25},
|
{"x": 6, "y": 5.25, "w": 1.25},
|
||||||
{"x":4.25, "y":4.25},
|
{"x": 7.25, "y": 5.25, "w": 2.75},
|
||||||
{"x":5.25, "y":4.25},
|
{"x": 10, "y": 5.25, "w": 1.25},
|
||||||
{"x":6.25, "y":4.25},
|
{"x": 11.25, "y": 5.25, "w": 1.25},
|
||||||
{"x":7.25, "y":4.25},
|
{"x": 12.5, "y": 5.25, "w": 1.25},
|
||||||
{"x":8.25, "y":4.25},
|
{"x": 13.75, "y": 5.25, "w": 1.25},
|
||||||
{"x":9.25, "y":4.25},
|
|
||||||
{"x":10.25, "y":4.25},
|
{"x": 15.25, "y": 5.25},
|
||||||
{"x":11.25, "y":4.25},
|
{"x": 16.25, "y": 5.25},
|
||||||
{"x":12.25, "y":4.25, "w":2.75},
|
{"x": 17.25, "y": 5.25}
|
||||||
{"x":16.25, "y":4.25},
|
|
||||||
|
|
||||||
{"x":0, "y":5.25, "w":1.25},
|
|
||||||
{"x":1.25, "y":5.25, "w":1.25},
|
|
||||||
{"x":2.5, "y":5.25, "w":1.25},
|
|
||||||
{"x":3.75, "y":5.25, "w":6.25},
|
|
||||||
{"x":10, "y":5.25, "w":1.25},
|
|
||||||
{"x":11.25, "y":5.25, "w":1.25},
|
|
||||||
{"x":12.5, "y":5.25, "w":1.25},
|
|
||||||
{"x":13.75, "y":5.25, "w":1.25},
|
|
||||||
{"x":15.25, "y":5.25},
|
|
||||||
{"x":16.25, "y":5.25},
|
|
||||||
{"x":17.25, "y":5.25}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"LAYOUT_tkl_ansi": {
|
"LAYOUT_tkl_ansi": {
|
||||||
"layout": [
|
"layout": [
|
||||||
{"x":0, "y":0},
|
{"x": 0, "y": 0},
|
||||||
{"x":2, "y":0},
|
{"x": 2, "y": 0},
|
||||||
{"x":3, "y":0},
|
{"x": 3, "y": 0},
|
||||||
{"x":4, "y":0},
|
{"x": 4, "y": 0},
|
||||||
{"x":5, "y":0},
|
{"x": 5, "y": 0},
|
||||||
{"x":6.5, "y":0},
|
{"x": 6.5, "y": 0},
|
||||||
{"x":7.5, "y":0},
|
{"x": 7.5, "y": 0},
|
||||||
{"x":8.5, "y":0},
|
{"x": 8.5, "y": 0},
|
||||||
{"x":9.5, "y":0},
|
{"x": 9.5, "y": 0},
|
||||||
{"x":11, "y":0},
|
{"x": 11, "y": 0},
|
||||||
{"x":12, "y":0},
|
{"x": 12, "y": 0},
|
||||||
{"x":13, "y":0},
|
{"x": 13, "y": 0},
|
||||||
{"x":14, "y":0},
|
{"x": 14, "y": 0},
|
||||||
{"x":15.25, "y":0},
|
|
||||||
{"x":16.25, "y":0},
|
|
||||||
{"x":17.25, "y":0},
|
|
||||||
|
|
||||||
{"x":0, "y":1.25},
|
{"x": 15.25, "y": 0},
|
||||||
{"x":1, "y":1.25},
|
{"x": 16.25, "y": 0},
|
||||||
{"x":2, "y":1.25},
|
{"x": 17.25, "y": 0},
|
||||||
{"x":3, "y":1.25},
|
|
||||||
{"x":4, "y":1.25},
|
|
||||||
{"x":5, "y":1.25},
|
|
||||||
{"x":6, "y":1.25},
|
|
||||||
{"x":7, "y":1.25},
|
|
||||||
{"x":8, "y":1.25},
|
|
||||||
{"x":9, "y":1.25},
|
|
||||||
{"x":10, "y":1.25},
|
|
||||||
{"x":11, "y":1.25},
|
|
||||||
{"x":12, "y":1.25},
|
|
||||||
{"x":13, "y":1.25, "w":2},
|
|
||||||
{"x":15.25, "y":1.25},
|
|
||||||
{"x":16.25, "y":1.25},
|
|
||||||
{"x":17.25, "y":1.25},
|
|
||||||
|
|
||||||
{"x":0, "y":2.25, "w":1.5},
|
{"x": 0, "y": 1.25},
|
||||||
{"x":1.5, "y":2.25},
|
{"x": 1, "y": 1.25},
|
||||||
{"x":2.5, "y":2.25},
|
{"x": 2, "y": 1.25},
|
||||||
{"x":3.5, "y":2.25},
|
{"x": 3, "y": 1.25},
|
||||||
{"x":4.5, "y":2.25},
|
{"x": 4, "y": 1.25},
|
||||||
{"x":5.5, "y":2.25},
|
{"x": 5, "y": 1.25},
|
||||||
{"x":6.5, "y":2.25},
|
{"x": 6, "y": 1.25},
|
||||||
{"x":7.5, "y":2.25},
|
{"x": 7, "y": 1.25},
|
||||||
{"x":8.5, "y":2.25},
|
{"x": 8, "y": 1.25},
|
||||||
{"x":9.5, "y":2.25},
|
{"x": 9, "y": 1.25},
|
||||||
{"x":10.5, "y":2.25},
|
{"x": 10, "y": 1.25},
|
||||||
{"x":11.5, "y":2.25},
|
{"x": 11, "y": 1.25},
|
||||||
{"x":12.5, "y":2.25},
|
{"x": 12, "y": 1.25},
|
||||||
{"x":13.5, "y":2.25, "w":1.5},
|
{"x": 13, "y": 1.25, "w": 2},
|
||||||
{"x":15.25, "y":2.25},
|
|
||||||
{"x":16.25, "y":2.25},
|
|
||||||
{"x":17.25, "y":2.25},
|
|
||||||
|
|
||||||
{"x":0, "y":3.25, "w":1.75},
|
{"x": 15.25, "y": 1.25},
|
||||||
{"x":1.75, "y":3.25},
|
{"x": 16.25, "y": 1.25},
|
||||||
{"x":2.75, "y":3.25},
|
{"x": 17.25, "y": 1.25},
|
||||||
{"x":3.75, "y":3.25},
|
|
||||||
{"x":4.75, "y":3.25},
|
|
||||||
{"x":5.75, "y":3.25},
|
|
||||||
{"x":6.75, "y":3.25},
|
|
||||||
{"x":7.75, "y":3.25},
|
|
||||||
{"x":8.75, "y":3.25},
|
|
||||||
{"x":9.75, "y":3.25},
|
|
||||||
{"x":10.75, "y":3.25},
|
|
||||||
{"x":11.75, "y":3.25},
|
|
||||||
{"x":12.75, "y":3.25, "w":2.25},
|
|
||||||
|
|
||||||
{"x":0, "y":4.25, "w":2.25},
|
{"x": 0, "y": 2.25, "w": 1.5},
|
||||||
{"x":2.25, "y":4.25},
|
{"x": 1.5, "y": 2.25},
|
||||||
{"x":3.25, "y":4.25},
|
{"x": 2.5, "y": 2.25},
|
||||||
{"x":4.25, "y":4.25},
|
{"x": 3.5, "y": 2.25},
|
||||||
{"x":5.25, "y":4.25},
|
{"x": 4.5, "y": 2.25},
|
||||||
{"x":6.25, "y":4.25},
|
{"x": 5.5, "y": 2.25},
|
||||||
{"x":7.25, "y":4.25},
|
{"x": 6.5, "y": 2.25},
|
||||||
{"x":8.25, "y":4.25},
|
{"x": 7.5, "y": 2.25},
|
||||||
{"x":9.25, "y":4.25},
|
{"x": 8.5, "y": 2.25},
|
||||||
{"x":10.25, "y":4.25},
|
{"x": 9.5, "y": 2.25},
|
||||||
{"x":11.25, "y":4.25},
|
{"x": 10.5, "y": 2.25},
|
||||||
{"x":12.25, "y":4.25, "w":2.75},
|
{"x": 11.5, "y": 2.25},
|
||||||
{"x":16.25, "y":4.25},
|
{"x": 12.5, "y": 2.25},
|
||||||
|
{"x": 13.5, "y": 2.25, "w": 1.5},
|
||||||
|
|
||||||
{"x":0, "y":5.25, "w":1.25},
|
{"x": 15.25, "y": 2.25},
|
||||||
{"x":1.25, "y":5.25, "w":1.25},
|
{"x": 16.25, "y": 2.25},
|
||||||
{"x":2.5, "y":5.25, "w":1.25},
|
{"x": 17.25, "y": 2.25},
|
||||||
{"x":3.75, "y":5.25, "w":6.25},
|
|
||||||
{"x":10, "y":5.25, "w":1.25},
|
{"x": 0, "y": 3.25, "w": 1.75},
|
||||||
{"x":11.25, "y":5.25, "w":1.25},
|
{"x": 1.75, "y": 3.25},
|
||||||
{"x":12.5, "y":5.25, "w":1.25},
|
{"x": 2.75, "y": 3.25},
|
||||||
{"x":13.75, "y":5.25, "w":1.25},
|
{"x": 3.75, "y": 3.25},
|
||||||
{"x":15.25, "y":5.25},
|
{"x": 4.75, "y": 3.25},
|
||||||
{"x":16.25, "y":5.25},
|
{"x": 5.75, "y": 3.25},
|
||||||
{"x":17.25, "y":5.25}
|
{"x": 6.75, "y": 3.25},
|
||||||
|
{"x": 7.75, "y": 3.25},
|
||||||
|
{"x": 8.75, "y": 3.25},
|
||||||
|
{"x": 9.75, "y": 3.25},
|
||||||
|
{"x": 10.75, "y": 3.25},
|
||||||
|
{"x": 11.75, "y": 3.25},
|
||||||
|
{"x": 12.75, "y": 3.25, "w": 2.25},
|
||||||
|
|
||||||
|
{"x": 0, "y": 4.25, "w": 2.25},
|
||||||
|
{"x": 2.25, "y": 4.25},
|
||||||
|
{"x": 3.25, "y": 4.25},
|
||||||
|
{"x": 4.25, "y": 4.25},
|
||||||
|
{"x": 5.25, "y": 4.25},
|
||||||
|
{"x": 6.25, "y": 4.25},
|
||||||
|
{"x": 7.25, "y": 4.25},
|
||||||
|
{"x": 8.25, "y": 4.25},
|
||||||
|
{"x": 9.25, "y": 4.25},
|
||||||
|
{"x": 10.25, "y": 4.25},
|
||||||
|
{"x": 11.25, "y": 4.25},
|
||||||
|
{"x": 12.25, "y": 4.25, "w": 2.75},
|
||||||
|
|
||||||
|
{"x": 16.25, "y": 4.25},
|
||||||
|
|
||||||
|
{"x": 0, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 1.25, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 2.5, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 3.75, "y": 5.25, "w": 6.25},
|
||||||
|
{"x": 10, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 11.25, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 12.5, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 13.75, "y": 5.25, "w": 1.25},
|
||||||
|
|
||||||
|
{"x": 15.25, "y": 5.25},
|
||||||
|
{"x": 16.25, "y": 5.25},
|
||||||
|
{"x": 17.25, "y": 5.25}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"LAYOUT_tkl_iso": {
|
"LAYOUT_tkl_iso": {
|
||||||
"layout": [
|
"layout": [
|
||||||
{"x":0, "y":0},
|
{"x": 0, "y": 0},
|
||||||
{"x":2, "y":0},
|
{"x": 2, "y": 0},
|
||||||
{"x":3, "y":0},
|
{"x": 3, "y": 0},
|
||||||
{"x":4, "y":0},
|
{"x": 4, "y": 0},
|
||||||
{"x":5, "y":0},
|
{"x": 5, "y": 0},
|
||||||
{"x":6.5, "y":0},
|
{"x": 6.5, "y": 0},
|
||||||
{"x":7.5, "y":0},
|
{"x": 7.5, "y": 0},
|
||||||
{"x":8.5, "y":0},
|
{"x": 8.5, "y": 0},
|
||||||
{"x":9.5, "y":0},
|
{"x": 9.5, "y": 0},
|
||||||
{"x":11, "y":0},
|
{"x": 11, "y": 0},
|
||||||
{"x":12, "y":0},
|
{"x": 12, "y": 0},
|
||||||
{"x":13, "y":0},
|
{"x": 13, "y": 0},
|
||||||
{"x":14, "y":0},
|
{"x": 14, "y": 0},
|
||||||
{"x":15.25, "y":0},
|
|
||||||
{"x":16.25, "y":0},
|
|
||||||
{"x":17.25, "y":0},
|
|
||||||
|
|
||||||
{"x":0, "y":1.25},
|
{"x": 15.25, "y": 0},
|
||||||
{"x":1, "y":1.25},
|
{"x": 16.25, "y": 0},
|
||||||
{"x":2, "y":1.25},
|
{"x": 17.25, "y": 0},
|
||||||
{"x":3, "y":1.25},
|
|
||||||
{"x":4, "y":1.25},
|
|
||||||
{"x":5, "y":1.25},
|
|
||||||
{"x":6, "y":1.25},
|
|
||||||
{"x":7, "y":1.25},
|
|
||||||
{"x":8, "y":1.25},
|
|
||||||
{"x":9, "y":1.25},
|
|
||||||
{"x":10, "y":1.25},
|
|
||||||
{"x":11, "y":1.25},
|
|
||||||
{"x":12, "y":1.25},
|
|
||||||
{"x":13, "y":1.25, "w":2},
|
|
||||||
{"x":15.25, "y":1.25},
|
|
||||||
{"x":16.25, "y":1.25},
|
|
||||||
{"x":17.25, "y":1.25},
|
|
||||||
|
|
||||||
{"x":0, "y":2.25, "w":1.5},
|
{"x": 0, "y": 1.25},
|
||||||
{"x":1.5, "y":2.25},
|
{"x": 1, "y": 1.25},
|
||||||
{"x":2.5, "y":2.25},
|
{"x": 2, "y": 1.25},
|
||||||
{"x":3.5, "y":2.25},
|
{"x": 3, "y": 1.25},
|
||||||
{"x":4.5, "y":2.25},
|
{"x": 4, "y": 1.25},
|
||||||
{"x":5.5, "y":2.25},
|
{"x": 5, "y": 1.25},
|
||||||
{"x":6.5, "y":2.25},
|
{"x": 6, "y": 1.25},
|
||||||
{"x":7.5, "y":2.25},
|
{"x": 7, "y": 1.25},
|
||||||
{"x":8.5, "y":2.25},
|
{"x": 8, "y": 1.25},
|
||||||
{"x":9.5, "y":2.25},
|
{"x": 9, "y": 1.25},
|
||||||
{"x":10.5, "y":2.25},
|
{"x": 10, "y": 1.25},
|
||||||
{"x":11.5, "y":2.25},
|
{"x": 11, "y": 1.25},
|
||||||
{"x":12.5, "y":2.25},
|
{"x": 12, "y": 1.25},
|
||||||
{"x":15.25, "y":2.25},
|
{"x": 13, "y": 1.25, "w": 2},
|
||||||
{"x":16.25, "y":2.25},
|
|
||||||
{"x":17.25, "y":2.25},
|
|
||||||
|
|
||||||
{"x":0, "y":3.25, "w":1.75},
|
{"x": 15.25, "y": 1.25},
|
||||||
{"x":1.75, "y":3.25},
|
{"x": 16.25, "y": 1.25},
|
||||||
{"x":2.75, "y":3.25},
|
{"x": 17.25, "y": 1.25},
|
||||||
{"x":3.75, "y":3.25},
|
|
||||||
{"x":4.75, "y":3.25},
|
|
||||||
{"x":5.75, "y":3.25},
|
|
||||||
{"x":6.75, "y":3.25},
|
|
||||||
{"x":7.75, "y":3.25},
|
|
||||||
{"x":8.75, "y":3.25},
|
|
||||||
{"x":9.75, "y":3.25},
|
|
||||||
{"x":10.75, "y":3.25},
|
|
||||||
{"x":11.75, "y":3.25},
|
|
||||||
{"x":12.75, "y":3.25},
|
|
||||||
{"x":13.75, "y":2.25, "w":1.25, "h":2},
|
|
||||||
|
|
||||||
{"x":0, "y":4.25, "w":1.25},
|
{"x": 0, "y": 2.25, "w": 1.5},
|
||||||
{"x":1.25, "y":4.25},
|
{"x": 1.5, "y": 2.25},
|
||||||
{"x":2.25, "y":4.25},
|
{"x": 2.5, "y": 2.25},
|
||||||
{"x":3.25, "y":4.25},
|
{"x": 3.5, "y": 2.25},
|
||||||
{"x":4.25, "y":4.25},
|
{"x": 4.5, "y": 2.25},
|
||||||
{"x":5.25, "y":4.25},
|
{"x": 5.5, "y": 2.25},
|
||||||
{"x":6.25, "y":4.25},
|
{"x": 6.5, "y": 2.25},
|
||||||
{"x":7.25, "y":4.25},
|
{"x": 7.5, "y": 2.25},
|
||||||
{"x":8.25, "y":4.25},
|
{"x": 8.5, "y": 2.25},
|
||||||
{"x":9.25, "y":4.25},
|
{"x": 9.5, "y": 2.25},
|
||||||
{"x":10.25, "y":4.25},
|
{"x": 10.5, "y": 2.25},
|
||||||
{"x":11.25, "y":4.25},
|
{"x": 11.5, "y": 2.25},
|
||||||
{"x":12.25, "y":4.25, "w":2.75},
|
{"x": 12.5, "y": 2.25},
|
||||||
{"x":16.25, "y":4.25},
|
|
||||||
|
|
||||||
{"x":0, "y":5.25, "w":1.25},
|
{"x": 15.25, "y": 2.25},
|
||||||
{"x":1.25, "y":5.25, "w":1.25},
|
{"x": 16.25, "y": 2.25},
|
||||||
{"x":2.5, "y":5.25, "w":1.25},
|
{"x": 17.25, "y": 2.25},
|
||||||
{"x":3.75, "y":5.25, "w":6.25},
|
|
||||||
{"x":10, "y":5.25, "w":1.25},
|
{"x": 0, "y": 3.25, "w": 1.75},
|
||||||
{"x":11.25, "y":5.25, "w":1.25},
|
{"x": 1.75, "y": 3.25},
|
||||||
{"x":12.5, "y":5.25, "w":1.25},
|
{"x": 2.75, "y": 3.25},
|
||||||
{"x":13.75, "y":5.25, "w":1.25},
|
{"x": 3.75, "y": 3.25},
|
||||||
{"x":15.25, "y":5.25},
|
{"x": 4.75, "y": 3.25},
|
||||||
{"x":16.25, "y":5.25},
|
{"x": 5.75, "y": 3.25},
|
||||||
{"x":17.25, "y":5.25}
|
{"x": 6.75, "y": 3.25},
|
||||||
|
{"x": 7.75, "y": 3.25},
|
||||||
|
{"x": 8.75, "y": 3.25},
|
||||||
|
{"x": 9.75, "y": 3.25},
|
||||||
|
{"x": 10.75, "y": 3.25},
|
||||||
|
{"x": 11.75, "y": 3.25},
|
||||||
|
{"x": 12.75, "y": 3.25},
|
||||||
|
{"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
|
||||||
|
|
||||||
|
{"x": 0, "y": 4.25, "w": 1.25},
|
||||||
|
{"x": 1.25, "y": 4.25},
|
||||||
|
{"x": 2.25, "y": 4.25},
|
||||||
|
{"x": 3.25, "y": 4.25},
|
||||||
|
{"x": 4.25, "y": 4.25},
|
||||||
|
{"x": 5.25, "y": 4.25},
|
||||||
|
{"x": 6.25, "y": 4.25},
|
||||||
|
{"x": 7.25, "y": 4.25},
|
||||||
|
{"x": 8.25, "y": 4.25},
|
||||||
|
{"x": 9.25, "y": 4.25},
|
||||||
|
{"x": 10.25, "y": 4.25},
|
||||||
|
{"x": 11.25, "y": 4.25},
|
||||||
|
{"x": 12.25, "y": 4.25, "w": 2.75},
|
||||||
|
|
||||||
|
{"x": 16.25, "y": 4.25},
|
||||||
|
|
||||||
|
{"x": 0, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 1.25, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 2.5, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 3.75, "y": 5.25, "w": 6.25},
|
||||||
|
{"x": 10, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 11.25, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 12.5, "y": 5.25, "w": 1.25},
|
||||||
|
{"x": 13.75, "y": 5.25, "w": 1.25},
|
||||||
|
|
||||||
|
{"x": 15.25, "y": 5.25},
|
||||||
|
{"x": 16.25, "y": 5.25},
|
||||||
|
{"x": 17.25, "y": 5.25}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,4 +24,6 @@
|
|||||||
#include "rev2.h"
|
#include "rev2.h"
|
||||||
#elif defined(KEYBOARD_montsinger_rebound_rev3)
|
#elif defined(KEYBOARD_montsinger_rebound_rev3)
|
||||||
#include "rev3.h"
|
#include "rev3.h"
|
||||||
|
#elif defined(KEYBOARD_montsinger_rebound_rev4)
|
||||||
|
#include "rev4.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Ross Montsinger
|
||||||
|
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 0x552F
|
||||||
|
#define DEVICE_VER 0x0002
|
||||||
|
#define MANUFACTURER Montsinger
|
||||||
|
#define PRODUCT Rebound
|
||||||
|
#define DESCRIPTION "A conjoined Let's Split"
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_COLS 7
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 { D1, D0, D4, C6, F7, F6, F5, F4 }
|
||||||
|
#define MATRIX_COL_PINS { D7, E6, B4, B5, B2, B3, B1 }
|
||||||
|
#define UNUSED_PINS { B6 }
|
||||||
|
|
||||||
|
#define ENCODERS_PAD_A { D2 }
|
||||||
|
#define ENCODERS_PAD_B { D3 }
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION ROW2COL
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
{
|
||||||
|
"keyboard":"montsinger/rebound/rev4",
|
||||||
|
"url": "https://montsinger.net",
|
||||||
|
"maintainer": "rossman360",
|
||||||
|
"width": 13,
|
||||||
|
"height": 4,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_all": {
|
||||||
|
"layout": [
|
||||||
|
{"x":0, "y":0},
|
||||||
|
{"x":1, "y":0},
|
||||||
|
{"x":2, "y":0},
|
||||||
|
{"x":3, "y":0},
|
||||||
|
{"x":4, "y":0},
|
||||||
|
{"x":5, "y":0},
|
||||||
|
|
||||||
|
{"x":7, "y":0},
|
||||||
|
{"x":8, "y":0},
|
||||||
|
{"x":9, "y":0},
|
||||||
|
{"x":10, "y":0},
|
||||||
|
{"x":11, "y":0},
|
||||||
|
{"x":12, "y":0},
|
||||||
|
|
||||||
|
{"x":0, "y":1},
|
||||||
|
{"x":1, "y":1},
|
||||||
|
{"x":2, "y":1},
|
||||||
|
{"x":3, "y":1},
|
||||||
|
{"x":4, "y":1},
|
||||||
|
{"x":5, "y":1},
|
||||||
|
{"x":6, "y":1},
|
||||||
|
{"x":7, "y":1},
|
||||||
|
{"x":8, "y":1},
|
||||||
|
{"x":9, "y":1},
|
||||||
|
{"x":10, "y":1},
|
||||||
|
{"x":11, "y":1},
|
||||||
|
{"x":12, "y":1},
|
||||||
|
|
||||||
|
{"x":0, "y":2},
|
||||||
|
{"x":1, "y":2},
|
||||||
|
{"x":2, "y":2},
|
||||||
|
{"x":3, "y":2},
|
||||||
|
{"x":4, "y":2},
|
||||||
|
{"x":5, "y":2},
|
||||||
|
{"x":6, "y":2},
|
||||||
|
{"x":7, "y":2},
|
||||||
|
{"x":8, "y":2},
|
||||||
|
{"x":9, "y":2},
|
||||||
|
{"x":10, "y":2},
|
||||||
|
{"x":11, "y":2},
|
||||||
|
{"x":12, "y":2},
|
||||||
|
|
||||||
|
{"x":0, "y":3},
|
||||||
|
{"x":1, "y":3},
|
||||||
|
{"x":2, "y":3},
|
||||||
|
{"x":3, "y":3},
|
||||||
|
{"x":4, "y":3},
|
||||||
|
{"x":5, "y":3},
|
||||||
|
{"x":6, "y":3},
|
||||||
|
{"x":7, "y":3},
|
||||||
|
{"x":8, "y":3},
|
||||||
|
{"x":9, "y":3},
|
||||||
|
{"x":10, "y":3},
|
||||||
|
{"x":11, "y":3},
|
||||||
|
{"x":12, "y":3}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_ortho_4x12": {
|
||||||
|
"layout": [
|
||||||
|
|
||||||
|
{"x":0, "y":0},
|
||||||
|
{"x":1, "y":0},
|
||||||
|
{"x":2, "y":0},
|
||||||
|
{"x":3, "y":0},
|
||||||
|
{"x":4, "y":0},
|
||||||
|
{"x":5, "y":0},
|
||||||
|
|
||||||
|
{"x":7, "y":0},
|
||||||
|
{"x":8, "y":0},
|
||||||
|
{"x":9, "y":0},
|
||||||
|
{"x":10, "y":0},
|
||||||
|
{"x":11, "y":0},
|
||||||
|
{"x":12, "y":0},
|
||||||
|
|
||||||
|
{"x":0, "y":1},
|
||||||
|
{"x":1, "y":1},
|
||||||
|
{"x":2, "y":1},
|
||||||
|
{"x":3, "y":1},
|
||||||
|
{"x":4, "y":1},
|
||||||
|
{"x":5, "y":1},
|
||||||
|
|
||||||
|
{"x":7, "y":1},
|
||||||
|
{"x":8, "y":1},
|
||||||
|
{"x":9, "y":1},
|
||||||
|
{"x":10, "y":1},
|
||||||
|
{"x":11, "y":1},
|
||||||
|
{"x":12, "y":1},
|
||||||
|
|
||||||
|
{"x":0, "y":2},
|
||||||
|
{"x":1, "y":2},
|
||||||
|
{"x":2, "y":2},
|
||||||
|
{"x":3, "y":2},
|
||||||
|
{"x":4, "y":2},
|
||||||
|
{"x":5, "y":2},
|
||||||
|
|
||||||
|
{"x":7, "y":2},
|
||||||
|
{"x":8, "y":2},
|
||||||
|
{"x":9, "y":2},
|
||||||
|
{"x":10, "y":2},
|
||||||
|
{"x":11, "y":2},
|
||||||
|
{"x":12, "y":2},
|
||||||
|
|
||||||
|
{"x":0, "y":3},
|
||||||
|
{"x":1, "y":3},
|
||||||
|
{"x":2, "y":3},
|
||||||
|
{"x":3, "y":3},
|
||||||
|
{"x":4, "y":3},
|
||||||
|
{"x":5, "y":3},
|
||||||
|
|
||||||
|
{"x":7, "y":3},
|
||||||
|
{"x":8, "y":3},
|
||||||
|
{"x":9, "y":3},
|
||||||
|
{"x":10, "y":3},
|
||||||
|
{"x":11, "y":3},
|
||||||
|
{"x":12, "y":3}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
_QWERTY,
|
||||||
|
_COLEMAK,
|
||||||
|
_DVORAK,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_ADJUST
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
COLEMAK,
|
||||||
|
DVORAK
|
||||||
|
};
|
||||||
|
|
||||||
|
#define LOWER MO(_LOWER)
|
||||||
|
#define RAISE MO(_RAISE)
|
||||||
|
#define ADJUST MO(_ADJUST)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_QWERTY] = LAYOUT_all(
|
||||||
|
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_PGUP, 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_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
|
||||||
|
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_ENT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[_COLEMAK] = LAYOUT_all(
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
|
||||||
|
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, _______, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
|
||||||
|
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, _______, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[_DVORAK] = LAYOUT_all(
|
||||||
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
|
||||||
|
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, _______, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
|
||||||
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, _______, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
|
||||||
|
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, _______, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT_all(
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
),
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT_all(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
),
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT_all(
|
||||||
|
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
|
||||||
|
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||||
|
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_QWERTY);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case COLEMAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_COLEMAK);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_DVORAK);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code16(S(KC_VOLD));
|
||||||
|
} else {
|
||||||
|
tap_code16(KC_VOLU);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "rossman360.h"
|
||||||
|
|
||||||
|
#define PGMOD LT(_NUM, KC_PGDN)
|
||||||
|
#define TABMOD LT(_FN1, KC_TAB)
|
||||||
|
#define SPCMOD LT(_FN1, KC_SPACE)
|
||||||
|
#define ENTMOD LT(_FN2, KC_ENTER)
|
||||||
|
#define ESCMOD LT(_NUM, KC_ESC)
|
||||||
|
#define RSMOD LT(_FN1, KC_RSHIFT)
|
||||||
|
#
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
_BASE,
|
||||||
|
_DEL,
|
||||||
|
_FN1,
|
||||||
|
_FN2,
|
||||||
|
_NUM,
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_BASE] = LAYOUT_all(
|
||||||
|
KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , NTAB ,
|
||||||
|
JUMPBACK, KC_A , KC_S , KC_D , KC_F , KC_G ,MO(_DEL), KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
|
||||||
|
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , LM(_FN1, MOD_LALT), KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS,
|
||||||
|
CMDBSP , ALTDEL , KC_NO , CTRLSP , TABMOD , PGMOD , QUIT , ENTMOD , SPCMOD , MO(_DEL),KC_NO , KC_BSPC, KC_DEL
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN1] = LAYOUT_all(
|
||||||
|
_______, TAB1 , TAB2 , TAB3 , TAB4 , _______, _______, UNDO , _______, _______, _______, CTAB ,
|
||||||
|
KC_CAPS, _______, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_UP , KC_RIGHT,KC_END , KC_NO ,
|
||||||
|
_______, _______, XPANDR , _______, PMERGE , _______, _______, _______, PMERGE , KC_DOWN, _______, _______, EMDASH ,
|
||||||
|
WREFRESH,_______, _______, _______, LWORD , RWORD , _______, KC_NO , _______, KC_NO , _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN2] = LAYOUT_all(
|
||||||
|
_______, SPEAK1 , SPEAK2 , SPEAK3 , SPEAK4 , _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, PARADOWN, CSPEAK, _______, _______, KC_NO , KC_NO , _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_DEL] = LAYOUT_all(
|
||||||
|
RESET, _______, _______, _______, _______, _______, _______, UNDO , _______, _______, _______, CTAB ,
|
||||||
|
REMCAPS, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_UP ,KC_RIGHT, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______, _______,
|
||||||
|
_______, _______, _______, BLINE , KC_BSPC, BWORD , _______, KC_NO , KC_NO , _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_NUM] = LAYOUT_all(
|
||||||
|
KC_GRV , KC_1 , KC_7 , KC_8 , KC_9 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_MINS, KC_EQL,
|
||||||
|
KC_CAPS, _______, KC_4 , KC_5 , KC_6 , KC_BSPC, KC_LBRC, KC_MINS, KC_4 , KC_5 , KC_6 , KC_COLN, _______,
|
||||||
|
KC_COMM, KC_DOT , KC_1 , KC_2 , KC_3 ,KC_ENTER, KC_RBRC, KC_RBRC, KC_1 , KC_2 , KC_3 , KC_BSLS, _______,
|
||||||
|
_______, _______, _______, _______, KC_0 , _______, _______, KC_NO , KC_NO , KC_0 , _______, _______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||||
|
switch(get_highest_layer(layer_state)){
|
||||||
|
case _BASE:
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code16(KC_VOLD);
|
||||||
|
} else {
|
||||||
|
tap_code16(KC_VOLU);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _DEL:
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code16(KC_F11);
|
||||||
|
} else {
|
||||||
|
tap_code16(KC_F3);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case _FN1:
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code16(S(KC_TAB));
|
||||||
|
} else {
|
||||||
|
tap_code16(KC_TAB);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef OLED_DRIVER_ENABLE
|
||||||
|
void oled_task_user(void) {
|
||||||
|
// Host Keyboard Layer Status
|
||||||
|
oled_write_P(PSTR(""), false);
|
||||||
|
|
||||||
|
switch (get_highest_layer(layer_state)) {
|
||||||
|
case _BASE:
|
||||||
|
oled_write_P(PSTR("Rebound\n"), false);
|
||||||
|
oled_write_P(PSTR("Rev3.1\n"), false);
|
||||||
|
break;
|
||||||
|
case _FN1:
|
||||||
|
oled_write_P(PSTR("Fn\n"), false);
|
||||||
|
break;
|
||||||
|
case _FN2:
|
||||||
|
oled_write_P(PSTR("Para\n"), false);
|
||||||
|
break;
|
||||||
|
case _NUM:
|
||||||
|
oled_write_P(PSTR("Num\n"), false);
|
||||||
|
break;
|
||||||
|
case _DEL:
|
||||||
|
oled_write_P(PSTR("Del\n"), false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Or use the write_ln shortcut over adding '\n' to the end of your string
|
||||||
|
oled_write_ln_P(PSTR("Undefined"), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
led_t led_state = host_keyboard_led_state();
|
||||||
|
oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
|
||||||
|
oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false);
|
||||||
|
oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
CONSOLE_ENABLE = no
|
||||||
|
COMMAND_ENABLE = no
|
||||||
|
OLED_DRIVER_ENABLE = no
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
/* Copyright 2020 Ross Montsinger
|
||||||
|
*
|
||||||
|
* 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 is a shortcut to help you visually see your layout.
|
||||||
|
* The first section contains all of the arguments representing the
|
||||||
|
* 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, K70, K01, K71, K02, K72, K04, K84, K05, K75, K06, K76, \
|
||||||
|
K10, K60, K11, K61, K12, K62, K14, K74, K15, K65, K16, K66, \
|
||||||
|
K20, K50, K21, K51, K22, K52, K24, K64, K25, K55, K26, K56,\
|
||||||
|
K30, K40, K31, K41, K32, K42, K34, K54, K35, K45, K36, K46\
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K04, K05, K06, K07}, \
|
||||||
|
{ K10, K11, K12, K14, K15, K16, K17 }, \
|
||||||
|
{ K20, K21, K22, K24, K25, K26, K27 }, \
|
||||||
|
{ K30, K31, K32, K34, K35, K36, K37 }, \
|
||||||
|
{ K40, K41, K42, K44, K45, K46, K47 }, \
|
||||||
|
{ K50, K51, K52, K54, K55, K56, K57 }, \
|
||||||
|
{ K60, K61, K62, K64, K65, K66, K67 }, \
|
||||||
|
{ K70, K71, K72, K74, K75, K76, K77 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_all( \
|
||||||
|
K00, K70, K01, K71, K02, K72, K04, K74, K05, K75, K06, K76, \
|
||||||
|
K10, K60, K11, K61, K12, K62, K13, K14, K64, K15, K65, K16, K66, \
|
||||||
|
K20, K50, K21, K51, K22, K52, K23, K24, K54, K25, K55, K26, K56,\
|
||||||
|
K30, K40, K31, K41, K32, K42, K33, K34, K44, K35, K45, K36, K46\
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, KC_NO, K04, K05, K06}, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16}, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26}, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36}, \
|
||||||
|
{ K40, K41, K42, KC_NO, K44, K45, K46}, \
|
||||||
|
{ K50, K51, K52, KC_NO, K54, K55, K56}, \
|
||||||
|
{ K60, K61, K62, KC_NO, K64, K65, K66}, \
|
||||||
|
{ K70, K71, K72, KC_NO, K74, K75, K76} \
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
|
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
|
||||||
|
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
|
||||||
|
ENCODER_ENABLE = yes
|
||||||
|
|
||||||
|
LAYOUTS = ortho_4x12
|
||||||
|
LAYOUTS_HAS_RGB = no
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2019 MechMerlin
|
/* Copyright 2020 Rozakiin
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -26,37 +26,9 @@ void matrix_init_kb(void) {
|
|||||||
matrix_init_user();
|
matrix_init_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool led_update_kb(led_t led_state) {
|
||||||
/*
|
if(led_update_user(led_state)) {
|
||||||
|
writePin(C6, led_state.num_lock);
|
||||||
void matrix_scan_kb(void) {
|
}
|
||||||
// put your looping keyboard code here
|
return true;
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
|
||||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
|
||||||
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
|
|
||||||
writePinLow(C6);
|
|
||||||
} else {
|
|
||||||
writePinHigh(C6);
|
|
||||||
}
|
|
||||||
led_set_user(usb_led);
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2019 MechMerlin
|
/* Copyright 2019 Rozakiin
|
||||||
*
|
*
|
||||||
* 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
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "config_common.h"
|
#include "config_common.h"
|
||||||
|
|
||||||
/* USB Device descriptor parameter */
|
/* USB Device descriptor parameter */
|
||||||
#define VENDOR_ID 0xFEED
|
#define VENDOR_ID 0x4E58 //"NX"
|
||||||
#define PRODUCT_ID 0x6060
|
#define PRODUCT_ID 0x00DC //220
|
||||||
#define DEVICE_VER 0x0001
|
#define DEVICE_VER 0x0001
|
||||||
#define MANUFACTURER Noxary
|
#define MANUFACTURER Noxary
|
||||||
#define PRODUCT 220
|
#define PRODUCT 220
|
||||||
#define DESCRIPTION A custom numpad
|
#define DESCRIPTION A custom numpad keyboard.
|
||||||
|
|
||||||
/* key matrix size */
|
/* key matrix size */
|
||||||
#define MATRIX_ROWS 6
|
#define MATRIX_ROWS 6
|
||||||
@@ -57,42 +57,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define BACKLIGHT_BREATHING
|
#define BACKLIGHT_BREATHING
|
||||||
#define BACKLIGHT_LEVELS 3
|
#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 */
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
#define DEBOUNCE 5
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
//#define MATRIX_HAS_GHOST
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
/* number of backlight levels */
|
|
||||||
|
|
||||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
#define LOCKING_SUPPORT_ENABLE
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
/* Locking resynchronize hack */
|
/* Locking resynchronize hack */
|
||||||
|
|||||||
@@ -15,62 +15,109 @@
|
|||||||
*/
|
*/
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
// Defines the keycodes used by our macros in process_record_user
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
enum custom_keycodes {
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
QMKBEST = SAFE_RANGE,
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
QMKURL
|
// entirely and just use numbers.
|
||||||
|
enum layer_names {
|
||||||
|
_BL,
|
||||||
|
_FL1,
|
||||||
|
_FL2,
|
||||||
|
_FL3
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Base Layer
|
||||||
LAYOUT_ortho_6x4(
|
* ┌───┬───┬───┬───┐
|
||||||
KC_ESC, BL_TOGG, BL_DEC, BL_INC,
|
* │Esc│BLT│BL-│BL+│
|
||||||
KC_NLCK, KC_SLSH, KC_ASTR, KC_PEQL,
|
* ├───┼───┼───┼───┤
|
||||||
KC_7, KC_8, KC_9, KC_PMNS,
|
* │NLK│ / │ * │ = │
|
||||||
KC_4, KC_5, KC_6, KC_PPLS,
|
* ├───┼───┼───┼───┤
|
||||||
KC_1, KC_2, KC_3, KC_PENT,
|
* │ 7 │ 8 │ 9 │ - │
|
||||||
KC_0, KC_0, KC_DEL, KC_PENT),
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ 4 │ 5 │ 6 │ + │
|
||||||
LAYOUT_ortho_6x4(
|
* ├───┼───┼───┼───┤
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
* │ 1 │ 2 │ 3 │ENT│
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
* ├───┼───┼───┼───┤
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
* │ 0 │ 0 │ . │ENT│
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
* └───┴───┴───┴───┘
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
*/
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
[_BL] = LAYOUT_ortho_6x4(
|
||||||
|
KC_ESC, BL_TOGG, BL_DEC, BL_INC,
|
||||||
|
KC_NLCK, KC_PSLS, KC_PAST, KC_PEQL,
|
||||||
|
KC_P7, KC_P8, KC_P9, KC_PMNS,
|
||||||
|
KC_P4, KC_P5, KC_P6, KC_PPLS,
|
||||||
|
KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||||
|
KC_P0, KC_P0, KC_PDOT, KC_PENT
|
||||||
|
),
|
||||||
|
/* Function Layer 1
|
||||||
|
* ┌───┬───┬───┬───┐
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* └───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[_FL1] = LAYOUT_ortho_6x4(
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Function Layer 2
|
||||||
|
* ┌───┬───┬───┬───┐
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* └───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[_FL2] = LAYOUT_ortho_6x4(
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Function Layer 3
|
||||||
|
* ┌───┬───┬───┬───┐
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* └───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[_FL3] = LAYOUT_ortho_6x4(
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
case QMKBEST:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
// when keycode QMKBEST is pressed
|
|
||||||
SEND_STRING("QMK is the best thing ever!");
|
|
||||||
} else {
|
|
||||||
// when keycode QMKBEST is released
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case QMKURL:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
// when keycode QMKURL is pressed
|
|
||||||
SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
|
|
||||||
} else {
|
|
||||||
// when keycode QMKURL is released
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_set_user(uint8_t usb_led) {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1 +1,3 @@
|
|||||||
|

|
||||||
|
|
||||||
# The default keymap for Noxary 220
|
# The default keymap for Noxary 220
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
/* Copyright 2020 Rozakiin
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_names {
|
||||||
|
_BL,
|
||||||
|
_FL1,
|
||||||
|
_FL2,
|
||||||
|
_FL3
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Base Layer
|
||||||
|
* ┌───┬───┬───┬───┐
|
||||||
|
* │Esc│BLT│BL-│BL+│
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │NLK│ / │ * │ = │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ 7 │ 8 │ 9 │ - │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ 4 │ 5 │ 6 │ + │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ 1 │ 2 │ 3 │ENT│
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ 0 │ 0 │ . │ENT│
|
||||||
|
* └───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[_BL] = LAYOUT_ortho_6x4(
|
||||||
|
KC_ESC, BL_TOGG, BL_DEC, BL_INC,
|
||||||
|
KC_NLCK, KC_PSLS, KC_PAST, KC_PEQL,
|
||||||
|
KC_P7, KC_P8, KC_P9, KC_PMNS,
|
||||||
|
KC_P4, KC_P5, KC_P6, KC_PPLS,
|
||||||
|
KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||||
|
KC_P0, KC_P0, KC_PDOT, KC_PENT
|
||||||
|
),
|
||||||
|
/* Function Layer 1
|
||||||
|
* ┌───┬───┬───┬───┐
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* └───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[_FL1] = LAYOUT_ortho_6x4(
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Function Layer 2
|
||||||
|
* ┌───┬───┬───┬───┐
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* └───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[_FL2] = LAYOUT_ortho_6x4(
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Function Layer 3
|
||||||
|
* ┌───┬───┬───┬───┐
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* ├───┼───┼───┼───┤
|
||||||
|
* │ │ │ │ │
|
||||||
|
* └───┴───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[_FL3] = LAYOUT_ortho_6x4(
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|

|
||||||
|
|
||||||
|
# The VIA keymap for Noxary 220
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
LTO_ENABLE = yes
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# Noxary 220
|
# Noxary 220
|
||||||
|
|
||||||
A fully customizable numpad
|

|
||||||
|
|
||||||
|
A fully customizable (4x6) numpad keyboard.
|
||||||
|
|
||||||
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Rozakiin](https://github.com/rozakiin)
|
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Rozakiin](https://github.com/rozakiin)
|
||||||
Hardware Supported: Noxary 220 PCB
|
Hardware Supported: Noxary 220 PCB
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# MCU name
|
# MCU name
|
||||||
MCU = atmega32u4
|
MCU = atmega32u2
|
||||||
|
|
||||||
# Bootloader selection
|
# Bootloader selection
|
||||||
# Teensy halfkay
|
# Teensy halfkay
|
||||||
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
|
|||||||
# Build Options
|
# Build Options
|
||||||
# change yes to no to disable
|
# change yes to no to disable
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
CONSOLE_ENABLE = yes # Console for debug
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
@@ -30,6 +30,5 @@ UNICODE_ENABLE = no # Unicode
|
|||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
|
||||||
|
|
||||||
LAYOUTS = ortho_6x4
|
LAYOUTS = ortho_6x4
|
||||||
@@ -20,12 +20,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "config_common.h"
|
#include "config_common.h"
|
||||||
|
|
||||||
/* USB Device descriptor parameter */
|
/* USB Device descriptor parameter */
|
||||||
#define VENDOR_ID 0x4E58
|
#define VENDOR_ID 0x4E58 //"NX"
|
||||||
#define PRODUCT_ID 0x0050
|
#define PRODUCT_ID 0x0118 //280
|
||||||
#define DEVICE_VER 0x0001
|
#define DEVICE_VER 0x0001
|
||||||
#define MANUFACTURER Noxary
|
#define MANUFACTURER Noxary
|
||||||
#define PRODUCT 280
|
#define PRODUCT 280
|
||||||
#define DESCRIPTION A custom TKL
|
#define DESCRIPTION A custom TKL keyboard.
|
||||||
|
|
||||||
/* key matrix size */
|
/* key matrix size */
|
||||||
#define MATRIX_ROWS 12
|
#define MATRIX_ROWS 12
|
||||||
@@ -57,33 +57,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define BACKLIGHT_BREATHING
|
#define BACKLIGHT_BREATHING
|
||||||
#define BACKLIGHT_LEVELS 3
|
#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 */
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
#define DEBOUNCE 5
|
#define DEBOUNCE 5
|
||||||
@@ -91,8 +64,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
//#define MATRIX_HAS_GHOST
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
/* number of backlight levels */
|
|
||||||
|
|
||||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
#define LOCKING_SUPPORT_ENABLE
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
/* Locking resynchronize hack */
|
/* Locking resynchronize hack */
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2019 Rozakin
|
/* Copyright 2020 Rozakiin
|
||||||
*
|
*
|
||||||
* 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,35 +15,34 @@
|
|||||||
*/
|
*/
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
// Defines the keycodes used by our macros in process_record_user
|
|
||||||
enum custom_keycodes {
|
|
||||||
QMKBEST = SAFE_RANGE,
|
|
||||||
QMKURL
|
|
||||||
};
|
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
// entirely and just use numbers.
|
// entirely and just use numbers.
|
||||||
#define _BL 0
|
enum layer_names {
|
||||||
#define _FL1 1
|
_BL,
|
||||||
#define _FL2 2
|
_FL1,
|
||||||
|
_FL2,
|
||||||
|
_FL3
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* _BL: Base Layer(Default) - For ISO enter use ANSI enter
|
/* Base Layer - For ISO enter use ANSI enter
|
||||||
* ,------------------------------------------------------------. ,--------------.
|
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
|
||||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11| f12| |Prnt|ScLk|Paus|
|
* │ESC│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12││PRT│SLK│PSE│
|
||||||
* |------------------------------------------------------------| |--------------|
|
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
|
||||||
* | ~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|BSpc| | Ins|Home|PgUp|
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
|
||||||
* |------------------------------------------------------------| |--------------|
|
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │BSP││INS│HME│PUP│
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | | Del| End|PgDn|
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
|
||||||
* |------------------------------------------------------------| `--------------'
|
* │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ ││DEL│END│PDN│
|
||||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #| Ent|
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
|
||||||
* |------------------------------------------------------------| ,----.
|
* │ CAPS │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ENTER │
|
||||||
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift|Mo(1)| | Up |
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
|
||||||
* |------------------------------------------------------------| ,--------------.
|
* │SFT │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │M1 │ │ ↑ │
|
||||||
* |Ctrl|Win |Alt | Space |Alt |Win |Mo(1) |Ctrl | |Left| Dn |Rght|
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
|
||||||
* `------------------------------------------------------------' `--------------'
|
* │CTRL│Win │ALT │ SPC │ALT │WIN │M(1)│CTRL││ ← │ ↓ │ → │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
|
||||||
*/
|
*/
|
||||||
[_BL] = LAYOUT(
|
[_BL] = LAYOUT(
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
|
KC_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,
|
||||||
@@ -51,52 +50,78 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
|
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_NUHS, KC_ENT,
|
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, MO(_FL1), KC_UP,
|
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(_FL1), KC_UP,
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL1), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL1), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
/* _FL1: Function Layer 1 - For ISO enter use ANSI enter
|
),
|
||||||
* ,------------------------------------------------------------. ,--------------.
|
/* Function Layer 1 - For ISO enter use ANSI enter
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
|
||||||
* |------------------------------------------------------------| |--------------|
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
|
||||||
* |------------------------------------------------------------| |--------------|
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
|
||||||
* | | | | |RST| | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| `--------------'
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
|
||||||
* | | | | | | | | | | | | | | |
|
* │ │ │ │ │ │RST│ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| ,----.
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
|
||||||
* | | | | | | | | | |Bl-|Bl+| | Mute| | |Vol+|
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
* |------------------------------------------------------------| ,--------------.
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
|
||||||
* | | | | BL_Toggle | | | | | | |Vol-| |
|
* │ │ │ │ │ │ │ │ │ │BL-│BL+│ │ MUTE │ │ │VL+│
|
||||||
* `------------------------------------------------------------' `--------------'
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
|
||||||
*/
|
* │ │ │ │ BL_TOGGLE │ │ │ │ ││ │VL-│ │
|
||||||
[_FL1] = LAYOUT(
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
*/
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
[_FL1] = LAYOUT(
|
||||||
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, _______, KC_MUTE, _______, KC_VOLU,
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, KC_VOLD, _______),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
/* _FL2: Function Layer 2 - For ISO enter use ANSI enter
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, _______, KC_MUTE, _______, KC_VOLU,
|
||||||
* ,------------------------------------------------------------. ,--------------.
|
_______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, KC_VOLD, _______
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
),
|
||||||
* |------------------------------------------------------------| |--------------|
|
/* Function Layer 2 - For ISO enter use ANSI enter
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
|
||||||
* |------------------------------------------------------------| |--------------|
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* | | | | | | | | | | | | | | | | | | |
|
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
|
||||||
* |------------------------------------------------------------| `--------------'
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
|
||||||
* | | | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| ,----.
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
|
||||||
* | | | | | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| ,--------------.
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
|
||||||
* | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
* `------------------------------------------------------------' `--------------'
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
|
||||||
*/
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
[_FL2] = LAYOUT(
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
* │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
*/
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
[_FL2] = LAYOUT(
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Function Layer 3 - For ISO enter use ANSI enter
|
||||||
|
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
|
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
|
||||||
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
|
||||||
|
* │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
|
||||||
|
*/
|
||||||
|
[_FL3] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1 +1,3 @@
|
|||||||
|

|
||||||
|
|
||||||
# The default keymap for Noxary 280
|
# The default keymap for Noxary 280
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2019 Rozakin
|
/* Copyright 2020 Rozakiin
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -19,26 +19,30 @@
|
|||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
// entirely and just use numbers.
|
// entirely and just use numbers.
|
||||||
#define _BL 0
|
enum layer_names {
|
||||||
#define _FL1 1
|
_BL,
|
||||||
#define _FL2 2
|
_FL1,
|
||||||
#define _FL3 3
|
_FL2,
|
||||||
|
_FL3
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* _BL: Base Layer(Default) - For ISO enter use ANSI enter
|
/* Base Layer - For ISO enter use ANSI enter
|
||||||
* ,------------------------------------------------------------. ,--------------.
|
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
|
||||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11| f12| |Prnt|ScLk|Paus|
|
* │ESC│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12││PRT│SLK│PSE│
|
||||||
* |------------------------------------------------------------| |--------------|
|
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
|
||||||
* | ~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|BSpc| | Ins|Home|PgUp|
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
|
||||||
* |------------------------------------------------------------| |--------------|
|
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │BSP││INS│HME│PUP│
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | | Del| End|PgDn|
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
|
||||||
* |------------------------------------------------------------| `--------------'
|
* │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ ││DEL│END│PDN│
|
||||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #| Ent|
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
|
||||||
* |------------------------------------------------------------| ,----.
|
* │ CAPS │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ENTER │
|
||||||
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift|Mo(1)| | Up |
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
|
||||||
* |------------------------------------------------------------| ,--------------.
|
* │SFT │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │M1 │ │ ↑ │
|
||||||
* |Ctrl|Win |Alt | Space |Alt |Win |Mo(1) |Ctrl | |Left| Dn |Rght|
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
|
||||||
* `------------------------------------------------------------' `--------------'
|
* │CTRL│Win │ALT │ SPC │ALT │WIN │M(1)│CTRL││ ← │ ↓ │ → │
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
|
||||||
*/
|
*/
|
||||||
[_BL] = LAYOUT(
|
[_BL] = LAYOUT(
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
|
KC_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,
|
||||||
@@ -46,73 +50,78 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
|
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_NUHS, KC_ENT,
|
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, MO(_FL1), KC_UP,
|
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(_FL1), KC_UP,
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL1), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL1), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
/* _FL1: Function Layer 1 - For ISO enter use ANSI enter
|
),
|
||||||
* ,------------------------------------------------------------. ,--------------.
|
/* Function Layer 1 - For ISO enter use ANSI enter
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
|
||||||
* |------------------------------------------------------------| |--------------|
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
|
||||||
* |------------------------------------------------------------| |--------------|
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
|
||||||
* | | | | |RST| | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| `--------------'
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
|
||||||
* | | | | | | | | | | | | | | |
|
* │ │ │ │ │ │RST│ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| ,----.
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
|
||||||
* | | | | | | | | | |Bl-|Bl+| | Mute| | |Vol+|
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
* |------------------------------------------------------------| ,--------------.
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
|
||||||
* | | | | BL_Toggle | | | | | | |Vol-| |
|
* │ │ │ │ │ │ │ │ │ │BL-│BL+│ │ MUTE │ │ │VL+│
|
||||||
* `------------------------------------------------------------' `--------------'
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
|
||||||
*/
|
* │ │ │ │ BL_TOGGLE │ │ │ │ ││ │VL-│ │
|
||||||
[_FL1] = LAYOUT(
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
*/
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
[_FL1] = LAYOUT(
|
||||||
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, _______, KC_MUTE, _______, KC_VOLU,
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, KC_VOLD, _______),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
/* _FL2: Function Layer 2 - For ISO enter use ANSI enter
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, _______, KC_MUTE, _______, KC_VOLU,
|
||||||
* ,------------------------------------------------------------. ,--------------.
|
_______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, KC_VOLD, _______
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
),
|
||||||
* |------------------------------------------------------------| |--------------|
|
/* Function Layer 2 - For ISO enter use ANSI enter
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
|
||||||
* |------------------------------------------------------------| |--------------|
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* | | | | | | | | | | | | | | | | | | |
|
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
|
||||||
* |------------------------------------------------------------| `--------------'
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
|
||||||
* | | | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| ,----.
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
|
||||||
* | | | | | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| ,--------------.
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
|
||||||
* | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
* `------------------------------------------------------------' `--------------'
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
|
||||||
*/
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
[_FL2] = LAYOUT(
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
* │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
*/
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
[_FL2] = LAYOUT(
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
/* _FL3: Function Layer 3 - For ISO enter use ANSI enter
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
* ,------------------------------------------------------------. ,--------------.
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
* |------------------------------------------------------------| |--------------|
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
* | | | | | | | | | | | | | | | | | | | |
|
),
|
||||||
* |------------------------------------------------------------| |--------------|
|
/* Function Layer 3 - For ISO enter use ANSI enter
|
||||||
* | | | | | | | | | | | | | | | | | | |
|
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
|
||||||
* |------------------------------------------------------------| `--------------'
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* | | | | | | | | | | | | | | |
|
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
|
||||||
* |------------------------------------------------------------| ,----.
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
|
||||||
* | | | | | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* |------------------------------------------------------------| ,--------------.
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
|
||||||
* | | | | | | | | | | | | |
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
* `------------------------------------------------------------' `--------------'
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
|
||||||
*/
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
[_FL3] = LAYOUT(
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
* │ │ │ │ │ │ │ │ ││ │ │ │
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
*/
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
[_FL3] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1 +1,3 @@
|
|||||||
|

|
||||||
|
|
||||||
# The VIA keymap for Noxary 280
|
# The VIA keymap for Noxary 280
|
||||||
@@ -1,2 +1,5 @@
|
|||||||
VIA_ENABLE = yes
|
VIA_ENABLE = yes
|
||||||
MOUSEKEY_ENABLE = no
|
MOUSEKEY_ENABLE = no
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
LTO_ENABLE = yes
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
Noxary 280
|
# Noxary 280
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
A fully customizable TKL keyboard.
|
A fully customizable TKL keyboard.
|
||||||
|
|
||||||
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Rozakin](https://github.com/rozakiin)
|
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Rozakiin](https://github.com/rozakiin)
|
||||||
Hardware Supported: 280 PCB
|
Hardware Supported: Noxary 280 PCB
|
||||||
Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=95660.0)
|
Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=95660.0)
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define TAPPING_TERM 150
|
||||||
|
#define PERMISSIVE_HOLD
|
||||||
|
|
||||||
|
// Disable all RGB effects
|
||||||
|
#define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
|
||||||
|
#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_DUAL_BEACON
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
|
||||||
|
#define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINBOW_BEACON
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
|
||||||
|
#define DISABLE_RGB_MATRIX_RAINDROPS
|
||||||
|
#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||||
|
#define DISABLE_RGB_MATRIX_TYPING_HEATMAP
|
||||||
|
#define DISABLE_RGB_MATRIX_DIGITAL_RAIN
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE
|
||||||
|
#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
|
||||||
|
#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
|
||||||
|
|
||||||
|
// Most tactile encoders have detents every 4 stages
|
||||||
|
#define ENCODER_RESOLUTION 4
|
||||||
@@ -0,0 +1,384 @@
|
|||||||
|
/* Copyright 2015-2017 Jack Humbert
|
||||||
|
* 2020 Niclas Meyer
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#define K(kc) (1ull<<((kc) - ALPHA))
|
||||||
|
|
||||||
|
#define KALPHA K(ALPHA)
|
||||||
|
#define KBETA K(BETA)
|
||||||
|
#define KGAMMA K(GAMMA)
|
||||||
|
#define KDELTA K(DELTA)
|
||||||
|
#define KEPSILON K(EPSILON)
|
||||||
|
#define KZETA K(ZETA)
|
||||||
|
#define KTHETA K(THETA)
|
||||||
|
#define KIOTA K(IOTA)
|
||||||
|
#define KKAPPA K(KAPPA)
|
||||||
|
|
||||||
|
enum keys {
|
||||||
|
ALPHA = SAFE_RANGE,
|
||||||
|
BETA,
|
||||||
|
GAMMA,
|
||||||
|
DELTA,
|
||||||
|
EPSILON,
|
||||||
|
ZETA,
|
||||||
|
THETA,
|
||||||
|
IOTA,
|
||||||
|
KAPPA,
|
||||||
|
LOCK,
|
||||||
|
NONE,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum layers {
|
||||||
|
NORMAL,
|
||||||
|
QWERTY,
|
||||||
|
GAME,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
PHI,
|
||||||
|
FN,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define XXXX KC_NO
|
||||||
|
#define ____ KC_TRNS
|
||||||
|
|
||||||
|
#define CQWER LM(QWERTY, MOD_LCTL)
|
||||||
|
#define AQWER LM(QWERTY, MOD_LALT)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[NORMAL] = LAYOUT_planck_grid(
|
||||||
|
ALPHA, BETA, GAMMA, DELTA, ____, ____, ____, ____, DELTA, GAMMA, BETA, ALPHA,
|
||||||
|
EPSILON, ZETA, THETA, IOTA, ____, ____, ____, ____, IOTA, THETA, ZETA, EPSILON,
|
||||||
|
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||||
|
MO(PHI), CQWER, AQWER, MO(FN), KAPPA, ____, XXXX, KAPPA, MO(FN), ____, ____, MO(PHI)
|
||||||
|
),
|
||||||
|
[QWERTY] = LAYOUT_planck_grid(
|
||||||
|
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_SFTENT,
|
||||||
|
MO(PHI), KC_LCTL, KC_LALT, KC_LGUI, MO(LOWER), KC_SPC, XXXX, MO(RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
|
||||||
|
),
|
||||||
|
[GAME] = LAYOUT_planck_grid(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, 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_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||||
|
KC_LCTL, KC_Z, KC_X, KC_C, KC_SPC, ____, XXXX, ____, KC_V, KC_B, ____, MO(PHI)
|
||||||
|
),
|
||||||
|
[LOWER] = LAYOUT_planck_grid(
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
|
||||||
|
KC_DEL, ____, ____, ____, ____, ____, ____, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||||
|
____, ____, ____, ____, ____, ____, ____, KC_PGUP, KC_PGDN, KC_HOME, KC_END, ____,
|
||||||
|
____, ____, ____, ____, ____, ____, XXXX, ____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
),
|
||||||
|
[RAISE] = LAYOUT_planck_grid(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||||
|
KC_DEL, ____, ____, ____, ____, ____, ____, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
____, ____, ____, ____, ____, ____, ____, KC_PGUP, KC_PGDN, KC_HOME, KC_END, ____,
|
||||||
|
____, ____, ____, ____, ____, ____, XXXX, ____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
),
|
||||||
|
[PHI] = LAYOUT_planck_grid(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, ____, ____, ____, ____, ____, ____, KC_DEL,
|
||||||
|
____, KC_F5, KC_F6, KC_F7, KC_F8, ____, ____, DF(QWERTY), DF(NORMAL), DF(GAME), ____, KC_F13,
|
||||||
|
____, KC_F9, KC_F10, KC_F11, KC_F12, ____, ____, ____, ____, ____, ____, ____,
|
||||||
|
____, RGB_TOG, RGB_MOD, ____, ____, ____, XXXX, ____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
),
|
||||||
|
[FN] = LAYOUT_planck_grid(
|
||||||
|
____, ____, KC_UP, ____, ____, ____, ____, ____, ____, KC_UP, ____, ____,
|
||||||
|
KC_DEL, KC_LEFT, KC_DOWN, KC_RIGHT, ____, ____, ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL,
|
||||||
|
KC_HOME, KC_END, KC_PGUP, KC_PGDN, ____, ____, ____, ____, KC_PGDN, KC_PGUP, KC_HOME, KC_END,
|
||||||
|
____, ____, ____, ____, ____, ____, XXXX, ____, ____, ____, ____, ____
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t left_chord = 0;
|
||||||
|
static uint16_t right_chord = 0;
|
||||||
|
|
||||||
|
static bool locking = false;
|
||||||
|
static bool locked = false;
|
||||||
|
static uint16_t mods = 0;
|
||||||
|
|
||||||
|
#define PROCESS_MOD(mod) \
|
||||||
|
do { \
|
||||||
|
if ((mods & MOD_##mod) && !(keys & MOD_##mod)) { \
|
||||||
|
unregister_code16(KC_##mod); \
|
||||||
|
} \
|
||||||
|
if (!(mods & MOD_##mod) && (keys & MOD_##mod)) { \
|
||||||
|
register_code16(KC_##mod); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
static void process_keys(uint16_t keys) {
|
||||||
|
if (keys == NONE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keys == LOCK) {
|
||||||
|
locking = !locking;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((keys & QK_ONE_SHOT_MOD) == QK_ONE_SHOT_MOD) {
|
||||||
|
PROCESS_MOD(LCTL);
|
||||||
|
PROCESS_MOD(LSFT);
|
||||||
|
PROCESS_MOD(LALT);
|
||||||
|
PROCESS_MOD(LGUI);
|
||||||
|
|
||||||
|
mods = keys & ~QK_ONE_SHOT_MOD;
|
||||||
|
locked = false;
|
||||||
|
|
||||||
|
if (locking) {
|
||||||
|
locking = false;
|
||||||
|
locked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normal key
|
||||||
|
tap_code16(keys);
|
||||||
|
locking = false;
|
||||||
|
|
||||||
|
if (mods && !locked) {
|
||||||
|
if (mods & MOD_LCTL) {
|
||||||
|
unregister_code16(KC_LCTL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mods & MOD_LSFT) {
|
||||||
|
unregister_code16(KC_LSFT);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mods & MOD_LALT) {
|
||||||
|
unregister_code16(KC_LALT);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mods & MOD_LGUI) {
|
||||||
|
unregister_code16(KC_LGUI);
|
||||||
|
}
|
||||||
|
|
||||||
|
mods = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint16_t chord_to_keys(uint16_t chord) {
|
||||||
|
switch (chord) {
|
||||||
|
// Unshifted Extra
|
||||||
|
case KKAPPA: return KC_SPC;
|
||||||
|
case KEPSILON | KZETA | KTHETA | KIOTA: return KC_ENT;
|
||||||
|
case KEPSILON | KZETA | KGAMMA | KIOTA: return KC_TAB;
|
||||||
|
case KEPSILON | KIOTA: return KC_BSPC;
|
||||||
|
case KKAPPA | KEPSILON: return KC_ESC;
|
||||||
|
|
||||||
|
// Shifted Extra
|
||||||
|
case KKAPPA | KEPSILON | KZETA | KTHETA | KIOTA: return S(KC_ENT);
|
||||||
|
case KKAPPA | KEPSILON | KZETA | KGAMMA | KIOTA: return S(KC_TAB);
|
||||||
|
case KKAPPA | KEPSILON | KIOTA: return S(KC_BSPC);
|
||||||
|
|
||||||
|
// Lowercase Letters
|
||||||
|
case KBETA: return KC_A;
|
||||||
|
case KZETA | KDELTA: return KC_B;
|
||||||
|
case KBETA | KGAMMA | KDELTA: return KC_C;
|
||||||
|
case KZETA | KTHETA | KIOTA: return KC_D;
|
||||||
|
case KDELTA: return KC_E;
|
||||||
|
case KGAMMA | KIOTA: return KC_F;
|
||||||
|
case KBETA | KTHETA: return KC_G;
|
||||||
|
case KZETA | KTHETA: return KC_H;
|
||||||
|
case KGAMMA: return KC_I;
|
||||||
|
case KBETA | KGAMMA | KIOTA: return KC_J;
|
||||||
|
case KBETA | KTHETA | KIOTA: return KC_K;
|
||||||
|
case KBETA | KGAMMA: return KC_L;
|
||||||
|
case KBETA | KDELTA: return KC_M;
|
||||||
|
case KZETA: return KC_N;
|
||||||
|
case KTHETA: return KC_O;
|
||||||
|
case KZETA | KGAMMA: return KC_P;
|
||||||
|
case KBETA | KTHETA | KDELTA: return KC_Q;
|
||||||
|
case KGAMMA | KDELTA: return KC_R;
|
||||||
|
case KTHETA | KIOTA: return KC_S;
|
||||||
|
case KIOTA: return KC_T;
|
||||||
|
case KZETA | KIOTA: return KC_U;
|
||||||
|
case KTHETA | KDELTA: return KC_V;
|
||||||
|
case KZETA | KGAMMA | KIOTA: return KC_W;
|
||||||
|
case KZETA | KTHETA | KDELTA: return KC_X;
|
||||||
|
case KBETA | KIOTA: return KC_Y;
|
||||||
|
case KZETA | KGAMMA | KDELTA: return KC_Z;
|
||||||
|
|
||||||
|
// Uppercase Letters
|
||||||
|
case KKAPPA | KBETA: return S(KC_A);
|
||||||
|
case KKAPPA | KZETA | KDELTA: return S(KC_B);
|
||||||
|
case KKAPPA | KBETA | KGAMMA | KDELTA: return S(KC_C);
|
||||||
|
case KKAPPA | KZETA | KTHETA | KIOTA: return S(KC_D);
|
||||||
|
case KKAPPA | KDELTA: return S(KC_E);
|
||||||
|
case KKAPPA | KGAMMA | KIOTA: return S(KC_F);
|
||||||
|
case KKAPPA | KBETA | KTHETA: return S(KC_G);
|
||||||
|
case KKAPPA | KZETA | KTHETA: return S(KC_H);
|
||||||
|
case KKAPPA | KGAMMA: return S(KC_I);
|
||||||
|
case KKAPPA | KBETA | KGAMMA | KIOTA: return S(KC_J);
|
||||||
|
case KKAPPA | KBETA | KTHETA | KIOTA: return S(KC_K);
|
||||||
|
case KKAPPA | KBETA | KGAMMA: return S(KC_L);
|
||||||
|
case KKAPPA | KBETA | KDELTA: return S(KC_M);
|
||||||
|
case KKAPPA | KZETA: return S(KC_N);
|
||||||
|
case KKAPPA | KTHETA: return S(KC_O);
|
||||||
|
case KKAPPA | KZETA | KGAMMA: return S(KC_P);
|
||||||
|
case KKAPPA | KBETA | KTHETA | KDELTA: return S(KC_Q);
|
||||||
|
case KKAPPA | KGAMMA | KDELTA: return S(KC_R);
|
||||||
|
case KKAPPA | KTHETA | KIOTA: return S(KC_S);
|
||||||
|
case KKAPPA | KIOTA: return S(KC_T);
|
||||||
|
case KKAPPA | KZETA | KIOTA: return S(KC_U);
|
||||||
|
case KKAPPA | KTHETA | KDELTA: return S(KC_V);
|
||||||
|
case KKAPPA | KZETA | KGAMMA | KIOTA: return S(KC_W);
|
||||||
|
case KKAPPA | KZETA | KTHETA | KDELTA: return S(KC_X);
|
||||||
|
case KKAPPA | KBETA | KIOTA: return S(KC_Y);
|
||||||
|
case KKAPPA | KZETA | KGAMMA | KDELTA: return S(KC_Z);
|
||||||
|
|
||||||
|
// Unshifted Numbers
|
||||||
|
case KEPSILON | KZETA: return KC_0;
|
||||||
|
case KEPSILON | KZETA | KIOTA: return KC_1;
|
||||||
|
case KEPSILON | KZETA | KTHETA: return KC_2;
|
||||||
|
case KEPSILON | KBETA: return KC_3;
|
||||||
|
case KEPSILON | KBETA | KDELTA: return KC_4;
|
||||||
|
case KEPSILON | KBETA | KGAMMA: return KC_5;
|
||||||
|
case KEPSILON | KBETA | KIOTA: return KC_6;
|
||||||
|
case KEPSILON | KTHETA: return KC_7;
|
||||||
|
case KEPSILON | KBETA | KGAMMA | KIOTA: return KC_8;
|
||||||
|
case KEPSILON | KGAMMA | KDELTA: return KC_9;
|
||||||
|
|
||||||
|
// Shifted Numbers
|
||||||
|
case KKAPPA | KEPSILON | KZETA | KIOTA: return KC_EXLM;
|
||||||
|
case KKAPPA | KEPSILON | KZETA | KTHETA: return KC_AT;
|
||||||
|
case KKAPPA | KEPSILON | KBETA: return KC_HASH;
|
||||||
|
case KKAPPA | KEPSILON | KBETA | KDELTA: return KC_DLR;
|
||||||
|
case KKAPPA | KEPSILON | KBETA | KGAMMA: return KC_PERC;
|
||||||
|
case KKAPPA | KEPSILON | KBETA | KIOTA: return KC_CIRC;
|
||||||
|
case KKAPPA | KEPSILON | KTHETA: return KC_AMPR;
|
||||||
|
case KKAPPA | KEPSILON | KBETA | KGAMMA | KIOTA: return KC_ASTR;
|
||||||
|
case KKAPPA | KEPSILON | KGAMMA | KDELTA: return KC_LPRN;
|
||||||
|
case KKAPPA | KEPSILON | KZETA: return KC_RPRN;
|
||||||
|
|
||||||
|
// Unshifted Symbols
|
||||||
|
case KEPSILON | KBETA | KTHETA | KIOTA: return KC_MINS;
|
||||||
|
case KEPSILON | KZETA | KTHETA | KDELTA: return KC_EQL;
|
||||||
|
case KEPSILON | KZETA | KGAMMA: return KC_LBRC;
|
||||||
|
case KEPSILON | KGAMMA | KIOTA: return KC_RBRC;
|
||||||
|
case KEPSILON | KBETA | KTHETA: return KC_BSLS;
|
||||||
|
case KEPSILON | KBETA | KGAMMA | KDELTA: return KC_SCLN;
|
||||||
|
case KEPSILON | KZETA | KDELTA: return KC_QUOT;
|
||||||
|
case KEPSILON | KTHETA | KIOTA: return KC_COMM;
|
||||||
|
case KEPSILON | KZETA | KGAMMA | KDELTA: return KC_DOT;
|
||||||
|
case KEPSILON | KGAMMA: return KC_SLSH;
|
||||||
|
case KEPSILON | KDELTA: return KC_GRV;
|
||||||
|
|
||||||
|
// Shifted Symbols
|
||||||
|
case KKAPPA | KEPSILON | KBETA | KTHETA | KIOTA: return KC_UNDS;
|
||||||
|
case KKAPPA | KEPSILON | KZETA | KTHETA | KDELTA: return KC_PLUS;
|
||||||
|
case KKAPPA | KEPSILON | KZETA | KGAMMA: return KC_LCBR;
|
||||||
|
case KKAPPA | KEPSILON | KGAMMA | KIOTA: return KC_RCBR;
|
||||||
|
case KKAPPA | KEPSILON | KBETA | KTHETA: return KC_PIPE;
|
||||||
|
case KKAPPA | KEPSILON | KBETA | KGAMMA | KDELTA: return KC_COLN;
|
||||||
|
case KKAPPA | KEPSILON | KZETA | KDELTA: return KC_DQT;
|
||||||
|
case KKAPPA | KEPSILON | KTHETA | KIOTA: return KC_LT;
|
||||||
|
case KKAPPA | KEPSILON | KZETA | KGAMMA | KDELTA: return KC_GT;
|
||||||
|
case KKAPPA | KEPSILON | KGAMMA: return KC_QUES;
|
||||||
|
case KKAPPA | KEPSILON | KDELTA: return KC_TILD;
|
||||||
|
|
||||||
|
// Modifiers
|
||||||
|
case KALPHA | KIOTA: return LOCK;
|
||||||
|
|
||||||
|
case KALPHA: return QK_ONE_SHOT_MOD; // Release all
|
||||||
|
|
||||||
|
case KALPHA | KBETA: return OSM(MOD_LCTL);
|
||||||
|
case KALPHA | KGAMMA: return OSM(MOD_LSFT);
|
||||||
|
case KALPHA | KDELTA: return OSM(MOD_LALT);
|
||||||
|
case KALPHA | KKAPPA: return OSM(MOD_LGUI);
|
||||||
|
|
||||||
|
case KALPHA | KBETA | KGAMMA: return OSM(MOD_LCTL | MOD_LSFT);
|
||||||
|
case KALPHA | KBETA | KDELTA: return OSM(MOD_LCTL | MOD_LALT);
|
||||||
|
case KALPHA | KBETA | KKAPPA: return OSM(MOD_LCTL | MOD_LGUI);
|
||||||
|
case KALPHA | KGAMMA | KDELTA: return OSM(MOD_LSFT | MOD_LALT);
|
||||||
|
case KALPHA | KGAMMA | KKAPPA: return OSM(MOD_LSFT | MOD_LGUI);
|
||||||
|
case KALPHA | KDELTA | KKAPPA: return OSM(MOD_LALT | MOD_LGUI);
|
||||||
|
|
||||||
|
case KALPHA | KBETA | KGAMMA | KDELTA: return OSM(MOD_LCTL | MOD_LSFT | MOD_LALT);
|
||||||
|
case KALPHA | KBETA | KGAMMA | KKAPPA: return OSM(MOD_LCTL | MOD_LSFT | MOD_LGUI);
|
||||||
|
case KALPHA | KBETA | KDELTA | KKAPPA: return OSM(MOD_LCTL | MOD_LALT | MOD_LGUI);
|
||||||
|
case KALPHA | KGAMMA | KDELTA | KKAPPA: return OSM(MOD_LSFT | MOD_LALT | MOD_LGUI);
|
||||||
|
|
||||||
|
case KALPHA | KBETA | KGAMMA | KDELTA | KKAPPA: return OSM(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint16_t *get_hand(keypos_t *key) {
|
||||||
|
if (key->row <= 3) {
|
||||||
|
return &left_chord;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key->row <= 6) {
|
||||||
|
return &right_chord;
|
||||||
|
}
|
||||||
|
|
||||||
|
// row 7
|
||||||
|
if (key->col <= 2) {
|
||||||
|
return &right_chord;
|
||||||
|
} else {
|
||||||
|
return &left_chord;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
if (keycode < ALPHA) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t *chord = get_hand(&record->event.key);
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
*chord |= K(keycode);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*chord != 0) {
|
||||||
|
process_keys(chord_to_keys(*chord));
|
||||||
|
*chord = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef KEYBOARD_planck_ez
|
||||||
|
|
||||||
|
#define LED_BRIGHTNESS 50
|
||||||
|
|
||||||
|
layer_state_t default_layer_state_set_user(layer_state_t state) {
|
||||||
|
switch (state) {
|
||||||
|
case 1U << NORMAL:
|
||||||
|
planck_ez_left_led_off();
|
||||||
|
planck_ez_right_led_off();
|
||||||
|
break;
|
||||||
|
case 1U << QWERTY:
|
||||||
|
planck_ez_left_led_level(LED_BRIGHTNESS);
|
||||||
|
planck_ez_right_led_off();
|
||||||
|
break;
|
||||||
|
case 1U << GAME:
|
||||||
|
planck_ez_left_led_off();
|
||||||
|
planck_ez_right_led_level(LED_BRIGHTNESS);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* KEYBOARD_planck_ez */
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
# buffet's planck layout
|
||||||
|
|
||||||
|
## Layout
|
||||||
|
|
||||||
|
The Layout is based on keychords.
|
||||||
|
The general idea is that you're able to type everything with either hand, so that you can alternate between hands as you type.
|
||||||
|
|
||||||
|
The keys are in a 2x4 block in the top left and top right respectively (mirrored).
|
||||||
|
They have greek letter names (see `keymap.c` for more info).
|
||||||
|
|
||||||
|
Thumb added to any key means shift is pressed as well.
|
||||||
|
|
||||||
|
`-` means the finger presses nothing.
|
||||||
|
`^` means the finger presses the upper row.
|
||||||
|
`v` means the finger presses the lower row.
|
||||||
|
|
||||||
|
```
|
||||||
|
Space: thumb
|
||||||
|
Return: vvvv vvvv
|
||||||
|
Tab: vv^v v^vv
|
||||||
|
Bspace: v--v v--v
|
||||||
|
Esc: lower pinky and thumb
|
||||||
|
```
|
||||||
|
|
||||||
|
### Letters
|
||||||
|
|
||||||
|
```
|
||||||
|
a: -^-- --^-
|
||||||
|
b: -v-^ ^-v-
|
||||||
|
c: -^^^ ^^^-
|
||||||
|
d: -vvv vvv-
|
||||||
|
e: ---^ ^---
|
||||||
|
f: --^v v^--
|
||||||
|
g: -^v- -v^-
|
||||||
|
h: -vv- -vv-
|
||||||
|
i: --^- -^--
|
||||||
|
j: -^^v v^^-
|
||||||
|
k: -^vv vv^-
|
||||||
|
l: -^^- -^^-
|
||||||
|
m: -^-^ ^-^-
|
||||||
|
n: -v-- --v-
|
||||||
|
o: --v- -v--
|
||||||
|
p: -v^- -^v-
|
||||||
|
q: -^v^ ^v^-
|
||||||
|
r: --^^ ^^--
|
||||||
|
s: --vv vv--
|
||||||
|
t: ---v v---
|
||||||
|
u: -v-v v-v-
|
||||||
|
v: --v^ ^v--
|
||||||
|
w: -v^v v^v-
|
||||||
|
x: -vv^ ^vv-
|
||||||
|
y: -^-v v-^-
|
||||||
|
z: -v^^ ^^v-
|
||||||
|
```
|
||||||
|
|
||||||
|
### Numbers and Symbols
|
||||||
|
|
||||||
|
```
|
||||||
|
0: vv-- --vv
|
||||||
|
1: vv-v v-vv
|
||||||
|
2: vvv- -vvv
|
||||||
|
3: v^-- --^v
|
||||||
|
4: v^-^ ^-^v
|
||||||
|
5: v^^- -^^v
|
||||||
|
6: v^-v v-^v
|
||||||
|
7: v-v- -v-v
|
||||||
|
8: v^^v v^^v
|
||||||
|
9: v-^^ ^^-v
|
||||||
|
-: v^vv vv^v
|
||||||
|
=: vvv^ ^vvv
|
||||||
|
[: vv^- -^vv
|
||||||
|
]: v-^v v^-v
|
||||||
|
\: v^v- -v^v
|
||||||
|
;: v^^^ ^^^v
|
||||||
|
': vv-^ ^-vv
|
||||||
|
,: v-vv vv-v
|
||||||
|
.: vv^^ ^^vv
|
||||||
|
/: v-^- -^-v
|
||||||
|
`: v--^ ^--v
|
||||||
|
```
|
||||||
|
|
||||||
|
### Modifiers
|
||||||
|
|
||||||
|
Modifiers all use the top pinky key, and a combinations of modifiers you want to activate for the next keypress (very similar to how OMS work).
|
||||||
|
For the modifiers the top row of keys is used.
|
||||||
|
|
||||||
|
```
|
||||||
|
Control: Ringfinger
|
||||||
|
Shift: Middlefinger
|
||||||
|
Alt: Indexfinger
|
||||||
|
Super: Thumb
|
||||||
|
```
|
||||||
|
|
||||||
|
`^--v v--^` can be used to lock the next modifier input.
|
||||||
|
|
||||||
|
### Remaining
|
||||||
|
|
||||||
|
These combinations are unused.
|
||||||
|
|
||||||
|
```
|
||||||
|
v^v^
|
||||||
|
v-v^
|
||||||
|
v---
|
||||||
|
```
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
RGB_MATRIX_EFFECT(rainbow_stripe)
|
||||||
|
|
||||||
|
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||||
|
|
||||||
|
static HSV rainbow_stripe_math(HSV hsv, uint8_t i, uint8_t time) {
|
||||||
|
if (i >= 14 && i <= 21) {
|
||||||
|
hsv.h = g_led_config.point[i].x - time;
|
||||||
|
} else {
|
||||||
|
hsv.v = 0;
|
||||||
|
}
|
||||||
|
return hsv;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool rainbow_stripe(effect_params_t* params) {
|
||||||
|
return effect_runner_i(params, &rainbow_stripe_math);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
AUDIO_ENABLE = no
|
||||||
|
BOOTMAGIC_ENABLE = lite
|
||||||
|
COMMAND_ENABLE = no
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
|
||||||
|
RGB_MATRIX_CUSTOM_USER = yes
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(RGB_BACKLIGHT_DAWN60)
|
#if defined(RGB_BACKLIGHT_DAWN60)
|
||||||
#include "drivers/avr/ws2812.h"
|
#include "ws2812.h"
|
||||||
LED_TYPE g_ws2812_leds[WS2812_LED_TOTAL];
|
LED_TYPE g_ws2812_leds[WS2812_LED_TOTAL];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,16 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32a
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = bootloadHID
|
||||||
|
|
||||||
# build options
|
# build options
|
||||||
BOOTMAGIC_ENABLE = yes
|
BOOTMAGIC_ENABLE = yes
|
||||||
MOUSEKEY_ENABLE = no
|
MOUSEKEY_ENABLE = no
|
||||||
|
|||||||
@@ -1,3 +1,16 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32a
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = bootloadHID
|
||||||
|
|
||||||
# build options
|
# build options
|
||||||
BOOTMAGIC_ENABLE = yes
|
BOOTMAGIC_ENABLE = yes
|
||||||
MOUSEKEY_ENABLE = no
|
MOUSEKEY_ENABLE = no
|
||||||
|
|||||||
@@ -1,14 +1 @@
|
|||||||
# MCU name
|
|
||||||
MCU = atmega32a
|
|
||||||
|
|
||||||
# Bootloader selection
|
|
||||||
# Teensy halfkay
|
|
||||||
# Pro Micro caterina
|
|
||||||
# Atmel DFU atmel-dfu
|
|
||||||
# LUFA DFU lufa-dfu
|
|
||||||
# QMK DFU qmk-dfu
|
|
||||||
# ATmega32A bootloadHID
|
|
||||||
# ATmega328P USBasp
|
|
||||||
BOOTLOADER = bootloadHID
|
|
||||||
|
|
||||||
DEFAULT_FOLDER = ymd75/rev1
|
DEFAULT_FOLDER = ymd75/rev1
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 Neil Kettle
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
#define VENDOR_ID 0x594D
|
||||||
|
#define PRODUCT_ID 0x5364
|
||||||
|
#define DEVICE_VER 0x0200
|
||||||
|
#define MANUFACTURER YMDK
|
||||||
|
#define PRODUCT SP64
|
||||||
|
#define DESCRIPTION YMDK Split 64
|
||||||
|
|
||||||
|
#define MATRIX_ROWS 6
|
||||||
|
#define MATRIX_COLS 15
|
||||||
|
|
||||||
|
#define RIGHT_HALF
|
||||||
|
|
||||||
|
/* disable these deprecated features by default */
|
||||||
|
#define NO_ACTION_MACRO
|
||||||
|
#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
/* RGB underglow */
|
||||||
|
#define RGBLED_NUM 12
|
||||||
|
#define RGBLIGHT_HUE_STEP 8
|
||||||
|
#define RGBLIGHT_SAT_STEP 8
|
||||||
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 250 /* The maximum brightness level */
|
||||||
|
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "YMDK_SP64",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "walston",
|
||||||
|
"width": 16,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"~", "x":0, "y":0},
|
||||||
|
{"label":"!", "x":1, "y":0},
|
||||||
|
{"label":"@", "x":2, "y":0},
|
||||||
|
{"label":"#", "x":3, "y":0},
|
||||||
|
{"label":"$", "x":4, "y":0},
|
||||||
|
{"label":"%", "x":5, "y":0},
|
||||||
|
{"label":"^", "x":6, "y":0},
|
||||||
|
{"label":"&", "x":8, "y":0},
|
||||||
|
{"label":"*", "x":9, "y":0},
|
||||||
|
{"label":"(", "x":10, "y":0},
|
||||||
|
{"label":")", "x":11, "y":0},
|
||||||
|
{"label":"_", "x":12, "y":0},
|
||||||
|
{"label":"+", "x":13, "y":0},
|
||||||
|
{"label":"Backspace", "x":14, "y":0, "w":2},
|
||||||
|
{"label":"Tab", "x":0, "y":1, "w":1.5},
|
||||||
|
{"label":"Q", "x":1.5, "y":1},
|
||||||
|
{"label":"W", "x":2.5, "y":1},
|
||||||
|
{"label":"E", "x":3.5, "y":1},
|
||||||
|
{"label":"R", "x":4.5, "y":1},
|
||||||
|
{"label":"T", "x":5.5, "y":1},
|
||||||
|
{"label":"Y", "x":7.5, "y":1},
|
||||||
|
{"label":"U", "x":8.5, "y":1},
|
||||||
|
{"label":"I", "x":9.5, "y":1},
|
||||||
|
{"label":"O", "x":10.5, "y":1},
|
||||||
|
{"label":"P", "x":11.5, "y":1},
|
||||||
|
{"label":"{ ", "x":12.5, "y":1},
|
||||||
|
{"label":"}", "x":13.5, "y":1},
|
||||||
|
{"label":"|", "x":14.5, "y":1, "w":1.5},
|
||||||
|
{"label":"Caps Lock", "x":0, "y":2, "w":1.75},
|
||||||
|
{"label":"A", "x":1.75, "y":2},
|
||||||
|
{"label":"S", "x":2.75, "y":2},
|
||||||
|
{"label":"D", "x":3.75, "y":2},
|
||||||
|
{"label":"F", "x":4.75, "y":2},
|
||||||
|
{"label":"G", "x":5.75, "y":2},
|
||||||
|
{"label":"H", "x":7.75, "y":2},
|
||||||
|
{"label":"J", "x":8.75, "y":2},
|
||||||
|
{"label":"K", "x":9.75, "y":2},
|
||||||
|
{"label":"L", "x":10.75, "y":2},
|
||||||
|
{"label":":", "x":11.75, "y":2},
|
||||||
|
{"label":"\"", "x":12.75, "y":2},
|
||||||
|
{"label":"Enter", "x":13.75, "y":2, "w":2.25},
|
||||||
|
{"label":"Shift", "x":0, "y":3, "w":2},
|
||||||
|
{"label":"Z", "x":2, "y":3},
|
||||||
|
{"label":"X", "x":3, "y":3},
|
||||||
|
{"label":"C", "x":4, "y":3},
|
||||||
|
{"label":"V", "x":5, "y":3},
|
||||||
|
{"label":"B", "x":6, "y":3},
|
||||||
|
{"label":"N", "x":8, "y":3},
|
||||||
|
{"label":"M", "x":9, "y":3},
|
||||||
|
{"label":"<", "x":10, "y":3},
|
||||||
|
{"label":">", "x":11, "y":3},
|
||||||
|
{"label":"?", "x":12, "y":3},
|
||||||
|
{"label":"Shift", "x":13, "y":3},
|
||||||
|
{"label":"Up", "x":14, "y":3},
|
||||||
|
{"label":"F3", "x":15, "y":3},
|
||||||
|
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
|
||||||
|
{"label":"Win", "x":1.25, "y":4},
|
||||||
|
{"label":"Alt", "x":2.25, "y":4, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.5, "y":4, "w":2.25},
|
||||||
|
{"label":"Fn", "x":5.75, "y":4},
|
||||||
|
{"label":"Space", "x":7.75, "y":4, "w":2.75},
|
||||||
|
{"label":"Alt", "x":10.5, "y":4, "w":1.25},
|
||||||
|
{"label":"Win", "x":11.75, "y":4, "w":1.25},
|
||||||
|
{"label":"Left", "x":13, "y":4},
|
||||||
|
{"label":"Down", "x":14, "y":4},
|
||||||
|
{"label":"Right", "x":15, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
_BASE,
|
||||||
|
_GAMER,
|
||||||
|
_FN,
|
||||||
|
_RAISE,
|
||||||
|
_MODE,
|
||||||
|
_GACROS,
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ Ctrl │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │ Sft │ Up │ _MO │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ _FN │ Win │ Alt │ │ _RA │ │ │ Alt │ Win │ Lft │ Dwn │ Rgt │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_BASE] = LAYOUT(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPACE,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRACKET, KC_RBRACKET, KC_BSLS,
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_ENTER,
|
||||||
|
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, MO(_MODE),
|
||||||
|
MO(_FN), KC_LGUI, KC_LALT, KC_SPACE, MO(_RAISE), KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||||
|
),
|
||||||
|
/* Keymap 1: Gamer layer
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ Ctrl │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │ Sft │ Up │ _MO │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ _FN │ F13 │ Alt │ │ _GA │ │ │ Alt │ Win │ Lft │ Dwn │ Rgt │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_GAMER] = LAYOUT(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPACE,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRACKET, KC_RBRACKET, KC_BSLS,
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_ENTER,
|
||||||
|
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, MO(_MODE),
|
||||||
|
MO(_FN), KC_F13, KC_LALT, KC_SPACE, MO(_GACROS), KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Keymap 2: Function
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │ │ │ │ │ │ │Left │ Up │Down │Right│ │ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_FN] = LAYOUT(
|
||||||
|
KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
KC_CAPS, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
|
||||||
|
),
|
||||||
|
/* Keymap 3: Raise / Quality of life
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │ │ │ │ │ │ │Left │ Up │Down │Right│ │ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_RAISE] = LAYOUT(
|
||||||
|
KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
KC_CAPS, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
|
||||||
|
),
|
||||||
|
/* Keymap 4: Mode switching
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ RGB 0/1│RGBM-│RGBB+│RGBM+│ │ │ │ │ │ │ │ │ │ │ Reset │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │RGBS-│RGBB-│RGBS+│ │ │ │Left │ Up │Down │Right│ │ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ GAME| BASE│ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_MODE] = LAYOUT(
|
||||||
|
KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||||
|
RGB_TOG, RGB_RMOD, RGB_VAI, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
|
||||||
|
_______, RGB_SPD, RGB_VAD, RGB_SPI, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_GAMER), TO(_BASE), _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Keymap 5: Gaming macros
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ │ │ PUSH│ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │ │ FALL│ │ │ │ │Left │ Up │Down │Right│ │ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ CAP │ │ │ │ │ │ │ │ GAME| BASE│ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_GACROS] = LAYOUT(
|
||||||
|
KC_GRAVE, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_GAMER), TO(_BASE), _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
BASE, // default layer
|
||||||
|
_FN, // function layer
|
||||||
|
_FX // media keys
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ Caps │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │ Sft │ Up │ Fn │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ Ctrl │ Win │ Alt │ │ Fn │ │ │ Alt │ Win │ Lft │ Dwn │ Rgt │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[BASE] = LAYOUT(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPACE,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRACKET, KC_RBRACKET, KC_BSLS,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_ENTER,
|
||||||
|
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_F3,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(_FN), KC_SPACE, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||||
|
),
|
||||||
|
/* Function
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_FN] = LAYOUT(
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Media
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_FX] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
enum layer_names {
|
||||||
|
BASE, // default layer
|
||||||
|
_FUN, // function layer
|
||||||
|
_NUMPAD, // num-pad
|
||||||
|
_MEDIA // media keys
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ BkSp │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ Tab │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ Ctrl │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ Enter │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ LShift │ Z │ X │ C │ V │ B │ │ N │ M │ < │ > │ ? │ Sft │ Up │_MED │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ _NUM │_MED │ Alt │ Cmd │ Spc │ │ Space │ Cmd │ Alt │ Lft │ Dwn │ Rgt │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[BASE] = LAYOUT(
|
||||||
|
MT(RESET, KC_GRAVE), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPACE,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRACKET, KC_RBRACKET, KC_BSLS,
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_ENTER,
|
||||||
|
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, OSL(_MEDIA),
|
||||||
|
LT(_NUMPAD, KC_CAPS), TT(_MEDIA), KC_LALT, KC_LGUI, LT(_FUN, KC_SPACE), KC_SPACE, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||||
|
),
|
||||||
|
/* Keymap 1: Function Layer / Vim Arrows
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │Left │ Up │Down │Right│ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_FUN] = LAYOUT(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Keymap 2: NumPad
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ │ │ │ │ │ │ │ │ 7 │ 8 │ 9 │ │ Vol-│ Vol+│ Mute │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ 4 │ 5 │ 6 │ │ |<< │ >>| │ >|| │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ 1 │ 2 │ 3 │ │ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ 0 │ │ │ │ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_NUMPAD] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, KC_VOLD, KC_VOLU, KC_MUTE,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, KC_MPRV, KC_MNXT, KC_MPLY,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_P0, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
/* Keymap 3: Media
|
||||||
|
*
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ │ │ │ Backlight │ │ │ │ │ │ │ │ │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
[_MEDIA] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
COMMAND_ENABLE = no
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2013 Oleg Kostyuk <[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 "matrix.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include "wait.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "sp64.h"
|
||||||
|
#include "debounce.h"
|
||||||
|
|
||||||
|
/* matrix state(1:on, 0:off) */
|
||||||
|
static matrix_row_t matrix[MATRIX_ROWS];
|
||||||
|
|
||||||
|
// Debouncing: store for each key the number of scans until it's eligible to
|
||||||
|
// change. When scanning the matrix, ignore any changes in keys that have
|
||||||
|
// already changed in the last DEBOUNCE scans.
|
||||||
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
|
static void matrix_select_row(uint8_t row);
|
||||||
|
|
||||||
|
#ifdef RIGHT_HALF
|
||||||
|
static uint8_t mcp23018_reset_loop = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void matrix_init(void)
|
||||||
|
{
|
||||||
|
// all outputs for rows high
|
||||||
|
DDRB = 0xFF;
|
||||||
|
PORTB = 0xFF;
|
||||||
|
// all inputs for columns
|
||||||
|
DDRA = 0x00;
|
||||||
|
DDRC &= ~(0x111111<<2);
|
||||||
|
DDRD &= ~(1<<PIND7);
|
||||||
|
// all columns are pulled-up
|
||||||
|
PORTA = 0xFF;
|
||||||
|
PORTC |= (0b111111<<2);
|
||||||
|
PORTD |= (1<<PIND7);
|
||||||
|
|
||||||
|
#ifdef RIGHT_HALF
|
||||||
|
// initialize row and col
|
||||||
|
mcp23018_status = init_mcp23018();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
matrix[row] = 0;
|
||||||
|
matrix_debouncing[row] = 0;
|
||||||
|
}
|
||||||
|
debounce_init(MATRIX_ROWS);
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
#ifdef RIGHT_HALF
|
||||||
|
// Then the keyboard
|
||||||
|
if (mcp23018_status != I2C_STATUS_SUCCESS) {
|
||||||
|
if (++mcp23018_reset_loop == 0) {
|
||||||
|
// if (++mcp23018_reset_loop >= 1300) {
|
||||||
|
// since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
|
||||||
|
// this will be approx bit more frequent than once per second
|
||||||
|
print("trying to reset mcp23018\n");
|
||||||
|
mcp23018_status = init_mcp23018();
|
||||||
|
if (mcp23018_status) {
|
||||||
|
print("left side not responding\n");
|
||||||
|
} else {
|
||||||
|
print("left side attached\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
bool changed = false;
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++)
|
||||||
|
{
|
||||||
|
matrix_row_t cols;
|
||||||
|
|
||||||
|
matrix_select_row(row);
|
||||||
|
#ifndef RIGHT_HALF
|
||||||
|
_delay_us(5);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
cols = (
|
||||||
|
// cols 0..7, PORTA 0 -> 7
|
||||||
|
(~PINA) & 0xFF
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef RIGHT_HALF
|
||||||
|
uint8_t data = 0x7F;
|
||||||
|
// Receive the columns from right half
|
||||||
|
i2c_receive(I2C_ADDR_WRITE, &data, 1, MCP23018_I2C_TIMEOUT);
|
||||||
|
cols |= ((~(data) & 0x7F) << 7);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (matrix_debouncing[row] != cols) {
|
||||||
|
matrix_debouncing[row] = cols;
|
||||||
|
//debouncing = DEBOUNCE;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
debounce(matrix_debouncing, matrix, MATRIX_ROWS, changed);
|
||||||
|
|
||||||
|
matrix_scan_quantum();
|
||||||
|
|
||||||
|
#ifdef DEBUG_MATRIX
|
||||||
|
for (uint8_t c = 0; c < MATRIX_COLS; c++)
|
||||||
|
for (uint8_t r = 0; r < MATRIX_ROWS; r++)
|
||||||
|
if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return (uint8_t)changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
matrix_row_t matrix_get_row(uint8_t row)
|
||||||
|
{
|
||||||
|
return matrix[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void)
|
||||||
|
{
|
||||||
|
print("\nr/c 0123456789ABCDEF\n");
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
phex(row); print(": ");
|
||||||
|
pbin_reverse16(matrix_get_row(row));
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_key_count(void)
|
||||||
|
{
|
||||||
|
uint8_t count = 0;
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||||
|
count += bitpop16(matrix[i]);
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void matrix_select_row(uint8_t row)
|
||||||
|
{
|
||||||
|
#ifdef RIGHT_HALF
|
||||||
|
uint8_t txdata[3];
|
||||||
|
|
||||||
|
//Set the remote row on port A
|
||||||
|
txdata[0] = GPIOA;
|
||||||
|
txdata[1] = 0xFF & ~(1<<row);
|
||||||
|
mcp23018_status = i2c_transmit(I2C_ADDR_WRITE, (uint8_t *)txdata, 2, MCP23018_I2C_TIMEOUT);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// select other half
|
||||||
|
DDRB = (1 << row);
|
||||||
|
PORTB = ~(1 << row);
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# YMDK SP64
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [Nathan Walston](https://github.com/walston)
|
||||||
|
* Hardware Supported: YMDK SP64 with the ATmega32a chip.
|
||||||
|
* Hardware Availability: [Aliexpress](https://www.aliexpress.com/item/4000074426801.html?spm=a2g0o.productlist.0.0.13a043a4NuWRUc&algo_pvid=d2e1c7f2-710a-47be-98be-c2ee4c35e205&algo_expid=d2e1c7f2-710a-47be-98be-c2ee4c35e205-1&btsid=7eeb6dd6-e91f-4ecc-b94c-0ce4b1d089e0&ws_ab_test=searchweb0_0,searchweb201602_9,searchweb201603_53)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make ymdk/sp64:default
|
||||||
|
|
||||||
|
Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
|
||||||
|
|
||||||
|
make ymdk/sp64:default:flash
|
||||||
|
|
||||||
|
**Reset Key**: Hold down the key located at top left on the left hand board, commonly programmed as _ESC_ while plugging in the keyboard. (NOTE: If this doesn't work, try the lower left key on the lower left board, commonly programmed as _Control_. There might be a different version of the board that uses that key as the reset.)
|
||||||
|
|
||||||
|
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 = atmega32a
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = bootloadHID
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = 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
|
||||||
|
AUDIO_ENABLE = no # There is no speaker on this PCB
|
||||||
|
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
|
# Needed for underglow
|
||||||
|
WS2812_DRIVER = i2c
|
||||||
|
|
||||||
|
SRC += matrix.c
|
||||||
|
QUANTUM_LIB_SRC += i2c_master.c
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
/* Copyright 2019 Neil Kettle
|
||||||
|
*
|
||||||
|
* 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 "sp64.h"
|
||||||
|
|
||||||
|
#ifdef RIGHT_HALF
|
||||||
|
bool i2c_initialized = 0;
|
||||||
|
i2c_status_t mcp23018_status = I2C_STATUS_ERROR;
|
||||||
|
|
||||||
|
uint8_t init_mcp23018(void)
|
||||||
|
{
|
||||||
|
uint8_t data[3];
|
||||||
|
mcp23018_status = I2C_STATUS_ERROR;
|
||||||
|
|
||||||
|
// I2C subsystem
|
||||||
|
if (i2c_initialized == 0) {
|
||||||
|
i2c_init(); // on pins D(1,0)
|
||||||
|
i2c_initialized = true;
|
||||||
|
_delay_ms(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set pin direction
|
||||||
|
// - unused : input : 1
|
||||||
|
// - input : input : 1
|
||||||
|
// - driving : output :
|
||||||
|
data[0] = IODIRA;
|
||||||
|
data[1] = 0b00000000;
|
||||||
|
data[2] = 0b11111111;
|
||||||
|
mcp23018_status = i2c_transmit(I2C_ADDR_WRITE, (uint8_t *)data, 3, MCP23018_I2C_TIMEOUT);
|
||||||
|
if (mcp23018_status != I2C_STATUS_SUCCESS)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
// set pull-up
|
||||||
|
// - unused : on : 1
|
||||||
|
// - input : on : 1
|
||||||
|
// - driving : off : 0
|
||||||
|
data[0] = GPPUA;
|
||||||
|
data[1] = 0b00000000;
|
||||||
|
data[2] = 0b11111111;
|
||||||
|
mcp23018_status = i2c_transmit(I2C_ADDR_WRITE, (uint8_t *)data, 3, MCP23018_I2C_TIMEOUT);
|
||||||
|
if (mcp23018_status != I2C_STATUS_SUCCESS)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
// set logical value (doesn't matter on inputs)
|
||||||
|
// - unused : hi-Z : 1
|
||||||
|
// - input : hi-Z : 1
|
||||||
|
// - driving : hi-Z : 1
|
||||||
|
data[0] = OLATA;
|
||||||
|
data[1] = 0b11111111;
|
||||||
|
data[2] = 0b11111111;
|
||||||
|
mcp23018_status = i2c_transmit(I2C_ADDR_WRITE, (uint8_t *)data, 3, MCP23018_I2C_TIMEOUT);
|
||||||
|
|
||||||
|
out:
|
||||||
|
return (mcp23018_status);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Optional override functions below.
|
||||||
|
// You can leave any or all of these undefined.
|
||||||
|
// These are only required if you want to perform custom actions.
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_user(void) {}
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_user(void) {}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
// put your looping keyboard code here
|
||||||
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
/* Copyright 2019 Neil Kettle
|
||||||
|
*
|
||||||
|
* 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"
|
||||||
|
|
||||||
|
#ifdef RIGHT_HALF
|
||||||
|
# include <stdint.h>
|
||||||
|
# include "i2c_master.h"
|
||||||
|
|
||||||
|
// I2C aliases and register addresses (see "mcp23018.md")
|
||||||
|
# define I2C_ADDR 0b0100000
|
||||||
|
# define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE )
|
||||||
|
# define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ )
|
||||||
|
# define IODIRA 0x00 // i/o direction register
|
||||||
|
# define IODIRB 0x01
|
||||||
|
# define GPPUA 0x0C // GPIO pull-up resistor register
|
||||||
|
# define GPPUB 0x0D
|
||||||
|
# define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT)
|
||||||
|
# define GPIOB 0x13
|
||||||
|
# define OLATA 0x14 // output latch register
|
||||||
|
# define OLATB 0x15
|
||||||
|
|
||||||
|
extern i2c_status_t mcp23018_status;
|
||||||
|
# define MCP23018_I2C_TIMEOUT 100
|
||||||
|
|
||||||
|
uint8_t init_mcp23018(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ___ KC_NO
|
||||||
|
#define XXX KC_NO
|
||||||
|
|
||||||
|
/* This is 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.
|
||||||
|
*
|
||||||
|
* LEFT HAND RIGHT HAND
|
||||||
|
* ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐ ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
|
||||||
|
* │ L00 │ L01 │ L02 │ L03 │ L04 │ L05 │ L06 │ │ R07 │ R08 │ R09 │ R0A │ R0B │ R0C │ R0D │
|
||||||
|
* ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
|
||||||
|
* │ L10 │ L11 │ L12 │ L13 │ L14 │ L15 │ │ R16 │ R17 │ R18 │ R19 │ R1A │ R1B │ R1C │ R1D │
|
||||||
|
* ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
|
||||||
|
* │ L20 │ L21 │ L22 │ L23 │ L24 │ L25 │ │ R26 │ R27 │ R28 │ R29 │ R2A │ R2B │ R2C │
|
||||||
|
* ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐ └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
|
||||||
|
* │ L30 │ L31 │ L32 │ L33 │ L34 │ L35 │ │ R36 │ R37 │ R38 │ R39 │ R3A │ R3B │ R3C │ R3D │
|
||||||
|
* ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘ ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
|
||||||
|
* │ L40 │ L41 │ L42 │ L43 │ L45 │ │ R46 │ R48 │ R4A │ R4B │ R4C │ R4D │
|
||||||
|
* └------┴-----┴------┴-------------┴-----┘ └---------------┴-------┴------┴-----┴-----┴-----┘
|
||||||
|
*/
|
||||||
|
#define LAYOUT( \
|
||||||
|
L00, L01, L02, L03, L04, L05, L06, R07, R08, R09, R0A, R0B, R0C, R0D, \
|
||||||
|
L10, L11, L12, L13, L14, L15, R16, R17, R18, R19, R1A, R1B, R1C, R1D, \
|
||||||
|
L20, L21, L22, L23, L24, L25, R26, R27, R28, R29, R2A, R2B, R2C, \
|
||||||
|
L30, L31, L32, L33, L34, L35, R36, R37, R38, R39, R3A, R3B, R3C, R3D, \
|
||||||
|
L40, L41, L42, L43, L45, R46, R48, R4A, R4B, R4C, R4D \
|
||||||
|
) \
|
||||||
|
/* matrix positions */ \
|
||||||
|
{ \
|
||||||
|
{ ___, ___, ___, ___, ___, ___, ___, R46, R48, R4A, R4B, R4C, R4D, R3D }, \
|
||||||
|
{ L40, L41, L42, L43, L45, L06, ___, R36, R37, R38, R39, R3A, R3B, R3C }, \
|
||||||
|
{ L30, L31, L32, L33, L34, L35, ___, R26, R27, R28, R29, R2A, R2B, R2C }, \
|
||||||
|
{ L20, L21, L22, L23, L24, L25, ___, R17, R18, R19, R1A, R1B, R1C, R1D }, \
|
||||||
|
{ L10, L11, L12, L13, L14, L15, ___, R07, R08, R09, R0A, R0B, R0C, R0D }, \
|
||||||
|
{ L00, L01, L02, L03, L04, L05, ___, R16, ___, ___, ___, ___, ___, ___ } \
|
||||||
|
}
|
||||||
|
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
Check out the user's QMK environment and make sure it's ready to compile.
|
Check out the user's QMK environment and make sure it's ready to compile.
|
||||||
"""
|
"""
|
||||||
import platform
|
import platform
|
||||||
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -50,6 +51,16 @@ def _deprecated_udev_rule(vid, pid=None):
|
|||||||
return 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="%s", MODE:="0666"' % vid
|
return 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="%s", MODE:="0666"' % vid
|
||||||
|
|
||||||
|
|
||||||
|
def parse_gcc_version(version):
|
||||||
|
m = re.match(r"(\d+)(?:\.(\d+))?(?:\.(\d+))?", version)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'major': int(m.group(1)),
|
||||||
|
'minor': int(m.group(2)) if m.group(2) else 0,
|
||||||
|
'patch': int(m.group(3)) if m.group(3) else 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def check_arm_gcc_version():
|
def check_arm_gcc_version():
|
||||||
"""Returns True if the arm-none-eabi-gcc version is not known to cause problems.
|
"""Returns True if the arm-none-eabi-gcc version is not known to cause problems.
|
||||||
"""
|
"""
|
||||||
@@ -66,8 +77,8 @@ def check_avr_gcc_version():
|
|||||||
if 'output' in ESSENTIAL_BINARIES['avr-gcc']:
|
if 'output' in ESSENTIAL_BINARIES['avr-gcc']:
|
||||||
version_number = ESSENTIAL_BINARIES['avr-gcc']['output'].strip()
|
version_number = ESSENTIAL_BINARIES['avr-gcc']['output'].strip()
|
||||||
|
|
||||||
major, minor, rest = version_number.split('.', 2)
|
parsed_version = parse_gcc_version(version_number)
|
||||||
if int(major) > 8:
|
if parsed_version['major'] > 8:
|
||||||
cli.log.error('We do not recommend avr-gcc newer than 8. Downgrading to 8.x is recommended.')
|
cli.log.error('We do not recommend avr-gcc newer than 8. Downgrading to 8.x is recommended.')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ def test_list_keymaps_no_keyboard_found():
|
|||||||
def test_json2c():
|
def test_json2c():
|
||||||
result = check_subcommand('json2c', 'keyboards/handwired/onekey/keymaps/default_json/keymap.json')
|
result = check_subcommand('json2c', 'keyboards/handwired/onekey/keymaps/default_json/keymap.json')
|
||||||
check_returncode(result, 0)
|
check_returncode(result, 0)
|
||||||
assert result.stdout == '#include QMK_KEYBOARD_H\nconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\t[0] = LAYOUT(KC_A)};\n\n'
|
assert result.stdout == '#include QMK_KEYBOARD_H\nconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\t[0] = LAYOUT_ortho_1x1(KC_A)};\n\n'
|
||||||
|
|
||||||
|
|
||||||
def test_info():
|
def test_info():
|
||||||
@@ -132,7 +132,7 @@ def test_info_keyboard_render():
|
|||||||
check_returncode(result)
|
check_returncode(result)
|
||||||
assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
|
assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
|
||||||
assert 'Processor: STM32F303' in result.stdout
|
assert 'Processor: STM32F303' in result.stdout
|
||||||
assert 'Layout:' in result.stdout
|
assert 'Layouts:' in result.stdout
|
||||||
assert 'k0' in result.stdout
|
assert 'k0' in result.stdout
|
||||||
|
|
||||||
|
|
||||||
@@ -149,6 +149,6 @@ def test_info_matrix_render():
|
|||||||
check_returncode(result)
|
check_returncode(result)
|
||||||
assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
|
assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
|
||||||
assert 'Processor: STM32F303' in result.stdout
|
assert 'Processor: STM32F303' in result.stdout
|
||||||
assert 'LAYOUT' in result.stdout
|
assert 'LAYOUT_ortho_1x1' in result.stdout
|
||||||
assert '│0A│' in result.stdout
|
assert '│0A│' in result.stdout
|
||||||
assert 'Matrix for "LAYOUT"' in result.stdout
|
assert 'Matrix for "LAYOUT_ortho_1x1"' in result.stdout
|
||||||
@@ -32,6 +32,8 @@
|
|||||||
# include "is31fl3733.h"
|
# include "is31fl3733.h"
|
||||||
#elif defined(IS31FL3737)
|
#elif defined(IS31FL3737)
|
||||||
# include "is31fl3737.h"
|
# include "is31fl3737.h"
|
||||||
|
#elif defined(IS31FL3741)
|
||||||
|
# include "is31fl3741.h"
|
||||||
#elif defined(WS2812)
|
#elif defined(WS2812)
|
||||||
# include "ws2812.h"
|
# include "ws2812.h"
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
* be here if shared between boards.
|
* be here if shared between boards.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(IS31FL3731) || defined(IS31FL3733) || defined(IS31FL3737)
|
#if defined(IS31FL3731) || defined(IS31FL3733) || defined(IS31FL3737) || defined(IS31FL3741)
|
||||||
|
|
||||||
# include "i2c_master.h"
|
# include "i2c_master.h"
|
||||||
|
|
||||||
@@ -34,8 +34,10 @@ static void init(void) {
|
|||||||
IS31FL3731_init(DRIVER_ADDR_2);
|
IS31FL3731_init(DRIVER_ADDR_2);
|
||||||
# elif defined(IS31FL3733)
|
# elif defined(IS31FL3733)
|
||||||
IS31FL3733_init(DRIVER_ADDR_1, 0);
|
IS31FL3733_init(DRIVER_ADDR_1, 0);
|
||||||
# else
|
# elif defined(IS31FL3737)
|
||||||
IS31FL3737_init(DRIVER_ADDR_1);
|
IS31FL3737_init(DRIVER_ADDR_1);
|
||||||
|
# else
|
||||||
|
IS31FL3741_init(DRIVER_ADDR_1);
|
||||||
# endif
|
# endif
|
||||||
for (int index = 0; index < DRIVER_LED_TOTAL; index++) {
|
for (int index = 0; index < DRIVER_LED_TOTAL; index++) {
|
||||||
bool enabled = true;
|
bool enabled = true;
|
||||||
@@ -44,8 +46,10 @@ static void init(void) {
|
|||||||
IS31FL3731_set_led_control_register(index, enabled, enabled, enabled);
|
IS31FL3731_set_led_control_register(index, enabled, enabled, enabled);
|
||||||
# elif defined(IS31FL3733)
|
# elif defined(IS31FL3733)
|
||||||
IS31FL3733_set_led_control_register(index, enabled, enabled, enabled);
|
IS31FL3733_set_led_control_register(index, enabled, enabled, enabled);
|
||||||
# else
|
# elif defined(IS31FL3737)
|
||||||
IS31FL3737_set_led_control_register(index, enabled, enabled, enabled);
|
IS31FL3737_set_led_control_register(index, enabled, enabled, enabled);
|
||||||
|
# else
|
||||||
|
IS31FL3741_set_led_control_register(index, enabled, enabled, enabled);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
// This actually updates the LED drivers
|
// This actually updates the LED drivers
|
||||||
@@ -55,8 +59,10 @@ static void init(void) {
|
|||||||
# elif defined(IS31FL3733)
|
# elif defined(IS31FL3733)
|
||||||
IS31FL3733_update_led_control_registers(DRIVER_ADDR_1, 0);
|
IS31FL3733_update_led_control_registers(DRIVER_ADDR_1, 0);
|
||||||
IS31FL3733_update_led_control_registers(DRIVER_ADDR_2, 1);
|
IS31FL3733_update_led_control_registers(DRIVER_ADDR_2, 1);
|
||||||
# else
|
# elif defined(IS31FL3737)
|
||||||
IS31FL3737_update_led_control_registers(DRIVER_ADDR_1, DRIVER_ADDR_2);
|
IS31FL3737_update_led_control_registers(DRIVER_ADDR_1, DRIVER_ADDR_2);
|
||||||
|
# else
|
||||||
|
IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +90,7 @@ const rgb_matrix_driver_t rgb_matrix_driver = {
|
|||||||
.set_color = IS31FL3733_set_color,
|
.set_color = IS31FL3733_set_color,
|
||||||
.set_color_all = IS31FL3733_set_color_all,
|
.set_color_all = IS31FL3733_set_color_all,
|
||||||
};
|
};
|
||||||
# else
|
# elif defined(IS31FL3737)
|
||||||
static void flush(void) { IS31FL3737_update_pwm_buffers(DRIVER_ADDR_1, DRIVER_ADDR_2); }
|
static void flush(void) { IS31FL3737_update_pwm_buffers(DRIVER_ADDR_1, DRIVER_ADDR_2); }
|
||||||
|
|
||||||
const rgb_matrix_driver_t rgb_matrix_driver = {
|
const rgb_matrix_driver_t rgb_matrix_driver = {
|
||||||
@@ -93,6 +99,17 @@ const rgb_matrix_driver_t rgb_matrix_driver = {
|
|||||||
.set_color = IS31FL3737_set_color,
|
.set_color = IS31FL3737_set_color,
|
||||||
.set_color_all = IS31FL3737_set_color_all,
|
.set_color_all = IS31FL3737_set_color_all,
|
||||||
};
|
};
|
||||||
|
# else
|
||||||
|
static void flush(void) {
|
||||||
|
IS31FL3741_update_pwm_buffers(DRIVER_ADDR_1, DRIVER_ADDR_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
const rgb_matrix_driver_t rgb_matrix_driver = {
|
||||||
|
.init = init,
|
||||||
|
.flush = flush,
|
||||||
|
.set_color = IS31FL3741_set_color,
|
||||||
|
.set_color_all = IS31FL3741_set_color_all,
|
||||||
|
};
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#elif defined(WS2812)
|
#elif defined(WS2812)
|
||||||
|
|||||||
@@ -8,26 +8,21 @@ let
|
|||||||
in {
|
in {
|
||||||
dfu-programmer = addDarwinSupport super.dfu-programmer;
|
dfu-programmer = addDarwinSupport super.dfu-programmer;
|
||||||
teensy-loader-cli = addDarwinSupport super.teensy-loader-cli;
|
teensy-loader-cli = addDarwinSupport super.teensy-loader-cli;
|
||||||
|
|
||||||
avrgcc = super.avrgcc.overrideAttrs (oldAttrs: rec {
|
|
||||||
name = "avr-gcc-8.1.0";
|
|
||||||
src = super.fetchurl {
|
|
||||||
url = "mirror://gcc/releases/gcc-8.1.0/gcc-8.1.0.tar.xz";
|
|
||||||
sha256 = "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x";
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nixpkgs = builtins.fetchTarball {
|
nixpkgs = builtins.fetchTarball {
|
||||||
url = "https://github.com/NixOS/nixpkgs/archive/0260747427737b980f0.tar.gz";
|
url = "https://github.com/NixOS/nixpkgs/archive/903266491b7b9b0379e88709feca0af900def0d9.tar.gz";
|
||||||
sha256 = "1p2yc6b40xvvxvmlqd9wb440pkrimnlc2wsbpa5rddlpx1dn8qmf";
|
sha256 = "1b5wjrfgyha6s15k1yjyx41hvrpmd5szpkpkxk6l5hyrfqsr8wip";
|
||||||
};
|
};
|
||||||
|
|
||||||
pkgs = import nixpkgs { overlays = [ overlay ]; };
|
pkgs = import nixpkgs { overlays = [ overlay ]; };
|
||||||
in
|
in
|
||||||
|
|
||||||
with pkgs;
|
with pkgs;
|
||||||
let avr_incflags = [
|
let
|
||||||
|
avrlibc = pkgsCross.avr.libcCross;
|
||||||
|
|
||||||
|
avr_incflags = [
|
||||||
"-isystem ${avrlibc}/avr/include"
|
"-isystem ${avrlibc}/avr/include"
|
||||||
"-B${avrlibc}/avr/lib/avr5"
|
"-B${avrlibc}/avr/lib/avr5"
|
||||||
"-L${avrlibc}/avr/lib/avr5"
|
"-L${avrlibc}/avr/lib/avr5"
|
||||||
@@ -41,7 +36,12 @@ stdenv.mkDerivation {
|
|||||||
name = "qmk-firmware";
|
name = "qmk-firmware";
|
||||||
|
|
||||||
buildInputs = [ dfu-programmer dfu-util diffutils git python3 ]
|
buildInputs = [ dfu-programmer dfu-util diffutils git python3 ]
|
||||||
++ lib.optional avr [ avrbinutils avrgcc avrlibc avrdude ]
|
++ lib.optional avr [
|
||||||
|
pkgsCross.avr.buildPackages.binutils
|
||||||
|
pkgsCross.avr.buildPackages.gcc8
|
||||||
|
avrlibc
|
||||||
|
avrdude
|
||||||
|
]
|
||||||
++ lib.optional arm [ gcc-arm-embedded ]
|
++ lib.optional arm [ gcc-arm-embedded ]
|
||||||
++ lib.optional teensy [ teensy-loader-cli ];
|
++ lib.optional teensy [ teensy-loader-cli ];
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define BWORD LCTL(KC_BSPC)
|
#define BWORD LCTL(KC_BSPC)
|
||||||
|
#define BLINE LALT(KC_BSPC)
|
||||||
#define LWORD LCTL(KC_LEFT)
|
#define LWORD LCTL(KC_LEFT)
|
||||||
#define RWORD LCTL(KC_RIGHT)
|
#define RWORD LCTL(KC_RIGHT)
|
||||||
#define JUMPBACK LSFT(KC_TAB)
|
#define JUMPBACK LSFT(KC_TAB)
|
||||||
|
|||||||
Reference in new issue
Block a user