forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c9cbff4
commit b2d4969
Showing
32 changed files
with
2,638 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
# Planck Firmware Guide | ||
|
||
## Setting up the environment | ||
|
||
### Windows | ||
1. Install [MHV AVR Tools][mhv] for AVR GCC compiler and [Cygwin][cygwin](or [MinGW][mingw]) for shell terminal. | ||
2. Install [DFU-Programmer][dfu-prog] (the -win one). | ||
3. Start DFU bootloader on the chip first time you will see 'Found New Hardware Wizard' to install driver. If you install device driver properly you can find chip name like 'ATmega32U4' under 'LibUSB-Win32 Devices' tree on 'Device Manager'. If not you will need to update its driver on 'Device Manager' to the `dfu-programmer` driver. | ||
|
||
### Mac | ||
1. Install [CrossPack](https://www.obdev.at/downloads/crosspack/CrossPack-AVR-20131216.dmg). | ||
2. Install [DFU-Programmer][dfu-prog]. | ||
|
||
### Linux | ||
1. Install AVR GCC with your favorite package manager. | ||
2. Install [DFU-Programmer][dfu-prog]. | ||
|
||
## Using the built-in functions | ||
|
||
Here is a list of some of the functions avaiable from the command line: | ||
|
||
* `make clean`: clean the environment - may be required in-between builds | ||
* `make`: compile the code | ||
* `make COMMON=true`: compile with the common (non-extended) keymap | ||
* `make KEYMAP=<keymap>`: compile with the extended keymap file `extended_keymaps_extended_keymap_<keymap>.c` | ||
* `make COMMON=true KEYMAP=<keymap>`: compile with the common keymap file `common_keymaps/keymap_<keymap>.c` | ||
* `make dfu`: build and flash the layout to the PCB | ||
* `make dfu-force`: build and force-flash the layout to the PCB (may be require for first flash) | ||
|
||
Generally, the instructions to flash the PCB are as follows: | ||
|
||
1. Make changes to the appropriate keymap file | ||
2. Save the file | ||
3. `make clean` | ||
4. Press the reset button on the PCB/press the key with the `RESET` keycode | ||
5. `make <arguments> dfu` - use the necessary `KEYMAP=<keymap>` and/or `COMMON=true` arguments here. | ||
|
||
## Extended keymap | ||
|
||
### Keymap | ||
|
||
Unlike the common keymap, prefixing the keycodes with `KC_` is required. A full list of the keycodes is available [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keycode.txt). For the keycodes available only in the extended keymap, see this [header file](https://github.com/jackhumbert/tmk_keyboard/blob/master/keyboard/planck/extended_keymap_common.h). | ||
|
||
You can use modifiers with keycodes like this: | ||
|
||
LCTL(KC_C) | ||
|
||
Which will generate Ctrl+c. These are daisy-chainable, meaning you can do things like: | ||
|
||
LCTL(LALT(KC_C)) | ||
|
||
That will generate Ctrl+Alt+c. The entire list of these functions is here: | ||
|
||
* `LCTL()`: Left control | ||
* `LSFT()` / `S()`: Left shift | ||
* `LALT()`: Left alt/opt | ||
* `LGUI()`: Left win/cmd | ||
* `RCTL()`: Right control | ||
* `RSFT()`: Right shift | ||
* `RALT()`: Right alt/opt | ||
* `RGUI()`: Right win/cmd | ||
|
||
`S(KC_1)`-like entries are useful in writing keymaps for the Planck. | ||
|
||
### Other keycodes | ||
|
||
A number of other keycodes have been added that you may find useful: | ||
|
||
* `CM_<key>`: the Colemak equivalent of a key (in place of `KC_<key>`), when using Colemak in software (`CM_O` generates `KC_SCLN`) | ||
* `RESET`: jump to bootloader for flashing (same as press the reset button) | ||
* `BL_STEP`: step through the backlight brightnesses | ||
* `BL_<0-15>`: set backlight brightness to 0-15 | ||
* `BL_DEC`: lower the backlight brightness | ||
* `BL_INC`: raise the backlight brightness | ||
* `BL_TOGG`: toggle the backlight on/off | ||
|
||
### Function layers | ||
|
||
The extended keymap extends the number of function layers from 32 to the near-infinite value of 256. Rather than using `FN<num>` notation (still avaiable, but limited to `FN0`-`FN31`), you can use the `FUNC(<num>)` notation. `F(<num>)` is a shortcut for this. | ||
|
||
The function actions are unchanged, and you can see the full list of them [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/common/action_code.h). They are explained in detail [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keymap.md#2-action). | ||
|
||
### Macros | ||
|
||
Macros have been setup in the `extended_keymaps/extended_keymaps_default.c` file so that you can use `M(<num>)` to access a macro in the `action_get_macro` section on your keymap. The switch/case structure you see here is required, and is setup for `M(0)` - you'll need to copy and paste the code to look like this (e.g. to support `M(3)`): | ||
|
||
switch(id) { | ||
case 0: | ||
return MACRODOWN(TYPE(KC_A), END); | ||
break; | ||
case 1: | ||
return MACRODOWN(TYPE(KC_B), END); | ||
break; | ||
case 2: | ||
return MACRODOWN(TYPE(KC_C), END); | ||
break; | ||
case 3: | ||
return MACRODOWN(TYPE(KC_D), END); | ||
break; | ||
} | ||
return MACRO_NONE; | ||
|
||
`MACRODOWN()` is a shortcut for `(record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)` which tells the macro to execute when the key is pressed. Without this, the macro will be executed on both the down and up stroke. | ||
|
||
[cygwin]: https://www.cygwin.com/ | ||
[mingw]: http://www.mingw.org/ | ||
[mhv]: https://infernoembedded.com/products/avr-tools | ||
[winavr]: http://winavr.sourceforge.net/ | ||
[crosspack]: http://www.obdev.at/products/crosspack/index.html | ||
[dfu-prog]: http://dfu-programmer.sourceforge.net/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
Planck keyboard firmware | ||
====================== | ||
DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). | ||
|
||
## Extended Keymap | ||
If you include extended_keymap_common.h instead of keymap_common.h at the top of your file, you'll have access to a bunch of goodies: | ||
|
||
- Use `LSFT()`, `LCTL()`, et. al. (listed in extended_keymap_common.h) as modifiers for keys (daisy-chain-able) | ||
- Use `FUNC(1)` instead of `FN1` (etc.) to access the function layers beyond the 32 function layer limit | ||
- Use `CM_F` instead of `KC_F` to get the ColeMak equivilent for shortcuts (maps backwards) | ||
- Use `MACRODOWN()` instead of `MACRO()` to easily make a keydown macro (`CM_*` works here too) | ||
|
||
### Some notes on usage: | ||
|
||
- The `KEYMAP()` macro is unable to be used due to the bitwise modifications that take place - refer to extended_keymap_jack.c to see how to set things up with the `KC_` prefix | ||
- Keep an eye on the Makefile - this needs to include the correct files to work | ||
- Don't forget to use `const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {` instead of the 8bit equivilent | ||
|
||
## Build | ||
|
||
Follow [this guide](http://deskthority.net/workshop-f7/how-to-build-your-very-own-keyboard-firmware-t7177.html) to setup your development environment before anything else. Abbreviated instructions are provide at the [bottom of this document](https://github.com/rswiernik/tmk_keyboard/tree/rswiernik_dev/keyboard/planck#environment-setup) | ||
|
||
Download the whole firmware [here](https://github.com/jackhumbert/tmk_keyboard/archive/master.zip) and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex that you can load with the Teensy app onto your Planck (once you've hit reset/shorted GND & RST). | ||
|
||
Depending on which keymap you would like to use, you will have to compile slightly differently. | ||
|
||
####Default | ||
To build with the default keymap, simply move to the tmk\_keyboard/keyboard/planck/ and run `make` as follows: | ||
``` | ||
$ make | ||
``` | ||
|
||
## Keymap | ||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files. | ||
|
||
####**Extended Keymaps** | ||
|
||
To build the firmware binary hex file with an extended keymap just do `make` with `KEYMAP` option like: | ||
``` | ||
$ make KEYMAP=[common|jack|<name>] | ||
``` | ||
_The only applicable keymaps will work with this option._ Extended keymaps follow the format **__extended\_keymap\_\<name\>.c__** | ||
|
||
####**Common Keymaps** | ||
|
||
Building with a common keymap is as simple as adding the COMMON option. Note that only | ||
``` | ||
$ make KEYMAP=[common|jack|<name>] COMMON=true | ||
``` | ||
_The only applicable keymaps will work with this option._ Common keymaps follow the format **__keymap\_\<name\>.c__** | ||
|
||
## Notable TMK forks (which some of the keymap files are from) | ||
- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) | ||
- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c) | ||
- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck) | ||
- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
define reset | ||
SIGNAL SIGHUP | ||
end | ||
file planck_lufa.elf | ||
target remote localhost:4242 | ||
break main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Simple analog to digitial conversion | ||
|
||
#include <avr/io.h> | ||
#include <avr/pgmspace.h> | ||
#include <stdint.h> | ||
#include "analog.h" | ||
|
||
|
||
static uint8_t aref = (1<<REFS0); // default to AREF = Vcc | ||
|
||
|
||
void analogReference(uint8_t mode) | ||
{ | ||
aref = mode & 0xC0; | ||
} | ||
|
||
|
||
// Arduino compatible pin input | ||
int16_t analogRead(uint8_t pin) | ||
{ | ||
#if defined(__AVR_ATmega32U4__) | ||
static const uint8_t PROGMEM pin_to_mux[] = { | ||
0x00, 0x01, 0x04, 0x05, 0x06, 0x07, | ||
0x25, 0x24, 0x23, 0x22, 0x21, 0x20}; | ||
if (pin >= 12) return 0; | ||
return adc_read(pgm_read_byte(pin_to_mux + pin)); | ||
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) | ||
if (pin >= 8) return 0; | ||
return adc_read(pin); | ||
#else | ||
return 0; | ||
#endif | ||
} | ||
|
||
// Mux input | ||
int16_t adc_read(uint8_t mux) | ||
{ | ||
#if defined(__AVR_AT90USB162__) | ||
return 0; | ||
#else | ||
uint8_t low; | ||
|
||
ADCSRA = (1<<ADEN) | ADC_PRESCALER; // enable ADC | ||
ADCSRB = (1<<ADHSM) | (mux & 0x20); // high speed mode | ||
ADMUX = aref | (mux & 0x1F); // configure mux input | ||
ADCSRA = (1<<ADEN) | ADC_PRESCALER | (1<<ADSC); // start the conversion | ||
while (ADCSRA & (1<<ADSC)) ; // wait for result | ||
low = ADCL; // must read LSB first | ||
return (ADCH << 8) | low; // must read MSB only once! | ||
#endif | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#ifndef _analog_h_included__ | ||
#define _analog_h_included__ | ||
|
||
#include <stdint.h> | ||
|
||
void analogReference(uint8_t mode); | ||
int16_t analogRead(uint8_t pin); | ||
int16_t adc_read(uint8_t mux); | ||
|
||
#define ADC_REF_POWER (1<<REFS0) | ||
#define ADC_REF_INTERNAL ((1<<REFS1) | (1<<REFS0)) | ||
#define ADC_REF_EXTERNAL (0) | ||
|
||
// These prescaler values are for high speed mode, ADHSM = 1 | ||
#if F_CPU == 16000000L | ||
#define ADC_PRESCALER ((1<<ADPS2) | (1<<ADPS1)) | ||
#elif F_CPU == 8000000L | ||
#define ADC_PRESCALER ((1<<ADPS2) | (1<<ADPS0)) | ||
#elif F_CPU == 4000000L | ||
#define ADC_PRESCALER ((1<<ADPS2)) | ||
#elif F_CPU == 2000000L | ||
#define ADC_PRESCALER ((1<<ADPS1) | (1<<ADPS0)) | ||
#elif F_CPU == 1000000L | ||
#define ADC_PRESCALER ((1<<ADPS1)) | ||
#else | ||
#define ADC_PRESCALER ((1<<ADPS0)) | ||
#endif | ||
|
||
// some avr-libc versions do not properly define ADHSM | ||
#if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) | ||
#if !defined(ADHSM) | ||
#define ADHSM (7) | ||
#endif | ||
#endif | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
#include "keymap_common.h" | ||
|
||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
[0] = KEYMAP( | ||
ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC, | ||
LCTL, A, S, D, F, G, H, J, K, L, SCLN, ENT, | ||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, | ||
TAB, LGUI, RSFT, LALT, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT), | ||
[1] = KEYMAP( /* RAISE */ | ||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL, | ||
TRNS, F1, F2, F3, F4, F5, F6, 4, 5, 6, QUOT, TRNS, | ||
TRNS, F7, F8, F9, F10, F11, F12, 1, 2, 3, TRNS, PGUP, | ||
MPRV, MNXT, TRNS, MUTE, TRNS, TRNS, FN1, 0, 0, TRNS, PGDN), | ||
[2] = KEYMAP( /* LOWER */ | ||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MINS, | ||
TRNS, TRNS, TRNS, PAUSE, TRNS, TRNS, TRNS, TRNS, LBRC, RBRC, BSLS, EQL, | ||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, | ||
MPLY, MSTP, VOLU, VOLD, FN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), | ||
}; | ||
const uint16_t PROGMEM fn_actions[] = { | ||
[1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay | ||
[2] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay | ||
|
||
[10] = ACTION_MODS_KEY(MOD_LSFT, KC_1), | ||
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_2), | ||
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_3), | ||
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_4), | ||
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_5), | ||
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_6), | ||
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_7), | ||
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_8), | ||
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_9), | ||
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_0), | ||
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), | ||
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), | ||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), | ||
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), | ||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), | ||
[28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), | ||
|
||
[29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE), | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#include "keymap_common.h" | ||
|
||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
[0] = KEYMAP( | ||
ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC, | ||
FN1, A, S, D, F, G, H, J, K, L, SCLN, ENT, | ||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, LBRC, | ||
LCTL, BSLS, QUOT, LALT, FN22, SPC, LEFT, UP, DOWN, RGHT, RBRC), | ||
[1] = KEYMAP( | ||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL, | ||
TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, TRNS, TRNS, TRNS, | ||
TRNS, FN18, FN19, FN22, EQL, MINS, FN20, TRNS, TRNS, TRNS, TRNS, TRNS, | ||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, TRNS, VOLD, VOLU, TRNS), | ||
}; | ||
const uint16_t PROGMEM fn_actions[] = { | ||
[1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay | ||
|
||
[10] = ACTION_MODS_KEY(MOD_LSFT, KC_1), | ||
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_2), | ||
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_3), | ||
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_4), | ||
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_5), | ||
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_6), | ||
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_7), | ||
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_8), | ||
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_9), | ||
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_0), | ||
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), | ||
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), | ||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), | ||
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), | ||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), | ||
[28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
#include "keymap_common.h" | ||
|
||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
[0] = KEYMAP( /* Jack */ | ||
TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC, | ||
ESC, A, S, D, F, G, H, J, K, L, SCLN, QUOT, | ||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT, | ||
RSFT, LCTL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT), | ||
[1] = KEYMAP( /* Jack colemak */ | ||
TAB, Q, W, F, P, G, J, L, U, Y, SCLN, BSPC, | ||
ESC, A, R, S, T, D, H, N, E, I, O, QUOT, | ||
LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, ENT, | ||
FN3, LCTL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT), | ||
[2] = KEYMAP( /* Jack RAISE */ | ||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, | ||
TRNS, FN3, FN4, PAUSE, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS, | ||
TRNS, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, TRNS, | ||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, MNXT, VOLD, VOLU, MPLY), | ||
[3] = KEYMAP( /* Jack LOWER */ | ||
FN22, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC, | ||
TRNS, FN3, FN4, PAUSE, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28, | ||
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS, | ||
TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, MNXT, VOLD, VOLU, MPLY), | ||
}; | ||
const uint16_t PROGMEM fn_actions[] = { | ||
[1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay | ||
[2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay | ||
|
||
[3] = ACTION_DEFAULT_LAYER_SET(0), | ||
[4] = ACTION_DEFAULT_LAYER_SET(1), | ||
|
||
[10] = ACTION_MODS_KEY(MOD_LSFT, KC_1), | ||
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_2), | ||
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_3), | ||
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_4), | ||
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_5), | ||
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_6), | ||
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_7), | ||
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_8), | ||
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_9), | ||
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_0), | ||
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), | ||
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), | ||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), | ||
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), | ||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), | ||
[28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), | ||
|
||
[29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE), | ||
}; |
Oops, something went wrong.