Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0e6734d3f | ||
|
|
406f03bb0c | ||
|
|
405dea01be | ||
|
|
2f6c068e0d | ||
|
|
2a534e87ac | ||
|
|
f3e73965f0 | ||
|
|
b4c03070de | ||
|
|
4d72aa428f | ||
|
|
57540af102 | ||
|
|
2c0c25d014 | ||
|
|
8479dd65d4 | ||
|
|
3cb28bbe42 | ||
|
|
74d7d232e3 | ||
|
|
340c3abc28 | ||
|
|
009d45d4d7 |
No files matched your search
@@ -38,7 +38,7 @@ with open('requirements.txt', 'r') as fd:
|
|||||||
|
|
||||||
# Figure out our version
|
# Figure out our version
|
||||||
command = ['git', 'describe', '--abbrev=6', '--dirty', '--always', '--tags']
|
command = ['git', 'describe', '--abbrev=6', '--dirty', '--always', '--tags']
|
||||||
result = subprocess.run(command, text=True, capture_output=True)
|
result = subprocess.run(command, universal_newlines=True, capture_output=True)
|
||||||
|
|
||||||
if result.returncode == 0:
|
if result.returncode == 0:
|
||||||
os.environ['QMK_VERSION'] = 'QMK ' + result.stdout.strip()
|
os.environ['QMK_VERSION'] = 'QMK ' + result.stdout.strip()
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ This is a C header file that is one of the first things included, and will persi
|
|||||||
* `#define B7_AUDIO`
|
* `#define B7_AUDIO`
|
||||||
* enables audio on pin B7 (duophony is enables if one of B[5-7]\_AUDIO is enabled along with one of C[4-6]\_AUDIO)
|
* enables audio on pin B7 (duophony is enables if one of B[5-7]\_AUDIO is enabled along with one of C[4-6]\_AUDIO)
|
||||||
* `#define BACKLIGHT_PIN B7`
|
* `#define BACKLIGHT_PIN B7`
|
||||||
* pin of the backlight - `B5`, `B6`, `B7` and `C6` (and `D4` on ATmega32A) use hardware PWM, others use software implementation
|
* pin of the backlight
|
||||||
* `#define BACKLIGHT_LEVELS 3`
|
* `#define BACKLIGHT_LEVELS 3`
|
||||||
* number of levels your backlight will have (maximum 15 excluding off)
|
* number of levels your backlight will have (maximum 15 excluding off)
|
||||||
* `#define BACKLIGHT_BREATHING`
|
* `#define BACKLIGHT_BREATHING`
|
||||||
|
|||||||
+20
-21
@@ -30,32 +30,31 @@ You should then be able to use the keycodes below to change the backlight level.
|
|||||||
|
|
||||||
This feature is distinct from both the [RGB underglow](feature_rgblight.md) and [RGB matrix](feature_rgb_matrix.md) features as it usually allows for only a single colour per switch, though you can obviously use multiple different coloured LEDs on a keyboard.
|
This feature is distinct from both the [RGB underglow](feature_rgblight.md) and [RGB matrix](feature_rgb_matrix.md) features as it usually allows for only a single colour per switch, though you can obviously use multiple different coloured LEDs on a keyboard.
|
||||||
|
|
||||||
Hardware PWM is only supported on certain pins of the MCU, so if the backlighting is not connected to one of them, a software PWM implementation triggered by hardware timer interrupts will be used.
|
|
||||||
|
|
||||||
Hardware PWM is supported according to the following table:
|
Hardware PWM is supported according to the following table:
|
||||||
|
|
||||||
| Backlight Pin | Hardware timer |
|
|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|
|
||||||
|---------------|-------------------------|
|
|-------------|-------------|-------------|-------------|---------|
|
||||||
|`B5` | Timer 1 |
|
|`B5` |Timer 1 |Timer 1 | | |
|
||||||
|`B6` | Timer 1 |
|
|`B6` |Timer 1 |Timer 1 | | |
|
||||||
|`B7` | Timer 1 |
|
|`B7` |Timer 1 |Timer 1 |Timer 1 | |
|
||||||
|`C6` | Timer 3 |
|
|`C4` |Timer 3 | | | |
|
||||||
|`D4` | Timer 1 (ATmega32A only)|
|
|`C5` |Timer 3 | |Timer 1 | |
|
||||||
| other | Software PWM |
|
|`C6` |Timer 3 |Timer 3 |Timer 1 | |
|
||||||
|
|`D4` | | | |Timer 1 |
|
||||||
|
|`D5` | | | |Timer 1 |
|
||||||
|
|
||||||
The [audio feature](feature_audio.md) also uses hardware timers. Please refer to the following table to know what hardware timer the software PWM will use depending on the audio configuration:
|
All other pins will use software PWM. If the [Audio](feature_audio.md) feature is disabled or only using one timer, the backlight PWM can be triggered by a hardware timer:
|
||||||
|
|
||||||
| Audio Pin(s) | Audio Timer | Software PWM Timer |
|
|Audio Pin|Audio Timer|Software PWM Timer|
|
||||||
|--------------|-------------|--------------------|
|
|---------|-----------|------------------|
|
||||||
| `C4` | Timer 3 | Timer 1 |
|
|`C4` |Timer 3 |Timer 1 |
|
||||||
| `C5` | Timer 3 | Timer 1 |
|
|`C5` |Timer 3 |Timer 1 |
|
||||||
| `C6` | Timer 3 | Timer 1 |
|
|`C6` |Timer 3 |Timer 1 |
|
||||||
| `B5` | Timer 1 | Timer 3 |
|
|`B5` |Timer 1 |Timer 3 |
|
||||||
| `B6` | Timer 1 | Timer 3 |
|
|`B6` |Timer 1 |Timer 3 |
|
||||||
| `B7` | Timer 1 | Timer 3 |
|
|`B7` |Timer 1 |Timer 3 |
|
||||||
| `Bx` & `Cx` | Timer 1 & 3 | None |
|
|
||||||
|
|
||||||
When all timers are in use for [audio](feature_audio.md), the backlight software PWM will not use a hardware timer, but instead will be triggered during the matrix scan. In this case the backlight doesn't support breathing and might show lighting artifacts (for instance flickering), because the PWM computation might not be called with enough timing precision.
|
When both timers are in use for Audio, the backlight PWM will not use a hardware timer, but will instead be triggered during the matrix scan. In this case, breathing is not supported, and the backlight might flicker, because the PWM computation may not be called with enough timing precision.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
The Combo feature is a chording type solution for adding custom actions. It lets you hit multiple keys at once and produce a different effect. For instance, hitting `A` and `S` within the tapping term would hit `ESC` instead, or have it perform even more complex tasks.
|
The Combo feature is a chording type solution for adding custom actions. It lets you hit multiple keys at once and produce a different effect. For instance, hitting `A` and `S` within the tapping term would hit `ESC` instead, or have it perform even more complex tasks.
|
||||||
|
|
||||||
To enable this feature, yu need to add `COMBO_ENABLE = yes` to your `rules.mk`.
|
To enable this feature, you need to add `COMBO_ENABLE = yes` to your `rules.mk`.
|
||||||
|
|
||||||
Additionally, in your `config.h`, you'll need to specify the number of combos that you'll be using, by adding `#define COMBO_COUNT 1` (replacing 1 with the number that you're using).
|
Additionally, in your `config.h`, you'll need to specify the number of combos that you'll be using, by adding `#define COMBO_COUNT 1` (replacing 1 with the number that you're using).
|
||||||
<!-- At this time, this is necessary -->
|
<!-- At this time, this is necessary -->
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ This allows the keyboard to tell the host OS that up to 248 keys are held down a
|
|||||||
|
|
||||||
`BACKLIGHT_ENABLE`
|
`BACKLIGHT_ENABLE`
|
||||||
|
|
||||||
This enables your backlight on Timer1 and ports B5, B6, or B7 (for now). You can specify your port by putting this in your `config.h`:
|
This enables the in-switch LED backlighting. You can specify the backlight pin by putting this in your `config.h`:
|
||||||
|
|
||||||
#define BACKLIGHT_PIN B7
|
#define BACKLIGHT_PIN B7
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ To configure a keyboard where each switch is connected to a separate pin and gro
|
|||||||
|
|
||||||
### Backlight Configuration
|
### Backlight Configuration
|
||||||
|
|
||||||
By default QMK supports backlighting on pins `B5`, `B6`, and `B7`. If you are using one of those you can simply enable it here. For more details see the [Backlight Documentation](feature_backlight.md).
|
QMK supports backlighting on most GPIO pins. A select few of these can be driven by the MCU in hardware. For more details see the [Backlight Documentation](feature_backlight.md).
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define BACKLIGHT_PIN B7
|
#define BACKLIGHT_PIN B7
|
||||||
@@ -134,8 +134,6 @@ By default QMK supports backlighting on pins `B5`, `B6`, and `B7`. If you are us
|
|||||||
#define BREATHING_PERIOD 6
|
#define BREATHING_PERIOD 6
|
||||||
```
|
```
|
||||||
|
|
||||||
?> You can use backlighting on any pin you like, but you will have to do more work to support that. See the [Backlight Documentation](feature_backlight.md) for more details.
|
|
||||||
|
|
||||||
### Other Configuration Options
|
### Other Configuration Options
|
||||||
|
|
||||||
There are a lot of features that can be configured or tuned in `config.h`. You should see the [Config Options](config_options.md) page for more details.
|
There are a lot of features that can be configured or tuned in `config.h`. You should see the [Config Options](config_options.md) page for more details.
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ For the `DIODE_DIRECTION`, most hand-wiring guides will instruct you to wire the
|
|||||||
|
|
||||||
To configure a keyboard where each switch is connected to a separate pin and ground instead of sharing row and column pins, use `DIRECT_PINS`. The mapping defines the pins of each switch in rows and columns, from left to right. Must conform to the sizes within `MATRIX_ROWS` and `MATRIX_COLS`, use `NO_PIN` to fill in blank spaces. Overrides the behaviour of `DIODE_DIRECTION`, `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`.
|
To configure a keyboard where each switch is connected to a separate pin and ground instead of sharing row and column pins, use `DIRECT_PINS`. The mapping defines the pins of each switch in rows and columns, from left to right. Must conform to the sizes within `MATRIX_ROWS` and `MATRIX_COLS`, use `NO_PIN` to fill in blank spaces. Overrides the behaviour of `DIODE_DIRECTION`, `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`.
|
||||||
|
|
||||||
`BACKLIGHT_PIN` is the pin that your PWM-controlled backlight (if one exists) is hooked-up to. Currently only B5, B6, and B7 are supported.
|
`BACKLIGHT_PIN` is the pin that your PWM-controlled backlight (if one exists) is hooked-up to.
|
||||||
|
|
||||||
`BACKLIGHT_BREATHING` is a fancier backlight feature that adds breathing/pulsing/fading effects to the backlight. It uses the same timer as the normal backlight. These breathing effects must be called by code in your keymap.
|
`BACKLIGHT_BREATHING` is a fancier backlight feature that adds breathing/pulsing/fading effects to the backlight. It uses the same timer as the normal backlight. These breathing effects must be called by code in your keymap.
|
||||||
|
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
# TGR Alice
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
An ergonomic 60% keyboard.
|
|
||||||
|
|
||||||
Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
|
|
||||||
Hardware Supported: TGR Alice
|
|
||||||
Hardware Availability: Group buy finished
|
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
|
||||||
|
|
||||||
make alice:default
|
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
|
||||||
|
|
||||||
|
|
||||||
ps2avrGB keyboard firmware
|
|
||||||
==========================
|
|
||||||
|
|
||||||
This keyboard uses the port of the QMK firmware for boards that are based on the
|
|
||||||
ps2avrGB firmware.
|
|
||||||
|
|
||||||
Note that this is a complete replacement for the firmware, so you won't be
|
|
||||||
using Bootmapper Client to change any keyboard settings, since not all the
|
|
||||||
USB report options are supported.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
First, install the requirements. These commands are for OSX, but all you
|
|
||||||
need is the AVR toolchain and `bootloadHID` for flashing:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ brew cask install crosspack-avr
|
|
||||||
$ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
|
|
||||||
$ pip install pyusb
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, with the keyboard plugged in, simply run this command from the
|
|
||||||
`qmk_firmware` directory:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ make alice
|
|
||||||
$ bootloadHID -r alice_default.hex
|
|
||||||
```
|
|
||||||
|
|
||||||
## Setting the board to bootloader mode
|
|
||||||
|
|
||||||
Hold the ESC key (the one before the 1! key, in case you remaped it).
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
From my experience, it's really hard to brick these boards. But these
|
|
||||||
tricks have been useful when it got stuck in a weird scenario.
|
|
||||||
|
|
||||||
1. Try plugging the board in while holding the bootloader key. This will force
|
|
||||||
it to boot only the bootloader without loading the firmware. Once this is
|
|
||||||
done, just reflash the board with the original firmware.
|
|
||||||
2. Sometimes USB hubs can act weird, so try connecting the board directly
|
|
||||||
to your computer or plugging/unplugging the USB hub.
|
|
||||||
@@ -4,15 +4,13 @@ extern keymap_config_t keymap_config;
|
|||||||
|
|
||||||
#define _QWERTY 0
|
#define _QWERTY 0
|
||||||
#define _DVORAK 1
|
#define _DVORAK 1
|
||||||
#define _GAME 2
|
#define _LEFTY 2
|
||||||
#define _LEFTY 3
|
#define _RIGHTY 3
|
||||||
#define _RIGHTY 4
|
#define _DUAL 4
|
||||||
#define _DUAL 5
|
|
||||||
|
|
||||||
enum jj40_keycodes {
|
enum jj40_keycodes {
|
||||||
QWERTY = SAFE_RANGE,
|
QWERTY = SAFE_RANGE,
|
||||||
DVORAK,
|
DVORAK,
|
||||||
GAME,
|
|
||||||
LEFTY,
|
LEFTY,
|
||||||
RIGHTY,
|
RIGHTY,
|
||||||
DUAL,
|
DUAL,
|
||||||
@@ -28,21 +26,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
|
||||||
CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, SHFTENT, \
|
CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, SHFTENT, \
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, \
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, \
|
||||||
KC_PSCR, KC_BSPC, KC_LALT, _______, LEFTY, KC_LGUI, KC_SPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
KC_PSCR, KC_BSPC, KC_CAPS, KC_LALT, LEFTY, KC_LGUI, KC_SPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
),
|
),
|
||||||
|
|
||||||
[_DVORAK] = LAYOUT_ortho_4x12( \
|
[_DVORAK] = LAYOUT_ortho_4x12( \
|
||||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
|
||||||
CTLESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, SHFTENT, \
|
CTLESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, SHFTENT, \
|
||||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_SLSH, \
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_SLSH, \
|
||||||
KC_PSCR, KC_LGUI, KC_LALT, KC_CAPS, LEFTY, KC_BSPC, KC_SPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
KC_PSCR, KC_BSPC, KC_CAPS, KC_LALT, LEFTY, KC_LGUI, KC_SPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
),
|
|
||||||
|
|
||||||
[_GAME] = LAYOUT_ortho_4x12( \
|
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, _______, _______, _______, _______, _______, QWERTY, \
|
|
||||||
CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, _______, _______, _______, _______, _______, _______, \
|
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, _______, _______, _______, _______, \
|
|
||||||
KC_LCTL, KC_1, KC_2, KC_3, LEFTY, KC_SPC, KC_BSPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \
|
|
||||||
),
|
),
|
||||||
|
|
||||||
[_LEFTY] = LAYOUT_ortho_4x12( \
|
[_LEFTY] = LAYOUT_ortho_4x12( \
|
||||||
@@ -59,11 +50,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, _______, _______ \
|
_______, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
),
|
),
|
||||||
|
|
||||||
[_DUAL] = LAYOUT_ortho_4x12( \
|
[_DUAL] = LAYOUT_ortho_4x12( \
|
||||||
RESET, _______, _______, _______, _______, QWERTY, GAME, _______, _______, _______, BL_BRTG, RESET, \
|
RESET, _______, _______, _______, _______, QWERTY, DVORAK, _______, _______, RGB_HUD, RGB_TOG, RESET, \
|
||||||
_______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, AG_NORM, AG_SWAP, _______, _______, _______, BL_TOGG, _______, \
|
_______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, AG_NORM, AG_SWAP, _______, _______, RGB_HUI, RGB_MOD, _______, \
|
||||||
_______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, TG_NKRO, _______, _______, _______, _______, _______, \
|
_______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, TG_NKRO, _______, _______, RGB_SAD, RGB_VAD, _______, \
|
||||||
_______, _______, _______, _______, _______, _______, DVORAK, _______, _______, _______, _______, _______ \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI, RGB_VAI, _______ \
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -86,12 +77,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case GAME:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
persistent_default_layer_set(1UL<<_GAME);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case LEFTY:
|
case LEFTY:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
layer_on(_LEFTY);
|
layer_on(_LEFTY);
|
||||||
|
|||||||
@@ -6,11 +6,15 @@
|
|||||||
I currently have the following layers in my keymap:
|
I currently have the following layers in my keymap:
|
||||||
* Qwerty (as default)
|
* Qwerty (as default)
|
||||||
* Dvorak (still learning this type of layout, so not really used much)
|
* Dvorak (still learning this type of layout, so not really used much)
|
||||||
* Gaming (WIP! I tried some I found, but didn't like them, so I'm in the progress of making my own)
|
|
||||||
* Lefty (lower)
|
* Lefty (lower)
|
||||||
* Righty (raise)
|
* Righty (raise)
|
||||||
* Dual (adjust)
|
* Dual (adjust)
|
||||||
|
|
||||||
|
### Note to self:
|
||||||
|
YOU NEED TO USE [bootloadHID -r jj40_waples.hex](https://github.com/qmk/qmk_firmware/tree/master/keyboards/jj40)
|
||||||
|
|
||||||
|
## the stuff below is out of date and I think about removing them from this readme
|
||||||
|
|
||||||
#### QWERTY
|
#### QWERTY
|
||||||
| Tab | Q | W | E | R | T | Y | U | I | O | P | Bsp |
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | Bsp |
|
||||||
|C_Esc| A | S | D | F | G | H | J | K | L | ; |S_Ent|
|
|C_Esc| A | S | D | F | G | H | J | K | L | ; |S_Ent|
|
||||||
@@ -24,14 +28,6 @@ I currently have the following layers in my keymap:
|
|||||||
| Sft | ; | Q | J | K | X | B | M | W | V | Z | / |
|
| Sft | ; | Q | J | K | X | B | M | W | V | Z | / |
|
||||||
|P_SCR| GUI | Alt | Cps | ^L^ | Bsp | Spc | ^R^ | Lft | Dwn | Up! | Rgt |
|
|P_SCR| GUI | Alt | Cps | ^L^ | Bsp | Spc | ^R^ | Lft | Dwn | Up! | Rgt |
|
||||||
|
|
||||||
|
|
||||||
#### GAMING
|
|
||||||
| Tab | Q | W | E | R | T | | | | | |QWERT|
|
|
||||||
| Esc | A | S | D | F | G | | | | | | |
|
|
||||||
| Sft | Z | X | C | V | B | | | | | | |
|
|
||||||
| Ctl | 1 | 2 | 3 | ^L^ | Spc | Bsp | ^R^ | Lft | Dwn | Up | Rgt |
|
|
||||||
|
|
||||||
|
|
||||||
#### LEFTY (lower)
|
#### LEFTY (lower)
|
||||||
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bsp |
|
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bsp |
|
||||||
| Del | | | | | | | ( | ) | [ | ] | |
|
| Del | | | | | | | ( | ) | [ | ] | |
|
||||||
@@ -51,5 +47,3 @@ I currently have the following layers in my keymap:
|
|||||||
| | Prv | Stp | Tog | Nxt | Nrm | Swp | | | | | |
|
| | Prv | Stp | Tog | Nxt | Nrm | Swp | | | | | |
|
||||||
| | | Mte | Vol-| Vol+| | NKRO| | | | | |
|
| | | Mte | Vol-| Vol+| | NKRO| | | | | |
|
||||||
| | | | | | |DVORK| | | | | |
|
| | | | | | |DVORK| | | | | |
|
||||||
|
|
||||||
|
|
||||||
@@ -5,7 +5,6 @@ EXTRAKEY_ENABLE = yes
|
|||||||
CONSOLE_ENABLE = no
|
CONSOLE_ENABLE = no
|
||||||
COMMAND_ENABLE = yes
|
COMMAND_ENABLE = yes
|
||||||
BACKLIGHT_ENABLE = yes
|
BACKLIGHT_ENABLE = yes
|
||||||
BACKLIGHT_CUSTOM_DRIVER = yes
|
|
||||||
RGBLIGHT_ENABLE = yes
|
RGBLIGHT_ENABLE = yes
|
||||||
RGBLIGHT_CUSTOM_DRIVER = yes
|
RGBLIGHT_CUSTOM_DRIVER = yes
|
||||||
KEY_LOCK_ENABLE = yes
|
KEY_LOCK_ENABLE = yes
|
||||||
@@ -61,9 +61,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
||||||
ESC , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
|
ESC , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
|
||||||
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
||||||
LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
|
LSFT, Z , X , C , V , B , N , M ,COMM,DOT , UP ,ENT ,
|
||||||
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
||||||
X3 ,LCTL,LALT,LGUI, X2 , SPC, SPC , X1 ,LEFT,DOWN, UP ,RGHT
|
LCTL, X3 ,LGUI,LALT,SPC , X2 , BSPC, X1 ,SLSH,LEFT,DOWN,RGHT
|
||||||
//`----+----+----+----+----+----' `----+----+----+----+----+----'
|
//`----+----+----+----+----+----' `----+----+----+----+----+----'
|
||||||
),
|
),
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
//|----+------+----+----+----+----| |----+----+----+----+----+----|
|
//|----+------+----+----+----+----| |----+----+----+----+----+----|
|
||||||
CAPS,SELECT,LEFT,DOWN,RGHT,DEL , PGDN, END,LBRC,RBRC,MINS,UNDS,
|
CAPS,SELECT,LEFT,DOWN,RGHT,DEL , PGDN, END,LBRC,RBRC,MINS,UNDS,
|
||||||
//|----+------+----+----+----+----| |----+----+----+----+----+----|
|
//|----+------+----+----+----+----| |----+----+----+----+----+----|
|
||||||
LSFT, UNDO ,CUT ,COPY,PASTE, , LEFT,RGHT,LCBR,RCBR,PLUS,PEQL,
|
LSFT, UNDO ,CUT ,COPY,PASTE, , LEFT,RGHT,LCBR,RCBR,PLUS, EQL,
|
||||||
//|----+------+----+----+----+----| |----+----+----+----+----+----|
|
//|----+------+----+----+----+----| |----+----+----+----+----+----|
|
||||||
, , , , ,LALT, , , , , ,
|
, , , , ,LALT, , , , , ,
|
||||||
//`----+------+----+----+----+----' `----+----+----+----+----+----'
|
//`----+------+----+----+----+----' `----+----+----+----+----+----'
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_ALES ,KC_QUOT ,KC_MINS ,KC_EQL ,KC_ENT ,KC_LGUI ,KC_SPC , KC_RGENT,KC_DEL ,SYM_L ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
|
KC_ALES ,KC_QUOT ,KC_MINS ,KC_EQL ,KC_ENT ,KC_LGUI ,KC_SPC , KC_RGENT,KC_DEL ,SYM_L ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
|
||||||
//└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
|
//└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
|
||||||
),
|
),
|
||||||
//KC_EQL
|
|
||||||
[_SYMB] = LAYOUT(
|
[_SYMB] = LAYOUT(
|
||||||
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
||||||
KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,_______ ,
|
KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,_______ ,
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/* Copyright 2019 Kumao Kobo <[email protected]>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _QWERTY 0
|
||||||
|
#define _SYMB 1
|
||||||
|
|
||||||
|
// Shortcut to make keymap more readable
|
||||||
|
#define SYM_L MO(_SYMB)
|
||||||
|
|
||||||
|
#define KC_ALES LALT_T(KC_ESC)
|
||||||
|
|
||||||
|
#define KC_L1SYM LT(_SYMB, KC_LANG1)
|
||||||
|
#define KC_L2SYM LT(_SYMB, KC_LANG2)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_QWERTY] = LAYOUT(
|
||||||
|
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
||||||
|
KC_GRV ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSPC ,
|
||||||
|
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||||
|
KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_L2SYM, KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_AT ,KC_BSLS ,
|
||||||
|
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┘ └────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||||
|
KC_LCTL ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_ENT ,
|
||||||
|
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
|
||||||
|
KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , KC_SLSH ,KC_N ,KC_M ,KC_MINS ,KC_UP ,SYM_L ,
|
||||||
|
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┴────────┼────────┼────────┼────────┤
|
||||||
|
KC_ALES ,KC_LGUI ,KC_LALT ,KC_ENT ,KC_LANG2,KC_SPC ,KC_SPC , KC_COMM ,KC_DOT ,KC_L1SYM,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_COLN
|
||||||
|
//└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
|
||||||
|
),
|
||||||
|
|
||||||
|
[_SYMB] = LAYOUT(
|
||||||
|
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
||||||
|
KC_ESC ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , XXXXXXX ,KC_CIRC ,KC_JYEN ,KC_TILD ,KC_PIPE ,KC_DEL ,
|
||||||
|
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||||
|
_______ ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,_______ , KC_LT ,KC_GT ,KC_LBRC ,KC_RBRC ,KC_LCBR ,KC_RCBR ,XXXXXXX ,
|
||||||
|
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┘ └────────┼────────┼────────┼────────┼────────┼────────┼────────┤
|
||||||
|
_______ ,KC_F11 ,KC_F12 ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,KC_PLUS ,KC_ASTR ,KC_SCLN ,KC_COLN ,_______ ,
|
||||||
|
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
|
||||||
|
_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______ ,KC_VOLU ,_______ ,
|
||||||
|
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┴────────┼────────┼────────┼────────┤
|
||||||
|
_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,KC_MUTE ,KC_VOLD ,_______,_______
|
||||||
|
//└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The JIS keymap for Kudox Keyboard
|
||||||
Whitespace-only changes.
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_ALES ,KC_QUOT ,KC_MINS ,KC_EQL ,KC_ENNUM,KC_LGUI ,KC_SPC , KC_RGENT,KC_DEL ,SYM_L ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
|
KC_ALES ,KC_QUOT ,KC_MINS ,KC_EQL ,KC_ENNUM,KC_LGUI ,KC_SPC , KC_RGENT,KC_DEL ,SYM_L ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
|
||||||
//└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
|
//└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
|
||||||
),
|
),
|
||||||
//KC_EQL
|
|
||||||
[_SYMB] = LAYOUT(
|
[_SYMB] = LAYOUT(
|
||||||
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
|
||||||
KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,_______ ,
|
KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,_______ ,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define RGB_MATRIX_KEYPRESSES
|
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||||
#define RGB_DIGITAL_RAIN_DROPS 18
|
#define RGB_DIGITAL_RAIN_DROPS 18
|
||||||
#define USB_MAX_POWER_CONSUMPTION 100
|
#define USB_MAX_POWER_CONSUMPTION 100
|
||||||
#define ONESHOT_TAP_TOGGLE 2
|
#define ONESHOT_TAP_TOGGLE 2
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ uint32_t layer_state_set_user(uint32_t state) {
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
eeconfig_init();
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
if (!process_record_dynamic_macro(keycode, record)) {
|
if (!process_record_dynamic_macro(keycode, record)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -152,8 +152,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
),
|
),
|
||||||
|
|
||||||
/* Adjust (Lower + Raise)
|
/* Adjust (Lower + Raise)
|
||||||
* ,-----------------------------------------------------------------------------------.
|
* v------------------------RGB CONTROL--------------------v
|
||||||
* | | Reset| | | | | | | | | | Del |
|
* ,-----------------------------------------------------------------------------------
|
||||||
|
* | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define RGB_MATRIX_KEYPRESSES
|
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||||
#define RGB_DIGITAL_RAIN_DROPS 24
|
#define RGB_DIGITAL_RAIN_DROPS 24
|
||||||
#define USB_MAX_POWER_CONSUMPTION 100
|
#define USB_MAX_POWER_CONSUMPTION 100
|
||||||
#define ONESHOT_TAP_TOGGLE 2
|
#define ONESHOT_TAP_TOGGLE 2
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
eeconfig_init();
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
if (!process_record_dynamic_macro(keycode, record)) {
|
if (!process_record_dynamic_macro(keycode, record)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "southpole",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 20.5,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"key_count": 84,
|
||||||
|
"layout": [
|
||||||
|
{"label":"Num Lock", "x":0, "y":0},
|
||||||
|
{"label":"/", "x":1, "y":0},
|
||||||
|
{"label":"*", "x":2, "y":0},
|
||||||
|
{"label":"-", "x":3, "y":0},
|
||||||
|
{"label":"Esc", "x":4.5, "y":0},
|
||||||
|
{"label":"1", "x":5.5, "y":0},
|
||||||
|
{"label":"2", "x":6.5, "y":0},
|
||||||
|
{"label":"3", "x":7.5, "y":0},
|
||||||
|
{"label":"4", "x":8.5, "y":0},
|
||||||
|
{"label":"5", "x":9.5, "y":0},
|
||||||
|
{"label":"6", "x":10.5, "y":0},
|
||||||
|
{"label":"7", "x":11.5, "y":0},
|
||||||
|
{"label":"8", "x":12.5, "y":0},
|
||||||
|
{"label":"9", "x":13.5, "y":0},
|
||||||
|
{"label":"0", "x":14.5, "y":0},
|
||||||
|
{"label":"-", "x":15.5, "y":0},
|
||||||
|
{"label":"=", "x":16.5, "y":0},
|
||||||
|
{"label":"\\", "x":17.5, "y":0},
|
||||||
|
{"label":"Delete", "x":18.5, "y":0},
|
||||||
|
{"label":"Insert", "x":19.5, "y":0},
|
||||||
|
{"label":"7", "x":0, "y":1},
|
||||||
|
{"label":"8", "x":1, "y":1},
|
||||||
|
{"label":"9", "x":2, "y":1},
|
||||||
|
{"label":"+", "x":3, "y":1, "h":2},
|
||||||
|
{"label":"Tab", "x":4.5, "y":1, "w":1.5},
|
||||||
|
{"label":"Q", "x":6, "y":1},
|
||||||
|
{"label":"W", "x":7, "y":1},
|
||||||
|
{"label":"E", "x":8, "y":1},
|
||||||
|
{"label":"R", "x":9, "y":1},
|
||||||
|
{"label":"T", "x":10, "y":1},
|
||||||
|
{"label":"Y", "x":11, "y":1},
|
||||||
|
{"label":"U", "x":12, "y":1},
|
||||||
|
{"label":"I", "x":13, "y":1},
|
||||||
|
{"label":"O", "x":14, "y":1},
|
||||||
|
{"label":"P", "x":15, "y":1},
|
||||||
|
{"label":"[", "x":16, "y":1},
|
||||||
|
{"label":"]", "x":17, "y":1},
|
||||||
|
{"label":"Backspace", "x":18, "y":1, "w":1.5},
|
||||||
|
{"label":"Vol +", "x":19.5, "y":1},
|
||||||
|
{"label":"4", "x":0, "y":2},
|
||||||
|
{"label":"5", "x":1, "y":2},
|
||||||
|
{"label":"6", "x":2, "y":2},
|
||||||
|
{"label":"Enter", "x":3, "y":3, "h":2},
|
||||||
|
{"label":"Caps Lock", "x":4.5, "y":2, "w":1.75},
|
||||||
|
{"label":"A", "x":6.25, "y":2},
|
||||||
|
{"label":"S", "x":7.25, "y":2},
|
||||||
|
{"label":"D", "x":8.25, "y":2},
|
||||||
|
{"label":"F", "x":9.25, "y":2},
|
||||||
|
{"label":"G", "x":10.25, "y":2},
|
||||||
|
{"label":"H", "x":11.25, "y":2},
|
||||||
|
{"label":"J", "x":12.25, "y":2},
|
||||||
|
{"label":"K", "x":13.25, "y":2},
|
||||||
|
{"label":"L", "x":14.25, "y":2},
|
||||||
|
{"label":";", "x":15.25, "y":2},
|
||||||
|
{"label":"'", "x":16.25, "y":2},
|
||||||
|
{"label":"Enter", "x":17.25, "y":2, "w":2.25},
|
||||||
|
{"label":"Vol -", "x":19.5, "y":2},
|
||||||
|
{"label":"1", "x":0, "y":3},
|
||||||
|
{"label":"2", "x":1, "y":3},
|
||||||
|
{"label":"3", "x":2, "y":3},
|
||||||
|
{"label":"Shift", "x":4.5, "y":3, "w":2.25},
|
||||||
|
{"label":"Z", "x":6.75, "y":3},
|
||||||
|
{"label":"X", "x":7.75, "y":3},
|
||||||
|
{"label":"C", "x":8.75, "y":3},
|
||||||
|
{"label":"V", "x":9.75, "y":3},
|
||||||
|
{"label":"B", "x":10.75, "y":3},
|
||||||
|
{"label":"N", "x":11.75, "y":3},
|
||||||
|
{"label":"M", "x":12.75, "y":3},
|
||||||
|
{"label":",", "x":13.75, "y":3},
|
||||||
|
{"label":".", "x":14.75, "y":3},
|
||||||
|
{"label":"/", "x":15.75, "y":3},
|
||||||
|
{"label":"Shift", "x":16.75, "y":3, "w":1.75},
|
||||||
|
{"label":"Up", "x":18.5, "y":3},
|
||||||
|
{"label":"Mute", "x":19.5, "y":3},
|
||||||
|
{"label":"0", "x":0, "y":4, "w":2},
|
||||||
|
{"label":".", "x":2, "y":4},
|
||||||
|
{"label":"Ctrl", "x":4.5, "y":4, "w":1.25},
|
||||||
|
{"label":"GUI", "x":5.75, "y":4, "w":1.25},
|
||||||
|
{"label":"Alt", "x":7, "y":4, "w":1.25},
|
||||||
|
{"label":"Space", "x":8.25, "y":4, "w":7},
|
||||||
|
{"label":"Fn", "x":15.25, "y":4, "w":1.5},
|
||||||
|
{"label":"Left", "x":17.5, "y":4},
|
||||||
|
{"label":"Down", "x":18.5, "y":4},
|
||||||
|
{"label":"Right", "x":19.5, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,48 @@
|
|||||||
|
# Alice
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
An ergonomic 60% keyboard.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
|
||||||
|
Hardware Supported: TGR Alice
|
||||||
|
Hardware Availability: Group buy finished
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make tgr/alice:default
|
||||||
|
|
||||||
|
Flashing
|
||||||
|
|
||||||
|
ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
|
||||||
|
|
||||||
|
**Reset Key:** Hold down the key located at `K00`, commonly programmed as `Esc` while plugging in the keyboard.
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
|
||||||
|
2. Place your keyboard into reset.
|
||||||
|
3. Press the `Find Device` button and ensure that your keyboard is found.
|
||||||
|
4. Press the `Open .hex File` button and locate the `.hex` file you created.
|
||||||
|
5. Press the `Flash Device` button and wait for the process to complete.
|
||||||
|
|
||||||
|
macOS:
|
||||||
|
1. Install homebrew by typing the following:
|
||||||
|
```
|
||||||
|
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||||
|
```
|
||||||
|
2. Install `crosspack-avr`.
|
||||||
|
```
|
||||||
|
brew cask install crosspack-avr
|
||||||
|
```
|
||||||
|
3. Install the following packages:
|
||||||
|
```
|
||||||
|
brew install python3
|
||||||
|
pip3 install pyusb
|
||||||
|
brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Place your keyboard into reset.
|
||||||
|
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
|
||||||
|
|
||||||
|
|
||||||
|
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).
|
||||||
File renamed without changes.
File renamed without changes.
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
ifneq ($(findstring STM32F303, $(MCU)),)
|
ifneq ($(findstring STM32F303, $(MCU)),)
|
||||||
## chip/board settings
|
## chip/board settings
|
||||||
# - the next two should match the directories in
|
# - the next two should match the directories in
|
||||||
@@ -54,7 +53,7 @@ ifneq (,$(filter $(MCU),atmega32u4 at90usb1286))
|
|||||||
# LUFA specific
|
# LUFA specific
|
||||||
#
|
#
|
||||||
# Target architecture (see library "Board Types" documentation).
|
# Target architecture (see library "Board Types" documentation).
|
||||||
ARCH ?= AVR8
|
ARCH = AVR8
|
||||||
|
|
||||||
# Input clock frequency.
|
# Input clock frequency.
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
@@ -68,4 +67,27 @@ ifneq (,$(filter $(MCU),atmega32u4 at90usb1286))
|
|||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
F_USB ?= $(F_CPU)
|
F_USB ?= $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task
|
||||||
|
ifeq (,$(filter $(NO_INTERRUPT_CONTROL_ENDPOINT),yes))
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq (,$(filter $(MCU),atmega32a))
|
||||||
|
PROTOCOL = VUSB
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
F_CPU ?= 12000000
|
||||||
|
|
||||||
|
# unsupported features for now
|
||||||
|
NO_UART ?= yes
|
||||||
|
NO_SUSPEND_POWER_DOWN ?= yes
|
||||||
|
|
||||||
|
# Programming options
|
||||||
|
PROGRAM_CMD ?= ./util/atmega32a_program.py $(TARGET).hex
|
||||||
endif
|
endif
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
void process_midi_basic_noteon(uint8_t note)
|
void process_midi_basic_noteon(uint8_t note)
|
||||||
{
|
{
|
||||||
midi_send_noteon(&midi_device, 0, note, 128);
|
midi_send_noteon(&midi_device, 0, note, 127);
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_midi_basic_noteoff(uint8_t note)
|
void process_midi_basic_noteoff(uint8_t note)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ typedef struct
|
|||||||
bool finished;
|
bool finished;
|
||||||
} qk_tap_dance_state_t;
|
} qk_tap_dance_state_t;
|
||||||
|
|
||||||
#define TD(n) (QK_TAP_DANCE + n)
|
#define TD(n) (QK_TAP_DANCE | ((n) & 0xFF))
|
||||||
|
|
||||||
typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state, void *user_data);
|
typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
|
||||||
|
|||||||
+140
-97
@@ -1034,104 +1034,147 @@ void matrix_scan_quantum() {
|
|||||||
}
|
}
|
||||||
#if defined(BACKLIGHT_ENABLE) && (defined(BACKLIGHT_PIN) || defined(BACKLIGHT_PINS))
|
#if defined(BACKLIGHT_ENABLE) && (defined(BACKLIGHT_PIN) || defined(BACKLIGHT_PINS))
|
||||||
|
|
||||||
// The logic is a bit complex, we support 3 setups:
|
// This logic is a bit complex, we support 3 setups:
|
||||||
// 1. hardware PWM when backlight is wired to a PWM pin
|
//
|
||||||
// depending on this pin, we use a different output compare unit
|
// 1. Hardware PWM when backlight is wired to a PWM pin.
|
||||||
// 2. software PWM with hardware timers, but the used timer depends
|
// Depending on this pin, we use a different output compare unit.
|
||||||
// on the audio setup (audio wins other backlight)
|
// 2. Software PWM with hardware timers, but the used timer
|
||||||
// 3. full software PWM
|
// depends on the Audio setup (Audio wins over Backlight).
|
||||||
|
// 3. Full software PWM, driven by the matrix scan, if both timers are used by Audio.
|
||||||
|
|
||||||
#if BACKLIGHT_PIN == B7
|
#if (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) \
|
||||||
# define HARDWARE_PWM
|
|| defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) \
|
||||||
# define TCCRxA TCCR1A
|
|| defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)) \
|
||||||
# define TCCRxB TCCR1B
|
&& (BACKLIGHT_PIN == B5 || BACKLIGHT_PIN == B6 || BACKLIGHT_PIN == B7)
|
||||||
# define COMxx1 COM1C1
|
#define HARDWARE_PWM
|
||||||
# define OCRxx OCR1C
|
#define ICRx ICR1
|
||||||
# define TIMERx_OVF_vect TIMER1_OVF_vect
|
#define TCCRxA TCCR1A
|
||||||
# define TOIEx TOIE1
|
#define TCCRxB TCCR1B
|
||||||
# define ICRx ICR1
|
#define TIMERx_OVF_vect TIMER1_OVF_vect
|
||||||
# define TIMSKx TIMSK1
|
#define TIMSKx TIMSK1
|
||||||
#elif BACKLIGHT_PIN == B6
|
#define TOIEx TOIE1
|
||||||
# define HARDWARE_PWM
|
|
||||||
# define TCCRxA TCCR1A
|
#if BACKLIGHT_PIN == B5
|
||||||
# define TCCRxB TCCR1B
|
#define COMxx1 COM1A1
|
||||||
# define COMxx1 COM1B1
|
#define OCRxx OCR1A
|
||||||
# define OCRxx OCR1B
|
#elif BACKLIGHT_PIN == B6
|
||||||
# define TIMERx_OVF_vect TIMER1_OVF_vect
|
#define COMxx1 COM1B1
|
||||||
# define TOIEx TOIE1
|
#define OCRxx OCR1B
|
||||||
# define ICRx ICR1
|
#elif BACKLIGHT_PIN == B7
|
||||||
# define TIMSKx TIMSK1
|
#define COMxx1 COM1C1
|
||||||
#elif BACKLIGHT_PIN == B5
|
#define OCRxx OCR1C
|
||||||
# define HARDWARE_PWM
|
#endif
|
||||||
# define TCCRxA TCCR1A
|
#elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) \
|
||||||
# define TCCRxB TCCR1B
|
|| defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) \
|
||||||
# define COMxx1 COM1A1
|
|| defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)) \
|
||||||
# define OCRxx OCR1A
|
&& (BACKLIGHT_PIN == C4 || BACKLIGHT_PIN == C5 || BACKLIGHT_PIN == C6)
|
||||||
# define TIMERx_OVF_vect TIMER1_OVF_vect
|
#define HARDWARE_PWM
|
||||||
# define TOIEx TOIE1
|
#define ICRx ICR3
|
||||||
# define ICRx ICR1
|
#define TCCRxA TCCR3A
|
||||||
# define TIMSKx TIMSK1
|
#define TCCRxB TCCR3B
|
||||||
#elif BACKLIGHT_PIN == C6
|
#define TIMERx_OVF_vect TIMER3_OVF_vect
|
||||||
# define HARDWARE_PWM
|
#define TIMSKx TIMSK3
|
||||||
# define TCCRxA TCCR3A
|
#define TOIEx TOIE3
|
||||||
# define TCCRxB TCCR3B
|
|
||||||
# define COMxx1 COM3A1
|
#if BACKLIGHT_PIN == C4
|
||||||
# define OCRxx OCR3A
|
#if (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
|
||||||
# define TIMERx_OVF_vect TIMER3_OVF_vect
|
#error This MCU has no C4 pin!
|
||||||
# define TOIEx TOIE3
|
#else
|
||||||
# define ICRx ICR3
|
#define COMxx1 COM3C1
|
||||||
# define TIMSKx TIMSK3
|
#define OCRxx OCR3C
|
||||||
#elif defined(__AVR_ATmega32A__) && BACKLIGHT_PIN == D4
|
#endif
|
||||||
# define TCCRxA TCCR1A
|
#elif BACKLIGHT_PIN == C5
|
||||||
# define TCCRxB TCCR1B
|
#if (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
|
||||||
# define COMxx1 COM1B1
|
#error This MCU has no C5 pin!
|
||||||
# define OCRxx OCR1B
|
#else
|
||||||
# define TIMERx_OVF_vect TIMER1_OVF_vect
|
#define COMxx1 COM3B1
|
||||||
# define TOIEx TOIE1
|
#define OCRxx OCR3B
|
||||||
# define ICRx ICR1
|
#endif
|
||||||
# define TIMSKx TIMSK1
|
#elif BACKLIGHT_PIN == C6
|
||||||
|
#define COMxx1 COM3A1
|
||||||
|
#define OCRxx OCR3A
|
||||||
|
#endif
|
||||||
|
#elif (defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__)) \
|
||||||
|
&& (BACKLIGHT_PIN == B7 || BACKLIGHT_PIN == C5 || BACKLIGHT_PIN == C6)
|
||||||
|
#define HARDWARE_PWM
|
||||||
|
#define ICRx ICR1
|
||||||
|
#define TCCRxA TCCR1A
|
||||||
|
#define TCCRxB TCCR1B
|
||||||
|
#define TIMERx_OVF_vect TIMER1_OVF_vect
|
||||||
|
#define TIMSKx TIMSK1
|
||||||
|
#define TOIEx TOIE1
|
||||||
|
|
||||||
|
#if BACKLIGHT_PIN == B7
|
||||||
|
#define COMxx1 COM1C1
|
||||||
|
#define OCRxx OCR1C
|
||||||
|
#elif BACKLIGHT_PIN == C5
|
||||||
|
#define COMxx1 COM1B1
|
||||||
|
#define OCRxx OCR1B
|
||||||
|
#elif BACKLIGHT_PIN == C6
|
||||||
|
#define COMxx1 COM1A1
|
||||||
|
#define OCRxx OCR1A
|
||||||
|
#endif
|
||||||
|
#elif defined(__AVR_ATmega32A__) \
|
||||||
|
&& (BACKLIGHT_PIN == D4 || BACKLIGHT_PIN == D5)
|
||||||
|
#define HARDWARE_PWM
|
||||||
|
#define ICRx ICR1
|
||||||
|
#define TCCRxA TCCR1A
|
||||||
|
#define TCCRxB TCCR1B
|
||||||
|
#define TIMERx_OVF_vect TIMER1_OVF_vect
|
||||||
|
#define TIMSKx TIMSK
|
||||||
|
#define TOIEx TOIE1
|
||||||
|
|
||||||
|
#if BACKLIGHT_PIN == D4
|
||||||
|
#define COMxx1 COM1B1
|
||||||
|
#define OCRxx OCR1B
|
||||||
|
#elif BACKLIGHT_PIN == D5
|
||||||
|
#define COMxx1 COM1A1
|
||||||
|
#define OCRxx OCR1A
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
# if !defined(BACKLIGHT_CUSTOM_DRIVER)
|
#if !defined(BACKLIGHT_CUSTOM_DRIVER)
|
||||||
# if !defined(B5_AUDIO) && !defined(B6_AUDIO) && !defined(B7_AUDIO)
|
#if !defined(B5_AUDIO) && !defined(B6_AUDIO) && !defined(B7_AUDIO)
|
||||||
// timer 1 is not used by audio , backlight can use it
|
// Timer 1 is not in use by Audio feature, Backlight can use it
|
||||||
#pragma message "Using hardware timer 1 with software PWM"
|
#pragma message "Using hardware timer 1 with software PWM"
|
||||||
# define HARDWARE_PWM
|
#define HARDWARE_PWM
|
||||||
# define BACKLIGHT_PWM_TIMER
|
#define BACKLIGHT_PWM_TIMER
|
||||||
# define TCCRxA TCCR1A
|
#define ICRx ICR1
|
||||||
# define TCCRxB TCCR1B
|
#define TCCRxA TCCR1A
|
||||||
# define OCRxx OCR1A
|
#define TCCRxB TCCR1B
|
||||||
# define TIMERx_COMPA_vect TIMER1_COMPA_vect
|
#define TIMERx_COMPA_vect TIMER1_COMPA_vect
|
||||||
# define TIMERx_OVF_vect TIMER1_OVF_vect
|
#define TIMERx_OVF_vect TIMER1_OVF_vect
|
||||||
# define OCIExA OCIE1A
|
#if defined(__AVR_ATmega32A__) // This MCU has only one TIMSK register
|
||||||
# define TOIEx TOIE1
|
#define TIMSKx TIMSK
|
||||||
# define ICRx ICR1
|
#else
|
||||||
# if defined(__AVR_ATmega32A__) // This MCU has only one TIMSK register
|
#define TIMSKx TIMSK1
|
||||||
# define TIMSKx TIMSK
|
#endif
|
||||||
# else
|
#define TOIEx TOIE1
|
||||||
# define TIMSKx TIMSK1
|
|
||||||
# endif
|
#define OCIExA OCIE1A
|
||||||
# elif !defined(C6_AUDIO) && !defined(C5_AUDIO) && !defined(C4_AUDIO)
|
#define OCRxx OCR1A
|
||||||
#pragma message "Using hardware timer 3 with software PWM"
|
#elif !defined(C6_AUDIO) && !defined(C5_AUDIO) && !defined(C4_AUDIO)
|
||||||
// timer 3 is not used by audio, backlight can use it
|
#pragma message "Using hardware timer 3 with software PWM"
|
||||||
# define HARDWARE_PWM
|
// Timer 3 is not in use by Audio feature, Backlight can use it
|
||||||
# define BACKLIGHT_PWM_TIMER
|
#define HARDWARE_PWM
|
||||||
# define TCCRxA TCCR3A
|
#define BACKLIGHT_PWM_TIMER
|
||||||
# define TCCRxB TCCR3B
|
#define ICRx ICR1
|
||||||
# define OCRxx OCR3A
|
#define TCCRxA TCCR3A
|
||||||
# define TIMERx_COMPA_vect TIMER3_COMPA_vect
|
#define TCCRxB TCCR3B
|
||||||
# define TIMERx_OVF_vect TIMER3_OVF_vect
|
#define TIMERx_COMPA_vect TIMER3_COMPA_vect
|
||||||
# define OCIExA OCIE3A
|
#define TIMERx_OVF_vect TIMER3_OVF_vect
|
||||||
# define TOIEx TOIE3
|
#define TIMSKx TIMSK3
|
||||||
# define ICRx ICR1
|
#define TOIEx TOIE3
|
||||||
# define TIMSKx TIMSK3
|
|
||||||
# else
|
#define OCIExA OCIE3A
|
||||||
#pragma message "Audio in use - using pure software PWM"
|
#define OCRxx OCR3A
|
||||||
#define NO_HARDWARE_PWM
|
#else
|
||||||
# endif
|
#pragma message "Audio in use - using pure software PWM"
|
||||||
# else
|
#define NO_HARDWARE_PWM
|
||||||
#pragma message "Custom driver defined - using pure software PWM"
|
#endif
|
||||||
#define NO_HARDWARE_PWM
|
#else
|
||||||
# endif
|
#pragma message "Custom driver defined - using pure software PWM"
|
||||||
|
#define NO_HARDWARE_PWM
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef BACKLIGHT_ON_STATE
|
#ifndef BACKLIGHT_ON_STATE
|
||||||
@@ -1300,7 +1343,7 @@ static uint16_t cie_lightness(uint16_t v) {
|
|||||||
|
|
||||||
// range for val is [0..TIMER_TOP]. PWM pin is high while the timer count is below val.
|
// range for val is [0..TIMER_TOP]. PWM pin is high while the timer count is below val.
|
||||||
static inline void set_pwm(uint16_t val) {
|
static inline void set_pwm(uint16_t val) {
|
||||||
OCRxx = val;
|
OCRxx = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef BACKLIGHT_CUSTOM_DRIVER
|
#ifndef BACKLIGHT_CUSTOM_DRIVER
|
||||||
|
|||||||
@@ -31,9 +31,9 @@
|
|||||||
#define XXXXXXX KC_NO
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
enum quantum_keycodes {
|
enum quantum_keycodes {
|
||||||
// Ranges used in shortucuts - not to be used directly
|
// Ranges used in shortcuts - not to be used directly
|
||||||
QK_TMK = 0x0000,
|
QK_BASIC = 0x0000,
|
||||||
QK_TMK_MAX = 0x00FF,
|
QK_BASIC_MAX = 0x00FF,
|
||||||
QK_MODS = 0x0100,
|
QK_MODS = 0x0100,
|
||||||
QK_LCTL = 0x0100,
|
QK_LCTL = 0x0100,
|
||||||
QK_LSFT = 0x0200,
|
QK_LSFT = 0x0200,
|
||||||
|
|||||||
@@ -1,42 +1,6 @@
|
|||||||
# MCU name
|
# MCU name
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|
||||||
# Processor frequency.
|
|
||||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
|
||||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
|
||||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
|
||||||
# automatically to create a 32-bit value in your source code.
|
|
||||||
#
|
|
||||||
# This will be an integer division of F_USB below, as it is sourced by
|
|
||||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
|
||||||
# software delays.
|
|
||||||
F_CPU = 16000000
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# LUFA specific
|
|
||||||
#
|
|
||||||
# Target architecture (see library "Board Types" documentation).
|
|
||||||
ARCH = AVR8
|
|
||||||
|
|
||||||
# Input clock frequency.
|
|
||||||
# This will define a symbol, F_USB, in all source code files equal to the
|
|
||||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
|
||||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
|
||||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
|
||||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
|
||||||
# at the end, this will be done automatically to create a 32-bit value in your
|
|
||||||
# source code.
|
|
||||||
#
|
|
||||||
# If no clock division is performed on the input clock inside the AVR (via the
|
|
||||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
|
||||||
F_USB = $(F_CPU)
|
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
|
||||||
|
|
||||||
|
|
||||||
# Bootloader selection
|
# Bootloader selection
|
||||||
# Teensy halfkay
|
# Teensy halfkay
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
# MCU name
|
# MCU name
|
||||||
MCU = atmega32a
|
MCU = atmega32a
|
||||||
PROTOCOL = VUSB
|
|
||||||
|
|
||||||
# unsupported features for now
|
|
||||||
NO_UART = yes
|
|
||||||
NO_SUSPEND_POWER_DOWN = yes
|
|
||||||
|
|
||||||
# processor frequency
|
|
||||||
F_CPU = 12000000
|
|
||||||
|
|
||||||
# Bootloader
|
# Bootloader
|
||||||
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||||
@@ -28,6 +20,3 @@ RGBLIGHT_CUSTOM_DRIVER = yes
|
|||||||
OPT_DEFS = -DDEBUG_LEVEL=0
|
OPT_DEFS = -DDEBUG_LEVEL=0
|
||||||
|
|
||||||
SRC += i2c_master.c
|
SRC += i2c_master.c
|
||||||
|
|
||||||
# programming options
|
|
||||||
PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
|
|
||||||
+13
-12
@@ -437,20 +437,19 @@ void process_action(keyrecord_t *record, action_t action)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ACT_LAYER_MODS:
|
||||||
|
if (event.pressed) {
|
||||||
|
layer_on(action.layer_mods.layer);
|
||||||
|
register_mods(action.layer_mods.mods);
|
||||||
|
} else {
|
||||||
|
unregister_mods(action.layer_mods.mods);
|
||||||
|
layer_off(action.layer_mods.layer);
|
||||||
|
}
|
||||||
|
break;
|
||||||
#ifndef NO_ACTION_TAPPING
|
#ifndef NO_ACTION_TAPPING
|
||||||
case ACT_LAYER_TAP:
|
case ACT_LAYER_TAP:
|
||||||
case ACT_LAYER_TAP_EXT:
|
case ACT_LAYER_TAP_EXT:
|
||||||
switch (action.layer_tap.code) {
|
switch (action.layer_tap.code) {
|
||||||
case 0xe0 ... 0xef:
|
|
||||||
/* layer On/Off with modifiers(left only) */
|
|
||||||
if (event.pressed) {
|
|
||||||
layer_on(action.layer_tap.val);
|
|
||||||
register_mods(action.layer_tap.code & 0x0f);
|
|
||||||
} else {
|
|
||||||
layer_off(action.layer_tap.val);
|
|
||||||
unregister_mods(action.layer_tap.code & 0x0f);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case OP_TAP_TOGGLE:
|
case OP_TAP_TOGGLE:
|
||||||
/* tap toggle */
|
/* tap toggle */
|
||||||
if (event.pressed) {
|
if (event.pressed) {
|
||||||
@@ -652,6 +651,7 @@ void process_action(keyrecord_t *record, action_t action)
|
|||||||
// if this event is a layer action, update the leds
|
// if this event is a layer action, update the leds
|
||||||
switch (action.kind.id) {
|
switch (action.kind.id) {
|
||||||
case ACT_LAYER:
|
case ACT_LAYER:
|
||||||
|
case ACT_LAYER_MODS:
|
||||||
#ifndef NO_ACTION_TAPPING
|
#ifndef NO_ACTION_TAPPING
|
||||||
case ACT_LAYER_TAP:
|
case ACT_LAYER_TAP:
|
||||||
case ACT_LAYER_TAP_EXT:
|
case ACT_LAYER_TAP_EXT:
|
||||||
@@ -957,7 +957,7 @@ bool is_tap_action(action_t action)
|
|||||||
case ACT_LAYER_TAP:
|
case ACT_LAYER_TAP:
|
||||||
case ACT_LAYER_TAP_EXT:
|
case ACT_LAYER_TAP_EXT:
|
||||||
switch (action.layer_tap.code) {
|
switch (action.layer_tap.code) {
|
||||||
case 0x00 ... 0xdf:
|
case KC_NO ... KC_RGUI:
|
||||||
case OP_TAP_TOGGLE:
|
case OP_TAP_TOGGLE:
|
||||||
case OP_ONESHOT:
|
case OP_ONESHOT:
|
||||||
return true;
|
return true;
|
||||||
@@ -965,7 +965,7 @@ bool is_tap_action(action_t action)
|
|||||||
return false;
|
return false;
|
||||||
case ACT_SWAP_HANDS:
|
case ACT_SWAP_HANDS:
|
||||||
switch (action.swap.code) {
|
switch (action.swap.code) {
|
||||||
case 0x00 ... 0xdf:
|
case KC_NO ... KC_RGUI:
|
||||||
case OP_SH_TAP_TOGGLE:
|
case OP_SH_TAP_TOGGLE:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1014,6 +1014,7 @@ void debug_action(action_t action)
|
|||||||
case ACT_USAGE: dprint("ACT_USAGE"); break;
|
case ACT_USAGE: dprint("ACT_USAGE"); break;
|
||||||
case ACT_MOUSEKEY: dprint("ACT_MOUSEKEY"); break;
|
case ACT_MOUSEKEY: dprint("ACT_MOUSEKEY"); break;
|
||||||
case ACT_LAYER: dprint("ACT_LAYER"); break;
|
case ACT_LAYER: dprint("ACT_LAYER"); break;
|
||||||
|
case ACT_LAYER_MODS: dprint("ACT_LAYER_MODS"); break;
|
||||||
case ACT_LAYER_TAP: dprint("ACT_LAYER_TAP"); break;
|
case ACT_LAYER_TAP: dprint("ACT_LAYER_TAP"); break;
|
||||||
case ACT_LAYER_TAP_EXT: dprint("ACT_LAYER_TAP_EXT"); break;
|
case ACT_LAYER_TAP_EXT: dprint("ACT_LAYER_TAP_EXT"); break;
|
||||||
case ACT_MACRO: dprint("ACT_MACRO"); break;
|
case ACT_MACRO: dprint("ACT_MACRO"); break;
|
||||||
|
|||||||
@@ -66,7 +66,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
* EBBBB: bits and extra bit
|
* EBBBB: bits and extra bit
|
||||||
* ee: on event(01:press, 10:release, 11:both)
|
* ee: on event(01:press, 10:release, 11:both)
|
||||||
*
|
*
|
||||||
* 1001|xxxx|xxxx xxxx (reserved)
|
* ACT_LAYER_MODS(1001):
|
||||||
|
* 1001|LLLL| mods Layer with modifiers held
|
||||||
*
|
*
|
||||||
* ACT_LAYER_TAP(101x):
|
* ACT_LAYER_TAP(101x):
|
||||||
* 101E|LLLL| keycode On/Off with tap key (0x00-DF)[TAP]
|
* 101E|LLLL| keycode On/Off with tap key (0x00-DF)[TAP]
|
||||||
@@ -110,6 +111,7 @@ enum action_kind_id {
|
|||||||
ACT_SWAP_HANDS = 0b0110,
|
ACT_SWAP_HANDS = 0b0110,
|
||||||
/* Layer Actions */
|
/* Layer Actions */
|
||||||
ACT_LAYER = 0b1000,
|
ACT_LAYER = 0b1000,
|
||||||
|
ACT_LAYER_MODS = 0b1001,
|
||||||
ACT_LAYER_TAP = 0b1010, /* Layer 0-15 */
|
ACT_LAYER_TAP = 0b1010, /* Layer 0-15 */
|
||||||
ACT_LAYER_TAP_EXT = 0b1011, /* Layer 16-31 */
|
ACT_LAYER_TAP_EXT = 0b1011, /* Layer 16-31 */
|
||||||
/* Extensions */
|
/* Extensions */
|
||||||
@@ -153,6 +155,12 @@ typedef union {
|
|||||||
uint8_t op :2;
|
uint8_t op :2;
|
||||||
uint8_t kind :4;
|
uint8_t kind :4;
|
||||||
} layer_bitop;
|
} layer_bitop;
|
||||||
|
struct action_layer_mods
|
||||||
|
{
|
||||||
|
uint8_t mods :8;
|
||||||
|
uint8_t layer :4;
|
||||||
|
uint8_t kind :4;
|
||||||
|
} layer_mods;
|
||||||
struct action_layer_tap {
|
struct action_layer_tap {
|
||||||
uint8_t code :8;
|
uint8_t code :8;
|
||||||
uint8_t val :5;
|
uint8_t val :5;
|
||||||
@@ -261,8 +269,8 @@ enum layer_param_tap_op {
|
|||||||
OP_SET_CLEAR,
|
OP_SET_CLEAR,
|
||||||
OP_ONESHOT,
|
OP_ONESHOT,
|
||||||
};
|
};
|
||||||
#define ACTION_LAYER_BITOP(op, part, bits, on) (ACT_LAYER<<12 | (op)<<10 | (on)<<8 | (part)<<5 | ((bits)&0x1f))
|
#define ACTION_LAYER_BITOP(op, part, bits, on) ACTION(ACT_LAYER, (op)<<10 | (on)<<8 | (part)<<5 | ((bits)&0x1f))
|
||||||
#define ACTION_LAYER_TAP(layer, key) (ACT_LAYER_TAP<<12 | (layer)<<8 | (key))
|
#define ACTION_LAYER_TAP(layer, key) ACTION(ACT_LAYER_TAP, (layer)<<8 | (key))
|
||||||
/* Default Layer */
|
/* Default Layer */
|
||||||
#define ACTION_DEFAULT_LAYER_SET(layer) ACTION_DEFAULT_LAYER_BIT_SET((layer)/4, 1<<((layer)%4))
|
#define ACTION_DEFAULT_LAYER_SET(layer) ACTION_DEFAULT_LAYER_BIT_SET((layer)/4, 1<<((layer)%4))
|
||||||
/* Layer Operation */
|
/* Layer Operation */
|
||||||
@@ -277,7 +285,7 @@ enum layer_param_tap_op {
|
|||||||
#define ACTION_LAYER_OFF_ON(layer) ACTION_LAYER_TAP((layer), OP_OFF_ON)
|
#define ACTION_LAYER_OFF_ON(layer) ACTION_LAYER_TAP((layer), OP_OFF_ON)
|
||||||
#define ACTION_LAYER_SET_CLEAR(layer) ACTION_LAYER_TAP((layer), OP_SET_CLEAR)
|
#define ACTION_LAYER_SET_CLEAR(layer) ACTION_LAYER_TAP((layer), OP_SET_CLEAR)
|
||||||
#define ACTION_LAYER_ONESHOT(layer) ACTION_LAYER_TAP((layer), OP_ONESHOT)
|
#define ACTION_LAYER_ONESHOT(layer) ACTION_LAYER_TAP((layer), OP_ONESHOT)
|
||||||
#define ACTION_LAYER_MODS(layer, mods) ACTION_LAYER_TAP((layer), 0xe0 | ((mods)&0x0f))
|
#define ACTION_LAYER_MODS(layer, mods) ACTION(ACT_LAYER_MODS, (layer) << 8 | (mods))
|
||||||
/* With Tapping */
|
/* With Tapping */
|
||||||
#define ACTION_LAYER_TAP_KEY(layer, key) ACTION_LAYER_TAP((layer), (key))
|
#define ACTION_LAYER_TAP_KEY(layer, key) ACTION_LAYER_TAP((layer), (key))
|
||||||
#define ACTION_LAYER_TAP_TOGGLE(layer) ACTION_LAYER_TAP((layer), OP_TAP_TOGGLE)
|
#define ACTION_LAYER_TAP_TOGGLE(layer) ACTION_LAYER_TAP((layer), OP_TAP_TOGGLE)
|
||||||
|
|||||||
Reference in new issue
Block a user