aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2015-10-30 00:48:17 -0400
committerJack Humbert <jack.humb@gmail.com>2015-10-30 00:48:17 -0400
commiteb2795b4d649f062430c859012bc6bd8faa847ff (patch)
tree2ee3a8fc53542aa16f1632904d8be3f052895cd4
parent3ac4f1519fbc90d2357c92cfd00557bdfc024e54 (diff)
downloadqmk_firmware-eb2795b4d649f062430c859012bc6bd8faa847ff.tar.gz
qmk_firmware-eb2795b4d649f062430c859012bc6bd8faa847ff.zip
atomic up-to-date
-rw-r--r--keyboard/atomic/Makefile56
-rw-r--r--keyboard/atomic/Makefile.pjrc116
-rw-r--r--keyboard/atomic/PCB_GUIDE.md110
-rw-r--r--keyboard/atomic/README.md199
-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/backlight.c22
-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/config.h14
-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_abienz.c36
-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
-rw-r--r--keyboard/atomic/keymap_common.c30
-rw-r--r--keyboard/atomic/keymap_common.h130
-rw-r--r--keyboard/atomic/keymap_grid.c40
-rw-r--r--keyboard/atomic/led.c38
-rw-r--r--keyboard/atomic/matrix.c227
-rw-r--r--keyboard/atomic/matrix_center.c269
-rw-r--r--keyboard/atomic/matrix_pcb.c231
-rw-r--r--keyboard/atomic_old/Makefile135
-rw-r--r--keyboard/atomic_old/Makefile.pjrc116
-rw-r--r--keyboard/atomic_old/README 2.md141
-rw-r--r--keyboard/atomic_old/config.h70
-rw-r--r--keyboard/atomic_old/keymap_common.c30
-rw-r--r--keyboard/atomic_old/keymap_common.h87
-rw-r--r--keyboard/atomic_old/keymap_plain.c46
-rw-r--r--keyboard/atomic_old/keymap_ricky.c15
-rw-r--r--keyboard/atomic_old/keymap_vlad.c14
-rw-r--r--keyboard/atomic_old/led.c25
-rw-r--r--keyboard/atomic_old/matrix.c211
-rw-r--r--quantum/template/README.md184
53 files changed, 368 insertions, 4193 deletions
diff --git a/keyboard/atomic/Makefile b/keyboard/atomic/Makefile
index 02153214f..e678b4efa 100644
--- a/keyboard/atomic/Makefile
+++ b/keyboard/atomic/Makefile
@@ -39,52 +39,24 @@
39#---------------------------------------------------------------------------- 39#----------------------------------------------------------------------------
40 40
41# Target file name (without extension). 41# Target file name (without extension).
42TARGET = atomic_lufa 42TARGET = atomic
43
43 44
44# Directory common source filess exist 45# Directory common source filess exist
45TOP_DIR = ../.. 46TOP_DIR = ../..
47TMK_DIR = ../../tmk_core
46 48
47# Directory keyboard dependent files exist 49# Directory keyboard dependent files exist
48TARGET_DIR = . 50TARGET_DIR = .
49 51
50# # project specific files 52# # project specific files
51ifdef COMMON 53SRC = atomic.c \
52 54 backlight.c
53 SRC = keymap_common.c \
54 led.c \
55 backlight.c
56 55
57ifdef KEYMAP 56ifdef KEYMAP
58 SRC := common_keymaps/keymap_$(KEYMAP).c $(SRC) 57 SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
59else
60 SRC := common_keymaps/keymap_jack.c $(SRC)
61endif
62
63ifdef MATRIX
64 SRC := matrix_$(MATRIX).c $(SRC)
65else 58else
66 SRC := matrix_pcb.c $(SRC) 59 SRC := keymaps/keymap_default.c $(SRC)
67endif
68
69else
70
71SRC = extended_keymap_common.c \
72 analog.c \
73 led.c \
74 backlight.c
75
76ifdef KEYMAP
77 SRC := extended_keymaps/extended_keymap_$(KEYMAP).c $(SRC)
78else
79 SRC := extended_keymaps/extended_keymap_default.c $(SRC)
80endif
81
82ifdef MATRIX
83 SRC := matrix_$(MATRIX).c $(SRC)
84else
85 SRC := matrix_pcb.c $(SRC)
86endif
87
88endif 60endif
89 61
90CONFIG_H = config.h 62CONFIG_H = config.h
@@ -148,9 +120,13 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
148CONSOLE_ENABLE = yes # Console for debug(+400) 120CONSOLE_ENABLE = yes # Console for debug(+400)
149COMMAND_ENABLE = yes # Commands for debug and configuration 121COMMAND_ENABLE = yes # Commands for debug and configuration
150# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE 122# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
151#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend 123# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
152NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA 124# NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
153BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality 125BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
126# MIDI_ENABLE = YES # MIDI controls
127# UNICODE_ENABLE = YES # Unicode
128# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
129
154 130
155# Optimize size but this may cause error "relocation truncated to fit" 131# Optimize size but this may cause error "relocation truncated to fit"
156#EXTRALDFLAGS = -Wl,--relax 132#EXTRALDFLAGS = -Wl,--relax
@@ -158,7 +134,7 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
158# Search Path 134# Search Path
159VPATH += $(TARGET_DIR) 135VPATH += $(TARGET_DIR)
160VPATH += $(TOP_DIR) 136VPATH += $(TOP_DIR)
137VPATH += $(TMK_DIR)
138
139include $(TOP_DIR)/quantum/quantum.mk
161 140
162include $(TOP_DIR)/protocol/lufa.mk
163include $(TOP_DIR)/common.mk
164include $(TOP_DIR)/rules.mk
diff --git a/keyboard/atomic/Makefile.pjrc b/keyboard/atomic/Makefile.pjrc
deleted file mode 100644
index be83ba18b..000000000
--- a/keyboard/atomic/Makefile.pjrc
+++ /dev/null
@@ -1,116 +0,0 @@
1#----------------------------------------------------------------------------
2# On command line:
3#
4# make all = Make software.
5#
6# make clean = Clean out built project files.
7#
8# make coff = Convert ELF to AVR COFF.
9#
10# make extcoff = Convert ELF to AVR Extended COFF.
11#
12# make program = Download the hex file to the device.
13# Please customize your programmer settings(PROGRAM_CMD)
14#
15# make teensy = Download the hex file to the device, using teensy_loader_cli.
16# (must have teensy_loader_cli installed).
17#
18# make dfu = Download the hex file to the device, using dfu-programmer (must
19# have dfu-programmer installed).
20#
21# make flip = Download the hex file to the device, using Atmel FLIP (must
22# have Atmel FLIP installed).
23#
24# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
25# (must have dfu-programmer installed).
26#
27# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
28# (must have Atmel FLIP installed).
29#
30# make debug = Start either simulavr or avarice as specified for debugging,
31# with avr-gdb or avr-insight as the front end for debugging.
32#
33# make filename.s = Just compile filename.c into the assembler code only.
34#
35# make filename.i = Create a preprocessed source file for use in submitting
36# bug reports to the GCC project.
37#
38# To rebuild project do "make clean" then "make all".
39#----------------------------------------------------------------------------
40
41# Target file name (without extension).
42TARGET = gh60_pjrc
43
44# Directory common source filess exist
45TOP_DIR = ../..
46
47# Directory keyboard dependent files exist
48TARGET_DIR = .
49
50# project specific files
51SRC = keymap_common.c \
52 matrix.c \
53 led.c
54
55ifdef KEYMAP
56 SRC := keymap_$(KEYMAP).c $(SRC)
57else
58 SRC := keymap_jack.c $(SRC)
59endif
60
61CONFIG_H = config.h
62
63
64# MCU name, you MUST set this to match the board you are using
65# type "make clean" after changing this, so all files will be rebuilt
66MCU = atmega32u4
67#MCU = at90usb1286
68
69
70# Processor frequency.
71# Normally the first thing your program should do is set the clock prescaler,
72# so your program will run at the correct speed. You should also set this
73# variable to same clock speed. The _delay_ms() macro uses this, and many
74# examples use this variable to calculate timings. Do not add a "UL" here.
75F_CPU = 16000000
76
77
78# Boot Section Size in *bytes*
79# Teensy halfKay 512
80# Atmel DFU loader 4096
81# LUFA bootloader 4096
82OPT_DEFS += -DBOOTLOADER_SIZE=4096
83
84
85# Build Options
86# comment out to disable the options.
87#
88BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
89MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
90EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
91CONSOLE_ENABLE = yes # Console for debug
92COMMAND_ENABLE = yes # Commands for debug and configuration
93SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
94NKRO_ENABLE = yes # USB Nkey Rollover(+500)
95#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
96
97
98# Search Path
99VPATH += $(TARGET_DIR)
100VPATH += $(TOP_DIR)
101
102include $(TOP_DIR)/protocol/pjrc.mk
103include $(TOP_DIR)/common.mk
104include $(TOP_DIR)/rules.mk
105
106plain: OPT_DEFS += -DKEYMAP_PLAIN
107plain: all
108
109poker: OPT_DEFS += -DKEYMAP_POKER
110poker: all
111
112poker_set: OPT_DEFS += -DKEYMAP_POKER_SET
113poker_set: all
114
115poker_bit: OPT_DEFS += -DKEYMAP_POKER_BIT
116poker_bit: all
diff --git a/keyboard/atomic/PCB_GUIDE.md b/keyboard/atomic/PCB_GUIDE.md
deleted file mode 100644
index 833e144b3..000000000
--- a/keyboard/atomic/PCB_GUIDE.md
+++ /dev/null
@@ -1,110 +0,0 @@
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
index 3ddaed3a3..5e6727015 100644
--- a/keyboard/atomic/README.md
+++ b/keyboard/atomic/README.md
@@ -2,55 +2,180 @@ Atomic keyboard firmware
2====================== 2======================
3DIY/Assembled ortholinear 60% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). 3DIY/Assembled ortholinear 60% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
4 4
5## Extended Keymap 5## Quantum MK Firmware
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:t
7 6
8- Use `LSFT()`, `LCTL()`, et. al. (listed in extended_keymap_common.h) as modifiers for keys (daisy-chain-able) 7You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
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 8
13### Some notes on usage: 9 BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
10 MIDI_ENABLE = yes # MIDI controls
11 # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not //
12 BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
14 13
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 14## Quick aliases to common actions
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 15
19## Build 16Your keymap can include shortcuts to common operations (called "function actions" in tmk).
20 17
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) 18### Switching and toggling layers
22 19
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). 20`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
24 21
25Depending on which keymap you would like to use, you will have to compile slightly differently. 22`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
26 23
27####Default 24`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
28To build with the default keymap, simply move to the tmk\_keyboard/keyboard/planck/ and run `make` as follows:
29```
30$ make
31```
32 25
33## Keymap 26### Fun with modifier keys
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 27
38To build the firmware binary hex file with an extended keymap just do `make` with `KEYMAP` option like: 28* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
39``` 29* `RSFT(kc)` - applies right Shift to *kc*
40$ make KEYMAP=[common|jack|<name>] 30* `LCTL(kc)` - applies left Control to *kc*
31* `RCTL(kc)` - applies right Control to *kc*
32* `LALT(kc)` - applies left Alt to *kc*
33* `RALT(kc)` - applies right Alt to *kc*
34* `LGUI(kc)` - applies left GUI (command/win) to *kc*
35* `RGUI(kc)` - applies right GUI (command/win) to *kc*
36
37You can also chain these, like this:
38
39 LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
40
41The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
42
43 KC_TILD ~
44 KC_EXLM !
45 KC_AT @
46 KC_HASH #
47 KC_DLR $
48 KC_PERC %
49 KC_CIRC ^
50 KC_AMPR &
51 KC_ASTR *
52 KC_LPRN (
53 KC_RPRN )
54 KC_UNDS _
55 KC_PLUS +
56 KC_LCBR {
57 KC_RCBR }
58 KC_PIPE |
59 KC_COLN :
60
61`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
62
63These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available):
64
65 * MOD_LCTL
66 * MOD_LSFT
67 * MOD_LALT
68 * MOD_LGUI
69
70These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
71
72We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
73
74 * `CTL_T(kc)` - is LCTL when held and *kc* when tapped
75 * `SFT_T(kc)` - is LSFT when held and *kc* when tapped
76 * `ALT_T(kc)` - is LALT when held and *kc* when tapped
77 * `GUI_T(kc)` - is LGUI when held and *kc* when tapped
78 * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
79
80### Temporarily setting the default layer
81
82`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
83
84### Remember: These are just aliases
85
86These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
87
88Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
89
90## Macro shortcuts: Send a whole string when pressing just one key
91
92Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
93
94```c
95const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
96{
97 switch(id) {
98 case 0: // this would trigger when you hit a key mapped as M(0)
99 if (record->event.pressed) {
100 return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
101 }
102 break;
103 }
104 return MACRO_NONE;
105};
41``` 106```
42_The only applicable keymaps will work with this option._ Extended keymaps follow the format **__extended\_keymap\_\<name\>.c__** 107A macro can include the following commands:
108
109* I() change interval of stroke in milliseconds.
110* D() press key.
111* U() release key.
112* T() type key(press and release).
113* W() wait (milliseconds).
114* END end mark.
115
116So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
43 117
44####**Common Keymaps** 118Note: Using macros to have your keyboard send passwords for you is a bad idea.
45 119
46Building with a common keymap is as simple as adding the COMMON option. Note that only 120### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
121
122Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
123
124 #include "keymap_<layout>.h"
125
126Where <layout> is "colemak" or "dvorak". After including this line, you will get access to:
127
128 * `CM_*` for all of the Colemak-equivalent characters
129 * `DV_*` for all of the Dvorak-equivalent characters
130
131These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
132
133To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
134
135## Additional language support
136
137In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `รน` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
138
139## Unicode support
140
141You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
142
143## Other firmware shortcut keycodes
144
145* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
146* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
147* `BL_ON` - turns the backlight on
148* `BL_OFF` - turns the backlight off
149* `BL_<n>` - sets the backlight to level *n*
150* `BL_INC` - increments the backlight level by one
151* `BL_DEC` - decrements the backlight level by one
152* `BL_TOGG` - toggles the backlight
153* `BL_STEP` - steps through the backlight levels
154
155Enable the backlight from the Makefile.
156
157## MIDI functionalty
158
159This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
160
161## Bluetooth functionality
162
163This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
164
165## Building
166
167Download or clone the whole firmware and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
168
169Depending on which keymap you would like to use, you will have to compile slightly differently.
170
171### Default
172To build with the default keymap, simply run `make`.
173
174### Other Keymaps
175Several 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.
176
177To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
47``` 178```
48$ make KEYMAP=[common|jack|<name>] COMMON=true 179$ make KEYMAP=[default|jack|<name>]
49``` 180```
50_The only applicable keymaps will work with this option._ Common keymaps follow the format **__keymap\_\<name\>.c__** 181Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder.
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
deleted file mode 100644
index afc51e6d1..000000000
--- a/keyboard/atomic/__avr_gdbinit
+++ /dev/null
@@ -1,6 +0,0 @@
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
deleted file mode 100644
index 49b84ee0e..000000000
--- a/keyboard/atomic/analog.c
+++ /dev/null
@@ -1,53 +0,0 @@
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
deleted file mode 100644
index 9b95a93be..000000000
--- a/keyboard/atomic/analog.h
+++ /dev/null
@@ -1,36 +0,0 @@
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/backlight.c b/keyboard/atomic/backlight.c
index 06f103b4a..f69364b2a 100644
--- a/keyboard/atomic/backlight.c
+++ b/keyboard/atomic/backlight.c
@@ -36,14 +36,26 @@ void backlight_set(uint8_t level)
36 { 36 {
37 // Turn off PWM control on PB7, revert to output low. 37 // Turn off PWM control on PB7, revert to output low.
38 TCCR1A &= ~(_BV(COM1C1)); 38 TCCR1A &= ~(_BV(COM1C1));
39 // CHANNEL = level << OFFSET | 0x0FFF; 39 CHANNEL = 0x0;
40 CHANNEL = ((1 << level) - 1); 40 // Prevent backlight blink on lowest level
41 PORTB &= ~(_BV(PORTB7));
41 } 42 }
42 else 43 else if ( level == BACKLIGHT_LEVELS )
43 { 44 {
45 // Prevent backlight blink on lowest level
46 PORTB &= ~(_BV(PORTB7));
44 // Turn on PWM control of PB7 47 // Turn on PWM control of PB7
45 TCCR1A |= _BV(COM1C1); 48 TCCR1A |= _BV(COM1C1);
46 // CHANNEL = level << OFFSET | 0x0FFF; 49 // Set the brightness
47 CHANNEL = ((1 << level) - 1); 50 CHANNEL = 0xFFFF;
51 }
52 else
53 {
54 // Prevent backlight blink on lowest level
55 PORTB &= ~(_BV(PORTB7));
56 // Turn on PWM control of PB7
57 TCCR1A |= _BV(COM1C1);
58 // Set the brightness
59 CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
48 } 60 }
49} \ No newline at end of file 61} \ No newline at end of file
diff --git a/keyboard/atomic/common_keymaps/keymap_brett.c b/keyboard/atomic/common_keymaps/keymap_brett.c
deleted file mode 100644
index 97d832b47..000000000
--- a/keyboard/atomic/common_keymaps/keymap_brett.c
+++ /dev/null
@@ -1,42 +0,0 @@
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
deleted file mode 100644
index 347f6dea9..000000000
--- a/keyboard/atomic/common_keymaps/keymap_dotcom.c
+++ /dev/null
@@ -1,34 +0,0 @@
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
deleted file mode 100644
index c74812121..000000000
--- a/keyboard/atomic/common_keymaps/keymap_jack.c
+++ /dev/null
@@ -1,50 +0,0 @@
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
deleted file mode 100644
index 598b0c455..000000000
--- a/keyboard/atomic/common_keymaps/keymap_joe.c
+++ /dev/null
@@ -1,83 +0,0 @@
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
deleted file mode 100644
index 56e7003a9..000000000
--- a/keyboard/atomic/common_keymaps/keymap_matthew.c
+++ /dev/null
@@ -1,70 +0,0 @@
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
deleted file mode 100644
index 5a0900b66..000000000
--- a/keyboard/atomic/common_keymaps/keymap_nathan.c
+++ /dev/null
@@ -1,153 +0,0 @@
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
deleted file mode 100644
index ddacb614e..000000000
--- a/keyboard/atomic/common_keymaps/keymap_peasant.c
+++ /dev/null
@@ -1,51 +0,0 @@
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
deleted file mode 100644
index 1aa24e10d..000000000
--- a/keyboard/atomic/common_keymaps/keymap_reed.c
+++ /dev/null
@@ -1,74 +0,0 @@
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
deleted file mode 100644
index 4fe07f701..000000000
--- a/keyboard/atomic/common_keymaps/keymap_sean.c
+++ /dev/null
@@ -1,57 +0,0 @@
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
deleted file mode 100644
index 8d5ad6875..000000000
--- a/keyboard/atomic/common_keymaps/keymap_shane.c
+++ /dev/null
@@ -1,98 +0,0 @@
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
deleted file mode 100644
index 37951364b..000000000
--- a/keyboard/atomic/common_keymaps/keymap_simon.c
+++ /dev/null
@@ -1,44 +0,0 @@
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
deleted file mode 100644
index 7444f3877..000000000
--- a/keyboard/atomic/common_keymaps/keymap_tim.c
+++ /dev/null
@@ -1,44 +0,0 @@
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
deleted file mode 100644
index 9781f8fcd..000000000
--- a/keyboard/atomic/common_keymaps/keymap_wilba.c
+++ /dev/null
@@ -1,56 +0,0 @@
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/config.h b/keyboard/atomic/config.h
index fd286bb99..149aed471 100644
--- a/keyboard/atomic/config.h
+++ b/keyboard/atomic/config.h
@@ -18,25 +18,35 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
18#ifndef CONFIG_H 18#ifndef CONFIG_H
19#define CONFIG_H 19#define CONFIG_H
20 20
21#include "config_common.h"
21 22
22/* USB Device descriptor parameter */ 23/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED 24#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x6060 25#define PRODUCT_ID 0x6060
25#define DEVICE_VER 0x0001 26#define DEVICE_VER 0x0001
26#define MANUFACTURER Ortholinear Keyboards 27#define MANUFACTURER Ortholinear Keyboards
27#define PRODUCT Atomic 28#define PRODUCT The Atomic Keyboard
28#define DESCRIPTION A compact ortholinear keyboard 29#define DESCRIPTION A compact ortholinear keyboard
29 30
30/* key matrix size */ 31/* key matrix size */
31#define MATRIX_ROWS 5 32#define MATRIX_ROWS 5
32#define MATRIX_COLS 15 33#define MATRIX_COLS 15
33 34
35// Planck PCB default pin-out
36// Change this to how you wired your keyboard
37// COLS: Left to right, ROWS: Top to bottom
38#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 }
39#define ROWS (int []){ D0, D5, B5, B6, C6 }
40
41/* COL2ROW or ROW2COL */
42#define DIODE_DIRECTION COL2ROW
43
34/* define if matrix has ghost */ 44/* define if matrix has ghost */
35//#define MATRIX_HAS_GHOST 45//#define MATRIX_HAS_GHOST
36 46
37/* number of backlight levels */ 47/* number of backlight levels */
38/* NOTE: this is the max value of 0..BACKLIGHT_LEVELS so really 16 levels. */ 48/* NOTE: this is the max value of 0..BACKLIGHT_LEVELS so really 16 levels. */
39#define BACKLIGHT_LEVELS 15 49#define BACKLIGHT_LEVELS 3
40 50
41/* Set 0 if debouncing isn't needed */ 51/* Set 0 if debouncing isn't needed */
42#define DEBOUNCE 5 52#define DEBOUNCE 5
diff --git a/keyboard/atomic/extended_keymap_common.c b/keyboard/atomic/extended_keymap_common.c
deleted file mode 100644
index 841b24943..000000000
--- a/keyboard/atomic/extended_keymap_common.c
+++ /dev/null
@@ -1,208 +0,0 @@
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
deleted file mode 100644
index 21d8978b7..000000000
--- a/keyboard/atomic/extended_keymap_common.h
+++ /dev/null
@@ -1,177 +0,0 @@
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_abienz.c b/keyboard/atomic/extended_keymaps/extended_keymap_abienz.c
deleted file mode 100644
index 172009cbc..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_abienz.c
+++ /dev/null
@@ -1,36 +0,0 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = { /* Colemak */
5 { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO },
6 { KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
7 { KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT, KC_ENT, KC_NO, KC_PGUP },
8 { KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_RSFT, KC_NO, KC_UP, KC_PGDN },
9 { KC_LCTL, KC_LGUI, KC_NO, KC_LALT, FUNC(1), KC_SPC, KC_NO, KC_RALT, FUNC(2), KC_RGUI, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
10 },
11 [1] = { /* function */
12 { 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_NO },
13 { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
14 { KC_TRNS, KC_TRNS, KC_TRNS, KC_SLEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
15 { KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MPLY },
16 { KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, FUNC(1), KC_TRNS, KC_NO, KC_TRNS, FUNC(2), KC_TRNS, KC_NO, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT },
17 }
18};
19
20const uint16_t PROGMEM fn_actions[] = {
21 [1] = ACTION_LAYER_MOMENTARY(1),
22 [2] = ACTION_LAYER_MOMENTARY(1),
23
24};
25
26const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
27{
28 // MACRODOWN only works in this function
29 switch(id) {
30 case 0:
31 return MACRODOWN(T(CM_T), END);
32 break;
33 }
34 return MACRO_NONE;
35};
36
diff --git a/keyboard/atomic/extended_keymaps/extended_keymap_austin.c b/keyboard/atomic/extended_keymaps/extended_keymap_austin.c
deleted file mode 100644
index 35330be74..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_austin.c
+++ /dev/null
@@ -1,50 +0,0 @@
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
deleted file mode 100644
index 18657c8e4..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_charlie.c
+++ /dev/null
@@ -1,54 +0,0 @@
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
deleted file mode 100644
index d3565495f..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_daniel.c
+++ /dev/null
@@ -1,48 +0,0 @@
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
deleted file mode 100644
index ab08bb6d2..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_default.c
+++ /dev/null
@@ -1,79 +0,0 @@
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 { BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_RGUI, KC_RALT, KC_RCTL, BL_STEP, 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
deleted file mode 100644
index 6b3864b6c..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_dzobert.c
+++ /dev/null
@@ -1,49 +0,0 @@
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
deleted file mode 100644
index 8ad61646c..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_jack.c
+++ /dev/null
@@ -1,188 +0,0 @@
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
deleted file mode 100644
index 9de6cf396..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_joe.c
+++ /dev/null
@@ -1,90 +0,0 @@
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
deleted file mode 100644
index fc4569c7a..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_kyle.c
+++ /dev/null
@@ -1,49 +0,0 @@
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
deleted file mode 100644
index 721fd496b..000000000
--- a/keyboard/atomic/extended_keymaps/extended_keymap_numpad.c
+++ /dev/null
@@ -1,26 +0,0 @@
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/keymap_common.c b/keyboard/atomic/keymap_common.c
deleted file mode 100644
index fdb1769e1..000000000
--- a/keyboard/atomic/keymap_common.c
+++ /dev/null
@@ -1,30 +0,0 @@
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#include "keymap_common.h"
18
19
20/* translates key to keycode */
21uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
22{
23 return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
24}
25
26/* translates Fn keycode to action */
27action_t keymap_fn_to_action(uint8_t keycode)
28{
29 return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
30}
diff --git a/keyboard/atomic/keymap_common.h b/keyboard/atomic/keymap_common.h
deleted file mode 100644
index 7c167eb51..000000000
--- a/keyboard/atomic/keymap_common.h
+++ /dev/null
@@ -1,130 +0,0 @@
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#ifndef KEYMAP_COMMON_H
18#define KEYMAP_COMMON_H
19
20#include <stdint.h>
21#include <stdbool.h>
22#include <avr/pgmspace.h>
23#include "keycode.h"
24#include "action.h"
25#include "action_macro.h"
26#include "report.h"
27#include "host.h"
28#include "print.h"
29#include "debug.h"
30#include "keymap.h"
31
32
33extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
34extern const uint16_t fn_actions[];
35
36
37// MIT Layout
38/*
39 * ,-----------------------------------------------------------------------.
40 * | | | | | | | | | | | | |
41 * |-----------------------------------------------------------------------|
42 * | | | | | | | | | | | | |
43 * |-----------------------------------------------------------------------|
44 * | | | | | | | | | | | | |
45 * |-----------------------------------------------------------------------|
46 * | | | | | | | | | | | |
47 * `-----------------------------------------------------------------------'
48 */
49#define KEYMAP( \
50 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
51 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
52 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
53 K30, K31, K32, K33, K34, K35, K37, K38, K39, K3A, K3B \
54) { \
55 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B }, \
56 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B }, \
57 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B }, \
58 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K35, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B } \
59}
60
61// Grid Layout
62/*
63 * ,-----------------------------------------------------------------------.
64 * | | | | | | | | | | | | |
65 * |-----------------------------------------------------------------------|
66 * | | | | | | | | | | | | |
67 * |-----------------------------------------------------------------------|
68 * | | | | | | | | | | | | |
69 * |-----------------------------------------------------------------------|
70 * | | | | | | | | | | | | |
71 * `-----------------------------------------------------------------------'
72 */
73#define KEYMAP_GRID( \
74 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
75 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
76 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
77 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \
78) { \
79 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B }, \
80 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B }, \
81 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B }, \
82 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B } \
83}
84
85#define KEYMAP_REVERSE( \
86 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
87 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
88 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
89 K30, K31, K32, K33, K34, K35, K37, K38, K39, K3A, K3B \
90 ) { \
91 { KC_##K0B, KC_##K0A, KC_##K09, KC_##K08, KC_##K07, KC_##K06, KC_##K05, KC_##K04, KC_##K03, KC_##K02, KC_##K01, KC_##K00 }, \
92 { KC_##K1B, KC_##K1A, KC_##K19, KC_##K18, KC_##K17, KC_##K16, KC_##K15, KC_##K14, KC_##K13, KC_##K12, KC_##K11, KC_##K10 }, \
93 { KC_##K2B, KC_##K2A, KC_##K29, KC_##K28, KC_##K27, KC_##K26, KC_##K25, KC_##K24, KC_##K23, KC_##K22, KC_##K21, KC_##K20 }, \
94 { KC_##K3B, KC_##K3A, KC_##K39, KC_##K38, KC_##K37, KC_##K35, KC_##K35, KC_##K34, KC_##K33, KC_##K32, KC_##K31, KC_##K30 }, \
95 }
96
97#define KEYMAP_AND_REVERSE(args...) KEYMAP(args), KEYMAP_REVERSE(args)
98
99#define KEYMAP_SWAP( \
100 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
101 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
102 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
103 K30, K31, K32, K33, K34, K35, K37, K38, K39, K3A, K3B \
104 ) { \
105 { KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05 }, \
106 { KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15 }, \
107 { KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25 }, \
108 { KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K35, KC_##K35, KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34 }, \
109}
110
111#define KEYMAP_AND_SWAP(args...) KEYMAP(args), KEYMAP_SWAP(args)
112
113// GRD: Grid layout
114
115#define KEYMAP_GRD( \
116 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
117 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
118 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \
119 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
120 K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E \
121) { \
122 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E }, \
123 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E }, \
124 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E }, \
125 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E }, \
126 { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E } \
127}
128
129
130#endif
diff --git a/keyboard/atomic/keymap_grid.c b/keyboard/atomic/keymap_grid.c
deleted file mode 100644
index 9d42272e6..000000000
--- a/keyboard/atomic/keymap_grid.c
+++ /dev/null
@@ -1,40 +0,0 @@
1#include "keymap_common.h"
2
3// GRD: Grid layout
4
5const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
6 [0] = KEYMAP_GRD(FN29, FN30, FN31, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSLS, GRV, \
7 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSPC, DEL, \
8 CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, ENT, PGUP, \
9 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, RSFT, UP, PGDN, \
10 LCTL, LALT, LGUI, SPC, SPC, SPC, SPC, SPC, SPC, RALT, APP, RCTL, LEFT, DOWN, RGHT), \
11
12};
13const uint16_t PROGMEM fn_actions[] = {
14 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
15 [3] = ACTION_DEFAULT_LAYER_SET(0),
16 [4] = ACTION_DEFAULT_LAYER_SET(1),
17
18 [9] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
19
20 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
21 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
22 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
23 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
24 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
25 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
26 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
27 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
28 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
29 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
30 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
31 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
32 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
33 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
34 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
35 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
36
37 [29] = ACTION_BACKLIGHT_TOGGLE(),
38 [30] = ACTION_BACKLIGHT_INCREASE(),
39 [31] = ACTION_BACKLIGHT_DECREASE()
40};
diff --git a/keyboard/atomic/led.c b/keyboard/atomic/led.c
deleted file mode 100644
index 2c0574660..000000000
--- a/keyboard/atomic/led.c
+++ /dev/null
@@ -1,38 +0,0 @@
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#include <avr/io.h>
19#include "stdint.h"
20#include "led.h"
21
22
23void led_set(uint8_t usb_led)
24{
25 // // Using PE6 Caps Lock LED
26 // if (usb_led & (1<<USB_LED_CAPS_LOCK))
27 // {
28 // // Output high.
29 // DDRE |= (1<<6);
30 // PORTE |= (1<<6);
31 // }
32 // else
33 // {
34 // // Output low.
35 // DDRE &= ~(1<<6);
36 // PORTE &= ~(1<<6);
37 // }
38}
diff --git a/keyboard/atomic/matrix.c b/keyboard/atomic/matrix.c
deleted file mode 100644
index 01f66e90f..000000000
--- a/keyboard/atomic/matrix.c
+++ /dev/null
@@ -1,227 +0,0 @@
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
31
32#ifndef DEBOUNCE
33# define DEBOUNCE 10
34#endif
35static uint8_t debouncing = DEBOUNCE;
36
37/* matrix state(1:on, 0:off) */
38static matrix_row_t matrix[MATRIX_ROWS];
39static matrix_row_t matrix_debouncing[MATRIX_ROWS];
40
41static matrix_row_t read_cols(void);
42static void init_cols(void);
43static void unselect_rows(void);
44static void select_row(uint8_t row);
45
46inline
47uint8_t matrix_rows(void)
48{
49 return MATRIX_ROWS;
50}
51
52inline
53uint8_t matrix_cols(void)
54{
55 return MATRIX_COLS;
56}
57
58void matrix_init(void)
59{
60 // To use PORTF disable JTAG with writing JTD bit twice within four cycles.
61 MCUCR |= (1<<JTD);
62 MCUCR |= (1<<JTD);
63
64 backlight_init_ports();
65
66 // Turn status LED on
67 DDRE |= (1<<6);
68 PORTE |= (1<<6);
69
70 // initialize row and col
71 unselect_rows();
72 init_cols();
73
74 // initialize matrix state: all keys off
75 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
76 matrix[i] = 0;
77 matrix_debouncing[i] = 0;
78 }
79}
80
81uint8_t matrix_scan(void)
82{
83 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
84 select_row(i);
85 _delay_us(30); // without this wait read unstable value.
86 matrix_row_t cols = read_cols();
87 if (matrix_debouncing[i] != cols) {
88 matrix_debouncing[i] = cols;
89 if (debouncing) {
90 debug("bounce!: "); debug_hex(debouncing); debug("\n");
91 }
92 debouncing = DEBOUNCE;
93 }
94 unselect_rows();
95 }
96
97 if (debouncing) {
98 if (--debouncing) {
99 _delay_ms(1);
100 } else {
101 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
102 matrix[i] = matrix_debouncing[i];
103 }
104 }
105 }
106
107 return 1;
108}
109
110bool matrix_is_modified(void)
111{
112 if (debouncing) return false;
113 return true;
114}
115
116inline
117bool matrix_is_on(uint8_t row, uint8_t col)
118{
119 return (matrix[row] & ((matrix_row_t)1<col));
120}
121
122inline
123matrix_row_t matrix_get_row(uint8_t row)
124{
125 return matrix[row];
126}
127
128void matrix_print(void)
129{
130 print("\nr/c 0123456789ABCDEF\n");
131 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
132 phex(row); print(": ");
133 pbin_reverse16(matrix_get_row(row));
134 print("\n");
135 }
136}
137
138uint8_t matrix_key_count(void)
139{
140 uint8_t count = 0;
141 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
142 count += bitpop16(matrix[i]);
143 }
144 return count;
145}
146
147//
148// Atomic PCB Rev 0 Pin Assignments
149//
150// Column: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
151// Pin: F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1
152//
153
154static void init_cols(void)
155{
156 DDRB &= ~(1<<4 | 1<<0);
157 PORTB |= (1<<4 | 1<<0);
158 DDRC &= ~(1<<7);
159 PORTC |= (1<<7);
160 DDRD &= ~(1<<7 | 1<<6 | 1<<4 | 1<<3 | 1<<2 | 1<<1);
161 PORTD |= (1<<7 | 1<<6 | 1<<4 | 1<<3 | 1<<2 | 1<<1);
162 DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
163 PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
164}
165
166static matrix_row_t read_cols(void)
167{
168 return (PINF&(1<<1) ? 0 : (1<<0)) |
169 (PINF&(1<<0) ? 0 : (1<<1)) |
170 (PINB&(1<<0) ? 0 : (1<<2)) |
171 (PINC&(1<<7) ? 0 : (1<<3)) |
172 (PINF&(1<<4) ? 0 : (1<<4)) |
173 (PINF&(1<<5) ? 0 : (1<<5)) |
174 (PINF&(1<<6) ? 0 : (1<<6)) |
175 (PINF&(1<<7) ? 0 : (1<<7)) |
176 (PIND&(1<<4) ? 0 : (1<<8)) |
177 (PIND&(1<<6) ? 0 : (1<<9)) |
178 (PINB&(1<<4) ? 0 : (1<<10)) |
179 (PIND&(1<<7) ? 0 : (1<<11)) |
180 (PIND&(1<<3) ? 0 : (1<<12)) |
181 (PIND&(1<<2) ? 0 : (1<<13)) |
182 (PIND&(1<<1) ? 0 : (1<<14));
183}
184
185
186//
187// Atomic PCB Rev 0 Pin Assignments
188//
189// Row: 0, 1, 2, 3, 4
190// Pin: D0, D5, B5, B6, C6
191//
192
193static void unselect_rows(void)
194{
195 DDRB &= ~(1<<5 | 1<<6);
196 PORTB |= (1<<5 | 1<<6);
197 DDRD &= ~(1<<0 | 1<<5);
198 PORTD |= (1<<0 | 1<<5);
199 DDRC &= ~(1<<6);
200 PORTC |= (1<<6);
201}
202
203static void select_row(uint8_t row)
204{
205 switch (row) {
206 case 0:
207 DDRD |= (1<<0);
208 PORTD &= ~(1<<0);
209 break;
210 case 1:
211 DDRD |= (1<<5);
212 PORTD &= ~(1<<5);
213 break;
214 case 2:
215 DDRB |= (1<<5);
216 PORTB &= ~(1<<5);
217 break;
218 case 3:
219 DDRB |= (1<<6);
220 PORTB &= ~(1<<6);
221 break;
222 case 4:
223 DDRC |= (1<<6);
224 PORTC &= ~(1<<6);
225 break;
226 }
227}
diff --git a/keyboard/atomic/matrix_center.c b/keyboard/atomic/matrix_center.c
deleted file mode 100644
index 7047f018b..000000000
--- a/keyboard/atomic/matrix_center.c
+++ /dev/null
@@ -1,269 +0,0 @@
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
deleted file mode 100644
index 47fb459a8..000000000
--- a/keyboard/atomic/matrix_pcb.c
+++ /dev/null
@@ -1,231 +0,0 @@
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
diff --git a/keyboard/atomic_old/Makefile b/keyboard/atomic_old/Makefile
deleted file mode 100644
index c4e0cb45d..000000000
--- a/keyboard/atomic_old/Makefile
+++ /dev/null
@@ -1,135 +0,0 @@
1#----------------------------------------------------------------------------
2# On command line:
3#
4# make all = Make software.
5#
6# make clean = Clean out built project files.
7#
8# make coff = Convert ELF to AVR COFF.
9#
10# make extcoff = Convert ELF to AVR Extended COFF.
11#
12# make program = Download the hex file to the device.
13# Please customize your programmer settings(PROGRAM_CMD)
14#
15# make teensy = Download the hex file to the device, using teensy_loader_cli.
16# (must have teensy_loader_cli installed).
17#
18# make dfu = Download the hex file to the device, using dfu-programmer (must
19# have dfu-programmer installed).
20#
21# make flip = Download the hex file to the device, using Atmel FLIP (must
22# have Atmel FLIP installed).
23#
24# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
25# (must have dfu-programmer installed).
26#
27# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
28# (must have Atmel FLIP installed).
29#
30# make debug = Start either simulavr or avarice as specified for debugging,
31# with avr-gdb or avr-insight as the front end for debugging.
32#
33# make filename.s = Just compile filename.c into the assembler code only.
34#
35# make filename.i = Create a preprocessed source file for use in submitting
36# bug reports to the GCC project.
37#
38# To rebuild project do "make clean" then "make all".
39#----------------------------------------------------------------------------
40
41# Target file name (without extension).
42TARGET = atomic_lufa
43
44# Directory common source filess exist
45TOP_DIR = ../..
46
47# Directory keyboard dependent files exist
48TARGET_DIR = .
49
50# project specific files
51SRC = keymap_common.c \
52 matrix.c \
53 led.c
54
55ifdef KEYMAP
56 SRC := keymap_$(KEYMAP).c $(SRC)
57else
58 SRC := keymap_vlad.c $(SRC)
59endif
60
61CONFIG_H = config.h
62
63
64# MCU name
65#MCU = at90usb1287
66MCU = atmega32u4
67
68# Processor frequency.
69# This will define a symbol, F_CPU, in all source code files equal to the
70# processor frequency in Hz. You can then use this symbol in your source code to
71# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
72# automatically to create a 32-bit value in your source code.
73#
74# This will be an integer division of F_USB below, as it is sourced by
75# F_USB after it has run through any CPU prescalers. Note that this value
76# does not *change* the processor frequency - it should merely be updated to
77# reflect the processor speed set externally so that the code can use accurate
78# software delays.
79F_CPU = 16000000
80
81
82#
83# LUFA specific
84#
85# Target architecture (see library "Board Types" documentation).
86ARCH = AVR8
87
88# Input clock frequency.
89# This will define a symbol, F_USB, in all source code files equal to the
90# input clock frequency (before any prescaling is performed) in Hz. This value may
91# differ from F_CPU if prescaling is used on the latter, and is required as the
92# raw input clock is fed directly to the PLL sections of the AVR for high speed
93# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
94# at the end, this will be done automatically to create a 32-bit value in your
95# source code.
96#
97# If no clock division is performed on the input clock inside the AVR (via the
98# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
99F_USB = $(F_CPU)
100
101# Interrupt driven control endpoint task(+60)
102OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
103
104
105# Boot Section Size in *bytes*
106# Teensy halfKay 512
107# Teensy++ halfKay 1024
108# Atmel DFU loader 4096
109# LUFA bootloader 4096
110# USBaspLoader 2048
111OPT_DEFS += -DBOOTLOADER_SIZE=4096
112
113
114# Build Options
115# comment out to disable the options.
116#
117BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
118MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
119EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
120CONSOLE_ENABLE = yes # Console for debug(+400)
121COMMAND_ENABLE = yes # Commands for debug and configuration
122#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
123NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
124
125
126# Optimize size but this may cause error "relocation truncated to fit"
127#EXTRALDFLAGS = -Wl,--relax
128
129# Search Path
130VPATH += $(TARGET_DIR)
131VPATH += $(TOP_DIR)
132
133include $(TOP_DIR)/protocol/lufa.mk
134include $(TOP_DIR)/common.mk
135include $(TOP_DIR)/rules.mk
diff --git a/keyboard/atomic_old/Makefile.pjrc b/keyboard/atomic_old/Makefile.pjrc
deleted file mode 100644
index 9655ff65a..000000000
--- a/keyboard/atomic_old/Makefile.pjrc
+++ /dev/null
@@ -1,116 +0,0 @@
1#----------------------------------------------------------------------------
2# On command line:
3#
4# make all = Make software.
5#
6# make clean = Clean out built project files.
7#
8# make coff = Convert ELF to AVR COFF.
9#
10# make extcoff = Convert ELF to AVR Extended COFF.
11#
12# make program = Download the hex file to the device.
13# Please customize your programmer settings(PROGRAM_CMD)
14#
15# make teensy = Download the hex file to the device, using teensy_loader_cli.
16# (must have teensy_loader_cli installed).
17#
18# make dfu = Download the hex file to the device, using dfu-programmer (must
19# have dfu-programmer installed).
20#
21# make flip = Download the hex file to the device, using Atmel FLIP (must
22# have Atmel FLIP installed).
23#
24# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
25# (must have dfu-programmer installed).
26#
27# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
28# (must have Atmel FLIP installed).
29#
30# make debug = Start either simulavr or avarice as specified for debugging,
31# with avr-gdb or avr-insight as the front end for debugging.
32#
33# make filename.s = Just compile filename.c into the assembler code only.
34#
35# make filename.i = Create a preprocessed source file for use in submitting
36# bug reports to the GCC project.
37#
38# To rebuild project do "make clean" then "make all".
39#----------------------------------------------------------------------------
40
41# Target file name (without extension).
42TARGET = gh60_pjrc
43
44# Directory common source filess exist
45TOP_DIR = ../..
46
47# Directory keyboard dependent files exist
48TARGET_DIR = .
49
50# project specific files
51SRC = keymap_common.c \
52 matrix.c \
53 led.c
54
55ifdef KEYMAP
56 SRC := keymap_$(KEYMAP).c $(SRC)
57else
58 SRC := keymap_poker.c $(SRC)
59endif
60
61CONFIG_H = config.h
62
63
64# MCU name, you MUST set this to match the board you are using
65# type "make clean" after changing this, so all files will be rebuilt
66MCU = atmega32u4
67#MCU = at90usb1286
68
69
70# Processor frequency.
71# Normally the first thing your program should do is set the clock prescaler,
72# so your program will run at the correct speed. You should also set this
73# variable to same clock speed. The _delay_ms() macro uses this, and many
74# examples use this variable to calculate timings. Do not add a "UL" here.
75F_CPU = 16000000
76
77
78# Boot Section Size in *bytes*
79# Teensy halfKay 512
80# Atmel DFU loader 4096
81# LUFA bootloader 4096
82OPT_DEFS += -DBOOTLOADER_SIZE=4096
83
84
85# Build Options
86# comment out to disable the options.
87#
88BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
89MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
90EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
91CONSOLE_ENABLE = yes # Console for debug
92COMMAND_ENABLE = yes # Commands for debug and configuration
93SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
94NKRO_ENABLE = yes # USB Nkey Rollover(+500)
95#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
96
97
98# Search Path
99VPATH += $(TARGET_DIR)
100VPATH += $(TOP_DIR)
101
102include $(TOP_DIR)/protocol/pjrc.mk
103include $(TOP_DIR)/common.mk
104include $(TOP_DIR)/rules.mk
105
106plain: OPT_DEFS += -DKEYMAP_PLAIN
107plain: all
108
109poker: OPT_DEFS += -DKEYMAP_POKER
110poker: all
111
112poker_set: OPT_DEFS += -DKEYMAP_POKER_SET
113poker_set: all
114
115poker_bit: OPT_DEFS += -DKEYMAP_POKER_BIT
116poker_bit: all
diff --git a/keyboard/atomic_old/README 2.md b/keyboard/atomic_old/README 2.md
deleted file mode 100644
index 510cb5c8b..000000000
--- a/keyboard/atomic_old/README 2.md
+++ /dev/null
@@ -1,141 +0,0 @@
1GH60 keyboard firmware
2======================
3DIY compact keyboard designed and run by komar007 and Geekhack community.
4
5- Both Rev.A and Rev.B PCB are supported by one firmware binary(issue #64)
6
7## GH60 Resources
8- [KOMAR's project page](http://blog.komar.be/projects/gh60-programmable-keyboard/)
9- [Prototyping](http://geekhack.org/index.php?topic=34959.0)
10- [Rev.A PCB test](http://geekhack.org/index.php?topic=37570.0)
11- [Rev.B PCB test](http://geekhack.org/index.php?topic=50685.0)
12- [Group buy](http://geekhack.org/index.php?topic=41464.0)
13
14
15## Build
16Move to this directory then just run `make` like:
17
18 $ make
19
20Use `make -f Makefile.pjrc` if you want to use PJRC stack but I find no reason to do so now.
21
22
23## Keymap
24Several 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.
25
26To build firmware binary hex file with a certain keymap just do `make` with `KEYMAP` option like:
27
28 $ make KEYMAP=[poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|<name>]
29
30
31### 1 Poker
32[keymap_poker.c](keymap_poker.c) emulates original Poker layers
33while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
34
35 Fn + Esc = `
36 Fn + {left, down, up, right} = {home, pgdown, pgup, end}
37
38#### 1.0 Default layer
39 ,-----------------------------------------------------------.
40 | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
41 |-----------------------------------------------------------|
42 |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
43 |-----------------------------------------------------------|
44 |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
45 |-----------------------------------------------------------|
46 |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
47 |-----------------------------------------------------------|
48 |Ctrl|Gui |Alt | Space |Fn |Gui |App |Ctrl|
49 `-----------------------------------------------------------'
50#### 1.1 Poker Fn layer
51 ,-----------------------------------------------------------.
52 |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |
53 |-----------------------------------------------------------|
54 | |FnQ| Up| | | | | | |Cal| |Hom|Ins| |
55 |-----------------------------------------------------------|
56 | |Lef|Dow|Rig| | |Psc|Slk|Pau| |Tsk|End| |
57 |-----------------------------------------------------------|
58 | |Del| |Web|Mut|VoU|VoD| |PgU|PgD|Del| Up |
59 |-----------------------------------------------------------|
60 | | | | FnS |Fn |Left|Down|Righ|
61 `-----------------------------------------------------------'
62
63
64### 2. Plain
65Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
66See [keymap_plain.c](keymap_plain.c) for detail.
67
68#### 1.0 Plain Default layer
69 ,-----------------------------------------------------------.
70 |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
71 |-----------------------------------------------------------|
72 |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
73 |-----------------------------------------------------------|
74 |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
75 |-----------------------------------------------------------|
76 |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
77 |-----------------------------------------------------------|
78 |Ctrl|Gui |Alt | Space |Alt |Gui |App |Ctrl|
79 `-----------------------------------------------------------'
80
81
82### 3. Hasu
83This is my favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail.
84
85
86### 4. SpaceFN
87This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0).
88
89#### 4.0 Default layer
90 ,-----------------------------------------------------------.
91 |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
92 |-----------------------------------------------------------|
93 |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
94 |-----------------------------------------------------------|
95 |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
96 |-----------------------------------------------------------|
97 |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
98 |-----------------------------------------------------------|
99 |Ctrl|Gui |Alt | Space/Fn |Alt |Gui |App |Ctrl|
100 `-----------------------------------------------------------'
101#### 4.1 SpaceFN layer
102 ,-----------------------------------------------------------.
103 |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
104 |-----------------------------------------------------------|
105 | | | | | | | |Hom|Up |End|Psc|Slk|Pau|Ins |
106 |-----------------------------------------------------------|
107 | | | | | | |PgU|Lef|Dow|Rig| | | |
108 |-----------------------------------------------------------|
109 | | | | | |Spc|PgD|` |~ | | | |
110 |-----------------------------------------------------------|
111 | | | | Fn | | | | |
112 `-----------------------------------------------------------'
113
114
115### 5. HHKB
116[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers.
117#### 5.0: Default layer
118 ,-----------------------------------------------------------.
119 |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
120 |-----------------------------------------------------------|
121 |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bspc |
122 |-----------------------------------------------------------|
123 |Ctrl | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
124 |-----------------------------------------------------------|
125 |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
126 |-----------------------------------------------------------|
127 | |Gui |Alt | Space | |Alt |Gui | |
128 `-----------------------------------------------------------'
129#### 5.1: HHKB Fn layer
130 ,-----------------------------------------------------------.
131 |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
132 |-----------------------------------------------------------|
133 |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
134 |-----------------------------------------------------------|
135 | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
136 |-----------------------------------------------------------|
137 | | | | | | | +| -|End|PgD|Dow| | |
138 |-----------------------------------------------------------|
139 | | | | | | | | |
140 `-----------------------------------------------------------'
141
diff --git a/keyboard/atomic_old/config.h b/keyboard/atomic_old/config.h
deleted file mode 100644
index 5ea953805..000000000
--- a/keyboard/atomic_old/config.h
+++ /dev/null
@@ -1,70 +0,0 @@
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#ifndef CONFIG_H
19#define CONFIG_H
20
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x6060
25#define DEVICE_VER 0x0001
26#define MANUFACTURER Ortholinear Keyboards
27#define PRODUCT Atomic Keyboard
28#define DESCRIPTION t.m.k. keyboard firmware for Atomic
29
30/* key matrix size */
31#define MATRIX_ROWS 5
32#define MATRIX_COLS 15
33
34/* define if matrix has ghost */
35//#define MATRIX_HAS_GHOST
36
37/* Set 0 if debouncing isn't needed */
38#define DEBOUNCE 5
39
40/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
41#define LOCKING_SUPPORT_ENABLE
42/* Locking resynchronize hack */
43#define LOCKING_RESYNC_ENABLE
44
45/* key combination for command */
46#define IS_COMMAND() ( \
47 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
48)
49
50
51
52/*
53 * Feature disable options
54 * These options are also useful to firmware size reduction.
55 */
56
57/* disable debug print */
58//#define NO_DEBUG
59
60/* disable print */
61//#define NO_PRINT
62
63/* disable action features */
64//#define NO_ACTION_LAYER
65//#define NO_ACTION_TAPPING
66//#define NO_ACTION_ONESHOT
67//#define NO_ACTION_MACRO
68//#define NO_ACTION_FUNCTION
69
70#endif
diff --git a/keyboard/atomic_old/keymap_common.c b/keyboard/atomic_old/keymap_common.c
deleted file mode 100644
index fdb1769e1..000000000
--- a/keyboard/atomic_old/keymap_common.c
+++ /dev/null
@@ -1,30 +0,0 @@
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#include "keymap_common.h"
18
19
20/* translates key to keycode */
21uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
22{
23 return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
24}
25
26/* translates Fn keycode to action */
27action_t keymap_fn_to_action(uint8_t keycode)
28{
29 return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
30}
diff --git a/keyboard/atomic_old/keymap_common.h b/keyboard/atomic_old/keymap_common.h
deleted file mode 100644
index c582c0135..000000000
--- a/keyboard/atomic_old/keymap_common.h
+++ /dev/null
@@ -1,87 +0,0 @@
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#ifndef KEYMAP_COMMON_H
18#define KEYMAP_COMMON_H
19
20#include <stdint.h>
21#include <stdbool.h>
22#include <avr/pgmspace.h>
23#include "keycode.h"
24#include "action.h"
25#include "action_macro.h"
26#include "report.h"
27#include "host.h"
28#include "print.h"
29#include "debug.h"
30#include "keymap.h"
31
32
33extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
34extern const uint16_t fn_actions[];
35
36// JCK: Semi-Standard layout
37#define KEYMAP_JCK( \
38 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \
39 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
40 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
41 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3D, K3E, \
42 K40, K41, K43, K46, K4A, K4B, K4C, K4D, K4E \
43) { \
44 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_NO, KC_##K0E }, \
45 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E }, \
46 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_##K2D, KC_##K2E }, \
47 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_NO, KC_##K3C, KC_##K3D, KC_##K3E }, \
48 { KC_##K40, KC_##K41, KC_NO, KC_##K43, KC_NO, KC_NO, KC_##K46, KC_NO, KC_NO, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E } \
49}
50
51// ASK: Short Space layout
52#define KEYMAP_ASK_MESSY( \
53 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \
54 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
55 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
56 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3D, K3E, \
57 K40, K41, K43, K44, K46, K48, K49, K4A, K4B, K4C, K4D, K4E \
58) { \
59 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_NO, KC_##K0E }, \
60 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E }, \
61 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_##K2D, KC_##K2E }, \
62 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_NO, KC_##K3C, KC_##K3D, KC_##K3E }, \
63 { KC_##K40, KC_##K41, KC_NO, KC_##K43, KC_##K44, KC_NO, KC_##K46, KC_NO, KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E } \
64}
65
66#define KEYMAP_ASK( \
67 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \
68 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
69 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, \
70 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
71 K40, K41, K43, K44, K46, K47, K48, K4A, K4B, K4C, K4D, K4E \
72) { \
73 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_NO, KC_##K0E }, \
74 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E }, \
75 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_NO, KC_##K2E }, \
76 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_NO, KC_##K3D, KC_##K3E }, \
77 { KC_##K40, KC_##K41, KC_NO, KC_##K43, KC_##K44, KC_NO, KC_##K46, KC_##K47, KC_##K48, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E } \
78}
79
80
81// MLO: Semi-Grid layout
82
83// KLN: Grid layout
84
85// PKR: Standard layout
86
87#endif
diff --git a/keyboard/atomic_old/keymap_plain.c b/keyboard/atomic_old/keymap_plain.c
deleted file mode 100644
index e7f53649f..000000000
--- a/keyboard/atomic_old/keymap_plain.c
+++ /dev/null
@@ -1,46 +0,0 @@
1#include "keymap_common.h"
2
3// JCK: Semi-Standard layout
4
5const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
6 /* 0: qwerty */
7 [0] = KEYMAP_JCK(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, \
8 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, DEL, \
9 ESC, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, MPLY, \
10 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, VOLD, VOLU, \
11 LCTL, LALT, LGUI, SPC, FN1, LEFT, DOWN, UP, RGHT),
12 [1] = KEYMAP_JCK(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, \
13 TAB, Q, W, F, P, G, J, L, U, Y, SCLN, LBRC, RBRC, BSLS, DEL, \
14 ESC, A, R, S, T, D, H, N, E, I, O, QUOT, ENT, MPLY, \
15 LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, RSFT, VOLD, VOLU, \
16 LCTL, LALT, LGUI, SPC, FN1, LEFT, DOWN, UP, RGHT),
17 [2] = KEYMAP_JCK(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BSPC, \
18 TAB, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC, RBRC, BSLS, DEL, \
19 ESC, FN3, FN4, TRNS, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS, ENT, MPLY, \
20 LSFT, FN9, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, VOLD, VOLU, \
21 LCTL, LALT, LGUI, SPC, TRNS, MNXT, VOLD, VOLU, MPLY),
22};
23const uint16_t PROGMEM fn_actions[] = {
24 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
25 [3] = ACTION_DEFAULT_LAYER_SET(0),
26 [4] = ACTION_DEFAULT_LAYER_SET(1),
27
28 [9] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
29
30 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
31 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
32 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
33 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
34 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
35 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
36 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
37 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
38 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
39 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
40 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
41 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
42 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
43 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
44 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
45 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
46};
diff --git a/keyboard/atomic_old/keymap_ricky.c b/keyboard/atomic_old/keymap_ricky.c
deleted file mode 100644
index fcc91a1fa..000000000
--- a/keyboard/atomic_old/keymap_ricky.c
+++ /dev/null
@@ -1,15 +0,0 @@
1#include "keymap_common.h"
2
3// JCK: Semi-Standard layout
4
5const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
6 /* 0: qwerty */
7 [0] = KEYMAP_JCK(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, \
8 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, PSCR, \
9 CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, INS, \
10 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, DEL, \
11 LCTL, LGUI, LALT, SPC, RALT, RCTL, LEFT, DOWN, RGHT)
12};
13const uint16_t PROGMEM fn_actions[] = {
14};
15
diff --git a/keyboard/atomic_old/keymap_vlad.c b/keyboard/atomic_old/keymap_vlad.c
deleted file mode 100644
index e56bcf161..000000000
--- a/keyboard/atomic_old/keymap_vlad.c
+++ /dev/null
@@ -1,14 +0,0 @@
1#include "keymap_common.h"
2
3// JCK: Semi-Standard layout
4
5const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
6 /* 0: qwerty */
7 [0] = KEYMAP_ASK(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, \
8 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, DEL, \
9 CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, VOLU, \
10 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, VOLD, \
11 LCTL, LGUI, LALT, LGUI, SPC, RGUI, RALT, RGUI, RCTL, LEFT, DOWN, RGHT)
12};
13const uint16_t PROGMEM fn_actions[] = {
14}; \ No newline at end of file
diff --git a/keyboard/atomic_old/led.c b/keyboard/atomic_old/led.c
deleted file mode 100644
index 2d52fbf1c..000000000
--- a/keyboard/atomic_old/led.c
+++ /dev/null
@@ -1,25 +0,0 @@
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#include <avr/io.h>
19#include "stdint.h"
20#include "led.h"
21
22
23void led_set(uint8_t usb_led)
24{
25}
diff --git a/keyboard/atomic_old/matrix.c b/keyboard/atomic_old/matrix.c
deleted file mode 100644
index 98102cb69..000000000
--- a/keyboard/atomic_old/matrix.c
+++ /dev/null
@@ -1,211 +0,0 @@
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
31
32#ifndef DEBOUNCE
33# define DEBOUNCE 10
34#endif
35static uint8_t debouncing = DEBOUNCE;
36
37/* matrix state(1:on, 0:off) */
38static matrix_row_t matrix[MATRIX_ROWS];
39static matrix_row_t matrix_debouncing[MATRIX_ROWS];
40
41static matrix_row_t read_cols(void);
42static void init_cols(void);
43static void unselect_rows(void);
44static void select_row(uint8_t row);
45
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
59
60void matrix_init(void)
61{
62 // initialize row and col
63 unselect_rows();
64 init_cols();
65
66 // initialize matrix state: all keys off
67 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
68 matrix[i] = 0;
69 matrix_debouncing[i] = 0;
70 }
71}
72
73uint8_t matrix_scan(void)
74{
75 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
76 select_row(i);
77 _delay_us(30); // without this wait read unstable value.
78 matrix_row_t cols = read_cols();
79 if (matrix_debouncing[i] != cols) {
80 matrix_debouncing[i] = cols;
81 if (debouncing) {
82 debug("bounce!: "); debug_hex(debouncing); debug("\n");
83 }
84 debouncing = DEBOUNCE;
85 }
86 unselect_rows();
87 }
88
89 if (debouncing) {
90 if (--debouncing) {
91 _delay_ms(1);
92 } else {
93 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
94 matrix[i] = matrix_debouncing[i];
95 }
96 }
97 }
98
99
100 return 1;
101}
102
103bool matrix_is_modified(void)
104{
105 if (debouncing) return false;
106 return true;
107}
108
109inline
110bool matrix_is_on(uint8_t row, uint8_t col)
111{
112 return (matrix[row] & ((matrix_row_t)1<<col));
113}
114
115inline
116matrix_row_t matrix_get_row(uint8_t row)
117{
118 return matrix[row];
119}
120
121void matrix_print(void)
122{
123 print("\nr/c 0123456789ABCDEF\n");
124 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
125 phex(row); print(": ");
126 pbin_reverse16(matrix_get_row(row));
127 print("\n");
128 }
129}
130
131uint8_t matrix_key_count(void)
132{
133 uint8_t count = 0;
134 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
135 count += bitpop16(matrix[i]);
136 }
137 return count;
138}
139
140/* Column pin configuration
141 * col: 0 1 2 3 4 5 6 7 8 9 10 11
142 * pin: F0 F1 F4 F5 F6 F7 B6 B5 B4 D7 D5 D4
143 */
144
145static void init_cols(void)
146{
147 DDRC &= ~(1<<6 | 1<<7);
148 PORTC |= (1<<6 | 1<<7);
149 DDRD &= ~(1<<4 | 1<<5 | 1<<6 | 1<<7);
150 PORTD |= (1<<4 | 1<<5 | 1<<6 | 1<<7);
151 DDRB &= ~(1<<4 | 1<<5 | 1<<6);
152 PORTB |= (1<<4 | 1<<5 | 1<<6);
153 DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
154 PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
155}
156
157static matrix_row_t read_cols(void)
158{
159 return (PINC&(1<<6) ? 0 : (1<< 0)) |
160 (PINC&(1<<7) ? 0 : (1<< 1)) |
161 (PIND&(1<<5) ? 0 : (1<< 2)) |
162 (PIND&(1<<4) ? 0 : (1<< 3)) |
163 (PIND&(1<<6) ? 0 : (1<< 4)) |
164 (PIND&(1<<7) ? 0 : (1<< 5)) |
165 (PINB&(1<<4) ? 0 : (1<< 6)) |
166 (PINB&(1<<5) ? 0 : (1<< 7)) |
167 (PINB&(1<<6) ? 0 : (1<< 8)) |
168 (PINF&(1<<7) ? 0 : (1<< 9)) |
169 (PINF&(1<<6) ? 0 : (1<<10)) |
170 (PINF&(1<<5) ? 0 : (1<<11)) |
171 (PINF&(1<<4) ? 0 : (1<<12)) |
172 (PINF&(1<<1) ? 0 : (1<<13)) |
173 (PINF&(1<<0) ? 0 : (1<<14));
174}
175
176/* Row pin configuration
177 * row: 0 1 2 3
178 * pin: B0 B1 B2 B3
179 */
180static void unselect_rows(void)
181{
182 // Hi-Z(DDR:0, PORT:0) to unselect
183 DDRB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7);
184 PORTB |= (1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7);
185}
186
187static void select_row(uint8_t row)
188{
189 switch (row) {
190 case 0:
191 DDRB |= (1<<0);
192 PORTB &= ~(1<<0);
193 break;
194 case 1:
195 DDRB |= (1<<1);
196 PORTB &= ~(1<<1);
197 break;
198 case 2:
199 DDRB |= (1<<2);
200 PORTB &= ~(1<<2);
201 break;
202 case 3:
203 DDRB |= (1<<3);
204 PORTB &= ~(1<<3);
205 break;
206 case 4:
207 DDRB |= (1<<7);
208 PORTB &= ~(1<<7);
209 break;
210 }
211}
diff --git a/quantum/template/README.md b/quantum/template/README.md
index f5b517f16..ecea7dd69 100644
--- a/quantum/template/README.md
+++ b/quantum/template/README.md
@@ -1,42 +1,180 @@
1%KEYBOARD% keyboard firmware 1%KEYBOARD% keyboard firmware
2====================== 2======================
3Generated firmware for the Quantum MK firmware
4 3
5## Quantum MK Firmware 4## Quantum MK Firmware
6You have access to a bunch of goodies:
7 5
8- Use `LSFT()`, `LCTL()`, et. al. (listed in keymap_common.h) as modifiers for keys (daisy-chain-able) 6You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
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 7
13### Some notes on usage: 8 BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
9 MIDI_ENABLE = yes # MIDI controls
10 # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not //
11 BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
14 12
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 13## Quick aliases to common actions
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 14
19## Build 15Your keymap can include shortcuts to common operations (called "function actions" in tmk).
20 16
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) 17### Switching and toggling layers
22 18
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). 19`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
24 20
25Depending on which keymap you would like to use, you will have to compile slightly differently. 21`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
26 22
27####Default 23`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
28To build with the default keymap, simply move to the tmk\_keyboard/keyboard/planck/ and run `make` as follows: 24
29``` 25### Fun with modifier keys
30$ make 26
27* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
28* `RSFT(kc)` - applies right Shift to *kc*
29* `LCTL(kc)` - applies left Control to *kc*
30* `RCTL(kc)` - applies right Control to *kc*
31* `LALT(kc)` - applies left Alt to *kc*
32* `RALT(kc)` - applies right Alt to *kc*
33* `LGUI(kc)` - applies left GUI (command/win) to *kc*
34* `RGUI(kc)` - applies right GUI (command/win) to *kc*
35
36You can also chain these, like this:
37
38 LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
39
40The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
41
42 KC_TILD ~
43 KC_EXLM !
44 KC_AT @
45 KC_HASH #
46 KC_DLR $
47 KC_PERC %
48 KC_CIRC ^
49 KC_AMPR &
50 KC_ASTR *
51 KC_LPRN (
52 KC_RPRN )
53 KC_UNDS _
54 KC_PLUS +
55 KC_LCBR {
56 KC_RCBR }
57 KC_PIPE |
58 KC_COLN :
59
60`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
61
62These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available):
63
64 * MOD_LCTL
65 * MOD_LSFT
66 * MOD_LALT
67 * MOD_LGUI
68
69These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
70
71We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
72
73 * `CTL_T(kc)` - is LCTL when held and *kc* when tapped
74 * `SFT_T(kc)` - is LSFT when held and *kc* when tapped
75 * `ALT_T(kc)` - is LALT when held and *kc* when tapped
76 * `GUI_T(kc)` - is LGUI when held and *kc* when tapped
77 * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
78
79### Temporarily setting the default layer
80
81`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
82
83### Remember: These are just aliases
84
85These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
86
87Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
88
89## Macro shortcuts: Send a whole string when pressing just one key
90
91Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
92
93```c
94const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
95{
96 switch(id) {
97 case 0: // this would trigger when you hit a key mapped as M(0)
98 if (record->event.pressed) {
99 return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
100 }
101 break;
102 }
103 return MACRO_NONE;
104};
31``` 105```
106A macro can include the following commands:
107
108* I() change interval of stroke in milliseconds.
109* D() press key.
110* U() release key.
111* T() type key(press and release).
112* W() wait (milliseconds).
113* END end mark.
114
115So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
116
117Note: Using macros to have your keyboard send passwords for you is a bad idea.
118
119### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
120
121Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
122
123 #include "keymap_<layout>.h"
124
125Where <layout> is "colemak" or "dvorak". After including this line, you will get access to:
126
127 * `CM_*` for all of the Colemak-equivalent characters
128 * `DV_*` for all of the Dvorak-equivalent characters
129
130These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
131
132To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
133
134## Additional language support
135
136In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `รน` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
137
138## Unicode support
139
140You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
141
142## Other firmware shortcut keycodes
143
144* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
145* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
146* `BL_ON` - turns the backlight on
147* `BL_OFF` - turns the backlight off
148* `BL_<n>` - sets the backlight to level *n*
149* `BL_INC` - increments the backlight level by one
150* `BL_DEC` - decrements the backlight level by one
151* `BL_TOGG` - toggles the backlight
152* `BL_STEP` - steps through the backlight levels
153
154Enable the backlight from the Makefile.
155
156## MIDI functionalty
157
158This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
159
160## Bluetooth functionality
161
162This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
163
164## Building
165
166Download or clone the whole firmware and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
167
168Depending on which keymap you would like to use, you will have to compile slightly differently.
169
170### Default
171To build with the default keymap, simply run `make`.
32 172
33## Keymap 173### Other Keymaps
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. 174Several 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####**Keymaps**
37 175
38To build the firmware binary hex file with an extended keymap just do `make` with `KEYMAP` option like: 176To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
39``` 177```
40$ make KEYMAP=[default|jack|<name>] 178$ make KEYMAP=[default|jack|<name>]
41``` 179```
42_The only applicable keymaps will work with this option._ Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder. 180Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder. \ No newline at end of file