aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboard/atomic/PCB_GUIDE.md110
-rw-r--r--keyboard/atomic/README.md56
-rw-r--r--keyboard/atomic/__avr_gdbinit6
-rw-r--r--keyboard/atomic/analog.c53
-rw-r--r--keyboard/atomic/analog.h36
-rw-r--r--keyboard/atomic/common_keymaps/keymap_brett.c42
-rw-r--r--keyboard/atomic/common_keymaps/keymap_dotcom.c34
-rw-r--r--keyboard/atomic/common_keymaps/keymap_jack.c50
-rw-r--r--keyboard/atomic/common_keymaps/keymap_joe.c83
-rw-r--r--keyboard/atomic/common_keymaps/keymap_matthew.c70
-rw-r--r--keyboard/atomic/common_keymaps/keymap_nathan.c153
-rw-r--r--keyboard/atomic/common_keymaps/keymap_peasant.c51
-rw-r--r--keyboard/atomic/common_keymaps/keymap_reed.c74
-rw-r--r--keyboard/atomic/common_keymaps/keymap_sean.c57
-rw-r--r--keyboard/atomic/common_keymaps/keymap_shane.c98
-rw-r--r--keyboard/atomic/common_keymaps/keymap_simon.c44
-rw-r--r--keyboard/atomic/common_keymaps/keymap_tim.c44
-rw-r--r--keyboard/atomic/common_keymaps/keymap_wilba.c56
-rw-r--r--keyboard/atomic/extended_keymap_common.c208
-rw-r--r--keyboard/atomic/extended_keymap_common.h177
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_austin.c50
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_charlie.c54
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_daniel.c48
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_default.c79
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_dzobert.c49
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_jack.c188
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_joe.c90
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_kyle.c49
-rw-r--r--keyboard/atomic/extended_keymaps/extended_keymap_numpad.c26
-rwxr-xr-xkeyboard/atomic/flash-pcb.sh3
-rw-r--r--keyboard/atomic/matrix_center.c269
-rw-r--r--keyboard/atomic/matrix_pcb.c231
32 files changed, 2638 insertions, 0 deletions
diff --git a/keyboard/atomic/PCB_GUIDE.md b/keyboard/atomic/PCB_GUIDE.md
new file mode 100644
index 000000000..833e144b3
--- /dev/null
+++ b/keyboard/atomic/PCB_GUIDE.md
@@ -0,0 +1,110 @@
1# Planck Firmware Guide
2
3## Setting up the environment
4
5### Windows
61. Install [MHV AVR Tools][mhv] for AVR GCC compiler and [Cygwin][cygwin](or [MinGW][mingw]) for shell terminal.
72. Install [DFU-Programmer][dfu-prog] (the -win one).
83. 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.
9
10### Mac
111. Install [CrossPack](https://www.obdev.at/downloads/crosspack/CrossPack-AVR-20131216.dmg).
122. Install [DFU-Programmer][dfu-prog].
13
14### Linux
151. Install AVR GCC with your favorite package manager.
162. Install [DFU-Programmer][dfu-prog].
17
18## Using the built-in functions
19
20Here is a list of some of the functions avaiable from the command line:
21
22* `make clean`: clean the environment - may be required in-between builds
23* `make`: compile the code
24* `make COMMON=true`: compile with the common (non-extended) keymap
25* `make KEYMAP=<keymap>`: compile with the extended keymap file `extended_keymaps_extended_keymap_<keymap>.c`
26* `make COMMON=true KEYMAP=<keymap>`: compile with the common keymap file `common_keymaps/keymap_<keymap>.c`
27* `make dfu`: build and flash the layout to the PCB
28* `make dfu-force`: build and force-flash the layout to the PCB (may be require for first flash)
29
30Generally, the instructions to flash the PCB are as follows:
31
321. Make changes to the appropriate keymap file
332. Save the file
343. `make clean`
354. Press the reset button on the PCB/press the key with the `RESET` keycode
365. `make <arguments> dfu` - use the necessary `KEYMAP=<keymap>` and/or `COMMON=true` arguments here.
37
38## Extended keymap
39
40### Keymap
41
42Unlike 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).
43
44You can use modifiers with keycodes like this:
45
46 LCTL(KC_C)
47
48Which will generate Ctrl+c. These are daisy-chainable, meaning you can do things like:
49
50 LCTL(LALT(KC_C))
51
52That will generate Ctrl+Alt+c. The entire list of these functions is here:
53
54* `LCTL()`: Left control
55* `LSFT()` / `S()`: Left shift
56* `LALT()`: Left alt/opt
57* `LGUI()`: Left win/cmd
58* `RCTL()`: Right control
59* `RSFT()`: Right shift
60* `RALT()`: Right alt/opt
61* `RGUI()`: Right win/cmd
62
63`S(KC_1)`-like entries are useful in writing keymaps for the Planck.
64
65### Other keycodes
66
67A number of other keycodes have been added that you may find useful:
68
69* `CM_<key>`: the Colemak equivalent of a key (in place of `KC_<key>`), when using Colemak in software (`CM_O` generates `KC_SCLN`)
70* `RESET`: jump to bootloader for flashing (same as press the reset button)
71* `BL_STEP`: step through the backlight brightnesses
72* `BL_<0-15>`: set backlight brightness to 0-15
73* `BL_DEC`: lower the backlight brightness
74* `BL_INC`: raise the backlight brightness
75* `BL_TOGG`: toggle the backlight on/off
76
77### Function layers
78
79The 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.
80
81The 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).
82
83### Macros
84
85Macros 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)`):
86
87 switch(id) {
88 case 0:
89 return MACRODOWN(TYPE(KC_A), END);
90 break;
91 case 1:
92 return MACRODOWN(TYPE(KC_B), END);
93 break;
94 case 2:
95 return MACRODOWN(TYPE(KC_C), END);
96 break;
97 case 3:
98 return MACRODOWN(TYPE(KC_D), END);
99 break;
100 }
101 return MACRO_NONE;
102
103`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.
104
105[cygwin]: https://www.cygwin.com/
106[mingw]: http://www.mingw.org/
107[mhv]: https://infernoembedded.com/products/avr-tools
108[winavr]: http://winavr.sourceforge.net/
109[crosspack]: http://www.obdev.at/products/crosspack/index.html
110[dfu-prog]: http://dfu-programmer.sourceforge.net/
diff --git a/keyboard/atomic/README.md b/keyboard/atomic/README.md
new file mode 100644
index 000000000..ee824d26e
--- /dev/null
+++ b/keyboard/atomic/README.md
@@ -0,0 +1,56 @@
1Planck keyboard firmware
2======================
3DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
4
5## Extended Keymap
6If 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:
7
8- Use `LSFT()`, `LCTL()`, et. al. (listed in extended_keymap_common.h) as modifiers for keys (daisy-chain-able)
9- Use `FUNC(1)` instead of `FN1` (etc.) to access the function layers beyond the 32 function layer limit
10- Use `CM_F` instead of `KC_F` to get the ColeMak equivilent for shortcuts (maps backwards)
11- Use `MACRODOWN()` instead of `MACRO()` to easily make a keydown macro (`CM_*` works here too)
12
13### Some notes on usage:
14
15- 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
16- Keep an eye on the Makefile - this needs to include the correct files to work
17- Don't forget to use `const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {` instead of the 8bit equivilent
18
19## Build
20
21Follow [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)
22
23Download 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).
24
25Depending on which keymap you would like to use, you will have to compile slightly differently.
26
27####Default
28To build with the default keymap, simply move to the tmk\_keyboard/keyboard/planck/ and run `make` as follows:
29```
30$ make
31```
32
33## Keymap
34Several 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.
35
36####**Extended Keymaps**
37
38To build the firmware binary hex file with an extended keymap just do `make` with `KEYMAP` option like:
39```
40$ make KEYMAP=[common|jack|<name>]
41```
42_The only applicable keymaps will work with this option._ Extended keymaps follow the format **__extended\_keymap\_\<name\>.c__**
43
44####**Common Keymaps**
45
46Building with a common keymap is as simple as adding the COMMON option. Note that only
47```
48$ make KEYMAP=[common|jack|<name>] COMMON=true
49```
50_The only applicable keymaps will work with this option._ Common keymaps follow the format **__keymap\_\<name\>.c__**
51
52## Notable TMK forks (which some of the keymap files are from)
53- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
54- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c)
55- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck)
56- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid)
diff --git a/keyboard/atomic/__avr_gdbinit b/keyboard/atomic/__avr_gdbinit
new file mode 100644
index 000000000..afc51e6d1
--- /dev/null
+++ b/keyboard/atomic/__avr_gdbinit
@@ -0,0 +1,6 @@
1define reset
2SIGNAL SIGHUP
3end
4file planck_lufa.elf
5target remote localhost:4242
6break main
diff --git a/keyboard/atomic/analog.c b/keyboard/atomic/analog.c
new file mode 100644
index 000000000..49b84ee0e
--- /dev/null
+++ b/keyboard/atomic/analog.c
@@ -0,0 +1,53 @@
1// Simple analog to digitial conversion
2
3#include <avr/io.h>
4#include <avr/pgmspace.h>
5#include <stdint.h>
6#include "analog.h"
7
8
9static uint8_t aref = (1<<REFS0); // default to AREF = Vcc
10
11
12void analogReference(uint8_t mode)
13{
14 aref = mode & 0xC0;
15}
16
17
18// Arduino compatible pin input
19int16_t analogRead(uint8_t pin)
20{
21#if defined(__AVR_ATmega32U4__)
22 static const uint8_t PROGMEM pin_to_mux[] = {
23 0x00, 0x01, 0x04, 0x05, 0x06, 0x07,
24 0x25, 0x24, 0x23, 0x22, 0x21, 0x20};
25 if (pin >= 12) return 0;
26 return adc_read(pgm_read_byte(pin_to_mux + pin));
27#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
28 if (pin >= 8) return 0;
29 return adc_read(pin);
30#else
31 return 0;
32#endif
33}
34
35// Mux input
36int16_t adc_read(uint8_t mux)
37{
38#if defined(__AVR_AT90USB162__)
39 return 0;
40#else
41 uint8_t low;
42
43 ADCSRA = (1<<ADEN) | ADC_PRESCALER; // enable ADC
44 ADCSRB = (1<<ADHSM) | (mux & 0x20); // high speed mode
45 ADMUX = aref | (mux & 0x1F); // configure mux input
46 ADCSRA = (1<<ADEN) | ADC_PRESCALER | (1<<ADSC); // start the conversion
47 while (ADCSRA & (1<<ADSC)) ; // wait for result
48 low = ADCL; // must read LSB first
49 return (ADCH << 8) | low; // must read MSB only once!
50#endif
51}
52
53
diff --git a/keyboard/atomic/analog.h b/keyboard/atomic/analog.h
new file mode 100644
index 000000000..9b95a93be
--- /dev/null
+++ b/keyboard/atomic/analog.h
@@ -0,0 +1,36 @@
1#ifndef _analog_h_included__
2#define _analog_h_included__
3
4#include <stdint.h>
5
6void analogReference(uint8_t mode);
7int16_t analogRead(uint8_t pin);
8int16_t adc_read(uint8_t mux);
9
10#define ADC_REF_POWER (1<<REFS0)
11#define ADC_REF_INTERNAL ((1<<REFS1) | (1<<REFS0))
12#define ADC_REF_EXTERNAL (0)
13
14// These prescaler values are for high speed mode, ADHSM = 1
15#if F_CPU == 16000000L
16#define ADC_PRESCALER ((1<<ADPS2) | (1<<ADPS1))
17#elif F_CPU == 8000000L
18#define ADC_PRESCALER ((1<<ADPS2) | (1<<ADPS0))
19#elif F_CPU == 4000000L
20#define ADC_PRESCALER ((1<<ADPS2))
21#elif F_CPU == 2000000L
22#define ADC_PRESCALER ((1<<ADPS1) | (1<<ADPS0))
23#elif F_CPU == 1000000L
24#define ADC_PRESCALER ((1<<ADPS1))
25#else
26#define ADC_PRESCALER ((1<<ADPS0))
27#endif
28
29// some avr-libc versions do not properly define ADHSM
30#if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
31#if !defined(ADHSM)
32#define ADHSM (7)
33#endif
34#endif
35
36#endif
diff --git a/keyboard/atomic/common_keymaps/keymap_brett.c b/keyboard/atomic/common_keymaps/keymap_brett.c
new file mode 100644
index 000000000..97d832b47
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_brett.c
@@ -0,0 +1,42 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = KEYMAP(
5 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
6 LCTL, A, S, D, F, G, H, J, K, L, SCLN, ENT,
7 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,
8 TAB, LGUI, RSFT, LALT, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
9[1] = KEYMAP( /* RAISE */
10 GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
11 TRNS, F1, F2, F3, F4, F5, F6, 4, 5, 6, QUOT, TRNS,
12 TRNS, F7, F8, F9, F10, F11, F12, 1, 2, 3, TRNS, PGUP,
13 MPRV, MNXT, TRNS, MUTE, TRNS, TRNS, FN1, 0, 0, TRNS, PGDN),
14[2] = KEYMAP( /* LOWER */
15 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MINS,
16 TRNS, TRNS, TRNS, PAUSE, TRNS, TRNS, TRNS, TRNS, LBRC, RBRC, BSLS, EQL,
17 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
18 MPLY, MSTP, VOLU, VOLD, FN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
19};
20const uint16_t PROGMEM fn_actions[] = {
21 [1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
22 [2] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
23
24 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
25 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
26 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
27 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
28 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
29 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
30 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
31 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
32 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
33 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
34 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
35 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
36 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
37 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
38 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
39 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
40
41 [29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
42};
diff --git a/keyboard/atomic/common_keymaps/keymap_dotcom.c b/keyboard/atomic/common_keymaps/keymap_dotcom.c
new file mode 100644
index 000000000..347f6dea9
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_dotcom.c
@@ -0,0 +1,34 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = KEYMAP(
5 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
6 FN1, A, S, D, F, G, H, J, K, L, SCLN, ENT,
7 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, LBRC,
8 LCTL, BSLS, QUOT, LALT, FN22, SPC, LEFT, UP, DOWN, RGHT, RBRC),
9[1] = KEYMAP(
10 GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
11 TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, TRNS, TRNS, TRNS,
12 TRNS, FN18, FN19, FN22, EQL, MINS, FN20, TRNS, TRNS, TRNS, TRNS, TRNS,
13 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, TRNS, VOLD, VOLU, TRNS),
14};
15const uint16_t PROGMEM fn_actions[] = {
16 [1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
17
18 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
19 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
20 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
21 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
22 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
23 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
24 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
25 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
26 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
27 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
28 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
29 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
30 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
31 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
32 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
33 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
34};
diff --git a/keyboard/atomic/common_keymaps/keymap_jack.c b/keyboard/atomic/common_keymaps/keymap_jack.c
new file mode 100644
index 000000000..c74812121
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_jack.c
@@ -0,0 +1,50 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = KEYMAP( /* Jack */
5 TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
6 ESC, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
7 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
8 RSFT, LCTL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
9[1] = KEYMAP( /* Jack colemak */
10 TAB, Q, W, F, P, G, J, L, U, Y, SCLN, BSPC,
11 ESC, A, R, S, T, D, H, N, E, I, O, QUOT,
12 LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, ENT,
13 FN3, LCTL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
14[2] = KEYMAP( /* Jack RAISE */
15 GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,
16 TRNS, FN3, FN4, PAUSE, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS,
17 TRNS, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, TRNS,
18 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, MNXT, VOLD, VOLU, MPLY),
19[3] = KEYMAP( /* Jack LOWER */
20 FN22, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
21 TRNS, FN3, FN4, PAUSE, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
22 TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS,
23 TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, MNXT, VOLD, VOLU, MPLY),
24};
25const uint16_t PROGMEM fn_actions[] = {
26 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
27 [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
28
29 [3] = ACTION_DEFAULT_LAYER_SET(0),
30 [4] = ACTION_DEFAULT_LAYER_SET(1),
31
32 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
33 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
34 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
35 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
36 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
37 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
38 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
39 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
40 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
41 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
42 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
43 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
44 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
45 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
46 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
47 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
48
49 [29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
50};
diff --git a/keyboard/atomic/common_keymaps/keymap_joe.c b/keyboard/atomic/common_keymaps/keymap_joe.c
new file mode 100644
index 000000000..598b0c455
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_joe.c
@@ -0,0 +1,83 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = KEYMAP( /* Joe qwerty */
5 ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,
6 BSPC, A, S, D, F, G, H, J, K, L, SCLN, ENTER,
7 FN7, Z, X, C, V, B, N, M, COMM, DOT, SLSH, QUOT,
8 LCTL, LGUI, LALT, LSFT, FN1, SPC, FN0, LEFT, UP, DOWN, RGHT),
9[1] = KEYMAP( /* Joe colemak */
10 ESC, Q, W, F, P, G, J, L, U, Y, SCLN, MINS,
11 BSPC, A, R, S, T, D, H, N, E, I, O, ENTER,
12 FN7, Z, X, C, V, B, K, M, COMM, DOT, SLSH, QUOT,
13 LCTL, LGUI, LALT, LSFT, FN1, SPC, FN0, LEFT, UP, DOWN, RGHT),
14[2] = KEYMAP( /* Joe UPPER */
15 F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
16 DEL, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
17 TRNS, TRNS, TRNS, TRNS, TRNS, MENU, CAPS, INS, PSCR, TRNS, FN5, FN6,
18 TRNS, TRNS, TRNS, TRNS, FN2, TRNS, FN0, FN26, FN27, FN28, FN29),
19[3] = KEYMAP( /* Joe LOWER */
20 GRV, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN8, FN9, FN30,
21 BSPC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, TRNS,
22 BSLS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, RBRC, TRNS, EQL,
23 TRNS, TRNS, TRNS, TRNS, FN1, TRNS, FN2, HOME, PGUP, PGDN, END),
24[4] = KEYMAP( /* Joe LOWER + UPPER */
25 FN3, FN4, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SLEP,
26 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
27 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
28 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MUTE, VOLD, VOLU, MPLY),
29};
30
31enum macro_id {
32 M_Q0,
33 M_Q1,
34 M_Q2
35};
36
37const uint16_t PROGMEM fn_actions[] = {
38 [0] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
39 [1] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
40 [2] = ACTION_LAYER_MOMENTARY(4), // to Fn overlay
41
42 [3] = ACTION_DEFAULT_LAYER_SET(0),
43 [4] = ACTION_DEFAULT_LAYER_SET(1),
44
45 [5] = ACTION_MODS_KEY(MOD_LCTL, KC_PGUP),
46 [6] = ACTION_MODS_KEY(MOD_LCTL, KC_PGDN),
47
48 /* tab on tap, shift on hold */
49 [7] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),
50
51 [8] = ACTION_MACRO(M_Q0),
52 [9] = ACTION_MACRO(M_Q1),
53
54 [26] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT, KC_LEFT),
55 [27] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT, KC_UP),
56 [28] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT, KC_DOWN),
57 [29] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT, KC_RGHT),
58
59 [30] = ACTION_MACRO(M_Q2),
60};
61
62const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
63{
64 keyevent_t event = record->event;
65 switch (id) {
66 case M_Q0:
67 /* :( | ): */
68 return event.pressed ?
69 MACRO( D(LSFT), T(P), T(9), T(SPC), T(SPC), T(0), T(P), U(LSFT), T(LEFT), T(LEFT), T(LEFT), END ) :
70 MACRO_NONE;
71 case M_Q1:
72 /* (: | :) */
73 return event.pressed ?
74 MACRO( D(LSFT), T(9), T(P), T(SPC), T(SPC), T(P), T(0), U(LSFT), T(LEFT), T(LEFT), T(LEFT), END ) :
75 MACRO_NONE;
76 case M_Q2:
77 /* :) */
78 return event.pressed ?
79 MACRO( D(LSFT), T(P), T(0), U(LSFT), END ) :
80 MACRO_NONE;
81 }
82 return MACRO_NONE;
83}
diff --git a/keyboard/atomic/common_keymaps/keymap_matthew.c b/keyboard/atomic/common_keymaps/keymap_matthew.c
new file mode 100644
index 000000000..56e7003a9
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_matthew.c
@@ -0,0 +1,70 @@
1// by Matthew Pepers - https://github.com/pepers
2
3/* grid planck layout - modified programmer dvorak
4,-----------------------------------------------------------------------------------------------.
5| pause | @ | | | ^ | | | | | * | # | $ | del |
6| esc | ; : | , < | . > | P | Y | F | G | G | C | R | bkspc |
7| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
8|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
9| & | / | { | ( | [ | = | ! | ] | ) | } | \ | + |
10| ` ~ | A | O | E | U | I | D | H | T | N | S | - _ |
11| % | 7 | 5 | 3 | 1 | 9 | 0 | 2 | 4 | 6 | 8 | ? |
12|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
13| | | | | | | | | | | | prtsc |
14| tab | ' " | Q | J | K | X | B | M | W | V | Z | retrn |
15| | | | | | | | | | | | insrt |
16|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
17| | | | | | | | | | | | |
18| lctrl | lgui | lalt | ralt | lower | shift | space | raise | left | down | up | right |
19| | | | | | | | | home | pgdn | pgup | end |
20`-----------------------------------------------------------------------------------------------'
21*/
22
23#include "keymap_common.h"
24
25const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
26 /* 0: dvorak */
27 [0] = KEYMAP_GRID( ESC, SCLN, COMM, DOT, P, Y, F, G, C, R, L, BSPC, \
28 GRV, A, O, E, U, I, D, H, T, N, S, MINS, \
29 TAB, QUOT, Q, J, K, X, B, M, W, V, Z, ENT, \
30 LCTL, LGUI, LALT, RALT, FN1, LSFT, SPC, FN2, LEFT, DOWN, UP, RGHT),
31
32 /* 1: lower (FN1) */
33 [1] = KEYMAP_GRID( F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, \
34 FN17, 7, 5, 3, 1, 9, 0, 2, 4, 6, 8, FN18, \
35 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, INS, \
36 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END),
37
38 /* 2: raise (FN2) */
39 [2] = KEYMAP_GRID(PAUS, FN19, FN20, FN21, TRNS, TRNS, TRNS, TRNS, FN22, FN23, FN24, DEL, \
40 FN10, SLSH, FN11, FN12, LBRC, EQL, FN13, RBRC, FN14, FN15, BSLS, FN16, \
41 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, \
42 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
43
44};
45
46const uint16_t PROGMEM fn_actions[] = {
47 [1] = ACTION_LAYER_MOMENTARY(1), // lower Fn layer
48 [2] = ACTION_LAYER_MOMENTARY(2), // raise Fn layer
49
50 // lower row1
51 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_5), // %
52 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // ?
53
54 // raise row0
55 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_2), // @
56 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLASH), // |
57 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_6), // ^
58 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_8), // *
59 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_3), // #
60 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // $
61
62 // raise row1
63 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_7), // &
64 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRACKET), // {
65 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_9), // (
66 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_1), // !
67 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_0), // )
68 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRACKET), // }
69 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_EQUAL), // +
70};
diff --git a/keyboard/atomic/common_keymaps/keymap_nathan.c b/keyboard/atomic/common_keymaps/keymap_nathan.c
new file mode 100644
index 000000000..5a0900b66
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_nathan.c
@@ -0,0 +1,153 @@
1// Author: Nathan Ross Powell <nathanrospowell@gmail.com>
2// https://github.com/nathanrosspowell/tmk_keyboard/blob/planck-jack/keyboard/planck/keymap_nathan.c
3
4#include "keymap_common.h"
5
6const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /* 0: main layer
8 * ,-----------------------------------------------------------------------.
9 * |Tab | q | w | e | r | t | y | u | i | o | p | BS |
10 * |-----------------------------------------------------------------------|
11 * |Ctrl | a | s | d | f | g | h | j | k | l | ; | Ret |
12 * |-----------------------------------------------------------------------|
13 * |Shift| z | x | c | v | b | n | m | [ | ( | { | < |
14 * |-----------------------------------------------------------------------|
15 * |Meta | \ | / | Alt |Lower|Space|Space|Upper|Left |Down | Up |Right|
16 * `-----------------------------------------------------------------------'
17 */
18 [0] = KEYMAP_GRID(
19 TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
20 LCTL, A, S, D, F, G, H, J, K, L, SCLN, ENT,
21 RSFT, Z, X, C, V, B, N, M, LBRC, FN10, FN11, FN12,
22 LGUI, BSLS, SLSH, LALT, FN0, SPC, SPC, FN1, LEFT, DOWN, UP, RGHT),
23
24 /* 1: fn left/lower layer
25 * The top row are Visual Studio combos:
26 * 'Run', 'Breakpoint', 'Step over', 'Step into', 'Set cursor to line'
27 * 2nd row are key combos:
28 * 'ctrl-alt-delete', 'ctrl-shift-escape'
29 * 3rd row are macros keys:
30 * 'P0' - 'P5' execute a script on Windows machines
31 * ,-----------------------------------------------------------------------.
32 * | ESC | F5 | F9 | F10 | F11 |S+F11|CSF10|NLock|Num7 |Num8 |Num9 | Del |
33 * |-----------------------------------------------------------------------|
34 * | |C/A/D|C/S/E| Ins |Print|Pause|SLock|Num0 |Num4 |Num5 |Num6 |Num= |
35 * |-----------------------------------------------------------------------|
36 * | | P0 | P1 | P2 | P3 | P4 | P5 |Num. |Num1 |Num2 |Num3 |Num/ |
37 * |-----------------------------------------------------------------------|
38 * | |User | | | | | | |Home |PgDn |PgUp | End |
39 * `-----------------------------------------------------------------------'
40 */
41 [1] = KEYMAP_GRID(
42 ESC, F5, F9, F10, F11, FN30, FN31, NLCK, P7, P8, P9, DEL,
43 TRNS, FN16, FN17, INS, PSCR, PAUS, SLCK, P0, P4, P5, P6, PEQL,
44 TRNS, FN2, FN3, FN4, FN5, FN6, FN7, PDOT, P1, P2, P3, PSLS,
45 TRNS, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END ),
46
47 /* 2: fn right/raise layer
48 * ,-----------------------------------------------------------------------.
49 * | F1 | F2 | F3 | F4 |F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
50 * |-----------------------------------------------------------------------|
51 * | | ! | @ | # | $ | % | ^ | & | * | - | + | = |
52 * |-----------------------------------------------------------------------|
53 * | | _ | ' | " | ` | ~ | , | . | ] | ) | } | > |
54 * |-----------------------------------------------------------------------|
55 * | |NextT|PrevT| | | | Esc | |Mute |Vol- |Vol+ | P/P |
56 * `-----------------------------------------------------------------------'
57 */
58 [2] = KEYMAP_GRID(
59 F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
60 TRNS, FN18, FN19, FN20, FN21, FN22, FN23, FN24, FN25, MINS, FN26, PAST,
61 TRNS, FN27, QUOT, FN28, GRV, FN29, COMM, DOT, RBRC, FN13, FN14, FN15,
62 TRNS, MNXT, MPRV, TRNS, TRNS, TRNS, ESC, TRNS, MUTE, VOLD, VOLU, MPLY ),
63};
64
65enum macro_id {
66 M_P0,
67 M_P1,
68 M_P2,
69 M_P3,
70 M_P4,
71 M_P5,
72 M_USERNAME
73};
74
75const uint16_t PROGMEM fn_actions[] = {
76 [0] = ACTION_LAYER_MOMENTARY(1), // left/lower layer
77 [1] = ACTION_LAYER_MOMENTARY(2), // right/raise layer
78 // Program macros
79 [2] = ACTION_MACRO(M_P0),
80 [3] = ACTION_MACRO(M_P1),
81 [4] = ACTION_MACRO(M_P2),
82 [5] = ACTION_MACRO(M_P3),
83 [6] = ACTION_MACRO(M_P4),
84 [7] = ACTION_MACRO(M_P5),
85 [8] = ACTION_MACRO(M_USERNAME),
86 // Braces
87 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_9), // (
88 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // {
89 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_COMMA), // <
90 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_0), // )
91 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // }
92 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // >
93 // Combo
94 [16] = ACTION_MODS_KEY(MOD_LALT | MOD_LCTL, KC_DEL), // Ctrl+Alt+Delete
95 [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_ESC), // Ctrl+Shft+Escape
96 // Symbols
97 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_1), // !
98 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_2), // @
99 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_3), // #
100 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // $
101 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_5), // %
102 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_6), // ^
103 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_7), // &
104 [25] = ACTION_MODS_KEY(MOD_LSFT, KC_8), // *
105 [26] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // +
106 [27] = ACTION_MODS_KEY(MOD_LSFT, KC_MINUS), // _
107 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_QUOTE), // "
108 [29] = ACTION_MODS_KEY(MOD_LSFT, KC_GRAVE), // ~
109 // Debugging
110 [30] = ACTION_MODS_KEY(MOD_LSFT, KC_F11), // Step into
111 [31] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F10), // Set cursor to line
112 };
113
114// Run a script and pass a key number to it. This is Windows specific and the script needs to be on your path.
115// *open run dialog* keypress.py [PRG_NUM]
116#define ADD_PYTHON_PROGRAM_ON_WIN( PRG_NUM ) MACRO( D(LGUI), T(R), U(LGUI), W(100), T(K), T(E), T(Y), T(P), T(R), T(E), T(S), T(S), T(DOT), T(P), T(Y), T(SPC), T(PRG_NUM), END )
117// *return*
118#define RUN_PYTHON_PROGRAM_ON_WIN MACRO( T(ENT), END )
119
120const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
121 keyevent_t event = record->event;
122 switch (id) {
123 case M_P0:
124 return event.pressed ?
125 ADD_PYTHON_PROGRAM_ON_WIN( 0 ) :
126 RUN_PYTHON_PROGRAM_ON_WIN;
127 case M_P1:
128 return event.pressed ?
129 ADD_PYTHON_PROGRAM_ON_WIN( 1 ) :
130 RUN_PYTHON_PROGRAM_ON_WIN;
131 case M_P2:
132 return event.pressed ?
133 ADD_PYTHON_PROGRAM_ON_WIN( 2 ) :
134 RUN_PYTHON_PROGRAM_ON_WIN;
135 case M_P3:
136 return event.pressed ?
137 ADD_PYTHON_PROGRAM_ON_WIN( 3 ) :
138 RUN_PYTHON_PROGRAM_ON_WIN;
139 case M_P4:
140 return event.pressed ?
141 ADD_PYTHON_PROGRAM_ON_WIN( 4 ) :
142 RUN_PYTHON_PROGRAM_ON_WIN;
143 case M_P5:
144 return event.pressed ?
145 ADD_PYTHON_PROGRAM_ON_WIN( 5 ) :
146 RUN_PYTHON_PROGRAM_ON_WIN;
147 case M_USERNAME:
148 return event.pressed ?
149 MACRO( T(N), T(A), T(T), T(H), T(A), T(N), T(R), T(O), T(S), T(S), T(P), T(O), T(W), T(E), T(L), T(L), END ) :
150 MACRO_NONE;
151 }
152 return MACRO_NONE;
153}
diff --git a/keyboard/atomic/common_keymaps/keymap_peasant.c b/keyboard/atomic/common_keymaps/keymap_peasant.c
new file mode 100644
index 000000000..ddacb614e
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_peasant.c
@@ -0,0 +1,51 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = KEYMAP( /* Native */
5 ESC, Q, W, E, R, T, Y, U, I, O, P, FN2,
6 BSPC, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
7 TAB, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
8 DEL, LCTL, NO, LSFT, LALT, SPC, NO, LEFT, DOWN, UP, RGHT),
9 [1] = KEYMAP( /* QWERTY->PHOTOSHOP */
10 DELETE, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, FN1,
11 O, G, S, U, T, FN27, F21, F10, F11, F7, F8, F9,
12 TAB, FN4, FN5, FN6, F1, FN7, F18, F19, F23, F20, F22, FN9,
13 COMM, DOT, FN10, FN11, FN3, SPC, FN12, F2, FN8, F3, F14),
14 [2] = KEYMAP( /* 2: FN3 PHOTOSHOP */
15 ESC, FN25, FN26, NO, NO, NO, NO, NO, NO, NO, NO, NO,
16 NO, NO, NO, NO, NO, NO, NO, NO, NO, FN19, FN20, FN21,
17 C, NO, FN22, FN5, NO, FN23, NO, NO, NO, NO, FN13, NO,
18 FN14, FN15, FN16, FN17, FN3, SPC, FN18, NO, NO, F24, NO),
19};
20
21const uint16_t PROGMEM fn_actions[] = {
22 [1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout
23 [2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets
24 [3] = ACTION_LAYER_ON_OFF(2), // Photoshop function layer
25
26 [4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK
27 [5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse
28 [6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select
29 [7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill
30 [8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp
31 [9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer
32 [10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out
33 [11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders
34 [12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save
35 [13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy
36 [14] = ACTION_MODS_KEY(MOD_LALT, KC_LBRC), // prev layer
37 [15] = ACTION_MODS_KEY(MOD_LALT, KC_RBRC), // next layer
38 [16] = ACTION_MODS_KEY(MOD_LCTL, KC_EQL), // zoom in
39 [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders
40 [18] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F11), // save as PNG
41 [19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur
42 [20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur
43 [21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter
44 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending
45 [23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LALT, KC_N), // normal layer blending
46 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending
47 [25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back
48 [26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward
49 [27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize
50
51};
diff --git a/keyboard/atomic/common_keymaps/keymap_reed.c b/keyboard/atomic/common_keymaps/keymap_reed.c
new file mode 100644
index 000000000..1aa24e10d
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_reed.c
@@ -0,0 +1,74 @@
1#include "keymap_common.h"
2
3/*
4 * BUILD:
5 * Simply run the command below in the keyboard/planck directory
6 * to build against this keymap
7 *
8 * make KEYMAP=reed COMMON_KEYMAP=true
9 *
10 *
11 * DETAILS:
12 *
13 * This layout works off of Jack's layout, making some changes that I
14 * feel significantly improve the function of the keyboard. Major changes
15 * include adding a "gaming mode" that will allow users to still access
16 * the number keys 1 through 4 easily for games that require it. Also
17 * included is the ability to use the tap/hold function for easy use of
18 * right shift and thumb shift with their tapped companions.
19 *
20 */
21const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22[0] = KEYMAP_GRID( /* Reed */
23 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
24 TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
25 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, FN5,
26 LCTL, CAPS, LALT, LGUI, FN2, FN7, SPC, FN1, LEFT, DOWN, UP, RGHT),
27
28[1] = KEYMAP_GRID( /* Reed EXTREME GAMING */
29 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
30 TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
31 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, FN5,
32 LCTL, 1, 2, 3, 4, SPC, FN2, FN1, LEFT, DOWN, UP, RGHT),
33
34[2] = KEYMAP_GRID( /* Reed RAISE */
35 GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,
36 TRNS, FN3, FN4, PAUSE, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS,
37 TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS,
38 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, MNXT, VOLD, VOLU, MPLY),
39
40[3] = KEYMAP_GRID( /* Reed LOWER */
41 TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, DEL,
42 TRNS, TRNS, INS, HOME, PGUP, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
43 TRNS, TRNS, DEL, END, PGDN, F11, F12, F13, TRNS, VOLD, VOLU, TRNS,
44 TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS, MPRV, MUTE, MPLY, MNXT),
45};
46const uint16_t PROGMEM fn_actions[] = {
47 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay - RAISE
48 [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay - LOWER
49
50 [3] = ACTION_DEFAULT_LAYER_SET(0),
51 [4] = ACTION_DEFAULT_LAYER_SET(1),
52 // Actions for the tap/hold modifiers listed above
53 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
54 [7] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_BSPC),
55
56 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
57 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
58 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
59 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
60 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
61 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
62 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
63 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
64 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
65 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
66 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
67 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
68 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
69 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
70 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
71 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
72
73 [29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
74};
diff --git a/keyboard/atomic/common_keymaps/keymap_sean.c b/keyboard/atomic/common_keymaps/keymap_sean.c
new file mode 100644
index 000000000..4fe07f701
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_sean.c
@@ -0,0 +1,57 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = KEYMAP( /* Matrix Dvorak */
5 QUOT, COMM, DOT, P, Y, SLSH, EQL, F, G, C, R, L,
6 A, O, E, U, I, ESC, BSPC, D, H, T, N, S,
7 SCLN, Q, J, K, X, TAB, ENT, B, M, W, V, Z,
8 LSFT, LCTL, LALT, LGUI, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
9
10 [1] = KEYMAP( /* Matrix Qwerty */
11 Q, W, E, R, T, QUOT, EQL, Y, U, I, O, P,
12 A, S, D, F, G, ESC, BSPC, H, J, K, L, SCLN,
13 Z, X, C, V, B, TAB, ENT, N, M, COMM, DOT, SLSH,
14 LSFT, LCTL, LALT, LGUI, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
15
16 [2] = KEYMAP( /* fn1 lower */
17 F1, F2, F3, F4, F5, TRNS, TRNS, F6, F7, F8, F9, F10,
18 1, 2, 3, 4, 5, F18, DEL, 6, 7, 8, 9, 0,
19 FN3, FN4, TRNS, GRV, MINS, TRNS, TRNS, BSLS, LBRC, RBRC, TRNS, TRNS,
20 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN5, HOME, PGDN, PGUP, END),
21
22 [3] = KEYMAP( /* fn2 raise */
23 F1, F2, F3, F4, F5, TRNS, TRNS, F6, F7, F8, F9, F10,
24 F11, F12, F13, F14, F15, F18, DEL, F16, F17, F18, F19, F20,
25 FN3, FN4, TRNS, TRNS, TRNS, TRNS, TRNS, EJCT, PWR, LSFT,PAUSE, RSFT,
26 LEFT, DOWN, UP, RGHT, FN5, TRNS, TRNS, MNXT, VOLD, VOLU, MUTE),
27
28 [4] = KEYMAP( /* lower + raise */
29 LEFT, DOWN, UP, RGHT, TRNS, TRNS, TRNS, TRNS, LEFT, DOWN, UP, RGHT,
30 HOME, PGDN, PGUP, END, TRNS, F18, DEL, TRNS, HOME, PGDN, PGUP, END,
31 FN3, FN4, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, EJCT, PWR, MPLY, RSFT,
32 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MNXT, VOLD, VOLU, MUTE),
33};
34const uint16_t PROGMEM fn_actions[] = {
35 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay LOWER
36 [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay RAISE
37 [3] = ACTION_DEFAULT_LAYER_SET(0),
38 [4] = ACTION_DEFAULT_LAYER_SET(1),
39 [5] = ACTION_LAYER_MOMENTARY(4), // to Fn overlay LOWER + RAISE
40
41 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
42 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
43 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
44 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
45 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
46 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
47 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
48 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
49 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
50 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
51 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
52 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
53 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
54 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
55 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
56 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
57};
diff --git a/keyboard/atomic/common_keymaps/keymap_shane.c b/keyboard/atomic/common_keymaps/keymap_shane.c
new file mode 100644
index 000000000..8d5ad6875
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_shane.c
@@ -0,0 +1,98 @@
1#include "keymap_common.h"
2#include "action_layer.h"
3#include "action.h"
4#include "action_util.h"
5
6/*
7 Shane's Planck Layout
8 http://www.keyboard-layout-editor.com/#/layouts/015d9011102619d7695c86ffe57cf441
9*/
10const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11 [0] = KEYMAP_AND_SWAP( /* Base */
12 TAB, Q, W, E, R, T, Y, U, I, O, P, MINS,
13 LCTL, A, S, D, F, G, H, J, K, L, SCLN, BSPC,
14 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, FN5,
15 /*ALPHA*/FN3, /*HYPER*/ /*SUPER*/LGUI, /*META*/LALT, LCTL, FN2, FN6, FN1, LEFT, DOWN, UP, RGHT),
16 [2] = KEYMAP_AND_SWAP( /* More modifiers */
17 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
18 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
19 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
20 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RCTL, RALT, RGUI, TRNS),
21 [4] = KEYMAP_AND_SWAP( /* WASD */
22 TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
23 TRNS, LEFT, DOWN, RIGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
24 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
25 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
26 [6] = KEYMAP_AND_SWAP( /* Raise/FN1 */
27 FN23, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, EQL,
28 TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, ENT,
29 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, BSLS, TRNS,
30 PAUS, TRNS, TRNS, TRNS, TRNS, BSPC, TRNS, MUTE, PGUP, PGDN, MNXT),
31 [8] = KEYMAP_AND_SWAP( /* Lower/FN2 */
32 ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN19, FN20, TRNS,
33 TRNS, TRNS, TRNS, TRNS, CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, QUOT,
34 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN24, FN25, LBRC, RBRC, TRNS, TRNS,
35 FN4, TRNS, TRNS, TRNS, TRNS, ENT, TRNS, MPLY, VOLD, VOLU, MPRV),
36};
37
38enum function_id {
39 SPACE_FN,
40};
41
42void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
43{
44 switch (id) {
45 case SPACE_FN:
46 if (record->event.pressed) {
47 // Change the keyboard maps.
48 // Whatever even layer's are on, turn on the odd one's too.
49 for (uint8_t i = 0; i < 9; i += 2) {
50 if (layer_state & (1UL << i))
51 layer_on(i + 1);
52 }
53 layer_on(1);
54 } else {
55 // turn off all the even layers.
56 for (uint8_t i = 0; i < 9; i += 2)
57 layer_off(i + 1);
58
59 if (record->tap.count != 0) {
60 // Space was tapped rather than used like a modifier.
61 // So send a space up and down event.
62 add_key(KC_SPC);
63 send_keyboard_report();
64 del_key(KC_SPC);
65 send_keyboard_report();
66 }
67 }
68 break;
69 }
70}
71
72
73
74const uint16_t PROGMEM fn_actions[] = {
75 [1] = ACTION_LAYER_MOMENTARY(6), // to fist Fn overlay
76 [2] = ACTION_LAYER_MOMENTARY(8), // to second Fn overlay
77 [3] = ACTION_LAYER_TOGGLE(2), // toggle more modifiers
78 [4] = ACTION_LAYER_TOGGLE(4), // toggle wasd
79 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
80 [6] = ACTION_FUNCTION_TAP(SPACE_FN),
81
82 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
83 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
84 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
85 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
86 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
87 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
88 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
89 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
90 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
91 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
92 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
93 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
94 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
95 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
96 [25] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
97 [26] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
98}; \ No newline at end of file
diff --git a/keyboard/atomic/common_keymaps/keymap_simon.c b/keyboard/atomic/common_keymaps/keymap_simon.c
new file mode 100644
index 000000000..37951364b
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_simon.c
@@ -0,0 +1,44 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = KEYMAP( /* Jack */
5 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
6 TAB, A, S, D, F, G, H, J, K, L, DOT, ENT,
7 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SCLN, DEL,
8 LCTL, ENT, LALT, CAPS, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
9[1] = KEYMAP( /* Jack RAISE */
10 TRNS, F1, F2, F3, F4, NO, FN11, FN9, FN12, NO, FN14, TRNS,
11 TRNS, F5, F6, F7, F8, FN16, SLSH, MINS, EQL, LBRC, FN8, TRNS,
12 TRNS, F9, F10, F11, F12, F15, F16, FN22, SCLN, MINS, QUOT, TRNS,
13 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
14[2] = KEYMAP( /* Jack LOWER */
15 FN22, 1, 2, 3, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
16 TRNS, 4, 5, 6, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
17 TRNS, 7, 8, 9, 0, FN28, FN15, F7, F8, F9, F10, TRNS,
18 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
19};
20const uint16_t PROGMEM fn_actions[] = {
21 [1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
22 [2] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
23
24 [8] = ACTION_MODS_KEY(MOD_LSFT, KC_SLSH),
25 [9] = ACTION_MODS_KEY(MOD_LSFT, KC_QUOT),
26 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
27 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
28 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
29 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
30 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
31 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
32 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
33 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
34 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
35 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
36 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
37 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
38 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
39 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
40 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
41 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
42
43 [29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
44};
diff --git a/keyboard/atomic/common_keymaps/keymap_tim.c b/keyboard/atomic/common_keymaps/keymap_tim.c
new file mode 100644
index 000000000..7444f3877
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_tim.c
@@ -0,0 +1,44 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = KEYMAP(
5 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
6 TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT,
7 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,
8 LCTL, LALT, DEL, LGUI, FN2, SPC, FN1, F2, F5, F9, F12),
9[2] = KEYMAP( /* RAISE */
10 TRNS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,
11 GRV, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS,
12 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, QUOT, FN29, TRNS, TRNS,
13 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, TRNS, TRNS, TRNS, TRNS),
14[3] = KEYMAP( /* LOWER */
15 TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
16 FN22, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
17 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, QUOT, FN29, TRNS, TRNS,
18 TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
19};
20const uint16_t PROGMEM fn_actions[] = {
21 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
22 [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
23
24 [3] = ACTION_DEFAULT_LAYER_SET(0),
25 [4] = ACTION_DEFAULT_LAYER_SET(1),
26
27 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
28 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
29 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
30 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
31 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
32 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
33 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
34 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
35 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
36 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
37 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
38 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
39 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
40 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
41 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
42 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
43 [29] = ACTION_MODS_KEY(MOD_LSFT, KC_QUOT),
44};
diff --git a/keyboard/atomic/common_keymaps/keymap_wilba.c b/keyboard/atomic/common_keymaps/keymap_wilba.c
new file mode 100644
index 000000000..9781f8fcd
--- /dev/null
+++ b/keyboard/atomic/common_keymaps/keymap_wilba.c
@@ -0,0 +1,56 @@
1#include "keymap_common.h"
2
3const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = KEYMAP( /* Wilba */
5 FN27, FN28, FN29, E, R, T, Y, U, I, O, P, BSPC,
6 TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
7 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
8 LCTL, LGUI, LALT, RSFT, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
9[1] = KEYMAP( /* Wilba Alternate */
10 ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
11 TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
12 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
13 LCTL, LGUI, LALT, RSFT, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
14[2] = KEYMAP( /* Wilba LOWER */
15 TRNS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, TRNS,
16 TRNS, F11, F12, LBRC, RBRC, FN20, EQL, FN23, FN24, MINS, FN21, TRNS,
17 TRNS, BSLS, GRV, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
18 TRNS, TRNS, TRNS, TRNS, FN1, TRNS, TRNS, MNXT, VOLD, VOLU, MPLY),
19[3] = KEYMAP( /* Wilba RAISE */
20 TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, TRNS,
21 TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS,
22 TRNS, FN25, FN22, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
23 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS, TRNS),
24};
25const uint16_t PROGMEM fn_actions[] = {
26 [1] = ACTION_LAYER_MOMENTARY(2), // LOWER
27 [2] = ACTION_LAYER_MOMENTARY(3), // RAISE
28
29 [3] = ACTION_DEFAULT_LAYER_SET(0),
30 [4] = ACTION_DEFAULT_LAYER_SET(1),
31
32 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1), // !
33 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2), // @
34 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3), // #
35 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // $
36 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5), // %
37 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6), // ^
38 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7), // &
39 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8), // *
40 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9), // (
41 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0), // )
42
43 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // _
44 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // +
45 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // ~
46 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // {
47 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // }
48 [25] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // |
49
50 [26] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
51
52 [27] = ACTION_BACKLIGHT_TOGGLE(),
53 [28] = ACTION_BACKLIGHT_INCREASE(),
54 [29] = ACTION_BACKLIGHT_DECREASE()
55
56};
diff --git a/keyboard/atomic/extended_keymap_common.c b/keyboard/atomic/extended_keymap_common.c
new file mode 100644
index 000000000..841b24943
--- /dev/null
+++ b/keyboard/atomic/extended_keymap_common.c
@@ -0,0 +1,208 @@
1/*
2Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include "extended_keymap_common.h"
19#include "report.h"
20#include "keycode.h"
21#include "action_layer.h"
22#include "action.h"
23#include "action_macro.h"
24#include "debug.h"
25#include "backlight.h"
26
27
28static action_t keycode_to_action(uint16_t keycode);
29
30
31/* converts key to action */
32action_t action_for_key(uint8_t layer, keypos_t key)
33{
34 // 16bit keycodes - important
35 uint16_t keycode = keymap_key_to_keycode(layer, key);
36
37 if (keycode >= 0x0100 && keycode < 0x2000) {
38 // Has a modifier
39 action_t action;
40 // Split it up
41 action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF);
42 return action;
43 } else if (keycode >= 0x2000 && keycode < 0x3000) {
44 // Is a shortcut for function layer, pull last 12bits
45 return keymap_func_to_action(keycode & 0xFFF);
46 } else if (keycode >= 0x3000 && keycode < 0x4000) {
47 action_t action;
48 action.code = ACTION_MACRO(keycode & 0xFF);
49 return action;
50 } else if (keycode >= BL_0 & keycode <= BL_15) {
51 action_t action;
52 action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F);
53 return action;
54 } else if (keycode == BL_DEC) {
55 action_t action;
56 action.code = ACTION_BACKLIGHT_DECREASE();
57 return action;
58 } else if (keycode == BL_INC) {
59 action_t action;
60 action.code = ACTION_BACKLIGHT_INCREASE();
61 return action;
62 } else if (keycode == BL_TOGG) {
63 action_t action;
64 action.code = ACTION_BACKLIGHT_TOGGLE();
65 return action;
66 } else if (keycode == BL_STEP) {
67 action_t action;
68 action.code = ACTION_BACKLIGHT_STEP();
69 return action;
70 } else if (keycode == RESET) {
71 bootloader_jump();
72 return;
73 }
74
75 switch (keycode) {
76 case KC_FN0 ... KC_FN31:
77 return keymap_fn_to_action(keycode);
78#ifdef BOOTMAGIC_ENABLE
79 case KC_CAPSLOCK:
80 case KC_LOCKING_CAPS:
81 if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
82 return keycode_to_action(KC_LCTL);
83 }
84 return keycode_to_action(keycode);
85 case KC_LCTL:
86 if (keymap_config.swap_control_capslock) {
87 return keycode_to_action(KC_CAPSLOCK);
88 }
89 return keycode_to_action(KC_LCTL);
90 case KC_LALT:
91 if (keymap_config.swap_lalt_lgui) {
92 if (keymap_config.no_gui) {
93 return keycode_to_action(ACTION_NO);
94 }
95 return keycode_to_action(KC_LGUI);
96 }
97 return keycode_to_action(KC_LALT);
98 case KC_LGUI:
99 if (keymap_config.swap_lalt_lgui) {
100 return keycode_to_action(KC_LALT);
101 }
102 if (keymap_config.no_gui) {
103 return keycode_to_action(ACTION_NO);
104 }
105 return keycode_to_action(KC_LGUI);
106 case KC_RALT:
107 if (keymap_config.swap_ralt_rgui) {
108 if (keymap_config.no_gui) {
109 return keycode_to_action(ACTION_NO);
110 }
111 return keycode_to_action(KC_RGUI);
112 }
113 return keycode_to_action(KC_RALT);
114 case KC_RGUI:
115 if (keymap_config.swap_ralt_rgui) {
116 return keycode_to_action(KC_RALT);
117 }
118 if (keymap_config.no_gui) {
119 return keycode_to_action(ACTION_NO);
120 }
121 return keycode_to_action(KC_RGUI);
122 case KC_GRAVE:
123 if (keymap_config.swap_grave_esc) {
124 return keycode_to_action(KC_ESC);
125 }
126 return keycode_to_action(KC_GRAVE);
127 case KC_ESC:
128 if (keymap_config.swap_grave_esc) {
129 return keycode_to_action(KC_GRAVE);
130 }
131 return keycode_to_action(KC_ESC);
132 case KC_BSLASH:
133 if (keymap_config.swap_backslash_backspace) {
134 return keycode_to_action(KC_BSPACE);
135 }
136 return keycode_to_action(KC_BSLASH);
137 case KC_BSPACE:
138 if (keymap_config.swap_backslash_backspace) {
139 return keycode_to_action(KC_BSLASH);
140 }
141 return keycode_to_action(KC_BSPACE);
142#endif
143 default:
144 return keycode_to_action(keycode);
145 }
146}
147
148
149/* Macro */
150__attribute__ ((weak))
151const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
152{
153 return MACRO_NONE;
154}
155
156/* Function */
157__attribute__ ((weak))
158void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
159{
160}
161
162/* translates keycode to action */
163static action_t keycode_to_action(uint16_t keycode)
164{
165 action_t action;
166 switch (keycode) {
167 case KC_A ... KC_EXSEL:
168 case KC_LCTRL ... KC_RGUI:
169 action.code = ACTION_KEY(keycode);
170 break;
171 case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE:
172 action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode));
173 break;
174 case KC_AUDIO_MUTE ... KC_WWW_FAVORITES:
175 action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
176 break;
177 case KC_MS_UP ... KC_MS_ACCEL2:
178 action.code = ACTION_MOUSEKEY(keycode);
179 break;
180 case KC_TRNS:
181 action.code = ACTION_TRANSPARENT;
182 break;
183 default:
184 action.code = ACTION_NO;
185 break;
186 }
187 return action;
188}
189
190
191/* translates key to keycode */
192uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
193{
194 // Read entire word (16bits)
195 return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
196}
197
198/* translates Fn keycode to action */
199action_t keymap_fn_to_action(uint16_t keycode)
200{
201 return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
202}
203
204action_t keymap_func_to_action(uint16_t keycode)
205{
206 // For FUNC without 8bit limit
207 return (action_t){ .code = pgm_read_word(&fn_actions[(int)keycode]) };
208}
diff --git a/keyboard/atomic/extended_keymap_common.h b/keyboard/atomic/extended_keymap_common.h
new file mode 100644
index 000000000..21d8978b7
--- /dev/null
+++ b/keyboard/atomic/extended_keymap_common.h
@@ -0,0 +1,177 @@
1/*
2Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef KEYMAP_H
19#define KEYMAP_H
20
21#include <stdint.h>
22#include <stdbool.h>
23#include "action.h"
24#include <avr/pgmspace.h>
25#include "keycode.h"
26#include "keymap.h"
27#include "action_macro.h"
28#include "report.h"
29#include "host.h"
30#include "print.h"
31#include "debug.h"
32
33#ifdef BOOTMAGIC_ENABLE
34/* NOTE: Not portable. Bit field order depends on implementation */
35typedef union {
36 uint16_t raw;
37 struct {
38 bool swap_control_capslock:1;
39 bool capslock_to_control:1;
40 bool swap_lalt_lgui:1;
41 bool swap_ralt_rgui:1;
42 bool no_gui:1;
43 bool swap_grave_esc:1;
44 bool swap_backslash_backspace:1;
45 bool nkro:1;
46 };
47} keymap_config_t;
48keymap_config_t keymap_config;
49#endif
50
51/* translates key to keycode */
52uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key);
53
54/* translates Fn keycode to action */
55action_t keymap_fn_to_action(uint16_t keycode);
56
57/* translates Fn keycode to action */
58action_t keymap_func_to_action(uint16_t keycode);
59
60extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
61extern const uint16_t fn_actions[];
62
63// Ability to use mods in layouts
64#define LCTL(kc) kc | 0x0100
65#define LSFT(kc) kc | 0x0200
66#define LALT(kc) kc | 0x0400
67#define LGUI(kc) kc | 0x0800
68#define RCTL(kc) kc | 0x1100
69#define RSFT(kc) kc | 0x1200
70#define RALT(kc) kc | 0x1400
71#define RGUI(kc) kc | 0x1800
72
73// Alias for function layers than expand past FN31
74#define FUNC(kc) kc | 0x2000
75
76// Aliases
77#define S(kc) LSFT(kc)
78#define F(kc) FUNC(kc)
79
80// For software implementation of colemak
81#define CM_Q KC_Q
82#define CM_W KC_W
83#define CM_F KC_E
84#define CM_P KC_R
85#define CM_G KC_T
86#define CM_J KC_Y
87#define CM_L KC_U
88#define CM_U KC_I
89#define CM_Y KC_O
90#define CM_SCLN KC_P
91
92#define CM_A KC_A
93#define CM_R KC_S
94#define CM_S KC_D
95#define CM_T KC_F
96#define CM_D KC_G
97#define CM_H KC_H
98#define CM_N KC_J
99#define CM_E KC_K
100#define CM_I KC_L
101#define CM_O KC_SCLN
102
103#define CM_Z KC_Z
104#define CM_X KC_X
105#define CM_C KC_C
106#define CM_V KC_V
107#define CM_B KC_B
108#define CM_K KC_N
109#define CM_M KC_M
110#define CM_COMM KC_COMM
111#define CM_DOT KC_DOT
112#define CM_SLSH KC_SLSH
113
114// Make it easy to support these in macros
115#define KC_CM_Q CM_Q
116#define KC_CM_W CM_W
117#define KC_CM_F CM_F
118#define KC_CM_P CM_P
119#define KC_CM_G CM_G
120#define KC_CM_J CM_J
121#define KC_CM_L CM_L
122#define KC_CM_U CM_U
123#define KC_CM_Y CM_Y
124#define KC_CM_SCLN CM_SCLN
125
126#define KC_CM_A CM_A
127#define KC_CM_R CM_R
128#define KC_CM_S CM_S
129#define KC_CM_T CM_T
130#define KC_CM_D CM_D
131#define KC_CM_H CM_H
132#define KC_CM_N CM_N
133#define KC_CM_E CM_E
134#define KC_CM_I CM_I
135#define KC_CM_O CM_O
136
137#define KC_CM_Z CM_Z
138#define KC_CM_X CM_X
139#define KC_CM_C CM_C
140#define KC_CM_V CM_V
141#define KC_CM_B CM_B
142#define KC_CM_K CM_K
143#define KC_CM_M CM_M
144#define KC_CM_COMM CM_COMM
145#define KC_CM_DOT CM_DOT
146#define KC_CM_SLSH CM_SLSH
147
148#define M(kc) kc | 0x3000
149
150#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
151
152#define BL_ON 0x4009
153#define BL_OFF 0x4000
154#define BL_0 0x4000
155#define BL_1 0x4001
156#define BL_2 0x4002
157#define BL_3 0x4003
158#define BL_4 0x4004
159#define BL_5 0x4005
160#define BL_6 0x4006
161#define BL_7 0x4007
162#define BL_8 0x4008
163#define BL_9 0x4009
164#define BL_10 0x400A
165#define BL_11 0x400B
166#define BL_12 0x400C
167#define BL_13 0x400D
168#define BL_14 0x400E
169#define BL_15 0x400F
170#define BL_DEC 0x4010
171#define BL_INC 0x4011
172#define BL_TOGG 0x4012
173#define BL_STEP 0x4013
174
175#define RESET 0x5000
176
177#endif
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_austin.c b/keyboard/atomic/extended_keymaps/extended_keymap_austin.c
new file mode 100644
index 000000000..35330be74
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_austin.c
@@ -0,0 +1,50 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = { /* Qwerty */
5 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
6 {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
7 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
8 {BL_STEP, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
9 // Space is repeated to accommadate for both spacebar wiring positions
10},
11[1] = { /* Colemak */
12 {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
13 {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
14 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
15 {KC_FN3, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
16},
17[2] = { /* RAISE */
18 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
19 {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
20 {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS},
21 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
22},
23[3] = { /* LOWER */
24 {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
25 {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
26 {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
27 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
28}
29};
30
31
32const uint16_t PROGMEM fn_actions[] = {
33 [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
34 [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
35
36 [3] = ACTION_DEFAULT_LAYER_SET(0),
37 [4] = ACTION_DEFAULT_LAYER_SET(1),
38
39};
40
41const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
42{
43 // MACRODOWN only works in this function
44 switch(id) {
45 case 0:
46 return MACRODOWN(T(CM_T), END);
47 break;
48 }
49 return MACRO_NONE;
50};
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_charlie.c b/keyboard/atomic/extended_keymaps/extended_keymap_charlie.c
new file mode 100644
index 000000000..18657c8e4
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_charlie.c
@@ -0,0 +1,54 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = { /* Native */
5 {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, FUNC(2)},
6 {KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
7 {KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
8 {KC_DEL, KC_LCTL, KC_NO, KC_LSFT, KC_LALT, KC_SPC, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
9},
10 [1] = { /* QWERTY->PHOTOSHOP */
11 {KC_DELETE, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, FUNC(1)},
12 {KC_O, KC_G, KC_S, KC_U, KC_T, FUNC(27), KC_F21, KC_F10, KC_F11, KC_F7, KC_F8, KC_F9},
13 {KC_TAB, FUNC(4), FUNC(5), FUNC(6), KC_F1, FUNC(7), KC_F18, KC_F19, KC_F23, KC_F20, KC_F22, FUNC(9)},
14 {KC_COMM, KC_DOT, KC_R, FUNC(11), FUNC(3), KC_SPC, FUNC(12), KC_F2, FUNC(8), KC_F3, KC_F14}
15 },
16 [2] = { /* 2: FUNC(3 PHOTOSHOP */
17 {KC_ESC, FUNC(25), FUNC(26), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
18 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, FUNC(19), FUNC(20), FUNC(21)},
19 {KC_C, KC_NO, FUNC(22), FUNC(5), KC_NO, FUNC(23), KC_NO, KC_NO, KC_NO, KC_NO, FUNC(13), KC_NO},
20 {FUNC(14), FUNC(15), FUNC(16), FUNC(17), FUNC(3), KC_SPC, FUNC(18), KC_NO, KC_NO, KC_F24, KC_NO}
21 }
22};
23
24const uint16_t PROGMEM fn_actions[] = {
25 [1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout
26 [2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets
27 [3] = ACTION_LAYER_MOMENTARY(2), // Photoshop function layer
28
29 [4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK
30 [5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse
31 [6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select
32 [7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill
33 [8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp
34 [9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer
35 [10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out
36 [11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders
37 [12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save
38 [13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy
39 [14] = ACTION_MODS_KEY(MOD_LCTL, KC_F2), // stroke
40 [15] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_F2), // stroke layer
41 [16] = ACTION_MODS_KEY(MOD_LCTL, KC_0), // zoom 0
42 [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders
43 [18] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_S), // save as
44 [19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur
45 [20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur
46 [21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter
47 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending
48 [23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_BSPC), // KC_NOrmal layer blending
49 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending
50 [25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back
51 [26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward
52 [27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize
53
54};
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_daniel.c b/keyboard/atomic/extended_keymaps/extended_keymap_daniel.c
new file mode 100644
index 000000000..d3565495f
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_daniel.c
@@ -0,0 +1,48 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = { /* Qwerty */
5 {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
6 {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
7 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
8 {FUNC(3), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
9 // Space is repeated to accommadate for both spacebar wiring positions
10},
11[1] = { /* RAISE */
12 {KC_GRV, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_EQL},
13 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC},
14 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, S(KC_MINS), KC_BSLS, KC_TRNS},
15 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
16},
17[2] = { /* LOWER */
18 {S(KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_EQL)},
19 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
20 {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ENT},
21 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
22},
23[3] = { /* Qwerty */
24 {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL},
25 {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
26 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
27 {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
28 // Space is repeated to accommadate for both spacebar wiring positions
29}
30};
31
32
33const uint16_t PROGMEM fn_actions[] = {
34 [1] = ACTION_LAYER_MOMENTARY(1), // to RAISE
35 [2] = ACTION_LAYER_MOMENTARY(2), // to LOWER
36 [3] = ACTION_LAYER_MOMENTARY(3) // to LOWER
37};
38
39const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
40{
41 // MACRODOWN only works in this function
42 switch(id) {
43 case 0:
44 return MACRODOWN(T(CM_T), END);
45 break;
46 }
47 return MACRO_NONE;
48};
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_default.c b/keyboard/atomic/extended_keymaps/extended_keymap_default.c
new file mode 100644
index 000000000..e662c9188
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_default.c
@@ -0,0 +1,79 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = { /* Qwerty */
5 { 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_DEL },
6// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
7// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
8// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
9// ┌─ 2u ────────────┐
10// │ X │
11// └─────────────────┘
12 { 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 },
13// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
14// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
15// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
16// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
17// │ X │ │ X │
18// └─────────────────┘ └─────────────────┘
19 { 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_ENT, KC_ENT, KC_PGUP },
20// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
21// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
22// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
23// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
24// │ X │ │ X │
25// └─────────────────┘ └─────────────────┘
26// ┌─ 2u ────────────┐
27// │ X │
28// └─────────────────┘
29 { 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_RSFT, KC_UP, KC_PGDN },
30// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
31// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
32// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
33// ┌─ 2u ────────────┐
34// │ X │
35// └─────────────────┘
36// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
37// │ X │ │ X │
38// └─────────────────┘ └─────────────────┘
39// ┌─ 2u ────────────┐
40// │ X │
41// └─────────────────┘
42 { KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI, KC_LCTL, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
43// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
44// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
45// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
46// ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐
47// │ X │ X │ X │ X │ X │ X │ X │ X │ X │
48// └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘
49// ┌─ 2u ────────────┐
50// │ X │
51// └─────────────────┘
52// ┌───────────────────── 6.25u ────────────────────────────┐
53// │ X │
54// └────────────────────────────────────────────────────────┘
55// ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐
56// │ X │ X │ X │ X │ X │ X │
57// └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘
58 }
59};
60
61const uint16_t PROGMEM fn_actions[] = {
62 [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
63 [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
64
65 [3] = ACTION_DEFAULT_LAYER_SET(0),
66 [4] = ACTION_DEFAULT_LAYER_SET(1),
67
68};
69
70const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
71{
72 // MACRODOWN only works in this function
73 switch(id) {
74 case 0:
75 return MACRODOWN(T(CM_T), END);
76 break;
77 }
78 return MACRO_NONE;
79};
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_dzobert.c b/keyboard/atomic/extended_keymaps/extended_keymap_dzobert.c
new file mode 100644
index 000000000..6b3864b6c
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_dzobert.c
@@ -0,0 +1,49 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = { /* Qwerty */
5 {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TAB},
6 {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_BSPC},
7 {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
8 {KC_FN4, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
9 // Space is repeated to accommadate for both spacebar wiring positions
10},
11[1] = { /* Colemak */
12 {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB},
13 {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_BSPC},
14 {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
15 {KC_FN3, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
16},
17[2] = { /* RAISE */
18 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
19 {KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_DEL},
20 {KC_TRNS, KC_GRV, KC_MINS, KC_EQL, KC_QUOT, S(KC_QUOT), S(KC_LBRC), S(KC_RBRC), KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS},
21 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_HOME, KC_PGUP, KC_PGDN, KC_END}
22},
23[3] = { /* LOWER */
24 {KC_POWER,KC_PSCR, KC_SLCK, KC_PAUSE, KC_NLCK, KC_EXECUTE, KC_MENU, KC_APP, KC_7, KC_8, KC_9, KC_KP_SLASH},
25 {KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_CAPS, KC_CANCEL, KC_UNDO, KC_AGAIN, KC_4, KC_5, KC_6, KC_KP_ASTERISK},
26 {KC_TRNS, KC_INSERT,KC_CUT, KC_COPY, KC_PASTE, KC_BSLS, KC_9, KC_0, KC_1, KC_2, KC_3, KC_KP_MINUS},
27 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_KP_DOT, KC_KP_ENTER, KC_KP_PLUS}
28}
29};
30
31const uint16_t PROGMEM fn_actions[] = {
32 [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
33 [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
34
35 [3] = ACTION_DEFAULT_LAYER_SET(0),
36 [4] = ACTION_DEFAULT_LAYER_SET(1),
37
38};
39
40const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
41{
42 // MACRODOWN only works in this function
43 switch(id) {
44 case 0:
45 return MACRODOWN(T(CM_T), END);
46 break;
47 }
48 return MACRO_NONE;
49}; \ No newline at end of file
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_jack.c b/keyboard/atomic/extended_keymaps/extended_keymap_jack.c
new file mode 100644
index 000000000..8ad61646c
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_jack.c
@@ -0,0 +1,188 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = { /* Qwerty */
5 { 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_DEL },
6// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
7// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
8// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
9// ┌─ 2u ────────────┐
10// │ X │
11// └─────────────────┘
12 { 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 },
13// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
14// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
15// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
16// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
17// │ X │ │ X │
18// └─────────────────┘ └─────────────────┘
19 { 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_ENT, KC_ENT, KC_PGUP },
20// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
21// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
22// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
23// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
24// │ X │ │ X │
25// └─────────────────┘ └─────────────────┘
26// ┌─ 2u ────────────┐
27// │ X │
28// └─────────────────┘
29 { 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_RSFT, KC_UP, KC_PGDN },
30// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
31// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
32// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
33// ┌─ 2u ────────────┐
34// │ X │
35// └─────────────────┘
36// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
37// │ X │ │ X │
38// └─────────────────┘ └─────────────────┘
39// ┌─ 2u ────────────┐
40// │ X │
41// └─────────────────┘
42 { KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI, KC_LCTL, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RALT, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT },
43// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
44// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
45// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
46// ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐
47// │ X │ X │ X │ X │ X │ X │ X │ X │ X │
48// └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘
49// ┌─ 2u ────────────┐
50// │ X │
51// └─────────────────┘
52// ┌───────────────────── 6.25u ────────────────────────────┐
53// │ X │
54// └────────────────────────────────────────────────────────┘
55// ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐
56// │ X │ X │ X │ X │ X │ X │
57// └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘
58 },
59 [1] = { /* Colemak */
60 { 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_DEL },
61// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
62// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
63// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
64// ┌─ 2u ────────────┐
65// │ X │
66// └─────────────────┘
67 { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
68// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
69// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
70// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
71// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
72// │ X │ │ X │
73// └─────────────────┘ └─────────────────┘
74 { KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
75// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
76// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
77// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
78// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
79// │ X │ │ X │
80// └─────────────────┘ └─────────────────┘
81// ┌─ 2u ────────────┐
82// │ X │
83// └─────────────────┘
84 { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
85// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
86// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
87// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
88// ┌─ 2u ────────────┐
89// │ X │
90// └─────────────────┘
91// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
92// │ X │ │ X │
93// └─────────────────┘ └─────────────────┘
94// ┌─ 2u ────────────┐
95// │ X │
96// └─────────────────┘
97 { KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI, KC_LCTL, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RALT, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT },
98// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
99// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
100// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
101// ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐
102// │ X │ X │ X │ X │ X │ X │ X │ X │ X │
103// └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘
104// ┌─ 2u ────────────┐
105// │ X │
106// └─────────────────┘
107// ┌───────────────────── 6.25u ────────────────────────────┐
108// │ X │
109// └────────────────────────────────────────────────────────┘
110// ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐
111// │ X │ X │ X │ X │ X │ X │
112// └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘
113 },
114
115 [2] = { /* Qwerty */
116 { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL },
117// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
118// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
119// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
120// ┌─ 2u ────────────┐
121// │ X │
122// └─────────────────┘
123 { 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 },
124// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
125// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
126// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
127// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
128// │ X │ │ X │
129// └─────────────────┘ └─────────────────┘
130 { KC_ESC, FUNC(3), FUNC(4), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
131// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
132// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
133// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
134// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
135// │ X │ │ X │
136// └─────────────────┘ └─────────────────┘
137// ┌─ 2u ────────────┐
138// │ X │
139// └─────────────────┘
140 { 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_RSFT, KC_UP, KC_PGDN },
141// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
142// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
143// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
144// ┌─ 2u ────────────┐
145// │ X │
146// └─────────────────┘
147// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐
148// │ X │ │ X │
149// └─────────────────┘ └─────────────────┘
150// ┌─ 2u ────────────┐
151// │ X │
152// └─────────────────┘
153 { KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI, KC_LCTL, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RALT, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT },
154// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
155// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
156// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
157// ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐
158// │ X │ X │ X │ X │ X │ X │ X │ X │ X │
159// └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘
160// ┌─ 2u ────────────┐
161// │ X │
162// └─────────────────┘
163// ┌───────────────────── 6.25u ────────────────────────────┐
164// │ X │
165// └────────────────────────────────────────────────────────┘
166// ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐
167// │ X │ X │ X │ X │ X │ X │
168// └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘
169 }
170};
171
172const uint16_t PROGMEM fn_actions[] = {
173 [1] = ACTION_LAYER_MOMENTARY(2),
174 [3] = ACTION_DEFAULT_LAYER_SET(0),
175 [4] = ACTION_DEFAULT_LAYER_SET(1),
176
177};
178
179const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
180{
181 // MACRODOWN only works in this function
182 switch(id) {
183 case 0:
184 return MACRODOWN(T(CM_T), END);
185 break;
186 }
187 return MACRO_NONE;
188};
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_joe.c b/keyboard/atomic/extended_keymaps/extended_keymap_joe.c
new file mode 100644
index 000000000..9de6cf396
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_joe.c
@@ -0,0 +1,90 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = { /* Joe colemak */
5 {FUNC(3), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS},
6 {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT },
7 {FUNC(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
8 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, FUNC(1), KC_SPC, KC_SPC, FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
9 },
10 [1] = { /* Joe soft Colemak */
11 {FUNC(3), CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_MINS},
12 {KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_ENT },
13 {FUNC(15), CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
14 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, FUNC(1), KC_SPC, KC_SPC, FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
15 },
16 [2] = { /* Joe NUMPAD */
17 {FUNC(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_9), LSFT(KC_0), KC_P7, KC_P8, KC_P9, KC_PSLS},
18 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_5), KC_PEQL, KC_P4, KC_P5, KC_P6, KC_PAST},
19 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PCMM, KC_P1, KC_P2, KC_P3, KC_PMNS},
20 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, FUNC(1), KC_TRNS, KC_TRNS, FUNC(2), KC_P0, KC_PDOT, KC_PENT, KC_PPLS}
21 },
22 [4] = { /* Joe LOWER fn1 */
23 {KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(28), FUNC(27), FUNC(26), FUNC(25)},
24 {KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS },
25 {KC_BSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_EQL },
26 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_TRNS, KC_TRNS, FUNC(2), KC_HOME, KC_PGDN, KC_PGUP, KC_END }
27 },
28 [5] = { /* Joe UPPER fn2 */
29 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 },
30 {KC_DEL, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, RESET },
31 {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_MENU, KC_CAPS, KC_INS, KC_PSCR, KC_TRNS, LCTL(KC_PGUP), LCTL(KC_PGDN) },
32 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_TRNS, KC_TRNS, FUNC(2), LCTL(LALT(KC_LEFT)), LCTL(LALT(KC_DOWN)), LCTL(LALT(KC_UP)), LCTL(LALT(KC_RGHT))}
33 },
34 [6] = { /* Joe SPECIAL fn3 */
35 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LCTL(LSFT(CM_U)), KC_TRNS, KC_TRNS, KC_SLEP},
36 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET },
37 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
38 {FUNC(6), FUNC(7), FUNC(8), KC_TRNS, FUNC(1), KC_TRNS, KC_TRNS, FUNC(2), KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY}
39 }
40};
41
42enum macro_id {
43 M_Q0,
44 M_Q1,
45 M_Q2,
46 M_Q3
47};
48
49const uint16_t PROGMEM fn_actions[] = {
50 [1] = ACTION_LAYER_MOMENTARY(4), // fn1
51 [2] = ACTION_LAYER_MOMENTARY(5), // fn2
52
53 /* ESC on tap, fn3 on hold */
54 [3] = ACTION_LAYER_TAP_KEY(6, KC_ESC),
55
56 /* toggle layers */
57 [6] = ACTION_DEFAULT_LAYER_SET(0),
58 [7] = ACTION_DEFAULT_LAYER_SET(1),
59 [8] = ACTION_DEFAULT_LAYER_SET(2),
60
61 /* tab on tap, shift on hold */
62 [15] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),
63
64 /* smiley macros */
65 [25] = ACTION_MACRO(M_Q0),
66 [26] = ACTION_MACRO(M_Q1),
67 [27] = ACTION_MACRO(M_Q2),
68 [28] = ACTION_MACRO(M_Q3),
69};
70
71const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
72{
73 switch (id) {
74 case M_Q0:
75 /* :) */
76 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), END );
77 case M_Q1:
78 /* :( */
79 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), UP(KC_LSFT), END );
80 case M_Q2:
81 /* (: | :) */
82 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_9), TYPE(KC_SCLN), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END );
83 case M_Q3:
84 /* :( | ): */
85 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_0), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END );
86 default:
87 break;
88 }
89 return MACRO_NONE;
90}
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_kyle.c b/keyboard/atomic/extended_keymaps/extended_keymap_kyle.c
new file mode 100644
index 000000000..fc4569c7a
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_kyle.c
@@ -0,0 +1,49 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = { /* Qwerty */
5 {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
6 {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
7 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
8 {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
9 // Space is repeated to accommadate for both spacebar wiring positions
10},
11[1] = { /* Colemak */
12 {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
13 {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
14 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
15 {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
16},
17[2] = { /* RAISE */
18 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
19 {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
20 {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS},
21 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
22},
23[3] = { /* LOWER */
24 {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
25 {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), LSFT(RSFT(KC_D)), KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
26 {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
27 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
28}
29};
30
31const uint16_t PROGMEM fn_actions[] = {
32 [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
33 [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
34
35 [3] = ACTION_DEFAULT_LAYER_SET(0),
36 [4] = ACTION_DEFAULT_LAYER_SET(1),
37
38};
39
40const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
41{
42 // MACRODOWN only works in this function
43 switch(id) {
44 case 0:
45 return MACRODOWN(T(CM_T), END);
46 break;
47 }
48 return MACRO_NONE;
49};
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_numpad.c b/keyboard/atomic/extended_keymaps/extended_keymap_numpad.c
new file mode 100644
index 000000000..721fd496b
--- /dev/null
+++ b/keyboard/atomic/extended_keymaps/extended_keymap_numpad.c
@@ -0,0 +1,26 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = { /* Qwerty */
5 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_MINUS, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_KP_ENTER},
6 {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_ASTERISK, KC_KP_9, KC_KP_6, KC_KP_3, KC_KP_DOT},
7 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_SLASH, KC_KP_8, KC_KP_5, KC_KP_2, KC_KP_0},
8 {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, KC_NUMLOCK, KC_KP_7, KC_KP_4, KC_KP_1, KC_KP_0}
9 // Space is repeated to accommadate for both spacebar wiring positions
10}
11};
12
13const uint16_t PROGMEM fn_actions[] = {
14
15};
16
17const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
18{
19 // MACRODOWN only works in this function
20 switch(id) {
21 case 0:
22 return MACRODOWN(T(CM_T), END);
23 break;
24 }
25 return MACRO_NONE;
26}; \ No newline at end of file
diff --git a/keyboard/atomic/flash-pcb.sh b/keyboard/atomic/flash-pcb.sh
new file mode 100755
index 000000000..2ae15458c
--- /dev/null
+++ b/keyboard/atomic/flash-pcb.sh
@@ -0,0 +1,3 @@
1dfu-programmer atmega32u4 erase --force
2dfu-programmer atmega32u4 flash planck_pcb.hex
3dfu-programmer atmega32u4 reset \ No newline at end of file
diff --git a/keyboard/atomic/matrix_center.c b/keyboard/atomic/matrix_center.c
new file mode 100644
index 000000000..7047f018b
--- /dev/null
+++ b/keyboard/atomic/matrix_center.c
@@ -0,0 +1,269 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18/*
19 * scan matrix
20 */
21#include <stdint.h>
22#include <stdbool.h>
23#include <avr/io.h>
24#include <util/delay.h>
25#include "action_layer.h"
26#include "print.h"
27#include "debug.h"
28#include "util.h"
29#include "matrix.h"
30#include "analog.h"
31
32
33#ifndef DEBOUNCE
34# define DEBOUNCE 10
35#endif
36static uint8_t debouncing = DEBOUNCE;
37
38/* matrix state(1:on, 0:off) */
39static matrix_row_t matrix[MATRIX_ROWS];
40static matrix_row_t matrix_debouncing[MATRIX_ROWS];
41
42static matrix_row_t read_cols(void);
43static void init_cols(void);
44static void init_encoder(void);
45static void init_pot(void);
46static void unselect_rows(void);
47static void select_row(uint8_t row);
48int16_t analogRead(uint8_t pin);
49uint8_t state;
50int32_t position;
51int16_t value;
52
53inline
54uint8_t matrix_rows(void)
55{
56 return MATRIX_ROWS;
57}
58
59inline
60uint8_t matrix_cols(void)
61{
62 return MATRIX_COLS;
63}
64
65void matrix_init(void)
66{
67 // initialize row and col
68 unselect_rows();
69 init_cols();
70 init_encoder();
71 init_pot();
72
73 // initialize matrix state: all keys off
74 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
75 matrix[i] = 0;
76 matrix_debouncing[i] = 0;
77 }
78}
79
80static void init_encoder(void)
81{
82 DDRC &= ~(1<<6 | 1<<7);
83 PORTC |= (1<<6 | 1<<7);
84
85 uint8_t s = 0;
86 _delay_ms(1);
87 if (PINC&(1<<6)) s |= 1;
88 if (PINC&(1<<7)) s |= 2;
89 state = s;
90 position = 0;
91}
92
93void read_encoder(void)
94{
95 uint8_t s = state & 3;
96 if (PINC&(1<<6)) s |= 4;
97 if (PINC&(1<<7)) s |= 8;
98 state = (s >> 2);
99 switch (s) {
100 case 1: case 7: case 8: case 14:
101 position++;
102 break;
103 case 2: case 4: case 11: case 13:
104 position--;
105 break;
106 case 3: case 12:
107 position += 2;
108 break;
109 case 6: case 9:
110 position -= 2;
111 break;
112 }
113}
114
115#define HEX(n) (((n) < 10) ? ((n) + '0') : ((n) + 'A' - 10))
116
117static void init_pot(void)
118{
119 // DDRD &= ~(1<<4);
120 // PORTD |= (1<<4);
121 // DIDR2 = (1<<0);
122}
123
124uint8_t matrix_scan(void)
125{
126 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
127 select_row(i);
128 _delay_us(30); // without this wait read unstable value.
129 matrix_row_t cols = read_cols();
130 if (matrix_debouncing[i] != cols) {
131 matrix_debouncing[i] = cols;
132 if (debouncing) {
133 debug("bounce!: "); debug_hex(debouncing); debug("\n");
134 }
135 debouncing = DEBOUNCE;
136 }
137 unselect_rows();
138 }
139
140 if (debouncing) {
141 if (--debouncing) {
142 _delay_ms(1);
143 } else {
144 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
145 matrix[i] = matrix_debouncing[i];
146 }
147 }
148 }
149
150 read_encoder();
151 if (position >= 2) {
152 register_code(KC_AUDIO_VOL_UP);
153 unregister_code(KC_AUDIO_VOL_UP);
154 position = 0;
155 } else if (position <= -2) {
156 register_code(KC_AUDIO_VOL_DOWN);
157 unregister_code(KC_AUDIO_VOL_DOWN);
158 position = 0;
159 }
160
161 uint16_t val = analogRead(11);
162
163 debug("analogRead: "); debug_hex(val); debug("\n");
164
165 return 1;
166}
167
168bool matrix_is_modified(void)
169{
170 if (debouncing) return false;
171 return true;
172}
173
174inline
175bool matrix_is_on(uint8_t row, uint8_t col)
176{
177 return (matrix[row] & ((matrix_row_t)1<<col));
178}
179
180inline
181matrix_row_t matrix_get_row(uint8_t row)
182{
183 return matrix[row];
184}
185
186void matrix_print(void)
187{
188 print("\nr/c 0123456789ABCDEF\n");
189 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
190 phex(row); print(": ");
191 pbin_reverse16(matrix_get_row(row));
192 print("\n");
193 }
194}
195
196uint8_t matrix_key_count(void)
197{
198 uint8_t count = 0;
199 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
200 count += bitpop16(matrix[i]);
201 }
202 return count;
203}
204
205/* Column pin configuration
206 * col: 0 1 2 3 4 5 6 7 8 9 10 11
207 * pin: F0 F1 F4 F5 F6 F7 B6 B5 B4 D7 D5 D4
208 */
209
210static void init_cols(void)
211{
212 DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
213 PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
214 DDRD &= ~(1<<0);
215 PORTD |= (1<<0);
216 DDRB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7);
217 PORTB |= (1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7);
218}
219
220static matrix_row_t read_cols(void)
221{
222 return (PINB&(1<<0) ? 0 : (1<< 0)) |
223 (PINB&(1<<1) ? 0 : (1<< 1)) |
224 (PINB&(1<<2) ? 0 : (1<< 2)) |
225 (PINB&(1<<3) ? 0 : (1<< 3)) |
226 (PINB&(1<<7) ? 0 : (1<< 4)) |
227 (PIND&(1<<0) ? 0 : (1<< 5)) |
228 (PINF&(1<<7) ? 0 : (1<< 6)) |
229 (PINF&(1<<6) ? 0 : (1<< 7)) |
230 (PINF&(1<<5) ? 0 : (1<< 8)) |
231 (PINF&(1<<4) ? 0 : (1<< 9)) |
232 (PINF&(1<<1) ? 0 : (1<<10)) |
233 (PINF&(1<<0) ? 0 : (1<<11));
234}
235
236/* Row pin configuration
237 * row: 0 1 2 3
238 * pin: B0 B1 B2 B3
239 */
240static void unselect_rows(void)
241{
242 // Hi-Z(DDR:0, PORT:0) to unselect
243 DDRB &= ~0b01110000;
244 PORTB &= ~0b01110000;
245 DDRD &= ~0b10000000;
246 PORTD &= ~0b10000000;
247}
248
249static void select_row(uint8_t row)
250{
251 switch (row) {
252 case 0:
253 DDRB |= (1<<6);
254 PORTB &= ~(1<<6);
255 break;
256 case 1:
257 DDRB |= (1<<5);
258 PORTB &= ~(1<<5);
259 break;
260 case 2:
261 DDRB |= (1<<4);
262 PORTB &= ~(1<<4);
263 break;
264 case 3:
265 DDRD |= (1<<7);
266 PORTD &= ~(1<<7);
267 break;
268 }
269}
diff --git a/keyboard/atomic/matrix_pcb.c b/keyboard/atomic/matrix_pcb.c
new file mode 100644
index 000000000..47fb459a8
--- /dev/null
+++ b/keyboard/atomic/matrix_pcb.c
@@ -0,0 +1,231 @@
1/*
2Copyright 2012 Jun Wako
3Generated by planckkeyboard.com (2014 Jack Humbert)
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 2 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19/*
20 * scan matrix
21 */
22#include <stdint.h>
23#include <stdbool.h>
24#include <avr/io.h>
25#include <util/delay.h>
26#include "print.h"
27#include "debug.h"
28#include "util.h"
29#include "matrix.h"
30#include "backlight.h" // TODO fix this dependency
31
32
33#ifndef DEBOUNCE
34# define DEBOUNCE 10
35#endif
36static uint8_t debouncing = DEBOUNCE;
37
38/* matrix state(1:on, 0:off) */
39static matrix_row_t matrix[MATRIX_ROWS];
40static matrix_row_t matrix_debouncing[MATRIX_ROWS];
41
42static matrix_row_t read_cols(void);
43static void init_cols(void);
44static void unselect_rows(void);
45static void select_row(uint8_t row);
46
47inline
48uint8_t matrix_rows(void)
49{
50 return MATRIX_ROWS;
51}
52
53inline
54uint8_t matrix_cols(void)
55{
56 return MATRIX_COLS;
57}
58
59void matrix_init(void)
60{
61 // To use PORTF disable JTAG with writing JTD bit twice within four cycles.
62 MCUCR |= (1<<JTD);
63 MCUCR |= (1<<JTD);
64
65 backlight_init_ports();
66
67 // Turn status LED on
68 DDRE |= (1<<6);
69 PORTE |= (1<<6);
70
71 // initialize row and col
72 unselect_rows();
73 init_cols();
74
75 // initialize matrix state: all keys off
76 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
77 matrix[i] = 0;
78 matrix_debouncing[i] = 0;
79 }
80}
81
82uint8_t matrix_scan(void)
83{
84 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
85 select_row(i);
86 _delay_us(30); // without this wait read unstable value.
87 matrix_row_t cols = read_cols();
88 if (matrix_debouncing[i] != cols) {
89 matrix_debouncing[i] = cols;
90 if (debouncing) {
91 debug("bounce!: "); debug_hex(debouncing); debug("\n");
92 }
93 debouncing = DEBOUNCE;
94 }
95 unselect_rows();
96 }
97
98 if (debouncing) {
99 if (--debouncing) {
100 _delay_ms(1);
101 } else {
102 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
103 matrix[i] = matrix_debouncing[i];
104 }
105 }
106 }
107
108 return 1;
109}
110
111bool matrix_is_modified(void)
112{
113 if (debouncing) return false;
114 return true;
115}
116
117inline
118bool matrix_is_on(uint8_t row, uint8_t col)
119{
120 return (matrix[row] & ((matrix_row_t)1<col));
121}
122
123inline
124matrix_row_t matrix_get_row(uint8_t row)
125{
126 return matrix[row];
127}
128
129void matrix_print(void)
130{
131 print("\nr/c 0123456789ABCDEF\n");
132 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
133 phex(row); print(": ");
134 pbin_reverse16(matrix_get_row(row));
135 print("\n");
136 }
137}
138
139uint8_t matrix_key_count(void)
140{
141 uint8_t count = 0;
142 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
143 count += bitpop16(matrix[i]);
144 }
145 return count;
146}
147
148//
149// Atomic PCB Rev 0 Pin Assignments
150//
151// Column: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
152// Pin: F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1
153//
154
155static void init_cols(void)
156{
157 DDRB &= ~(1<<4 | 1<<0);
158 PORTB |= (1<<4 | 1<<0);
159 DDRC &= ~(1<<7);
160 PORTC |= (1<<7);
161 DDRD &= ~(1<<7 | 1<<6 | 1<<4 | 1<<2 | 1<<3 | 1<<1);
162 PORTD |= (1<<7 | 1<<6 | 1<<4 | 1<<2 | 1<<3 | 1<<1);
163 DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
164 PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
165
166}
167
168static matrix_row_t read_cols(void)
169{
170 return (PINF&(1<<1) ? 0 : (1<<0)) |
171 (PINF&(1<<0) ? 0 : (1<<1)) |
172 (PINB&(1<<0) ? 0 : (1<<2)) |
173 (PINC&(1<<7) ? 0 : (1<<3)) |
174 (PINF&(1<<4) ? 0 : (1<<4)) |
175 (PINF&(1<<5) ? 0 : (1<<5)) |
176 (PINF&(1<<6) ? 0 : (1<<6)) |
177 (PINF&(1<<7) ? 0 : (1<<7)) |
178 (PIND&(1<<4) ? 0 : (1<<8)) |
179 (PIND&(1<<6) ? 0 : (1<<9)) |
180 (PINB&(1<<4) ? 0 : (1<<10)) |
181 (PIND&(1<<7) ? 0 : (1<<11)) |
182 (PIND&(1<<3) ? 0 : (1<<12)) |
183 (PIND&(1<<2) ? 0 : (1<<13)) |
184 (PIND&(1<<1) ? 0 : (1<<14));
185
186}
187
188static void unselect_rows(void)
189{
190 DDRB &= ~(1<<5 | 1<<6);
191 PORTB |= (1<<5 | 1<<6);
192 DDRD &= ~(1<<0 | 1<<5);
193 PORTD |= (1<<0 | 1<<5);
194 DDRC &= ~(1<<6);
195 PORTC |= (1<<6);
196
197}
198
199//
200// Atomic PCB Rev 0 Pin Assignments
201//
202// Row: 0, 1, 2, 3, 4
203// Pin: D0, D5, B5, B6, C6
204//
205
206static void select_row(uint8_t row)
207{
208 switch (row) {
209 case 0:
210 DDRD |= (1<<0);
211 PORTD &= ~(1<<0);
212 break;
213 case 1:
214 DDRD |= (1<<5);
215 PORTD &= ~(1<<5);
216 break;
217 case 2:
218 DDRB |= (1<<5);
219 PORTB &= ~(1<<5);
220 break;
221 case 3:
222 DDRB |= (1<<6);
223 PORTB &= ~(1<<6);
224 break;
225 case 4:
226 DDRC |= (1<<6);
227 PORTC &= ~(1<<6);
228 break;
229
230 }
231} \ No newline at end of file