Merge branch 'develop' of github.com:qmk/qmk_firmware into develop
This commit is contained in:
@@ -159,7 +159,6 @@ A configuration example for the STM32F103C8 would be:
|
||||
//halconf.h:
|
||||
#define HAL_USE_PWM TRUE
|
||||
#define HAL_USE_PAL TRUE
|
||||
#define HAL_USE_GPT TRUE
|
||||
#include_next <halconf.h>
|
||||
```
|
||||
|
||||
@@ -168,8 +167,6 @@ A configuration example for the STM32F103C8 would be:
|
||||
#include_next <mcuconf.h>
|
||||
#undef STM32_PWM_USE_TIM1
|
||||
#define STM32_PWM_USE_TIM1 TRUE
|
||||
#undef STM32_GPT_USE_TIM4
|
||||
#define STM32_GPT_USE_TIM4 TRUE
|
||||
```
|
||||
|
||||
If we now target pin A8, looking through the data-sheet of the STM32F103C8, for the timers and alternate functions
|
||||
@@ -184,7 +181,6 @@ with all this information, the configuration would contain these lines:
|
||||
#define AUDIO_PIN A8
|
||||
#define AUDIO_PWM_DRIVER PWMD1
|
||||
#define AUDIO_PWM_CHANNEL 1
|
||||
#define AUDIO_STATE_TIMER GPTD4
|
||||
```
|
||||
|
||||
ChibiOS uses GPIOv1 for the F103, which only knows of one alternate function.
|
||||
@@ -207,15 +203,15 @@ You can also change the timer used for software PWM by defining the driver. For
|
||||
|
||||
While not an exhaustive list, the following table provides the scenarios that have been partially validated:
|
||||
|
||||
| | DAC basic | DAC additive | PWM hardware | PWM software |
|
||||
|--------------------------|--------------------|--------------------|--------------------|--------------------|
|
||||
| | DAC basic | DAC additive | PWM hardware | PWM software |
|
||||
| ------------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
||||
| Atmega32U4 | :o: | :o: | :heavy_check_mark: | :o: |
|
||||
| RP2040 | :x: | :x: | :heavy_check_mark: | ? |
|
||||
| STM32F103C8 (bluepill) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| STM32F303CCT6 (proton-c) | :heavy_check_mark: | :heavy_check_mark: | ? | :heavy_check_mark: |
|
||||
| STM32F405VG | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| L0xx | :x: (no Tim8) | ? | ? | ? |
|
||||
|
||||
|
||||
:heavy_check_mark: : works and was tested
|
||||
:o: : does not apply
|
||||
:x: : not supported by MCU
|
||||
|
||||
+15
-15
@@ -300,14 +300,14 @@ This will enable you to define three keys temporarily to increase, decrease and
|
||||
|
||||
Map three keys temporarily in your keymap:
|
||||
|
||||
| Key Name | Description |
|
||||
|----------|-----------------------------------------------------|
|
||||
| KC_ASDN | Lower the Auto Shift timeout variable (down) |
|
||||
| KC_ASUP | Raise the Auto Shift timeout variable (up) |
|
||||
| KC_ASRP | Report your current Auto Shift timeout value |
|
||||
| KC_ASON | Turns on the Auto Shift Function |
|
||||
| KC_ASOFF | Turns off the Auto Shift Function |
|
||||
| KC_ASTG | Toggles the state of the Auto Shift feature |
|
||||
|Keycode |Aliases |Description |
|
||||
|----------------------|---------|--------------------------------------------|
|
||||
|`QK_AUTO_SHIFT_DOWN` |`AS_DOWN`|Lower the Auto Shift timeout variable (down)|
|
||||
|`QK_AUTO_SHIFT_UP` |`AS_UP` |Raise the Auto Shift timeout variable (up) |
|
||||
|`QK_AUTO_SHIFT_REPORT`|`AS_RPT` |Report your current Auto Shift timeout value|
|
||||
|`QK_AUTO_SHIFT_ON` |`AS_ON` |Turns on the Auto Shift Function |
|
||||
|`QK_AUTO_SHIFT_OFF` |`AS_OFF` |Turns off the Auto Shift Function |
|
||||
|`QK_AUTO_SHIFT_TOGGLE`|`AS_TOGG`|Toggles the state of the Auto Shift feature |
|
||||
|
||||
Compile and upload your new firmware.
|
||||
|
||||
@@ -318,18 +318,18 @@ completely normal and with no intention of shifted keys.
|
||||
|
||||
1. Type multiple sentences of alphabetical letters.
|
||||
2. Observe any upper case letters.
|
||||
3. If there are none, press the key you have mapped to `KC_ASDN` to decrease
|
||||
3. If there are none, press the key you have mapped to `AS_DOWN` to decrease
|
||||
time Auto Shift timeout value and go back to step 1.
|
||||
4. If there are some upper case letters, decide if you need to work on tapping
|
||||
those keys with less down time, or if you need to increase the timeout.
|
||||
5. If you decide to increase the timeout, press the key you have mapped to
|
||||
`KC_ASUP` and go back to step 1.
|
||||
`AS_UP` and go back to step 1.
|
||||
6. Once you are happy with your results, press the key you have mapped to
|
||||
`KC_ASRP`. The keyboard will type by itself the value of your
|
||||
`AS_RPT`. The keyboard will type by itself the value of your
|
||||
`AUTO_SHIFT_TIMEOUT`.
|
||||
7. Update `AUTO_SHIFT_TIMEOUT` in your `config.h` with the value reported.
|
||||
8. Add `AUTO_SHIFT_NO_SETUP` to your `config.h`.
|
||||
9. Remove the key bindings `KC_ASDN`, `KC_ASUP` and `KC_ASRP`.
|
||||
9. Remove the key bindings `AS_DOWN`, `AS_UP` and `AS_RPT`.
|
||||
10. Compile and upload your new firmware.
|
||||
|
||||
#### An Example Run
|
||||
@@ -337,17 +337,17 @@ completely normal and with no intention of shifted keys.
|
||||
hello world. my name is john doe. i am a computer programmer playing with
|
||||
keyboards right now.
|
||||
|
||||
[PRESS KC_ASDN quite a few times]
|
||||
[PRESS AS_DOWN quite a few times]
|
||||
|
||||
heLLo woRLd. mY nAMe is JOHn dOE. i AM A compUTeR proGRaMMER PlAYiNG witH
|
||||
KEYboArDS RiGHT NOw.
|
||||
|
||||
[PRESS KC_ASUP a few times]
|
||||
[PRESS AS_UP a few times]
|
||||
|
||||
hello world. my name is john Doe. i am a computer programmer playing with
|
||||
keyboarDs right now.
|
||||
|
||||
[PRESS KC_ASRP]
|
||||
[PRESS AS_RPT]
|
||||
|
||||
115
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ AUTOCORRECT_ENABLE = yes
|
||||
|
||||
Additionally, you will need a library for autocorrection. A small sample library is included by default, so that you can get up and running right away, but you can provide a customized library.
|
||||
|
||||
By default, autocorrect is disabled. To enable it, you need to use the `AUTOCORRECT_TOGGLE` keycode to enable it. The status is stored in persistent memory, so you shouldn't need to enabled it again.
|
||||
By default, autocorrect is disabled. To enable it, you need to use the `AC_TOGG` keycode to enable it. The status is stored in persistent memory, so you shouldn't need to enabled it again.
|
||||
|
||||
## Customizing autocorrect library :id=customizing-autocorrect-library
|
||||
|
||||
@@ -94,15 +94,15 @@ Occasionally you might actually want to type a typo (for instance, while editing
|
||||
|
||||
This works because the autocorrection implementation doesn’t understand hotkeys, so it resets itself whenever a modifier other than shift is held.
|
||||
|
||||
Additionally, you can use the `AUTOCORRECT_TOGGLE` keycode to toggle the on/off status for Autocorrect.
|
||||
Additionally, you can use the `AC_TOGG` keycode to toggle the on/off status for Autocorrect.
|
||||
|
||||
### Keycodes :id=keycodes
|
||||
|
||||
|Keycode | Short keycode | Description |
|
||||
|---------------------|---------------|------------------------------------------------|
|
||||
|`AUTOCORRECT_ON` | `CRT_ON` | Turns on the Autocorrect feature. |
|
||||
|`AUTOCORRECT_OFF` | `CRT_OFF` | Turns off the Autocorrect feature. |
|
||||
|`AUTOCORRECT_TOGGLE` | `CRT_TOG` | Toggles the status of the Autocorrect feature. |
|
||||
|Keycode |Aliases |Description |
|
||||
|-----------------------|---------|----------------------------------------------|
|
||||
|`QK_AUTOCORRECT_ON` |`AC_ON` |Turns on the Autocorrect feature. |
|
||||
|`QK_AUTOCORRECT_OFF` |`AC_OFF` |Turns off the Autocorrect feature. |
|
||||
|`QK_AUTOCORRECT_TOGGLE`|`AC_TOGG`|Toggles the status of the Autocorrect feature.|
|
||||
|
||||
## User Callback Functions
|
||||
|
||||
|
||||
@@ -42,8 +42,8 @@ CAPS_WORD_ENABLE = yes
|
||||
|
||||
Next, use one the following methods to activate Caps Word:
|
||||
|
||||
* **Activate by pressing a key**: Use the `CAPS_WORD` keycode (short
|
||||
alias `CAPSWRD`) in your keymap.
|
||||
* **Activate by pressing a key**: Use the `QK_CAPS_WORD_TOGGLE` keycode (short
|
||||
alias `CW_TOGG`) in your keymap.
|
||||
|
||||
* **Activate by pressing Left Shift + Right Shift**: Add `#define
|
||||
BOTH_SHIFTS_TURNS_ON_CAPS_WORD` to config.h. You may also need to disable or
|
||||
|
||||
@@ -105,11 +105,11 @@ It is worth noting that `COMBO_ACTION`s are not needed anymore. As of [PR#8591](
|
||||
## Keycodes
|
||||
You can enable, disable and toggle the Combo feature on the fly. This is useful if you need to disable them temporarily, such as for a game. The following keycodes are available for use in your `keymap.c`
|
||||
|
||||
|Keycode |Description |
|
||||
|----------|---------------------------------|
|
||||
|`CMB_ON` |Turns on Combo feature |
|
||||
|`CMB_OFF` |Turns off Combo feature |
|
||||
|`CMB_TOG` |Toggles Combo feature on and off |
|
||||
|Keycode |Aliases |Description |
|
||||
|-----------------|---------|--------------------------------|
|
||||
|`QK_COMBO_ON` |`CM_ON` |Turns on Combo feature |
|
||||
|`QK_COMBO_OFF` |`CM_OFF` |Turns off Combo feature |
|
||||
|`QK_COMBO_TOGGLE`|`CM_TOGG`|Toggles Combo feature on and off|
|
||||
|
||||
# Advanced Configuration
|
||||
These configuration settings can be set in your `config.h` file.
|
||||
|
||||
@@ -40,7 +40,7 @@ void keyboard_post_init_user(void) {
|
||||
// Set default layer, if enabled
|
||||
if (user_config.rgb_layer_change) {
|
||||
rgblight_enable_noeeprom();
|
||||
rgblight_sethsv_noeeprom_cyan();
|
||||
rgblight_sethsv_noeeprom(HSV_CYAN);
|
||||
rgblight_mode_noeeprom(1);
|
||||
}
|
||||
}
|
||||
@@ -51,19 +51,19 @@ The above function will use the EEPROM config immediately after reading it, to s
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
switch (get_highest_layer(state)) {
|
||||
case _RAISE:
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); }
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_MAGENTA); rgblight_mode_noeeprom(1); }
|
||||
break;
|
||||
case _LOWER:
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_red(); rgblight_mode_noeeprom(1); }
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_RED); rgblight_mode_noeeprom(1); }
|
||||
break;
|
||||
case _PLOVER:
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(1); }
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_GREEN); rgblight_mode_noeeprom(1); }
|
||||
break;
|
||||
case _ADJUST:
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); }
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_WHITE); rgblight_mode_noeeprom(1); }
|
||||
break;
|
||||
default: // for any other layers, or the default layer
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); }
|
||||
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_CYAN); rgblight_mode_noeeprom(1); }
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
@@ -119,7 +119,7 @@ void eeconfig_init_user(void) { // EEPROM is getting reset!
|
||||
|
||||
// use the non noeeprom versions, to write these values to EEPROM too
|
||||
rgblight_enable(); // Enable RGB by default
|
||||
rgblight_sethsv_cyan(); // Set it to CYAN by default
|
||||
rgblight_sethsv(HSV_CYAN); // Set it to CYAN by default
|
||||
rgblight_mode(1); // set to solid by default
|
||||
}
|
||||
```
|
||||
|
||||
@@ -119,9 +119,41 @@ By default, the resolution of each axis is 8 bit, giving a range of -127 to +127
|
||||
|
||||
Note that the supported AVR MCUs have a 10-bit ADC, and 12-bit for most STM32 MCUs.
|
||||
|
||||
### Triggering Joystick Buttons
|
||||
### Keycodes
|
||||
|
||||
Joystick buttons are normal Quantum keycodes, defined as `JS_BUTTON0` to `JS_BUTTON31`, depending on the number of buttons you have configured.
|
||||
To trigger a joystick button, just add the corresponding keycode to your keymap.
|
||||
|Key |Aliases|Description|
|
||||
|-----------------------|-------|-----------|
|
||||
|`QK_JOYSTICK_BUTTON_0` |`JS_0` |Button 0 |
|
||||
|`QK_JOYSTICK_BUTTON_1` |`JS_1` |Button 1 |
|
||||
|`QK_JOYSTICK_BUTTON_2` |`JS_2` |Button 2 |
|
||||
|`QK_JOYSTICK_BUTTON_3` |`JS_3` |Button 3 |
|
||||
|`QK_JOYSTICK_BUTTON_4` |`JS_4` |Button 4 |
|
||||
|`QK_JOYSTICK_BUTTON_5` |`JS_5` |Button 5 |
|
||||
|`QK_JOYSTICK_BUTTON_6` |`JS_6` |Button 6 |
|
||||
|`QK_JOYSTICK_BUTTON_7` |`JS_7` |Button 7 |
|
||||
|`QK_JOYSTICK_BUTTON_8` |`JS_8` |Button 8 |
|
||||
|`QK_JOYSTICK_BUTTON_9` |`JS_9` |Button 9 |
|
||||
|`QK_JOYSTICK_BUTTON_10`|`JS_10`|Button 10 |
|
||||
|`QK_JOYSTICK_BUTTON_11`|`JS_11`|Button 11 |
|
||||
|`QK_JOYSTICK_BUTTON_12`|`JS_12`|Button 12 |
|
||||
|`QK_JOYSTICK_BUTTON_13`|`JS_13`|Button 13 |
|
||||
|`QK_JOYSTICK_BUTTON_14`|`JS_14`|Button 14 |
|
||||
|`QK_JOYSTICK_BUTTON_15`|`JS_15`|Button 15 |
|
||||
|`QK_JOYSTICK_BUTTON_16`|`JS_16`|Button 16 |
|
||||
|`QK_JOYSTICK_BUTTON_17`|`JS_17`|Button 17 |
|
||||
|`QK_JOYSTICK_BUTTON_18`|`JS_18`|Button 18 |
|
||||
|`QK_JOYSTICK_BUTTON_19`|`JS_19`|Button 19 |
|
||||
|`QK_JOYSTICK_BUTTON_20`|`JS_20`|Button 20 |
|
||||
|`QK_JOYSTICK_BUTTON_21`|`JS_21`|Button 21 |
|
||||
|`QK_JOYSTICK_BUTTON_22`|`JS_22`|Button 22 |
|
||||
|`QK_JOYSTICK_BUTTON_23`|`JS_23`|Button 23 |
|
||||
|`QK_JOYSTICK_BUTTON_24`|`JS_24`|Button 24 |
|
||||
|`QK_JOYSTICK_BUTTON_25`|`JS_25`|Button 25 |
|
||||
|`QK_JOYSTICK_BUTTON_26`|`JS_26`|Button 26 |
|
||||
|`QK_JOYSTICK_BUTTON_27`|`JS_27`|Button 27 |
|
||||
|`QK_JOYSTICK_BUTTON_28`|`JS_28`|Button 28 |
|
||||
|`QK_JOYSTICK_BUTTON_29`|`JS_29`|Button 29 |
|
||||
|`QK_JOYSTICK_BUTTON_30`|`JS_30`|Button 30 |
|
||||
|`QK_JOYSTICK_BUTTON_31`|`JS_31`|Button 31 |
|
||||
|
||||
You can also trigger joystick buttons in code with `register_joystick_button(button)` and `unregister_joystick_button(button)`, where `button` is the 0-based button index (0 = button 1).
|
||||
|
||||
@@ -16,7 +16,7 @@ First, enable Key Lock by setting `KEY_LOCK_ENABLE = yes` in your `rules.mk`. Th
|
||||
|
||||
## Caveats
|
||||
|
||||
Key Lock is only able to hold standard action keys and [One Shot modifier](one_shot_keys.md) keys (for example, if you have your Shift defined as `OSM(KC_LSFT)`).
|
||||
Key Lock is only able to hold standard action keys and [One Shot modifier](one_shot_keys.md) keys (for example, if you have your Shift defined as `OSM(MOD_LSFT)`).
|
||||
This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held.
|
||||
|
||||
Switching layers will not cancel the Key Lock. The Key Lock can be cancelled by calling the `cancel_key_lock()` function.
|
||||
|
||||
@@ -150,15 +150,13 @@ const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) |
|
||||
.enabled = NULL};
|
||||
```
|
||||
|
||||
## Keycodes
|
||||
## Keycodes
|
||||
|
||||
You can enable, disable and toggle all key overrides on the fly.
|
||||
|
||||
|Keycode |Description |Function Equivalent|
|
||||
|----------|---------------------------------|--------|
|
||||
|`KEY_OVERRIDE_ON` |Turns on Key Override feature | `key_override_on(void)`|
|
||||
|`KEY_OVERRIDE_OFF` |Turns off Key Override feature |`key_override_off(void)`|
|
||||
|`KEY_OVERRIDE_TOGGLE` |Toggles Key Override feature on and off |`key_override_toggle(void)`|
|
||||
|Keycode |Aliases |Description |
|
||||
|------------------------|---------|----------------------|
|
||||
|`QK_KEY_OVERRIDE_TOGGLE`|`KO_TOGG`|Toggle key overrides |
|
||||
|`QK_KEY_OVERRIDE_ON` |`KO_ON` |Turn on key overrides |
|
||||
|`QK_KEY_OVERRIDE_OFF` |`KO_OFF` |Turn off key overrides|
|
||||
|
||||
## Reference for `key_override_t`
|
||||
|
||||
|
||||
@@ -48,8 +48,9 @@ Mouse keys supports three different modes to move the cursor:
|
||||
* **Kinetic:** Holding movement keys accelerates the cursor with its speed following a quadratic curve until it reaches its maximum speed.
|
||||
* **Constant:** Holding movement keys moves the cursor at constant speeds.
|
||||
* **Combined:** Holding movement keys accelerates the cursor until it reaches its maximum speed, but holding acceleration and movement keys simultaneously moves the cursor at constant speeds.
|
||||
* **Inertia:** Cursor accelerates when key held, and decelerates after key release. Tracks X and Y velocity separately for more nuanced movements. Applies to cursor only, not scrolling.
|
||||
|
||||
The same principle applies to scrolling.
|
||||
The same principle applies to scrolling, in most modes.
|
||||
|
||||
Configuration options that are times, intervals or delays are given in milliseconds. Scroll speed is given as multiples of the default scroll step. For example, a scroll speed of 8 means that each scroll action covers 8 times the length of the default scroll step as defined by your operating system or application.
|
||||
|
||||
@@ -170,6 +171,37 @@ To use combined speed mode, you must at least define `MK_COMBINED` in your keyma
|
||||
#define MK_COMBINED
|
||||
```
|
||||
|
||||
### Inertia mode
|
||||
|
||||
This mode provides smooth motion, like sliding on ice. The cursor accelerates
|
||||
along a quadratic curve while a key is held, then glides to a stop after the
|
||||
key is released. Vertical and horizontal movements are tracked independently,
|
||||
so the cursor can move in many directions and make curves.
|
||||
|
||||
Cannot be used at the same time as Kinetic mode, Constant mode, or Combined mode.
|
||||
|
||||
Recommended settings in your keymap’s `config.h` file:
|
||||
|
||||
|Define |Default |Description |
|
||||
|----------------------------|---------|-----------------------------------------------------------|
|
||||
|`MOUSEKEY_INERTIA` |undefined|Enable Inertia mode |
|
||||
|`MOUSEKEY_DELAY` |150 |Delay between pressing a movement key and cursor movement |
|
||||
|`MOUSEKEY_INTERVAL` |16 |Time between cursor movements in milliseconds (16 = 60fps) |
|
||||
|`MOUSEKEY_MAX_SPEED` |32 |Maximum cursor speed at which acceleration stops |
|
||||
|`MOUSEKEY_TIME_TO_MAX` |32 |Number of frames until maximum cursor speed is reached |
|
||||
|`MOUSEKEY_FRICTION` |24 |How quickly the cursor stops after releasing a key |
|
||||
|`MOUSEKEY_MOVE_DELTA` |1 |How much to move on first frame (1 strongly recommended) |
|
||||
|
||||
Tips:
|
||||
|
||||
* Set `MOUSEKEY_DELAY` to roughly the same value as your host computer's key repeat delay, in ms. Recommended values are 100 to 300.
|
||||
* Set `MOUSEKEY_INTERVAL` to a value of 1000 / your monitor's FPS. For 60 FPS, 1000/60 = 16.
|
||||
* Set `MOUSEKEY_MAX_SPEED` based on your screen resolution and refresh rate, like Width / FPS. For example, 1920 pixels / 60 FPS = 32 pixels per frame.
|
||||
* Set `MOUSEKEY_TIME_TO_MAX` to a value of approximately FPS / 2, to make it reach full speed in half a second (or so).
|
||||
* Set `MOUSEKEY_FRICTION` to something between 1 and 255. Lower makes the cursor glide longer. Values from 8 to 40 are the most effective.
|
||||
* Keep `MOUSEKEY_MOVE_DELTA` at 1. This allows precise movements before the gliding effect starts.
|
||||
* Mouse wheel options are the same as the default accelerated mode, and do not use inertia.
|
||||
|
||||
## Use with PS/2 Mouse and Pointing Device
|
||||
|
||||
Mouse keys button state is shared with [PS/2 mouse](feature_ps2_mouse.md) and [pointing device](feature_pointing_device.md) so mouse keys button presses can be used for clicks and drags.
|
||||
|
||||
@@ -16,40 +16,40 @@ PROGRAMMABLE_BUTTON_ENABLE = yes
|
||||
|
||||
## Keycodes :id=keycodes
|
||||
|
||||
|Key |Aliases|Description |
|
||||
|------------------------|-------|----------------------|
|
||||
|`PROGRAMMABLE_BUTTON_1` |`PB_1` |Programmable button 1 |
|
||||
|`PROGRAMMABLE_BUTTON_2` |`PB_2` |Programmable button 2 |
|
||||
|`PROGRAMMABLE_BUTTON_3` |`PB_3` |Programmable button 3 |
|
||||
|`PROGRAMMABLE_BUTTON_4` |`PB_4` |Programmable button 4 |
|
||||
|`PROGRAMMABLE_BUTTON_5` |`PB_5` |Programmable button 5 |
|
||||
|`PROGRAMMABLE_BUTTON_6` |`PB_6` |Programmable button 6 |
|
||||
|`PROGRAMMABLE_BUTTON_7` |`PB_7` |Programmable button 7 |
|
||||
|`PROGRAMMABLE_BUTTON_8` |`PB_8` |Programmable button 8 |
|
||||
|`PROGRAMMABLE_BUTTON_9` |`PB_9` |Programmable button 9 |
|
||||
|`PROGRAMMABLE_BUTTON_10`|`PB_10`|Programmable button 10|
|
||||
|`PROGRAMMABLE_BUTTON_11`|`PB_11`|Programmable button 11|
|
||||
|`PROGRAMMABLE_BUTTON_12`|`PB_12`|Programmable button 12|
|
||||
|`PROGRAMMABLE_BUTTON_13`|`PB_13`|Programmable button 13|
|
||||
|`PROGRAMMABLE_BUTTON_14`|`PB_14`|Programmable button 14|
|
||||
|`PROGRAMMABLE_BUTTON_15`|`PB_15`|Programmable button 15|
|
||||
|`PROGRAMMABLE_BUTTON_16`|`PB_16`|Programmable button 16|
|
||||
|`PROGRAMMABLE_BUTTON_17`|`PB_17`|Programmable button 17|
|
||||
|`PROGRAMMABLE_BUTTON_18`|`PB_18`|Programmable button 18|
|
||||
|`PROGRAMMABLE_BUTTON_19`|`PB_19`|Programmable button 19|
|
||||
|`PROGRAMMABLE_BUTTON_20`|`PB_20`|Programmable button 20|
|
||||
|`PROGRAMMABLE_BUTTON_21`|`PB_21`|Programmable button 21|
|
||||
|`PROGRAMMABLE_BUTTON_22`|`PB_22`|Programmable button 22|
|
||||
|`PROGRAMMABLE_BUTTON_23`|`PB_23`|Programmable button 23|
|
||||
|`PROGRAMMABLE_BUTTON_24`|`PB_24`|Programmable button 24|
|
||||
|`PROGRAMMABLE_BUTTON_25`|`PB_25`|Programmable button 25|
|
||||
|`PROGRAMMABLE_BUTTON_26`|`PB_26`|Programmable button 26|
|
||||
|`PROGRAMMABLE_BUTTON_27`|`PB_27`|Programmable button 27|
|
||||
|`PROGRAMMABLE_BUTTON_28`|`PB_28`|Programmable button 28|
|
||||
|`PROGRAMMABLE_BUTTON_29`|`PB_29`|Programmable button 29|
|
||||
|`PROGRAMMABLE_BUTTON_30`|`PB_30`|Programmable button 30|
|
||||
|`PROGRAMMABLE_BUTTON_31`|`PB_31`|Programmable button 31|
|
||||
|`PROGRAMMABLE_BUTTON_32`|`PB_32`|Programmable button 32|
|
||||
|Key |Aliases|Description |
|
||||
|---------------------------|-------|----------------------|
|
||||
|`QK_PROGRAMMABLE_BUTTON_1` |`PB_1` |Programmable button 1 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_2` |`PB_2` |Programmable button 2 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_3` |`PB_3` |Programmable button 3 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_4` |`PB_4` |Programmable button 4 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_5` |`PB_5` |Programmable button 5 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_6` |`PB_6` |Programmable button 6 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_7` |`PB_7` |Programmable button 7 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_8` |`PB_8` |Programmable button 8 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_9` |`PB_9` |Programmable button 9 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_10`|`PB_10`|Programmable button 10|
|
||||
|`QK_PROGRAMMABLE_BUTTON_11`|`PB_11`|Programmable button 11|
|
||||
|`QK_PROGRAMMABLE_BUTTON_12`|`PB_12`|Programmable button 12|
|
||||
|`QK_PROGRAMMABLE_BUTTON_13`|`PB_13`|Programmable button 13|
|
||||
|`QK_PROGRAMMABLE_BUTTON_14`|`PB_14`|Programmable button 14|
|
||||
|`QK_PROGRAMMABLE_BUTTON_15`|`PB_15`|Programmable button 15|
|
||||
|`QK_PROGRAMMABLE_BUTTON_16`|`PB_16`|Programmable button 16|
|
||||
|`QK_PROGRAMMABLE_BUTTON_17`|`PB_17`|Programmable button 17|
|
||||
|`QK_PROGRAMMABLE_BUTTON_18`|`PB_18`|Programmable button 18|
|
||||
|`QK_PROGRAMMABLE_BUTTON_19`|`PB_19`|Programmable button 19|
|
||||
|`QK_PROGRAMMABLE_BUTTON_20`|`PB_20`|Programmable button 20|
|
||||
|`QK_PROGRAMMABLE_BUTTON_21`|`PB_21`|Programmable button 21|
|
||||
|`QK_PROGRAMMABLE_BUTTON_22`|`PB_22`|Programmable button 22|
|
||||
|`QK_PROGRAMMABLE_BUTTON_23`|`PB_23`|Programmable button 23|
|
||||
|`QK_PROGRAMMABLE_BUTTON_24`|`PB_24`|Programmable button 24|
|
||||
|`QK_PROGRAMMABLE_BUTTON_25`|`PB_25`|Programmable button 25|
|
||||
|`QK_PROGRAMMABLE_BUTTON_26`|`PB_26`|Programmable button 26|
|
||||
|`QK_PROGRAMMABLE_BUTTON_27`|`PB_27`|Programmable button 27|
|
||||
|`QK_PROGRAMMABLE_BUTTON_28`|`PB_28`|Programmable button 28|
|
||||
|`QK_PROGRAMMABLE_BUTTON_29`|`PB_29`|Programmable button 29|
|
||||
|`QK_PROGRAMMABLE_BUTTON_30`|`PB_30`|Programmable button 30|
|
||||
|`QK_PROGRAMMABLE_BUTTON_31`|`PB_31`|Programmable button 31|
|
||||
|`QK_PROGRAMMABLE_BUTTON_32`|`PB_32`|Programmable button 32|
|
||||
|
||||
## API :id=api
|
||||
|
||||
|
||||
@@ -26,12 +26,12 @@ SECURE_ENABLE = yes
|
||||
|
||||
## Keycodes
|
||||
|
||||
| Key | Description |
|
||||
|------------------|--------------------------------------------------------------------------------|
|
||||
| `SECURE_LOCK` | Revert back to a locked state |
|
||||
| `SECURE_UNLOCK` | Forces unlock without performing a unlock sequence |
|
||||
| `SECURE_TOGGLE` | Toggle directly between locked and unlock without performing a unlock sequence |
|
||||
| `SECURE_REQUEST` | Request that user perform the unlock sequence |
|
||||
| Key |Aliases | Description |
|
||||
|---------------------|---------|--------------------------------------------------------------------------------|
|
||||
| `QK_SECURE_LOCK` |`SE_LOCK`| Revert back to a locked state |
|
||||
| `QK_SECURE_UNLOCK` |`SE_UNLK`| Forces unlock without performing a unlock sequence |
|
||||
| `QK_SECURE_TOGGLE` |`SE_TOGG`| Toggle directly between locked and unlock without performing a unlock sequence |
|
||||
| `QK_SECURE_REQUEST` |`SE_REQ` | Request that user perform the unlock sequence |
|
||||
|
||||
## Configuration
|
||||
|
||||
|
||||
+15
-15
@@ -5,22 +5,22 @@ Steve Losh described the [Space Cadet Shift](https://stevelosh.com/blog/2012/10/
|
||||
## Usage
|
||||
|
||||
Firstly, in your keymap, do one of the following:
|
||||
- Replace the Left Shift key with `KC_LSPO` (Left Shift, Parenthesis Open), and Right Shift with `KC_RSPC` (Right Shift, Parenthesis Close).
|
||||
- Replace the Left Control key with `KC_LCPO` (Left Control, Parenthesis Open), and Right Control with `KC_RCPC` (Right Control, Parenthesis Close).
|
||||
- Replace the Left Alt key with `KC_LAPO` (Left Alt, Parenthesis Open), and Right Alt with `KC_RAPC` (Right Alt, Parenthesis Close).
|
||||
- Replace any Shift key in your keymap with `KC_SFTENT` (Right Shift, Enter).
|
||||
- Replace the Left Shift key with `SC_LSPO` (Left Shift, Parenthesis Open), and Right Shift with `SC_RSPC` (Right Shift, Parenthesis Close).
|
||||
- Replace the Left Control key with `SC_LCPO` (Left Control, Parenthesis Open), and Right Control with `SC_RCPC` (Right Control, Parenthesis Close).
|
||||
- Replace the Left Alt key with `SC_LAPO` (Left Alt, Parenthesis Open), and Right Alt with `SC_RAPC` (Right Alt, Parenthesis Close).
|
||||
- Replace any Shift key in your keymap with `SC_SENT` (Right Shift, Enter).
|
||||
|
||||
## Keycodes
|
||||
|
||||
|Keycode |Description |
|
||||
|-----------|-------------------------------------------|
|
||||
|`KC_LSPO` |Left Shift when held, `(` when tapped |
|
||||
|`KC_RSPC` |Right Shift when held, `)` when tapped |
|
||||
|`KC_LCPO` |Left Control when held, `(` when tapped |
|
||||
|`KC_RCPC` |Right Control when held, `)` when tapped |
|
||||
|`KC_LAPO` |Left Alt when held, `(` when tapped |
|
||||
|`KC_RAPC` |Right Alt when held, `)` when tapped |
|
||||
|`KC_SFTENT`|Right Shift when held, Enter when tapped |
|
||||
|Keycode |Aliases |Description |
|
||||
|----------------------------------------------|---------|----------------------------------------|
|
||||
|`QK_SPACE_CADET_LEFT_CTRL_PARENTHESIS_OPEN` |`SC_LCPO`|Left Control when held, `(` when tapped |
|
||||
|`QK_SPACE_CADET_RIGHT_CTRL_PARENTHESIS_CLOSE` |`SC_RCPC`|Right Control when held, `)` when tapped|
|
||||
|`QK_SPACE_CADET_LEFT_SHIFT_PARENTHESIS_OPEN` |`SC_LSPO`|Left Shift when held, `(` when tapped |
|
||||
|`QK_SPACE_CADET_RIGHT_SHIFT_PARENTHESIS_CLOSE`|`SC_RSPC`|Right Shift when held, `)` when tapped |
|
||||
|`QK_SPACE_CADET_LEFT_ALT_PARENTHESIS_OPEN` |`SC_LAPO`|Left Alt when held, `(` when tapped |
|
||||
|`QK_SPACE_CADET_RIGHT_ALT_PARENTHESIS_CLOSE` |`SC_RAPC`|Right Alt when held, `)` when tapped |
|
||||
|`QK_SPACE_CADET_RIGHT_SHIFT_ENTER` |`SC_SENT`|Right Shift when held, Enter when tapped|
|
||||
|
||||
## Caveats
|
||||
|
||||
@@ -32,7 +32,7 @@ COMMAND_ENABLE = no
|
||||
|
||||
## Configuration
|
||||
|
||||
By default Space Cadet assumes a US ANSI layout, but if your layout uses different keys for parentheses, you can redefine them in your `config.h`. In addition, you can redefine the modifier to send on tap, or even send no modifier at all. The new configuration defines bundle all options up into a single define of 3 key codes in this order: the `Modifier` when held or when used with other keys, the `Tap Modifer` sent when tapped (no modifier if `KC_TRNS`), finally the `Keycode` sent when tapped. Now keep in mind, mods from other keys will still apply to the `Keycode` if say `KC_RSFT` is held while tapping `KC_LSPO` key with `KC_TRNS` as the `Tap Modifer`.
|
||||
By default Space Cadet assumes a US ANSI layout, but if your layout uses different keys for parentheses, you can redefine them in your `config.h`. In addition, you can redefine the modifier to send on tap, or even send no modifier at all. The new configuration defines bundle all options up into a single define of 3 key codes in this order: the `Modifier` when held or when used with other keys, the `Tap Modifer` sent when tapped (no modifier if `KC_TRNS`), finally the `Keycode` sent when tapped. Now keep in mind, mods from other keys will still apply to the `Keycode` if say `KC_RSFT` is held while tapping `SC_LSPO` key with `KC_TRNS` as the `Tap Modifer`.
|
||||
|
||||
|Define |Default |Description |
|
||||
|----------------|-------------------------------|---------------------------------------------------------------------------------|
|
||||
@@ -48,7 +48,7 @@ By default Space Cadet assumes a US ANSI layout, but if your layout uses differe
|
||||
|
||||
## Obsolete Configuration
|
||||
|
||||
These defines are used in the above defines internally to support backwards compatibility, so you may continue to use them, however the above defines open up a larger range of flexibility than before. As an example, say you want to not send any modifier when you tap just `KC_LSPO`, with the old defines you had an all or nothing choice of using the `DISABLE_SPACE_CADET_MODIFIER` define. Now you can define that key as: `#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_9`. This tells the system to set Left Shift if held or used with other keys, then on tap send no modifier (transparent) with the `KC_9`.
|
||||
These defines are used in the above defines internally to support backwards compatibility, so you may continue to use them, however the above defines open up a larger range of flexibility than before. As an example, say you want to not send any modifier when you tap just `SC_LSPO`, with the old defines you had an all or nothing choice of using the `DISABLE_SPACE_CADET_MODIFIER` define. Now you can define that key as: `#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_9`. This tells the system to set Left Shift if held or used with other keys, then on tap send no modifier (transparent) with the `KC_9`.
|
||||
|
||||
|Define |Default |Description |
|
||||
|------------------------------|-------------|------------------------------------------------------------------|
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
## 注意事項
|
||||
|
||||
キーロックは、標準アクションキーと[ワンショットモディファイア](ja/one_shot_keys.md)キー (例えば、Shift を `OSM(KC_LSFT)` と定義した場合)のみを押し続けることができます。
|
||||
キーロックは、標準アクションキーと[ワンショットモディファイア](ja/one_shot_keys.md)キー (例えば、Shift を `OSM(MOD_LSFT)` と定義した場合)のみを押し続けることができます。
|
||||
これは、QMK の特殊機能(ワンショットモディファイアを除く)、または `KC_LPRN` のような shift を押されたキーのバージョンは含みません。[基本的なキーコード](ja/keycodes_basic.md)リストにある場合、押したままにすることができます。
|
||||
|
||||
レイヤーの切り替えは、キーロックを解除しません。
|
||||
|
||||
+116
-54
@@ -247,6 +247,29 @@ See also: [Audio](feature_audio.md)
|
||||
|`MU_TOG` | |Toggles Music Mode |
|
||||
|`MU_MOD` | |Cycles through the music modes |
|
||||
|
||||
## Auto Shift :id=auto-shift
|
||||
|
||||
See also: [Auto Shift](feature_auto_shift.md)
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|----------------------|---------|--------------------------------------------|
|
||||
|`QK_AUTO_SHIFT_DOWN` |`AS_DOWN`|Lower the Auto Shift timeout variable (down)|
|
||||
|`QK_AUTO_SHIFT_UP` |`AS_UP` |Raise the Auto Shift timeout variable (up) |
|
||||
|`QK_AUTO_SHIFT_REPORT`|`AS_RPT` |Report your current Auto Shift timeout value|
|
||||
|`QK_AUTO_SHIFT_ON` |`AS_ON` |Turns on the Auto Shift Function |
|
||||
|`QK_AUTO_SHIFT_OFF` |`AS_OFF` |Turns off the Auto Shift Function |
|
||||
|`QK_AUTO_SHIFT_TOGGLE`|`AS_TOGG`|Toggles the state of the Auto Shift feature |
|
||||
|
||||
## Autocorrect :id=autocorrect
|
||||
|
||||
See also: [Autocorrect](feature_autocorrect.md)
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|-----------------------|---------|----------------------------------------------|
|
||||
|`QK_AUTOCORRECT_ON` |`AC_ON` |Turns on the Autocorrect feature. |
|
||||
|`QK_AUTOCORRECT_OFF` |`AC_OFF` |Turns off the Autocorrect feature. |
|
||||
|`QK_AUTOCORRECT_TOGGLE`|`AC_TOGG`|Toggles the status of the Autocorrect feature.|
|
||||
|
||||
## Backlighting :id=backlighting
|
||||
|
||||
See also: [Backlighting](feature_backlight.md)
|
||||
@@ -275,9 +298,9 @@ See also: [Bluetooth](feature_bluetooth.md)
|
||||
|
||||
See also: [Caps Word](feature_caps_word.md)
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|-----------|---------|------------------------------|
|
||||
|`CAPS_WORD`|`CAPSWRD`|Toggles Caps Word |
|
||||
|Key |Aliases |Description |
|
||||
|---------------------|---------|------------------------------|
|
||||
|`QK_CAPS_WORD_TOGGLE`|`CW_TOGG`|Toggles Caps Word |
|
||||
|
||||
## Dynamic Macros :id=dynamic-macros
|
||||
|
||||
@@ -299,6 +322,45 @@ See also: [Grave Escape](feature_grave_esc.md)
|
||||
|-----------------|---------|------------------------------------------------------------------|
|
||||
|`QK_GRAVE_ESCAPE`|`QK_GESC`|Escape when pressed, <code>`</code> when Shift or GUI are held|
|
||||
|
||||
## Joystick :id=joystick
|
||||
|
||||
See also: [Joystick](feature_joystick.md)
|
||||
|
||||
|Key |Aliases|Description|
|
||||
|-----------------------|-------|-----------|
|
||||
|`QK_JOYSTICK_BUTTON_0` |`JS_0` |Button 0 |
|
||||
|`QK_JOYSTICK_BUTTON_1` |`JS_1` |Button 1 |
|
||||
|`QK_JOYSTICK_BUTTON_2` |`JS_2` |Button 2 |
|
||||
|`QK_JOYSTICK_BUTTON_3` |`JS_3` |Button 3 |
|
||||
|`QK_JOYSTICK_BUTTON_4` |`JS_4` |Button 4 |
|
||||
|`QK_JOYSTICK_BUTTON_5` |`JS_5` |Button 5 |
|
||||
|`QK_JOYSTICK_BUTTON_6` |`JS_6` |Button 6 |
|
||||
|`QK_JOYSTICK_BUTTON_7` |`JS_7` |Button 7 |
|
||||
|`QK_JOYSTICK_BUTTON_8` |`JS_8` |Button 8 |
|
||||
|`QK_JOYSTICK_BUTTON_9` |`JS_9` |Button 9 |
|
||||
|`QK_JOYSTICK_BUTTON_10`|`JS_10`|Button 10 |
|
||||
|`QK_JOYSTICK_BUTTON_11`|`JS_11`|Button 11 |
|
||||
|`QK_JOYSTICK_BUTTON_12`|`JS_12`|Button 12 |
|
||||
|`QK_JOYSTICK_BUTTON_13`|`JS_13`|Button 13 |
|
||||
|`QK_JOYSTICK_BUTTON_14`|`JS_14`|Button 14 |
|
||||
|`QK_JOYSTICK_BUTTON_15`|`JS_15`|Button 15 |
|
||||
|`QK_JOYSTICK_BUTTON_16`|`JS_16`|Button 16 |
|
||||
|`QK_JOYSTICK_BUTTON_17`|`JS_17`|Button 17 |
|
||||
|`QK_JOYSTICK_BUTTON_18`|`JS_18`|Button 18 |
|
||||
|`QK_JOYSTICK_BUTTON_19`|`JS_19`|Button 19 |
|
||||
|`QK_JOYSTICK_BUTTON_20`|`JS_20`|Button 20 |
|
||||
|`QK_JOYSTICK_BUTTON_21`|`JS_21`|Button 21 |
|
||||
|`QK_JOYSTICK_BUTTON_22`|`JS_22`|Button 22 |
|
||||
|`QK_JOYSTICK_BUTTON_23`|`JS_23`|Button 23 |
|
||||
|`QK_JOYSTICK_BUTTON_24`|`JS_24`|Button 24 |
|
||||
|`QK_JOYSTICK_BUTTON_25`|`JS_25`|Button 25 |
|
||||
|`QK_JOYSTICK_BUTTON_26`|`JS_26`|Button 26 |
|
||||
|`QK_JOYSTICK_BUTTON_27`|`JS_27`|Button 27 |
|
||||
|`QK_JOYSTICK_BUTTON_28`|`JS_28`|Button 28 |
|
||||
|`QK_JOYSTICK_BUTTON_29`|`JS_29`|Button 29 |
|
||||
|`QK_JOYSTICK_BUTTON_30`|`JS_30`|Button 30 |
|
||||
|`QK_JOYSTICK_BUTTON_31`|`JS_31`|Button 31 |
|
||||
|
||||
## Key Lock :id=key-lock
|
||||
|
||||
See also: [Key Lock](feature_key_lock.md)
|
||||
@@ -365,6 +427,7 @@ See also: [Magic Keycodes](keycodes_magic.md)
|
||||
|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>`</code> and Escape |
|
||||
|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
|
||||
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
|
||||
|`MAGIC_TOGGLE_BACKSLASH_BACKSPACE`|`BS_TOGG`|Toggle `\` and Backspace swap state |
|
||||
|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
|
||||
|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
|
||||
|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
|
||||
@@ -696,67 +759,66 @@ See also: [US ANSI Shifted Symbols](keycodes_us_ansi_shifted.md)
|
||||
|
||||
See also: [One Shot Keys](one_shot_keys.md)
|
||||
|
||||
|Key |Description |
|
||||
|------------|----------------------------------|
|
||||
|`OSM(mod)` |Hold `mod` for one keypress |
|
||||
|`OSL(layer)`|Switch to `layer` for one keypress|
|
||||
|`OS_ON` |Turns One Shot keys on |
|
||||
|`OS_OFF` |Turns One Shot keys off |
|
||||
|`OS_TOGG` |Toggles One Shot keys status |
|
||||
|Key |Aliases |Description |
|
||||
|--------------------|---------|----------------------------------|
|
||||
|`OSM(mod)` | |Hold `mod` for one keypress |
|
||||
|`OSL(layer)` | |Switch to `layer` for one keypress|
|
||||
|`QK_ONE_SHOT_TOGGLE`|`OS_TOGG`|Toggles One Shot keys status |
|
||||
|`QK_ONE_SHOT_ON` |`OS_ON` |Turns One Shot keys on |
|
||||
|`QK_ONE_SHOT_OFF` |`OS_OFF` |Turns One Shot keys off |
|
||||
|
||||
## Programmable Button Support :id=programmable-button
|
||||
|
||||
See also: [Programmable Button](feature_programmable_button.md)
|
||||
|
||||
|Key |Description |
|
||||
|------------------------|----------------------|
|
||||
|`PROGRAMMABLE_BUTTON_1` |Programmable button 1 |
|
||||
|`PROGRAMMABLE_BUTTON_2` |Programmable button 2 |
|
||||
|`PROGRAMMABLE_BUTTON_3` |Programmable button 3 |
|
||||
|`PROGRAMMABLE_BUTTON_4` |Programmable button 4 |
|
||||
|`PROGRAMMABLE_BUTTON_5` |Programmable button 5 |
|
||||
|`PROGRAMMABLE_BUTTON_6` |Programmable button 6 |
|
||||
|`PROGRAMMABLE_BUTTON_7` |Programmable button 7 |
|
||||
|`PROGRAMMABLE_BUTTON_8` |Programmable button 8 |
|
||||
|`PROGRAMMABLE_BUTTON_9` |Programmable button 9 |
|
||||
|`PROGRAMMABLE_BUTTON_10`|Programmable button 10|
|
||||
|`PROGRAMMABLE_BUTTON_11`|Programmable button 11|
|
||||
|`PROGRAMMABLE_BUTTON_12`|Programmable button 12|
|
||||
|`PROGRAMMABLE_BUTTON_13`|Programmable button 13|
|
||||
|`PROGRAMMABLE_BUTTON_14`|Programmable button 14|
|
||||
|`PROGRAMMABLE_BUTTON_15`|Programmable button 15|
|
||||
|`PROGRAMMABLE_BUTTON_16`|Programmable button 16|
|
||||
|`PROGRAMMABLE_BUTTON_17`|Programmable button 17|
|
||||
|`PROGRAMMABLE_BUTTON_18`|Programmable button 18|
|
||||
|`PROGRAMMABLE_BUTTON_19`|Programmable button 19|
|
||||
|`PROGRAMMABLE_BUTTON_20`|Programmable button 20|
|
||||
|`PROGRAMMABLE_BUTTON_21`|Programmable button 21|
|
||||
|`PROGRAMMABLE_BUTTON_22`|Programmable button 22|
|
||||
|`PROGRAMMABLE_BUTTON_23`|Programmable button 23|
|
||||
|`PROGRAMMABLE_BUTTON_24`|Programmable button 24|
|
||||
|`PROGRAMMABLE_BUTTON_25`|Programmable button 25|
|
||||
|`PROGRAMMABLE_BUTTON_26`|Programmable button 26|
|
||||
|`PROGRAMMABLE_BUTTON_27`|Programmable button 27|
|
||||
|`PROGRAMMABLE_BUTTON_28`|Programmable button 28|
|
||||
|`PROGRAMMABLE_BUTTON_29`|Programmable button 29|
|
||||
|`PROGRAMMABLE_BUTTON_30`|Programmable button 30|
|
||||
|`PROGRAMMABLE_BUTTON_31`|Programmable button 31|
|
||||
|`PROGRAMMABLE_BUTTON_32`|Programmable button 32|
|
||||
|`PB_1` to `PB_32` |Aliases for keymaps |
|
||||
|Key |Aliases|Description |
|
||||
|---------------------------|-------|----------------------|
|
||||
|`QK_PROGRAMMABLE_BUTTON_1` |`PB_1` |Programmable button 1 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_2` |`PB_2` |Programmable button 2 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_3` |`PB_3` |Programmable button 3 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_4` |`PB_4` |Programmable button 4 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_5` |`PB_5` |Programmable button 5 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_6` |`PB_6` |Programmable button 6 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_7` |`PB_7` |Programmable button 7 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_8` |`PB_8` |Programmable button 8 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_9` |`PB_9` |Programmable button 9 |
|
||||
|`QK_PROGRAMMABLE_BUTTON_10`|`PB_10`|Programmable button 10|
|
||||
|`QK_PROGRAMMABLE_BUTTON_11`|`PB_11`|Programmable button 11|
|
||||
|`QK_PROGRAMMABLE_BUTTON_12`|`PB_12`|Programmable button 12|
|
||||
|`QK_PROGRAMMABLE_BUTTON_13`|`PB_13`|Programmable button 13|
|
||||
|`QK_PROGRAMMABLE_BUTTON_14`|`PB_14`|Programmable button 14|
|
||||
|`QK_PROGRAMMABLE_BUTTON_15`|`PB_15`|Programmable button 15|
|
||||
|`QK_PROGRAMMABLE_BUTTON_16`|`PB_16`|Programmable button 16|
|
||||
|`QK_PROGRAMMABLE_BUTTON_17`|`PB_17`|Programmable button 17|
|
||||
|`QK_PROGRAMMABLE_BUTTON_18`|`PB_18`|Programmable button 18|
|
||||
|`QK_PROGRAMMABLE_BUTTON_19`|`PB_19`|Programmable button 19|
|
||||
|`QK_PROGRAMMABLE_BUTTON_20`|`PB_20`|Programmable button 20|
|
||||
|`QK_PROGRAMMABLE_BUTTON_21`|`PB_21`|Programmable button 21|
|
||||
|`QK_PROGRAMMABLE_BUTTON_22`|`PB_22`|Programmable button 22|
|
||||
|`QK_PROGRAMMABLE_BUTTON_23`|`PB_23`|Programmable button 23|
|
||||
|`QK_PROGRAMMABLE_BUTTON_24`|`PB_24`|Programmable button 24|
|
||||
|`QK_PROGRAMMABLE_BUTTON_25`|`PB_25`|Programmable button 25|
|
||||
|`QK_PROGRAMMABLE_BUTTON_26`|`PB_26`|Programmable button 26|
|
||||
|`QK_PROGRAMMABLE_BUTTON_27`|`PB_27`|Programmable button 27|
|
||||
|`QK_PROGRAMMABLE_BUTTON_28`|`PB_28`|Programmable button 28|
|
||||
|`QK_PROGRAMMABLE_BUTTON_29`|`PB_29`|Programmable button 29|
|
||||
|`QK_PROGRAMMABLE_BUTTON_30`|`PB_30`|Programmable button 30|
|
||||
|`QK_PROGRAMMABLE_BUTTON_31`|`PB_31`|Programmable button 31|
|
||||
|`QK_PROGRAMMABLE_BUTTON_32`|`PB_32`|Programmable button 32|
|
||||
|
||||
## Space Cadet :id=space-cadet
|
||||
|
||||
See also: [Space Cadet](feature_space_cadet.md)
|
||||
|
||||
|Key |Description |
|
||||
|-----------|----------------------------------------|
|
||||
|`KC_LCPO` |Left Control when held, `(` when tapped |
|
||||
|`KC_RCPC` |Right Control when held, `)` when tapped|
|
||||
|`KC_LSPO` |Left Shift when held, `(` when tapped |
|
||||
|`KC_RSPC` |Right Shift when held, `)` when tapped |
|
||||
|`KC_LAPO` |Left Alt when held, `(` when tapped |
|
||||
|`KC_RAPC` |Right Alt when held, `)` when tapped |
|
||||
|`KC_SFTENT`|Right Shift when held, Enter when tapped|
|
||||
|Key |Aliases |Description |
|
||||
|----------------------------------------------|---------|----------------------------------------|
|
||||
|`QK_SPACE_CADET_LEFT_CTRL_PARENTHESIS_OPEN` |`SC_LCPO`|Left Control when held, `(` when tapped |
|
||||
|`QK_SPACE_CADET_RIGHT_CTRL_PARENTHESIS_CLOSE` |`SC_RCPC`|Right Control when held, `)` when tapped|
|
||||
|`QK_SPACE_CADET_LEFT_SHIFT_PARENTHESIS_OPEN` |`SC_LSPO`|Left Shift when held, `(` when tapped |
|
||||
|`QK_SPACE_CADET_RIGHT_SHIFT_PARENTHESIS_CLOSE`|`SC_RSPC`|Right Shift when held, `)` when tapped |
|
||||
|`QK_SPACE_CADET_LEFT_ALT_PARENTHESIS_OPEN` |`SC_LAPO`|Left Alt when held, `(` when tapped |
|
||||
|`QK_SPACE_CADET_RIGHT_ALT_PARENTHESIS_CLOSE` |`SC_RAPC`|Right Alt when held, `)` when tapped |
|
||||
|`QK_SPACE_CADET_RIGHT_SHIFT_ENTER` |`SC_SENT`|Right Shift when held, Enter when tapped|
|
||||
|
||||
## Swap Hands :id=swap-hands
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
The following table shows the current driver status for peripherals on RP2040 MCUs:
|
||||
|
||||
| System | Support |
|
||||
| System | Support |
|
||||
| ---------------------------------------------------------------- | ---------------------------------------------- |
|
||||
| [ADC driver](adc_driver.md) | Support planned (no ETA) |
|
||||
| [Audio](audio_driver.md) | Support planned (no ETA) |
|
||||
| [Audio](audio_driver.md#pwm-hardware) | :heavy_check_mark: |
|
||||
| [Backlight](feature_backlight.md) | :heavy_check_mark: |
|
||||
| [I2C driver](i2c_driver.md) | :heavy_check_mark: |
|
||||
| [SPI driver](spi_driver.md) | :heavy_check_mark: |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 'serial' Driver
|
||||
|
||||
The serial driver powers the [Split Keyboard](feature_split_keyboard.md) feature. Several implementations are available, depending on the platform of your split keyboard. Note that none of the drivers support split keyboards with more then two halves.
|
||||
The serial driver powers the [Split Keyboard](feature_split_keyboard.md) feature. Several implementations are available, depending on the platform of your split keyboard. Note that none of the drivers support split keyboards with more than two halves.
|
||||
|
||||
| Driver | AVR | ARM | Connection between halves |
|
||||
| --------------------------------------- | ------------------ | ------------------ | --------------------------------------------------------------------------------------------- |
|
||||
|
||||
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_MPLY,
|
||||
QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSPC,
|
||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SC_RSPC,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), MO(2)
|
||||
),
|
||||
[_FN2] = LAYOUT_all(
|
||||
|
||||
@@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_MPLY,
|
||||
QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSPC,
|
||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SC_RSPC,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), MO(2)
|
||||
),
|
||||
[_FN2] = LAYOUT_all(
|
||||
|
||||
@@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_MPLY,
|
||||
QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSPC,
|
||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SC_RSPC,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), MO(2)
|
||||
),
|
||||
[_FN2] = LAYOUT_all(
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
// Copyright 2022 ziptyze (@ziptyze)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
#define RGB_DI_PIN GP19
|
||||
#define RGB_MATRIX_LED_COUNT 61
|
||||
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
|
||||
#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
|
||||
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 125
|
||||
// RGB Matrix Animation modes. Explicitly enabled
|
||||
// For full list of effects, see:
|
||||
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
|
||||
# define ENABLE_RGB_MATRIX_ALPHAS_MODS
|
||||
# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
||||
# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
|
||||
# define ENABLE_RGB_MATRIX_BREATHING
|
||||
# define ENABLE_RGB_MATRIX_BAND_SAT
|
||||
# define ENABLE_RGB_MATRIX_BAND_VAL
|
||||
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
|
||||
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
|
||||
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_ALL
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
|
||||
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
|
||||
# define ENABLE_RGB_MATRIX_DUAL_BEACON
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
|
||||
# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
|
||||
# define ENABLE_RGB_MATRIX_RAINDROPS
|
||||
# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||
# define ENABLE_RGB_MATRIX_HUE_BREATHING
|
||||
# define ENABLE_RGB_MATRIX_HUE_PENDULUM
|
||||
# define ENABLE_RGB_MATRIX_HUE_WAVE
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_RAIN
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_FLOW
|
||||
# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
|
||||
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
|
||||
# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
|
||||
# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
|
||||
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
|
||||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
|
||||
# define ENABLE_RGB_MATRIX_SPLASH
|
||||
# define ENABLE_RGB_MATRIX_MULTISPLASH
|
||||
# define ENABLE_RGB_MATRIX_SOLID_SPLASH
|
||||
# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
|
||||
|
||||
|
||||
/* 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
|
||||
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"manufacturer": "1upkeyboards",
|
||||
"keyboard_name": "pi60_rgb",
|
||||
"maintainer": "ziptyze",
|
||||
"processor": "RP2040",
|
||||
"bootloader": "rp2040",
|
||||
"board": "GENERIC_RP_RP2040",
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
"pid": "0x5602",
|
||||
"vid": "0x6F75"
|
||||
},
|
||||
"debounce": 5,
|
||||
"diode_direction": "COL2ROW",
|
||||
"dynamic_keymap": {
|
||||
"layer_count": 10
|
||||
},
|
||||
"features": {
|
||||
"audio": false,
|
||||
"backlight": false,
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": false,
|
||||
"rgb_matrix": true,
|
||||
"rgblight": false
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["GP3", "GP4", "GP5", "GP20", "GP18", "GP13", "GP17", "GP16", "GP15", "GP12", "GP11", "GP14", "GP10", "GP9"],
|
||||
"rows": ["GP1", "GP2", "GP8", "GP6", "GP0", "GP21"]
|
||||
},
|
||||
"mouse_key": {
|
||||
"enabled": true
|
||||
},
|
||||
"rgb_matrix": {
|
||||
"driver": "WS2812",
|
||||
"layout": [
|
||||
{ "flags": 1, "matrix": [5, 5], "x": 103, "y": 58 },
|
||||
{ "flags": 1, "matrix": [5, 10], "x": 159, "y": 58 },
|
||||
{ "flags": 1, "matrix": [5, 11], "x": 178, "y": 58 },
|
||||
{ "flags": 1, "matrix": [5, 12], "x": 196, "y": 58 },
|
||||
{ "flags": 1, "matrix": [5, 13], "x": 215, "y": 58 },
|
||||
{ "flags": 1, "matrix": [3, 13], "x": 204, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 10], "x": 176, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 9], "x": 161, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 8], "x": 146, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 7], "x": 131, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 6], "x": 116, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 5], "x": 101, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 4], "x": 86, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 3], "x": 71, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 2], "x": 56, "y": 45 },
|
||||
{ "flags": 4, "matrix": [3, 1], "x": 41, "y": 45 },
|
||||
{ "flags": 1, "matrix": [4, 2], "x": 47, "y": 58 },
|
||||
{ "flags": 1, "matrix": [4, 1], "x": 28, "y": 58 },
|
||||
{ "flags": 1, "matrix": [4, 0], "x": 10, "y": 58 },
|
||||
{ "flags": 1, "matrix": [3, 0], "x": 17, "y": 45 },
|
||||
{ "flags": 1, "matrix": [2, 0], "x": 13, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 1], "x": 34, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 2], "x": 49, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 3], "x": 64, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 4], "x": 79, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 5], "x": 94, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 6], "x": 109, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 7], "x": 124, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 8], "x": 139, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 9], "x": 153, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 10], "x": 168, "y": 32 },
|
||||
{ "flags": 4, "matrix": [2, 11], "x": 183, "y": 32 },
|
||||
{ "flags": 1, "matrix": [2, 13], "x": 208, "y": 32 },
|
||||
{ "flags": 1, "matrix": [1, 13], "x": 213, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 12], "x": 195, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 11], "x": 180, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 10], "x": 165, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 9], "x": 150, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 8], "x": 135, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 7], "x": 120, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 6], "x": 105, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 5], "x": 90, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 4], "x": 75, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 3], "x": 60, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 2], "x": 45, "y": 19 },
|
||||
{ "flags": 4, "matrix": [1, 1], "x": 30, "y": 19 },
|
||||
{ "flags": 1, "matrix": [1, 0], "x": 12, "y": 19 },
|
||||
{ "flags": 1, "matrix": [0, 0], "x": 8, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 1], "x": 23, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 2], "x": 38, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 3], "x": 53, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 4], "x": 68, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 5], "x": 83, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 6], "x": 98, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 7], "x": 113, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 8], "x": 127, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 9], "x": 142, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 10], "x": 157, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 11], "x": 172, "y": 7 },
|
||||
{ "flags": 4, "matrix": [0, 12], "x": 187, "y": 7 },
|
||||
{ "flags": 1, "matrix": [0, 13], "x": 209, "y": 7 }
|
||||
]
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_60_ansi": {
|
||||
"layout": [
|
||||
{ "label": "Esc", "matrix": [0, 0], "w": 1, "x": 0, "y": 0 },
|
||||
{ "label": "1", "matrix": [0, 1], "w": 1, "x": 1, "y": 0 },
|
||||
{ "label": "2", "matrix": [0, 2], "w": 1, "x": 2, "y": 0 },
|
||||
{ "label": "3", "matrix": [0, 3], "w": 1, "x": 3, "y": 0 },
|
||||
{ "label": "4", "matrix": [0, 4], "w": 1, "x": 4, "y": 0 },
|
||||
{ "label": "5", "matrix": [0, 5], "w": 1, "x": 5, "y": 0 },
|
||||
{ "label": "6", "matrix": [0, 6], "w": 1, "x": 6, "y": 0 },
|
||||
{ "label": "7", "matrix": [0, 7], "w": 1, "x": 7, "y": 0 },
|
||||
{ "label": "8", "matrix": [0, 8], "w": 1, "x": 8, "y": 0 },
|
||||
{ "label": "9", "matrix": [0, 9], "w": 1, "x": 9, "y": 0 },
|
||||
{ "label": "0", "matrix": [0, 10], "w": 1, "x": 10, "y": 0 },
|
||||
{ "label": "-", "matrix": [0, 11], "w": 1, "x": 11, "y": 0 },
|
||||
{ "label": "=", "matrix": [0, 12], "w": 1, "x": 12, "y": 0 },
|
||||
{ "label": "BS", "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
|
||||
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
|
||||
{ "label": "Q", "matrix": [1, 1], "w": 1, "x": 1.5, "y": 1 },
|
||||
{ "label": "W", "matrix": [1, 2], "w": 1, "x": 2.5, "y": 1 },
|
||||
{ "label": "E", "matrix": [1, 3], "w": 1, "x": 3.5, "y": 1 },
|
||||
{ "label": "R", "matrix": [1, 4], "w": 1, "x": 4.5, "y": 1 },
|
||||
{ "label": "T", "matrix": [1, 5], "w": 1, "x": 5.5, "y": 1 },
|
||||
{ "label": "Y", "matrix": [1, 6], "w": 1, "x": 6.5, "y": 1 },
|
||||
{ "label": "U", "matrix": [1, 7], "w": 1, "x": 7.5, "y": 1 },
|
||||
{ "label": "I", "matrix": [1, 8], "w": 1, "x": 8.5, "y": 1 },
|
||||
{ "label": "O", "matrix": [1, 9], "w": 1, "x": 9.5, "y": 1 },
|
||||
{ "label": "P", "matrix": [1, 10], "w": 1, "x": 10.5, "y": 1 },
|
||||
{ "label": "[", "matrix": [1, 11], "w": 1, "x": 11.5, "y": 1 },
|
||||
{ "label": "]", "matrix": [1, 12], "w": 1, "x": 12.5, "y": 1 },
|
||||
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
|
||||
{ "label": "Caps", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
|
||||
{ "label": "A", "matrix": [2, 1], "w": 1, "x": 1.75, "y": 2 },
|
||||
{ "label": "S", "matrix": [2, 2], "w": 1, "x": 2.75, "y": 2 },
|
||||
{ "label": "D", "matrix": [2, 3], "w": 1, "x": 3.75, "y": 2 },
|
||||
{ "label": "F", "matrix": [2, 4], "w": 1, "x": 4.75, "y": 2 },
|
||||
{ "label": "G", "matrix": [2, 5], "w": 1, "x": 5.75, "y": 2 },
|
||||
{ "label": "H", "matrix": [2, 6], "w": 1, "x": 6.75, "y": 2 },
|
||||
{ "label": "J", "matrix": [2, 7], "w": 1, "x": 7.75, "y": 2 },
|
||||
{ "label": "K", "matrix": [2, 8], "w": 1, "x": 8.75, "y": 2 },
|
||||
{ "label": "L", "matrix": [2, 9], "w": 1, "x": 9.75, "y": 2 },
|
||||
{ "label": ";", "matrix": [2, 10], "w": 1, "x": 10.75, "y": 2 },
|
||||
{ "label": "'", "matrix": [2, 11], "w": 1, "x": 11.75, "y": 2 },
|
||||
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
|
||||
{ "label": "LShift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
|
||||
{ "label": "Z", "matrix": [3, 1], "w": 1, "x": 2.25, "y": 3 },
|
||||
{ "label": "X", "matrix": [3, 2], "w": 1, "x": 3.25, "y": 3 },
|
||||
{ "label": "C", "matrix": [3, 3], "w": 1, "x": 4.25, "y": 3 },
|
||||
{ "label": "V", "matrix": [3, 4], "w": 1, "x": 5.25, "y": 3 },
|
||||
{ "label": "B", "matrix": [3, 5], "w": 1, "x": 6.25, "y": 3 },
|
||||
{ "label": "N", "matrix": [3, 6], "w": 1, "x": 7.25, "y": 3 },
|
||||
{ "label": "M", "matrix": [3, 7], "w": 1, "x": 8.25, "y": 3 },
|
||||
{ "label": ",", "matrix": [3, 8], "w": 1, "x": 9.25, "y": 3 },
|
||||
{ "label": ".", "matrix": [3, 9], "w": 1, "x": 10.25, "y": 3 },
|
||||
{ "label": "/", "matrix": [3, 10], "w": 1, "x": 11.25, "y": 3 },
|
||||
{ "label": "RShift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
|
||||
{ "label": "LCtrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
|
||||
{ "label": "LGui", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
|
||||
{ "label": "LAlt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
|
||||
{ "label": "Space", "matrix": [5, 5], "w": 6.25, "x": 3.75, "y": 4 },
|
||||
{ "label": "RAlt", "matrix": [5, 9], "w": 1.25, "x": 10, "y": 4 },
|
||||
{ "label": "RGui", "matrix": [5, 10], "w": 1.25, "x": 11.25, "y": 4 },
|
||||
{ "label": "FN", "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 4 },
|
||||
{ "label": "RCtrl", "matrix": [5, 13], "w": 1.25, "x": 13.75, "y": 4 }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/* Copyright 2022 ziptyze
|
||||
*
|
||||
* 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_60_ansi(
|
||||
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
|
||||
),
|
||||
|
||||
[1] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
};
|
||||
@@ -0,0 +1,100 @@
|
||||
/* Copyright 2022 ziptyze
|
||||
*
|
||||
* 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_60_ansi(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
|
||||
),
|
||||
|
||||
[1] = LAYOUT_60_ansi(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
|
||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
|
||||
KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[2] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGB_M_SN,RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[3] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[4] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[5] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[6] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[7] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[8] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[9] = LAYOUT_60_ansi(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1,2 @@
|
||||
VIA_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
@@ -0,0 +1,23 @@
|
||||
# pi60_rgb
|
||||
|
||||
The pi60 RGB is a 60% pcb from 1upkeyboards. This keyboard features an ANSI layout hot swap PCB with per-key in-switch RGB lighting. The controller is a Raspberry Pi rp2040 microcontroller.
|
||||
|
||||
* Keyboard Maintainer: [ziptyze](https://github.com/ziptyze)
|
||||
* Hardware Availability: (https://1upkeyboards.com/shop/controllers/1upkeyboards-pi60rgb-60-pcb/)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make 1upkeyboards/pi60_rgb:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make 1upkeyboards/pi60_rgb:default:flash
|
||||
|
||||
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).
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 2 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
|
||||
* **Bootloader button**: Hold the button on the back of the PCB and plug in the keyboard
|
||||
@@ -0,0 +1 @@
|
||||
WS2812_DRIVER = vendor
|
||||
@@ -131,6 +131,6 @@ void matrix_scan_user(void) {
|
||||
//EEPROM Reset Function
|
||||
void eeconfig_init_user(void) {
|
||||
rgblight_enable(); // Enable RGB by default
|
||||
rgblight_sethsv_orange(); // Set it to orange by default
|
||||
rgblight_sethsv(HSV_ORANGE); // Set it to orange by default
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_DVORAK] = LAYOUT(/* Base Dvorak */
|
||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_BRIU, KC_EQL, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
|
||||
LCTL_T(KC_CAPS), KC_A, KC_O, KC_E, KC_U, KC_I, KC_BRID, LCTL(KC_F), KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT,
|
||||
KC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LALT, KC_MINS, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSPC,
|
||||
SC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LALT, KC_MINS, KC_B, KC_M, KC_W, KC_V, KC_Z, SC_RSPC,
|
||||
TD(TD_SWAP_LAYERS), KC_SPC
|
||||
),
|
||||
|
||||
@@ -67,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT(/* Base Qwerty */
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BRIU, KC_QUOT, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
LCTL_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_BRID, LCTL(KC_F), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_MINS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_MINS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC,
|
||||
TD(TD_SWAP_LAYERS), KC_SPC
|
||||
),
|
||||
|
||||
|
||||
@@ -6,14 +6,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,KC_GRV,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||
KC_LGUI, 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_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSPC, MO(2),
|
||||
SC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, SC_RSPC, MO(2),
|
||||
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_RALT, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTL),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,KC_GRV,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
||||
KC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSPC, MO(2),
|
||||
SC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, SC_RSPC, MO(2),
|
||||
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_RALT, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTL),
|
||||
|
||||
[2] = LAYOUT_all(
|
||||
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX
|
||||
#define UNICODE_SELECTED_MODES UC_LNX
|
||||
|
||||
#define MOUSEKEY_INTERVAL 12
|
||||
#define MOUSEKEY_MAX_SPEED 6
|
||||
@@ -30,3 +30,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define MOUSEKEY_WHEEL_INTERVAL 50
|
||||
// The default is 40
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
|
||||
|
||||
#define FLOW_COUNT 6
|
||||
#define FLOW_LAYERS_COUNT 5
|
||||
|
||||
@@ -0,0 +1,336 @@
|
||||
/* Copyright 2022 @daliusd
|
||||
*
|
||||
* 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 "flow.h"
|
||||
|
||||
extern const uint16_t flow_config[FLOW_COUNT][2];
|
||||
extern const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2];
|
||||
|
||||
// Represents the states a flow key can be in
|
||||
typedef enum {
|
||||
flow_up_unqueued,
|
||||
flow_up_queued,
|
||||
flow_up_queued_used,
|
||||
flow_down_unused,
|
||||
flow_down_used,
|
||||
} flow_state_t;
|
||||
|
||||
#ifdef FLOW_ONESHOT_TERM
|
||||
const int g_flow_oneshot_term = FLOW_ONESHOT_TERM;
|
||||
#else
|
||||
const int g_flow_oneshot_term = 500;
|
||||
#endif
|
||||
|
||||
#ifdef FLOW_ONESHOT_WAIT_TERM
|
||||
const int g_flow_oneshot_wait_term = FLOW_ONESHOT_WAIT_TERM;
|
||||
#else
|
||||
const int g_flow_oneshot_wait_term = 500;
|
||||
#endif
|
||||
|
||||
flow_state_t flow_state[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = flow_up_unqueued };
|
||||
bool flow_pressed[FLOW_COUNT][2] = { [0 ... FLOW_COUNT - 1] = {false, false} };
|
||||
uint16_t flow_timers[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
|
||||
bool flow_timeout_timers_active[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
|
||||
uint16_t flow_timeout_timers_value[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
|
||||
uint16_t flow_timeout_wait_timers_value[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = 0 };
|
||||
|
||||
flow_state_t flow_layers_state[FLOW_LAYERS_COUNT] = {
|
||||
[0 ... FLOW_LAYERS_COUNT - 1] = flow_up_unqueued
|
||||
};
|
||||
bool flow_layer_timeout_timers_active[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = false };
|
||||
uint16_t flow_layer_timeout_timers_value[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = 0 };
|
||||
uint16_t flow_layer_timeout_wait_timers_value[FLOW_LAYERS_COUNT] = { [0 ... FLOW_LAYERS_COUNT - 1] = 0 };
|
||||
|
||||
bool is_flow_ignored_key(uint16_t keycode) {
|
||||
for (int i = 0; i < FLOW_COUNT; i++) {
|
||||
if (flow_config[i][0] == keycode) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
|
||||
if (flow_layers_config[i][0] == keycode) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (keycode == KC_LSFT || keycode == KC_RSFT
|
||||
|| keycode == KC_LCTL || keycode == KC_RCTL
|
||||
|| keycode == KC_LALT || keycode == KC_RALT
|
||||
|| keycode == KC_LGUI || keycode == KC_RGUI) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool update_flow_mods(
|
||||
uint16_t keycode,
|
||||
bool pressed
|
||||
) {
|
||||
bool pass = true;
|
||||
bool flow_key_list_triggered[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
|
||||
bool flow_key_list_pressed[FLOW_COUNT] = { [0 ... FLOW_COUNT - 1] = false };
|
||||
|
||||
bool flow_triggered = false;
|
||||
|
||||
for (uint8_t i = 0; i < FLOW_COUNT; i++) {
|
||||
// Layer key
|
||||
if (keycode == flow_config[i][0]) {
|
||||
if (pressed) {
|
||||
flow_pressed[i][0] = true;
|
||||
} else {
|
||||
flow_pressed[i][0] = false;
|
||||
}
|
||||
// KC mod key
|
||||
} else if (keycode == flow_config[i][1]) {
|
||||
if (pressed) {
|
||||
if (flow_pressed[i][0]) {
|
||||
flow_pressed[i][1] = true;
|
||||
flow_key_list_triggered[i] = true;
|
||||
flow_triggered = true;
|
||||
flow_key_list_pressed[i] = true;
|
||||
pass = false;
|
||||
}
|
||||
} else if (flow_pressed[i][1]) {
|
||||
flow_pressed[i][1] = false;
|
||||
if (flow_pressed[i][0]) {
|
||||
flow_key_list_triggered[i] = true;
|
||||
flow_triggered = true;
|
||||
pass = false;
|
||||
} else if ((flow_state[i] == flow_down_unused)
|
||||
|| (flow_state[i] == flow_down_used)) {
|
||||
flow_key_list_triggered[i] = true;
|
||||
flow_triggered = true;
|
||||
pass = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < FLOW_COUNT; i++) {
|
||||
if (flow_key_list_triggered[i]) {
|
||||
if (flow_key_list_pressed[i]) {
|
||||
if (flow_state[i] == flow_up_unqueued) {
|
||||
register_code(flow_config[i][1]);
|
||||
}
|
||||
flow_timeout_wait_timers_value[i] = timer_read();
|
||||
flow_state[i] = flow_down_unused;
|
||||
} else {
|
||||
// Trigger keyup
|
||||
switch (flow_state[i]) {
|
||||
case flow_down_unused:
|
||||
if (!flow_pressed[i][1]) {
|
||||
if (timer_elapsed(flow_timeout_wait_timers_value[i]) > g_flow_oneshot_wait_term) {
|
||||
flow_state[i] = flow_up_unqueued;
|
||||
unregister_code(flow_config[i][1]);
|
||||
} else {
|
||||
// If we didn't use the mod while trigger was held, queue it.
|
||||
flow_state[i] = flow_up_queued;
|
||||
flow_timeout_timers_active[i] = true;
|
||||
flow_timeout_timers_value[i] = timer_read();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case flow_down_used:
|
||||
// If we did use the mod while trigger was held, unregister it.
|
||||
if (!flow_pressed[i][1]) {
|
||||
flow_state[i] = flow_up_unqueued;
|
||||
unregister_code(flow_config[i][1]);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (!flow_triggered) {
|
||||
if (pressed) {
|
||||
if (!is_flow_ignored_key(keycode)) {
|
||||
switch (flow_state[i]) {
|
||||
case flow_up_queued:
|
||||
flow_state[i] = flow_up_queued_used;
|
||||
flow_timeout_timers_active[i] = false;
|
||||
break;
|
||||
case flow_up_queued_used:
|
||||
flow_state[i] = flow_up_unqueued;
|
||||
unregister_code(flow_config[i][1]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!is_flow_ignored_key(keycode)) {
|
||||
// On non-ignored keyup, consider the oneshot used.
|
||||
switch (flow_state[i]) {
|
||||
case flow_down_unused:
|
||||
flow_state[i] = flow_down_used;
|
||||
break;
|
||||
case flow_up_queued:
|
||||
flow_state[i] = flow_up_unqueued;
|
||||
unregister_code(flow_config[i][1]);
|
||||
break;
|
||||
case flow_up_queued_used:
|
||||
flow_state[i] = flow_up_unqueued;
|
||||
unregister_code(flow_config[i][1]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pass;
|
||||
}
|
||||
|
||||
void change_pressed_status(uint16_t keycode, bool pressed) {
|
||||
for (int i = 0; i < FLOW_COUNT; i++) {
|
||||
if (flow_config[i][0] == keycode) {
|
||||
flow_pressed[i][0] = pressed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool update_flow_layers(
|
||||
uint16_t keycode,
|
||||
bool pressed,
|
||||
keypos_t key_position
|
||||
) {
|
||||
uint8_t key_layer = read_source_layers_cache(key_position);
|
||||
bool pass = true;
|
||||
|
||||
for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
|
||||
uint16_t trigger = flow_layers_config[i][0];
|
||||
uint16_t layer = flow_layers_config[i][1];
|
||||
|
||||
if (keycode == trigger) {
|
||||
if (pressed) {
|
||||
// Trigger keydown
|
||||
if (flow_layers_state[i] == flow_up_unqueued) {
|
||||
layer_on(layer);
|
||||
change_pressed_status(trigger, true);
|
||||
}
|
||||
flow_layer_timeout_wait_timers_value[i] = timer_read();
|
||||
flow_layers_state[i] = flow_down_unused;
|
||||
pass = false;
|
||||
} else {
|
||||
// Trigger keyup
|
||||
switch (flow_layers_state[i]) {
|
||||
case flow_down_unused:
|
||||
if (timer_elapsed(flow_layer_timeout_wait_timers_value[i]) > g_flow_oneshot_wait_term) {
|
||||
flow_layers_state[i] = flow_up_unqueued;
|
||||
layer_off(layer);
|
||||
change_pressed_status(trigger, false);
|
||||
pass = false;
|
||||
} else {
|
||||
// If we didn't use the layer while trigger was held, queue it.
|
||||
flow_layers_state[i] = flow_up_queued;
|
||||
flow_layer_timeout_timers_active[i] = true;
|
||||
flow_layer_timeout_timers_value[i] = timer_read();
|
||||
pass = false;
|
||||
change_pressed_status(trigger, true);
|
||||
}
|
||||
break;
|
||||
case flow_down_used:
|
||||
// If we did use the layer while trigger was held, turn off it.
|
||||
flow_layers_state[i] = flow_up_unqueued;
|
||||
layer_off(layer);
|
||||
change_pressed_status(trigger, false);
|
||||
pass = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (pressed) {
|
||||
if (key_layer == layer) {
|
||||
// On non-ignored keyup, consider the oneshot used.
|
||||
switch (flow_layers_state[i]) {
|
||||
case flow_down_unused:
|
||||
flow_layers_state[i] = flow_down_used;
|
||||
break;
|
||||
case flow_up_queued:
|
||||
flow_layers_state[i] = flow_up_queued_used;
|
||||
flow_layer_timeout_timers_active[i] = false;
|
||||
break;
|
||||
case flow_up_queued_used:
|
||||
flow_layers_state[i] = flow_up_unqueued;
|
||||
layer_off(layer);
|
||||
change_pressed_status(trigger, false);
|
||||
pass = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Ignore key ups from other layers
|
||||
if (key_layer == layer) {
|
||||
// On non-ignored keyup, consider the oneshot used.
|
||||
switch (flow_layers_state[i]) {
|
||||
case flow_up_queued:
|
||||
flow_layers_state[i] = flow_up_unqueued;
|
||||
layer_off(layer);
|
||||
change_pressed_status(trigger, false);
|
||||
break;
|
||||
case flow_up_queued_used:
|
||||
flow_layers_state[i] = flow_up_unqueued;
|
||||
layer_off(layer);
|
||||
change_pressed_status(trigger, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pass;
|
||||
}
|
||||
|
||||
bool update_flow(
|
||||
uint16_t keycode,
|
||||
bool pressed,
|
||||
keypos_t key_position
|
||||
) {
|
||||
bool pass = update_flow_mods(keycode, pressed);
|
||||
pass = update_flow_layers(keycode, pressed, key_position) & pass;
|
||||
return pass;
|
||||
}
|
||||
|
||||
void flow_matrix_scan(void) {
|
||||
for (int i = 0; i < FLOW_COUNT; i++) {
|
||||
if (flow_timeout_timers_active[i]
|
||||
&& timer_elapsed(flow_timeout_timers_value[i]) > g_flow_oneshot_term) {
|
||||
flow_timeout_timers_active[i] = false;
|
||||
flow_state[i] = flow_up_unqueued;
|
||||
unregister_code(flow_config[i][1]);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < FLOW_LAYERS_COUNT; i++) {
|
||||
if (flow_layer_timeout_timers_active[i]
|
||||
&& timer_elapsed(flow_layer_timeout_timers_value[i]) > g_flow_oneshot_term) {
|
||||
flow_layer_timeout_timers_active[i] = false;
|
||||
flow_layers_state[i] = flow_up_unqueued;
|
||||
layer_off(flow_layers_config[i][1]);
|
||||
change_pressed_status(flow_layers_config[i][0], false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
Copyright 2022 Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
bool update_flow(
|
||||
uint16_t keycode,
|
||||
bool pressed,
|
||||
keypos_t key_position
|
||||
);
|
||||
|
||||
void flow_matrix_scan(void);
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#include "oneshot.h"
|
||||
#include "flow.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.
|
||||
@@ -25,11 +25,12 @@ enum layers {
|
||||
_QWERTY,
|
||||
_SYM,
|
||||
_NAV,
|
||||
_NUMB,
|
||||
_MISC,
|
||||
_TMUX,
|
||||
_MOUSE,
|
||||
_MISC,
|
||||
_FUNC,
|
||||
_LT_MAC,
|
||||
_LT_LINUX,
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
@@ -41,22 +42,40 @@ enum custom_keycodes {
|
||||
TM_SLCT,
|
||||
TM_SRCH,
|
||||
TM_URL,
|
||||
OS_CTRL,
|
||||
OS_ALT,
|
||||
OS_GUI,
|
||||
OS_TMUX,
|
||||
OS_MISC,
|
||||
OS_TMUX,
|
||||
OS_FUNC,
|
||||
LT_OSLNX,
|
||||
};
|
||||
|
||||
// Shortcut to make keymap more readable
|
||||
|
||||
#define L_NAV MO(_NAV)
|
||||
#define L_SYM MO(_SYM)
|
||||
#define L_MOUSE TG(_MOUSE)
|
||||
#define L_MOUSE MO(_MOUSE)
|
||||
|
||||
#define K_PRINT (QK_LCTL | QK_LSFT | QK_LGUI | KC_4)
|
||||
#define K_VIDEO (QK_LSFT | QK_LGUI | KC_5)
|
||||
|
||||
// flow_config should correspond to following format:
|
||||
// * layer keycode
|
||||
// * modifier keycode
|
||||
const uint16_t flow_config[FLOW_COUNT][2] = {
|
||||
{L_NAV, KC_LALT},
|
||||
{L_NAV, KC_LGUI},
|
||||
{L_NAV, KC_LCTL},
|
||||
{L_SYM, KC_RCTL},
|
||||
{L_SYM, KC_RGUI},
|
||||
{L_SYM, KC_RALT},
|
||||
};
|
||||
|
||||
const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2] = {
|
||||
{OS_MISC, _MISC},
|
||||
{OS_TMUX, _TMUX},
|
||||
{OS_FUNC, _FUNC},
|
||||
};
|
||||
|
||||
// Unicode characters
|
||||
enum unicode_names {
|
||||
SNEK,
|
||||
EURO,
|
||||
@@ -96,7 +115,7 @@ const uint32_t PROGMEM unicode_map[] = {
|
||||
[LT_S_I] = 0x12f, // į
|
||||
[LT_L_I] = 0x12e, // Į
|
||||
[LT_S_S] = 0x161, // š
|
||||
[LT_L_S] = 0x160, // Š'
|
||||
[LT_L_S] = 0x160, // Š
|
||||
[LT_S_U1] = 0x173, // ų
|
||||
[LT_L_U1] = 0x172, // Ų
|
||||
[LT_S_U2] = 0x16b, // ū
|
||||
@@ -110,14 +129,23 @@ const uint32_t PROGMEM unicode_map[] = {
|
||||
#define K_SNEK X(SNEK)
|
||||
#define K_EURO X(EURO)
|
||||
#define K_LT_A XP(LT_S_A, LT_L_A)
|
||||
#define K_LT_AU X(LT_L_A)
|
||||
#define K_LT_C XP(LT_S_C, LT_L_C)
|
||||
#define K_LT_CU X(LT_L_C)
|
||||
#define K_LT_E1 XP(LT_S_E1, LT_L_E1)
|
||||
#define K_LT_E1U X(LT_L_E1)
|
||||
#define K_LT_E2 XP(LT_S_E2, LT_L_E2)
|
||||
#define K_LT_E2U X(LT_L_E2)
|
||||
#define K_LT_I XP(LT_S_I, LT_L_I)
|
||||
#define K_LT_IU X(LT_L_I)
|
||||
#define K_LT_S XP(LT_S_S, LT_L_S)
|
||||
#define K_LT_SU X(LT_L_S)
|
||||
#define K_LT_U1 XP(LT_S_U1, LT_L_U1)
|
||||
#define K_LT_U1U X(LT_L_U1)
|
||||
#define K_LT_U2 XP(LT_S_U2, LT_L_U2)
|
||||
#define K_LT_U2U X(LT_L_U2)
|
||||
#define K_LT_Z XP(LT_S_Z, LT_L_Z)
|
||||
#define K_LT_ZU X(LT_L_Z)
|
||||
#define K_LT_OB X(LT_OB)
|
||||
#define K_LT_CB X(LT_CB)
|
||||
|
||||
@@ -139,35 +167,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
|
||||
KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC , KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_LPRN ,KC_RPRN ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
KC_GRV ,KC_PLUS ,KC_LBRC ,KC_RBRC ,K_LT_OB , KC_MINS ,OS_ALT ,OS_CTRL ,OS_GUI ,KC_PIPE ,
|
||||
XXXXXXX ,KC_GRV ,KC_LBRC ,KC_RBRC ,KC_PLUS , KC_MINS ,KC_PIPE ,KC_RCTL ,KC_RGUI ,KC_RALT ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
K_SNEK ,KC_EQL ,KC_LCBR ,KC_RCBR ,K_LT_CB , KC_UNDS ,KC_QUOT ,KC_DQT ,K_EURO ,KC_BSLS ,
|
||||
KC_DEL ,KC_BSPC ,KC_LCBR ,KC_RCBR ,KC_EQL , KC_UNDS ,KC_QUOT ,KC_DQT ,OS_MISC ,KC_BSLS ,
|
||||
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
|
||||
_______ , _______ , _______ , _______
|
||||
_______ , _______ , _______ , XXXXXXX
|
||||
// └────────┘ └────────┘ └────────┘ └────────┘
|
||||
),
|
||||
|
||||
[_NAV] = LAYOUT(
|
||||
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
|
||||
KC_TILDE,L_MOUSE ,OS_FUNC ,OS_MISC ,OS_TMUX , K_LT_A ,K_LT_C ,K_LT_E1 ,K_LT_E2 ,K_LT_I ,
|
||||
KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
KC_TAB ,OS_GUI ,OS_CTRL ,OS_ALT ,KC_ENT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,KC_END ,
|
||||
KC_LALT ,KC_LGUI ,KC_LCTL ,KC_TAB ,KC_ENT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,KC_PGUP ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
KC_DELT ,KC_BSPC ,KC_ESC ,KC_PGDN ,KC_PGUP , KC_HOME ,K_LT_S ,K_LT_U1 ,K_LT_U2 ,K_LT_Z ,
|
||||
KC_LSFT ,KC_BSPC ,KC_ESC ,KC_TILDE,OS_TMUX , OS_FUNC ,L_MOUSE ,KC_COMM ,KC_DOT ,KC_PGDN ,
|
||||
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
|
||||
_______ , _______ , _______ , _______
|
||||
XXXXXXX , _______ , _______ , _______
|
||||
// └────────┘ └────────┘ └────────┘ └────────┘
|
||||
),
|
||||
|
||||
[_NUMB] = LAYOUT(
|
||||
[_MISC] = LAYOUT(
|
||||
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
|
||||
KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BRID ,KC_BRIU ,KC_PSCR ,XXXXXXX ,K_PRINT ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 , XXXXXXX ,OS_ALT ,OS_CTRL ,OS_GUI ,XXXXXXX ,
|
||||
XXXXXXX ,XXXXXXX ,DEBUG ,LT_OSLNX,XXXXXXX , KC_MPRV ,KC_MPLY ,KC_MNXT ,XXXXXXX ,K_VIDEO ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
KC_DELT ,KC_BSPC ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_VOLD ,KC_VOLU ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
|
||||
_______ , _______ , _______ , _______
|
||||
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
|
||||
// └────────┘ └────────┘ └────────┘ └────────┘
|
||||
),
|
||||
|
||||
@@ -185,127 +213,59 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_MOUSE] = LAYOUT(
|
||||
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
|
||||
XXXXXXX ,L_MOUSE ,KC_MS_U ,KC_BTN3 ,KC_WH_U , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
XXXXXXX ,XXXXXXX ,KC_MS_U ,KC_BTN3 ,KC_WH_U , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D , XXXXXXX ,KC_LALT ,KC_LCTL ,KC_LGUI ,XXXXXXX ,
|
||||
XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D , XXXXXXX ,XXXXXXX ,KC_RCTL ,KC_RGUI ,KC_RALT ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
XXXXXXX ,XXXXXXX ,KC_ESC ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
|
||||
KC_BTN1 , KC_BTN2 , XXXXXXX , XXXXXXX
|
||||
// └────────┘ └────────┘ └────────┘ └────────┘
|
||||
),
|
||||
|
||||
[_MISC] = LAYOUT(
|
||||
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
|
||||
QK_BOOT,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BRID ,KC_BRIU ,XXXXXXX ,KC_PSCR ,K_PRINT ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
XXXXXXX ,XXXXXXX ,DB_TOGG ,XXXXXXX ,XXXXXXX , KC_MPRV ,KC_MPLY ,XXXXXXX ,KC_MNXT ,XXXXXXX ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_VOLD ,KC_VOLU ,XXXXXXX ,XXXXXXX ,UC_MOD ,
|
||||
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
|
||||
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
|
||||
KC_BTN1 , KC_BTN2 , _______ , XXXXXXX
|
||||
// └────────┘ └────────┘ └────────┘ └────────┘
|
||||
),
|
||||
|
||||
[_FUNC] = LAYOUT(
|
||||
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
|
||||
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,
|
||||
KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,
|
||||
KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 , XXXXXXX ,XXXXXXX ,KC_RCTL ,KC_RGUI ,KC_RALT ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_F11 ,KC_F12 ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
KC_F11 ,KC_F12 ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
|
||||
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
|
||||
// └────────┘ └────────┘ └────────┘ └────────┘
|
||||
),
|
||||
|
||||
[_LT_MAC] = LAYOUT(
|
||||
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
|
||||
KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC , KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_PLUS ,XXXXXXX ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_EQL ,XXXXXXX ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
XXXXXXX ,KC_BSPC ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
|
||||
XXXXXXX , XXXXXXX , _______ , XXXXXXX
|
||||
// └────────┘ └────────┘ └────────┘ └────────┘
|
||||
),
|
||||
|
||||
[_LT_LINUX] = LAYOUT(
|
||||
//┌────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┐
|
||||
K_LT_AU ,K_LT_CU ,K_LT_E1U,K_LT_E2U,K_LT_IU , K_LT_SU ,K_LT_U1U,K_LT_U2U,K_LT_ZU ,XXXXXXX ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
K_LT_A ,K_LT_C ,K_LT_E1 ,K_LT_E2 ,K_LT_I , K_LT_S ,K_LT_U1 ,K_LT_U2 ,K_LT_Z ,XXXXXXX ,
|
||||
//├────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┤
|
||||
XXXXXXX ,KC_BSPC ,XXXXXXX ,K_SNEK ,K_LT_OB , K_LT_CB ,K_EURO ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
|
||||
//└────────┴────────┴────────┴────┬───┴────┬───┼────────┐ ┌────────┼───┬────┴───┬────┴────────┴────────┴────────┘
|
||||
XXXXXXX , XXXXXXX , _______ , XXXXXXX
|
||||
// └────────┘ └────────┘ └────────┘ └────────┘
|
||||
),
|
||||
};
|
||||
|
||||
#define TMUX_PREFIX SS_DOWN(X_LCTL) "b" SS_UP(X_LCTL)
|
||||
|
||||
bool is_oneshot_cancel_key(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case L_SYM:
|
||||
case L_NAV:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool is_oneshot_layer_cancel_key(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case L_SYM:
|
||||
case L_NAV:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool is_oneshot_ignored_key(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case L_SYM:
|
||||
case L_NAV:
|
||||
case OS_CTRL:
|
||||
case OS_ALT:
|
||||
case OS_GUI:
|
||||
case OS_TMUX:
|
||||
case OS_MISC:
|
||||
case KC_LSFT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool is_oneshot_mod_key(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case OS_CTRL:
|
||||
case OS_ALT:
|
||||
case OS_GUI:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
oneshot_state os_ctrl_state = os_up_unqueued;
|
||||
oneshot_state os_alt_state = os_up_unqueued;
|
||||
oneshot_state os_cmd_state = os_up_unqueued;
|
||||
oneshot_state os_tmux_state = os_up_unqueued;
|
||||
oneshot_state os_misc_state = os_up_unqueued;
|
||||
oneshot_state os_func_state = os_up_unqueued;
|
||||
bool lt_os_is_linux = false;
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
update_oneshot(
|
||||
&os_ctrl_state, KC_LCTL, OS_CTRL,
|
||||
keycode, record
|
||||
);
|
||||
update_oneshot(
|
||||
&os_alt_state, KC_LALT, OS_ALT,
|
||||
keycode, record
|
||||
);
|
||||
update_oneshot(
|
||||
&os_cmd_state, KC_LGUI, OS_GUI,
|
||||
keycode, record
|
||||
);
|
||||
|
||||
bool handled = true;
|
||||
handled = update_oneshot_layer(
|
||||
&os_tmux_state, _TMUX, OS_TMUX,
|
||||
keycode, record
|
||||
) & handled;
|
||||
|
||||
handled = update_oneshot_layer(
|
||||
&os_misc_state, _MISC, OS_MISC,
|
||||
keycode, record
|
||||
) & handled;
|
||||
|
||||
handled = update_oneshot_layer(
|
||||
&os_func_state, _FUNC, OS_FUNC,
|
||||
keycode, record
|
||||
) & handled;
|
||||
if (!handled) return false;
|
||||
if (!update_flow(keycode, record->event.pressed, record->event.key)) return false;
|
||||
|
||||
switch (keycode) {
|
||||
case TM_LEFT:
|
||||
@@ -340,10 +300,35 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (!record->event.pressed) return true;
|
||||
SEND_STRING(TMUX_PREFIX SS_LCTL("u"));
|
||||
return false;
|
||||
case LT_OSLNX:
|
||||
if (!record->event.pressed) return true;
|
||||
lt_os_is_linux = !lt_os_is_linux;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
return update_tri_layer_state(state, _SYM, _NAV, _NUMB);
|
||||
void matrix_scan_user(void) {
|
||||
flow_matrix_scan();
|
||||
}
|
||||
|
||||
bool lang_layer_on = false;
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
state = update_tri_layer_state(state, _SYM, _NAV, lt_os_is_linux ? _LT_LINUX : _LT_MAC);
|
||||
|
||||
uint8_t hl = get_highest_layer(state);
|
||||
if (hl == _LT_MAC) {
|
||||
if (!lang_layer_on) {
|
||||
tap_code16(LCTL(KC_SPC));
|
||||
lang_layer_on = true;
|
||||
}
|
||||
} else {
|
||||
if (lang_layer_on) {
|
||||
tap_code16(LCTL(KC_SPC));
|
||||
lang_layer_on = false;
|
||||
}
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -1,195 +0,0 @@
|
||||
/* Copyright 2021 @daliusd
|
||||
*
|
||||
* 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 "print.h"
|
||||
#include "oneshot.h"
|
||||
|
||||
void update_oneshot(
|
||||
oneshot_state *state,
|
||||
uint16_t mod,
|
||||
uint16_t trigger,
|
||||
uint16_t keycode,
|
||||
keyrecord_t *record
|
||||
) {
|
||||
if (keycode == trigger) {
|
||||
if (record->event.pressed) {
|
||||
// Trigger keydown
|
||||
if (*state == os_up_unqueued) {
|
||||
register_code(mod);
|
||||
}
|
||||
*state = os_down_unused;
|
||||
dprintf("trigger down (on?), mod: %d, ? -> os_down_unused\n", mod);
|
||||
} else {
|
||||
// Trigger keyup
|
||||
switch (*state) {
|
||||
case os_down_unused:
|
||||
// If we didn't use the mod while trigger was held, queue it.
|
||||
*state = os_up_queued;
|
||||
dprintf("trigger up, mod: %d, os_down_unused -> os_up_queued\n", mod);
|
||||
break;
|
||||
case os_down_used:
|
||||
// If we did use the mod while trigger was held, unregister it.
|
||||
*state = os_up_unqueued;
|
||||
unregister_code(mod);
|
||||
dprintf("trigger up (off), mod: %d, os_down_used -> os_up_unqueued\n", mod);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (record->event.pressed) {
|
||||
if (is_oneshot_cancel_key(keycode) && *state != os_up_unqueued) {
|
||||
// Cancel oneshot on designated cancel keydown.
|
||||
*state = os_up_unqueued;
|
||||
unregister_code(mod);
|
||||
dprintf("cancel (off), mod: %d, ? -> os_up_unqueued\n", mod);
|
||||
}
|
||||
if (!is_oneshot_ignored_key(keycode)) {
|
||||
switch (*state) {
|
||||
case os_up_queued:
|
||||
*state = os_up_queued_used;
|
||||
dprintf("key up (off), mod: %d, os_up_queued -> os_up_queued_used\n", mod);
|
||||
break;
|
||||
case os_up_queued_used:
|
||||
*state = os_up_unqueued;
|
||||
unregister_code(mod);
|
||||
dprintf("key up (off), mod: %d, os_up_queued_used -> os_up_unqueued\n", mod);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!is_oneshot_ignored_key(keycode)) {
|
||||
// On non-ignored keyup, consider the oneshot used.
|
||||
switch (*state) {
|
||||
case os_down_unused:
|
||||
*state = os_down_used;
|
||||
dprintf("key up, mod: %d, os_down_unused -> os_down_used\n", mod);
|
||||
break;
|
||||
case os_up_queued:
|
||||
*state = os_up_unqueued;
|
||||
unregister_code(mod);
|
||||
dprintf("key up (off), mod: %d, os_up_queued -> os_up_unqueued\n", mod);
|
||||
break;
|
||||
case os_up_queued_used:
|
||||
*state = os_up_unqueued;
|
||||
unregister_code(mod);
|
||||
dprintf("key up (off), mod: %d, os_up_queued_used -> os_up_unqueued\n", mod);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool update_oneshot_layer(
|
||||
oneshot_state *state,
|
||||
uint16_t layer,
|
||||
uint16_t trigger,
|
||||
uint16_t keycode,
|
||||
keyrecord_t *record
|
||||
) {
|
||||
if (keycode == trigger) {
|
||||
if (record->event.pressed) {
|
||||
// Trigger keydown
|
||||
if (*state == os_up_unqueued) {
|
||||
layer_on(layer);
|
||||
}
|
||||
*state = os_down_unused;
|
||||
dprintf("trigger down (on?), layer: %d, ? -> os_down_unused\n", layer);
|
||||
return false;
|
||||
} else {
|
||||
// Trigger keyup
|
||||
switch (*state) {
|
||||
case os_down_unused:
|
||||
// If we didn't use the layer while trigger was held, queue it.
|
||||
*state = os_up_queued;
|
||||
dprintf("trigger up, layer: %d, os_down_unused -> os_up_queued\n", layer);
|
||||
return false;
|
||||
case os_down_used:
|
||||
// If we did use the layer while trigger was held, turn off it.
|
||||
*state = os_up_unqueued;
|
||||
layer_off(layer);
|
||||
dprintf("trigger up (off), layer: %d, os_down_used -> os_up_unqueued\n", layer);
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (record->event.pressed) {
|
||||
if (is_oneshot_layer_cancel_key(keycode) && *state != os_up_unqueued) {
|
||||
// Cancel oneshot layer on designated cancel keydown.
|
||||
*state = os_up_unqueued;
|
||||
layer_off(layer);
|
||||
dprintf("cancel (off), layer: %d, ? -> os_up_unqueued\n", layer);
|
||||
return false;
|
||||
}
|
||||
uint8_t key_layer = read_source_layers_cache(record->event.key);
|
||||
if (key_layer == layer) {
|
||||
// On non-ignored keyup, consider the oneshot used.
|
||||
switch (*state) {
|
||||
case os_down_unused:
|
||||
*state = os_down_used;
|
||||
dprintf("key down, layer: %d, os_down_unused -> os_down_used\n", layer);
|
||||
return true;
|
||||
case os_up_queued:
|
||||
if (is_oneshot_mod_key(keycode)) {
|
||||
*state = os_up_unqueued;
|
||||
layer_off(layer);
|
||||
dprintf("key down, layer: %d, os_up_queued -> os_up_unqueued\n", layer);
|
||||
return false;
|
||||
} else {
|
||||
*state = os_up_queued_used;
|
||||
dprintf("key down, layer: %d, os_up_queued -> os_up_queued_used\n", layer);
|
||||
}
|
||||
return true;
|
||||
case os_up_queued_used:
|
||||
*state = os_up_unqueued;
|
||||
layer_off(layer);
|
||||
dprintf("key down (off), layer: %d, os_up_queued_used -> os_up_unqueued\n", layer);
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Ignore key ups from other layers
|
||||
uint8_t key_layer = read_source_layers_cache(record->event.key);
|
||||
if (key_layer == layer) {
|
||||
// On non-ignored keyup, consider the oneshot used.
|
||||
switch (*state) {
|
||||
case os_up_queued:
|
||||
*state = os_up_unqueued;
|
||||
layer_off(layer);
|
||||
dprintf("key up (off), layer: %d, os_up_queued -> os_up_unqueued\n", layer);
|
||||
return true;
|
||||
case os_up_queued_used:
|
||||
*state = os_up_unqueued;
|
||||
layer_off(layer);
|
||||
dprintf("key up (off), layer: %d, os_up_queued_used -> os_up_unqueued\n", layer);
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
/* Copyright 2021 @daliusd
|
||||
*
|
||||
* 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 QMK_KEYBOARD_H
|
||||
|
||||
// Represents the four states a oneshot key can be in
|
||||
typedef enum {
|
||||
os_up_unqueued,
|
||||
os_up_queued,
|
||||
os_up_queued_used,
|
||||
os_down_unused,
|
||||
os_down_used,
|
||||
} oneshot_state;
|
||||
|
||||
// Custom oneshot mod implementation that doesn't rely on timers. If a mod is
|
||||
// used while it is held it will be unregistered on keyup as normal, otherwise
|
||||
// it will be queued and only released after the next non-mod keyup.
|
||||
void update_oneshot(
|
||||
oneshot_state *state,
|
||||
uint16_t mod,
|
||||
uint16_t trigger,
|
||||
uint16_t keycode,
|
||||
keyrecord_t *record
|
||||
);
|
||||
|
||||
// Oneshot implementation for layers
|
||||
bool update_oneshot_layer(
|
||||
oneshot_state *state,
|
||||
uint16_t layer,
|
||||
uint16_t trigger,
|
||||
uint16_t keycode,
|
||||
keyrecord_t *record
|
||||
);
|
||||
|
||||
// To be implemented by the consumer. Layers one shot implementation needs to
|
||||
// know which keys are used as oneshot mods
|
||||
bool is_oneshot_mod_key(
|
||||
uint16_t keycode
|
||||
);
|
||||
|
||||
// To be implemented by the consumer. Defines keys to cancel oneshot mods.
|
||||
bool is_oneshot_cancel_key(uint16_t keycode);
|
||||
|
||||
// To be implemented by the consumer. Defines keys to cancel oneshot layers.
|
||||
bool is_oneshot_layer_cancel_key(uint16_t keycode);
|
||||
|
||||
// To be implemented by the consumer. Defines keys to ignore when determining
|
||||
// whether a oneshot mod has been used. Setting this to modifiers and layer
|
||||
// change keys allows stacking multiple oneshot modifiers, and carrying them
|
||||
// between layers.
|
||||
bool is_oneshot_ignored_key(uint16_t keycode);
|
||||
@@ -1,21 +1,306 @@
|
||||
# My 34 keys layout
|
||||
|
||||
This are my principles for layout:
|
||||
This is my principles for layout:
|
||||
|
||||
* I am using Callum style layout. Here you can read explanation by
|
||||
Callum himself and his reasoning for not using mod-tap:
|
||||
[here](../../../../users/callum/readme.md)
|
||||
|
||||
* There should be only one way to type key. Key can be on
|
||||
different layer but it must maintain its physical location.
|
||||
different layer but it must maintain its physical location. I
|
||||
broke this rule for Shift key only.
|
||||
|
||||
* The less features are used the better.
|
||||
|
||||
* trilayer is cool.
|
||||
* There is simple TMUX layer.
|
||||
|
||||
* There is 🐍 key for no reason.
|
||||
* Common keys must be accessible using two keys if possible.
|
||||
|
||||
As well I have added one shot layers compatible with Callum's one
|
||||
shot keys.
|
||||
* It should be possible to work with left keyboard side and mouse
|
||||
in right hand without lifting hands for some scenarios (that's
|
||||
why I had to duplicate Shift key).
|
||||
|
||||
There is simple TMUX layer as well.
|
||||
## Improvements over Callum
|
||||
|
||||
* I have added one shot layers compatible with Callum's one shot
|
||||
keys.
|
||||
|
||||
* There is one issue with accidental uppercase characters fixed
|
||||
that exists in original Callum layout's implementation.
|
||||
|
||||
* Another annoying feature of Callum layer is one shot keys are
|
||||
frozen until you cancel them. This is problem when you use one
|
||||
hand for keyboard and another for mouse. E.g. you click Ctrl and
|
||||
mouse to get some menu (on Mac OS X), and then you want to click
|
||||
some item in that menu. You have to remember to cancel one shot in such
|
||||
situation. I have added two settings two handle situations like
|
||||
this:
|
||||
|
||||
* `FLOW_ONESHOT_WAIT_TERM` - if hold one shot key longer than
|
||||
`FLOW_ONESHOT_WAIT_TERM` ms then mod key / layer key is not
|
||||
treated as one shot key (defaults to 500ms).
|
||||
|
||||
* `FLOW_ONESHOT_TERM` - if you do not click another key in
|
||||
`FLOW_ONESHOT_TERM` ms then one shot key / layer key is treated
|
||||
as normal key. Therefore if you lift it after `FLOW_ONESHOT_TERM`
|
||||
it will not be treated as one shot (defaults to 500ms).
|
||||
|
||||
After adding those two settings I have found out that I don't
|
||||
need one shot cancel key anymore so I have removed it.
|
||||
|
||||
Since differences are significant I named this layout `flow`.
|
||||
|
||||
## Using flow with your keyboard
|
||||
|
||||
Copy `flow.c` and `flow.h` to keyboard folder.
|
||||
|
||||
Add following line to `rules.mk`:
|
||||
|
||||
```make
|
||||
SRC += flow.c
|
||||
```
|
||||
|
||||
Define following in `config.h` for modifiers and layers:
|
||||
|
||||
```c
|
||||
#define FLOW_COUNT 7
|
||||
#define FLOW_LAYERS_COUNT 3
|
||||
```
|
||||
|
||||
In your `keymap.c` add and configure like this:
|
||||
|
||||
```c
|
||||
#include "flow.h"
|
||||
|
||||
...
|
||||
|
||||
// flow_config should correspond to following format:
|
||||
// * layer keycode
|
||||
// * modifier keycode
|
||||
const uint16_t flow_config[FLOW_COUNT][2] = {
|
||||
{L_NAV, KC_LALT},
|
||||
{L_NAV, KC_LGUI},
|
||||
{L_NAV, KC_LCTL},
|
||||
{L_NAV, KC_LSFT},
|
||||
{L_SYM, KC_LCTL},
|
||||
{L_SYM, KC_LGUI},
|
||||
{L_SYM, KC_LALT},
|
||||
};
|
||||
|
||||
|
||||
// for layers configuration follow this format:
|
||||
// * custom layer key
|
||||
// * layer name
|
||||
const uint16_t flow_layers_config[FLOW_LAYERS_COUNT][2] = {
|
||||
{OS_TMUX, _TMUX},
|
||||
{OS_MISC, _MISC},
|
||||
{OS_FUNC, _FUNC},
|
||||
};
|
||||
|
||||
...
|
||||
|
||||
// Add following to handle flow
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (!update_flow(keycode, record->event.pressed, record->event.key)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
flow_matrix_scan();
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## Lithuanian letters
|
||||
|
||||
There are at least two ways how to enter Lithuanian letters: to
|
||||
use Unicode support from QMK or to switch OS language when
|
||||
necessary. Unicode support has some problems:
|
||||
|
||||
* it is OS specific (you need to change Unicode input mode based
|
||||
on your OS and I sometimes switch between Mac OS X and Ubuntu).
|
||||
This is minor issue but it is still issue.
|
||||
|
||||
* There is bug in Mac OS X and I can't enter `Š` using unicode
|
||||
input method.
|
||||
|
||||
* Unicode Hex Input in Mac OS X is not perfect and there are some
|
||||
minor issue while using it.
|
||||
|
||||
On Linux Unicode support meanwhile works perfectly.
|
||||
|
||||
This leaves us with other option to use OS language switching as
|
||||
you most probably have done before. Still there is space for
|
||||
improvement. E.g. I have added Lithuanian letters to trilayer and
|
||||
trilayer activation toggles OS language (this works because I use
|
||||
only two languages). Check `layer_state_set_user` implementation
|
||||
for details.
|
||||
|
||||
# Rejected ideas
|
||||
|
||||
## Mods as combos
|
||||
|
||||
Sometimes when I press `NAV (layer key) + S + Tab` to get `Command
|
||||
+ Tab` I ended up with `S + Nav + Tab`. This happened because I
|
||||
did that really fast and sometimes clicked S slightly earlier than
|
||||
NAV layer key. Initially I have solved this problem using Combo
|
||||
keys, but that's additional dependency and combo keys are not
|
||||
ideal for Callum layer. You need to release both keys to trigger
|
||||
Combo key release. Therefore I have written custom code that
|
||||
allows pressing S some milliseconds earlier. This is controlled by
|
||||
FLOW_TERM and defaults to 10. I do not recommend setting this to
|
||||
higher than 30.
|
||||
|
||||
This idea was rejected because it looks like 10ms did not made
|
||||
that big difference.
|
||||
|
||||
## Swapper
|
||||
|
||||
Idea of swapper is to have key that registers Mode key (e.g.
|
||||
Command while layer and some key is pressed) to simulate two key
|
||||
combo, e.g. Command + Tab. Overall I found that 3 keys combo that
|
||||
I have currently for swapping windows is equally good as 2 keys
|
||||
swapper. Another problem with swapper is that it is OS specific.
|
||||
Still if you want here is swapper implementation I have used:
|
||||
|
||||
```c
|
||||
bool active;
|
||||
|
||||
void update_swapper(
|
||||
uint16_t trigger,
|
||||
uint16_t keycode,
|
||||
bool pressed
|
||||
) {
|
||||
if (keycode == trigger) {
|
||||
if (pressed) {
|
||||
if (!active) {
|
||||
active = true;
|
||||
register_code(KC_LGUI);
|
||||
}
|
||||
register_code(KC_TAB);
|
||||
} else {
|
||||
unregister_code(KC_TAB);
|
||||
}
|
||||
} else if (active && keycode != KC_LSFT && keycode != KC_LEFT && keycode != KC_RIGHT) {
|
||||
unregister_code(KC_LGUI);
|
||||
active = false;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Combos
|
||||
|
||||
I have seen that some people use two letter horizontal combos for
|
||||
some actions, e.g. XC for Command+C, CV for Command+V, JK for ESC
|
||||
and etc. I found that this kind of kicks me out of the flow when
|
||||
working as it requires different kind of action and I need to
|
||||
pause to make that action.
|
||||
|
||||
## Comma-space
|
||||
|
||||
I have noticed that I put space after comma `,` usually. That
|
||||
means I can use comma + letter for something else with backspace,
|
||||
e.g. for Lithuanian letters. Performance wise that works OK, but
|
||||
practically that does not feel really good. Trilayer with language
|
||||
layer switch works better.
|
||||
|
||||
Still if you are interested here is comma-space implementation:
|
||||
|
||||
```c
|
||||
void swap_layout(void) {
|
||||
uint8_t saved_mods = get_mods();
|
||||
clear_mods();
|
||||
tap_code16(LCTL(KC_SPC));
|
||||
set_mods(saved_mods);
|
||||
}
|
||||
|
||||
void press_with_layout_swap(uint16_t keycode) {
|
||||
tap_code16(KC_BSPC);
|
||||
swap_layout();
|
||||
tap_code16(keycode);
|
||||
swap_layout();
|
||||
}
|
||||
|
||||
bool comma_pressed = false;
|
||||
|
||||
bool update_commaspace(
|
||||
uint16_t keycode,
|
||||
bool pressed
|
||||
) {
|
||||
if (keycode == KC_COMM) {
|
||||
if (!(get_mods() & MOD_MASK_SHIFT)) {
|
||||
comma_pressed = true;
|
||||
}
|
||||
} else if (comma_pressed) {
|
||||
if (keycode != KC_LSFT) {
|
||||
comma_pressed = false;
|
||||
}
|
||||
|
||||
switch(keycode) {
|
||||
case KC_Q:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_1);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_W:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_2);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_E:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_3);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_R:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_4);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_T:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_5);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_Y:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_6);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_U:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_7);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_I:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_8);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_O:
|
||||
if (pressed) {
|
||||
press_with_layout_swap(KC_EQL);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
```
|
||||
|
||||
## Using one shot layers on top layer keys (NAV and SYM)
|
||||
|
||||
While this looked promising and fun it was really easy to get lost
|
||||
in which layer you actually are. You can still use it as `flow`
|
||||
supports this scenario, but I do not recommend it.
|
||||
|
||||
@@ -2,4 +2,4 @@ UNICODE_ENABLE = no
|
||||
UNICODEMAP_ENABLE = yes
|
||||
#CONSOLE_ENABLE = yes
|
||||
|
||||
SRC += oneshot.c
|
||||
SRC += flow.c
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
Copyright 2022 ai03 Design Studio
|
||||
|
||||
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"
|
||||
|
||||
/* Mechanical lock switch support */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* Solenoid support */
|
||||
#define SOLENOID_PIN B7
|
||||
#define SOLENOID_DEFAULT_DWELL 15
|
||||
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"keyboard_name": "Lunar II",
|
||||
"manufacturer": "ai03 Design Studio",
|
||||
"url": "https://ai03.com/projects/lunar-ii",
|
||||
"maintainer": "ai03-2725",
|
||||
"usb": {
|
||||
"vid": "0xA103",
|
||||
"pid": "0x0016",
|
||||
"device_version": "1.0.0",
|
||||
},
|
||||
"diode_direction": "COL2ROW",
|
||||
"matrix_pins": {
|
||||
"rows": [ "D0", "D1", "D2", "F0", "F1" ],
|
||||
"cols": [ "F4", "F5", "F6", "F7", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "D5", "D3"]
|
||||
},
|
||||
"indicators": {
|
||||
"caps_lock": "B3",
|
||||
"on_state": 0
|
||||
},
|
||||
"build": {
|
||||
"debounce_type": "asym_eager_defer_pk"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{ "matrix": [0, 0], "x": 0.0, "y": 0.0 },
|
||||
{ "matrix": [0, 1], "x": 1.0, "y": 0.0 },
|
||||
{ "matrix": [0, 2], "x": 2.0, "y": 0.0 },
|
||||
{ "matrix": [0, 3], "x": 3.0, "y": 0.0 },
|
||||
{ "matrix": [0, 4], "x": 4.0, "y": 0.0 },
|
||||
{ "matrix": [0, 5], "x": 5.0, "y": 0.0 },
|
||||
{ "matrix": [0, 6], "x": 6.0, "y": 0.0 },
|
||||
{ "matrix": [0, 7], "x": 7.0, "y": 0.0 },
|
||||
{ "matrix": [0, 8], "x": 8.0, "y": 0.0 },
|
||||
{ "matrix": [0, 9], "x": 9.0, "y": 0.0 },
|
||||
{ "matrix": [0, 10], "x": 10.0, "y": 0.0 },
|
||||
{ "matrix": [0, 11], "x": 11.0, "y": 0.0 },
|
||||
{ "matrix": [0, 12], "x": 12.0, "y": 0.0 },
|
||||
{ "matrix": [0, 13], "x": 13.0, "y": 0.0 },
|
||||
{ "matrix": [2, 12], "x": 14.0, "y": 0.0 },
|
||||
{ "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 },
|
||||
{ "matrix": [1, 1], "x": 1.5, "y": 1.0 },
|
||||
{ "matrix": [1, 2], "x": 2.5, "y": 1.0 },
|
||||
{ "matrix": [1, 3], "x": 3.5, "y": 1.0 },
|
||||
{ "matrix": [1, 4], "x": 4.5, "y": 1.0 },
|
||||
{ "matrix": [1, 5], "x": 5.5, "y": 1.0 },
|
||||
{ "matrix": [1, 6], "x": 6.5, "y": 1.0 },
|
||||
{ "matrix": [1, 7], "x": 7.5, "y": 1.0 },
|
||||
{ "matrix": [1, 8], "x": 8.5, "y": 1.0 },
|
||||
{ "matrix": [1, 9], "x": 9.5, "y": 1.0 },
|
||||
{ "matrix": [1, 10], "x": 10.5, "y": 1.0 },
|
||||
{ "matrix": [1, 11], "x": 11.5, "y": 1.0 },
|
||||
{ "matrix": [1, 12], "x": 12.5, "y": 1.0 },
|
||||
{ "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1.0 },
|
||||
{ "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 },
|
||||
{ "matrix": [2, 1], "x": 1.75, "y": 2.0 },
|
||||
{ "matrix": [2, 2], "x": 2.75, "y": 2.0 },
|
||||
{ "matrix": [2, 3], "x": 3.75, "y": 2.0 },
|
||||
{ "matrix": [2, 4], "x": 4.75, "y": 2.0 },
|
||||
{ "matrix": [2, 5], "x": 5.75, "y": 2.0 },
|
||||
{ "matrix": [2, 6], "x": 6.75, "y": 2.0 },
|
||||
{ "matrix": [2, 7], "x": 7.75, "y": 2.0 },
|
||||
{ "matrix": [2, 8], "x": 8.75, "y": 2.0 },
|
||||
{ "matrix": [2, 9], "x": 9.75, "y": 2.0 },
|
||||
{ "matrix": [2, 10], "x": 10.75, "y": 2.0 },
|
||||
{ "matrix": [2, 11], "x": 11.75, "y": 2.0 },
|
||||
{ "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2.0 },
|
||||
{ "matrix": [3, 0], "w": 2.25, "x": 0.0, "y": 3.0 },
|
||||
{ "matrix": [3, 2], "x": 2.25, "y": 3.0 },
|
||||
{ "matrix": [3, 3], "x": 3.25, "y": 3.0 },
|
||||
{ "matrix": [3, 4], "x": 4.25, "y": 3.0 },
|
||||
{ "matrix": [3, 5], "x": 5.25, "y": 3.0 },
|
||||
{ "matrix": [3, 6], "x": 6.25, "y": 3.0 },
|
||||
{ "matrix": [3, 7], "x": 7.25, "y": 3.0 },
|
||||
{ "matrix": [3, 8], "x": 8.25, "y": 3.0 },
|
||||
{ "matrix": [3, 9], "x": 9.25, "y": 3.0 },
|
||||
{ "matrix": [3, 10], "x": 10.25, "y": 3.0 },
|
||||
{ "matrix": [3, 11], "x": 11.25, "y": 3.0 },
|
||||
{ "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3.0 },
|
||||
{ "matrix": [4, 0], "w": 1.5, "x": 0.0, "y": 4.0 },
|
||||
{ "matrix": [4, 2], "w": 1.25, "x": 1.5, "y": 4.0 },
|
||||
{ "matrix": [4, 3], "w": 1.5, "x": 2.75, "y": 4.0 },
|
||||
{ "matrix": [4, 7], "w": 6.5, "x": 4.25, "y": 4.0 },
|
||||
{ "matrix": [4, 11], "w": 1.5, "x": 10.75, "y": 4.0 },
|
||||
{ "matrix": [4, 12], "w": 1.25, "x": 12.25, "y": 4.0 },
|
||||
{ "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4.0 }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/* Copyright 2022 ai03 Design Studio
|
||||
*
|
||||
* 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(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
[1] = 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, KC_DEL, KC_DEL,
|
||||
KC_CAPS, _______, _______, KC_PGUP, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______,
|
||||
_______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
|
||||
_______, HPT_TOG, HPT_FBK, HPT_DWLI, HPT_DWLD, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
# The default keymap for lunar_ii
|
||||
Nothing special
|
||||
@@ -0,0 +1,48 @@
|
||||
/* Copyright 2022 ai03 Design Studio
|
||||
*
|
||||
* 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(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
[1] = 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, KC_DEL, KC_DEL,
|
||||
KC_CAPS, _______, _______, KC_PGUP, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______,
|
||||
_______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
|
||||
_______, HPT_TOG, HPT_FBK, HPT_DWLI, HPT_DWLD, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[2] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[3] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
# The via keymap for lunar_ii
|
||||
Enables via support; for use with via configurator
|
||||
@@ -0,0 +1 @@
|
||||
VIA_ENABLE = yes
|
||||
@@ -0,0 +1,15 @@
|
||||
# Lunar II
|
||||
|
||||

|
||||
|
||||
Second generation compact AEK keyboard
|
||||
|
||||
* Keyboard Maintainer: [ai03-2725](https://github.com/ai03-2725)
|
||||
* Hardware Supported: The Lunar II PCB
|
||||
* Hardware Availability: Switchplate Peripherals, TypePlus
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make ai03/lunar_ii: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,21 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
|
||||
HAPTIC_ENABLE = yes # Enable solenoid support
|
||||
HAPTIC_DRIVER += SOLENOID
|
||||
@@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_LW] = LAYOUT( /* [> LOWER <] */
|
||||
KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_F10,
|
||||
KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_F11,
|
||||
KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_F11,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_F12,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EN_DASH, KC_TRNS, KC_TRNS, DIAERESIS, QK_BOOT )
|
||||
};
|
||||
|
||||
@@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
|
||||
LT4_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
|
||||
LT3_ESC, KC_A, KC_S, KC_D, LT(3,KC_F), LT(4,KC_G), KC_H, KC_J, KC_K, KC_L, TD(TD1), TD(TD2) ,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), KC_SFTENT ,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), SC_SENT ,
|
||||
KC_LCTL, KC_APP, _______, KC_LGUI, KC_LALT,SFT_T(KC_SPC), LT2_BSP, LT1_ENT, SFT_T(KC_SPC), KC_LSFT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
),
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(1), KC_BSPC, KC_RCTL, KC_ENT, KC_SPC, MO(2), KC_DEL, KC_EQL, KC_LBRC, KC_RBRC
|
||||
),
|
||||
|
||||
|
||||
@@ -10,7 +10,79 @@
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_65_ansi_blocker": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.5}, {"x":11.5, "y":4, "w":1.5}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
|
||||
"layout": [
|
||||
{"x":0, "y":0},
|
||||
{"x":1, "y":0},
|
||||
{"x":2, "y":0},
|
||||
{"x":3, "y":0},
|
||||
{"x":4, "y":0},
|
||||
{"x":5, "y":0},
|
||||
{"x":6, "y":0},
|
||||
{"x":7, "y":0},
|
||||
{"x":8, "y":0},
|
||||
{"x":9, "y":0},
|
||||
{"x":10, "y":0},
|
||||
{"x":11, "y":0},
|
||||
{"x":12, "y":0},
|
||||
{"x":13, "y":0, "w":2},
|
||||
{"x":15, "y":0},
|
||||
|
||||
{"x":0, "y":1, "w":1.5},
|
||||
{"x":1.5, "y":1},
|
||||
{"x":2.5, "y":1},
|
||||
{"x":3.5, "y":1},
|
||||
{"x":4.5, "y":1},
|
||||
{"x":5.5, "y":1},
|
||||
{"x":6.5, "y":1},
|
||||
{"x":7.5, "y":1},
|
||||
{"x":8.5, "y":1},
|
||||
{"x":9.5, "y":1},
|
||||
{"x":10.5, "y":1},
|
||||
{"x":11.5, "y":1},
|
||||
{"x":12.5, "y":1},
|
||||
{"x":13.5, "y":1, "w":1.5},
|
||||
{"x":15, "y":1},
|
||||
|
||||
{"x":0, "y":2, "w":1.75},
|
||||
{"x":1.75, "y":2},
|
||||
{"x":2.75, "y":2},
|
||||
{"x":3.75, "y":2},
|
||||
{"x":4.75, "y":2},
|
||||
{"x":5.75, "y":2},
|
||||
{"x":6.75, "y":2},
|
||||
{"x":7.75, "y":2},
|
||||
{"x":8.75, "y":2},
|
||||
{"x":9.75, "y":2},
|
||||
{"x":10.75, "y":2},
|
||||
{"x":11.75, "y":2},
|
||||
{"x":12.75, "y":2, "w":2.25},
|
||||
{"x":15, "y":2},
|
||||
|
||||
{"x":0, "y":3, "w":2.25},
|
||||
{"x":2.25, "y":3},
|
||||
{"x":3.25, "y":3},
|
||||
{"x":4.25, "y":3},
|
||||
{"x":5.25, "y":3},
|
||||
{"x":6.25, "y":3},
|
||||
{"x":7.25, "y":3},
|
||||
{"x":8.25, "y":3},
|
||||
{"x":9.25, "y":3},
|
||||
{"x":10.25, "y":3},
|
||||
{"x":11.25, "y":3},
|
||||
{"x":12.25, "y":3, "w":1.75},
|
||||
{"x":14, "y":3},
|
||||
{"x":15, "y":3},
|
||||
|
||||
{"x":0, "y":4, "w":1.25},
|
||||
{"x":1.25, "y":4, "w":1.25},
|
||||
{"x":2.5, "y":4, "w":1.25},
|
||||
{"x":3.75, "y":4, "w":6.25},
|
||||
{"x":10, "y":4, "w":1.25},
|
||||
{"x":11.25, "y":4, "w":1.25},
|
||||
{"x":13, "y":4},
|
||||
{"x":14, "y":4},
|
||||
{"x":15, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,7 +215,7 @@ void shutdown_user(void) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable_noeeprom();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
|
||||
rgblight_setrgb_red();
|
||||
rgblight_setrgb(RGB_RED);
|
||||
#endif // RGBLIGHT_ENABLE
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
rgb_matrix_set_color_all(RGB_RED);
|
||||
|
||||
@@ -60,7 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define AUDIO_PWM_DRIVER PWMD3
|
||||
#define AUDIO_PWM_CHANNEL 4
|
||||
#define AUDIO_PWM_PAL_MODE 2
|
||||
#define AUDIO_STATE_TIMER GPTD4
|
||||
|
||||
/* serial.c configuration for split keyboard */
|
||||
#undef SOFT_SERIAL_PIN
|
||||
|
||||
@@ -21,6 +21,5 @@
|
||||
#define HAL_USE_SPI TRUE
|
||||
#define SPI_USE_WAIT TRUE
|
||||
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
|
||||
#define HAL_USE_GPT TRUE
|
||||
|
||||
#include_next <halconf.h>
|
||||
|
||||
@@ -38,8 +38,5 @@
|
||||
#undef STM32_SERIAL_USE_USART2
|
||||
#define STM32_SERIAL_USE_USART2 TRUE
|
||||
|
||||
#undef STM32_GPT_USE_TIM4
|
||||
#define STM32_GPT_USE_TIM4 TRUE
|
||||
|
||||
#undef STM32_ST_USE_TIMER
|
||||
#define STM32_ST_USE_TIMER 5
|
||||
|
||||
@@ -260,7 +260,7 @@ void shutdown_user(void) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable_noeeprom();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
|
||||
rgblight_setrgb_red();
|
||||
rgblight_setrgb(RGB_RED);
|
||||
#endif // RGBLIGHT_ENABLE
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
rgb_matrix_set_color_all(RGB_RED);
|
||||
|
||||
@@ -139,7 +139,7 @@ void shutdown_user(void) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable_noeeprom();
|
||||
rgblight_mode_noeeprom(1);
|
||||
rgblight_setrgb_red();
|
||||
rgblight_setrgb(RGB_RED);
|
||||
#endif // RGBLIGHT_ENABLE
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
rgb_matrix_set_color_all(RGB_RED);
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
#define AUDIO_PWM_DRIVER PWMD4
|
||||
#define AUDIO_PWM_CHANNEL 2
|
||||
#define AUDIO_PWM_PAL_MODE 2
|
||||
#define AUDIO_STATE_TIMER GPTD3
|
||||
#define AUDIO_INIT_DELAY
|
||||
#define AUDIO_ENABLE_TONE_MULTIPLEXING
|
||||
#define AUDIO_TONE_MULTIPLEXING_RATE_DEFAULT 10
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
#define HAL_USE_PWM TRUE
|
||||
#define HAL_USE_PAL TRUE
|
||||
#define HAL_USE_GPT TRUE
|
||||
#define HAL_USE_SERIAL TRUE
|
||||
// #define HAL_USE_I2C TRUE
|
||||
#define HAL_USE_SPI TRUE
|
||||
|
||||
@@ -36,8 +36,5 @@
|
||||
#undef STM32_SERIAL_USE_USART1
|
||||
#define STM32_SERIAL_USE_USART1 TRUE
|
||||
|
||||
#undef STM32_GPT_USE_TIM3
|
||||
#define STM32_GPT_USE_TIM3 TRUE
|
||||
|
||||
#undef STM32_ST_USE_TIMER
|
||||
#define STM32_ST_USE_TIMER 5
|
||||
|
||||
@@ -162,7 +162,7 @@ void shutdown_user(void) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable_noeeprom();
|
||||
rgblight_mode_noeeprom(1);
|
||||
rgblight_setrgb_red();
|
||||
rgblight_setrgb(RGB_RED);
|
||||
#endif // RGBLIGHT_ENABLE
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
rgb_matrix_set_color_all(RGB_RED);
|
||||
|
||||
@@ -215,7 +215,7 @@ void shutdown_user(void) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable_noeeprom();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
|
||||
rgblight_setrgb_red();
|
||||
rgblight_setrgb(RGB_RED);
|
||||
#endif // RGBLIGHT_ENABLE
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
rgb_matrix_set_color_all(RGB_RED);
|
||||
|
||||
@@ -37,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
|
||||
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
|
||||
// ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯
|
||||
NAV, CAPSWRD, KC_SPC, SYM
|
||||
NAV, CW_TOGG, KC_SPC, SYM
|
||||
// ╰──────────────────╯ ╰──────────────────╯
|
||||
),
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ layer_state_t layer_state_set_keymap (layer_state_t state) {
|
||||
void matrix_init_user(void) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_setrgb_teal();
|
||||
rgblight_setrgb(RGB_TEAL);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -150,16 +150,16 @@ layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
switch (get_highest_layer(state)) {
|
||||
case _RAISE:
|
||||
rgblight_setrgb_chartreuse(); // RAISE:シャルトリューズ
|
||||
rgblight_setrgb(RGB_CHARTREUSE); // RAISE:シャルトリューズ
|
||||
break;
|
||||
case _LOWER:
|
||||
rgblight_setrgb_pink(); // LOWER:ピンク
|
||||
rgblight_setrgb(RGB_PINK); // LOWER:ピンク
|
||||
break;
|
||||
case _ADJUST:
|
||||
rgblight_setrgb_red(); // ADJUST:レッド
|
||||
rgblight_setrgb(RGB_RED); // ADJUST:レッド
|
||||
break;
|
||||
default: // for any other layers, or the default layer
|
||||
rgblight_setrgb_teal(); // 他:ティール
|
||||
rgblight_setrgb(RGB_TEAL); // 他:ティール
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"manufacturer": "Binepad",
|
||||
"keyboard_name": "BNR1",
|
||||
"maintainer": "Binpad",
|
||||
"debounce": 5,
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": false,
|
||||
"encoder": true
|
||||
},
|
||||
"url": "http://binepad.com",
|
||||
"usb": {
|
||||
"vid": "0x4249",
|
||||
"pid": "0x4231",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"community_layouts": ["ortho_1x1"],
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_1x1": {
|
||||
"layout": [
|
||||
{"matrix": [0, 0], "x": 0, "y": 0, "w": 2, "h": 2}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
/* Copyright 2022 Binepad (@binpad) */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum {
|
||||
_L0,
|
||||
_L1
|
||||
} keyboard_layers;
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_L0] = LAYOUT_ortho_1x1(
|
||||
LT(_L1, KC_MUTE)
|
||||
),
|
||||
|
||||
[_L1] = LAYOUT_ortho_1x1(
|
||||
_______
|
||||
)
|
||||
};
|
||||
|
||||
#if defined(ENCODER_MAP_ENABLE)
|
||||
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_L0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_L1] = { ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP) }
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,6 @@
|
||||
# Copyright 2022 Binepad (@binpad)
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
LTO_ENABLE = yes
|
||||
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
@@ -0,0 +1,11 @@
|
||||
/* Copyright 2022 Binepad (@binpad) */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TERM 175
|
||||
|
||||
#ifdef DYNAMIC_KEYMAP_LAYER_COUNT
|
||||
#undef DYNAMIC_KEYMAP_LAYER_COUNT
|
||||
#endif
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 2
|
||||
@@ -0,0 +1,28 @@
|
||||
/* Copyright 2022 Binepad (@binpad) */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum {
|
||||
_L0,
|
||||
_L1
|
||||
} keyboard_layers;
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_L0] = LAYOUT_ortho_1x1(
|
||||
LT(_L1, KC_MUTE)
|
||||
),
|
||||
|
||||
[_L1] = LAYOUT_ortho_1x1(
|
||||
_______
|
||||
)
|
||||
};
|
||||
|
||||
#if defined(ENCODER_MAP_ENABLE)
|
||||
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_L0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_L1] = { ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP) }
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,7 @@
|
||||
# Copyright 2022 Binepad (@binpad)
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
LTO_ENABLE = yes
|
||||
VIA_ENABLE = yes
|
||||
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
# BINEPAD BNR1
|
||||
|
||||
The BNR1 is a multifunction knob, which can be rotated, pressed, and rotated while pressed.
|
||||
|
||||
* Keyboard Maintainer: [Binpad](https://github.com/binepad)
|
||||
* Hardware Supported: **BNR1** & **BNR1 R2** *("V1" ft. ATMega32u4 MCU)*
|
||||
* Hardware Availability: [Binepad.com](https://www.binepad.com/bnr1)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make binepad/bnr1/v1: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).
|
||||
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the knob while plugging in the keyboard's USB cable
|
||||
* **Physical reset button**: Briefly press the button on the underside of the PCB
|
||||
* **Keycode in layout**: Press the key mapped to `QK_BOOT` *(or `RESET`)* if it is available
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
# This file intentionally left blank
|
||||
|
||||
DEFAULT_FOLDER = binepad/bnr1/v1
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"bootloader": "atmel-dfu",
|
||||
"processor": "atmega32u4",
|
||||
"diode_direction": "COL2ROW",
|
||||
"matrix_pins": {
|
||||
"cols": ["B0"],
|
||||
"rows": ["E6"]
|
||||
},
|
||||
"encoder": {
|
||||
"rotary": [
|
||||
{ "pin_a": "D6", "pin_b": "D7" }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
# This file intentionally left blank
|
||||
@@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
|
||||
FN, KC_A, KC_R, KC_S, KC_T, KC_D, KC_HOME, KC_PGUP, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, NUM, KC_ENT, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
),
|
||||
|
||||
@@ -80,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
FN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
||||
SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, NUM, KC_ENT, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||
),
|
||||
|
||||
|
||||
@@ -24,21 +24,56 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#define ___ KC_NO
|
||||
|
||||
#define LAYOUT( \
|
||||
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
||||
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
|
||||
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
|
||||
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
|
||||
KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
|
||||
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
|
||||
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
|
||||
/* 0 */ { ___ , KB0 , KC0 , KD0 , ___ , KF0 , KG0 , ___ , ___ , ___ , KK0 , KL0 , ___ , ___ , KO0 , ___ , KQ0 , KR0 }, \
|
||||
/* 1 */ { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , ___ , ___ , ___ , ___ , KQ1 , ___ }, \
|
||||
/* 2 */ { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , ___ , KN2 , ___ , KP2 , KQ2 , KR2 }, \
|
||||
/* 3 */ { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KN3 , KO3 , ___ , KQ3 , KR3 }, \
|
||||
/* 4 */ { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
|
||||
/* 5 */ { KA5 , ___ , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , ___ , ___ , KO5 , ___ , KQ5 , KR5 }, \
|
||||
/* 6 */ { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , ___ , ___ , KO6 , ___ , KQ6 , KR6 }, \
|
||||
/* 7 */ { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 } \
|
||||
}
|
||||
/*
|
||||
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
|
||||
* │J6 │ │I4 │H4 │H2 │H6 │ │A7 │E6 │D2 │D4 │ │B4 │B7 │B6 │B0 │ │C7 │C5 │A5 │
|
||||
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
|
||||
* │J4 │J7 │I7 │H7 │G7 │G4 │F4 │F7 │E7 │D7 │R7 │R4 │E4 │B2 │ │L4 │O4 │Q4 │ │K1 │L1 │Q1 │Q0 │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤ ┌─────┐
|
||||
* │J2 │J5 │I5 │H5 │G5 │G2 │F2 │F5 │E5 │D5 │R5 │R2 │E2 │B3 │ │K4 │O7 │Q7 │ │K5 │L5 │Q5 │O5 │ │ │
|
||||
* 2.25u ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ │ ┌──┴┐B1 │ ISO Enter
|
||||
* LShift │I2 │J3 │I3 │H3 │G3 │G6 │F6 │F3 │E3 │D3 │R3 │R6 │B1 │ │K2 │L2 │Q2 │ │ │B3 │ │
|
||||
* ┌────────┐ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤ └───┴────┘
|
||||
* │N2 │ │N2 │I6 │J1 │I1 │H1 │G1 │G0 │F0 │F1 │E1 │D1 │R0 │N3 │ │O6 │ │K3 │L3 │Q3 │O3 │
|
||||
* └────────┘ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ │
|
||||
* │A4 │P2 │C6 │K6 │C0 │M3 │D0 │A1 │ │O0 │K0 │L0 │ │L6 │Q6 │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
|
||||
*/
|
||||
|
||||
#define LAYOUT_fullsize_ansi( \
|
||||
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
||||
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
|
||||
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
|
||||
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
|
||||
KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
|
||||
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
|
||||
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
|
||||
/* 0 */ { ___ , KB0 , KC0 , KD0 , ___ , KF0 , KG0 , ___ , ___ , ___ , KK0 , KL0 , ___ , ___ , KO0 , ___ , KQ0 , KR0 }, \
|
||||
/* 1 */ { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , ___ , ___ , ___ , ___ , KQ1 , ___ }, \
|
||||
/* 2 */ { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , ___ , KN2 , ___ , KP2 , KQ2 , KR2 }, \
|
||||
/* 3 */ { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KN3 , KO3 , ___ , KQ3 , KR3 }, \
|
||||
/* 4 */ { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
|
||||
/* 5 */ { KA5 , ___ , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , ___ , ___ , KO5 , ___ , KQ5 , KR5 }, \
|
||||
/* 6 */ { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , ___ , KJ6 , KK6 , KL6 , ___ , ___ , KO6 , ___ , KQ6 , KR6 }, \
|
||||
/* 7 */ { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 } \
|
||||
}
|
||||
|
||||
#define LAYOUT_fullsize_iso( \
|
||||
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
||||
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
|
||||
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
|
||||
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB3, KB1, KK2, KL2, KQ2, \
|
||||
KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
|
||||
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
|
||||
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
|
||||
/* 0 */ { ___ , KB0 , KC0 , KD0 , ___ , KF0 , KG0 , ___ , ___ , ___ , KK0 , KL0 , ___ , ___ , KO0 , ___ , KQ0 , KR0 }, \
|
||||
/* 1 */ { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , ___ , ___ , ___ , ___ , KQ1 , ___ }, \
|
||||
/* 2 */ { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , ___ , KN2 , ___ , KP2 , KQ2 , KR2 }, \
|
||||
/* 3 */ { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KN3 , KO3 , ___ , KQ3 , KR3 }, \
|
||||
/* 4 */ { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
|
||||
/* 5 */ { KA5 , ___ , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , ___ , ___ , KO5 , ___ , KQ5 , KR5 }, \
|
||||
/* 6 */ { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , ___ , ___ , KO6 , ___ , KQ6 , KR6 }, \
|
||||
/* 7 */ { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 } \
|
||||
}
|
||||
|
||||
|
||||
@@ -8,8 +8,12 @@
|
||||
"pid": "0x6050",
|
||||
"device_version": "1.0.4"
|
||||
},
|
||||
"community_layouts": [
|
||||
"fullsize_ansi",
|
||||
"fullsize_iso"
|
||||
],
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"LAYOUT_fullsize_ansi": {
|
||||
"layout": [
|
||||
{"label":"Esc", "x":0, "y":0},
|
||||
{"label":"F1", "x":2, "y":0},
|
||||
@@ -66,7 +70,7 @@
|
||||
{"label":"\\|", "x":13.5, "y":2.25, "w":1.5},
|
||||
{"label":"Delete", "x":15.25, "y":2.25},
|
||||
{"label":"End", "x":16.25, "y":2.25},
|
||||
{"label":"Page DownDN", "x":17.25, "y":2.25},
|
||||
{"label":"Page Down", "x":17.25, "y":2.25},
|
||||
{"label":"7", "x":18.5, "y":2.25},
|
||||
{"label":"8", "x":19.5, "y":2.25},
|
||||
{"label":"9", "x":20.5, "y":2.25},
|
||||
@@ -89,8 +93,7 @@
|
||||
{"label":"5", "x":19.5, "y":3.25},
|
||||
{"label":"6", "x":20.5, "y":3.25},
|
||||
|
||||
{"label":"Shift", "x":0, "y":4.25, "w":1.25},
|
||||
{"label":"\\|", "x":1.25, "y":4.25},
|
||||
{"label":"Shift", "x":0, "y":4.25, "w":2.25},
|
||||
{"label":"Z", "x":2.25, "y":4.25},
|
||||
{"label":"X", "x":3.25, "y":4.25},
|
||||
{"label":"C", "x":4.25, "y":4.25},
|
||||
@@ -122,6 +125,120 @@
|
||||
{"label":"0", "x":18.5, "y":5.25, "w":2},
|
||||
{"label":".", "x":20.5, "y":5.25}
|
||||
]
|
||||
},
|
||||
"LAYOUT_fullsize_iso": {
|
||||
"layout": [
|
||||
{"label":"Esc", "x":0, "y":0},
|
||||
{"label":"F1", "x":2, "y":0},
|
||||
{"label":"F2", "x":3, "y":0},
|
||||
{"label":"F3", "x":4, "y":0},
|
||||
{"label":"F4", "x":5, "y":0},
|
||||
{"label":"F5", "x":6.5, "y":0},
|
||||
{"label":"F6", "x":7.5, "y":0},
|
||||
{"label":"F7", "x":8.5, "y":0},
|
||||
{"label":"F8", "x":9.5, "y":0},
|
||||
{"label":"F9", "x":11, "y":0},
|
||||
{"label":"F10", "x":12, "y":0},
|
||||
{"label":"F11", "x":13, "y":0},
|
||||
{"label":"F12", "x":14, "y":0},
|
||||
{"label":"Print Screen,", "x":15.25, "y":0},
|
||||
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||
{"label":"Pause", "x":17.25, "y":0},
|
||||
|
||||
{"label":"`\u00ac", "x":0, "y":1.25},
|
||||
{"label":"1!", "x":1, "y":1.25},
|
||||
{"label":"2\"", "x":2, "y":1.25},
|
||||
{"label":"3\u00a3", "x":3, "y":1.25},
|
||||
{"label":"4$", "x":4, "y":1.25},
|
||||
{"label":"5%", "x":5, "y":1.25},
|
||||
{"label":"6^", "x":6, "y":1.25},
|
||||
{"label":"7&", "x":7, "y":1.25},
|
||||
{"label":"8*", "x":8, "y":1.25},
|
||||
{"label":"9(", "x":9, "y":1.25},
|
||||
{"label":"0)", "x":10, "y":1.25},
|
||||
{"label":"-_", "x":11, "y":1.25},
|
||||
{"label":"=+", "x":12, "y":1.25},
|
||||
{"label":"Backspace", "x":13, "y":1.25, "w":2},
|
||||
{"label":"Insert", "x":15.25, "y":1.25},
|
||||
{"label":"Home", "x":16.25, "y":1.25},
|
||||
{"label":"Page Up", "x":17.25, "y":1.25},
|
||||
{"label":"Num Lock", "x":18.5, "y":1.25},
|
||||
{"label":"/", "x":19.5, "y":1.25},
|
||||
{"label":"*", "x":20.5, "y":1.25},
|
||||
{"label":"-", "x":21.5, "y":1.25},
|
||||
|
||||
{"label":"Tab", "x":0, "y":2.25, "w":1.5},
|
||||
{"label":"Q", "x":1.5, "y":2.25},
|
||||
{"label":"W", "x":2.5, "y":2.25},
|
||||
{"label":"E", "x":3.5, "y":2.25},
|
||||
{"label":"R", "x":4.5, "y":2.25},
|
||||
{"label":"T", "x":5.5, "y":2.25},
|
||||
{"label":"Y", "x":6.5, "y":2.25},
|
||||
{"label":"U", "x":7.5, "y":2.25},
|
||||
{"label":"I", "x":8.5, "y":2.25},
|
||||
{"label":"O", "x":9.5, "y":2.25},
|
||||
{"label":"P", "x":10.5, "y":2.25},
|
||||
{"label":"[{", "x":11.5, "y":2.25},
|
||||
{"label":"]}", "x":12.5, "y":2.25},
|
||||
{"label":"Delete", "x":15.25, "y":2.25},
|
||||
{"label":"End", "x":16.25, "y":2.25},
|
||||
{"label":"Page Down", "x":17.25, "y":2.25},
|
||||
{"label":"7", "x":18.5, "y":2.25},
|
||||
{"label":"8", "x":19.5, "y":2.25},
|
||||
{"label":"9", "x":20.5, "y":2.25},
|
||||
{"label":"+", "x":21.5, "y":2.25, "h": 2},
|
||||
|
||||
{"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
|
||||
{"label":"A", "x":1.75, "y":3.25},
|
||||
{"label":"S", "x":2.75, "y":3.25},
|
||||
{"label":"D", "x":3.75, "y":3.25},
|
||||
{"label":"F", "x":4.75, "y":3.25},
|
||||
{"label":"G", "x":5.75, "y":3.25},
|
||||
{"label":"H", "x":6.75, "y":3.25},
|
||||
{"label":"J", "x":7.75, "y":3.25},
|
||||
{"label":"K", "x":8.75, "y":3.25},
|
||||
{"label":"L", "x":9.75, "y":3.25},
|
||||
{"label":";:", "x":10.75, "y":3.25},
|
||||
{"label":"'@", "x":11.75, "y":3.25},
|
||||
{"label":"#~", "x":12.75, "y":3.25},
|
||||
{"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2},
|
||||
{"label":"4", "x":18.5, "y":3.25},
|
||||
{"label":"5", "x":19.5, "y":3.25},
|
||||
{"label":"6", "x":20.5, "y":3.25},
|
||||
|
||||
{"label":"Shift", "x":0, "y":4.25, "w":1.25},
|
||||
{"label":"\\|", "x":1.25, "y":4.25},
|
||||
{"label":"Z", "x":2.25, "y":4.25},
|
||||
{"label":"X", "x":3.25, "y":4.25},
|
||||
{"label":"C", "x":4.25, "y":4.25},
|
||||
{"label":"V", "x":5.25, "y":4.25},
|
||||
{"label":"B", "x":6.25, "y":4.25},
|
||||
{"label":"N", "x":7.25, "y":4.25},
|
||||
{"label":"M", "x":8.25, "y":4.25},
|
||||
{"label":",<", "x":9.25, "y":4.25},
|
||||
{"label":".>", "x":10.25, "y":4.25},
|
||||
{"label":"/?", "x":11.25, "y":4.25},
|
||||
{"label":"Shift", "x":12.25, "y":4.25, "w":2.75},
|
||||
{"label":"\u2191", "x":16.25, "y":4.25},
|
||||
{"label":"1", "x":18.5, "y":4.25},
|
||||
{"label":"2", "x":19.5, "y":4.25},
|
||||
{"label":"3", "x":20.5, "y":4.25},
|
||||
{"label":"Enter", "x":21.5, "y":4.25, "h":2},
|
||||
|
||||
{"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
|
||||
{"label":"GUI", "x":1.25, "y":5.25, "w":1.25},
|
||||
{"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
|
||||
{"label":"Space", "x":3.75, "y":5.25, "w":6.25},
|
||||
{"label":"AltGr", "x":10, "y":5.25, "w":1.25},
|
||||
{"label":"GUI", "x":11.25, "y":5.25, "w":1.25},
|
||||
{"label":"Fn", "x":12.5, "y":5.25, "w":1.25},
|
||||
{"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
|
||||
{"label":"\u2190", "x":15.25, "y":5.25},
|
||||
{"label":"\u2193", "x":16.25, "y":5.25},
|
||||
{"label":"\u2192", "x":17.25, "y":5.25},
|
||||
{"label":"0", "x":18.5, "y":5.25, "w":2},
|
||||
{"label":".", "x":20.5, "y":5.25}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,50 +25,47 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │INS│HOM│PgU│ │NUM│ / │ * │ - │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
|
||||
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ │DEL│END│PgD│ │ 7 │ 8 │ 9 │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ↲ │ └───┴───┴───┘ ├───┼───┼───┤ + │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘ ├───┼───┼───┤ + │
|
||||
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │ │ 7 │ 8 │ 9 │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐ ├───┼───┼───┼───┤
|
||||
* │Shif│ # │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ ↲ │
|
||||
* │Ctrl│GUI │Alt │ │ Alt│ GUI│Fn │Ctrl│ │ ← │ ↓ │ → │ │ 0 │ , │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤Ent│
|
||||
* │Ctrl│GUI │Alt │ │ Alt│ GUI│Fn │Ctrl│ │ ← │ ↓ │ → │ │ 0 │ , │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
|
||||
*/
|
||||
|
||||
enum layer_names {
|
||||
KM_QWERTY,
|
||||
KM_MEDIA,
|
||||
KM_GUI_LOCK
|
||||
_QW,
|
||||
_MD
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Layer 0: Standard ISO layer */
|
||||
[KM_QWERTY] = 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_SCRL,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_NUM, KC_PSLS,KC_PAST,KC_PMNS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
|
||||
KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||
KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(KM_MEDIA),KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT),
|
||||
/* Layer 1: Function layer */
|
||||
[KM_MEDIA] = LAYOUT(
|
||||
_______,_______,_______,_______,_______, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_STOP, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, TG(KM_GUI_LOCK),KC_MUTE, KC_VOLD, KC_VOLU,_______,_______, QK_BOOT,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______),
|
||||
[KM_GUI_LOCK] = LAYOUT(
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,KC_NO,_______,_______,_______,KC_NO,_______,_______,_______,_______,_______,_______,_______)
|
||||
|
||||
/* Layer 0: Standard ISO layer */
|
||||
[_QW] = LAYOUT_fullsize_iso(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_P4, KC_P5, KC_P6,
|
||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_MD), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
|
||||
),
|
||||
|
||||
/* Layer 1: Function layer */
|
||||
[_MD] = LAYOUT_fullsize_iso(
|
||||
_______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, GUI_TOG, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, QK_BOOT,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
};
|
||||
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
if (IS_LAYER_ON_STATE(state, KM_GUI_LOCK)) {
|
||||
if (IS_LAYER_ON_STATE(state, _MD)) {
|
||||
fn_led_on();
|
||||
} else {
|
||||
fn_led_off();
|
||||
|
||||
@@ -1 +1,33 @@
|
||||
# Default layout desc TODO
|
||||
# Ghost Squid Default Keymap
|
||||
|
||||
## Base Layer
|
||||
|
||||
```
|
||||
┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───────────┐
|
||||
│ESC│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PRT│SCR│PAU│ │Ghost Squid│
|
||||
└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └───────────┘
|
||||
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
|
||||
│ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │INS│HOM│PgU│ │NUM│ / │ * │ - │
|
||||
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
|
||||
│ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ │DEL│END│PgD│ │ 7 │ 8 │ 9 │ │
|
||||
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘ ├───┼───┼───┤ + │
|
||||
│ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │ │ 7 │ 8 │ 9 │ │
|
||||
├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐ ├───┼───┼───┼───┤
|
||||
│Shif│ # │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │
|
||||
├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤Ent│
|
||||
│Ctrl│GUI │Alt │ │ Alt│ GUI│Fn │Ctrl│ │ ← │ ↓ │ → │ │ 0 │ , │ │
|
||||
└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
|
||||
|
||||
```
|
||||
|
||||
## Function Layer
|
||||
|
||||
* `Fn` + `F5` = Play
|
||||
* `Fn` + `F6` = Stop
|
||||
* `Fn` + `F7` = Previous Track
|
||||
* `Fn` + `F8` = Next Track
|
||||
* `Fn` + `F9` = Toggle GUI key
|
||||
* `Fn` + `F10` = Mute
|
||||
* `Fn` + `F11` = Volume Down
|
||||
* `Fn` + `F12` = Volume Up
|
||||
* `Fn` + `Pause` = Reset to Bootloader
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#define BACKLIGHT_PWM_DRIVER PWMD3
|
||||
#define BACKLIGHT_PWM_CHANNEL 1
|
||||
#define BACKLIGHT_PAL_MODE 1
|
||||
@@ -0,0 +1,27 @@
|
||||
/* Copyright 2020 QMK
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/cannonkeys/an_c/halconf.h -r platforms/chibios/common/configs/halconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define HAL_USE_PWM TRUE
|
||||
|
||||
#include_next <halconf.h>
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"manufacturer": "CannonKeys",
|
||||
"keyboard_name": "Ellipse",
|
||||
"maintainer": "awkannan",
|
||||
"bootloader": "stm32-dfu",
|
||||
"diode_direction": "COL2ROW",
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": true,
|
||||
"backlight": true,
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["B11", "B10", "B2", "A9", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "C13", "C14", "C15"],
|
||||
"rows": ["B1", "B0", "A7", "A5", "A4"]
|
||||
},
|
||||
"backlight": {
|
||||
"breathing": true,
|
||||
"breathing_period": 5,
|
||||
"levels": 15,
|
||||
"pin": "A6"
|
||||
},
|
||||
"indicators": {
|
||||
"caps_lock": "A3",
|
||||
"on_state": 0
|
||||
},
|
||||
"processor": "STM32F072",
|
||||
"url": "https://cannonkeys.com/",
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
"vid": "0xCA04",
|
||||
"pid": "0x0015"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [
|
||||
{ "label": "Esc", "matrix": [0, 0], "x": 0.0, "y": 0.0 },
|
||||
{ "label": "!", "matrix": [0, 1], "x": 1.0, "y": 0.0 },
|
||||
{ "label": "@", "matrix": [0, 2], "x": 2.0, "y": 0.0 },
|
||||
{ "label": "#", "matrix": [0, 3], "x": 3.0, "y": 0.0 },
|
||||
{ "label": "$", "matrix": [0, 4], "x": 4.0, "y": 0.0 },
|
||||
{ "label": "%", "matrix": [0, 5], "x": 5.0, "y": 0.0 },
|
||||
{ "label": "^", "matrix": [0, 6], "x": 6.0, "y": 0.0 },
|
||||
{ "label": "&", "matrix": [0, 7], "x": 7.0, "y": 0.0 },
|
||||
{ "label": "*", "matrix": [0, 8], "x": 8.0, "y": 0.0 },
|
||||
{ "label": "(", "matrix": [0, 9], "x": 9.0, "y": 0.0 },
|
||||
{ "label": ")", "matrix": [0, 10], "x": 10.0, "y": 0.0 },
|
||||
{ "label": "_", "matrix": [0, 11], "x": 11.0, "y": 0.0 },
|
||||
{ "label": "+", "matrix": [0, 12], "x": 12.0, "y": 0.0 },
|
||||
{ "label": "Bksp", "matrix": [0, 13], "x": 13.0, "y": 0.0 },
|
||||
{ "label": "Del", "matrix": [0, 14], "x": 14.0, "y": 0.0 },
|
||||
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 },
|
||||
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1.0 },
|
||||
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1.0 },
|
||||
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1.0 },
|
||||
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1.0 },
|
||||
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1.0 },
|
||||
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1.0 },
|
||||
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1.0 },
|
||||
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1.0 },
|
||||
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1.0 },
|
||||
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1.0 },
|
||||
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1.0 },
|
||||
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1.0 },
|
||||
{ "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1.0 },
|
||||
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 },
|
||||
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2.0 },
|
||||
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2.0 },
|
||||
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2.0 },
|
||||
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2.0 },
|
||||
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2.0 },
|
||||
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2.0 },
|
||||
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2.0 },
|
||||
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2.0 },
|
||||
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2.0 },
|
||||
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2.0 },
|
||||
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2.0 },
|
||||
{ "label": "\\", "matrix": [2, 12], "x": 12.75, "y": 2.0 },
|
||||
{ "label": "Enter", "matrix": [2, 14], "w": 2.25, "x": 12.75, "y": 2.0 },
|
||||
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0.0, "y": 3.0 },
|
||||
{ "label": "|", "matrix": [3, 1], "x": 1.25, "y": 3.0 },
|
||||
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3.0 },
|
||||
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3.0 },
|
||||
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3.0 },
|
||||
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3.0 },
|
||||
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3.0 },
|
||||
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3.0 },
|
||||
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3.0 },
|
||||
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3.0 },
|
||||
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3.0 },
|
||||
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3.0 },
|
||||
{ "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3.0 },
|
||||
{ "label": "Fn", "matrix": [3, 14], "x": 14.0, "y": 3.0 },
|
||||
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0.0, "y": 4.0 },
|
||||
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4.0 },
|
||||
{ "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4.0 },
|
||||
{ "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4.0 },
|
||||
{ "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 10.0, "y": 4.0 },
|
||||
{ "label": "Win", "matrix": [4, 11], "w": 1.25, "x": 11.25, "y": 4.0 },
|
||||
{ "label": "Fn", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4.0 },
|
||||
{ "label": "Menu", "matrix": [4, 14], "w": 1.25, "x": 13.75, "y": 4.0 }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
// Copyright 2022 Andrew Kannan (@awkannan)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN1,
|
||||
_FN2,
|
||||
_FN3
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BASE] = LAYOUT_all(
|
||||
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
|
||||
KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN1),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1), KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_all(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
|
||||
RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
BL_BRTG, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
BL_INC, BL_DEC, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, QK_BOOT
|
||||
),
|
||||
|
||||
[_FN2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_FN3] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1,45 @@
|
||||
// Copyright 2022 Andrew Kannan (@awkannan)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN1,
|
||||
_FN2,
|
||||
_FN3
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BASE] = LAYOUT_all(
|
||||
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
|
||||
KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN1),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1), KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_all(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
|
||||
RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
BL_BRTG, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
BL_INC, BL_DEC, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, QK_BOOT
|
||||
),
|
||||
|
||||
[_FN2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_FN3] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
/* Copyright 2020 QMK
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/cannonkeys/an_c/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include_next <mcuconf.h>
|
||||
|
||||
#undef STM32_PWM_USE_TIM3
|
||||
#define STM32_PWM_USE_TIM3 TRUE
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# Ellipse
|
||||
|
||||
*An ellipse inspired 60% keyboard with 3 mounting styles from Skepur*
|
||||
|
||||
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
|
||||
* Hardware Supported: STM32F072CBT6
|
||||
* Hardware Availability: [CannonKeys](https://cannonkeys.com)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make cannonkeys/ellipse:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make cannonkeys/ellipse:default:flash
|
||||
|
||||
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).
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
|
||||
* **Physical reset button**: Swap the boot switch on the back of the PCB to "1" and hit the reset button
|
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
|
||||
@@ -0,0 +1,2 @@
|
||||
# Wildcard to allow APM32 MCU
|
||||
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"manufacturer": "CannonKeys",
|
||||
"keyboard_name": "Ellipse HS",
|
||||
"maintainer": "awkannan",
|
||||
"bootloader": "stm32-dfu",
|
||||
"diode_direction": "COL2ROW",
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": true
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["B11", "B10", "B2", "A9", "A15", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "C13", "C14", "C15"],
|
||||
"rows": ["B1", "B0", "A7", "A5", "A4"]
|
||||
},
|
||||
"processor": "STM32F072",
|
||||
"url": "https://cannonkeys.com/",
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
"vid": "0xCA04",
|
||||
"pid": "0x0016"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [
|
||||
{ "label": "Esc", "matrix": [0, 0], "x": 0.0, "y": 0.0 },
|
||||
{ "label": "!", "matrix": [0, 1], "x": 1.0, "y": 0.0 },
|
||||
{ "label": "@", "matrix": [0, 2], "x": 2.0, "y": 0.0 },
|
||||
{ "label": "#", "matrix": [0, 3], "x": 3.0, "y": 0.0 },
|
||||
{ "label": "$", "matrix": [0, 4], "x": 4.0, "y": 0.0 },
|
||||
{ "label": "%", "matrix": [0, 5], "x": 5.0, "y": 0.0 },
|
||||
{ "label": "^", "matrix": [0, 6], "x": 6.0, "y": 0.0 },
|
||||
{ "label": "&", "matrix": [0, 7], "x": 7.0, "y": 0.0 },
|
||||
{ "label": "*", "matrix": [0, 8], "x": 8.0, "y": 0.0 },
|
||||
{ "label": "(", "matrix": [0, 9], "x": 9.0, "y": 0.0 },
|
||||
{ "label": ")", "matrix": [0, 10], "x": 10.0, "y": 0.0 },
|
||||
{ "label": "_", "matrix": [0, 11], "x": 11.0, "y": 0.0 },
|
||||
{ "label": "+", "matrix": [0, 12], "x": 12.0, "y": 0.0 },
|
||||
{ "label": "Del", "matrix": [0, 13], "x": 13.0, "y": 0.0 },
|
||||
{ "label": "Bksp", "matrix": [0, 14], "x": 14.0, "y": 0.0 },
|
||||
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 },
|
||||
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1.0 },
|
||||
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1.0 },
|
||||
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1.0 },
|
||||
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1.0 },
|
||||
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1.0 },
|
||||
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1.0 },
|
||||
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1.0 },
|
||||
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1.0 },
|
||||
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1.0 },
|
||||
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1.0 },
|
||||
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1.0 },
|
||||
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1.0 },
|
||||
{ "label": "|", "matrix": [1, 14], "w": 1.5, "x": 13.5, "y": 1.0 },
|
||||
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 },
|
||||
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2.0 },
|
||||
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2.0 },
|
||||
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2.0 },
|
||||
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2.0 },
|
||||
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2.0 },
|
||||
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2.0 },
|
||||
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2.0 },
|
||||
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2.0 },
|
||||
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2.0 },
|
||||
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2.0 },
|
||||
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2.0 },
|
||||
{ "label": "Enter", "matrix": [2, 14], "w": 2.25, "x": 12.75, "y": 2.0 },
|
||||
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0.0, "y": 3.0 },
|
||||
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3.0 },
|
||||
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3.0 },
|
||||
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3.0 },
|
||||
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3.0 },
|
||||
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3.0 },
|
||||
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3.0 },
|
||||
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3.0 },
|
||||
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3.0 },
|
||||
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3.0 },
|
||||
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3.0 },
|
||||
{ "label": "Shift", "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3.0 },
|
||||
{ "label": "Fn", "matrix": [3, 14], "x": 14.0, "y": 3.0 },
|
||||
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0.0, "y": 4.0 },
|
||||
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4.0 },
|
||||
{ "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4.0 },
|
||||
{ "matrix": [4, 6], "w": 7.0, "x": 4.0, "y": 4.0 },
|
||||
{ "label": "Alt", "matrix": [4, 11], "w": 1.5, "x": 11.0, "y": 4.0 },
|
||||
{ "label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4.0 },
|
||||
{ "label": "Menu", "matrix": [4, 14], "w": 1.5, "x": 13.5, "y": 4.0 }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
// Copyright 2022 Andrew Kannan (@awkannan)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN1,
|
||||
_FN2,
|
||||
_FN3
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BASE] = LAYOUT_all(
|
||||
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_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, MO(_FN1),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_all(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
|
||||
RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
BL_BRTG, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
BL_INC, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, QK_BOOT
|
||||
),
|
||||
|
||||
[_FN2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_FN3] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1,45 @@
|
||||
// Copyright 2022 Andrew Kannan (@awkannan)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN1,
|
||||
_FN2,
|
||||
_FN3
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BASE] = LAYOUT_all(
|
||||
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_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, MO(_FN1),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_all(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
|
||||
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, QK_BOOT
|
||||
),
|
||||
|
||||
[_FN2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_FN3] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
VIA_ENABLE = yes
|
||||
@@ -0,0 +1,25 @@
|
||||
# Ellipse Hotswap
|
||||
|
||||
*A ellipse inspired 60% keyboard with 3 mounting styles from Skepur*
|
||||
|
||||
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
|
||||
* Hardware Supported: STM32F072CBT6
|
||||
* Hardware Availability: [CannonKeys](https://cannonkeys.com)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make cannonkeys/ellipse_hs:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make cannonkeys/ellipse_hs:default:flash
|
||||
|
||||
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).
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
|
||||
* **Physical reset button**: Swap the boot switch on the back of the PCB to "1" and hit the reset button
|
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
|
||||
@@ -0,0 +1,2 @@
|
||||
# Wildcard to allow APM32 MCU
|
||||
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
|
||||
@@ -120,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* └───┴┴┴┴┴┴┴┴┴┴┴───┴─────┴────────┴──────────┴─────┴───┴┴┴┴┴┴┴┴┴┴┘
|
||||
*/
|
||||
[_LOWER] = LAYOUT_default( \
|
||||
KC_MNXT, KC_DELT, KC_BRMD, KC_BRMU, MC_MSSN, MC_LHPD, _______, _______, _______, _______, _______, _______, KC_UP, KC_MUTE, MC_SLPD, \
|
||||
KC_MNXT, KC_DEL, KC_BRMD, KC_BRMU, MC_MSSN, MC_LHPD, _______, _______, _______, _______, _______, _______, KC_UP, KC_MUTE, MC_SLPD, \
|
||||
KC_VOLU, HY_CAPS, _______, _______, NXT_WIN, PRV_TAB, MC_BACK, MC_FWRD, NXT_TAB, _______, _______, KC_LEFT, KC_RGHT, KC_MPLY, \
|
||||
KC_VOLD, _______, XXXXXXX, _______, _______, _______, PX_AFLL, OP_AFLL, _______, _______, _______, _______, KC_DOWN, _______, _______, \
|
||||
KC_MPRV, _______, _______, _______, _______, _______, _______ \
|
||||
|
||||
@@ -97,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_NO, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV, KC_TILD, KC_TRNS, KC_TRNS, KC_BSLS, KC_NO,
|
||||
KC_NO, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BTN2, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_QUOT, KC_NO,
|
||||
KC_NO, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_BTN1, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_MINS, KC_NO,
|
||||
CMB_TOG, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_DEL
|
||||
CM_TOGG, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_DEL
|
||||
),
|
||||
|
||||
/* Keymap 2: Pad/Function layer
|
||||
|
||||
@@ -21,7 +21,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_DEL, KC_PSCR,
|
||||
KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
|
||||
KC_F5, KC_F6, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_NO, KC_PGDN,
|
||||
KC_F7, KC_F8, KC_LSPO, KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, LT(2,KC_HOME),
|
||||
KC_F7, KC_F8, SC_LSPO, SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_UP, LT(2,KC_HOME),
|
||||
KC_F9, KC_F10, LCTL_T(KC_MPRV), LGUI_T(KC_MPLY), LALT_T(KC_MNXT), LT(1,KC_SPC), KC_APP, KC_BSPC, KC_RALT, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT_all(
|
||||
|
||||
@@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_LOWER] = LAYOUT_ortho_4x12(
|
||||
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC ,
|
||||
LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC) ,
|
||||
KC_LSPO, KC_NUBS, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,
|
||||
SC_LSPO, KC_NUBS, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,
|
||||
_______, _______, _______, _______, _______, KC_DEL, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||
),
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INS, KC_DEL, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
|
||||
KC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSPC, KC_UP,
|
||||
SC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, SC_RSPC, KC_UP,
|
||||
KC_LCTL, KC_LGUI, MO(_FL), KC_LALT, KC_BSPC,KC_SPC, KC_RALT, KC_APP, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
/* Keymap _FL: Function Layer
|
||||
|
||||
@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_STEP,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, KC_PAUS, _______, _______, _______, _______,
|
||||
_______, _______, MO_CTL, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
|
||||
KC_LSPO, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, TO_MIDI, _______, KC_RSPC, KC_PGUP,
|
||||
SC_LSPO, _______, _______, _______, _______, _______, _______, _______, MEDIA, _______, _______, TO_MIDI, _______, SC_RSPC, KC_PGUP,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, MO_FUNC, KC_HOME, KC_PGDN, KC_END),
|
||||
|
||||
/* Keymap _ME: Media layer */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user