aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--doc/keymap.md3
-rw-r--r--keyboards/atreus62/atreus62.h38
-rw-r--r--keyboards/clueboard/keymaps/caps_fn/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/caps_fn/layout.pngbin0 -> 112289 bytes
-rw-r--r--keyboards/clueboard/keymaps/caps_fn/readme.md15
-rw-r--r--keyboards/clueboard/keymaps/colemak/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/default/keymap.c96
-rw-r--r--keyboards/clueboard/keymaps/default/layout.pngbin0 -> 112442 bytes
-rw-r--r--keyboards/clueboard/keymaps/default/readme.md17
-rw-r--r--keyboards/clueboard/keymaps/mac_optimized/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/mac_optimized/layout.pngbin0 -> 107368 bytes
-rw-r--r--keyboards/clueboard/keymaps/mac_optimized/readme.md15
-rw-r--r--keyboards/clueboard/keymaps/max/Makefile49
-rw-r--r--keyboards/clueboard/keymaps/max/keymap.c85
-rw-r--r--keyboards/clueboard/keymaps/maximised/keymap.c47
-rw-r--r--keyboards/clueboard/keymaps/maximised/layout.pngbin0 -> 111157 bytes
-rw-r--r--keyboards/clueboard/keymaps/maximised/readme.md14
-rw-r--r--keyboards/clueboard/keymaps/mouse_keys/Makefile1
-rw-r--r--keyboards/clueboard/keymaps/mouse_keys/keymap.c96
-rw-r--r--keyboards/clueboard/keymaps/mouse_keys/layout.pngbin0 -> 143816 bytes
-rw-r--r--keyboards/clueboard/keymaps/mouse_keys/readme.md16
-rw-r--r--keyboards/clueboard/keymaps/shift_fn/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/shift_fn/layout.pngbin0 -> 107234 bytes
-rw-r--r--keyboards/clueboard/keymaps/shift_fn/readme.md17
-rw-r--r--keyboards/clueboard/keymaps/skully/keymap.c93
-rw-r--r--keyboards/clueboard/keymaps/skully/layout.pngbin0 -> 111676 bytes
-rw-r--r--keyboards/clueboard/keymaps/skully/readme.md11
-rw-r--r--keyboards/clueboard/keymaps/unix_optimized/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/unix_optimized/layout.pngbin0 -> 111171 bytes
-rw-r--r--keyboards/clueboard/keymaps/unix_optimized/readme.md15
-rw-r--r--keyboards/clueboard/keymaps/win_optimized/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/win_optimized/layout.pngbin0 -> 110405 bytes
-rw-r--r--keyboards/clueboard/keymaps/win_optimized/readme.md17
-rw-r--r--keyboards/clueboard/rules.mk10
-rw-r--r--keyboards/ergodox/keymaps/colemak_programmer/Makefile1
-rw-r--r--keyboards/ergodox/keymaps/colemak_programmer/colemak_programmer_001.jpgbin0 -> 301259 bytes
-rw-r--r--keyboards/ergodox/keymaps/colemak_programmer/colemak_programmer_002.jpgbin0 -> 235864 bytes
-rw-r--r--keyboards/ergodox/keymaps/colemak_programmer/keymap.c256
-rw-r--r--keyboards/ergodox/keymaps/colemak_programmer/readme.md23
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.pngbin79488 -> 97053 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.pngbin62258 -> 65740 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-navigation.pngbin58886 -> 0 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-unicode.pngbin0 -> 73624 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-4-unicode-2.pngbin0 -> 66132 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/keymap.c84
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/readme.md9
-rwxr-xr-xkeyboards/ergodox/keymaps/dvorak_emacs_software/keymap.c166
-rw-r--r--keyboards/ergodox/keymaps/dvorak_emacs_software/readme.md74
-rw-r--r--keyboards/ergodox/keymaps/german-lukas/README.md12
-rw-r--r--keyboards/ergodox/keymaps/german-lukas/keymap.c236
-rw-r--r--keyboards/ergodox/keymaps/guni/keymap.c177
-rw-r--r--keyboards/ergodox/keymaps/guni/readme.txt133
-rw-r--r--keyboards/ergodox/keymaps/italian/keymap.c223
-rw-r--r--keyboards/ergodox/keymaps/italian/readme.md72
-rw-r--r--keyboards/ergodox/keymaps/josh/keymap.c34
-rw-r--r--keyboards/ergodox/keymaps/neo2_on_qwertz_hardware/keymap.c408
-rw-r--r--keyboards/ergodox/keymaps/neo2_on_qwertz_hardware/keymap.md194
-rw-r--r--keyboards/ergodox/keymaps/reset_eeprom/keymap.c2
-rw-r--r--keyboards/ergodox/readme.md2
-rw-r--r--keyboards/frosty_flake/Makefile3
-rw-r--r--keyboards/frosty_flake/config.h147
-rw-r--r--keyboards/frosty_flake/frosty_flake.c63
-rw-r--r--keyboards/frosty_flake/frosty_flake.h50
-rw-r--r--keyboards/frosty_flake/keymaps/default/Makefile21
-rw-r--r--keyboards/frosty_flake/keymaps/default/config.h8
-rw-r--r--keyboards/frosty_flake/keymaps/default/keymap.c11
-rw-r--r--keyboards/frosty_flake/keymaps/default/readme.md1
-rw-r--r--keyboards/frosty_flake/matrix.c135
-rw-r--r--keyboards/frosty_flake/readme.md32
-rw-r--r--keyboards/frosty_flake/rules.mk71
-rw-r--r--keyboards/gh60/keymaps/unxmaal/Makefile112
-rw-r--r--keyboards/gh60/keymaps/unxmaal/README.md20
-rw-r--r--keyboards/gh60/keymaps/unxmaal/WS2812-wiring.jpgbin0 -> 1038926 bytes
-rw-r--r--keyboards/gh60/keymaps/unxmaal/config.h190
-rw-r--r--keyboards/gh60/keymaps/unxmaal/keymap.c228
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/MS-sculpt-mobile.c1
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/MS-sculpt-mobile.h48
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/Makefile3
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/babblePaste.c459
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/babblePaste.h238
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/babblePaste.txt123
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/config.h100
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/keymaps/default/Makefile21
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/keymaps/default/config.h8
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/keymaps/default/keymap.c64
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/Makefile21
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/config.h32
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/keymap.c272
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/readme.md1
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/readme.md58
-rw-r--r--keyboards/handwired/MS-sculpt-mobile/rules.mk48
-rw-r--r--keyboards/handwired/magicforce68/Makefile3
-rw-r--r--keyboards/handwired/magicforce68/README.md20
-rw-r--r--keyboards/handwired/magicforce68/config.h162
-rw-r--r--keyboards/handwired/magicforce68/keymaps/default/keymap.c67
-rw-r--r--keyboards/handwired/magicforce68/magicforce68.c8
-rw-r--r--keyboards/handwired/magicforce68/magicforce68.h20
-rw-r--r--keyboards/handwired/magicforce68/rules.mk83
-rw-r--r--keyboards/handwired/magicforce68/wiring-layout.pngbin0 -> 73739 bytes
-rw-r--r--keyboards/handwired/numpad20/Makefile3
-rw-r--r--keyboards/handwired/numpad20/config.h162
-rw-r--r--keyboards/handwired/numpad20/keymaps/default/keymap.c16
-rw-r--r--keyboards/handwired/numpad20/numpad20.c8
-rw-r--r--keyboards/handwired/numpad20/numpad20.h20
-rw-r--r--keyboards/handwired/numpad20/rules.mk83
-rw-r--r--keyboards/handwired/ortho5x13/Makefile3
-rw-r--r--keyboards/handwired/ortho5x13/config.h162
-rw-r--r--keyboards/handwired/ortho5x13/keymaps/default/keymap.c289
-rw-r--r--keyboards/handwired/ortho5x13/ortho5x13.c8
-rw-r--r--keyboards/handwired/ortho5x13/ortho5x13.h36
-rw-r--r--keyboards/handwired/ortho5x13/rules.mk83
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/README.md2
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c57
-rw-r--r--keyboards/lets_split/common/glcdfont.c276
-rw-r--r--keyboards/lets_split/i2c.h20
-rw-r--r--keyboards/lets_split/keymaps/OLED_sample/Makefile25
-rw-r--r--keyboards/lets_split/keymaps/OLED_sample/config.h45
-rw-r--r--keyboards/lets_split/keymaps/OLED_sample/keymap.c356
-rw-r--r--keyboards/lets_split/keymaps/OLED_sample/readme.md25
-rw-r--r--keyboards/lets_split/keymaps/hexwire/Makefile5
-rw-r--r--keyboards/lets_split/keymaps/hexwire/README.md108
-rw-r--r--keyboards/lets_split/keymaps/hexwire/config.h70
-rw-r--r--keyboards/lets_split/keymaps/hexwire/keymap.c205
-rw-r--r--keyboards/lets_split/keymaps/smt/config.h34
-rw-r--r--keyboards/lets_split/keymaps/smt/keymap.c219
-rw-r--r--keyboards/lets_split/keymaps/smt/readme.md88
-rw-r--r--keyboards/lets_split/matrix.c2
-rw-r--r--keyboards/lets_split/rev1/config.h7
-rw-r--r--keyboards/lets_split/rev2/rev2.c8
-rw-r--r--keyboards/lets_split/rev2/rev2.h59
-rw-r--r--keyboards/lets_split/rev2fliphalf/rev2fliphalf.c32
-rw-r--r--keyboards/lets_split/rev2fliphalf/rev2fliphalf.h28
-rw-r--r--keyboards/lets_split/rev2fliphalf/rules.mk5
-rw-r--r--keyboards/lets_split/rules.mk15
-rw-r--r--keyboards/lets_split/split_util.c5
-rw-r--r--keyboards/lets_split/split_util.h2
-rw-r--r--keyboards/lets_split/ssd1306.c468
-rw-r--r--keyboards/planck/keymaps/callum/keymap.c16
-rw-r--r--keyboards/planck/keymaps/callum/readme.md10
-rw-r--r--keyboards/planck/keymaps/default/keymap.c16
-rw-r--r--keyboards/planck/keymaps/espynn/keyboard-layout.jpgbin52908 -> 53129 bytes
-rw-r--r--keyboards/planck/keymaps/espynn/keymap.c22
-rw-r--r--keyboards/planck/keymaps/espynn/layout.json131
-rw-r--r--keyboards/planck/keymaps/espynn/readme.md12
-rw-r--r--keyboards/planck/keymaps/khord/Makefile4
-rw-r--r--keyboards/planck/keymaps/khord/config.h (renamed from keyboards/lets_split/rev2fliphalf/config.h)48
-rw-r--r--keyboards/planck/keymaps/khord/keymap.c336
-rw-r--r--keyboards/planck/keymaps/smt/keymap.c132
-rw-r--r--keyboards/planck/keymaps/smt/readme.md79
-rw-r--r--keyboards/planck/rules.mk4
-rw-r--r--keyboards/preonic/keymaps/smt/keymap.c145
-rw-r--r--keyboards/preonic/keymaps/smt/readme.md77
-rw-r--r--keyboards/preonic/rules.mk4
-rw-r--r--keyboards/roadkit/Makefile (renamed from keyboards/lets_split/rev2fliphalf/Makefile)0
-rw-r--r--keyboards/roadkit/config.h162
-rw-r--r--keyboards/roadkit/keymaps/default/Makefile21
-rw-r--r--keyboards/roadkit/keymaps/default/config.h8
-rw-r--r--keyboards/roadkit/keymaps/default/keymap.c49
-rw-r--r--keyboards/roadkit/keymaps/default/readme.md1
-rw-r--r--keyboards/roadkit/keymaps/singles/Makefile21
-rw-r--r--keyboards/roadkit/keymaps/singles/config.h8
-rw-r--r--keyboards/roadkit/keymaps/singles/keymap.c61
-rw-r--r--keyboards/roadkit/keymaps/singles/readme.md3
-rw-r--r--keyboards/roadkit/readme.md32
-rw-r--r--keyboards/roadkit/roadkit.c28
-rw-r--r--keyboards/roadkit/roadkit.h33
-rw-r--r--keyboards/roadkit/rules.mk69
-rw-r--r--keyboards/satan/keymaps/smt/Makefile21
-rw-r--r--keyboards/satan/keymaps/smt/keymap.c141
-rw-r--r--keyboards/satan/keymaps/smt/readme.md1
-rw-r--r--keyboards/satan/keymaps/unxmaal/Makefile21
-rw-r--r--keyboards/satan/keymaps/unxmaal/README.md20
-rw-r--r--keyboards/satan/keymaps/unxmaal/keymap.c119
-rw-r--r--keyboards/tada68/keymaps/default/keymap.c66
-rw-r--r--keyboards/tada68/keymaps/default/readme.md2
-rw-r--r--keyboards/tada68/readme.md15
-rw-r--r--keyboards/tv44/keymaps/smt/keymap.c24
-rw-r--r--keyboards/xd60/arrow-cluster.JPGbin1875718 -> 0 bytes
-rw-r--r--keyboards/xd60/config.h19
-rw-r--r--keyboards/xd60/keymaps/cheese/README.md13
-rw-r--r--keyboards/xd60/keymaps/cheese/base_layout.pngbin0 -> 23729 bytes
-rw-r--r--keyboards/xd60/keymaps/cheese/fn_layout.pngbin0 -> 20690 bytes
-rw-r--r--keyboards/xd60/keymaps/cheese/keymap.c67
-rw-r--r--keyboards/xd60/keymaps/default/keymap.c40
-rw-r--r--keyboards/xd60/keymaps/stanleylai/keymap.c47
-rw-r--r--keyboards/xd60/readme.md8
-rw-r--r--keyboards/xd60/rules.mk2
-rw-r--r--keyboards/xd60/top-view.JPGbin2092542 -> 0 bytes
-rw-r--r--keyboards/xd60/xd60.h18
-rw-r--r--keyboards/xd60/xd60.jpgbin0 -> 2466209 bytes
-rw-r--r--quantum/audio/song_list.h27
-rw-r--r--quantum/process_keycode/process_unicodemap.c10
-rw-r--r--quantum/quantum.c67
-rw-r--r--quantum/quantum.h1
-rw-r--r--quantum/quantum_keycodes.h5
-rw-r--r--readme.md4
-rw-r--r--tmk_core/common.mk14
-rw-r--r--tmk_core/common/action_tapping.c11
-rw-r--r--tmk_core/protocol/lufa.mk12
-rw-r--r--tmk_core/protocol/lufa/adafruit_ble.h4
-rw-r--r--tmk_core/protocol/lufa/lufa.c73
-rw-r--r--tmk_core/protocol/lufa/outputselect.c6
-rw-r--r--tmk_core/protocol/lufa/outputselect.h1
-rwxr-xr-xutil/install_dependencies.sh19
206 files changed, 10774 insertions, 926 deletions
diff --git a/.gitignore b/.gitignore
index f66a961fd..6029afce4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
1.dep 1.dep
2*.o 2*.o
3*.bin
3*.eep 4*.eep
4*.elf 5*.elf
5*.hex 6*.hex
diff --git a/doc/keymap.md b/doc/keymap.md
index 6f2a663fc..2b0d2cd95 100644
--- a/doc/keymap.md
+++ b/doc/keymap.md
@@ -549,6 +549,9 @@ Layer switching with tap key:
549 549
550[dual_role]: http://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys 550[dual_role]: http://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
551 551
552When user hold a key after tap, it repeat the tapped key rather to hold a modifier key.
553If you prefer to hold a modifier instead, define `TAPPING_FORCE_HOLD` in `config.h`.
554See https://github.com/qmk/qmk_firmware/issues/889 for the detail.
552 555
553### 4.2 Tap Toggle 556### 4.2 Tap Toggle
554This is a feature to assign both toggle layer and momentary switch layer action to just same one physical key. It works as momentary layer switch when holding a key but toggle switch with several taps. 557This is a feature to assign both toggle layer and momentary switch layer action to just same one physical key. It works as momentary layer switch when holding a key but toggle switch with several taps.
diff --git a/keyboards/atreus62/atreus62.h b/keyboards/atreus62/atreus62.h
index eacf5b451..ca5cda8a8 100644
--- a/keyboards/atreus62/atreus62.h
+++ b/keyboards/atreus62/atreus62.h
@@ -9,18 +9,34 @@ void promicro_bootloader_jmp(bool program);
9// The first section contains all of the arguements 9// The first section contains all of the arguements
10// The second converts the arguments into a two-dimensional array 10// The second converts the arguments into a two-dimensional array
11#define KEYMAP( \ 11#define KEYMAP( \
12 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ 12 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
13 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ 13 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
14 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ 14 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
15 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ 15 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
16 k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \ 16 k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \
17) \ 17) \
18{ \ 18{ \
19 { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \ 19 { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \
20 { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \ 20 { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \
21 { k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \ 21 { k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \
22 { k30, k31, k32, k33, k34, k35, k46, k36, k37, k38, k39, k3a, k3b }, \ 22 { k30, k31, k32, k33, k34, k35, k46, k36, k37, k38, k39, k3a, k3b }, \
23 { k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c, k4d } \ 23 { k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c, k4d } \
24} 24}
25 25
26#endif \ No newline at end of file 26// Used to create a keymap using only KC_ prefixed keys.
27#define KC_KEYMAP( \
28 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
29 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
30 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
31 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
32 k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \
33) \
34{ \
35 { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_NO, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b }, \
36 { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_NO, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b }, \
37 { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_NO, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b }, \
38 { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k46, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b }, \
39 { KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_##k47, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c, KC_##k4d } \
40}
41
42#endif
diff --git a/keyboards/clueboard/keymaps/caps_fn/keymap.c b/keyboards/clueboard/keymaps/caps_fn/keymap.c
new file mode 100644
index 000000000..7fad9c1b2
--- /dev/null
+++ b/keyboards/clueboard/keymaps/caps_fn/keymap.c
@@ -0,0 +1,86 @@
1#include "clueboard.h"
2
3// Helpful defines
4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _BL 0
12#define _FL 1
13#define _CL 2
14
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16 /* Keymap _BL: Base Layer (Default Layer)
17 */
18[_BL] = KEYMAP(
19 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
20 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
21 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
22 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
23 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
24
25 /* Keymap _FL: Function Layer
26 */
27[_FL] = KEYMAP(
28 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
29 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
30 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
31 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
32 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
33
34 /* Keymap _CL: Control layer
35 */
36[_CL] = KEYMAP(
37 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
38 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
39 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
40 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
41 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
42};
43
44/* This is a list of user defined functions. F(N) corresponds to item N
45 of this list.
46 */
47const uint16_t PROGMEM fn_actions[] = {
48 [0] = ACTION_FUNCTION(0), // Calls action_function()
49};
50
51void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
52 static uint8_t mods_pressed;
53 static bool mod_flag;
54
55 switch (id) {
56 case 0:
57 /* Handle the combined Grave/Esc key
58 */
59 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
60
61 if (record->event.pressed) {
62 /* The key is being pressed.
63 */
64 if (mods_pressed) {
65 mod_flag = true;
66 add_key(KC_GRV);
67 send_keyboard_report();
68 } else {
69 add_key(KC_ESC);
70 send_keyboard_report();
71 }
72 } else {
73 /* The key is being released.
74 */
75 if (mod_flag) {
76 mod_flag = false;
77 del_key(KC_GRV);
78 send_keyboard_report();
79 } else {
80 del_key(KC_ESC);
81 send_keyboard_report();
82 }
83 }
84 break;
85 }
86}
diff --git a/keyboards/clueboard/keymaps/caps_fn/layout.png b/keyboards/clueboard/keymaps/caps_fn/layout.png
new file mode 100644
index 000000000..a5bd57adb
--- /dev/null
+++ b/keyboards/clueboard/keymaps/caps_fn/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/caps_fn/readme.md b/keyboards/clueboard/keymaps/caps_fn/readme.md
new file mode 100644
index 000000000..74ad01fca
--- /dev/null
+++ b/keyboards/clueboard/keymaps/caps_fn/readme.md
@@ -0,0 +1,15 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
12# Caps Fn Layout
13
14This is the default layout except that Caps Lock acts like Caps Lock when
15tapped but Fn when held.
diff --git a/keyboards/clueboard/keymaps/colemak/keymap.c b/keyboards/clueboard/keymaps/colemak/keymap.c
new file mode 100644
index 000000000..42c85ff9d
--- /dev/null
+++ b/keyboards/clueboard/keymaps/colemak/keymap.c
@@ -0,0 +1,86 @@
1#include "clueboard.h"
2
3// Helpful defines
4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _BL 0
12#define _FL 1
13#define _CL 2
14
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16 /* Keymap _BL: Base Layer (Default Layer)
17 */
18[_BL] = KEYMAP(
19 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
20 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_PGDN, \
21 KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_NUHS, KC_ENT, \
22 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
23 KC_LCTL, MO(_FL), KC_LGUI,KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT),
24
25 /* Keymap _FL: Function Layer
26 */
27[_FL] = KEYMAP(
28 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_CAPS, BL_STEP, \
29 _______, _______, _______,_______,_______,_______,_______,KC_HOME,KC_PGDN,KC_PGUP, KC_END, _______, _______, _______, _______, \
30 KC_DEL, _______, MO(_CL),_______,_______,_______,_______,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, _______, _______, _______, \
31 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
32 _______, _______, _______,_______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
33
34 /* Keymap _CL: Control layer
35 */
36[_CL] = KEYMAP(
37 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
38 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
39 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
40 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
41 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
42};
43
44/* This is a list of user defined functions. F(N) corresponds to item N
45 of this list.
46 */
47const uint16_t PROGMEM fn_actions[] = {
48 [0] = ACTION_FUNCTION(0), // Calls action_function()
49};
50
51void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
52 static uint8_t mods_pressed;
53 static bool mod_flag;
54
55 switch (id) {
56 case 0:
57 /* Handle the combined Grave/Esc key
58 */
59 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
60
61 if (record->event.pressed) {
62 /* The key is being pressed.
63 */
64 if (mods_pressed) {
65 mod_flag = true;
66 add_key(KC_GRV);
67 send_keyboard_report();
68 } else {
69 add_key(KC_ESC);
70 send_keyboard_report();
71 }
72 } else {
73 /* The key is being released.
74 */
75 if (mod_flag) {
76 mod_flag = false;
77 del_key(KC_GRV);
78 send_keyboard_report();
79 } else {
80 del_key(KC_ESC);
81 send_keyboard_report();
82 }
83 }
84 break;
85 }
86}
diff --git a/keyboards/clueboard/keymaps/default/keymap.c b/keyboards/clueboard/keymaps/default/keymap.c
index 01f158bf0..7fad9c1b2 100644
--- a/keyboards/clueboard/keymaps/default/keymap.c
+++ b/keyboards/clueboard/keymaps/default/keymap.c
@@ -1,7 +1,8 @@
1#include "clueboard.h" 1#include "clueboard.h"
2 2
3// Used for SHIFT_ESC 3// Helpful defines
4#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) 4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
5 6
6// Each layer gets a name for readability, which is then used in the keymap matrix below. 7// Each layer gets a name for readability, which is then used in the keymap matrix below.
7// The underscores don't mean anything - you can have a layer called STUFF or any other name. 8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -9,21 +10,10 @@
9// entirely and just use numbers. 10// entirely and just use numbers.
10#define _BL 0 11#define _BL 0
11#define _FL 1 12#define _FL 1
12#define _RS 2 13#define _CL 2
13 14
14const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
15 /* Keymap _BL: (Base Layer) Default Layer 16 /* Keymap _BL: Base Layer (Default Layer)
16 * ,--------------------------------------------------------------------------. ,----.
17 * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP|
18 * |--------------------------------------------------------------------------| |----|
19 * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN|
20 * |--------------------------------------------------------------------------| `----'
21 * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
22 * |-----------------------------------------------------------------------------.
23 * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP|
24 * |------------------------------------------------------------------------|----|----.
25 * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
26 * `----------------------------------------------------------------------------------'
27 */ 17 */
28[_BL] = KEYMAP( 18[_BL] = KEYMAP(
29 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \ 19 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
@@ -33,61 +23,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), 23 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
34 24
35 /* Keymap _FL: Function Layer 25 /* Keymap _FL: Function Layer
36 * ,--------------------------------------------------------------------------. ,----.
37 * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
38 * |--------------------------------------------------------------------------| |----|
39 * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
40 * |--------------------------------------------------------------------------| `----'
41 * | | | _RS| | | | | | | | | | | |
42 * |-----------------------------------------------------------------------------.
43 * | | | | | | | | | | | | | | |PGUP|
44 * |------------------------------------------------------------------------|----|----.
45 * | | | | | | | | | | _FL|HOME|PGDN| END|
46 * `----------------------------------------------------------------------------------'
47 */ 26 */
48[_FL] = KEYMAP( 27[_FL] = KEYMAP(
49 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_TRNS, KC_DEL, BL_STEP, \ 28 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
50 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ 29 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
51 KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ 30 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
52 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, \ 31 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
53 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END), 32 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
54 33
55 /* Keymap _RS: Reset layer 34 /* Keymap _CL: Control layer
56 * ,--------------------------------------------------------------------------. ,----.
57 * | | | | | | | | | | | | | | | | | |
58 * |--------------------------------------------------------------------------| |----|
59 * | | | | |RESET| | | | | | | | | | | |
60 * |--------------------------------------------------------------------------| `----'
61 * | | | _RS| | | | | | | | | | | |
62 * |-----------------------------------------------------------------------------.
63 * | | | | | | | | | | | | | | | |
64 * |------------------------------------------------------------------------|----|----.
65 * | | | | | | | | | | _FL| | | |
66 * `----------------------------------------------------------------------------------'
67 */ 35 */
68[_RS] = KEYMAP( 36[_CL] = KEYMAP(
69 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, \ 37 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
70 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, \ 38 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
71 KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ 39 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
72 MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \ 40 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
73 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI), 41 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
74};
75
76enum function_id {
77 SHIFT_ESC,
78}; 42};
79 43
44/* This is a list of user defined functions. F(N) corresponds to item N
45 of this list.
46 */
80const uint16_t PROGMEM fn_actions[] = { 47const uint16_t PROGMEM fn_actions[] = {
81 [0] = ACTION_FUNCTION(SHIFT_ESC), 48 [0] = ACTION_FUNCTION(0), // Calls action_function()
82}; 49};
83 50
84void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { 51void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
85 static uint8_t shift_esc_shift_mask; 52 static uint8_t mods_pressed;
53 static bool mod_flag;
54
86 switch (id) { 55 switch (id) {
87 case SHIFT_ESC: 56 case 0:
88 shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; 57 /* Handle the combined Grave/Esc key
58 */
59 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
60
89 if (record->event.pressed) { 61 if (record->event.pressed) {
90 if (shift_esc_shift_mask) { 62 /* The key is being pressed.
63 */
64 if (mods_pressed) {
65 mod_flag = true;
91 add_key(KC_GRV); 66 add_key(KC_GRV);
92 send_keyboard_report(); 67 send_keyboard_report();
93 } else { 68 } else {
@@ -95,7 +70,10 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
95 send_keyboard_report(); 70 send_keyboard_report();
96 } 71 }
97 } else { 72 } else {
98 if (shift_esc_shift_mask) { 73 /* The key is being released.
74 */
75 if (mod_flag) {
76 mod_flag = false;
99 del_key(KC_GRV); 77 del_key(KC_GRV);
100 send_keyboard_report(); 78 send_keyboard_report();
101 } else { 79 } else {
diff --git a/keyboards/clueboard/keymaps/default/layout.png b/keyboards/clueboard/keymaps/default/layout.png
new file mode 100644
index 000000000..cd318163e
--- /dev/null
+++ b/keyboards/clueboard/keymaps/default/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/default/readme.md b/keyboards/clueboard/keymaps/default/readme.md
new file mode 100644
index 000000000..cede17ee1
--- /dev/null
+++ b/keyboards/clueboard/keymaps/default/readme.md
@@ -0,0 +1,17 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
12# Default Clueboard Layout
13
14This is the default layout that comes flashed on every Clueboard. For the most
15part it's a straightforward and easy to follow layout. The only unusual key is
16the key in the upper left, which sends Escape normally, but Grave when any of
17the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/keymaps/mac_optimized/keymap.c b/keyboards/clueboard/keymaps/mac_optimized/keymap.c
new file mode 100644
index 000000000..7ea02d27e
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mac_optimized/keymap.c
@@ -0,0 +1,86 @@
1#include "clueboard.h"
2
3// Helpful defines
4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _BL 0
12#define _FL 1
13#define _CL 2
14
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16 /* Keymap _BL: Base Layer (Default Layer)
17 */
18[_BL] = KEYMAP(
19 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
20 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
21 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
22 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
23 KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
24
25 /* Keymap _FL: Function Layer
26 */
27[_FL] = KEYMAP(
28 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
29 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, \
30 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
31 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
32 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
33
34 /* Keymap _CL: Control layer
35 */
36[_CL] = KEYMAP(
37 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
38 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
39 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
40 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
41 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
42};
43
44/* This is a list of user defined functions. F(N) corresponds to item N
45 of this list.
46 */
47const uint16_t PROGMEM fn_actions[] = {
48 [0] = ACTION_FUNCTION(0), // Calls action_function()
49};
50
51void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
52 static uint8_t mods_pressed;
53 static bool mod_flag;
54
55 switch (id) {
56 case 0:
57 /* Handle the combined Grave/Esc key
58 */
59 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
60
61 if (record->event.pressed) {
62 /* The key is being pressed.
63 */
64 if (mods_pressed) {
65 mod_flag = true;
66 add_key(KC_GRV);
67 send_keyboard_report();
68 } else {
69 add_key(KC_ESC);
70 send_keyboard_report();
71 }
72 } else {
73 /* The key is being released.
74 */
75 if (mod_flag) {
76 mod_flag = false;
77 del_key(KC_GRV);
78 send_keyboard_report();
79 } else {
80 del_key(KC_ESC);
81 send_keyboard_report();
82 }
83 }
84 break;
85 }
86}
diff --git a/keyboards/clueboard/keymaps/mac_optimized/layout.png b/keyboards/clueboard/keymaps/mac_optimized/layout.png
new file mode 100644
index 000000000..e84ba54ea
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mac_optimized/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/mac_optimized/readme.md b/keyboards/clueboard/keymaps/mac_optimized/readme.md
new file mode 100644
index 000000000..940e09125
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mac_optimized/readme.md
@@ -0,0 +1,15 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
12# Default Clueboard Layout for Mac
13
14This is the default Clueboard layout with Alt and GUI switched to match Mac
15conventions.
diff --git a/keyboards/clueboard/keymaps/max/Makefile b/keyboards/clueboard/keymaps/max/Makefile
deleted file mode 100644
index 950dadf84..000000000
--- a/keyboards/clueboard/keymaps/max/Makefile
+++ /dev/null
@@ -1,49 +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# Build Options
42# change to "no" to disable the options, or define them in the makefile.mk in
43# the appropriate keymap folder that will get included automatically
44#
45RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
46
47ifndef QUANTUM_DIR
48 include ../../../../Makefile
49endif \ No newline at end of file
diff --git a/keyboards/clueboard/keymaps/max/keymap.c b/keyboards/clueboard/keymaps/max/keymap.c
deleted file mode 100644
index 193809840..000000000
--- a/keyboards/clueboard/keymaps/max/keymap.c
+++ /dev/null
@@ -1,85 +0,0 @@
1#include "clueboard.h"
2
3// Used for SHIFT_ESC
4#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
5
6// Each layer gets a name for readability, which is then used in the keymap matrix below.
7// The underscores don't mean anything - you can have a layer called STUFF or any other name.
8// Layer names don't all need to be of the same length, obviously, and you can also skip them
9// entirely and just use numbers.
10#define _BL 0
11#define _FL 1
12#define _RS 2
13
14const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
15 /* Keymap _BL: (Base Layer) Default Layer
16 * ,--------------------------------------------------------------------------. ,----.
17 * | Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| ~| BS| |PgUp|
18 * |--------------------------------------------------------------------------| |----|
19 * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PgDn|
20 * |--------------------------------------------------------------------------| `----'
21 * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
22 * |-----------------------------------------------------------------------------.
23 * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| Up|
24 * |------------------------------------------------------------------------|----|----.
25 * | Ctrl| Alt| Gui| MHen| Space| Space| Hen| Gui| Alt| Ctrl|Left|Down|Rght|
26 * `----------------------------------------------------------------------------------'
27 */
28[_BL] = KEYMAP(
29 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
30 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
31 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
32 MO(_FL), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
33 KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
34
35 /* Keymap _FL: Function Layer
36 * ,--------------------------------------------------------------------------. ,----.
37 * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
38 * |--------------------------------------------------------------------------| |----|
39 * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
40 * |--------------------------------------------------------------------------| `----'
41 * | | | _RS| | | | | | | | | | | |
42 * |-----------------------------------------------------------------------------.
43 * | | | | | | | | | | | | | | |PGUP|
44 * |------------------------------------------------------------------------|----|----.
45 * | | | | | | | | | | _FL|HOME|PGDN| END|
46 * `----------------------------------------------------------------------------------'
47 */
48[_FL] = KEYMAP(
49 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_TRNS, KC_DEL, BL_STEP, \
50 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
51 KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
52 MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_PGUP, \
53 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
54
55 /* Keymap _RS: Reset/Underlight layer
56 * ,--------------------------------------------------------------------------. ,----.
57 * | | | | | | | | | | | | | | | | | |
58 * |--------------------------------------------------------------------------| |----|
59 * | | | | |RESET| | | | | | | | | | | |
60 * |--------------------------------------------------------------------------| `----'
61 * | | | _RS| | | | | | | | | | | |
62 * |-----------------------------------------------------------------------------.
63 * | | | | | | | | | | | | | | | |
64 * |------------------------------------------------------------------------|----|----.
65 * | | | | | | | | | | _FL| | | |
66 * `----------------------------------------------------------------------------------'
67 */
68[_RS] = KEYMAP(
69 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, \
70 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, \
71 KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
72 MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \
73 KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI),
74};
75
76/*enum function_id {
77};*/
78
79const uint16_t PROGMEM fn_actions[] = {
80};
81
82void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
83 switch (id) {
84 }
85}
diff --git a/keyboards/clueboard/keymaps/maximised/keymap.c b/keyboards/clueboard/keymaps/maximised/keymap.c
new file mode 100644
index 000000000..ebaefa669
--- /dev/null
+++ b/keyboards/clueboard/keymaps/maximised/keymap.c
@@ -0,0 +1,47 @@
1#include "clueboard.h"
2
3// Helpful defines
4#define _______ KC_TRNS
5
6// Each layer gets a name for readability, which is then used in the keymap matrix below.
7// The underscores don't mean anything - you can have a layer called STUFF or any other name.
8// Layer names don't all need to be of the same length, obviously, and you can also skip them
9// entirely and just use numbers.
10#define _BL 0
11#define _FL 1
12#define _CL 2
13
14const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
15 /* Keymap _BL: Base Layer (Default Layer)
16 */
17[_BL] = KEYMAP(
18 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
19 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
20 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
21 MO(_FL), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
22 KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
23
24 /* Keymap _FL: Function Layer
25 */
26[_FL] = KEYMAP(
27 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
28 _______, _______, _______,_______,_______,_______,_______,_______,_______,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
29 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
30 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), KC_PGUP, \
31 _______, _______, _______,_______, _______,_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
32
33 /* Keymap _CL: Reset/Underlight layer
34 */
35[_CL] = KEYMAP(
36 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
37 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
38 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
39 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
40 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
41};
42
43const uint16_t PROGMEM fn_actions[] = {
44};
45
46void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
47};
diff --git a/keyboards/clueboard/keymaps/maximised/layout.png b/keyboards/clueboard/keymaps/maximised/layout.png
new file mode 100644
index 000000000..bdc5d7623
--- /dev/null
+++ b/keyboards/clueboard/keymaps/maximised/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/maximised/readme.md b/keyboards/clueboard/keymaps/maximised/readme.md
new file mode 100644
index 000000000..b95d1750f
--- /dev/null
+++ b/keyboards/clueboard/keymaps/maximised/readme.md
@@ -0,0 +1,14 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
12# Maximised Clueboard Layout
13
14This layout is intended for a board with one or both shifts split. The outside key on the split shift is an Fn, while the inside is shift. The bottom row has all the mods on both sides, optimised for a Mac.
diff --git a/keyboards/clueboard/keymaps/mouse_keys/Makefile b/keyboards/clueboard/keymaps/mouse_keys/Makefile
new file mode 100644
index 000000000..6c605daec
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mouse_keys/Makefile
@@ -0,0 +1 @@
MOUSEKEY_ENABLE = yes
diff --git a/keyboards/clueboard/keymaps/mouse_keys/keymap.c b/keyboards/clueboard/keymaps/mouse_keys/keymap.c
new file mode 100644
index 000000000..d3108d1e2
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mouse_keys/keymap.c
@@ -0,0 +1,96 @@
1#include "clueboard.h"
2
3// Helpful defines
4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _BL 0
12#define _FL 1
13#define _CL 2
14#define _ML 3
15
16const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
17 /* Keymap _BL: Base Layer (Default Layer)
18 */
19[_BL] = KEYMAP(
20 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
21 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
22 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
23 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
24 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
25
26 /* Keymap _FL: Function Layer
27 */
28[_FL] = KEYMAP(
29 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
30 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
31 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
32 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
33 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
34
35 /* Keymap _CL: Control layer
36 */
37[_CL] = KEYMAP(
38 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
39 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
40 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
41 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
42 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
43
44 /* Keymap _ML: Mouse layer
45 */
46 [_ML] = KEYMAP(
47 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, _______, \
48 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, \
49 _______, _______, KC_BTN3,KC_BTN2,KC_BTN1,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
50 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MS_U, \
51 _______, _______, _______,_______, LT(_ML, KC_SPC),LT(_ML, KC_SPC), _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_MS_L, KC_MS_D,KC_MS_R),
52};
53
54/* This is a list of user defined functions. F(N) corresponds to item N
55 of this list.
56 */
57const uint16_t PROGMEM fn_actions[] = {
58 [0] = ACTION_FUNCTION(0), // Calls action_function()
59};
60
61void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
62 static uint8_t mods_pressed;
63 static bool mod_flag;
64
65 switch (id) {
66 case 0:
67 /* Handle the combined Grave/Esc key
68 */
69 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
70
71 if (record->event.pressed) {
72 /* The key is being pressed.
73 */
74 if (mods_pressed) {
75 mod_flag = true;
76 add_key(KC_GRV);
77 send_keyboard_report();
78 } else {
79 add_key(KC_ESC);
80 send_keyboard_report();
81 }
82 } else {
83 /* The key is being released.
84 */
85 if (mod_flag) {
86 mod_flag = false;
87 del_key(KC_GRV);
88 send_keyboard_report();
89 } else {
90 del_key(KC_ESC);
91 send_keyboard_report();
92 }
93 }
94 break;
95 }
96}
diff --git a/keyboards/clueboard/keymaps/mouse_keys/layout.png b/keyboards/clueboard/keymaps/mouse_keys/layout.png
new file mode 100644
index 000000000..52e5c4581
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mouse_keys/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/mouse_keys/readme.md b/keyboards/clueboard/keymaps/mouse_keys/readme.md
new file mode 100644
index 000000000..97ac6dfa2
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mouse_keys/readme.md
@@ -0,0 +1,16 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
12# MouseKeys Layout
13
14This layout adds a mouse layer. When you hold down the spacebar the arrow keys
15will move your mouse cursor. You can click using the 3 mods to the left of the
16arrow keys, or the 3 keys under your primary fingers on the home row.
diff --git a/keyboards/clueboard/keymaps/shift_fn/keymap.c b/keyboards/clueboard/keymaps/shift_fn/keymap.c
new file mode 100644
index 000000000..c4fae0369
--- /dev/null
+++ b/keyboards/clueboard/keymaps/shift_fn/keymap.c
@@ -0,0 +1,86 @@
1#include "clueboard.h"
2
3// Helpful defines
4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _BL 0
12#define _FL 1
13#define _CL 2
14
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16 /* Keymap _BL: Base Layer (Default Layer)
17 */
18[_BL] = KEYMAP(
19 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
20 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
21 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
22 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
23 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
24
25 /* Keymap _FL: Function Layer
26 */
27[_FL] = KEYMAP(
28 S(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, S(KC_GRV), KC_DEL, BL_STEP, \
29 S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN), \
30 S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT), \
31 MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP, \
32 KC_LCTL, KC_LALT, KC_LGUI,MO(_FL), S(KC_SPC),S(KC_SPC), MO(_FL), KC_RGUI, KC_RALT, KC_RCTL, KC_HOME, KC_PGDN, KC_END),
33
34 /* Keymap _CL: Control layer
35 */
36[_CL] = KEYMAP(
37 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
38 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
39 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
40 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
41 _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD,RGB_SAD,RGB_HUI),
42};
43
44/* This is a list of user defined functions. F(N) corresponds to item N
45 of this list.
46 */
47const uint16_t PROGMEM fn_actions[] = {
48 [0] = ACTION_FUNCTION(0), // Calls action_function()
49};
50
51void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
52 static uint8_t mods_pressed;
53 static bool mod_flag;
54
55 switch (id) {
56 case 0:
57 /* Handle the combined Grave/Esc key
58 */
59 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
60
61 if (record->event.pressed) {
62 /* The key is being pressed.
63 */
64 if (mods_pressed) {
65 mod_flag = true;
66 add_key(KC_GRV);
67 send_keyboard_report();
68 } else {
69 add_key(KC_ESC);
70 send_keyboard_report();
71 }
72 } else {
73 /* The key is being released.
74 */
75 if (mod_flag) {
76 mod_flag = false;
77 del_key(KC_GRV);
78 send_keyboard_report();
79 } else {
80 del_key(KC_ESC);
81 send_keyboard_report();
82 }
83 }
84 break;
85 }
86}
diff --git a/keyboards/clueboard/keymaps/shift_fn/layout.png b/keyboards/clueboard/keymaps/shift_fn/layout.png
new file mode 100644
index 000000000..66d85410c
--- /dev/null
+++ b/keyboards/clueboard/keymaps/shift_fn/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/shift_fn/readme.md b/keyboards/clueboard/keymaps/shift_fn/readme.md
new file mode 100644
index 000000000..369f556f8
--- /dev/null
+++ b/keyboards/clueboard/keymaps/shift_fn/readme.md
@@ -0,0 +1,17 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
12# Shift Fn Clueboard Layout
13
14This is an experimental layout. It makes the left shift key a dual roll key.
15For most keys it acts as a shift key, but for some keys it activates an
16alternate function instead. Primarily I use this to access the F-keys under
17the number rows.
diff --git a/keyboards/clueboard/keymaps/skully/keymap.c b/keyboards/clueboard/keymaps/skully/keymap.c
index df6f054e0..077d214fa 100644
--- a/keyboards/clueboard/keymaps/skully/keymap.c
+++ b/keyboards/clueboard/keymaps/skully/keymap.c
@@ -1,7 +1,8 @@
1#include "clueboard.h" 1#include "clueboard.h"
2 2
3// Used for SHIFT_ESC 3// Helpful defines
4#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) 4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
5 6
6// Each layer gets a name for readability, which is then used in the keymap matrix below. 7// Each layer gets a name for readability, which is then used in the keymap matrix below.
7// The underscores don't mean anything - you can have a layer called STUFF or any other name. 8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -9,21 +10,10 @@
9// entirely and just use numbers. 10// entirely and just use numbers.
10#define _BL 0 11#define _BL 0
11#define _FL 1 12#define _FL 1
12#define _RS 2 13#define _CL 2
13 14
14const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
15 /* Keymap _BL: (Base Layer) Default Layer 16 /* Keymap _BL: Base Layer (Default Layer)
16 * ,--------------------------------------------------------------------------. ,----.
17 * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP|
18 * |--------------------------------------------------------------------------| |----|
19 * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN|
20 * |--------------------------------------------------------------------------| `----'
21 * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
22 * |-----------------------------------------------------------------------------.
23 * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP|
24 * |------------------------------------------------------------------------|----|----.
25 * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
26 * `----------------------------------------------------------------------------------'
27 */ 17 */
28[_BL] = KEYMAP( 18[_BL] = KEYMAP(
29 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \ 19 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
@@ -33,61 +23,43 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33 KC_LCTL,KC_LALT,KC_LGUI,MO(_FL), KC_SPC, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), 23 KC_LCTL,KC_LALT,KC_LGUI,MO(_FL), KC_SPC, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
34 24
35 /* Keymap _FL: Function Layer 25 /* Keymap _FL: Function Layer
36 * ,--------------------------------------------------------------------------. ,----.
37 * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
38 * |--------------------------------------------------------------------------| |----|
39 * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
40 * |--------------------------------------------------------------------------| `----'
41 * | | | _RS| | | | | | | | | | | |
42 * |-----------------------------------------------------------------------------.
43 * | | | | | | | | | | | | | | |PGUP|
44 * |------------------------------------------------------------------------|----|----.
45 * | | | | | | | | | | _FL|HOME|PGDN| END|
46 * `----------------------------------------------------------------------------------'
47 */ 26 */
48[_FL] = KEYMAP( 27[_FL] = KEYMAP(
49 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_TRNS,KC_DEL, BL_STEP, \ 28 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_DEL, BL_STEP, \
50 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ 29 _______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______,_______,_______, _______, \
51 KC_TRNS,KC_TRNS,MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 30 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
52 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_PGUP, \ 31 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_PGUP, \
53 KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL), KC_TRNS,KC_TRNS, MO(_FL),KC_TRNS,KC_TRNS,MO(_FL),KC_HOME,KC_PGDN,KC_END), 32 _______,_______,_______,MO(_FL), _______,_______, MO(_FL),_______,_______,MO(_FL),KC_HOME,KC_PGDN,KC_END),
54 33
55 /* Keymap _RS: Reset layer 34 /* Keymap _CL: Control layer
56 * ,--------------------------------------------------------------------------. ,----.
57 * | | | | | | | | | | | | | | | | | |
58 * |--------------------------------------------------------------------------| |----|
59 * | | | | |RESET| | | | | | | | | | | |
60 * |--------------------------------------------------------------------------| `----'
61 * | | | _RS| | | | | | | | | | | |
62 * |-----------------------------------------------------------------------------.
63 * | | | | | | | | | | | | | | | |
64 * |------------------------------------------------------------------------|----|----.
65 * | | | | | | | | | | _FL| | | |
66 * `----------------------------------------------------------------------------------'
67 */ 35 */
68[_RS] = KEYMAP( 36[_CL] = KEYMAP(
69 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ 37 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
70 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ 38 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
71 KC_TRNS,KC_TRNS,MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 39 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
72 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ 40 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
73 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL),KC_TRNS, KC_TRNS, KC_TRNS), 41 _______,_______,_______,_______, _______,_______, _______,_______,_______,MO(_FL),_______, _______, _______),
74};
75
76enum function_id {
77 SHIFT_ESC,
78}; 42};
79 43
80const uint16_t PROGMEM fn_actions[] = { 44const uint16_t PROGMEM fn_actions[] = {
81 [0] = ACTION_FUNCTION(SHIFT_ESC), 45 [0] = ACTION_FUNCTION(0),
82}; 46};
83 47
84void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { 48void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
85 static uint8_t shift_esc_shift_mask; 49 static uint8_t mods_pressed;
50 static bool mod_flag;
51
86 switch (id) { 52 switch (id) {
87 case SHIFT_ESC: 53 case 0:
88 shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; 54 /* Handle the combined Grave/Esc key
55 */
56 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
57
89 if (record->event.pressed) { 58 if (record->event.pressed) {
90 if (shift_esc_shift_mask) { 59 /* The key is being pressed.
60 */
61 if (mods_pressed) {
62 mod_flag = true;
91 add_key(KC_GRV); 63 add_key(KC_GRV);
92 send_keyboard_report(); 64 send_keyboard_report();
93 } else { 65 } else {
@@ -95,7 +67,10 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
95 send_keyboard_report(); 67 send_keyboard_report();
96 } 68 }
97 } else { 69 } else {
98 if (shift_esc_shift_mask) { 70 /* The key is being released.
71 */
72 if (mod_flag) {
73 mod_flag = false;
99 del_key(KC_GRV); 74 del_key(KC_GRV);
100 send_keyboard_report(); 75 send_keyboard_report();
101 } else { 76 } else {
diff --git a/keyboards/clueboard/keymaps/skully/layout.png b/keyboards/clueboard/keymaps/skully/layout.png
new file mode 100644
index 000000000..64854aaef
--- /dev/null
+++ b/keyboards/clueboard/keymaps/skully/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/skully/readme.md b/keyboards/clueboard/keymaps/skully/readme.md
index c1182123d..08255dfbc 100644
--- a/keyboards/clueboard/keymaps/skully/readme.md
+++ b/keyboards/clueboard/keymaps/skully/readme.md
@@ -1,3 +1,14 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
1# skullY's Clueboard Layout 12# skullY's Clueboard Layout
2 13
3This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing. 14This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing.
diff --git a/keyboards/clueboard/keymaps/unix_optimized/keymap.c b/keyboards/clueboard/keymaps/unix_optimized/keymap.c
new file mode 100644
index 000000000..7c1359954
--- /dev/null
+++ b/keyboards/clueboard/keymaps/unix_optimized/keymap.c
@@ -0,0 +1,86 @@
1#include "clueboard.h"
2
3// Helpful defines
4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _BL 0
12#define _FL 1
13#define _CL 2
14
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16 /* Keymap _BL: Base Layer (Default Layer)
17 */
18[_BL] = KEYMAP(
19 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
20 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
21 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
22 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
23 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
24
25 /* Keymap _FL: Function Layer
26 */
27[_FL] = KEYMAP(
28 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_INS, \
29 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, KC_DEL, \
30 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
31 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
32 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
33
34 /* Keymap _CL: Control layer
35 */
36[_CL] = KEYMAP(
37 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
38 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
39 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
40 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
41 _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD,RGB_HUI),
42};
43
44/* This is a list of user defined functions. F(N) corresponds to item N
45 of this list.
46 */
47const uint16_t PROGMEM fn_actions[] = {
48 [0] = ACTION_FUNCTION(0), // Calls action_function()
49};
50
51void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
52 static uint8_t mods_pressed;
53 static bool mod_flag;
54
55 switch (id) {
56 case 0:
57 /* Handle the combined Grave/Esc key
58 */
59 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
60
61 if (record->event.pressed) {
62 /* The key is being pressed.
63 */
64 if (mods_pressed) {
65 mod_flag = true;
66 add_key(KC_GRV);
67 send_keyboard_report();
68 } else {
69 add_key(KC_ESC);
70 send_keyboard_report();
71 }
72 } else {
73 /* The key is being released.
74 */
75 if (mod_flag) {
76 mod_flag = false;
77 del_key(KC_GRV);
78 send_keyboard_report();
79 } else {
80 del_key(KC_ESC);
81 send_keyboard_report();
82 }
83 }
84 break;
85 }
86}
diff --git a/keyboards/clueboard/keymaps/unix_optimized/layout.png b/keyboards/clueboard/keymaps/unix_optimized/layout.png
new file mode 100644
index 000000000..ea7d30e35
--- /dev/null
+++ b/keyboards/clueboard/keymaps/unix_optimized/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/unix_optimized/readme.md b/keyboards/clueboard/keymaps/unix_optimized/readme.md
new file mode 100644
index 000000000..3510e138b
--- /dev/null
+++ b/keyboards/clueboard/keymaps/unix_optimized/readme.md
@@ -0,0 +1,15 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
12# Default Clueboard Layout
13
14This is the default layout except that Caps Lock has been changed to Control
15and Insert and Delete have been put into the Fn layer.
diff --git a/keyboards/clueboard/keymaps/win_optimized/keymap.c b/keyboards/clueboard/keymaps/win_optimized/keymap.c
new file mode 100644
index 000000000..c5553ff1f
--- /dev/null
+++ b/keyboards/clueboard/keymaps/win_optimized/keymap.c
@@ -0,0 +1,86 @@
1#include "clueboard.h"
2
3// Helpful defines
4#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
5#define _______ KC_TRNS
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _BL 0
12#define _FL 1
13#define _CL 2
14
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16 /* Keymap _BL: Base Layer (Default Layer)
17 */
18[_BL] = KEYMAP(
19 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_INS, \
20 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, \
21 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
22 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
23 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
24
25 /* Keymap _FL: Function Layer
26 */
27[_FL] = KEYMAP(
28 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
29 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
30 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
31 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
32 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
33
34 /* Keymap _CL: Control layer
35 */
36[_CL] = KEYMAP(
37 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
38 _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
39 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
40 MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
41 _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
42};
43
44/* This is a list of user defined functions. F(N) corresponds to item N
45 of this list.
46 */
47const uint16_t PROGMEM fn_actions[] = {
48 [0] = ACTION_FUNCTION(0), // Calls action_function()
49};
50
51void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
52 static uint8_t mods_pressed;
53 static bool mod_flag;
54
55 switch (id) {
56 case 0:
57 /* Handle the combined Grave/Esc key
58 */
59 mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
60
61 if (record->event.pressed) {
62 /* The key is being pressed.
63 */
64 if (mods_pressed) {
65 mod_flag = true;
66 add_key(KC_GRV);
67 send_keyboard_report();
68 } else {
69 add_key(KC_ESC);
70 send_keyboard_report();
71 }
72 } else {
73 /* The key is being released.
74 */
75 if (mod_flag) {
76 mod_flag = false;
77 del_key(KC_GRV);
78 send_keyboard_report();
79 } else {
80 del_key(KC_ESC);
81 send_keyboard_report();
82 }
83 }
84 break;
85 }
86}
diff --git a/keyboards/clueboard/keymaps/win_optimized/layout.png b/keyboards/clueboard/keymaps/win_optimized/layout.png
new file mode 100644
index 000000000..7d8c82da7
--- /dev/null
+++ b/keyboards/clueboard/keymaps/win_optimized/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/win_optimized/readme.md b/keyboards/clueboard/keymaps/win_optimized/readme.md
new file mode 100644
index 000000000..cede17ee1
--- /dev/null
+++ b/keyboards/clueboard/keymaps/win_optimized/readme.md
@@ -0,0 +1,17 @@
1```
2 ___ _____ _ _ _ __ __ _ __
3|__ \ / ____| | | | | | / / / /(_) / /
4 ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
5 |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
6 |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
7 (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
8```
9
10![Clueboard Layout Image](layout.png)
11
12# Default Clueboard Layout
13
14This is the default layout that comes flashed on every Clueboard. For the most
15part it's a straightforward and easy to follow layout. The only unusual key is
16the key in the upper left, which sends Escape normally, but Grave when any of
17the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/rules.mk b/keyboards/clueboard/rules.mk
index 3909fbd5c..7ce096ba8 100644
--- a/keyboards/clueboard/rules.mk
+++ b/keyboards/clueboard/rules.mk
@@ -90,14 +90,14 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
90# Build Options 90# Build Options
91# comment out to disable the options. 91# comment out to disable the options.
92# 92#
93BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) 93BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
94MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) 94MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
95EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) 95EXTRAKEY_ENABLE ?= no # Audio control and System control(+450)
96CONSOLE_ENABLE ?= yes # Console for debug(+400) 96CONSOLE_ENABLE ?= yes # Console for debug(+400)
97COMMAND_ENABLE ?= yes # Commands for debug and configuration 97COMMAND_ENABLE ?= yes # Commands for debug and configuration
98NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work 98NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
99AUDIO_ENABLE ?= no 99AUDIO_ENABLE ?= no
100RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality 100RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality
101MIDI_ENABLE ?= no # MIDI controls 101MIDI_ENABLE ?= no # MIDI controls
102UNICODE_ENABLE ?= no # Unicode 102UNICODE_ENABLE ?= no # Unicode
103BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID \ No newline at end of file 103BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/ergodox/keymaps/colemak_programmer/Makefile b/keyboards/ergodox/keymaps/colemak_programmer/Makefile
new file mode 100644
index 000000000..91b77c77a
--- /dev/null
+++ b/keyboards/ergodox/keymaps/colemak_programmer/Makefile
@@ -0,0 +1 @@
TAP_DANCE_ENABLE = no \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/colemak_programmer/colemak_programmer_001.jpg b/keyboards/ergodox/keymaps/colemak_programmer/colemak_programmer_001.jpg
new file mode 100644
index 000000000..de24d9373
--- /dev/null
+++ b/keyboards/ergodox/keymaps/colemak_programmer/colemak_programmer_001.jpg
Binary files differ
diff --git a/keyboards/ergodox/keymaps/colemak_programmer/colemak_programmer_002.jpg b/keyboards/ergodox/keymaps/colemak_programmer/colemak_programmer_002.jpg
new file mode 100644
index 000000000..15f8ec8c4
--- /dev/null
+++ b/keyboards/ergodox/keymaps/colemak_programmer/colemak_programmer_002.jpg
Binary files differ
diff --git a/keyboards/ergodox/keymaps/colemak_programmer/keymap.c b/keyboards/ergodox/keymaps/colemak_programmer/keymap.c
new file mode 100644
index 000000000..1caccc5c2
--- /dev/null
+++ b/keyboards/ergodox/keymaps/colemak_programmer/keymap.c
@@ -0,0 +1,256 @@
1#include "ergodox.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4/* Keymap 0: Basic layer
5 * MEH: Alt+Control+Shift
6 * HYPER: Alt+Control+Shift+Gui
7 * ,--------------------------------------------------. ,--------------------------------------------------.
8 * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backsp |
9 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
10 * | TAB | Q | W | F | P | G |TG(3) | |TG(4) | J | L | U | Y | ; : | ' " |
11 * |--------+------+------+------+------+------|F-lck | |N-lck |------+------+------+------+------+--------|
12 * | CAPS | A | R | S | T | D |------| |------| H | N | E | I | O | ENT |
13 * |--------+------+------+------+------+------| MEH | | MEH |------+------+------+------+------+--------|
14 * | Shift | Z | X | C | V | B | | | | K | M | , < | . > | UP | Shift |
15 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
16 * | LCTL | LCTL | LGUI | LALT | LGUI | | RALT | RCTL | LEFT | DOWN | RIGHT|
17 * `----------------------------------' `----------------------------------'
18 * ,--------------. ,--------------.
19 * | Esc | App | | Ins | Del |
20 * ,------|------|-------| |------+-------+------.
21 * | | | Home | | PgUp | | |
22 * | MO(2)| MO(4)|-------| |------| Space |Space |
23 * |symbol|N-Lock| End | | PgDn | | |
24 * `---------------------' `---------------------'
25 */
26[0] = KEYMAP( // layer 0 : default
27 // left hand
28 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
29 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(3),
30 KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D,
31 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MEH,
32 KC_LCTL, KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI,
33
34 KC_ESC, KC_APP,
35 KC_HOME,
36 MO(2), MO(4), KC_END,
37
38 // right hand
39 KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
40 TG(4), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_QUOT,
41 KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT,
42 KC_MEH, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
43 KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT,
44
45 KC_INS, KC_DEL,
46 KC_PGUP,
47 KC_PGDN, KC_SPC, KC_SPC
48 ),
49
50/* Keymap 1: QWERTY layer (games)
51 *
52 * ,--------------------------------------------------. ,--------------------------------------------------.
53 * | | | | | | | | | | | | | | | |
54 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
55 * | | Q | W | E | R | T | | | | Y | U | I | O | P | |
56 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
57 * | | A | S | D | F | G |------| |------| H | J | K | L | ; | |
58 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
59 * | | Z | X | C | V | B | | | | N | M | | | | |
60 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
61 * | | | | | | | | | | | |
62 * `----------------------------------' `----------------------------------'
63 * ,-------------. ,-------------.
64 * | | | | | |
65 * ,------|------|------| |------+--------+------.
66 * | | | | | | | |
67 * | | |------| |------| | |
68 * | | | | | | | |
69 * `--------------------' `----------------------'
70 */
71[1] = KEYMAP( // layer 1: QWERTY layer (games)
72 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
73 KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS,
74 KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G,
75 KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRNS,
76 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
77
78 KC_TRNS, KC_TRNS,
79 KC_TRNS,
80 KC_TRNS, KC_TRNS, KC_TRNS,
81
82 // right hand
83 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
84 KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS,
85 KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_TRNS,
86 KC_TRNS, KC_N, KC_M, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
87 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
88 KC_TRNS, KC_TRNS,
89 KC_TRNS,
90 KC_TRNS, KC_TRNS, KC_TRNS
91 ),
92
93/* Keymap 2: Symbol Layer
94*
95* ,--------------------------------------------------. ,--------------------------------------------------.
96* | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
97* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
98* | | | | + | < | % | # | DF(1)| | | & | [ | ] | \ | : | " |
99* |--------+------+------+------+------+------|QWERTY| | |------+------+------+------+------+--------|
100* | | ! | - | > | = | @ |------| |------| * | { | } | / | ? | |
101* |--------+------+------+------+------+------| DF(0)| | |------+------+------+------+------+--------|
102* | | NUBS | NUHS | / | $ | ^ |COLEMAK | | | | ( | ) | | | |
103* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
104* | | | | | | | | | | | |
105* `----------------------------------' `----------------------------------'
106* ,-------------. ,-------------.
107* | | | | | |
108* ,------|------|------| |------+------+------.
109* | | | | | | | |
110* | | |------| |------| | |
111* | | | | | | | |
112* `--------------------' `--------------------'
113*/
114// SYMBOLS
115[2] = KEYMAP(
116 // left hand
117 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
118 KC_TRNS, KC_PIPE, KC_PLUS, KC_LT, KC_PERC, KC_HASH, DF(1),
119 KC_LBRC, KC_EXCLAIM, KC_MINUS, KC_GT, KC_EQUAL, KC_AT,
120 KC_TRNS, KC_NUBS, KC_NUHS, KC_SLSH, KC_DOLLAR, KC_CIRC, DF(0),
121 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
122
123 KC_TRNS, KC_TRNS,
124 KC_TRNS,
125 KC_TRNS, KC_TRNS, KC_TRNS,
126
127 // right hand
128 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
129 KC_TRNS, KC_AMPERSAND, KC_LBRC, KC_RBRC, KC_BSLS, KC_COLN, KC_DQT,
130 KC_ASTERISK, KC_LCBR, KC_RCBR, KC_SLSH, KC_QUES, KC_TRNS,
131 KC_TRNS, KC_PIPE, KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, KC_TRNS,
132 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
133
134 KC_TRNS, KC_TRNS,
135 KC_TRNS,
136 KC_TRNS, KC_TRNS, KC_TRNS
137),
138
139/* Keymap 3:
140 *
141 * ,--------------------------------------------------. ,--------------------------------------------------.
142 * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
143 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
144 * | | | | | | | | | | | | | | | |
145 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
146 * | | | | | | |------| |------| | | | | | |
147 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
148 * | | | | | | | HYPR | | HYPR | | | | | | |
149 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
150 * | | | | | | | | | | | |
151 * `----------------------------------' `----------------------------------'
152 * ,-------------. ,-------------.
153 * | | | | | |
154 * ,------|------|------| |------+------+------.
155 * | | | | | | | |
156 * | | |------ |------| | |
157 * | | | | | | | |
158 * `--------------------' `--------------------'
159 */
160// F-keys
161[3] = KEYMAP(
162 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
163 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
164 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
165 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HYPR,
166 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
167
168 KC_TRNS, KC_TRNS,
169 KC_TRNS,
170 KC_TRNS, KC_TRNS, KC_TRNS,
171
172 // right hand
173 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
174 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
175 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
176 KC_HYPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
177 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
178
179 KC_TRNS, KC_TRNS,
180 KC_TRNS,
181 KC_TRNS, KC_TRNS, KC_TRNS
182),
183/* Keymap 4: Numlock
184 *
185 * ,--------------------------------------------------. ,--------------------------------------------------.
186 * | RESET | | | |P-SCRE|S-LOCK|PAUSE | |NLOCK | CALC | = | / | * | | |
187 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
188 * | | | | | | | | | | Vol+ | 7 | 8 | 9 | - | |
189 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
190 * | | | | | | |------| |------| Vol- | 4 | 5 | 6 | + | |
191 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
192 * | | | | | | | HYPR | | HYPR | Mute | 1 | 2 | 3 |Enter | |
193 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
194 * | | | | | | | | 0 | . | RCTL | RCTL |
195 * `----------------------------------' `----------------------------------'
196 * ,-------------. ,-------------.
197 * | | | | | |
198 * ,------|------|------| |------+------+------.
199 * | | | | | | | |
200 * | | |------ |------| | |
201 * | | | | | | | |
202 * `--------------------' `--------------------'
203 */
204[4] = KEYMAP(
205 RESET, KC_LSFT, KC_LSFT, KC_SYSREQ, KC_PSCR, KC_SLCK, KC_PAUSE,
206 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
207 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
208 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HYPR,
209 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
210
211 KC_TRNS, KC_TRNS,
212 KC_TRNS,
213 KC_TRNS, KC_TRNS, KC_TRNS,
214
215 // right hand
216 KC_NLCK, KC_CALC, KC_PEQL, KC_PSLS, KC_PAST, KC_LSFT, KC_TRNS,
217 KC_TRNS, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_TRNS,
218 KC_VOLD, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS,
219 KC_HYPR, KC_MUTE, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS,
220 KC_TRNS, KC_P0, KC_PDOT, KC_RCTL, KC_RCTL,
221
222 KC_TRNS, KC_TRNS,
223 KC_TRNS,
224 KC_TRNS, KC_TRNS, KC_TRNS
225),
226
227};
228
229
230// Runs constantly in the background, in a loop.
231void matrix_scan_user(void) {
232 static uint8_t state;
233
234 ergodox_board_led_off();
235 ergodox_right_led_1_off();
236 ergodox_right_led_2_off();
237 ergodox_right_led_3_off();
238
239 //reduce LED on time to 1/6th because LEDs are too strong
240 if (++state < 6) return;
241 state = 0;
242
243 //bit 1: default layer 1 - QWERTY
244 if (default_layer_state & (1UL << 1)) ergodox_right_led_1_on();
245
246 uint8_t layer = biton32(layer_state);
247
248 //layer 2 : Symbols (& Fs)
249 //if (layer == 2) ergodox_right_led_2_on();
250
251 //layer 3 : F-lock
252 if (layer == 3) ergodox_right_led_2_on();
253
254 //layer 4 : Num-lock
255 if (layer == 4) ergodox_right_led_3_on();
256};
diff --git a/keyboards/ergodox/keymaps/colemak_programmer/readme.md b/keyboards/ergodox/keymaps/colemak_programmer/readme.md
new file mode 100644
index 000000000..db0cc5777
--- /dev/null
+++ b/keyboards/ergodox/keymaps/colemak_programmer/readme.md
@@ -0,0 +1,23 @@
1# ErgoDox EZ colemak_programmer
2
3## Features
4
5* Qwerty and colemak 2 in 1
6 * Use DF() macro to swap the bottom layer so it behaves literally as collemak or qwerty
7 * Graphical creator did not allow this so I had to use TO(0) and TO(1) on the picture
8* Symbol layer programmers friendly
9 * Not only symbols are easy to access but common combination are easy too: ->, =>, !=, etc.
10* Windows and Mac
11 * The extra repeated Win key is very handy on Mac
12* Numlock
13
14I came to this layout after several iterations. It is not the ultimate best ergonomic layout but it is the best if you switch back and forth between ergodox and laptops.
15
16## Notes
17* The Quote and Enter can be swapped
18* If you use sculpted key caps try turning the bottom key 180 degrees so it became very comfortable to type with thumb.
19
20Alternatively view the [graphical creator version](http://configure.ergodox-ez.com/keyboard_layouts/kmevwm/edit) but beware it is not the same due to the creator limitations.
21
22![Default](colemak_programmer_001.jpg)
23![Default](colemak_programmer_002.jpg) \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.png
index 2c03af581..273a49778 100644
--- a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.png
+++ b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.png
index a267ff23d..5930e38ac 100644
--- a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.png
+++ b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-navigation.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-navigation.png
deleted file mode 100644
index c8c90cf5c..000000000
--- a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-navigation.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-unicode.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-unicode.png
new file mode 100644
index 000000000..0c6473abb
--- /dev/null
+++ b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-unicode.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-4-unicode-2.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-4-unicode-2.png
new file mode 100644
index 000000000..4488e1b37
--- /dev/null
+++ b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-4-unicode-2.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/keymap.c b/keyboards/ergodox/keymaps/deadcyclo/keymap.c
index 5774511cc..243ce94e9 100644
--- a/keyboards/ergodox/keymaps/deadcyclo/keymap.c
+++ b/keyboards/ergodox/keymaps/deadcyclo/keymap.c
@@ -5,8 +5,9 @@
5 5
6#define BASE 0 // default layer 6#define BASE 0 // default layer
7#define SYMB 1 // symbols 7#define SYMB 1 // symbols
8#define MDIA 2 // media keys 8#define MDIA 2 // media keys and navigation
9#define NAVG 3 // navigation 9#define UNI 3 // unicode 1
10#define UNI2 4 // unicode 2
10 11
11enum macros { 12enum macros {
12 RUN 13 RUN
@@ -94,11 +95,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
94 * ,--------------------------------------------------. ,--------------------------------------------------. 95 * ,--------------------------------------------------. ,--------------------------------------------------.
95 * | Esc/L3 | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | =/L3 | 96 * | Esc/L3 | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | =/L3 |
96 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 97 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
97 * | Tab/L1 | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \/L1 | 98 * | Tab/L1 | Q | W | E | R | T | L1 | | L2 | Y | U | I | O | P | \/L1 |
98 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 99 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
99 * | LCtrl | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ctrl/'| 100 * | LCtrl | A | S | D | F | G |------| |------| H | J | K | L | ; | ctrl/'|
100 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| 101 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
101 * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | 102 * | LShift |Z / L4|X / L2| C | V | B | | | | N | M | , |. / L2|/ / L4| RShift |
102 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 103 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
103 * |Grv/L1| UNI |AltShf| Lalt | Ralt | | Lalt | Ralt | LEAD | UNI | ~/L1 | 104 * |Grv/L1| UNI |AltShf| Lalt | Ralt | | Lalt | Ralt | LEAD | UNI | ~/L1 |
104 * `----------------------------------' `----------------------------------' 105 * `----------------------------------' `----------------------------------'
@@ -114,25 +115,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
114// Otherwise, it needs KC_* 115// Otherwise, it needs KC_*
115[BASE] = KEYMAP( // layer 0 : default 116[BASE] = KEYMAP( // layer 0 : default
116 // left hand 117 // left hand
117 LT(NAVG,KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, 118 LT(UNI,KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
118 LT(SYMB,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), 119 LT(SYMB,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
119 KC_LCTL, LT(MDIA, KC_A), KC_S, KC_D, KC_F, KC_G, 120 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
120 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), 121 KC_LSFT, LT(4, KC_Z), LT(MDIA, KC_X), KC_C, KC_V, KC_B, ALL_T(KC_NO),
121 LT(SYMB,KC_GRV),LCTL(LSFT(KC_U)), LALT(KC_LSFT), KC_RALT,KC_LALT, 122 LT(SYMB,KC_GRV),LCTL(LSFT(KC_U)), LALT(KC_LSFT), KC_RALT,KC_LALT,
122 ALT_T(KC_APP), KC_HOME, 123 ALT_T(KC_APP), KC_HOME,
123 KC_END, 124 KC_END,
124 KC_SPC,KC_TAB,KC_LBRC, 125 KC_SPC,KC_TAB,KC_LBRC,
125 // right hand 126 // right hand
126 KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, LT(NAVG,KC_EQL), 127 KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, LT(UNI,KC_EQL),
127 TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, LT(SYMB, KC_BSLS), 128 TG(MDIA), KC_Y, KC_U, KC_I, KC_O, KC_P, LT(SYMB, KC_BSLS),
128 KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), 129 KC_H, KC_J, KC_K, KC_L, KC_SCLN,CTL_T(KC_QUOT),
129 MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, 130 MEH_T(KC_NO),KC_N, KC_M, KC_COMM,LT(MDIA, KC_DOT), LT(UNI2, KC_SLSH), KC_RSFT,
130 KC_LALT, KC_RALT,KC_LEAD,LCTL(LSFT(KC_U)), LT(SYMB,KC_TILD), 131 KC_LALT, KC_RALT,KC_LEAD,LCTL(LSFT(KC_U)), LT(SYMB,KC_TILD),
131 KC_PGUP, KC_INS, 132 KC_PGUP, KC_INS,
132 KC_PGDN, 133 KC_PGDN,
133 KC_RBRC,KC_BSPC, KC_ENT 134 KC_RBRC,KC_BSPC, KC_ENT
134 ), 135 ),
135/* Keymap 1: Symbol Layer LCTL(LSFT(KC_U)) 136/* Keymap 1: Symbol Layer LCTL(LSFT(KC_U))
136 * 137 *
137 * ,--------------------------------------------------. ,--------------------------------------------------. 138 * ,--------------------------------------------------. ,--------------------------------------------------.
138 * | | F1 | F2 | F3 | F4 | F5 | F6 | | F6 | F7 | F8 | F9 | F10 | F11 | F12 | 139 * | | F1 | F2 | F3 | F4 | F5 | F6 | | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
@@ -177,13 +178,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
177/* Keymap 2: Media, mouse and navigation 178/* Keymap 2: Media, mouse and navigation
178 * 179 *
179 * ,--------------------------------------------------. ,--------------------------------------------------. 180 * ,--------------------------------------------------. ,--------------------------------------------------.
180 * | | gg(1)| | | | | | | | | | | | | | 181 * | | gg(1)| gg(2)| gg(3)| gg(4)| gg(5)| gg(6)| | gg(6)| gg(7)| gg(8)| gg(9)| gg(0)| | |
181 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 182 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
182 * | | | | MsUp | RUN | | | | | | | Up | | | | 183 * | | | | MsUp | RUN | | | | | | | Up | | | |
183 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 184 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
184 * | | |MsLeft|MsDown|MsRght| |------| |------| | Left | Down | Right| | Play | 185 * | | |MsLeft|MsDown|MsRght| |------| |------| | Left | Down | Right| | Play |
185 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 186 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
186 * | | | | | | | | | | | | Prev | Next | | | 187 * | | | | | | | | | | | Prev | Next | | | |
187 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 188 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
188 * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | 189 * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
189 * `----------------------------------' `----------------------------------' 190 * `----------------------------------' `----------------------------------'
@@ -209,7 +210,7 @@ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, M(RUN), KC_TRNS, KC_TRNS,
209 F(I3_GO_GROUP_6), F(I3_GO_GROUP_7), F(I3_GO_GROUP_8), F(I3_GO_GROUP_9), F(I3_GO_GROUP_10), KC_TRNS, KC_TRNS, 210 F(I3_GO_GROUP_6), F(I3_GO_GROUP_7), F(I3_GO_GROUP_8), F(I3_GO_GROUP_9), F(I3_GO_GROUP_10), KC_TRNS, KC_TRNS,
210 KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, 211 KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
211 KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_MPLY, 212 KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_MPLY,
212 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, 213 KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS,
213 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, 214 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
214 KC_TRNS, KC_TRNS, 215 KC_TRNS, KC_TRNS,
215 KC_TRNS, 216 KC_TRNS,
@@ -238,7 +239,7 @@ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, M(RUN), KC_TRNS, KC_TRNS,
238 * `--------------------' `--------------------' 239 * `--------------------' `--------------------'
239 */ 240 */
240// Unicode 241// Unicode
241[NAVG] = KEYMAP( 242[UNI] = KEYMAP(
242 KC_TRNS, UC(0x250c), UC(0x2510), UC(0x2514), UC(0x2518), UC(0x2502), UC(0x2500), 243 KC_TRNS, UC(0x250c), UC(0x2510), UC(0x2514), UC(0x2518), UC(0x2502), UC(0x2500),
243 KC_TRNS, F(EMOJI_SHRUG), F(EMOJI_YAY), F(EMOJI_HUG), F(EMOJI_SMILE), F(EMOJI_SMILE2), KC_TRNS, 244 KC_TRNS, F(EMOJI_SHRUG), F(EMOJI_YAY), F(EMOJI_HUG), F(EMOJI_SMILE), F(EMOJI_SMILE2), KC_TRNS,
244 KC_TRNS, F(EMOJI_HMM1), F(EMOJI_HMM2), F(EMOJI_BEAR1), F(EMOJI_BEAR2), F(EMOJI_FUU), 245 KC_TRNS, F(EMOJI_HMM1), F(EMOJI_HMM2), F(EMOJI_BEAR1), F(EMOJI_BEAR2), F(EMOJI_FUU),
@@ -257,6 +258,48 @@ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, M(RUN), KC_TRNS, KC_TRNS,
257 KC_TRNS, 258 KC_TRNS,
258 KC_TRNS, KC_TRNS, KC_TRNS 259 KC_TRNS, KC_TRNS, KC_TRNS
259), 260),
261
262/* Keymap 4: Unicode 2
263 *
264 * ,--------------------------------------------------. ,--------------------------------------------------.
265 * | | ¹ | ² | ³ | ⁴ | ⁵ | ⁶ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | ℃ | ™ |
266 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
267 * | | ₁ | ₂ | ₃ | ₄ | ₅ | ₆ | | ₆ | ₇ | ₈ | ₉ | ₀ | ⁄ | |
268 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
269 * | | ⅞ | ⅝ | ⅜ | ⅛ | ⅚ |------| |------| ⅓ | ⅒ | ⅑ | ⅐ | ¾ | |
270 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
271 * | | | | ⅗ | ⅖ | ⅕ | ⅔ | | ¼ | ⅙ | ⅘ | ½ | | | |
272 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
273 * | | | | | | | | | | | |
274 * `----------------------------------' `----------------------------------'
275 * ,-------------. ,-------------.
276 * | | | | | |
277 * ,------|------|------| |------+------+------.
278 * | | | | | | | |
279 * | | |------| |------| | |
280 * | | | | | | | |
281 * `--------------------' `--------------------'
282 */
283// Unicode 2
284[UNI2] = KEYMAP(
285 KC_TRNS, UC(0x00b9), UC(0x00b2), UC(0x00b3), UC(0x2074), UC(0x2075), UC(0x2076),
286 KC_TRNS, UC(0x2081), UC(0x2082), UC(0x2083), UC(0x2084), UC(0x2085), UC(0x2086),
287 KC_TRNS, UC(0x215e), UC(0x215d), UC(0x215c), UC(0x215b), UC(0x215a),
288 KC_TRNS, KC_TRNS, KC_TRNS, UC(0x2157), UC(0x2156), UC(0x2155), UC(0x2154),
289 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
290 KC_TRNS, KC_TRNS,
291 KC_TRNS,
292 KC_TRNS, KC_TRNS, KC_TRNS,
293 // right hand
294 UC(0x2076), UC(0x2077), UC(0x2078), UC(0x2079), UC(0x2070), UC(0x2103), UC(0x2122),
295 UC(0x2086), UC(0x2087), UC(0x2088), UC(0x2089), UC(0x2080), UC(0x2044), KC_TRNS,
296 UC(0x2153), UC(0x2152), UC(0x2151), UC(0x2150), UC(0x00be), KC_TRNS,
297 UC(0x00bc), UC(0x2159), UC(0x2158), UC(0x00bd), KC_TRNS, KC_TRNS, KC_TRNS,
298 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
299 KC_TRNS, KC_TRNS,
300 KC_TRNS,
301 KC_TRNS, KC_TRNS, KC_TRNS
302),
260}; 303};
261 304
262const uint16_t PROGMEM fn_actions[] = { 305const uint16_t PROGMEM fn_actions[] = {
@@ -506,8 +549,11 @@ void matrix_scan_user(void) {
506 #endif 549 #endif
507 break; 550 break;
508 case 4: 551 case 4:
509 ergodox_right_led_1_on(); // TODO: Make a fourth layer 552 ergodox_right_led_1_on();
510 ergodox_right_led_3_on(); 553 ergodox_right_led_3_on();
554 #ifdef RGBLIGHT_ENABLE
555 rgblight_setrgb(0xff,0x00,0xff);
556 #endif
511 break; 557 break;
512 default: 558 default:
513 // none 559 // none
diff --git a/keyboards/ergodox/keymaps/deadcyclo/readme.md b/keyboards/ergodox/keymaps/deadcyclo/readme.md
index fa41f0ec1..c839f99c9 100644
--- a/keyboards/ergodox/keymaps/deadcyclo/readme.md
+++ b/keyboards/ergodox/keymaps/deadcyclo/readme.md
@@ -51,10 +51,16 @@ provides standard media control keys, and default arrow keys.
51 51
52## Layer 3 - Unicode 52## Layer 3 - Unicode
53 53
54[![Layer 3 - Unicode](images/deadcyclo-layer-3-navigation.png)](http://www.keyboard-layout-editor.com/#/gists/67d9613dcd873c68693d11863d0fd289) 54[![Layer 3 - Unicode](images/deadcyclo-layer-3-unicode.png)](http://www.keyboard-layout-editor.com/#/gists/67d9613dcd873c68693d11863d0fd289)
55 55
56The unicode layer provides keys for directly typing unicode (utf-8) 56The unicode layer provides keys for directly typing unicode (utf-8)
57 57
58## Layer 4 - Unicode 2
59
60[![Layer 43 - Unicode](images/deadcyclo-layer-4-unicode-2.png)](http://www.keyboard-layout-editor.com/#/gists/7b2241110ab8311d9668a0798f3baf4a)
61
62The unicode 2 layer provides keys for directly typing unicode (utf-8)
63
58# Changelog 64# Changelog
59 65
60- 02.01.2017 Added delete key on second layer 66- 02.01.2017 Added delete key on second layer
@@ -63,6 +69,7 @@ The unicode layer provides keys for directly typing unicode (utf-8)
63- 24.01.2017 Added unicode keys. Added shrug hug and yay. Moved Navigation to layer 2 69- 24.01.2017 Added unicode keys. Added shrug hug and yay. Moved Navigation to layer 2
64- 25.01.2017 Added lots of new emojis and some unicode keys 70- 25.01.2017 Added lots of new emojis and some unicode keys
65- 27.01.2017 Added new unicode keys and shortcut for ibus unicode composer key (CTRL+SHIFT+U) 71- 27.01.2017 Added new unicode keys and shortcut for ibus unicode composer key (CTRL+SHIFT+U)
72- 11.03.2017 Added additional unicode layer. Moved some layer switch keys to more sane locations
66 73
67# TODO 74# TODO
68 75
diff --git a/keyboards/ergodox/keymaps/dvorak_emacs_software/keymap.c b/keyboards/ergodox/keymaps/dvorak_emacs_software/keymap.c
new file mode 100755
index 000000000..a2bc15c99
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_emacs_software/keymap.c
@@ -0,0 +1,166 @@
1#include "ergodox.h"
2#include "keymap_dvorak.h"
3#include "debug.h"
4#include "action_layer.h"
5
6/******************************************************************************************
7 * DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/)
8 * Layer 1: auxiliary keys
9 * Layer 2: full qwerty layout
10 *****************************************************************************************/
11
12// LAYERS
13#define BASE 0 // dvorak layout (default)
14#define AUX 1 // auxiliary keys
15
16// MACROS
17/* #define OBRACE 0 // key { or shift */
18/* #define CBRACE 1 // key } or shift */
19/* #define OBRACK 2 // key [ or left alt */
20/* #define CBRACK 3 // key ] or left alt */
21/* #define CAPS 4 // caps lock */
22
23// LEDS
24#define USB_LED_NUM_LOCK 0
25#define USB_LED_CAPS_LOCK 1
26#define USB_LED_SCROLL_LOCK 2
27#define USB_LED_COMPOSE 3
28#define USB_LED_KANA 4
29
30// TIMERS
31#define KEY_TAP_FAST 85
32#define KEY_TAP_SLOW 95
33
34const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
35/* Keymap 0: Base layer
36 * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
37 *
38 * ,--------------------------------------------------. ,--------------------------------------------------.
39 * | | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = / + |
40 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
41 * | ~ |" / ' |, / < |. / > | P | Y | [ | | ] | F | G | C | H | L | / / ? |
42 * |--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
43 * | Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - / _ |
44 * |--------+------+------+------+------+------| LGUI | | LGUI |------+------+------+------+------+--------|
45 * | {/LSft |; / : | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
46 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
47 * | | | | | ~L1 | | ~L1 | | | \ / || |
48 * `----------------------------------' `----------------------------------'
49 * ,-------------. ,-------------.
50 * | HOME | END | | LEFT | RIGHT|
51 * ,------|------|------| |------+--------+------.
52 * | BSPC | DEL | PGUP | | UP | SPACE |RETURN|
53 * | / | / |------| |------| / | / |
54 * | LCTL | LALT |PGDWN | | DOWN | LALT | LCTL |
55 * `--------------------' `----------------------'
56 *
57 */
58[BASE] = KEYMAP(
59 // left hand
60 KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
61 KC_TILD, DV_QUOT, DV_COMM,DV_DOT, DV_P, DV_Y, DV_LBRC,
62 KC_TAB, DV_A, DV_O, DV_E, SFT_T(DV_U), LT(AUX, DV_I),
63 SFT_T(DV_LBRC), DV_SCLN, DV_Q, DV_J, DV_K, DV_X, KC_LGUI,
64 KC_NO, KC_NO, KC_NO, KC_NO, MO(AUX),
65 KC_HOME, KC_END,
66 KC_PGUP,
67 CTL_T(KC_BSPC), ALT_T(KC_DEL), KC_PGDN,
68 // right hand
69 KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, DV_EQL,
70 DV_RBRC, DV_F, DV_G, DV_C, DV_R, DV_L, DV_SLSH,
71 LT(AUX, DV_D), SFT_T(DV_H), DV_T, DV_N, DV_S, DV_MINS,
72 KC_LGUI, DV_B, DV_M, DV_W, DV_V, DV_Z, SFT_T(DV_RBRC),
73 MO(AUX), KC_NO, KC_NO, KC_BSLS, KC_NO,
74 KC_LEFT, KC_RIGHT,
75 KC_UP,
76 KC_DOWN, ALT_T(KC_ENT), CTL_T(KC_SPC)
77 ),
78/* Keymap 1: Aux layer
79 *
80 * ,--------------------------------------------------. ,--------------------------------------------------.
81 * | VolUp | | | | | | SLEEP | PWR | | | | | | |
82 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
83 * | VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | |
84 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
85 * | | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | |
86 * |--------+------+------+------+------+------| | |PSCR |------+-----aan+------+------+------+--------|
87 * | TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS |
88 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
89 * |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | |
90 * `----------------------------------' `----------------------------------'
91 * ,-------------. ,-------------.
92 * | TRANS| TRANS| | TRANS| TRANS|
93 * ,------|------|------| |------+------+------.
94 * | | | TRANS| | TRANS| | |
95 * |TRANS |TRANS |------| |------| TRANS| TRANS|
96 * | | | TRANS| | TRANS| | |
97 * `--------------------' `--------------------'
98 */
99[AUX] = KEYMAP(
100 // left hand
101 KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SLEP,
102 KC_VOLD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_NO,
103 KC_NO , KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
104 KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
105 LCTL(DV_S), LCTL(DV_Z), LCTL(DV_X), LCTL(DV_C), KC_TRNS,
106 KC_TRNS , KC_TRNS,
107 KC_TRNS,
108 KC_TRNS, KC_TRNS, KC_TRNS,
109 // right hand
110 KC_PWR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
111 KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_NO,
112 KC_TRNS, KC_4, KC_5, KC_6, KC_PPLS, KC_NO,
113 KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_TRNS,
114 KC_TRNS,KC_DOT, KC_0, KC_PEQL, KC_NO,
115 KC_TRNS , KC_TRNS,
116 KC_TRNS,
117 KC_TRNS, KC_TRNS, KC_TRNS
118),
119};
120
121const uint16_t PROGMEM fn_actions[] = {
122 [1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux)
123};
124
125
126const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
127{
128 // MACRODOWN only works in this function
129 switch(id) {
130 case 0:
131 if (record->event.pressed) {
132 register_code(KC_RSFT);
133 } else {
134 unregister_code(KC_RSFT);
135 }
136 break;
137 }
138 return MACRO_NONE;
139};
140
141// Runs just one time when the keyboard initializes.
142void matrix_init_user(void) {
143
144};
145
146// Runs constantly in the background, in a loop.
147void matrix_scan_user(void) {
148
149 uint8_t layer = biton32(layer_state);
150
151 ergodox_board_led_off();
152 ergodox_right_led_1_off();
153 ergodox_right_led_2_off();
154 ergodox_right_led_3_off();
155 switch (layer) {
156 case 1:
157 ergodox_right_led_1_on();
158 break;
159 case 2:
160 ergodox_right_led_2_on();
161 break;
162 default:
163 // none
164 break;
165 }
166}
diff --git a/keyboards/ergodox/keymaps/dvorak_emacs_software/readme.md b/keyboards/ergodox/keymaps/dvorak_emacs_software/readme.md
new file mode 100644
index 000000000..0e1e94ffe
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_emacs_software/readme.md
@@ -0,0 +1,74 @@
1# Ergodox Dvorak Layout with emacs binding in mind - software version
2
3This configuration is the same as the dvorak_emacs layout, but using a sofware dvorak configuration
4instead of a firmware configuration. This layout is for those who run their computer in dvorak mode.
5
6 * Control & Alt key on the thumbs (activated if pressed with another key).
7 * In the same way, "U" and "R" are the shift modifier if pressed with another key.
8 * "I" and "D" set the layer 1 for the auxiliary keys if pressed with another key.
9 * Software layout set to english.
10
11## Keymap Layers
12 - L0: dvorak with some customizations (see layout below)
13 - L1: auxiliary keys (includes function keys, numpad...)
14
15
16### Keymap 0: Base layer
17Keys with double values (like U/LSft) correspond to the 'tapped' key and the 'held' key, respectively
18
19<pre><code>
20
21,--------------------------------------------------. ,--------------------------------------------------.
22| | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = |
23|--------|------|------|------|------|-------------| |------|------|------|------|------|------|--------|
24| ~ | ' | , | . | P | Y | [ | | ] | F | G | C | H | L | / |
25|--------|------|------|------|------|------| { | | } |------|------|------|------|------|--------|
26| Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - |
27|--------|------|------|------|------|------| LGUI | | LGUI |------|------|------|------|------|--------|
28| {/LSft | ; | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
29`--------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
30 | | | | | ~L1 | | ~L1 | | | \ | |
31 `----------------------------------' `----------------------------------'
32 ,-------------. ,-------------.
33 | HOME | END | | LEFT | RIGHT|
34 ,------|------|------| |------|--------|------.
35 | BSPC | DEL | PGUP | | UP | SPACE |RETURN|
36 | / | / |------| |------| / | / |
37 | LCTL | LALT |PGDWN | | DOWN | LALT | LCTL |
38 `--------------------' `----------------------'
39
40</pre></code>
41
42### Keymap 1: Aux layer
43
44<pre><code>
45
46,--------------------------------------------------. ,--------------------------------------------------.
47| VolUp | | | | | | SLEEP | PWR | | | | | | |
48|--------|------|------|------|------|-------------| |------|------|------|------|------|------|--------|
49| VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | |
50|--------|------|------|------|------|------| | | |------|------|------|------|------|--------|
51| | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | |
52|--------|------|------|------|------|------| | |PSCR |------|------|------|------|------|--------|
53| TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS |
54`--------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
55 |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | |
56 `----------------------------------' `----------------------------------'
57 ,-------------. ,-------------.
58 | TRANS| TRANS| | TRANS| TRANS|
59 ,------|------|------| |------|------|------.
60 | | | TRANS| | TRANS| | |
61 |TRANS |TRANS |------| |------| TRANS| TRANS|
62 | | | TRANS| | TRANS| | |
63 `--------------------' `--------------------'
64
65</pre></code>
66
67
68
69## Generation of .hex file
70> In the "qmk_firmware/keyboards/ergodox" directory.
71
72> Execute "make dvorak_emacs". Then the hex file "ergodox_ez_dvorak_emacs.hex" is in the root directory : "qmk_firmware".
73
74> Flash with `teensy_loader` binary
diff --git a/keyboards/ergodox/keymaps/german-lukas/README.md b/keyboards/ergodox/keymaps/german-lukas/README.md
new file mode 100644
index 000000000..3566b4ee6
--- /dev/null
+++ b/keyboards/ergodox/keymaps/german-lukas/README.md
@@ -0,0 +1,12 @@
1# About this keymap
2
3This keymap is based on the qwertz layout.
4It has a key for pressing the left control and the left alt key at once.
5
6Linux makes a difference between AltGr and Control + Alt. Some keybindings are easier to press now.
7
8Also, I added a layer for pressing Control + Alt + F-Keys very fast.
9
10# Layer
11
12Each layer in the *keymap.c*-file has a comment showing the mappings of the layer.
diff --git a/keyboards/ergodox/keymaps/german-lukas/keymap.c b/keyboards/ergodox/keymaps/german-lukas/keymap.c
new file mode 100644
index 000000000..c6e9f2f90
--- /dev/null
+++ b/keyboards/ergodox/keymaps/german-lukas/keymap.c
@@ -0,0 +1,236 @@
1#include "ergodox.h"
2#include "debug.h"
3#include "action_layer.h"
4#include "keymap_german.h"
5
6// Layer names
7#define BASE 0 // default layer
8#define SYMB 1 // symbol layer
9#define MDIA 2 // media keys
10#define SHRT 3 // shortcut layer
11
12const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
13/* Keymap 0: Basic layer
14 *
15 *
16 * ,--------------------------------------------------. ,--------------------------------------------------.
17 * | Caps | 1 | 2 | 3 | 4 | 5 |X ` X| | PRSC | 6 | 7 | 8 | 9 | 0 | ß |
18 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
19 * | Tab | Q | W | E | R | T | L1 | | L1 | Z | U | I | O | P | Ü |
20 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
21 * | Esc | A | S | D | F | G |------| |------| H | J | K | L | Ö | Ä/L2 |
22 * |--------+------+------+------+------+------| L2 | | L2 |------+------+------+------+------+--------|
23 * | LShift | Y | X | C | V | B | | | | N | M | , | . | - | RShift |
24 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
25 * | LGui | ^ | < | LEFT | RIGHT| | Up | Down | # | + | LCA |
26 * `----------------------------------' `----------------------------------'
27 * ,-------------. ,-------------.
28 * | CTRL | ALT | | Alt |Ctrl/Esc|
29 * ,------+------+------| |------+--------+------.
30 * | | | Home | | PgUp | | |
31 * | Space|Del |------| |------| Bkspc | Enter|
32 * | | | End | | PgDn | | |
33 * `--------------------' `----------------------'
34 */
35// If it accepts an argument (i.e, is a function), it doesn't need KC_.
36// Otherwise, it needs KC_*
37[BASE] = KEYMAP( // layer 0 : default
38 // left hand
39 KC_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, DE_ACUT,
40 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
41 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
42 KC_LSFT, DE_Y, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
43 KC_LGUI, DE_CIRC, DE_LESS, KC_LEFT, KC_RIGHT,
44 KC_LCTRL, KC_LALT,
45 KC_HOME,
46 KC_SPC ,KC_DELT,KC_END,
47 // right hand
48 KC_PSCREEN, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
49 TG(MDIA), DE_Z, KC_U, KC_I, KC_O, KC_P, LT(SHRT,DE_UE),
50 KC_H, KC_J, KC_K, KC_L, DE_OE, LT(MDIA,DE_AE),
51 MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, DE_MINS, KC_RSFT,
52 KC_UP, KC_DOWN, DE_HASH, DE_PLUS, LCA_T(KC_NO),
53 KC_RALT, KC_RCTRL,
54 KC_PGUP,
55 KC_PGDN, KC_BSPC, KC_ENT
56 ),
57
58/* Keymap 1: Symbol Layer
59 *
60 * ,--------------------------------------------------. ,--------------------------------------------------.
61 * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
62 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
63 * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
64 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
65 * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
66 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
67 * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
68 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
69 * | | | | | | | | . | 0 | = | |
70 * `----------------------------------' `----------------------------------'
71 * ,-------------. ,-------------.
72 * | | | | | |
73 * ,------|------|------| |------+------+------.
74 * | | | | | | | |
75 * | | |------| |------| | |
76 * | | | | | | | |
77 * `--------------------' `--------------------'
78 */
79// SYMBOLS
80[SYMB] = KEYMAP(
81 // left hand
82 KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
83 KC_TRNS,DE_EXLM,DE_AT, DE_LCBR,DE_RCBR,DE_PIPE,KC_TRNS,
84 KC_TRNS,DE_HASH,DE_DLR, DE_LPRN,DE_RPRN,DE_GRV,
85 KC_TRNS,DE_PERC,DE_CIRC,DE_LBRC,DE_RBRC,DE_TILD,KC_TRNS,
86 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
87 KC_TRNS,KC_TRNS,
88 KC_TRNS,
89 KC_TRNS,KC_TRNS,KC_TRNS,
90 // right hand
91 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
92 KC_TRNS, KC_UP, KC_7, KC_8, KC_9, DE_ASTR, KC_F12,
93 KC_DOWN, KC_4, KC_5, KC_6, DE_PLUS, KC_TRNS,
94 KC_TRNS, DE_AMPR, KC_1, KC_2, KC_3, DE_BSLS, KC_TRNS,
95 KC_TRNS,KC_DOT, KC_0, DE_EQL, KC_TRNS,
96 KC_TRNS, KC_TRNS,
97 KC_TRNS,
98 KC_TRNS, KC_TRNS, KC_TRNS
99),
100
101/* Keymap 2: Media and mouse keys
102 *
103 * ,--------------------------------------------------. ,--------------------------------------------------.
104 * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
105 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
106 * | | | Lclk | MsUp | Rclk | | | | | |VolDwn| Mute |VolUp | | F12 |
107 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
108 * | | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------| |------| | Prev | Stop | Play | Next | |
109 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
110 * | |WhRght|WhDown| WhUp |WhLeft|WhClk | | | |BwSrch|BwBack|BwHome|BwRefr|BwFwd | |
111 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
112 * | | |MsAcl0|MsAcl1|MsAcl2| | | | | | |
113 * `----------------------------------' `----------------------------------'
114 * ,-------------. ,-------------.
115 * | | | | | |
116 * ,------|------|------| |------+------+------.
117 * | | | | | |Brwser|Brwser|
118 * | Lclk | Rclk |------| |------|Back |Forwd |
119 * | | | | | | | |
120 * `--------------------' `--------------------'
121 */
122// MEDIA AND MOUSE
123[MDIA] = KEYMAP(
124 // left hand
125 KC_TRNS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_TRNS,
126 KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
127 KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5,
128 KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS,
129 KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2,
130 KC_TRNS, KC_TRNS,
131 KC_TRNS,
132 KC_BTN1, KC_BTN2, KC_TRNS,
133 // right hand
134 KC_TRNS, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11,
135 KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12,
136 KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,
137 KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS,
138 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
139 KC_TRNS, KC_TRNS,
140 KC_TRNS,
141 KC_TRNS, KC_WBAK, KC_WFWD
142),
143
144/* Keymap 3: Linux shortcuts
145 *
146 * ,--------------------------------------------------. ,--------------------------------------------------.
147 * | | | | | | | | | | | | | | | |
148 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
149 * | |LCA-F1|LCA-F2|LCA-F3|LCA-F4|LCA-F5| | | |LCA-F6|LCA-F7|LCA-F8|LCA-F9| | |
150 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
151 * | | |LCA-Le| |LCA-Ri| |------| |------| | | | | | |
152 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
153 * | | | | | | | | | | | | | | | |
154 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
155 * | | | |LCA-Le|LCA-Ri| | | | | | |
156 * `----------------------------------' `----------------------------------'
157 * ,-------------. ,-------------.
158 * | | | | | |
159 * ,------|------|------| |------+------+------.
160 * | | | | | | | |
161 * | | |------| |------| | |
162 * | | | | | | | |
163 * `--------------------' `--------------------'
164 */
165// Shortcuts
166[SHRT] = KEYMAP(
167 // left hand
168 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
169 KC_TRNS, LCA(KC_F1), LCA(KC_F2), LCA(KC_F3), LCA(KC_F4), LCA(KC_F5), KC_TRNS,
170 KC_TRNS, KC_TRNS, LCA(KC_LEFT), KC_TRNS, LCA(KC_RIGHT), KC_TRNS,
171 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
172 KC_TRNS, KC_TRNS, KC_TRNS, LCA(KC_LEFT), LCA(KC_RIGHT),
173 KC_TRNS, KC_TRNS,
174 KC_TRNS,
175 KC_TRNS, KC_TRNS, KC_TRNS,
176 // right hand
177 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
178 KC_TRNS, LCA(KC_F6), LCA(KC_F7), LCA(KC_F8), LCA(KC_F9), KC_TRNS, KC_TRNS,
179 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
180 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
181 LCA(KC_UP), LCA(KC_DOWN), KC_TRNS, KC_TRNS, KC_TRNS,
182 KC_TRNS, KC_TRNS,
183 KC_TRNS,
184 KC_TRNS, KC_TRNS, KC_TRNS
185),
186};
187
188const uint16_t PROGMEM fn_actions[] = {
189 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
190};
191
192const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
193{
194 // MACRODOWN only works in this function
195 switch(id) {
196 case 0:
197 if (record->event.pressed) {
198 register_code(KC_RSFT);
199 } else {
200 unregister_code(KC_RSFT);
201 }
202 break;
203 }
204 return MACRO_NONE;
205};
206
207// Runs just one time when the keyboard initializes.
208void matrix_init_user(void) {
209
210};
211
212// Runs constantly in the background, in a loop.
213void matrix_scan_user(void) {
214
215 uint8_t layer = biton32(layer_state);
216
217 ergodox_board_led_off();
218 ergodox_right_led_1_off();
219 ergodox_right_led_2_off();
220 ergodox_right_led_3_off();
221 switch (layer) {
222 case SYMB:
223 ergodox_right_led_1_on();
224 break;
225 case MDIA:
226 ergodox_right_led_2_on();
227 break;
228 case SHRT:
229 ergodox_right_led_3_on();
230 break;
231 default:
232 ergodox_board_led_off();
233 break;
234 }
235
236};
diff --git a/keyboards/ergodox/keymaps/guni/keymap.c b/keyboards/ergodox/keymaps/guni/keymap.c
new file mode 100644
index 000000000..9d9191f62
--- /dev/null
+++ b/keyboards/ergodox/keymaps/guni/keymap.c
@@ -0,0 +1,177 @@
1#include "ergodox.h"
2#include "debug.h"
3#include "action_layer.h"
4#include "bootloader.h"
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 KEYMAP( // layer 0 : default
8 // left hand
9 KC_EQL , KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC,
10 KC_FN25 , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME,
11 KC_FN27 , KC_A, KC_S, KC_D, KC_F, KC_G,
12 KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGUP,
13 KC_LGUI , KC_GRV,KC_LEFT,KC_RGHT,KC_LALT,
14 KC_NO , KC_NO ,
15 KC_NO ,
16 KC_BSPC,KC_DEL ,KC_FN23,
17 // right hand
18 KC_RBRC , KC_6, KC_7 , KC_8, KC_9, KC_0, KC_MINS,
19 KC_END , KC_Y, KC_U , KC_I, KC_O, KC_P, KC_FN28,
20 KC_H , KC_J, KC_K , KC_L, KC_SCLN,KC_FN30,
21 KC_PGDN , KC_N, KC_M , KC_COMM,KC_DOT, KC_SLSH,KC_FN29,
22 KC_RALT , KC_DOWN,KC_UP, KC_NO ,KC_RGUI,
23 KC_NO , KC_NO,
24 KC_NO ,
25 KC_FN29,KC_ENT ,KC_SPC
26 ),
27
28 KEYMAP( // layer 1 : function and symbol keys
29 // left hand
30 KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
31 KC_TRNS,KC_AT,KC_UNDS ,KC_LBRC,KC_RBRC,KC_CIRC ,KC_TRNS,
32 KC_TRNS,KC_BSLS,KC_SLSH,KC_LCBR ,KC_RCBR ,KC_ASTR,
33 KC_TRNS,KC_HASH ,KC_DLR ,KC_PIPE ,KC_TILD ,KC_GRV ,KC_TRNS,
34 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
35 KC_TRNS,KC_TRNS,
36 KC_TRNS,
37 KC_TRNS,KC_TRNS,KC_FN1,
38 // right hand
39 KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
40 KC_TRNS,KC_EXLM,LSFT(KC_COMM),LSFT(KC_DOT),KC_EQL,KC_AMPR, KC_TRNS,
41 LSFT(KC_SLSH),KC_LPRN,KC_RPRN,KC_MINS,LSFT(KC_SCLN),KC_TRNS,
42 KC_TRNS,KC_PLUS,LSFT(KC_5),LSFT(KC_QUOT),KC_QUOT,KC_SCLN,KC_TRNS,
43 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
44 KC_TRNS,KC_TRNS,
45 KC_TRNS,
46 KC_TRNS,KC_TRNS,KC_TRNS
47 ),
48
49 KEYMAP( // layer 2: navigation
50 // left hand
51 KC_NO,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
52 KC_TRNS,KC_PGUP,KC_HOME,KC_UP ,KC_END,KC_NO ,KC_TRNS,
53 KC_TRNS,KC_PGDN,KC_LEFT,KC_DOWN,KC_RGHT,KC_NO,
54 KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO,KC_NO,KC_NO,
55 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
56 KC_TRNS,KC_TRNS,
57 KC_TRNS,
58 KC_TRNS,KC_TRNS,KC_FN1 ,
59 // right hand
60 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
61 KC_TRNS ,KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_END ,KC_TRNS,
62 KC_NO, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,KC_TRNS,
63 KC_TRNS,KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP,KC_TRNS,
64 KC_LEFT, KC_DOWN,KC_RGHT,KC_PGDN,KC_TRNS,
65 KC_TRNS,KC_TRNS,
66 KC_TRNS,
67 KC_TRNS,KC_TRNS,KC_TRNS
68 ),
69 KEYMAP( // layer 3 : teensy bootloader functions
70 // left hand
71 KC_FN0, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
72 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
73 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
74 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
75 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
76 KC_TRNS,KC_TRNS,
77 KC_TRNS,
78 KC_TRNS,KC_TRNS,KC_FN1 ,
79 // right hand
80 KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
81 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
82 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
83 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
84 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
85 KC_TRNS,KC_TRNS,
86 KC_TRNS,
87 KC_TRNS,KC_TRNS,KC_TRNS
88 ),
89
90
91 KEYMAP( // layer 4: numpad
92 // left hand
93 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
94 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
95 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
96 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
97 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
98 KC_TRNS,KC_TRNS,
99 KC_TRNS,
100 KC_TRNS,KC_TRNS,KC_TRNS,
101 // right hand
102 KC_TRNS,KC_NLCK,KC_PSLS,KC_PAST,KC_PAST,KC_PMNS,KC_BSPC,
103 KC_TRNS,KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS,KC_BSPC,
104 KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS,KC_PENT,
105 KC_TRNS,KC_NO, KC_P1, KC_P2, KC_P3, KC_PPLS,KC_PENT,
106 KC_P0, KC_PDOT,KC_SLSH,KC_PENT,KC_PENT,
107 KC_TRNS,KC_TRNS,
108 KC_TRNS,
109 KC_TRNS,KC_TRNS,KC_TRNS
110 ),
111
112};
113
114/* id for user defined functions */
115enum function_id {
116 TEENSY_KEY,
117};
118
119/*
120 * Fn action definition
121 */
122const uint16_t PROGMEM fn_actions[] = {
123 [0] = ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key
124 [1] = ACTION_LAYER_SET(0, ON_PRESS),
125 //[11] = ACTION_MODS_KEY(MOD_LSFT, KC_COMM),
126 //[12] = ACTION_MODS_KEY(MOD_LSFT, KC_DOT),
127
128 //[14] = ACTION_MODS_KEY(MOD_LSFT, KC_SLSH),
129 //[17] = ACTION_MODS_KEY(MOD_LSFT, KC_SCLN),
130 //[20] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
131 //[21] = ACTION_MODS_KEY(MOD_LSFT, KC_QUOT),
132 [23] = ACTION_LAYER_SET(3, ON_PRESS),
133 [24] = ACTION_LAYER_SET(2, ON_PRESS),
134 [25] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB),
135 [26] = ACTION_LAYER_SET(1, ON_PRESS),
136 [27] = ACTION_LAYER_TAP_KEY(1, KC_CAPS),
137 [28] = ACTION_MODS_TAP_KEY(MOD_RCTL,KC_BSLS),
138 //[29] = ACTION_LAYER_TOGGLE(4),
139 [29] = ACTION_MODS_TAP_KEY(MOD_RSFT,KC_ESC),
140 [30] = ACTION_LAYER_TAP_KEY(1, KC_QUOT),
141 [31] = ACTION_LAYER_MOMENTARY(2),
142 //[] = ACTION_LAYER_TAP_KEY(4, KC_S),
143};
144
145
146const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
147{
148 // MACRODOWN only works in this function
149 switch(id) {
150 case 0:
151 if (record->event.pressed) {
152 register_code(KC_RSFT);
153 } else {
154 unregister_code(KC_RSFT);
155 }
156 break;
157 }
158 return MACRO_NONE;
159};
160
161// Runs just one time when the keyboard initializes.
162void matrix_init_user(void) {
163
164};
165
166
167void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
168{
169
170 if (id == TEENSY_KEY) {
171 clear_keyboard();
172 print("\n\nJump to bootloader... ");
173 wait_ms(250);
174 bootloader_jump(); // should not return
175 print("not supported.\n");
176 }
177}
diff --git a/keyboards/ergodox/keymaps/guni/readme.txt b/keyboards/ergodox/keymaps/guni/readme.txt
new file mode 100644
index 000000000..93ae5f056
--- /dev/null
+++ b/keyboards/ergodox/keymaps/guni/readme.txt
@@ -0,0 +1,133 @@
1My main layout (Layer 0) is based on qwerty. I tried to fit the layout of the kinesis keyboard onto the ergodox. Furthermore I did some tweaks.
2The other layers are seldom used. Except the F Keys and the teensy key. As I own a ergodox I cant press the reset button, so i need a key to send the teensy into reprogram mode.
3There is a layer with symbols a numpad. These layers are seldom used. Except the F Keys and the teensy key. As I own a ergodox I need a key to reprogram, because I can't access the reset button.
4
5I am a linux user and need the esc key and str keys often therefore it is easyly accessed. Switching console str+alt+tab+f2 (layer 2 and 2) is tricky but you get it after a while.
6As I live in germany and need to type umlaut frquently, i mapped the CAPS to the meta key, and swapped ' and ". So I can type ö with CAPS o + ¨. no need to press o+SHIFT+'
7As a note for linux users i use str+p to get last command, instead of using the cursor keys.
8
9HOWTO to convert CAPS to Meta-Key and swap ' with "
10
11* create file with following content
12.Xmodmap
13 clear Lock
14 keycode 48 = quotedbl apostrophe quotedbl apostrophe
15 keycode 66 = Multi_key
16
17* apply with
18xmodmap .Xmodmap
19
20* convert to xkbmap
21xkbcomp $DISPLAY $HOME/.xkbmap
22
23* automatic startup each time you startup x
24echo 'xkbcomp $HOME/.xkbmap $DISPLAY' >> ~/.xinitrc
25
26 KEYMAP( // layer 0 : default
27 // left hand
28 KC_EQL , KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC,
29 KC_FN25 , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME,
30 KC_FN27 , KC_A, KC_S, KC_D, KC_F, KC_G,
31 KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGUP,
32 KC_LGUI , KC_GRV,KC_LEFT,KC_RGHT,KC_LALT,
33 KC_NO , KC_NO ,
34 KC_NO ,
35 KC_BSPC,KC_DEL ,KC_FN23,
36 // right hand
37 KC_RBRC , KC_6, KC_7 , KC_8, KC_9, KC_0, KC_MINS,
38 KC_END , KC_Y, KC_U , KC_I, KC_O, KC_P, KC_FN28,
39 KC_H , KC_J, KC_K , KC_L, KC_SCLN,KC_FN30,
40 KC_PGDN , KC_N, KC_M , KC_COMM,KC_DOT, KC_SLSH,KC_FN29,
41 KC_RALT , KC_DOWN,KC_UP, KC_NO ,KC_RGUI,
42 KC_NO , KC_NO,
43 KC_NO ,
44 KC_FN29,KC_ENT ,KC_SPC
45 ),
46
47 KEYMAP( // layer 1 : function and symbol keys
48 // left hand
49 KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
50 KC_TRNS,KC_AT,KC_UNDS ,KC_LBRC,KC_RBRC,KC_CIRC ,KC_TRNS,
51 KC_TRNS,KC_BSLS,KC_SLSH,KC_LCBR ,KC_RCBR ,KC_ASTR,
52 KC_TRNS,KC_HASH ,KC_DLR ,KC_PIPE ,KC_TILD ,KC_GRV ,KC_TRNS,
53 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
54 KC_TRNS,KC_TRNS,
55 KC_TRNS,
56 KC_TRNS,KC_TRNS,KC_FN1,
57 // right hand
58 KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
59 KC_TRNS,KC_EXLM,LSFT(KC_COMM),LSFT(KC_DOT),KC_EQL,KC_AMPR, KC_TRNS,
60 LSFT(KC_SLSH),KC_LPRN,KC_RPRN,KC_MINS,LSFT(KC_SCLN),KC_TRNS,
61 KC_TRNS,KC_PLUS,LSFT(KC_5),LSFT(KC_QUOT),KC_QUOT,KC_SCLN,KC_TRNS,
62 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
63 KC_TRNS,KC_TRNS,
64 KC_TRNS,
65 KC_TRNS,KC_TRNS,KC_TRNS
66 ),
67
68 KEYMAP( // layer 2: navigation
69 // left hand
70 KC_NO,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
71 KC_TRNS,KC_PGUP,KC_HOME,KC_UP ,KC_END,KC_NO ,KC_TRNS,
72 KC_TRNS,KC_PGDN,KC_LEFT,KC_DOWN,KC_RGHT,KC_NO,
73 KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO,KC_NO,KC_NO,
74 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
75 KC_TRNS,KC_TRNS,
76 KC_TRNS,
77 KC_TRNS,KC_TRNS,KC_FN1 ,
78 // right hand
79 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
80 KC_TRNS ,KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_END ,KC_TRNS,
81 KC_NO, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,KC_TRNS,
82 KC_TRNS,KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP,KC_TRNS,
83 KC_LEFT, KC_DOWN,KC_RGHT,KC_PGDN,KC_TRNS,
84 KC_TRNS,KC_TRNS,
85 KC_TRNS,
86 KC_TRNS,KC_TRNS,KC_TRNS
87 ),
88 KEYMAP( // layer 3 : teensy bootloader functions
89 // left hand
90 KC_FN0, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
91 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
92 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
93 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
94 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
95 KC_TRNS,KC_TRNS,
96 KC_TRNS,
97 KC_TRNS,KC_TRNS,KC_FN1 ,
98 // right hand
99 KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
100 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
101 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
102 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
103 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
104 KC_TRNS,KC_TRNS,
105 KC_TRNS,
106 KC_TRNS,KC_TRNS,KC_TRNS
107 ),
108
109
110 KEYMAP( // layer 4: numpad
111 // left hand
112 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
113 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
114 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
115 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
116 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
117 KC_TRNS,KC_TRNS,
118 KC_TRNS,
119 KC_TRNS,KC_TRNS,KC_TRNS,
120 // right hand
121 KC_TRNS,KC_NLCK,KC_PSLS,KC_PAST,KC_PAST,KC_PMNS,KC_BSPC,
122 KC_TRNS,KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS,KC_BSPC,
123 KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS,KC_PENT,
124 KC_TRNS,KC_NO, KC_P1, KC_P2, KC_P3, KC_PPLS,KC_PENT,
125 KC_P0, KC_PDOT,KC_SLSH,KC_PENT,KC_PENT,
126 KC_TRNS,KC_TRNS,
127 KC_TRNS,
128 KC_TRNS,KC_TRNS,KC_TRNS
129 ),
130
131};
132
133
diff --git a/keyboards/ergodox/keymaps/italian/keymap.c b/keyboards/ergodox/keymaps/italian/keymap.c
new file mode 100644
index 000000000..e4c7a569c
--- /dev/null
+++ b/keyboards/ergodox/keymaps/italian/keymap.c
@@ -0,0 +1,223 @@
1#include "ergodox.h"
2#include "debug.h"
3#include "action_layer.h"
4#include "version.h"
5
6#define BASE 0 // default layer
7#define SYMB 1 // symbols
8#define MDIA 2 // media keys
9
10enum custom_keycodes {
11 PLACEHOLDER = SAFE_RANGE, // can always be here
12 EPRM,
13 VRSN,
14 RGB_SLD
15};
16
17const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18/* Keymap 0: Basic layer
19 *
20 * ,--------------------------------------------------. ,--------------------------------------------------.
21 * | \ | 1 | 2 | 3 | 4 | 5 | ESC | | T2 | 6 | 7 | 8 | 9 | 0 | ' |
22 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
23 * | Tab | Q | W | E | R | T | TT1 | | TT1 | Y | U | I | O | P | è |
24 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
25 * | Caps | A | S | D | F | G |------| |------| H | J | K | L | ò | à |
26 * |--------+------+------+------+------+------| Alt | | Alt |------+------+------+------+------+--------|
27 * | LShift | Z | X | C | V | B | | | | N | M | , | . | ù |-/RShift|
28 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
29 * |</Win | + | - | * |//Ctr | |ì/RAlt| Left | Down | Up | Right | ~L1 |
30 * `----------------------------------' `----------------------------------'
31 * ,-------------. ,-------------.
32 * | Ins | LGui | | Win | Ctrl |
33 * ,------|------|------| |------+--------+------.
34 * | | | Home | | PgUp | | |
35 * |Backsp| Del |------| |------| Enter |Space |
36 * |ace | | End | | PgDn | | |
37 * `--------------------' `----------------------'
38 */
39// If it accepts an argument (i.e, is a function), it doesn't need KC_.
40// Otherwise, it needs KC_*
41[BASE] = KEYMAP( // layer 0 : default
42 // left hand
43 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
44 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TT(SYMB),
45 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G,
46 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT,
47 MT(MOD_LGUI,KC_NONUS_BSLASH),KC_PPLS, KC_PMNS,KC_PAST,MT(MOD_LCTL,KC_PSLS),
48 KC_INS, KC_LGUI,
49 KC_HOME,
50 KC_BSPC,KC_DEL, KC_END,
51 // right hand
52 TG(MDIA), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
53 TT(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
54 KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
55 KC_LALT, KC_N, KC_M, KC_COMM,KC_DOT, KC_BSLASH, MT(MOD_RSFT,KC_SLSH),
56 MT(MOD_RALT,KC_EQL), KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT,
57 KC_LGUI, KC_RCTL,
58 KC_PGUP,
59 KC_PGDN, KC_ENT, KC_SPC
60 ),
61/* Keymap 1: Symbol Layer
62 *
63 * ,--------------------------------------------------. ,--------------------------------------------------.
64 * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
65 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
66 * | | ! | @ | { | } | | | | | | | 7 | 8 | 9 | | F12 |
67 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
68 * | | # | $ | [ | ] | & |------| |------| | 4 | 5 | 6 | | |
69 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
70 * | | % | ^ | ( | ) | | | | | | 1 | 2 | 3 | | |
71 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
72 * | | | | | | | . | | | | |
73 * `----------------------------------' `----------------------------------'
74 * ,-------------. ,-------------.
75 * | | | | | |
76 * ,------|------|------| |------+------+------.
77 * | | | | | | | |
78 * | | |------| |------| | 0 |
79 * | | | | | | | |
80 * `--------------------' `--------------------'
81 */
82// SYMBOLS
83[SYMB] = KEYMAP(
84 // left hand
85 M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
86 KC_TRNS, KC_EXLM, RALT(KC_SCLN), RALT(KC_LCBR), RALT(KC_RCBR), KC_TILD, KC_TRNS,
87 KC_TRNS, RALT(KC_QUOT), KC_DLR, RALT(KC_LBRC), RALT(KC_RBRC), KC_CIRC,
88 KC_TRNS, KC_PERC, LSFT(KC_EQL), LSFT(KC_8), LSFT(KC_9), KC_TRNS, KC_TRNS,
89 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
90 KC_TRNS, KC_TRNS,
91 KC_TRNS,
92 KC_TRNS, KC_TRNS, KC_TRNS,
93 // right hand
94 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
95 KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
96 KC_TRNS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
97 KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
98 KC_DOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
99 KC_TRNS, KC_TRNS,
100 KC_TRNS,
101 KC_TRNS, KC_TRNS, KC_0
102),
103/* Keymap 2: Media and mouse keys
104 *
105 * ,--------------------------------------------------. ,--------------------------------------------------.
106 * | | | | | | | | | | | | | | | |
107 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
108 * | | | | MsUp | | | | | | Lclk | Rclk | | | | |
109 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
110 * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
111 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
112 * | | | | | | | | | | | | Prev | Next | | |
113 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
114 * | | | | | | |VolUp |VolDn | Mute | | |
115 * `----------------------------------' `----------------------------------'
116 * ,-------------. ,-------------.
117 * | | | | | |
118 * ,------|------|------| |------+------+------.
119 * | | | | | | |Brwser|
120 * | | |------| |------| |Back |
121 * | | | | | | | |
122 * `--------------------' `--------------------'
123 */
124// MEDIA AND MOUSE
125[MDIA] = KEYMAP(
126 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
127 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
128 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
129 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
130 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
131 KC_TRNS, KC_TRNS,
132 KC_TRNS,
133 KC_TRNS, KC_TRNS, KC_TRNS,
134 // right hand
135 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
136 KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
137 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
138 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
139 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
140 KC_TRNS, KC_TRNS,
141 KC_TRNS,
142 KC_TRNS, KC_TRNS, KC_WBAK
143),
144};
145
146const uint16_t PROGMEM fn_actions[] = {
147 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
148};
149
150const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
151{
152 // MACRODOWN only works in this function
153 switch(id) {
154 case 0:
155 if (record->event.pressed) {
156 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
157 }
158 break;
159 case 1:
160 if (record->event.pressed) { // For resetting EEPROM
161 eeconfig_init();
162 }
163 break;
164 }
165 return MACRO_NONE;
166};
167
168bool process_record_user(uint16_t keycode, keyrecord_t *record) {
169 switch (keycode) {
170 // dynamically generate these.
171 case EPRM:
172 if (record->event.pressed) {
173 eeconfig_init();
174 }
175 return false;
176 break;
177 case VRSN:
178 if (record->event.pressed) {
179 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
180 }
181 return false;
182 break;
183 case RGB_SLD:
184 if (record->event.pressed) {
185 #ifdef RGBLIGHT_ENABLE
186 rgblight_mode(1);
187 #endif
188 }
189 return false;
190 break;
191 }
192 return true;
193}
194
195// Runs just one time when the keyboard initializes.
196void matrix_init_user(void) {
197
198};
199
200
201// Runs constantly in the background, in a loop.
202void matrix_scan_user(void) {
203
204 uint8_t layer = biton32(layer_state);
205
206 ergodox_board_led_off();
207 ergodox_right_led_1_off();
208 ergodox_right_led_2_off();
209 ergodox_right_led_3_off();
210 switch (layer) {
211 // TODO: Make this relevant to the ErgoDox EZ.
212 case 1:
213 ergodox_right_led_1_on();
214 break;
215 case 2:
216 ergodox_right_led_2_on();
217 break;
218 default:
219 // none
220 break;
221 }
222
223};
diff --git a/keyboards/ergodox/keymaps/italian/readme.md b/keyboards/ergodox/keymaps/italian/readme.md
new file mode 100644
index 000000000..215c24a5a
--- /dev/null
+++ b/keyboards/ergodox/keymaps/italian/readme.md
@@ -0,0 +1,72 @@
1# ErgoDox Italian layout
2
3## Layer 0
4```
5
6 ,--------------------------------------------------. ,--------------------------------------------------.
7 | \ | 1 | 2 | 3 | 4 | 5 | ESC | | T2 | 6 | 7 | 8 | 9 | 0 | ' |
8 |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
9 | Tab | Q | W | E | R | T | TT1 | | TT1 | Y | U | I | O | P | è |
10 |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
11 | Caps | A | S | D | F | G |------| |------| H | J | K | L | ò | à |
12 |--------+------+------+------+------+------| Alt | | Alt |------+------+------+------+------+--------|
13 | LShift | Z | X | C | V | B | | | | N | M | , | . | ù |-/RShift|
14 `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
15 |</Win | + | - | * |//Ctr | |ì/RAlt| Left | Down | Up | Right | ~L1 |
16 `----------------------------------' `----------------------------------'
17 ,-------------. ,-------------.
18 | Ins | LGui | | Win | Ctrl |
19 ,------|------|------| |------+--------+------.
20 | | | Home | | PgUp | | |
21 |Backsp| Del |------| |------| Enter |Space |
22 |ace | | End | | PgDn | | |
23 `--------------------' `----------------------'
24```
25
26## Layer 1
27```
28
29 ,--------------------------------------------------. ,--------------------------------------------------.
30 |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
31 |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
32 | | ! | @ | { | } | | | | | | | 7 | 8 | 9 | | F12 |
33 |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
34 | | # | $ | [ | ] | & |------| |------| | 4 | 5 | 6 | | |
35 |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
36 | | % | ^ | ( | ) | | | | | | 1 | 2 | 3 | | |
37 `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
38 | | | | | | | . | | | | |
39 `----------------------------------' `----------------------------------'
40 ,-------------. ,-------------.
41 | | | | | |
42 ,------|------|------| |------+------+------.
43 | | | | | | | |
44 | | |------| |------| | 0 |
45 | | | | | | | |
46 `--------------------' `--------------------'
47```
48
49## Layer 2
50```
51
52 ,--------------------------------------------------. ,--------------------------------------------------.
53 | | | | | | | | | | | | | | | |
54 |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
55 | | | | MsUp | | | | | | Lclk | Rclk | | | | |
56 |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
57 | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
58 |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
59 | | | | | | | | | | | | Prev | Next | | |
60 `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
61 | | | | | | |VolUp |VolDn | Mute | | |
62 `----------------------------------' `----------------------------------'
63 ,-------------. ,-------------.
64 | | | | | |
65 ,------|------|------| |------+------+------.
66 | | | | | | |Brwser|
67 | | |------| |------| |Back |
68 | | | | | | | |
69 `--------------------' `--------------------'
70```
71
72
diff --git a/keyboards/ergodox/keymaps/josh/keymap.c b/keyboards/ergodox/keymaps/josh/keymap.c
index b5463873a..da887fc64 100644
--- a/keyboards/ergodox/keymaps/josh/keymap.c
+++ b/keyboards/ergodox/keymaps/josh/keymap.c
@@ -8,15 +8,16 @@
8#define MDIA 2 // media keys 8#define MDIA 2 // media keys
9 9
10//macros 10//macros
11#define CTL_SFT_T 100 11#define CTL_SFT_T 100 // open type
12#define CTL_SFT_G 101 12#define CTL_SFT_G 101 // find references
13#define CTL_ALT_H 102 13#define CTL_ALT_H 102 // open call hierarchy
14#define CTL_SFT_R 103 // open resource
14 15
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 16const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16/* Keymap 0: Basic layer 17/* Keymap 0: Basic layer
17 * 18 *
18 * ,--------------------------------------------------. ,--------------------------------------------------. 19 * ,--------------------------------------------------. ,--------------------------------------------------.
19 * | = | 1 | 2 | 3 | 4 | 5 | ESC | | M 100| 6 | 7 | 8 | 9 | 0 | - | 20 * | = | 1 | 2 | 3 | 4 | 5 | ESC | |M100/3| 6 | 7 | 8 | 9 | 0 | - |
20 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 21 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
21 * |TAB /Alt| Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P |\ / ALT | 22 * |TAB /Alt| Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P |\ / ALT |
22 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 23 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -38,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38// Otherwise, it needs KC_* 39// Otherwise, it needs KC_*
39[BASE] = KEYMAP( // layer 0 : default 40[BASE] = KEYMAP( // layer 0 : default
40 // left hand 41 // left hand
41 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, 42 LT(MDIA, KC_EQL),KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
42 ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), 43 ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO),
43 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, 44 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
44 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB), 45 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB),
@@ -47,11 +48,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
47 KC_HOME, 48 KC_HOME,
48 KC_SPC,KC_BSPC,KC_END, 49 KC_SPC,KC_BSPC,KC_END,
49 // right hand 50 // right hand
50 M(CTL_SFT_T),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 51 LT(M(CTL_SFT_T),
51 MEH_T(KC_NO),KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, 52 M(CTL_SFT_R)),KC_6, KC_7, KC_8, KC_9, KC_0, LT(MDIA, KC_MINS),
52 KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), 53 MEH_T(KC_NO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
53 MO(SYMB), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, 54 KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), CTL_T(KC_QUOT),
54 LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, 55 MO(SYMB), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
56 LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT,
55 KC_LALT, KC_CAPS, 57 KC_LALT, KC_CAPS,
56 KC_PGUP, 58 KC_PGUP,
57 KC_PGDN,KC_DEL, KC_ENT 59 KC_PGDN,KC_DEL, KC_ENT
@@ -101,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
101/* Keymap 2: Media and mouse keys 103/* Keymap 2: Media and mouse keys
102 * 104 *
103 * ,--------------------------------------------------. ,--------------------------------------------------. 105 * ,--------------------------------------------------. ,--------------------------------------------------.
104 * | | | | | | | | | | | | | | | | 106 * | | | | | | |RESET | |RESET | | | | | | |
105 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 107 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
106 * | | | | MsUp | | | | | | | | | | | | 108 * | | | | MsUp | | | | | | | | | | | |
107 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 109 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -121,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
121 */ 123 */
122// MEDIA AND MOUSE 124// MEDIA AND MOUSE
123[MDIA] = KEYMAP( 125[MDIA] = KEYMAP(
124 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 126 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,
125 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, 127 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
126 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, 128 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
127 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 129 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -130,7 +132,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
130 KC_TRNS, 132 KC_TRNS,
131 KC_TRNS, KC_TRNS, KC_TRNS, 133 KC_TRNS, KC_TRNS, KC_TRNS,
132 // right hand 134 // right hand
133 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 135 RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
134 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 136 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
135 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, 137 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
136 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, 138 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
@@ -172,6 +174,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
172 } 174 }
173 return MACRO(U(LCTL), U(LALT), END); 175 return MACRO(U(LCTL), U(LALT), END);
174 break; 176 break;
177 case CTL_SFT_R:
178 if (record->event.pressed) {
179 return MACRO(D(LCTL), D(LSFT), T(R), END);
180 }
181 return MACRO(U(LCTL), U(LSFT), END);
182 break;
175 } 183 }
176 return MACRO_NONE; 184 return MACRO_NONE;
177}; 185};
diff --git a/keyboards/ergodox/keymaps/neo2_on_qwertz_hardware/keymap.c b/keyboards/ergodox/keymaps/neo2_on_qwertz_hardware/keymap.c
new file mode 100644
index 000000000..ab2464c42
--- /dev/null
+++ b/keyboards/ergodox/keymaps/neo2_on_qwertz_hardware/keymap.c
@@ -0,0 +1,408 @@
1#include "ergodox.h"
2#include "action_layer.h"
3#include "keymap_extras/keymap_german.h"
4
5#define UM 0
6
7#define L0 0 // layer_0
8#define L1 1 // layer_1
9#define L2 2 // layer_2
10#define L3 3 // layer_3
11#define L4 4 // layer_4
12#define L5 5 // layer_5
13#define L6 6 // layer_6
14
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16/*
17 .------------------------------------.------------------------------------.
18 |ESC | 1 | 2 | 3 | 4 | 5 | ´ | ` | 6 | 7 | 8 | 9 | 0 | ^ |
19 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
20 |TAB | X | V | L | C | W |Print| | K | H | G | F | Q | ß |
21 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
22 |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | Y |
23 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
24 |LSFT | ü | ö | ä | P | Z |SPACE| | B | M | , | . | J |RSFT |
25 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
26 |LCTL|LGUI|LALT|MO(3)|MO(2)| !MO(2)|MO(3)|APP |RALT|RCTL|
27 '------------------------' '------------------------'
28 .-----------. .-----------.
29 |VOL- |VOL+ | !MUTE |PLAY |
30 .-----+-----+-----! !-----+-----+-----.
31 ! ! | | ! | ! !
32 ! ! |-----| !-----| ! !
33 ! CTL ! ! ALT ! ! CTL ! ! ALT !
34 |ENTER|MO(1)| TAB | !ESC |MO(1)|SPACE|
35 '-----------------' '-----------------'
36 */
37[L0] = KEYMAP(
38 KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT,
39 KC_TAB, DE_X, DE_V, DE_L, DE_C, DE_W, KC_PSCR,
40 MO(1), DE_U, DE_I, DE_A, DE_E, DE_O,
41 KC_LSFT, DE_UE, DE_OE, DE_AE, DE_P, DE_Z, KC_SPACE,
42 KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2),
43 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_VOLU,
44 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
45 /*-*/ /*-*/ /*-*/ /*-*/ CTL_T(KC_ENTER), MO(1), ALT_T(KC_TAB),
46 DE_GRV, DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC,
47 KC_TRNS, DE_K, DE_H, DE_G, DE_F, DE_Q, DE_SS,
48 /*-*/ DE_S, DE_N, DE_R, DE_T, DE_D, DE_Y,
49 KC_TRNS, DE_B, DE_M, DE_COMM, DE_DOT, DE_J, KC_RSFT,
50 /*-*/ /*-*/ MO(2), MO(3), KC_APP, KC_RALT, KC_RCTL,
51 KC_MUTE, KC_MPLY,
52 KC_TRNS,
53 CTL_T(KC_ESC), MO(1), ALT_T(KC_SPACE)
54),
55/*
56 .------------------------------------.------------------------------------.
57 | | | | | | | | | | | | | | |
58 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
59 | | € | _ | [ | ] | | | | ! | < | > | = | & | |
60 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
61 | | \ | / | { | } | * |-----!-----! ? | ( | ) | - | : | @ |
62 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
63 | | # | $ | | | ~ | | | | + | % | " | ' | ; | |
64 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
65 | | | | | | ! | | | | |
66 '------------------------' '------------------------'
67 .-----------. .-----------.
68 | | | ! | |
69 .-----+-----+-----! !-----+-----+-----.
70 ! ! | | ! | ! !
71 ! ! !-----! !-----! ! !
72 | | | | ! | | |
73 '-----------------' '-----------------'
74 */
75[L1] = KEYMAP(
76 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
77 KC_TRNS, DE_EURO, DE_UNDS, DE_LBRC, DE_RBRC, KC_TRNS, KC_TRNS,
78 KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR,
79 KC_TRNS, DE_HASH, DE_DLR, DE_PIPE, DE_TILD, KC_TRNS, KC_TRNS,
80 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
81 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
82 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
83 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
84 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
85 KC_TRNS, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_TRNS,
86 /*-*/ DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, DE_AT,
87 KC_TRNS, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_TRNS,
88 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
89 KC_TRNS, KC_TRNS,
90 KC_TRNS,
91 KC_TRNS, KC_TRNS, KC_TRNS
92),
93/*
94 * .------------------------------------.------------------------------------.
95 * | | | | | | | | | | | | | | |
96 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
97 * | |PGUP|BSPC| UP |DEL |PGDN| | | | 7 | 8 | 9 | | |
98 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
99 * | |HOME|LEFT|DOWN|RGHT|END |-----!-----! | 4 | 5 | 6 | | |
100 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
101 * | | | |PREV|NEXT| | | | | 1 | 2 | 3 | | |
102 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
103 * | | | | | | ! | | | | |
104 * '------------------------' '------------------------'
105 * .-----------. .-----------.
106 * | | | ! | |
107 * .-----+-----+-----! !-----+-----+-----.
108 * ! ! | | ! | ! !
109 * ! ! !-----! !-----! ! !
110 * | | | | ! | | 0 |
111 * '-----------------' '-----------------'
112 */
113[L2] = KEYMAP(
114 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
115 KC_TRNS, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_TRNS,
116 KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,
117 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
118 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
119 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
120 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
121 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
122 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
123 KC_TRNS, KC_TRNS, DE_7, DE_8, DE_9, KC_TRNS, KC_TRNS,
124 /*-*/ KC_TRNS, DE_4, DE_5, DE_6, KC_TRNS, KC_TRNS,
125 KC_TRNS, KC_TRNS, DE_1, DE_2, DE_3, KC_TRNS, KC_TRNS,
126 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
127 KC_TRNS, KC_TRNS,
128 KC_TRNS,
129 KC_TRNS, KC_TRNS, DE_0
130),
131/*
132 * .------------------------------------.------------------------------------.
133 * | | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | | |
134 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
135 * | | F7 | F8 | F9 | F10| F11| F12 | | |M_WU|M_CU|M_WD| | |
136 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
137 * |M_B5 |M_B4|M_B3|M_B2|M_B1| |-----!-----! |M_CL|M_CD|M_CR| | |
138 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
139 * | | |M_A2|M_A1|M_A0| | | | | | | | | |
140 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
141 * | | | | | | ! | | | | |
142 * '------------------------' '------------------------'
143 * .-----------. .-----------.
144 * | | | ! | |
145 * .-----+-----+-----! !-----+-----+-----.
146 * ! ! | | ! | ! !
147 * ! ! !-----! !-----! ! !
148 * | | | | ! | | |
149 * '-----------------' '-----------------'
150 */
151[L3] = KEYMAP(
152 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
153 KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
154 KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_BTN1, KC_TRNS,
155 KC_TRNS, KC_TRNS, KC_ACL2, KC_ACL1, KC_ACL0, KC_TRNS, KC_TRNS,
156 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
157 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
158 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
159 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
160 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
161 KC_TRNS, KC_TRNS, KC_WH_U, KC_MS_U, KC_WH_D, KC_TRNS, KC_TRNS,
162 /*-*/ KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
163 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
164 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
165 KC_TRNS, KC_TRNS,
166 KC_TRNS,
167 KC_TRNS, KC_TRNS, KC_TRNS
168),
169/*
170 * .------------------------------------.------------------------------------.
171 * | | | | | | | | | | | | | | |
172 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
173 * | | | | | | | | | | | | | | |
174 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
175 * | | | | | | |-----!-----! | | | | | |
176 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
177 * | | | | | | | | | | | | | | |
178 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
179 * | | | | | | ! | | | | |
180 * '------------------------' '------------------------'
181 * .-----------. .-----------.
182 * | | | ! | |
183 * .-----+-----+-----! !-----+-----+-----.
184 * ! ! | | ! | ! !
185 * ! ! !-----! !-----! ! !
186 * | | | | ! | | |
187 * '-----------------' '-----------------'
188 */
189[L4] = KEYMAP(
190 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
191 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
192 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
193 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
194 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
195 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
196 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
197 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
198 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
199 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
200 /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
201 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
202 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
203 KC_TRNS, KC_TRNS,
204 KC_TRNS,
205 KC_TRNS, KC_TRNS, KC_TRNS
206),
207/*
208 * .------------------------------------.------------------------------------.
209 * | | | | | | | | | | | | | | |
210 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
211 * | | | | | | | | | | | | | | |
212 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
213 * | | | | | | |-----!-----! | | | | | |
214 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
215 * | | | | | | | | | | | | | | |
216 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
217 * | | | | | | ! | | | | |
218 * '------------------------' '------------------------'
219 * .-----------. .-----------.
220 * | | | ! | |
221 * .-----+-----+-----! !-----+-----+-----.
222 * ! ! | | ! | ! !
223 * ! ! !-----! !-----! ! !
224 * | | | | ! | | |
225 * '-----------------' '-----------------'
226 */
227[L5] = KEYMAP(
228 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
229 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
230 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
231 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
232 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
233 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
234 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
235 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
236 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
237 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
238 /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
239 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
240 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
241 KC_TRNS, KC_TRNS,
242 KC_TRNS,
243 KC_TRNS, KC_TRNS, KC_TRNS
244),
245/*
246 * .------------------------------------.------------------------------------.
247 * | | | | | | | | | | | | | | |
248 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
249 * | | | | | | | | | | | | | | |
250 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
251 * | | | | | | |-----!-----! | | | | | |
252 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
253 * | | | | | | | | | | | | | | |
254 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
255 * | | | | | | ! | | | | |
256 * '------------------------' '------------------------'
257 * .-----------. .-----------.
258 * | | | ! | |
259 * .-----+-----+-----! !-----+-----+-----.
260 * ! ! | | ! | ! !
261 * ! ! !-----! !-----! ! !
262 * | | | | ! | | |
263 * '-----------------' '-----------------'
264 */
265[L6] = KEYMAP(
266 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
267 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
268 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
269 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
270 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
271 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
272 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
273 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
274 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
275 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
276 /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
277 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
278 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
279 KC_TRNS, KC_TRNS,
280 KC_TRNS,
281 KC_TRNS, KC_TRNS, KC_TRNS
282),
283};
284
285const uint16_t PROGMEM fn_actions[] = {};
286
287#define UC_MODE_WIN 0
288#define UC_MODE_LINUX 1
289#define UC_MODE_OSX 2
290
291// TODO: allow default mode to be configured
292static uint16_t unicode_mode = UC_MODE_WIN;
293
294uint16_t hextokeycode(uint8_t hex) {
295 if (hex == 0x0) {
296 return KC_P0;
297 }
298 if (hex < 0xA) {
299 return KC_P1 + (hex - 0x1);
300 }
301 return KC_A + (hex - 0xA);
302}
303
304void unicode_action_function(uint16_t hi, uint16_t lo) {
305 switch (unicode_mode) {
306 case UC_MODE_WIN:
307 register_code(KC_LALT);
308
309 register_code(KC_PPLS);
310 unregister_code(KC_PPLS);
311
312 register_code(hextokeycode((hi & 0xF0) >> 4));
313 unregister_code(hextokeycode((hi & 0xF0) >> 4));
314 register_code(hextokeycode((hi & 0x0F)));
315 unregister_code(hextokeycode((hi & 0x0F)));
316 register_code(hextokeycode((lo & 0xF0) >> 4));
317 unregister_code(hextokeycode((lo & 0xF0) >> 4));
318 register_code(hextokeycode((lo & 0x0F)));
319 unregister_code(hextokeycode((lo & 0x0F)));
320
321 unregister_code(KC_LALT);
322 break;
323 case UC_MODE_LINUX:
324 register_code(KC_LCTL);
325 register_code(KC_LSFT);
326
327 register_code(KC_U);
328 unregister_code(KC_U);
329
330 register_code(hextokeycode((hi & 0xF0) >> 4));
331 unregister_code(hextokeycode((hi & 0xF0) >> 4));
332 register_code(hextokeycode((hi & 0x0F)));
333 unregister_code(hextokeycode((hi & 0x0F)));
334 register_code(hextokeycode((lo & 0xF0) >> 4));
335 unregister_code(hextokeycode((lo & 0xF0) >> 4));
336 register_code(hextokeycode((lo & 0x0F)));
337 unregister_code(hextokeycode((lo & 0x0F)));
338
339 unregister_code(KC_LCTL);
340 unregister_code(KC_LSFT);
341 break;
342 case UC_MODE_OSX:
343 break;
344 }
345}
346
347const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
348 if (!record->event.pressed) {
349 return MACRO_NONE;
350 }
351 // MACRODOWN only works in this function
352 switch(id) {
353 case UM:
354 unicode_mode = (unicode_mode + 1) % 2;
355 break;
356
357
358 default:
359 break;
360 }
361 return MACRO_NONE;
362};
363
364// Runs just one time when the keyboard initializes.
365void matrix_init_user(void) {
366
367};
368
369// Runs constantly in the background, in a loop.
370void matrix_scan_user(void) {
371 uint8_t layer = biton32(layer_state);
372
373 ergodox_board_led_off();
374 ergodox_right_led_1_off();
375 ergodox_right_led_2_off();
376 ergodox_right_led_3_off();
377 switch (layer) {
378 case L1:
379 ergodox_right_led_1_on();
380 break;
381 case L2:
382 ergodox_right_led_2_on();
383 break;
384 case L3:
385 ergodox_right_led_3_on();
386 break;
387 case L4:
388 ergodox_right_led_1_on();
389 ergodox_right_led_2_on();
390 break;
391 case L5:
392 ergodox_right_led_1_on();
393 ergodox_right_led_3_on();
394 break;
395 // case L6:
396 // ergodox_right_led_2_on();
397 // ergodox_right_led_3_on();
398 // break;
399 // case L7:
400 // ergodox_right_led_1_on();
401 // ergodox_right_led_2_on();
402 // ergodox_right_led_3_on();
403 // break;
404 default:
405 ergodox_board_led_off();
406 break;
407 }
408};
diff --git a/keyboards/ergodox/keymaps/neo2_on_qwertz_hardware/keymap.md b/keyboards/ergodox/keymaps/neo2_on_qwertz_hardware/keymap.md
new file mode 100644
index 000000000..d9fcda966
--- /dev/null
+++ b/keyboards/ergodox/keymaps/neo2_on_qwertz_hardware/keymap.md
@@ -0,0 +1,194 @@
1# Neo2 for ErgoDox on QWERTZ
2#
3# Description
4This layout is ment to be used on PCs with DE-de with an additional guest keyboard. E.g. on your PC at work you can use your ergodox with neo but a second keybord is plugged in so your coworkers can enter a few signs if necessary. I live in Germany, so this is my usecase.
5# Layers
6[Layer0](#layer-0)
7Letters, modifiers and volume
8
9[Layer1](#layer-1)
10Symbols
11
12[Layer2](#layer-2)
13Motion, digits and next/prev Song
14
15[Layer3](#layer-3)
16F1 to F12 and mouse actions
17
18[Layer4](#layer-4)
19not used
20
21[Layer5](#layer-5)
22not used
23
24[Layer6](#layer-6)
25not used
26
27
28## Layer 0
29
30 .------------------------------------.------------------------------------.
31 |ESC | 1 | 2 | 3 | 4 | 5 | ´ | ` | 6 | 7 | 8 | 9 | 0 | ^ |
32 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
33 |TAB | X | V | L | C | W |Print| | K | H | G | F | Q | ß |
34 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
35 |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | Y |
36 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
37 |LSFT | ü | ö | ä | P | Z |SPACE| | B | M | , | . | J |RSFT |
38 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
39 |LCTL|LGUI|LALT|MO(3)|MO(2)| !MO(2)|MO(3)|APP |RALT|RCTL|
40 '------------------------' '------------------------'
41 .-----------. .-----------.
42 |VOL- |VOL+ | !MUTE |PLAY |
43 .-----+-----+-----! !-----+-----+-----.
44 ! ! | | ! | ! !
45 ! ! |-----| !-----| ! !
46 ! CTL ! ! ALT ! ! CTL ! ! ALT !
47 |ENTER|MO(1)| TAB | !ESC |MO(1)|SPACE|
48 '-----------------' '-----------------'
49
50* Left side ESC, TAB, [SymbolLayer], Shift, Ctr, Gui(Windows key), and Alt like normal QWERTZ with neo2.
51* Space on right side of left half for mous activity so you don't have to leave the mouse for Space.
52* Top row of thumb keys is hard to reach for me, so I put media control on there.
53* Thumb keys make use of modifier/tap. E.g. if you tap the Enter key it will be Enter. If you keep it pressed down it will be Ctr. The hold action is written on top of the tap action.
54* The small middle thumb keys are not used, es well as the 1.5 sized ones on the left side of the right half.
55
56
57## Layer 1
58
59 .------------------------------------.------------------------------------.
60 | | | | | | | | | | | | | | |
61 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
62 | | € | _ | [ | ] | | | | ! | < | > | = | & | |
63 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
64 | | \ | / | { | } | * |-----!-----! ? | ( | ) | - | : | @ |
65 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
66 | | # | $ | | | ~ | | | | + | % | " | ' | ; | |
67 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
68 | | | | | | ! | | | | |
69 '------------------------' '------------------------'
70 .-----------. .-----------.
71 | | | ! | |
72 .-----+-----+-----! !-----+-----+-----.
73 ! ! | | ! | ! !
74 ! ! !-----! !-----! ! !
75 | | | | ! | | |
76 '-----------------' '-----------------'
77
78
79## Layer 2
80
81 .------------------------------------.------------------------------------.
82 | | | | | | | | | | | | | | |
83 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
84 | |PGUP|BSPC| UP |DEL |PGDN| | | | 7 | 8 | 9 | | |
85 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
86 | |HOME|LEFT|DOWN|RGHT|END |-----!-----! | 4 | 5 | 6 | | |
87 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
88 | | | |PREV|NEXT| | | | | 1 | 2 | 3 | | |
89 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
90 | | | | | | ! | | | | |
91 '------------------------' '------------------------'
92 .-----------. .-----------.
93 | | | ! | |
94 .-----+-----+-----! !-----+-----+-----.
95 ! ! | | ! | ! !
96 ! ! !-----! !-----! ! !
97 | | | | ! | | 0 |
98 '-----------------' '-----------------'
99
100
101
102## Layer 3
103
104 .------------------------------------.------------------------------------.
105 | | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | | |
106 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
107 | | F7 | F8 | F9 | F10| F11| F12 | | |M_WU|M_CU|M_WD| | |
108 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
109 |M_B5 |M_B4|M_B3|M_B2|M_B1| |-----!-----! |M_CL|M_CD|M_CR| | |
110 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
111 | | |M_A2|M_A1|M_A0| | | | | | | | | |
112 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
113 | | | | | | ! | | | | |
114 '------------------------' '------------------------'
115 .-----------. .-----------.
116 | | | ! | |
117 .-----+-----+-----! !-----+-----+-----.
118 ! ! | | ! | ! !
119 ! ! !-----! !-----! ! !
120 | | | | ! | | |
121 '-----------------' '-----------------'
122* M_A Mouse acceleration
123* M_B Mouse button
124* M_C Mouse cursor
125* M_W Mouse wheel
126
127## Layer 4
128
129
130
131 .------------------------------------.------------------------------------.
132 | | | | | | | | | | | | | | |
133 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
134 | | | | | | | | | | | | | | |
135 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
136 | | | | | | |-----!-----! | | | | | |
137 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
138 | | | | | | | | | | | | | | |
139 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
140 | | | | | | ! | | | | |
141 '------------------------' '------------------------'
142 .-----------. .-----------.
143 | | | ! | |
144 .-----+-----+-----! !-----+-----+-----.
145 ! ! | | ! | ! !
146 ! ! !-----! !-----! ! !
147 | | | | ! | | |
148 '-----------------' '-----------------'
149
150
151## Layer 5
152
153
154 .------------------------------------.------------------------------------.
155 | | | | | | | | | | | | | | |
156 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
157 | | | | | | | | | | | | | | |
158 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
159 | | | | | | |-----!-----! | | | | | |
160 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
161 | | | | | | | | | | | | | | |
162 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
163 | | | | | | ! | | | | |
164 '------------------------' '------------------------'
165 .-----------. .-----------.
166 | | | ! | |
167 .-----+-----+-----! !-----+-----+-----.
168 ! ! | | ! | ! !
169 ! ! !-----! !-----! ! !
170 | | | | ! | | |
171 '-----------------' '-----------------'
172
173
174## Layer 6
175
176 .------------------------------------.------------------------------------.
177 | | | | | | | | | | | | | | |
178 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
179 | | | | | | | | | | | | | | |
180 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
181 | | | | | | |-----!-----! | | | | | |
182 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
183 | | | | | | | | | | | | | | |
184 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
185 | | | | | | ! | | | | |
186 '------------------------' '------------------------'
187 .-----------. .-----------.
188 | | | ! | |
189 .-----+-----+-----! !-----+-----+-----.
190 ! ! | | ! | ! !
191 ! ! !-----! !-----! ! !
192 | | | | ! | | |
193 '-----------------' '-----------------'
194
diff --git a/keyboards/ergodox/keymaps/reset_eeprom/keymap.c b/keyboards/ergodox/keymaps/reset_eeprom/keymap.c
index f708454ce..8d6897658 100644
--- a/keyboards/ergodox/keymaps/reset_eeprom/keymap.c
+++ b/keyboards/ergodox/keymaps/reset_eeprom/keymap.c
@@ -111,7 +111,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
111 111
112// Runs just one time when the keyboard initializes. 112// Runs just one time when the keyboard initializes.
113void matrix_init_user(void) { 113void matrix_init_user(void) {
114 114 eeconfig_init();
115}; 115};
116 116
117 117
diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md
index 45b3354c1..5e50548be 100644
--- a/keyboards/ergodox/readme.md
+++ b/keyboards/ergodox/readme.md
@@ -100,7 +100,7 @@ for the left and right halves seperately. To flash them:
100 100
101 - Install the firmware with `sudo make infinity-keymapname-dfu-util` 101 - Install the firmware with `sudo make infinity-keymapname-dfu-util`
102 102
103 - Build left hand firmware with `make infinity-keymapname MASTER=right` 103 - Build right hand firmware with `make infinity-keymapname MASTER=right`
104 104
105 - Plug in the right hand keyboard only. 105 - Plug in the right hand keyboard only.
106 106
diff --git a/keyboards/frosty_flake/Makefile b/keyboards/frosty_flake/Makefile
new file mode 100644
index 000000000..57b2ef62e
--- /dev/null
+++ b/keyboards/frosty_flake/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../Makefile
3endif
diff --git a/keyboards/frosty_flake/config.h b/keyboards/frosty_flake/config.h
new file mode 100644
index 000000000..2c73f1074
--- /dev/null
+++ b/keyboards/frosty_flake/config.h
@@ -0,0 +1,147 @@
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#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER Bathroom Epiphanies
28#define PRODUCT frosty_flake
29#define DESCRIPTION Frosty Flake controller for the CM Storm Quick Fire Rapid
30
31/*
32 * Frosty Flake Rev. 20140521 made by Bathroom Ephiphanies
33 * Ported from the Bathroom Epiphanies TMK Firmware:
34 * https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers
35 *
36 */
37
38/* key matrix size */
39#define MATRIX_ROWS 8 // Row0 - Row7 in the schematic
40#define MATRIX_COLS 18 // ColA - ColR in the schematic
41
42/*
43 * Keyboard Matrix Assignments
44 */
45#define UNUSED_PINS { B0, C4, D3 }
46
47/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
48#define DEBOUNCING_DELAY 5
49
50/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
51#define LOCKING_SUPPORT_ENABLE
52/* Locking resynchronize hack */
53#define LOCKING_RESYNC_ENABLE
54
55/*
56 * Force NKRO
57 *
58 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
59 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
60 * makefile for this to work.)
61 *
62 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
63 * until the next keyboard reset.
64 *
65 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
66 * fully operational during normal computer usage.
67 *
68 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
69 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
70 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
71 * power-up.
72 *
73 */
74//#define FORCE_NKRO
75
76/*
77 * Magic Key Options
78 *
79 * Magic keys are hotkey commands that allow control over firmware functions of
80 * the keyboard. They are best used in combination with the HID Listen program,
81 * found here: https://www.pjrc.com/teensy/hid_listen.html
82 *
83 * The options below allow the magic key functionality to be changed. This is
84 * useful if your keyboard/keypad is missing keys and you want magic key support.
85 *
86 */
87
88/* key combination for magic key command */
89#define IS_COMMAND() ( \
90 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
91)
92
93/* control how magic key switches layers */
94//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
95//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
96//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
97
98/* override magic key keymap */
99//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
100//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
101//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
102//#define MAGIC_KEY_HELP1 H
103//#define MAGIC_KEY_HELP2 SLASH
104//#define MAGIC_KEY_DEBUG D
105//#define MAGIC_KEY_DEBUG_MATRIX X
106//#define MAGIC_KEY_DEBUG_KBD K
107//#define MAGIC_KEY_DEBUG_MOUSE M
108//#define MAGIC_KEY_VERSION V
109//#define MAGIC_KEY_STATUS S
110//#define MAGIC_KEY_CONSOLE C
111//#define MAGIC_KEY_LAYER0_ALT1 ESC
112//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
113//#define MAGIC_KEY_LAYER0 0
114//#define MAGIC_KEY_LAYER1 1
115//#define MAGIC_KEY_LAYER2 2
116//#define MAGIC_KEY_LAYER3 3
117//#define MAGIC_KEY_LAYER4 4
118//#define MAGIC_KEY_LAYER5 5
119//#define MAGIC_KEY_LAYER6 6
120//#define MAGIC_KEY_LAYER7 7
121//#define MAGIC_KEY_LAYER8 8
122//#define MAGIC_KEY_LAYER9 9
123//#define MAGIC_KEY_BOOTLOADER PAUSE
124//#define MAGIC_KEY_LOCK CAPS
125//#define MAGIC_KEY_EEPROM E
126//#define MAGIC_KEY_NKRO N
127//#define MAGIC_KEY_SLEEP_LED Z
128
129/*
130 * Feature disable options
131 * These options are also useful to firmware size reduction.
132 */
133
134/* disable debug print */
135//#define NO_DEBUG
136
137/* disable print */
138//#define NO_PRINT
139
140/* disable action features */
141//#define NO_ACTION_LAYER
142//#define NO_ACTION_TAPPING
143//#define NO_ACTION_ONESHOT
144//#define NO_ACTION_MACRO
145//#define NO_ACTION_FUNCTION
146
147#endif
diff --git a/keyboards/frosty_flake/frosty_flake.c b/keyboards/frosty_flake/frosty_flake.c
new file mode 100644
index 000000000..1cd476038
--- /dev/null
+++ b/keyboards/frosty_flake/frosty_flake.c
@@ -0,0 +1,63 @@
1#include "frosty_flake.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6
7 matrix_init_user();
8}
9
10void matrix_scan_kb(void) {
11 // put your looping keyboard code here
12 // runs every cycle (a lot)
13
14 matrix_scan_user();
15}
16
17bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
18 // put your per-action keyboard code here
19 // runs for every action, just before processing by the firmware
20
21 return process_record_user(keycode, record);
22}
23
24void led_set_kb(uint8_t usb_led) {
25 DDRB |= (1<<7);
26 DDRC |= (1<<5) | (1<<6);
27
28 print_dec(usb_led);
29
30 if (usb_led & (1<<USB_LED_CAPS_LOCK))
31 PORTC &= ~(1<<5);
32 else
33 PORTC |= (1<<5);
34
35 if (usb_led & (1<<USB_LED_NUM_LOCK))
36 PORTB &= ~(1<<7);
37 else
38 PORTB |= (1<<7);
39
40 if (usb_led & (1<<USB_LED_SCROLL_LOCK))
41 PORTC &= ~(1<<6);
42 else
43 PORTC |= (1<<6);
44
45 led_set_user(usb_led);
46}
47
48__attribute__ ((weak))
49void matrix_init_user(void) {
50}
51
52__attribute__ ((weak))
53void matrix_scan_user(void) {
54}
55
56__attribute__ ((weak))
57bool process_record_user(uint16_t keycode, keyrecord_t *record) {
58 return true;
59}
60
61__attribute__ ((weak))
62void led_set_user(uint8_t usb_led) {
63} \ No newline at end of file
diff --git a/keyboards/frosty_flake/frosty_flake.h b/keyboards/frosty_flake/frosty_flake.h
new file mode 100644
index 000000000..3b52df6ba
--- /dev/null
+++ b/keyboards/frosty_flake/frosty_flake.h
@@ -0,0 +1,50 @@
1#ifndef FROSTY_FLAKE_H
2#define FROSTY_FLAKE_H
3
4#include "quantum.h"
5
6// This a shortcut to help you visually see your layout.
7// The following is an example using the Planck MIT layout
8// The first section contains all of the arguements
9// The second converts the arguments into a two-dimensional array
10
11/*
12 Matrix col/row mapping
13
14 ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
15 | J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 |
16 `----' `-------------------' `-------------------' `-------------------' `--------------'
17 ,-------------------------------------------------------------------------. ,--------------. ,-------------------.
18 | J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 |
19 |-------------------------------------------------------------------------| |--------------| |-------------------|
20 | J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 |
21 |-------------------------------------------------------------------------| '--------------' |-------------- |
22 | O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 | | K2 | L2 | Q2 | |
23 |-------------------------------------------------------------------------| ,----. |-------------------|
24 | N2 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 | | K3 | L3 | Q3 | O3 |
25 |-------------------------------------------------------------------------| ,--------------. |-------------- |
26 | A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | |
27 `-------------------------------------------------------------------------' `--------------' `-------------------'
28*/
29#define KEYMAP( \
30 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
31 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
32 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
33 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
34 KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
35 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
36) \
37{ \
38/* Columns and rows need to be swapped in the below definition */ \
39/* A B C D E F G H I J K L M N O P Q R */ \
40/* 0 */ { KC_NO, KB0, KC0, KD0, KC_NO, KF0, KG0, KC_NO, KC_NO, KC_NO, KK0, KL0, KC_NO, KC_NO, KO0, KC_NO, KQ0, KR0 }, \
41/* 1 */ { KA1, KB1, KC_NO, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KK1, KL1, KC_NO, KC_NO, KC_NO, KC_NO, KQ1, KC_NO }, \
42/* 2 */ { KC_NO, KB2, KC_NO, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KC_NO, KN2, KC_NO, KP2, KQ2, KR2 }, \
43/* 3 */ { KC_NO, KB3, KC_NO, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3, KC_NO, KQ3, KR3 }, \
44/* 4 */ { KA4, KB4, KC_NO, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KC_NO, KC_NO, KO4, KC_NO, KQ4, KR4 }, \
45/* 5 */ { KA5, KC_NO, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KC_NO, KC_NO, KO5, KC_NO, KQ5, KR5 }, \
46/* 6 */ { KC_NO, KB6, KC6, KC_NO, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KL6, KC_NO, KC_NO, KO6, KC_NO, KQ6, KR6 }, \
47/* 7 */ { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7, KC_NO, KC_NO, KC_NO, KC_NO, KO7, KC_NO, KQ7, KR7 } \
48}
49
50#endif
diff --git a/keyboards/frosty_flake/keymaps/default/Makefile b/keyboards/frosty_flake/keymaps/default/Makefile
new file mode 100644
index 000000000..9d3df5964
--- /dev/null
+++ b/keyboards/frosty_flake/keymaps/default/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif
diff --git a/keyboards/frosty_flake/keymaps/default/config.h b/keyboards/frosty_flake/keymaps/default/config.h
new file mode 100644
index 000000000..8893d122e
--- /dev/null
+++ b/keyboards/frosty_flake/keymaps/default/config.h
@@ -0,0 +1,8 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6// place overrides here
7
8#endif
diff --git a/keyboards/frosty_flake/keymaps/default/keymap.c b/keyboards/frosty_flake/keymaps/default/keymap.c
new file mode 100644
index 000000000..4dc7ed655
--- /dev/null
+++ b/keyboards/frosty_flake/keymaps/default/keymap.c
@@ -0,0 +1,11 @@
1#include "frosty_flake.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = KEYMAP(\
5 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
6 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
7 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \
8 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
9 KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
10 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT)
11}; \ No newline at end of file
diff --git a/keyboards/frosty_flake/keymaps/default/readme.md b/keyboards/frosty_flake/keymaps/default/readme.md
new file mode 100644
index 000000000..11bf4825f
--- /dev/null
+++ b/keyboards/frosty_flake/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for frosty_flake
diff --git a/keyboards/frosty_flake/matrix.c b/keyboards/frosty_flake/matrix.c
new file mode 100644
index 000000000..05dffdb64
--- /dev/null
+++ b/keyboards/frosty_flake/matrix.c
@@ -0,0 +1,135 @@
1/*
2 Copyright 2017 Gabriel Young <gabeplaysdrums@live.com>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include <stdint.h>
19#include <stdbool.h>
20#include <avr/io.h>
21#include <util/delay.h>
22#include "print.h"
23#include "debug.h"
24#include "util.h"
25#include "matrix.h"
26
27#ifndef DEBOUNCING_DELAY
28# define DEBOUNCING_DELAY 5
29#endif
30static uint8_t debouncing = DEBOUNCING_DELAY;
31
32static matrix_row_t matrix[MATRIX_ROWS];
33static matrix_row_t matrix_debouncing[MATRIX_ROWS];
34
35static matrix_row_t scan_col(void) {
36 return (
37 (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) |
38 (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<1)) |
39 (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) |
40 (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) |
41 (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) |
42 (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) |
43 (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) |
44 (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7))
45 );
46}
47
48static void select_col(uint8_t col) {
49 switch (col) {
50 case 0: PORTD = (PORTD & ~0b01111011) | 0b00011011; break;
51 case 1: PORTD = (PORTD & ~0b01111011) | 0b01000011; break;
52 case 2: PORTD = (PORTD & ~0b01111011) | 0b01101010; break;
53 case 3: PORTD = (PORTD & ~0b01111011) | 0b01111001; break;
54 case 4: PORTD = (PORTD & ~0b01111011) | 0b01100010; break;
55 case 5: PORTD = (PORTD & ~0b01111011) | 0b01110001; break;
56 case 6: PORTD = (PORTD & ~0b01111011) | 0b01100001; break;
57 case 7: PORTD = (PORTD & ~0b01111011) | 0b01110000; break;
58 case 8: PORTD = (PORTD & ~0b01111011) | 0b01100000; break;
59 case 9: PORTD = (PORTD & ~0b01111011) | 0b01101000; break;
60 case 10: PORTD = (PORTD & ~0b01111011) | 0b00101011; break;
61 case 11: PORTD = (PORTD & ~0b01111011) | 0b00110011; break;
62 case 12: PORTD = (PORTD & ~0b01111011) | 0b00100011; break;
63 case 13: PORTD = (PORTD & ~0b01111011) | 0b01111000; break;
64 case 14: PORTD = (PORTD & ~0b01111011) | 0b00010011; break;
65 case 15: PORTD = (PORTD & ~0b01111011) | 0b01101001; break;
66 case 16: PORTD = (PORTD & ~0b01111011) | 0b00001011; break;
67 case 17: PORTD = (PORTD & ~0b01111011) | 0b00111011; break;
68 }
69}
70
71void matrix_init(void) {
72 /* Row output pins */
73 DDRD |= 0b01111011;
74 /* Column input pins */
75 DDRC &= ~0b10000000;
76 DDRB &= ~0b01111111;
77 PORTC |= 0b10000000;
78 PORTB |= 0b01111111;
79
80 for (uint8_t i=0; i < MATRIX_ROWS; i++)
81 matrix[i] = matrix_debouncing[i] = 0;
82
83 matrix_init_quantum();
84}
85
86uint8_t matrix_scan(void) {
87 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
88 select_col(col);
89 _delay_us(3);
90 matrix_row_t col_scan = scan_col();
91 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
92 bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
93 bool curr_bit = col_scan & (1<<row);
94 if (prev_bit != curr_bit) {
95 matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
96 debouncing = DEBOUNCING_DELAY;
97 }
98 }
99 }
100
101 if (debouncing) {
102 if (--debouncing)
103 _delay_ms(1);
104 else
105 for (uint8_t i = 0; i < MATRIX_ROWS; i++)
106 matrix[i] = matrix_debouncing[i];
107 }
108
109 matrix_scan_quantum();
110 return 1;
111}
112
113inline matrix_row_t matrix_get_row(uint8_t row) {
114 return matrix[row];
115}
116
117void matrix_print(void) {
118 print("\nr\\c ABCDEFGHIJKLMNOPQR\n");
119 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
120 matrix_row_t matrix_row = matrix_get_row(row);
121 xprintf("%02X: ", row);
122 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
123 bool curr_bit = matrix_row & (1<<col);
124 xprintf("%c", curr_bit ? '*' : '.');
125 }
126 print("\n");
127 }
128}
129
130uint8_t matrix_key_count(void) {
131 uint8_t count = 0;
132 for (uint8_t row = 0; row < MATRIX_ROWS; row++)
133 count += bitpop32(matrix[row]);
134 return count;
135} \ No newline at end of file
diff --git a/keyboards/frosty_flake/readme.md b/keyboards/frosty_flake/readme.md
new file mode 100644
index 000000000..ff440e33b
--- /dev/null
+++ b/keyboards/frosty_flake/readme.md
@@ -0,0 +1,32 @@
1frosty_flake keyboard firmware
2======================
3
4This is the firmware for Rev. 20140521 of the Frosty Flake controller by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/), a replacement controller for the [Cooler Master Quick Fire Rapid](http://www.coolermaster.com/peripheral/keyboards/quickfirerapid/).
5
6The code was adapted from the [BathroomEpiphanies TMK Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers), but has been cleaned up to match the [schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf) and gone through some minor refactoring for QMK.
7
8## Quantum MK Firmware
9
10For the full Quantum feature list, see [the parent readme](/).
11
12## Building
13
14Download or clone the whole firmware and navigate to the keyboards/frosty_flake folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
15
16Depending on which keymap you would like to use, you will have to compile slightly differently.
17
18### Default
19
20To build with the default keymap, simply run `make default`.
21
22### Other Keymaps
23
24Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
25
26To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
27
28```
29$ make [default|jack|<name>]
30```
31
32Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/frosty_flake/rules.mk b/keyboards/frosty_flake/rules.mk
new file mode 100644
index 000000000..dd2f4b6ee
--- /dev/null
+++ b/keyboards/frosty_flake/rules.mk
@@ -0,0 +1,71 @@
1# MCU name
2#MCU = at90usb1287
3MCU = atmega32u2
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18
19#
20# LUFA specific
21#
22# Target architecture (see library "Board Types" documentation).
23ARCH = AVR8
24
25# Input clock frequency.
26# This will define a symbol, F_USB, in all source code files equal to the
27# input clock frequency (before any prescaling is performed) in Hz. This value may
28# differ from F_CPU if prescaling is used on the latter, and is required as the
29# raw input clock is fed directly to the PLL sections of the AVR for high speed
30# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
31# at the end, this will be done automatically to create a 32-bit value in your
32# source code.
33#
34# If no clock division is performed on the input clock inside the AVR (via the
35# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
36F_USB = $(F_CPU)
37
38# Interrupt driven control endpoint task(+60)
39OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
40
41
42# Boot Section Size in *bytes*
43# Teensy halfKay 512
44# Teensy++ halfKay 1024
45# Atmel DFU loader 4096
46# LUFA bootloader 4096
47# USBaspLoader 2048
48OPT_DEFS += -DBOOTLOADER_SIZE=4096
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
57CONSOLE_ENABLE ?= yes # Console for debug(+400)
58COMMAND_ENABLE ?= yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE ?= no # USB Nkey Rollover
63BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE ?= no # MIDI controls
65UNICODE_ENABLE ?= no # Unicode
66BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE ?= no # Audio output on port C6
68FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
69
70CUSTOM_MATRIX = yes
71SRC += matrix.c \ No newline at end of file
diff --git a/keyboards/gh60/keymaps/unxmaal/Makefile b/keyboards/gh60/keymaps/unxmaal/Makefile
new file mode 100644
index 000000000..c73cf1141
--- /dev/null
+++ b/keyboards/gh60/keymaps/unxmaal/Makefile
@@ -0,0 +1,112 @@
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# MCU name
42#MCU = at90usb1287
43MCU = atmega32u4
44
45# Processor frequency.
46# This will define a symbol, F_CPU, in all source code files equal to the
47# processor frequency in Hz. You can then use this symbol in your source code to
48# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
49# automatically to create a 32-bit value in your source code.
50#
51# This will be an integer division of F_USB below, as it is sourced by
52# F_USB after it has run through any CPU prescalers. Note that this value
53# does not *change* the processor frequency - it should merely be updated to
54# reflect the processor speed set externally so that the code can use accurate
55# software delays.
56F_CPU = 16000000
57
58
59#
60# LUFA specific
61#
62# Target architecture (see library "Board Types" documentation).
63ARCH = AVR8
64
65# Input clock frequency.
66# This will define a symbol, F_USB, in all source code files equal to the
67# input clock frequency (before any prescaling is performed) in Hz. This value may
68# differ from F_CPU if prescaling is used on the latter, and is required as the
69# raw input clock is fed directly to the PLL sections of the AVR for high speed
70# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
71# at the end, this will be done automatically to create a 32-bit value in your
72# source code.
73#
74# If no clock division is performed on the input clock inside the AVR (via the
75# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
76F_USB = $(F_CPU)
77
78# Interrupt driven control endpoint task(+60)
79OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
80
81
82# Boot Section Size in *bytes*
83# Teensy halfKay 512
84# Teensy++ halfKay 1024
85# Atmel DFU loader 4096
86# LUFA bootloader 4096
87# USBaspLoader 2048
88OPT_DEFS += -DBOOTLOADER_SIZE=4096
89
90
91# Build Options
92# comment out to disable the options.
93#
94BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
95MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
96EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
97# CONSOLE_ENABLE ?= yes # Console for debug(+400)
98# COMMAND_ENABLE ?= yes # Commands for debug and configuration
99KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key
100# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
101# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
102NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
103# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
104# MIDI_ENABLE ?= YES # MIDI controls
105# UNICODE_ENABLE ?= YES # Unicode
106# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
107RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow
108
109ifndef QUANTUM_DIR
110 include ../../../../Makefile
111endif
112
diff --git a/keyboards/gh60/keymaps/unxmaal/README.md b/keyboards/gh60/keymaps/unxmaal/README.md
new file mode 100644
index 000000000..52bf97ef4
--- /dev/null
+++ b/keyboards/gh60/keymaps/unxmaal/README.md
@@ -0,0 +1,20 @@
1Unxmaal's GH60 Layout
2=====================
3* Mostly stolen from /u/robotmaxtron
4
5##Quantum MK Firmware
6For the full Quantum feature list, see the parent readme.md.
7
8* Standard Mac ANSI layout
9* Spacebar acts as space when tapped, Fn when held
10* Menu acts as menu when tapped, Fn2 when held
11* Layer1:
12 * Top row = `~, F1-F12, Del
13 * JKIL = arrow cluster
14* Layer2:
15 * Top row = media controls
16 * JKIL = PgDn/Up/Home/Insert
17 * Backspace = Reset
18
19### Additional Credits
20Keymap has been based on various keymaps available from the QMK Repo for the GH60-SATAN and KC60 keyboards.
diff --git a/keyboards/gh60/keymaps/unxmaal/WS2812-wiring.jpg b/keyboards/gh60/keymaps/unxmaal/WS2812-wiring.jpg
new file mode 100644
index 000000000..4ab8cc31a
--- /dev/null
+++ b/keyboards/gh60/keymaps/unxmaal/WS2812-wiring.jpg
Binary files differ
diff --git a/keyboards/gh60/keymaps/unxmaal/config.h b/keyboards/gh60/keymaps/unxmaal/config.h
new file mode 100644
index 000000000..bb218d6fd
--- /dev/null
+++ b/keyboards/gh60/keymaps/unxmaal/config.h
@@ -0,0 +1,190 @@
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#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER geekhack
28#define PRODUCT GH60
29#define DESCRIPTION t.m.k. keyboard firmware for GH60
30
31/* key matrix size */
32#define MATRIX_ROWS 5
33#define MATRIX_COLS 14
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45 #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
46// Rev A
47// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
48// Rev B/C
49#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
50#define UNUSED_PINS
51
52/* COL2ROW or ROW2COL */
53#define DIODE_DIRECTION COL2ROW
54
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
56#define DEBOUNCING_DELAY 5
57
58/* define if matrix has ghost (lacks anti-ghosting diodes) */
59//#define MATRIX_HAS_GHOST
60
61/* number of backlight levels */
62#define BACKLIGHT_LEVELS 3
63
64/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
65#define LOCKING_SUPPORT_ENABLE
66/* Locking resynchronize hack */
67#define LOCKING_RESYNC_ENABLE
68
69/*
70 * Force NKRO
71 *
72 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
73 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
74 * makefile for this to work.)
75 *
76 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
77 * until the next keyboard reset.
78 *
79 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
80 * fully operational during normal computer usage.
81 *
82 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
83 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
84 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
85 * power-up.
86 *
87 */
88//#define FORCE_NKRO
89
90/*
91 * Magic Key Options
92 *
93 * Magic keys are hotkey commands that allow control over firmware functions of
94 * the keyboard. They are best used in combination with the HID Listen program,
95 * found here: https://www.pjrc.com/teensy/hid_listen.html
96 *
97 * The options below allow the magic key functionality to be changed. This is
98 * useful if your keyboard/keypad is missing keys and you want magic key support.
99 *
100 */
101
102/* key combination for magic key command */
103#define IS_COMMAND() ( \
104 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
105)
106
107/* control how magic key switches layers */
108//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
110//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
111
112/* override magic key keymap */
113//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
116//#define MAGIC_KEY_HELP1 H
117//#define MAGIC_KEY_HELP2 SLASH
118//#define MAGIC_KEY_DEBUG D
119//#define MAGIC_KEY_DEBUG_MATRIX X
120//#define MAGIC_KEY_DEBUG_KBD K
121//#define MAGIC_KEY_DEBUG_MOUSE M
122//#define MAGIC_KEY_VERSION V
123//#define MAGIC_KEY_STATUS S
124//#define MAGIC_KEY_CONSOLE C
125//#define MAGIC_KEY_LAYER0_ALT1 ESC
126//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
127//#define MAGIC_KEY_LAYER0 0
128//#define MAGIC_KEY_LAYER1 1
129//#define MAGIC_KEY_LAYER2 2
130//#define MAGIC_KEY_LAYER3 3
131//#define MAGIC_KEY_LAYER4 4
132//#define MAGIC_KEY_LAYER5 5
133//#define MAGIC_KEY_LAYER6 6
134//#define MAGIC_KEY_LAYER7 7
135//#define MAGIC_KEY_LAYER8 8
136//#define MAGIC_KEY_LAYER9 9
137//#define MAGIC_KEY_BOOTLOADER PAUSE
138//#define MAGIC_KEY_LOCK CAPS
139//#define MAGIC_KEY_EEPROM E
140//#define MAGIC_KEY_NKRO N
141//#define MAGIC_KEY_SLEEP_LED Z
142
143/*
144 * Feature disable options
145 * These options are also useful to firmware size reduction.
146 */
147
148/* disable debug print */
149//#define NO_DEBUG
150
151/* disable print */
152//#define NO_PRINT
153
154/* disable action features */
155//#define NO_ACTION_LAYER
156//#define NO_ACTION_TAPPING
157//#define NO_ACTION_ONESHOT
158//#define NO_ACTION_MACRO
159//#define NO_ACTION_FUNCTION
160
161/*
162 * RGB Underglow
163 * These settings are for the F4 by default:
164 *
165 *
166 * #define ws2812_PORTREG PORTF
167 * #define ws2812_DDRREG DDRF
168 * #define ws2812_pin PF4
169 * #define RGBLED_NUM 14 // Number of LEDs
170 * #define RGBLIGHT_HUE_STEP 10
171 * #define RGBLIGHT_SAT_STEP 17
172 * #define RGBLIGHT_VAL_STEP 17
173 *
174 * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects.
175 * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations.
176 * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c
177*/
178
179/* Deprecated code below
180#define ws2812_PORTREG PORTF
181#define ws2812_DDRREG DDRF
182#define ws2812_pin PF4
183*/
184#define RGB_DI_PIN F4
185#define RGBLIGHT_ANIMATIONS
186#define RGBLED_NUM 8 // Number of LEDs
187#define RGBLIGHT_HUE_STEP 8
188#define RGBLIGHT_SAT_STEP 8
189#define RGBLIGHT_VAL_STEP 8
190#endif
diff --git a/keyboards/gh60/keymaps/unxmaal/keymap.c b/keyboards/gh60/keymaps/unxmaal/keymap.c
new file mode 100644
index 000000000..7c9bd6a6d
--- /dev/null
+++ b/keyboards/gh60/keymaps/unxmaal/keymap.c
@@ -0,0 +1,228 @@
1#include "gh60.h"
2#include "action_layer.h"
3
4#define _BL 0
5#define _AL 1
6#define _FL 2
7#define _UL 3
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /*
11 * ANSI Base, Mac style
12 * ,-----------------------------------------------------------------------------.
13 * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| = | Backsp |
14 * |-----------------------------------------------------------------------------|
15 * |Tab | Q | W | E | R | T | Y | U | I| O| P| [| ]| \|
16 * |-----------------------------------------------------------------------------|
17 * |Caps/Fn | A| S| D| F| G| H| J| K| L| ;| '| Enter |
18 * |-----------------------------------------------------------------------------|
19 * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
20 * |-----------------------------------------------------------------------------|
21 * |Fn|Alt |Gui | Space(tapped), Fn(held) |Gui |Alt |Menu(tapped, Fn2(held)|Ctrl|
22 * `-----------------------------------------------------------------------------'
23 */
24 [_BL] = KEYMAP(
25 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, \
26 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, \
27 KC_LCTL,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT, \
28 KC_LSFT,KC_NO,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_NO,KC_RSFT, \
29 MO(1),KC_LALT,KC_LGUI, LT(1,KC_SPACE), KC_NO, KC_RGUI, KC_RALT, LT(2,KC_MENU), KC_RCTL),
30
31 /*
32 * Pok3r style arrow cluster
33 * ,-----------------------------------------------------------.
34 * |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL |
35 * |-----------------------------------------------------------|
36 * | | | | | | | | |Up| | | | | |
37 * |-----------------------------------------------------------|
38 * | | | | | | | |Left|Down|Right| | | |
39 * |-----------------------------------------------------------|
40 * | | | | | | | | | | | | |
41 * |-----------------------------------------------------------|
42 * | | | | | | | | |
43 * `-----------------------------------------------------------'
44 */
45 [_AL] = KEYMAP(
46 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_DELETE, \
47 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
48 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
49 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
50 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
51
52
53 /*
54 * Secondary function layer
55 * ,-------------------------------------------------------------.
56 * | | | | | | | | RW|Play|FF| Mute| Vol Down | Vol up |Reset |
57 * |-------------------------------------------------------------|
58 * | | | | | | | | | |PgUp| | | | |
59 * |-------------------------------------------------------------|
60 * | | | | | | | |Home|PgDown|End| | | |
61 * |-------------------------------------------------------------|
62 * | | | | | | | | | | | | |
63 * |-------------------------------------------------------------|
64 * | | | | | | | | |
65 * `-------------------------------------------------------------'
66 */
67 [_FL] = KEYMAP(
68 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MPRV,KC_MPLY,KC_MNXT,KC_MUTE,KC_VOLD,KC_VOLU,RESET, \
69 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PGUP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
70 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_TRNS,KC_HOME,KC_PGDN,KC_END,KC_TRNS,KC_TRNS,KC_TRNS, \
71 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
72 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
73
74 /*
75 * Locking layer for controlling the underglow.
76 * NOTE: currently unused.
77 *
78 * ,-----------------------------------------------------------.
79 * | | | | | | | | | | | | | | |
80 * |-----------------------------------------------------------|
81 * | | | | | | | | | | | | | | |
82 * |-----------------------------------------------------------|
83 * | |On|Mode| | | | | | | | | | |
84 * |-----------------------------------------------------------|
85 * | | |Hue+|Hue-|Sat+|Sat-|Val+|Val-| | | | |
86 * |-----------------------------------------------------------|
87 * | | | | | | | | |
88 * `-----------------------------------------------------------'
89 */
90 [_UL] = KEYMAP(
91 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
92 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
93 KC_TRNS,F(4),F(5),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
94 KC_TRNS,KC_TRNS,KC_TRNS,F(6),F(7),F(8),F(9),F(10),F(11),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
95 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
96};
97
98enum function_id {
99 RGBLED_TOGGLE,
100 RGBLED_STEP_MODE,
101 RGBLED_INCREASE_HUE,
102 RGBLED_DECREASE_HUE,
103 RGBLED_INCREASE_SAT,
104 RGBLED_DECREASE_SAT,
105 RGBLED_INCREASE_VAL,
106 RGBLED_DECREASE_VAL,
107 SHIFT_ESC,
108};
109
110const uint16_t PROGMEM fn_actions[] = {
111 [0] = ACTION_LAYER_MOMENTARY(2), // Momentary Fn overlay
112 [1] = ACTION_LAYER_TOGGLE(1), // Toggle Arrow Layer overlay
113 [2] = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer
114 [3] = ACTION_LAYER_TOGGLE(3), // Toggle Underglow Layer overlay
115 [4] = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow
116 [5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
117 [6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
118 [7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
119 [8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
120 [9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
121 [10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
122 [11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
123 [12] = ACTION_FUNCTION(SHIFT_ESC),
124 [13] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
125};
126
127const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
128{
129 // MACRODOWN only works in this function
130 switch(id) {
131 case 0:
132 if (record->event.pressed) {
133 register_code(KC_RSFT);
134 } else {
135 unregister_code(KC_RSFT);
136 }
137 break;
138 }
139 return MACRO_NONE;
140};
141
142void matrix_scan_user(void) {
143
144// Layer LED indicators
145// ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
146 uint32_t layer = layer_state;
147 if (layer & (1<<1)) {
148 gh60_wasd_leds_on();
149 } else {
150 gh60_wasd_leds_off();
151 }
152
153 if (layer & (1<<2)) {
154 gh60_esc_led_on();
155 } else {
156 gh60_esc_led_off();
157 }
158};
159
160#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
161
162void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
163 switch (id) {
164 case RGBLED_TOGGLE:
165 //led operations
166 if (record->event.pressed) {
167 rgblight_toggle();
168 }
169 break;
170 case RGBLED_INCREASE_HUE:
171 if (record->event.pressed) {
172 rgblight_increase_hue();
173 }
174 break;
175 case RGBLED_DECREASE_HUE:
176 if (record->event.pressed) {
177 rgblight_decrease_hue();
178 }
179 break;
180 case RGBLED_INCREASE_SAT:
181 if (record->event.pressed) {
182 rgblight_increase_sat();
183 }
184 break;
185 case RGBLED_DECREASE_SAT:
186 if (record->event.pressed) {
187 rgblight_decrease_sat();
188 }
189 break;
190 case RGBLED_INCREASE_VAL:
191 if (record->event.pressed) {
192 rgblight_increase_val();
193 }
194 break;
195 case RGBLED_DECREASE_VAL:
196 if (record->event.pressed) {
197 rgblight_decrease_val();
198 }
199 break;
200 case RGBLED_STEP_MODE:
201 if (record->event.pressed) {
202 rgblight_step();
203 }
204 break;
205 static uint8_t shift_esc_shift_mask;
206 // Shift + ESC = ~
207 case SHIFT_ESC:
208 shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
209 if (record->event.pressed) {
210 if (shift_esc_shift_mask) {
211 add_key(KC_GRV);
212 send_keyboard_report();
213 } else {
214 add_key(KC_ESC);
215 send_keyboard_report();
216 }
217 } else {
218 if (shift_esc_shift_mask) {
219 del_key(KC_GRV);
220 send_keyboard_report();
221 } else {
222 del_key(KC_ESC);
223 send_keyboard_report();
224 }
225 }
226 break;
227 }
228};
diff --git a/keyboards/handwired/MS-sculpt-mobile/MS-sculpt-mobile.c b/keyboards/handwired/MS-sculpt-mobile/MS-sculpt-mobile.c
new file mode 100644
index 000000000..4c735a6c2
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/MS-sculpt-mobile.c
@@ -0,0 +1 @@
#include "MS-sculpt-mobile.h"
diff --git a/keyboards/handwired/MS-sculpt-mobile/MS-sculpt-mobile.h b/keyboards/handwired/MS-sculpt-mobile/MS-sculpt-mobile.h
new file mode 100644
index 000000000..1583dea6e
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/MS-sculpt-mobile.h
@@ -0,0 +1,48 @@
1#ifndef MICROSOFT_SCULPT_MOBILE_H
2#define MICROSOFT_SCULPT_MOBILE_H
3
4#include "quantum.h"
5
6
7#define KEYMAP( \
8 k7Q, k6O, k6P, k6Q, k5O, k5P, k5Q, k7A, k7B, k7C, k7D, k7E, k7F, k1O, k1K, k1L, \
9 k5A, k5K, k5L, k5M, k5N, k5H, k5I, k2A, k2B, k2C, k2D, k5B, k5C, k5J, k2E, \
10 k6R, k6D, k6E, k6F, k7I, k7J, k4A, k4B, k4C, k4D, k3A, k3B, k3C, k3D, \
11 k0J, k6A, k6B, k6C, k7H, k1A, k1B, k5D, k5E, k5F, k5G, k1C, k7P, k2G, \
12 k2P, k7K, k7L, k7M, k7O, k0A, k0B, k0C, k0D, k0E, k0F, k2L, k6G, k1P,\
13 k1Q, k4N, k3O,k6N, k3K, k0R, k1M, k6H, k6I, k6J \
14) \
15{ \
16 {k0A, k0B, k0C, k0D, k0E, k0F, KC_NO, KC_NO, KC_NO, k0J, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,KC_NO, KC_NO, k0R},\
17 {k1A, k1B, k1C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k1K, k1L, k1M, KC_NO, k1O, k1P, k1Q, KC_NO},\
18 {k2A, k2B, k2C, k2D, k2E, KC_NO, k2G, KC_NO, KC_NO, KC_NO, KC_NO, k2L, KC_NO, KC_NO, KC_NO, k2P, KC_NO, KC_NO},\
19 {k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k3K, KC_NO, KC_NO, KC_NO, k3O, KC_NO, KC_NO, KC_NO},\
20 {k4A, k4B, k4C, k4D, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k4N, KC_NO,KC_NO, KC_NO, KC_NO},\
21 {k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q, KC_NO },\
22 {k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6J, KC_NO, KC_NO, KC_NO, k6N, k6O, k6P, k6Q, k6R},\
23 {k7A, k7B, k7C, k7D, k7E, k7F, KC_NO, k7H, k7I, k7J, k7K, k7L, k7M, KC_NO, k7O, k7P, k7Q, KC_NO},\
24}
25
26
27#define MATRIX_TESTING_KEYMAP( \
28 k0A, k0B, k0C, k0D, k0E, k0F, k0G, k0H, k0I, k0, k0J, k0K, k0L, k0M, k0N, k0O, k0P, k0Q,\
29 k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1, k1J, k1K, k1L, k1M, k1N, k1O, k1P, k1Q,\
30 k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, k2, k2J, k2K, k2L, k2M, k2N, k2O, k2P, k2Q,\
31 k3A, k3B, k3C, k3D, k3E, k3F, k3G, k3H, k3I, k3, k3J, k3K, k3L, k3M, k3N, k3O, k3P, k3Q,\
32 k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, k4, k4J, k4K, k4L, k4M, k4N, k4O, k4P, k4Q,\
33 k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q,\
34 k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6, k6J, k6K, k6L, k6M, k6N, k6O, k6P, k6Q,\
35 k7A, k7B, k7C, k7D, k7E, k7F, k7G, k7H, k7I, k7, k7J, k7K, k7L, k7M, k7N, k7O, k7P, k7Q\
36) \
37{ \
38 {k0A, k0B, k0C, k0D, k0E, k0F, k0G, k0H, k0I, k0, k0J, k0K, k0L, k0M, k0N, k0O, k0P, k0Q},\
39 {k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1, k1J, k1K, k1L, k1M, k1N, k1O, k1P, k1Q},\
40 {k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, k2, k2J, k2K, k2L, k2M, k2N, k2O, k2P, k2Q},\
41 {k3A, k3B, k3C, k3D, k3E, k3F, k3G, k3H, k3I, k3, k3J, k3K, k3L, k3M, k3N, k3O, k3P, k3Q},\
42 {k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, k4, k4J, k4K, k4L, k4M, k4N, k4O, k4P, k4Q},\
43 {k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q},\
44 {k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6, k6J, k6K, k6L, k6M, k6N, k6O, k6P, k6Q},\
45 {k7A, k7B, k7C, k7D, k7E, k7F, k7G, k7H, k7I, k7, k7J, k7K, k7L, k7M, k7N, k7O, k7P, k7Q},\
46}
47
48#endif
diff --git a/keyboards/handwired/MS-sculpt-mobile/Makefile b/keyboards/handwired/MS-sculpt-mobile/Makefile
new file mode 100644
index 000000000..bd09e5885
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif
diff --git a/keyboards/handwired/MS-sculpt-mobile/babblePaste.c b/keyboards/handwired/MS-sculpt-mobile/babblePaste.c
new file mode 100644
index 000000000..3a9b86997
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/babblePaste.c
@@ -0,0 +1,459 @@
1/* A library to output the right key shortcut in any common app.
2Given a global variable babble_mode to show the environment and a
3key that calls the paste macro, do the right type of paste.
4Setting the context is done by another macro, or TBD interaction with the host.
5
6Huge thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
7and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jeebak/keymap.c
8*/
9
10#include "babblePaste.h"
11#include "action_macro.h"
12
13#ifdef USE_BABLPASTE
14
15// GLOBAL variable to determine mode. Sets startup default if no eeppom
16uint8_t babble_mode =0 ;
17
18// small function that we might also want to call from a keymap.
19
20macro_t* switch_babble_mode( uint8_t id) {
21 babble_mode= id;
22 return MACRO_NONE; //less typing where called
23}
24
25
26// Today I learned that the preprocessor can not create a switch statement label from an argument
27// And else statements have problems, see https://gcc.gnu.org/onlinedocs/gcc-3.0.1/cpp_3.html#SEC15
28#define BABLM(ent, macro...) \
29 if ( ent == shortcut ) \
30 { action_macro_play( MACRO(macro)); return MACRO_NONE; }
31
32
33/* this function runs the appropriate babblepaste macro, given
34the global babble_mode, and a shortcut from the ENUM in babblePaste.h
35TODO, the pointers in this function should be stored in a PROGMEM array, not ram.
36But that requires even more clever preprocessor foo.
37*/
38const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
39/*
40 if ( shortcut < BABL_START_NUM || \
41 shortcut >= (BABL_START_NUM + BABL_NUM_MACROS ) ) {
42 return MACRO_NONE;
43 }
44*/
45
46
47#ifdef MS_MODE
48 if ( BABL_WINDOWS == shortcut ) { return switch_babble_mode(MS_MODE); }
49#endif
50#ifdef MAC_MODE
51 if ( BABL_MAC == shortcut) { return switch_babble_mode(MAC_MODE); }
52#endif
53#ifdef LINUX_MODE
54 if ( BABL_LINUX == shortcut ) { return switch_babble_mode(LINUX_MODE); }
55#endif
56 #ifdef READMUX_MODE
57 if ( BABL_READLINE == shortcut ) { switch_babble_mode(READMUX_MODE); return MACRO_NONE; }
58#endif
59#ifdef VI_MODE
60 if ( BABL_VI == shortcut ) { return switch_babble_mode(VI_MODE); }
61#endif
62#ifdef EMACS_MODE
63 if ( BABL_EMACS == shortcut ) { return switch_babble_mode(EMACS_MODE); }
64#endif
65
66
67
68 switch(babble_mode) {
69
70#ifdef MS_MODE
71
72 case MS_MODE:
73 BABLM( BABL_GO_LEFT_1C, T(LEFT), END );
74 BABLM( BABL_GO_RIGHT_1C , T(RIGHT), END );
75 BABLM( BABL_GO_LEFT_WORD, D(LCTL), T(LEFT), U(LCTL), END );
76 BABLM( BABL_GO_RIGHT_WORD, D(LCTL), T(RIGHT), U(LCTL), END );
77 BABLM( BABL_GO_START_LINE, T(HOME), END );
78 BABLM( BABL_GO_END_LINE, T(END), END );
79 BABLM( BABL_GO_START_DOC, D(LCTL),T(HOME), U(LCTL),END );
80 BABLM( BABL_GO_END_DOC, D(LCTL),T(END), U(LCTL),END );
81 BABLM( BABL_GO_NEXT_LINE, T(DOWN), END );
82 BABLM( BABL_GO_PREV_LINE, T(UP), END );
83 BABLM( BABL_PGDN, T(PGDN), END );
84 BABLM( BABL_PGUP, T(PGUP), END );
85 BABLM( BABL_DEL_RIGHT_1C, T(DEL), END );
86 BABLM( BABL_DEL_LEFT_WORD, D(LCTL), T(BSPACE), U(LCTL), END );
87 BABLM( BABL_DEL_RIGHT_WORD, D(LCTL), T(DEL), U(LCTL), END );
88 BABLM( BABL_DEL_TO_LINE_END, D(RSFT), T(HOME), U(RSFT), T(DEL), END);
89 BABLM( BABL_DEL_TO_LINE_START, D(RSFT), T(END), U(RSFT), T(DEL), END );
90#ifndef BABL_MOVEMENTONLY
91 BABLM( BABL_UNDO, D(LCTL), T(Z), U(LCTL), END );
92 BABLM( BABL_REDO, D(LCTL), T(Y), U(LCTL), END );
93 BABLM( BABL_CUT, D(LCTL), T(X), U(LCTL), END );
94 BABLM( BABL_COPY, D(LCTL), T(C), U(LCTL), END );
95 BABLM( BABL_PASTE, D(LCTL), T(V), U(LCTL), END );
96 BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );
97 BABLM( BABL_FIND, D(LCTL),T(F), U(LCTL),END );
98 BABLM( BABL_FIND_NEXT, T(F3),END );
99 BABLM( BABL_FIND_REPLACE, D(LCTL),T(H), U(LCTL),END );
100 BABLM( BABL_RUNAPP, D(LGUI),T(R), U(LGUI),END );
101 BABLM( BABL_SWITCH_APP_NEXT, D(LALT),T(TAB), U(LALT),END );
102 BABLM( BABL_SWITCH_APP_LAST, D(LSFT),D(LALT),T(TAB), U(LALT), U(LSFT),END );
103 BABLM( BABL_CLOSE_APP, D(LALT),T(F4), U(LALT),END );
104 BABLM( BABL_HELP, T(F1),END );
105#ifndef BABL_NOBROWSER
106 BABLM( BABL_BROWSER_NEW_TAB, D(LCTL), T(T), U(LCTL),END );
107 BABLM( BABL_BROWSER_CLOSE_TAB, D(LCTL), T(W), U(LCTL),END );
108 BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LCTL), D(RSFT),T(T), U(RSFT),U(LCTL),END );
109 BABLM( BABL_BROWSER_NEXT_TAB, D(LCTL), T(TAB), U(LCTL),END );
110 BABLM( BABL_BROWSER_PREV_TAB, D(LCTL), D(RSFT), T(TAB), U(RSFT), U(LCTL),END );
111 BABLM( BABL_BROWSER_URL_BAR, D(LCTL), T(L), U(LCTL),END );
112 BABLM( BABL_BROWSER_FORWARD, D(LALT), T(RIGHT), U(LALT),END );
113 BABLM( BABL_BROWSER_BACK, D(LALT), T(LEFT), U(LALT),END );
114 BABLM( BABL_BROWSER_FIND, D(LCTL), T(F), U(LCTL),END );
115 BABLM( BABL_BROWSER_BOOKMARK, D(LCTL), T(D), U(LCTL),END );
116 //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LCTL),END ); // EDGE
117 BABLM( BABL_BROWSER_DEV_TOOLS, D(LCTL), T(T), U(LCTL),END ); // Chrome
118 // Chrome
119 BABLM( BABL_BROWSER_RELOAD, D(LCTL), T(F5), U(LCTL),END ); // hard reload w/o cache
120 BABLM( BABL_BROWSER_FULLSCREEN, T(F11),END ); //command shift F
121 BABLM( BABL_BROWSER_ZOOM_IN, D(LCTL), D(RSFT), T(EQL), U(RSFT), U(LCTL),END ); // ctr+ +
122 BABLM( BABL_BROWSER_ZOOM_OUT, D(LCTL), T(MINS), U(LCTL),END );
123#endif
124#endif
125
126 // Todo, ring bell, flash light, show user this isn't supported
127 return MACRO_NONE;
128
129
130#endif /* MS_MODE*/
131
132
133#ifdef LINUX_MODE
134
135 case LINUX_MODE:
136 BABLM( BABL_GO_LEFT_1C , T(LEFT), END );
137 BABLM( BABL_GO_RIGHT_1C , T(RIGHT), END );
138 BABLM( BABL_GO_LEFT_WORD , D(LCTL), T(LEFT), U(LCTL), END );
139 BABLM( BABL_GO_RIGHT_WORD , D(LCTL), T(RIGHT), U(LCTL), END );
140 BABLM( BABL_GO_START_LINE , T(HOME), END );
141 BABLM( BABL_GO_END_LINE , T(END), END );
142 BABLM( BABL_GO_START_DOC , D(LCTL),T(HOME), U(LCTL),END );
143 BABLM( BABL_GO_END_DOC , D(LCTL),T(END), U(LCTL),END );
144 BABLM( BABL_GO_NEXT_LINE , T(DOWN), END );
145 BABLM( BABL_GO_PREV_LINE , T(UP), END );
146 BABLM( BABL_PGDN , T(PGDN), END );
147 BABLM( BABL_PGUP , T(PGUP), END );
148 BABLM( BABL_DEL_RIGHT_1C , D(DEL), END );
149 BABLM( BABL_DEL_LEFT_WORD , D(LCTL), T(BSPACE), U(LCTL), END );
150 BABLM( BABL_DEL_RIGHT_WORD , D(LCTL), T(DEL), U(LCTL), END );
151 BABLM( BABL_DEL_TO_LINE_END, D(RSFT), T(HOME), U(RSFT), T(DEL), END);
152 BABLM( BABL_DEL_TO_LINE_START, D(RSFT), T(END), U(RSFT), T(DEL), END );
153#ifndef BABL_MOVEMENTONLY
154 BABLM( BABL_UNDO , D(LCTL), T(Z), U(LCTL), END );
155 BABLM( BABL_REDO , D(LCTL), T(Y), U(LCTL), END );
156 BABLM( BABL_CUT , D(LCTL), T(X), U(LCTL), END );
157 BABLM( BABL_COPY , D(LCTL), T(C), U(LCTL), END );
158 BABLM( BABL_PASTE , D(LCTL), T(V), U(LCTL), END );
159 BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );
160 BABLM( BABL_FIND, D(LCTL),T(F), U(LCTL),END );
161 /* BABLM(BABL_FIND_NEXT , T(F3),END ); KDE */
162 BABLM( BABL_FIND_NEXT, D(LCTL),T(G), U(LCTL),END ); // Gnome*/
163 /* BABLM( , D(LCTL),T(R), U(LCTL),END ); KDE */
164 BABLM( BABL_FIND_REPLACE, D(LCTL),T(H), U(LCTL),END ); // Gnome*/
165 BABLM( BABL_RUNAPP, D(LALT),T(F2), U(LALT),END );
166 BABLM( BABL_SWITCH_APP_NEXT, D(LCTL),T(TAB), U(LCTL),END );
167 BABLM( BABL_SWITCH_APP_LAST, D(LSFT),D(LCTL),T(TAB), U(LCTL), U(LSFT),END );
168 BABLM( BABL_CLOSE_APP, D(LALT),T(F4), U(LALT),END );
169 //BABLM( BABL_HELP, END );
170
171#ifndef BABL_NOBROWSER
172 BABLM( BABL_BROWSER_NEW_TAB, D(LCTL), T(T), U(LCTL),END );
173 BABLM( BABL_BROWSER_CLOSE_TAB, D(LCTL), T(W), U(LCTL),END );
174 BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LCTL), D(RSFT),T(T), U(RSFT),U(LCTL),END );
175 BABLM( BABL_BROWSER_NEXT_TAB, D(LCTL), T(TAB), U(LCTL),END );
176 BABLM( BABL_BROWSER_PREV_TAB, D(LCTL), D(RSFT), T(TAB), U(RSFT), U(LCTL),END );
177 BABLM( BABL_BROWSER_URL_BAR, D(LCTL), T(L), U(LCTL),END );
178 BABLM( BABL_BROWSER_FORWARD, D(LALT), T(RIGHT), U(LALT),END );
179 BABLM( BABL_BROWSER_BACK, D(LALT), T(LEFT), U(LALT),END );
180 BABLM( BABL_BROWSER_FIND, D(LCTL), T(F), U(LCTL),END );
181 BABLM( BABL_BROWSER_BOOKMARK, D(LCTL), T(D), U(LCTL),END );
182 BABLM( BABL_BROWSER_DEV_TOOLS, D(LCTL), T(T), U(LCTL),END ); // Chrome
183 BABLM( BABL_BROWSER_RELOAD, D(LCTL), T(F5), U(LCTL),END ); // hard reload w/o cache
184 BABLM( BABL_BROWSER_FULLSCREEN, T(F11),END ); //command shift F
185 BABLM( BABL_BROWSER_ZOOM_IN, D(LCTL), T(PLUS), U(LCTL),END );
186 BABLM( BABL_BROWSER_ZOOM_OUT, D(LCTL), T(MINS), U(LCTL),END );
187#endif
188#endif
189 return MACRO_NONE;
190
191#endif
192
193#ifdef MAC_MODE
194
195 case MAC_MODE:
196 BABLM( BABL_GO_LEFT_1C , T(LEFT), END );
197 BABLM( BABL_GO_RIGHT_1C, T(RIGHT), END );
198 BABLM( BABL_GO_LEFT_WORD , D(LALT), T(LEFT), U(LALT), END );
199 BABLM( BABL_GO_RIGHT_WORD , D(LALT), T(RIGHT), U(LALT), END );
200 BABLM( BABL_GO_START_LINE , D(LGUI), T(LEFT), U(LGUI), END );
201 BABLM( BABL_GO_END_LINE , D(LGUI), T(RIGHT), U(LGUI), END );
202 BABLM( BABL_GO_START_DOC , D(LGUI),T(UP), U(LGUI),END );
203 BABLM( BABL_GO_END_DOC , D(LGUI),T(DOWN), U(LGUI),END );
204 BABLM( BABL_GO_NEXT_LINE , T(DOWN), END );
205 BABLM( BABL_GO_PREV_LINE , T(UP), END );
206 BABLM( BABL_PGDN , D(LALT),T(DOWN), U(LALT), END );
207 BABLM( BABL_PGUP , D(LALT),T(UP), U(LALT), END );
208 BABLM( BABL_DEL_RIGHT_1C , D(DEL), END );
209 BABLM( BABL_DEL_LEFT_WORD , D(LALT), T(BSPACE), U(LALT), END );
210 BABLM( BABL_DEL_RIGHT_WORD, D(LALT), T(DEL), U(LALT), END );
211 BABLM( BABL_DEL_TO_LINE_END, D(LCTL), T(K), U(LCTL), END );// there must be another way
212 BABLM( BABL_DEL_TO_LINE_START, D(LGUI), T(BSPACE), U(LGUI), END );
213#ifndef BABL_MOVEMENTONLY
214 BABLM( BABL_UNDO , D(1), D(LGUI), T(Z), U(LGUI), END );
215 BABLM( BABL_REDO , D(LSFT),D(LGUI), T(Z), U(LSFT),U(LGUI), END );
216 BABLM( BABL_CUT , D(LGUI), T(X), U(LGUI), END );
217 BABLM( BABL_COPY , D(LGUI), T(C), U(LGUI), END );
218 BABLM( BABL_PASTE , D(LGUI), T(V), U(LGUI), END );
219 BABLM( BABL_SELECT_ALL , D(LGUI), T(A), U(LGUI), END );
220 BABLM( BABL_FIND , D(LGUI),T(F), U(LGUI),END );
221 BABLM( BABL_FIND_NEXT, D(LGUI),T(G), U(LGUI),END );
222 BABLM( BABL_FIND_REPLACE, D(LGUI),T(F), U(LGUI),END );
223 BABLM( BABL_RUNAPP , D(LGUI),T(R), U(LGUI),END );
224 BABLM( BABL_SWITCH_APP_NEXT , D(LGUI),T(TAB), U(LGUI),END );
225 BABLM( BABL_SWITCH_APP_LAST , D(LSFT),D(LGUI),T(TAB), U(LGUI), U(LSFT),END );
226 BABLM( BABL_CLOSE_APP , D(LGUI),T(Q), U(LGUI),END );
227 BABLM( BABL_HELP , D(LSFT),D(LGUI),T(SLASH), U(LGUI), U(LSFT),END );
228
229#ifndef BABL_NOBROWSER
230 BABLM( BABL_BROWSER_NEW_TAB, D(LGUI), T(T), U(LGUI),END );
231 BABLM( BABL_BROWSER_CLOSE_TAB, D(LGUI), T(W), U(LGUI),END );
232 BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
233 BABLM( BABL_BROWSER_NEXT_TAB, D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
234 BABLM( BABL_BROWSER_PREV_TAB, D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
235 BABLM( BABL_BROWSER_URL_BAR, D(LGUI), T(L), U(LGUI),END );
236 BABLM( BABL_BROWSER_FORWARD, D(LGUI), T(RIGHT), U(LGUI),END );
237 BABLM( BABL_BROWSER_BACK, D(LGUI), T(LEFT), U(LGUI),END );
238 BABLM( BABL_BROWSER_FIND, D(LGUI), T(F), U(LGUI),END );
239 BABLM( BABL_BROWSER_BOOKMARK, D(LGUI), T(D), U(LGUI),END );
240 //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
241 BABLM( BABL_BROWSER_DEV_TOOLS, D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END ); // Chrome
242 // Chrome
243 BABLM( BABL_BROWSER_RELOAD, D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
244 BABLM( BABL_BROWSER_FULLSCREEN, D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
245 BABLM( BABL_BROWSER_ZOOM_IN, D(LGUI), D(RSFT), T(EQL), U(RSFT), U(LGUI),END ); // ctr+ +
246 BABLM( BABL_BROWSER_ZOOM_OUT, D(LGUI), T(MINS), U(LGUI),END );
247#endif
248#endif
249
250 return MACRO_NONE;
251#endif
252
253#ifdef EMACS_MODE
254
255 case EMACS_MODE:
256 switch(shortcut) {
257//probably should allow meta to not be ALT
258
259 BABLM( BABL_GO_LEFT_1C, T(LEFT), END );
260 BABLM( BABL_GO_RIGHT_1C, T(RIGHT), END );
261 BABLM( BABL_GO_LEFT_WORD, D(LALT), T(B), U(LALT), END );
262 BABLM( BABL_GO_RIGHT_WORD , D(LALT), T(F), U(LALT), END );
263 BABLM( BABL_GO_START_LINE , D(LCTL), T(A), U(LCTL), END );
264 BABLM( BABL_GO_END_LINE , D(LCTL), T(E), U(LCTL), END );
265 BABLM( BABL_GO_START_DOC , D(LALT), D(LSFT), T(COMM),U(LSFT), U(LALT) ,END );
266 BABLM( BABL_GO_END_DOC , D(LALT), D(LSFT), T(DOT), U(LSFT), U(LALT) ,END );
267 BABLM( BABL_GO_NEXT_LINE , D(LCTL), T(N), U(LCTL), END );
268 BABLM( BABL_GO_PREV_LINE , D(LCTL), T(P), U(LCTL), END );
269 BABLM( BABL_PGDN , D(LCTL), T(V), U(LCTL), END );
270 BABLM( BABL_PGUP , D(LALT), T(V), U(LALT), END );
271 BABLM( BABL_DEL_RIGHT_1C, D(LCTL), T(D), U(LCTL),END );
272 BABLM( BABL_DEL_LEFT_WORD , D(LCTL), T(BSPACE), U(LCTL), END );
273 BABLM( BABL_DEL_RIGHT_WORD , D(LALT), T(D), U(LALT), END );
274 BABLM( BABL_DEL_TO_LINE_END, D(LCTL), T(K), U(LCTL), END );
275 BABLM( BABL_DEL_TO_LINE_START, T(ESC), T(0), D(LCTL), T(K), U(LCTL), END );
276#ifndef BABL_MOVEMENTONLY
277 BABLM( BABL_UNDO , D(LCTL), T(X), U(LCTL),T(C), END );
278 BABLM( BABL_REDO , D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
279 BABLM( BABL_CUT , D(LCTL), T(W), U(LCTL), END );
280 BABLM( BABL_COPY , D(LALT), T(W), U(LALT), END ); //really?
281 BABLM( BABL_PASTE , D(LCTL), T(Y), U(LCTL), END );
282 BABLM( BABL_SELECT_ALL ,D(LCTL), T(X), U(LCTL),T(H), END );
283 BABLM( BABL_FIND , D(LCTL), T(S), U(LCTL),END );
284 BABLM( BABL_FIND_NEXT , D(LCTL), T(S), U(LCTL),END );
285 BABLM( BABL_FIND_REPLACE , D(LALT),D(LSFT), T(5),U(LSFT), U(LALT), END );
286 BABLM( BABL_RUNAPP , D(LALT), T(X), U(LALT),T(S),T(H),T(E),T(L),T(L),END );// arguably
287 BABLM( BABL_SWITCH_APP_NEXT , D(LCTL), T(X), U(LCTL),T(RIGHT), END ); // arguably
288 BABLM( BABL_SWITCH_APP_LAST , D(LCTL), T(X), U(LCTL),T(LEFT), END ); // arguably
289 BABLM( BABL_CLOSE_APP , D(LCTL), T(X), U(LCTL),T(C),END );
290 BABLM( BABL_HELP , D(LCTL),T(H), U(LCTL),T(A),END); // start search in help
291#ifndef BABL_NOBROWSER
292/* you get to figure w3 out
293 BABLM( BABL_BROWSER_NEW_TAB, D(LGUI), T(T), U(LGUI),END );
294 BABLM( BABL_BROWSER_CLOSE_TAB, D(LGUI), T(W), U(LGUI),END );
295 BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
296 BABLM( BABL_BROWSER_NEXT_TAB, D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
297 BABLM( BABL_BROWSER_PREV_TAB, D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
298 BABLM( BABL_BROWSER_URL_BAR, D(LGUI), T(L), U(LGUI),END );
299 BABLM( BABL_BROWSER_FORWARD, D(LGUI), T(RIGHT), U(LGUI),END );
300 BABLM( BABL_BROWSER_BACK, D(LGUI), T(LEFT), U(LGUI),END );
301 BABLM( BABL_BROWSER_FIND, D(LGUI), T(F), U(LGUI),END );
302 BABLM( BABL_BROWSER_BOOKMARK, D(LGUI), T(D), U(LGUI),END );
303 //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
304 BABLM( BABL_BROWSER_DEV_TOOLS, D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END ); // Chrome
305 // Chrome
306 BABLM( BABL_BROWSER_RELOAD, D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
307 BABLM( BABL_BROWSER_FULLSCREEN, D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
308 BABLM( BABL_BROWSER_ZOOM_IN, D(LGUI), D(RSFT), T(EQL), U(RSFT), U(LGUI),END ); // ctr+ +
309 BABLM( BABL_BROWSER_ZOOM_OUT, D(LGUI), T(MINS), U(LGUI),END );
310*/
311#endif
312#endif
313 break;
314
315 return MACRO_NONE;
316 }
317
318#endif
319
320
321#ifdef VI_MODE
322 case VI_MODE:
323// you have to track the modes yourself. Otherwise motion is awful (bell, bell, bell)
324
325
326 BABLM( BABL_GO_LEFT_1C , T(H), END );
327 BABLM( BABL_GO_RIGHT_1C , T(L), END );
328 BABLM( BABL_GO_LEFT_WORD , T(B),END );
329 BABLM( BABL_GO_RIGHT_WORD , T(W), END );
330 BABLM( BABL_GO_START_LINE , D(LSFT), T(6),U(LSFT), END ); //^
331 BABLM( BABL_GO_END_LINE , D(LSFT), T(4),U(LSFT) , END ); //$
332 BABLM( BABL_GO_START_DOC , T(G),T(G) ,END );
333 BABLM( BABL_GO_END_DOC , D(LSFT), T(G),U(LSFT),END );
334 BABLM( BABL_GO_NEXT_LINE , T(J), END );
335 BABLM( BABL_GO_PREV_LINE, T(K), END );
336 BABLM( BABL_PGDN ,D(LCTL), T(F), U(LCTL), END );
337 BABLM( BABL_PGUP , D(LCTL), T(B), U(LCTL), END );
338 BABLM( BABL_DEL_RIGHT_1C , T(X),END );
339 BABLM( BABL_DEL_LEFT_WORD , T(D),T(G),T(E),END );
340 BABLM( BABL_DEL_RIGHT_WORD , T(D),T(W),END );
341 BABLM( BABL_DEL_TO_LINE_END, T(D),D(LSFT), T(4),U(LSFT) ,END ); // d$
342 BABLM( BABL_DEL_TO_LINE_START, T(D),D(LSFT), T(6),U(LSFT) ,END );
343#ifndef BABL_MOVEMENTONLY
344 BABLM( BABL_UNDO , T(U), END );
345 BABLM( BABL_REDO , D(LCTL), T(R), U(LCTL), END );
346 BABLM( BABL_CUT , T(X), END );
347 BABLM( BABL_COPY , T(Y),END );
348 BABLM( BABL_PASTE , T(P), END );
349 BABLM( BABL_SELECT_ALL , D(LSFT), T(SCLN),U(LSFT),D(LSFT), T(5),U(LSFT),T(Y), END ); // wrong but helpful?
350 BABLM( BABL_FIND , T(SLASH),END );
351 BABLM( BABL_FIND_NEXT , T(N),END );
352 BABLM( BABL_FIND_REPLACE , D(LALT),D(LSFT), T(5),U(LSFT), U(LALT), END );
353 BABLM( BABL_RUNAPP,END );
354 BABLM( BABL_SWITCH_APP_NEXT ,END );
355 BABLM( BABL_SWITCH_APP_LAST ,END );
356 BABLM(BABL_CLOSE_APP, D(LSFT), T(SCLN),U(LSFT), T(Q), D(RSFT), T(1),U(RSFT), END );
357 BABLM(BABL_HELP, D(LSFT), T(SCLN),U(LSFT),T(H),END); // start search in help
358#ifndef BABL_NOBROWSER
359/* you get to figure this out
360 BABLM( BABL_BROWSER_NEW_TAB, D(LGUI), T(T), U(LGUI),END );
361 BABLM( BABL_BROWSER_CLOSE_TAB, D(LGUI), T(W), U(LGUI),END );
362 BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
363 BABLM( BABL_BROWSER_NEXT_TAB, D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
364 BABLM( BABL_BROWSER_PREV_TAB, D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
365 BABLM( BABL_BROWSER_URL_BAR, D(LGUI), T(L), U(LGUI),END );
366 BABLM( BABL_BROWSER_FORWARD, D(LGUI), T(RIGHT), U(LGUI),END );
367 BABLM( BABL_BROWSER_BACK, D(LGUI), T(LEFT), U(LGUI),END );
368 BABLM( BABL_BROWSER_FIND, D(LGUI), T(F), U(LGUI),END );
369 BABLM( BABL_BROWSER_BOOKMARK, D(LGUI), T(D), U(LGUI),END );
370 //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
371 BABLM( BABL_BROWSER_DEV_TOOLS, D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END ); // Chrome
372 // Chrome
373 BABLM( BABL_BROWSER_RELOAD, D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
374 BABLM( BABL_BROWSER_FULLSCREEN, D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
375 BABLM( BABL_BROWSER_ZOOM_IN, D(LGUI), T(PLUS), U(LGUI),END );
376 BABLM( BABL_BROWSER_ZOOM_OUT, D(LGUI), T(MINS), U(LGUI),END );
377*/
378#endif
379#endif
380 return MACRO_NONE;
381#endif
382
383
384
385
386#ifdef READMUX_MODE
387// Readline command line editing + tmux windowing
388// I havent decided how much to do readline and how much tmux
389
390
391 case READMUX_MODE:
392
393 BABLM( BABL_GO_LEFT_1C , T(LEFT), END );
394 BABLM( BABL_GO_RIGHT_1C , T(RIGHT), END );
395 BABLM( BABL_GO_LEFT_WORD , D(LALT), T(B), U(LALT), END );
396 BABLM( BABL_GO_RIGHT_WORD , D(LALT), T(F), U(LALT), END );
397 BABLM( BABL_GO_START_LINE , D(LCTL), T(A), U(LCTL), END );
398 BABLM( BABL_GO_END_LINE , D(LCTL), T(E), U(LCTL), END );
399 //BABLM( BABL_GO_START_DOC ,END );// tmux?
400 //BABLM( BABL_GO_END_DOC ,END ); // tmux?
401 BABLM( BABL_GO_NEXT_LINE , D(LCTL), T(N), U(LCTL), END );
402 BABLM( BABL_GO_PREV_LINE , D(LCTL), T(P), U(LCTL), END );
403 BABLM( BABL_PGDN , T(PGDN), END );
404 BABLM( BABL_PGUP , T(PGUP), END );
405 BABLM( BABL_DEL_RIGHT_1C , D(LCTL), T(D), U(LCTL),END );
406 BABLM( BABL_DEL_LEFT_WORD , D(LCTL), T(W), U(LCTL), END );
407 BABLM( BABL_DEL_RIGHT_WORD , D(LALT), T(D), U(LALT), END );
408 BABLM( BABL_DEL_TO_LINE_END, D(LCTL), T(K), U(LCTL), END );
409 BABLM( BABL_DEL_TO_LINE_START, D(LCTL), T(U), U(LCTL), END );
410#ifndef BABL_MOVEMENTONLY
411 BABLM( BABL_UNDO , D(LALT), T(R), U(LALT) , END );
412 BABLM( BABL_REDO , D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
413 BABLM( BABL_CUT , D(LCTL), T(K), U(LCTL), END ); // wrong half the time
414 //BABLM( BABL_COPY ,END );
415 BABLM( BABL_PASTE , D(LCTL), T(Y), U(LCTL), END );
416 BABLM( BABL_SELECT_ALL , D(LCTL), T(A), T(K), T(Y), U(LCTL) , END );
417 BABLM( BABL_FIND , D(LCTL), T(R), U(LCTL), END ); // search history
418 BABLM(BABL_FIND_NEXT, D(LCTL), T(S), U(LCTL), END );
419 //BABLM( BABL_FIND_REPLACE ,END );
420 BABLM( BABL_RUNAPP , D(LCTL), T(B), U(LCTL), T(C),END ); //tmux
421 BABLM( BABL_SWITCH_APP_NEXT , D(LCTL), T(B), U(LCTL), T(N),END ); //tmux
422 BABLM( BABL_SWITCH_APP_LAST , D(LCTL), T(B), U(LCTL), T(P),END ); //tmux
423 BABLM( BABL_CLOSE_APP , D(LCTL), T(B), U(LCTL), T(D),END); // usually what I want
424 // BABLM( BABL_HELP ,END );
425#ifndef BABL_NOBROWSER
426/* Add lynx shortcuts?
427 BABLM( BABL_BROWSER_NEW_TAB, D(LGUI), T(T), U(LGUI),END );
428 BABLM( BABL_BROWSER_CLOSE_TAB, D(LGUI), T(W), U(LGUI),END );
429 BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
430 BABLM( BABL_BROWSER_NEXT_TAB, D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
431 BABLM( BABL_BROWSER_PREV_TAB, D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
432 BABLM( BABL_BROWSER_URL_BAR, D(LGUI), T(L), U(LGUI),END );
433 BABLM( BABL_BROWSER_FORWARD, D(LGUI), T(RIGHT), U(LGUI),END );
434 BABLM( BABL_BROWSER_BACK, D(LGUI), T(LEFT), U(LGUI),END );
435 BABLM( BABL_BROWSER_FIND, D(LGUI), T(F), U(LGUI),END );
436 BABLM( BABL_BROWSER_BOOKMARK, D(LGUI), T(D), U(LGUI),END );
437 //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
438 BABLM( BABL_BROWSER_DEV_TOOLS, D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END ); // Chrome
439 // Chrome
440 BABLM( BABL_BROWSER_RELOAD, D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
441 BABLM( BABL_BROWSER_FULLSCREEN, D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
442 BABLM( BABL_BROWSER_ZOOM_IN, D(LGUI), T(PLUS), U(LGUI),END );
443 BABLM( BABL_BROWSER_ZOOM_OUT, D(LGUI), T(MINS), U(LGUI),END );
444*/
445#endif
446#endif
447
448 return MACRO_NONE;
449
450#endif
451
452 default:
453 return MACRO_NONE;
454 }
455
456}
457
458
459#endif \ No newline at end of file
diff --git a/keyboards/handwired/MS-sculpt-mobile/babblePaste.h b/keyboards/handwired/MS-sculpt-mobile/babblePaste.h
new file mode 100644
index 000000000..3067c854d
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/babblePaste.h
@@ -0,0 +1,238 @@
1/* A library to output the right key shortcut in any common app.
2Given a global variable babble_mode to show the environment and a
3key that calls the paste macro, do the right type of paste.
4
5Setting the bable_mode is done by another macro, or TBD interaction with the host.
6
7Huge thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
8and jeebak & algernon's keymap
9*/
10#ifndef _babblePaste_h_included__
11#define _babblePaste_h_included__
12#include "action_layer.h"
13#include "quantum_keycodes.h"
14#include "config.h"
15
16#ifdef USE_BABLPASTE
17
18/* ***************************
19
20// Uncomment any modes you want. Whatever mode = 0 will be the default on boot
21// Expect to get errors if you comment a feature out and leave it in your keymap.
22
23#define USE_BABLPASTE
24
25//#define MS_MODE 0 // Windows.
26//#define MAC_MODE 1
27//#define LINUX_MODE 2 //aka gnome+KDE
28//#define EMACS_MODE 3
29//#define VI_MODE 4
30//#define WORDSTAR_MODE 5
31//#define READMUX 6 // Readline and tmux
32
33// This removes everything but cursor movement
34//#define BABL_MOVEMENTONLY
35// and this just removes browser shortcuts
36//#define BABL_NOBROWSER
37****************************/
38
39
40// Uncomment if you need more free flash space
41// It removes everything but cursor movement
42//#define BABL_MOVEMENTONLY
43
44
45// Define starting number for BABL macros in the macro range.
46// Probably can start the default even lower
47#define BABL_START_NUM 50
48
49/* Macros handled by babblepaste. Most should be available for all platforms.
50Whatever isn't defined will NOP */
51enum {
52// Movement macros
53 // left & right
54 BABL_GO_LEFT_1C= BABL_START_NUM,
55 BABL_GO_RIGHT_1C,
56 BABL_GO_LEFT_WORD,
57 BABL_GO_RIGHT_WORD,
58 BABL_GO_START_LINE,
59 BABL_GO_END_LINE,
60 // now up & down
61 BABL_GO_START_DOC,
62 BABL_GO_END_DOC,
63 BABL_GO_NEXT_LINE,
64 BABL_GO_PREV_LINE,
65 BABL_PGDN,
66 BABL_PGUP,
67 // And the delete options
68 //BABL_DEL_LEFT_1C == backspace, so why bother.
69 BABL_DEL_RIGHT_1C, // usually = Del
70 BABL_DEL_LEFT_WORD,
71 BABL_DEL_RIGHT_WORD,
72 BABL_DEL_TO_LINE_END, // delete from cursor to end of line
73 BABL_DEL_TO_LINE_START, // delete from cursor to begining line
74#ifndef BABL_MOVEMENTONLY
75 // Cut & Paste
76 BABL_UNDO,
77 BABL_REDO,
78 BABL_CUT,
79 BABL_COPY,
80 BABL_PASTE,
81 BABL_SELECT_ALL,
82 /* not yet implemented
83 BABL_SWAP_LAST2C // swap last characters before the cursor
84 BABL_SWAP_LAST2W // Swap the last two words before the cursor
85 */
86 // find & replace
87 BABL_FIND,
88 BABL_FIND_NEXT,
89 BABL_FIND_REPLACE,
90 // GUI or app
91 BABL_RUNAPP,
92 BABL_SWITCH_APP_NEXT,
93 BABL_SWITCH_APP_LAST, // previous
94 BABL_CLOSE_APP,
95 BABL_HELP,
96
97#ifndef BABL_NOBROWSER
98 BABL_BROWSER_NEW_TAB,
99 BABL_BROWSER_CLOSE_TAB,
100 BABL_BROWSER_REOPEN_LAST_TAB,
101 BABL_BROWSER_NEXT_TAB,
102 BABL_BROWSER_PREV_TAB,
103 BABL_BROWSER_URL_BAR,
104 BABL_BROWSER_FORWARD,
105 BABL_BROWSER_BACK,
106 BABL_BROWSER_FIND,
107 BABL_BROWSER_BOOKMARK,
108 BABL_BROWSER_DEV_TOOLS, // hard one to remember
109 BABL_BROWSER_RELOAD,
110 BABL_BROWSER_FULLSCREEN,
111 BABL_BROWSER_ZOOM_IN,
112 BABL_BROWSER_ZOOM_OUT,
113
114#endif
115
116#endif
117// Macros for mode switching
118#ifdef MS_MODE
119 BABL_WINDOWS,
120#endif
121#ifdef MAC_MODE
122 BABL_MAC,
123#endif
124#ifdef LINUX_MODE
125 BABL_LINUX,
126#endif
127#ifdef EMACS_MODE
128 BABL_EMACS,
129#endif
130#ifdef VI_MODE
131 BABL_VI,
132#endif
133#ifdef READMUX_MODE
134 BABL_READLINE,
135#endif
136
137
138};
139
140// BUG, used to jump to babble functiion. Surely there is a way to calculate size of enum?
141#define BABL_NUM_MACROS 48+4 // 48 + # of defined modes.
142
143/* And all the shorthand keymap ready versions */
144// First the mode switching macros
145#ifdef MS_MODE
146#define B_WIN M(BABL_WINDOWS)
147#endif
148#ifdef MAC_MODE
149#define B_MAC M(BABL_MAC)
150#endif
151#ifdef LINUX_MODE
152#define B_LNX M(BABL_LINUX)
153#endif
154#ifdef EMACS_MODE
155#define B_EMAX M(BABL_EMACS)
156#endif
157#ifdef VI_MODE
158#define B_VI M(BABL_VI)
159#endif
160#ifdef READMUX_MODE
161#define B_READ M(BABL_READLINE)
162#endif
163
164// and all the movement & action.
165
166#define B_L1C M(BABL_GO_LEFT_1C)
167#define B_R1C M(BABL_GO_RIGHT_1C)
168#define B_L1W M(BABL_GO_LEFT_WORD)
169#define B_R1W M(BABL_GO_RIGHT_WORD)
170#define B_GSOL M(BABL_GO_START_LINE)
171#define B_GEOL M(BABL_GO_END_LINE)
172#define B_GTOP M(BABL_GO_START_DOC)
173#define B_GEND M(BABL_GO_END_DOC)
174#define B_DOWN M(BABL_GO_NEXT_LINE)
175#define B_UP M(BABL_GO_PREV_LINE)
176#define B_PGDN M(BABL_PGDN)
177#define B_PGUP M(BABL_PGUP)
178//#define B_BKSP M(BABL_DEL_LEFT_1C) == backspace so why bother.
179#define B_DEL M(BABL_DEL_RIGHT_1C) // usually = Del
180#define B_DLW M(BABL_DEL_LEFT_WORD)
181#define B_DRW M(BABL_DEL_RIGHT_WORD)
182#define B_DEOL M(BABL_DEL_TO_LINE_END) // delete from cursor to end of line
183#define B_DSOL M(BABL_DEL_TO_LINE_START) // delete from cursor to begining line
184#define B_UNDO M(BABL_UNDO)
185#define B_REDO M(BABL_REDO)
186#define B_CUT M(BABL_CUT)
187#define B_COPY M(BABL_COPY)
188#define B_PAST M(BABL_PASTE)
189#define B_SELA M(BABL_SELECT_ALL)
190#define B_FIND M(BABL_FIND)
191#define B_FINDN M(BABL_FIND_NEXT)
192#define B_FINDR M(BABL_FIND_REPLACE)
193#define B_RAPP M(BABL_RUNAPP)
194#define B_NAPP M(BABL_SWITCH_APP_NEXT)
195#define B_PAPP M(BABL_SWITCH_APP_LAST) // previous
196#define B_CAPP M(BABL_CLOSE_APP)
197#define B_HELP M(BABL_HELP)
198#define B_NTAB M(BABL_BROWSER_NEW_TAB)
199#define B_CTAB M(BABL_BROWSER_CLOSE_TAB)
200#define B_ROTB M(BABL_BROWSER_REOPEN_LAST_TAB)
201#define B_NXTB M(BABL_BROWSER_NEXT_TAB)
202#define B_PTAB M(BABL_BROWSER_PREV_TAB)
203#define B_NURL M(BABL_BROWSER_URL_BAR)
204#define B_BFWD M(BABL_BROWSER_FORWARD)
205#define B_BBAK M(BABL_BROWSER_BACK)
206#define B_BFND M(BABL_BROWSER_FIND)
207#define B_BOOK M(BABL_BROWSER_BOOKMARK)
208#define B_BDEV M(BABL_BROWSER_DEV_TOOLS) // hard one to remember
209#define B_BRLD M(BABL_BROWSER_RELOAD)
210#define B_BFUlL M(BABL_BROWSER_FULLSCREEN)
211#define B_ZMIN M(BABL_BROWSER_ZOOM_IN)
212#define B_ZMOT M(BABL_BROWSER_ZOOM_OUT)
213
214
215
216
217
218
219
220/* from action_macro.h
221typedef uint8_t macro_t;
222
223#define MACRO_NONE (macro_t*)0
224#define MACRO(...) ({ static const macro_t __m[] PROGMEM = { __VA_ARGS__ }; &__m[0]; })
225#define MACRO_GET(p) pgm_read_byte(p)
226
227#define BABL_MSTART (entry, os, macro...) ( const macro_t bablDict[entry][os] PROGMEM = { macro... }; )
228
229*/
230
231const macro_t *babblePaste(keyrecord_t *record, uint8_t shortcut);
232
233macro_t* switch_babble_mode( uint8_t id);
234
235
236#endif
237#endif
238
diff --git a/keyboards/handwired/MS-sculpt-mobile/babblePaste.txt b/keyboards/handwired/MS-sculpt-mobile/babblePaste.txt
new file mode 100644
index 000000000..cf75e153e
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/babblePaste.txt
@@ -0,0 +1,123 @@
1 BabblePaste is a library of common macros used to make sure that
2you can have one "paste" button on one layer, and it will do the
3right thing on any OS or app. Windows=Ctrl-V. Mac = Command-V and so on.
4
5The babblepaste library looks for the current status in a babble_mode global variable.
6To switch modes, run the switch_babble_mode() function, or a pre defined macro.
7Currently supported are Windows, OS X, Gnome/kde, Emacs, VI and readline,
8across 42+ common macro actions.
9
10
11###To use the library
121) Paste the following into your config.h.
13
14//////Begin//////
15#define USE_BABLPASTE 1
16
17#ifdef USE_BABLPASTE
18/* define BabblePaste maps. Whatever = 0 will be the default. */
19// MAC_MODE 0
20// MS_MODE 1
21// LINUX_MODE 2
22// EMACS_MODE 3
23// VI_MODE 3
24// Readline and tmux
25// READMUX_MODE 2
26// WORDSTAR_MODE 5
27#endif
28
29// Uncomment these to remove options an free up flash space
30
31// This removes everything but cursor movement
32// BABL_MOVEMENTONLY
33// and this just removes browser shortcuts
34// BABL_NOBROWSER
35///////End///////
36
372) Add the following to your keymap in the action_get_macro
38
39//////Begin//////
40#ifdef USE_BABLPASTE
41
42 if( id >= BABL_START_NUM && id < (BABL_START_NUM + BABL_NUM_MACROS ) ) {
43 if (record->event.pressed) { // is there a case where this isn't desired?
44
45 babblePaste ( record, id );
46 return MACRO_NONE;
47 }
48 }
49#endif
50///////End///////
51
523) add Babbelpaste actions to your keymap. See the full list in babblePaste.h, or the
53list below
54B_L1C // go left 1 char
55B_R1C // go Right 1 char
56 B_L1W //GO_LEFT_1 WORD
57 B_R1W //BABL_GO_RIGHT_1 WORD
58 B_GSOL // BABL_GOTO_START of _LINE
59 B_GEOL // BABL_GOTO_END_LINE
60 B_GTOP //BABL_GOTO_START_DOC
61 B_GEND //BABL_GO_END_DOC
62 B_DOWN //BABL_GO_NEXT_LINE
63 B_UP // BABL_GO_PREV_LINE
64 B_PGDN //PGDN
65 B_PGUP //PGUP
66// B_BKSP //backspace so why bother.
67 B_DEL // DEL_RIGHT_1 Char // usually = Del
68 B_DLW // DEL_LEFT_ 1 WORD)
69 B_DRW //DEL_RIGHT_1 WORD
70 B_DEOL // delete from cursor to end of line
71 B_DSOL // delete from cursor to begining line
72 B_UNDO //UNDO
73 B_REDO // REDO
74 B_CUT // CUT)
75 B_COPY // COPY)
76 B_PAST // PASTE)
77 B_SELA // SELECT_ALL
78 B_FIND // FIND)
79 B_FINDN //FIND_NEXT)
80 B_FINDR // FIND_REPLACE)
81 B_RAPP // open application launcher
82 B_NAPP // switch to next app
83 B_PAPP // switch to previous app
84 B_CAPP // CLOSE_APP)
85 B_HELP // HELP)
86 B_NTAB // BROWSER_NEW_TAB)
87 B_CTAB //BROWSER_CLOSE_TAB)
88 B_ROTB //BROWSER_REOPEN_LAST_TAB)
89 B_NXTB //BROWSER_NEXT_TAB)
90 B_PTAB //BROWSER_PREV_TAB)
91 B_NURL //BROWSER_jump to URL_BAR)
92 B_BFWD // BROWSER_FORWARD (in history)
93 B_BBAK //BROWSER_BACK (in history)
94 B_BFND // BROWSER_FIND)
95 B_BOOK //BROWSER_New BOOKMARK)
96 B_BDEV //BROWSER_ Open DEV_TOOLS) // hard one to remember
97 B_BRLD // BROWSER_RELOAD Page
98 B_BFUlL // BROWSER_FULLSCREEN)
99 B_ZMIN // BROWSER_ZOOM_IN)
100 B_ZMOT //BROWSER_ZOOM_OUT)
101
102
103#### Development notes
104-Why a new function? Because it would make the keymap too ugly to put it there.
105-Why not return the macro to action_get_macro? Because I kept running into scope problems
106and pointers to the wrong type.
107-Why not an array of arrays as a lookup instead of a function? That would allow you
108to store the lookup table in PROGMEM. True, but that takes more pre-processor skill
109than I had.
110
111-Have you tested this on every platform? No. Submit a patch.
112
113
114### Next steps for someone.
115Make it easier to pair macros with modifiers. So key foo will jump to start of line, and
116Shift(foo) will jump to the first tab in a browser.
117
118## Thanks
119
120Thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
121and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jeebak/keymap.c
122And of course QMK...
123
diff --git a/keyboards/handwired/MS-sculpt-mobile/config.h b/keyboards/handwired/MS-sculpt-mobile/config.h
new file mode 100644
index 000000000..f89514278
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/config.h
@@ -0,0 +1,100 @@
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#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER Microsoftplus
28#define DESCRIPTION 6000
29
30/* key matrix size */
31#define MATRIX_ROWS 8
32#define MATRIX_COLS 18
33
34#ifdef ASTAR
35#define PRODUCT sculpt mobile astar
36 /*0 1 2 3 4 5 6 7 8 */
37#define MATRIX_ROW_PINS {D7, C6, D4, D0, D1, D3, D2, E2}
38/* A B C D E F G H I J K L M N O P Q R */
39#define MATRIX_COL_PINS {B4, B5, E6, B7, B6, D6, C7, F7, F6, F4,F5, F1,F0, D5, B0, B1, B2, B3}
40
41#else
42#define PRODUCT sculpt mobile teensypp
43/* 0 1 2 3 4 5 6 7 */
44#define MATRIX_ROW_PINS { F7,F6,F4,F5,F3,F2,F1,F0}
45/* A B C D E F G H I J K L M N O P Q R */
46#define MATRIX_COL_PINS { B7, D0, D1, D2, D3, D4, D5, D6, D7, E0,E1,C1, C0, C3, C2, C5, C4,C7}
47#define UNUSED_PINS { B6,B5,B4,B3,B2,B1,B0 }
48
49
50#endif
51
52/* COL2ROW or ROW2COL */
53#define DIODE_DIRECTION ROW2COL
54
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
56#define DEBOUNCING_DELAY 5
57
58/* define if matrix has ghost (lacks anti-ghosting diodes) */
59//#define MATRIX_HAS_GHOST
60
61
62/*
63 * Magic Key Options
64 *
65 * Magic keys are hotkey commands that allow control over firmware functions of
66 * the keyboard. They are best used in combination with the HID Listen program,
67 * found here: https://www.pjrc.com/teensy/hid_listen.html
68 *
69 * The options below allow the magic key functionality to be changed. This is
70 * useful if your keyboard/keypad is missing keys and you want magic key support.
71 *
72 */
73
74/* key combination for magic key command */
75#define IS_COMMAND() ( \
76 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
77)
78
79
80/*
81 * Feature disable options
82 * These options are also useful to firmware size reduction.
83 */
84
85/* disable debug print */
86//#define NO_DEBUG
87
88/* disable print */
89//#define NO_PRINT
90
91/* disable action features */
92//#define NO_ACTION_LAYER
93//#define NO_ACTION_TAPPING
94//#define NO_ACTION_ONESHOT
95//#define NO_ACTION_MACRO
96//#define NO_ACTION_FUNCTION
97
98#define PREVENT_STUCK_MODIFIERS
99
100#endif
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/default/Makefile b/keyboards/handwired/MS-sculpt-mobile/keymaps/default/Makefile
new file mode 100644
index 000000000..8b829218b
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/default/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../../Makefile
21endif
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/default/config.h b/keyboards/handwired/MS-sculpt-mobile/keymaps/default/config.h
new file mode 100644
index 000000000..8893d122e
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/default/config.h
@@ -0,0 +1,8 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6// place overrides here
7
8#endif
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/default/keymap.c b/keyboards/handwired/MS-sculpt-mobile/keymaps/default/keymap.c
new file mode 100644
index 000000000..ab09dcdd1
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/default/keymap.c
@@ -0,0 +1,64 @@
1#include "MS-sculpt-mobile.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4/*
5*
6* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|Mute|
7* -------------------------------------------------------------------------------'
8* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del |
9* --------------------------------------------------------------------------
10* | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | |
11* -------------------------------------------------------------------------------'
12* | caps | a | s | d | f | g | h | j | k | l | ; | ' | enter |PgUp|
13* --------------------------------------------------------------------------------
14* |Lsft | z | x | c | v | b | n | m | , | . | / | Rsft| Up| PgDn|
15* ---------------------------------------------------------------------------------
16* |Lctl |Lgui |Lalt | Space |Ralt | FN | Rctl |Left|Down|Rght|
17* ---------------------------------------------------------------------------------
18*/
19
20[0] = KEYMAP( \
21 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLD, KC_VOLU, KC_MUTE,\
22 KC_GRAVE, KC_1, KC_2, KC_3 ,KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_DEL,\
23 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,\
24 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,\
25 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_UP, KC_PGDN,\
26 KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, RSFT(KC_1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
27)
28
29};
30const uint16_t PROGMEM fn_actions[] = {
31
32};
33
34const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
35{
36 // MACRODOWN only works in this function
37 switch(id) {
38 case 0:
39 if (record->event.pressed) {
40 register_code(KC_RSFT);
41 } else {
42 unregister_code(KC_RSFT);
43 }
44 break;
45 }
46 return MACRO_NONE;
47};
48
49
50void matrix_init_user(void) {
51
52}
53
54void matrix_scan_user(void) {
55
56}
57
58bool process_record_user(uint16_t keycode, keyrecord_t *record) {
59 return true;
60}
61
62void led_set_user(uint8_t usb_led) {
63
64}
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/default/readme.md b/keyboards/handwired/MS-sculpt-mobile/keymaps/default/readme.md
new file mode 100644
index 000000000..e67ddc6fe
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for microsoft-sculpt-mobile
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/Makefile b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/Makefile
new file mode 100644
index 000000000..1209ad781
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../../Makefile
21endif
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/config.h b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/config.h
new file mode 100644
index 000000000..8cf4202cd
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/config.h
@@ -0,0 +1,32 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6#define USE_BABLPASTE
7
8// Expect to get errors if you comment a feature out and leave it in your keymap.
9
10#ifdef USE_BABLPASTE
11//define BabblePaste maps
12// Windows.
13#define MAC_MODE 0
14#define MS_MODE 1
15//aka gnome+KDE
16//#define LINUX_MODE 2
17//#define EMACS_MODE 3
18#define VI_MODE 3
19// Readline and tmux
20#define READMUX_MODE 2
21//#define WORDSTAR_MODE 5
22#endif
23
24// Uncomment if you need more free flash space
25
26// This removes everything but cursor movement
27//#define BABL_MOVEMENTONLY
28// and this just removes browser shortcuts
29//#define BABL_NOBROWSER
30
31// place overrides here
32#endif
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/keymap.c b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/keymap.c
new file mode 100644
index 000000000..395a9fb47
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/keymap.c
@@ -0,0 +1,272 @@
1#include "MS-sculpt-mobile.h"
2#include "action_layer.h"
3#include "action_util.h"
4#include "babblePaste.h"
5
6#ifdef AUDIO_ENABLE
7 #include "audio.h"
8#endif
9
10#define _QWR 0
11#define _CDH 2
12#define _SYM 3
13#define _MOV 4
14#define _TRAN 5
15
16
17enum layer_keycodes {
18QWR,
19CDH,
20SYM,
21MOV,
22NUM,
23TRAN
24};
25
26
27// Shorter spacing
28#define XXXX KC_NO
29#define ____ KC_TRNS
30
31// Custom macros
32
33/* Fn Keys */
34#define TT_SYM MO(_SYM)
35#define TT_MOV KC_FN2
36#define TT_NUM MO(_NUM)
37#define SSFT ACTION_MODS_ONESHOT(MOD_LSFT)
38
39enum macro_keycodes {
40DHPASTE=1,
41VIBRK,
42};
43
44
45const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
46/* QWERTY
47*
48* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|_CDH|
49* -------------------------------------------------------------------------------'
50* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del|
51* ---------------------------------------------------------------------------
52* | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | |
53* -------------------------------------------------------------------------------'
54* |Bak/Mov| a | s | d | f | g | h | j | k | l | ; | ' | enter |PgUp|
55* --------------------------------------------------------------------------------
56* |Lsft | z | x | c | v | b | n | m | , | . | / | Rsft| Up| PgDn|
57* ---------------------------------------------------------------------------------
58* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
59* ---------------------------------------------------------------------------------
60*/
61
62[_QWR] = KEYMAP( \
63 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLD, KC_VOLU, CDH,\
64 KC_ESC, KC_1, KC_2, KC_3 ,KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_DEL,\
65 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,\
66 TT_MOV, 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_PGUP,\
67 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_UP, KC_PGDN,\
68 KC_LCTL, KC_LGUI, KC_LALT, KC_FN1, KC_RGUI,TT_SYM,KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
69),
70
71[_CDH] = KEYMAP (\
72 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, QWR, \
73 KC_ESC, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
74 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, ____, ____, ____,\
75 TT_MOV, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_2,\
76 KC_LSFT, KC_Z, KC_X, KC_C, M(DHPASTE), KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, ____, KC_1,\
77 ____, ____, ____ , KC_FN1, ____, ____, ____, ____, ____, ____
78
79),
80
81
82/* SYM
83*
84* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|_CDH|
85* -------------------------------------------------------------------------------'
86* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace|Del |
87* --------------------------------------------------------------------------
88* | ESC: | ^ | { | } | @ | % | | [ | ( | ) | _ | [ | ] | \ | |
89* -------------------------------------------------------------------------------'
90* |Bak/Mov| ! | # | 0 | = | { | } | - | 1 | + | ] | ` | enter |PgUp|
91* --------------------------------------------------------------------------------
92* |Lsft | ; | ~ | : | ~ | "|"| $ | * | | . | / | Rsft| Up| PgDn|
93* ---------------------------------------------------------------------------------
94* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
95* ---------------------------------------------------------------------------------
96*/
97
98[_SYM] = KEYMAP (\
99 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
100 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
101 M(VIBRK), KC_CIRC, KC_LCBR, KC_RCBR,KC_AT, KC_PERC, ____, KC_LBRC,KC_LPRN,KC_RPRN,KC_UNDS, ____, ____, ____,\
102 ____, KC_EXLM, KC_HASH, KC_0, KC_EQL, KC_LCBR, KC_RCBR,KC_MINS,KC_1, KC_PLUS,KC_RBRC, KC_GRV, ____, ____,\
103 ____, KC_SCLN, KC_TILDE, KC_COLN, KC_TILDE, KC_PIPE, KC_DLR, KC_ASTR, ____, KC_DOT , KC_SLSH, ____, ____, ____,\
104 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
105),
106/*
107* |ESC | MAC| Win|RdLn| VI | | | | | | | | | | | |
108* -------------------------------------------------------------------------------'
109* | | | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del|
110* ---------------------------------------------------------------------------
111* | tab | | |Find| |pTab |DSOL|DelW| Up |DelW|DEOL| [ | ] | \ | |
112* -------------------------------------------------------------------------------'
113* |Bak/Mov| | | | |nTab |GSOL| <- | Dwn | -> | EOL | ' | enter |PgUp|
114* --------------------------------------------------------------------------------
115* |Lsft |Undo| Cut|Copy|Pste| | | | | | / | Rsft| Up| PgDn|
116* ---------------------------------------------------------------------------------
117* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
118* ---------------------------------------------------------------------------------
119*/
120
121[_MOV] = KEYMAP (\
122 ____, B_MAC,B_WIN,B_READ, B_VI, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
123 ____, ____, B_PAPP, B_NAPP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
124 ____, B_UNDO, ____, B_BFND, ____, B_PTAB, B_DSOL, B_DLW, B_UP, B_DRW, B_DEOL, ____, ____, ____, \
125 ____, B_SELA, B_BRLD, ____, ____, B_NXTB, B_GSOL, B_L1C, B_DOWN, B_R1C,B_GEOL, ____, ____, ____,\
126 ____, B_UNDO,B_CUT, B_COPY, B_PAST, B_PAST, ____, ____, ____, ____, ____, ____, ____, ____, \
127 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
128),
129
130[_TRAN] = KEYMAP (\
131 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
132 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
133 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
134 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
135 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
136 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
137)
138};
139
140const uint16_t PROGMEM fn_actions[] = {
141[1] = ACTION_LAYER_TAP_KEY(_SYM,KC_SPACE),
142[2] = ACTION_LAYER_TAP_KEY(_MOV,KC_BSPC)
143};
144
145#ifdef AUDIO_ENABLE
146
147float tone_startup[][2] = SONG(STARTUP_SOUND);
148float tone_qwerty[][2] = SONG(QWERTY_SOUND);
149float tone_colemak[][2] = SONG(COLEMAK_SOUND);
150#endif
151
152
153bool process_record_user(uint16_t keycode, keyrecord_t *record) {
154 switch (keycode) {
155 case QWR:
156 if (record->event.pressed) {
157 #ifdef AUDIO_ENABLE
158 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
159 #endif
160 layer_off(_CDH);
161 }
162 return false;
163 break;
164
165 case CDH:
166 if (record->event.pressed) {
167 #ifdef AUDIO_ENABLE
168 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
169 #endif
170 layer_on(_CDH);
171 }
172 return false;
173 break;
174
175 case SYM:
176 if (record->event.pressed) {
177 layer_on(_SYM);
178 } else {
179 layer_off(_SYM);
180 }
181 return false;
182 break;
183
184 }
185 return true;
186
187}
188
189const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
190{
191
192/* If id is in the range of BABL macros, call the babl function */
193/* Any clever remapping with modifiers should happen here e.g. shift bablkey does opposite*/
194#ifdef USE_BABLPASTE
195
196 if( id >= BABL_START_NUM && id < (BABL_START_NUM + BABL_NUM_MACROS ) ) {
197 if (record->event.pressed) { // is there a case where this isn't desired?
198
199 babblePaste ( record, id );
200 return MACRO_NONE;
201 }
202 }
203#endif
204
205
206 // MACRODOWN only works in this function
207 switch(id) {
208 case 0:
209 if (record->event.pressed) {
210 register_code(KC_RSFT);
211 } else {
212 unregister_code(KC_RSFT);
213 }
214 break;
215
216 /* Colemak mod-dh moves the D key to the qwerty V position
217 This hack makes apple-V_position do what I mean */
218 case DHPASTE:
219 if(keyboard_report->mods & MOD_BIT(KC_LGUI) ) {
220 if (record->event.pressed) {
221 clear_keyboard_but_mods();
222 register_code(KC_V);
223 } else {
224 unregister_code(KC_V);
225 }
226 } else {
227 if (record->event.pressed) {
228 register_code(KC_D);
229 } else {
230 unregister_code(KC_D);
231 }
232 }
233 break;
234
235 case VIBRK: // vi esc:
236 if (record->event.pressed) {
237 return MACRO( T(ESC),D(LSFT),T(SCLN),U(LSFT), END );
238 }
239 break;
240
241
242
243
244 default:
245 return MACRO_NONE;
246 }
247
248
249return MACRO_NONE;
250};
251
252
253
254
255
256void matrix_init_user(void) {
257}
258
259void matrix_scan_user(void) {
260
261}
262
263
264void led_set_user(uint8_t usb_led) {
265
266}
267
268
269
270
271
272
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/readme.md b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/readme.md
new file mode 100644
index 000000000..96ee0e77a
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/readme.md
@@ -0,0 +1 @@
# A more programmer oriented keymap for microsoft-sculpt-mobile
diff --git a/keyboards/handwired/MS-sculpt-mobile/readme.md b/keyboards/handwired/MS-sculpt-mobile/readme.md
new file mode 100644
index 000000000..d435b449f
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/readme.md
@@ -0,0 +1,58 @@
1
2This is a way to take a Microsoft ergonomic bluetooth keyboard, and make it
3into a hard-wired keyboard running QMK.
4
5The keyboard is known under several different names:
6Mobile Bluetooth 5000, Mobile 6000, Sculpt mobile, and Asus rebranded
7
8I had a stack of them,since they're cheap on ebay, travel well, and are just ergo enough.
9
10The ribbon cable is 1mm pitch, which is hard to hand solder. I bought a cheap set of
11"pitch adapter" boards https://www.amazon.com/Double-Sided-0-4mm-1-0-Adapter-60mmx38mm/dp/B00OK42118
12
13Cut the original ribbon cable sockets off the bluetooth board using a razor, they're hard to desolder.
14They're also allow the cable to be inserted on top or bottom.
15
16If I was going to do it again, I'd make the MCU connection come out the top of the keyboard
17and avoid the wires dangling out the bottom.
18
19As I was debugging the matrix, I started to get random failures. In desparation I tried a second MCU,
20but had the same problems. It turns out that the ribbon cable connections can get worn. Shave a
21half millimeter off the end of the ribbon cable & the errors go away.
22
23My method for discovering the matrix was to set up a KEYMAP macro that included all pins.
24See MATRIX_TESTING_KEYMAP if you need it. Then set up a keymap that has all printable symbols
25in the first 4 rows. test each key & record output. Then switch the printable symbols to the
26bottom 4 rows & repeat. This was enough to show the matrix.
27
28
29The full original keymap for the sculpt is
30 A B C D E F G H --->
310 b n m , . /
321 g h "
332 7 8 9 0 Del PgUp
343 p [ ] \
354 y u i o
365 ~ - += j k l ; 5
376 a s d q w e, Up left
387 F7 F8 F9 F10 F11 F12 f
39
40-----> I J K L M N O P Q R
410 Caps FN
421 Vol+ mute Rctl vol- pgdn LCTL
432 Rshift LShift
443 Ralt LAlt
454 LGUI
465 6 bakspc 1 2 3 4 F4 F5 F6
476 Down right spc F1 F2 F3 tab
487 r t z x c v enter Esc
49
50This works with 18 cols + 8 rows on a Teensy++, or Arm based Teensy.
51
52The Astar mini has all pins exposed , so you can do 18x8
53If you want a speaker, LEDs &etc, you'll need to free up a pin. I recommend joining columns
54R and L to the same pin.
55
56Building - add ASTAR=1 to the compile line or leave out for teensy2++
57
58
diff --git a/keyboards/handwired/MS-sculpt-mobile/rules.mk b/keyboards/handwired/MS-sculpt-mobile/rules.mk
new file mode 100644
index 000000000..680389c84
--- /dev/null
+++ b/keyboards/handwired/MS-sculpt-mobile/rules.mk
@@ -0,0 +1,48 @@
1
2## Project specific files
3SRC= babblePaste.c
4
5
6ifdef ASTAR
7 CFLAGS=-D ASTAR
8 OPT_DEFS += -DBOOTLOADER_SIZE=4096
9 MCU = atmega32u4
10 OPT_DEFS += -DCATERINA_BOOTLOADER
11 SCULPT_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done ; \
12 avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
13
14else
15 MCU = at90usb1286
16 OPT_DEFS += -DBOOTLOADER_SIZE=2048
17 SCULPT_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
18endif
19
20F_CPU = 16000000
21ARCH = AVR8
22F_USB = $(F_CPU)
23# Interrupt driven control endpoint task(+60)
24OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
25
26#
27BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
28MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
29EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
30CONSOLE_ENABLE ?= yes # Console for debug(+400)
31COMMAND_ENABLE ?= yes # Commands for debug and configuration
32# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
33SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
34# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
35NKRO_ENABLE ?= no # USB Nkey Rollover
36BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
37MIDI_ENABLE ?= no # MIDI controls
38UNICODE_ENABLE ?= no # Unicode
39BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
40AUDIO_ENABLE ?= no # Audio output on port C6
41
42
43USB ?= /dev/cu.usbmodem14141
44
45
46
47upload: build
48 $(SCULPT_UPLOAD_COMMAND)
diff --git a/keyboards/handwired/magicforce68/Makefile b/keyboards/handwired/magicforce68/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/magicforce68/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif \ No newline at end of file
diff --git a/keyboards/handwired/magicforce68/README.md b/keyboards/handwired/magicforce68/README.md
new file mode 100644
index 000000000..4f0ccecf9
--- /dev/null
+++ b/keyboards/handwired/magicforce68/README.md
@@ -0,0 +1,20 @@
1Magicforce 68 Handwired
2=======================
3
4This firmware is for a Magicforce 68 that's had its PCB removed and is handwired with an Arduino Micro. NOTE: The Arduino Micro is different than the Arduino *Pro* Micro.
5
6## Wiring Layout
7
8![Wiring Layout](wiring-layout.png)
9
10## Pinout
11
12The following pins are used:
13- Columns 1-15: B2, B0, D3, D2, D1, D0, D4, C6, D7, E6, B4, B5, B6, B7, D6
14- Rows 1-5: F0, F1, F4, F5, F6
15
16## Compiling and loading the firmware
17
18To build the firmware, run `make`.
19
20To flash the firemware onto the microcontroller, run `make avrdude`, and press the reset button.
diff --git a/keyboards/handwired/magicforce68/config.h b/keyboards/handwired/magicforce68/config.h
new file mode 100644
index 000000000..1e2b7d3e7
--- /dev/null
+++ b/keyboards/handwired/magicforce68/config.h
@@ -0,0 +1,162 @@
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#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER Hexwire
28#define PRODUCT Magicforce 68
29#define DESCRIPTION Handwired Magicforce 68
30
31/* key matrix size */
32#define MATRIX_ROWS 5
33#define MATRIX_COLS 15
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45#define MATRIX_ROW_PINS { F0, F1, F4, F5, F6 }
46#define MATRIX_COL_PINS { B2, B0, D3, D2, D1, D0, D4, C6, D7, E6, B4, B5, B6, B7, D6 }
47#define UNUSED_PINS
48
49/* COL2ROW or ROW2COL */
50#define DIODE_DIRECTION COL2ROW
51
52// #define BACKLIGHT_PIN B7
53// #define BACKLIGHT_BREATHING
54// #define BACKLIGHT_LEVELS 3
55
56
57/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
58#define DEBOUNCING_DELAY 5
59
60/* define if matrix has ghost (lacks anti-ghosting diodes) */
61//#define MATRIX_HAS_GHOST
62
63/* number of backlight levels */
64
65/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
66#define LOCKING_SUPPORT_ENABLE
67/* Locking resynchronize hack */
68#define LOCKING_RESYNC_ENABLE
69
70/*
71 * Force NKRO
72 *
73 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
74 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
75 * makefile for this to work.)
76 *
77 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
78 * until the next keyboard reset.
79 *
80 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
81 * fully operational during normal computer usage.
82 *
83 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
84 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
85 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
86 * power-up.
87 *
88 */
89//#define FORCE_NKRO
90
91/*
92 * Magic Key Options
93 *
94 * Magic keys are hotkey commands that allow control over firmware functions of
95 * the keyboard. They are best used in combination with the HID Listen program,
96 * found here: https://www.pjrc.com/teensy/hid_listen.html
97 *
98 * The options below allow the magic key functionality to be changed. This is
99 * useful if your keyboard/keypad is missing keys and you want magic key support.
100 *
101 */
102
103/* key combination for magic key command */
104#define IS_COMMAND() ( \
105 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
106)
107
108/* control how magic key switches layers */
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
110//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
111//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
112
113/* override magic key keymap */
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
116//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
117//#define MAGIC_KEY_HELP1 H
118//#define MAGIC_KEY_HELP2 SLASH
119//#define MAGIC_KEY_DEBUG D
120//#define MAGIC_KEY_DEBUG_MATRIX X
121//#define MAGIC_KEY_DEBUG_KBD K
122//#define MAGIC_KEY_DEBUG_MOUSE M
123//#define MAGIC_KEY_VERSION V
124//#define MAGIC_KEY_STATUS S
125//#define MAGIC_KEY_CONSOLE C
126//#define MAGIC_KEY_LAYER0_ALT1 ESC
127//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
128//#define MAGIC_KEY_LAYER0 0
129//#define MAGIC_KEY_LAYER1 1
130//#define MAGIC_KEY_LAYER2 2
131//#define MAGIC_KEY_LAYER3 3
132//#define MAGIC_KEY_LAYER4 4
133//#define MAGIC_KEY_LAYER5 5
134//#define MAGIC_KEY_LAYER6 6
135//#define MAGIC_KEY_LAYER7 7
136//#define MAGIC_KEY_LAYER8 8
137//#define MAGIC_KEY_LAYER9 9
138//#define MAGIC_KEY_BOOTLOADER PAUSE
139//#define MAGIC_KEY_LOCK CAPS
140//#define MAGIC_KEY_EEPROM E
141//#define MAGIC_KEY_NKRO N
142//#define MAGIC_KEY_SLEEP_LED Z
143
144/*
145 * Feature disable options
146 * These options are also useful to firmware size reduction.
147 */
148
149/* disable debug print */
150//#define NO_DEBUG
151
152/* disable print */
153//#define NO_PRINT
154
155/* disable action features */
156//#define NO_ACTION_LAYER
157//#define NO_ACTION_TAPPING
158//#define NO_ACTION_ONESHOT
159//#define NO_ACTION_MACRO
160//#define NO_ACTION_FUNCTION
161
162#endif
diff --git a/keyboards/handwired/magicforce68/keymaps/default/keymap.c b/keyboards/handwired/magicforce68/keymaps/default/keymap.c
new file mode 100644
index 000000000..22553f714
--- /dev/null
+++ b/keyboards/handwired/magicforce68/keymaps/default/keymap.c
@@ -0,0 +1,67 @@
1#include "magicforce68.h"
2
3#define _QWERTY 0
4#define _FN1 1
5#define _FN2 2
6#define KC_ KC_TRNS
7#define KC_X0 LT(_FN2, KC_GRV)
8#define KC_X1 MO(_FN1)
9
10const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11 [_QWERTY] = KEYMAP(
12 /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
13 ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP,
14 /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */
15 TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN,
16 /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */
17 X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER ,
18 /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */
19 LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP ,
20 /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
21 LCTL ,LGUI ,LALT , SPACE , X1 ,RALT ,RCTL , LEFT,DOWN,RGHT
22 /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */
23 ),
24
25 [_FN1] = KEYMAP(
26 /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
27 GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
28 /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
29 , , , UP , , , , , , , , , , , VOLD,END,
30 /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
31 , ,LEFT,DOWN,RGHT, , , , , , , , ,
32 /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
33 , , , , , , ,MUTE, , , , , MUTE,
34 /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
35 , , , , , , , MPRV,MPLY,MNXT
36 /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
37 ),
38
39 [_FN2] = KEYMAP(
40 /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
41 GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
42 /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
43 , , , UP , , , , 7 , 8 , 9 , , , , , VOLD,END,
44 /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
45 , ,LEFT,DOWN,RGHT, , , 4 , 5 , 6 , , , ,
46 /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
47 , , , , , , 0 , 1 , 2 , 3 , , , MUTE,
48 /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
49 , , , , , , , MPRV,MPLY,MNXT
50 /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
51 )
52};
53
54const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
55{
56 // MACRODOWN only works in this function
57 switch(id) {
58 case 0:
59 if (record->event.pressed) {
60 register_code(KC_RSFT);
61 } else {
62 unregister_code(KC_RSFT);
63 }
64 break;
65 }
66 return MACRO_NONE;
67};
diff --git a/keyboards/handwired/magicforce68/magicforce68.c b/keyboards/handwired/magicforce68/magicforce68.c
new file mode 100644
index 000000000..84b1007e2
--- /dev/null
+++ b/keyboards/handwired/magicforce68/magicforce68.c
@@ -0,0 +1,8 @@
1#include "magicforce68.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6
7 matrix_init_user();
8}
diff --git a/keyboards/handwired/magicforce68/magicforce68.h b/keyboards/handwired/magicforce68/magicforce68.h
new file mode 100644
index 000000000..cfcdce38d
--- /dev/null
+++ b/keyboards/handwired/magicforce68/magicforce68.h
@@ -0,0 +1,20 @@
1#ifndef MAGICFORCE68_H
2#define MAGICFORCE68_H
3
4#include "quantum.h"
5
6#define KEYMAP( \
7 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K2E, \
8 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K3E, \
9 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
10 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3D, \
11 K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D, K4E \
12 ) { \
13 { 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 }, \
14 { 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 }, \
15 { 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 }, \
16 { 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 }, \
17 { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E } \
18}
19
20#endif \ No newline at end of file
diff --git a/keyboards/handwired/magicforce68/rules.mk b/keyboards/handwired/magicforce68/rules.mk
new file mode 100644
index 000000000..e897ef252
--- /dev/null
+++ b/keyboards/handwired/magicforce68/rules.mk
@@ -0,0 +1,83 @@
1
2# MCU name
3MCU = atmega32u4
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18
19#
20# LUFA specific
21#
22# Target architecture (see library "Board Types" documentation).
23ARCH = AVR8
24
25# Input clock frequency.
26# This will define a symbol, F_USB, in all source code files equal to the
27# input clock frequency (before any prescaling is performed) in Hz. This value may
28# differ from F_CPU if prescaling is used on the latter, and is required as the
29# raw input clock is fed directly to the PLL sections of the AVR for high speed
30# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
31# at the end, this will be done automatically to create a 32-bit value in your
32# source code.
33#
34# If no clock division is performed on the input clock inside the AVR (via the
35# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
36F_USB = $(F_CPU)
37
38# Interrupt driven control endpoint task(+60)
39OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
40
41
42# Boot Section Size in *bytes*
43# Teensy halfKay 512
44# Teensy++ halfKay 1024
45# Atmel DFU loader 4096
46# LUFA bootloader 4096
47# USBaspLoader 2048
48OPT_DEFS += -DBOOTLOADER_SIZE=512
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
57CONSOLE_ENABLE ?= yes # Console for debug(+400)
58COMMAND_ENABLE ?= yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE ?= no # USB Nkey Rollover
63BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE ?= no # MIDI controls
65UNICODE_ENABLE ?= no # Unicode
66BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE ?= no # Audio output on port C6
68
69ifndef QUANTUM_DIR
70 include ../../../Makefile
71endif
72
73avrdude: build
74 ls /dev/tty* > /tmp/1; \
75 echo "Reset your Pro Micro now"; \
76 while [[ -z $$USB ]]; do \
77 sleep 1; \
78 ls /dev/tty* > /tmp/2; \
79 USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \
80 done; \
81 avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex
82
83.PHONY: avrdude
diff --git a/keyboards/handwired/magicforce68/wiring-layout.png b/keyboards/handwired/magicforce68/wiring-layout.png
new file mode 100644
index 000000000..816b10b2b
--- /dev/null
+++ b/keyboards/handwired/magicforce68/wiring-layout.png
Binary files differ
diff --git a/keyboards/handwired/numpad20/Makefile b/keyboards/handwired/numpad20/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/numpad20/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif \ No newline at end of file
diff --git a/keyboards/handwired/numpad20/config.h b/keyboards/handwired/numpad20/config.h
new file mode 100644
index 000000000..847f2111f
--- /dev/null
+++ b/keyboards/handwired/numpad20/config.h
@@ -0,0 +1,162 @@
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#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xBB80
25#define PRODUCT_ID 0x0504
26#define DEVICE_VER 0x0001
27#define MANUFACTURER Hexwire
28#define PRODUCT Numpad 20
29#define DESCRIPTION Handwired 4x5 numpad
30
31/* key matrix size */
32#define MATRIX_ROWS 5
33#define MATRIX_COLS 4
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45#define MATRIX_ROW_PINS { F6, B1, B3, B6, B5 }
46#define MATRIX_COL_PINS { D1, D0, F5, F4 }
47#define UNUSED_PINS
48
49/* COL2ROW or ROW2COL */
50#define DIODE_DIRECTION COL2ROW
51
52// #define BACKLIGHT_PIN B7
53// #define BACKLIGHT_BREATHING
54// #define BACKLIGHT_LEVELS 3
55
56
57/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
58#define DEBOUNCING_DELAY 5
59
60/* define if matrix has ghost (lacks anti-ghosting diodes) */
61//#define MATRIX_HAS_GHOST
62
63/* number of backlight levels */
64
65/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
66#define LOCKING_SUPPORT_ENABLE
67/* Locking resynchronize hack */
68#define LOCKING_RESYNC_ENABLE
69
70/*
71 * Force NKRO
72 *
73 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
74 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
75 * makefile for this to work.)
76 *
77 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
78 * until the next keyboard reset.
79 *
80 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
81 * fully operational during normal computer usage.
82 *
83 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
84 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
85 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
86 * power-up.
87 *
88 */
89//#define FORCE_NKRO
90
91/*
92 * Magic Key Options
93 *
94 * Magic keys are hotkey commands that allow control over firmware functions of
95 * the keyboard. They are best used in combination with the HID Listen program,
96 * found here: https://www.pjrc.com/teensy/hid_listen.html
97 *
98 * The options below allow the magic key functionality to be changed. This is
99 * useful if your keyboard/keypad is missing keys and you want magic key support.
100 *
101 */
102
103/* key combination for magic key command */
104#define IS_COMMAND() ( \
105 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
106)
107
108/* control how magic key switches layers */
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
110//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
111//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
112
113/* override magic key keymap */
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
116//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
117//#define MAGIC_KEY_HELP1 H
118//#define MAGIC_KEY_HELP2 SLASH
119//#define MAGIC_KEY_DEBUG D
120//#define MAGIC_KEY_DEBUG_MATRIX X
121//#define MAGIC_KEY_DEBUG_KBD K
122//#define MAGIC_KEY_DEBUG_MOUSE M
123//#define MAGIC_KEY_VERSION V
124//#define MAGIC_KEY_STATUS S
125//#define MAGIC_KEY_CONSOLE C
126//#define MAGIC_KEY_LAYER0_ALT1 ESC
127//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
128//#define MAGIC_KEY_LAYER0 0
129//#define MAGIC_KEY_LAYER1 1
130//#define MAGIC_KEY_LAYER2 2
131//#define MAGIC_KEY_LAYER3 3
132//#define MAGIC_KEY_LAYER4 4
133//#define MAGIC_KEY_LAYER5 5
134//#define MAGIC_KEY_LAYER6 6
135//#define MAGIC_KEY_LAYER7 7
136//#define MAGIC_KEY_LAYER8 8
137//#define MAGIC_KEY_LAYER9 9
138//#define MAGIC_KEY_BOOTLOADER PAUSE
139//#define MAGIC_KEY_LOCK CAPS
140//#define MAGIC_KEY_EEPROM E
141//#define MAGIC_KEY_NKRO N
142//#define MAGIC_KEY_SLEEP_LED Z
143
144/*
145 * Feature disable options
146 * These options are also useful to firmware size reduction.
147 */
148
149/* disable debug print */
150//#define NO_DEBUG
151
152/* disable print */
153//#define NO_PRINT
154
155/* disable action features */
156//#define NO_ACTION_LAYER
157//#define NO_ACTION_TAPPING
158//#define NO_ACTION_ONESHOT
159//#define NO_ACTION_MACRO
160//#define NO_ACTION_FUNCTION
161
162#endif
diff --git a/keyboards/handwired/numpad20/keymaps/default/keymap.c b/keyboards/handwired/numpad20/keymaps/default/keymap.c
new file mode 100644
index 000000000..37031206a
--- /dev/null
+++ b/keyboards/handwired/numpad20/keymaps/default/keymap.c
@@ -0,0 +1,16 @@
1#include "numpad20.h"
2
3#define KC_ KC_TRNS
4
5const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
6 [0] = COMPACT_KEYMAP(
7 LEFT,RGHT, UP ,DOWN, \
8 P7 , P8 , P9 ,PLUS, \
9 P4 , P5 , P6 ,MINS, \
10 P1 , P2 , P3 , ENT, \
11 P0 ,DOT ,RGHT, TAB \
12 )
13};
14
15const uint16_t PROGMEM fn_actions[] = {
16};
diff --git a/keyboards/handwired/numpad20/numpad20.c b/keyboards/handwired/numpad20/numpad20.c
new file mode 100644
index 000000000..101cf2cb4
--- /dev/null
+++ b/keyboards/handwired/numpad20/numpad20.c
@@ -0,0 +1,8 @@
1#include "numpad20.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6
7 matrix_init_user();
8}
diff --git a/keyboards/handwired/numpad20/numpad20.h b/keyboards/handwired/numpad20/numpad20.h
new file mode 100644
index 000000000..191979be0
--- /dev/null
+++ b/keyboards/handwired/numpad20/numpad20.h
@@ -0,0 +1,20 @@
1#ifndef NUMPAD20_H
2#define NUMPAD20_H
3
4#include "quantum.h"
5
6#define COMPACT_KEYMAP( \
7 K00, K01, K02, K03, \
8 K10, K11, K12, K13, \
9 K20, K21, K22, K23, \
10 K30, K31, K32, K33, \
11 K40, K41, K42, K43 \
12 ) { \
13 { KC_##K00, KC_##K01, KC_##K02, KC_##K03 }, \
14 { KC_##K10, KC_##K11, KC_##K12, KC_##K13 }, \
15 { KC_##K20, KC_##K21, KC_##K22, KC_##K23 }, \
16 { KC_##K30, KC_##K31, KC_##K32, KC_##K33 }, \
17 { KC_##K40, KC_##K41, KC_##K42, KC_##K43 } \
18}
19
20#endif \ No newline at end of file
diff --git a/keyboards/handwired/numpad20/rules.mk b/keyboards/handwired/numpad20/rules.mk
new file mode 100644
index 000000000..e897ef252
--- /dev/null
+++ b/keyboards/handwired/numpad20/rules.mk
@@ -0,0 +1,83 @@
1
2# MCU name
3MCU = atmega32u4
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18
19#
20# LUFA specific
21#
22# Target architecture (see library "Board Types" documentation).
23ARCH = AVR8
24
25# Input clock frequency.
26# This will define a symbol, F_USB, in all source code files equal to the
27# input clock frequency (before any prescaling is performed) in Hz. This value may
28# differ from F_CPU if prescaling is used on the latter, and is required as the
29# raw input clock is fed directly to the PLL sections of the AVR for high speed
30# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
31# at the end, this will be done automatically to create a 32-bit value in your
32# source code.
33#
34# If no clock division is performed on the input clock inside the AVR (via the
35# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
36F_USB = $(F_CPU)
37
38# Interrupt driven control endpoint task(+60)
39OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
40
41
42# Boot Section Size in *bytes*
43# Teensy halfKay 512
44# Teensy++ halfKay 1024
45# Atmel DFU loader 4096
46# LUFA bootloader 4096
47# USBaspLoader 2048
48OPT_DEFS += -DBOOTLOADER_SIZE=512
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
57CONSOLE_ENABLE ?= yes # Console for debug(+400)
58COMMAND_ENABLE ?= yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE ?= no # USB Nkey Rollover
63BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE ?= no # MIDI controls
65UNICODE_ENABLE ?= no # Unicode
66BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE ?= no # Audio output on port C6
68
69ifndef QUANTUM_DIR
70 include ../../../Makefile
71endif
72
73avrdude: build
74 ls /dev/tty* > /tmp/1; \
75 echo "Reset your Pro Micro now"; \
76 while [[ -z $$USB ]]; do \
77 sleep 1; \
78 ls /dev/tty* > /tmp/2; \
79 USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \
80 done; \
81 avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex
82
83.PHONY: avrdude
diff --git a/keyboards/handwired/ortho5x13/Makefile b/keyboards/handwired/ortho5x13/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/ortho5x13/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif \ No newline at end of file
diff --git a/keyboards/handwired/ortho5x13/config.h b/keyboards/handwired/ortho5x13/config.h
new file mode 100644
index 000000000..f85159596
--- /dev/null
+++ b/keyboards/handwired/ortho5x13/config.h
@@ -0,0 +1,162 @@
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#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xBB80
25#define PRODUCT_ID 0x050D
26#define DEVICE_VER 0x0001
27#define MANUFACTURER Hexwire
28#define PRODUCT Ortho 5x13
29#define DESCRIPTION Handwired 5x13 ortholinear keyboard
30
31/* key matrix size */
32#define MATRIX_ROWS 5
33#define MATRIX_COLS 13
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45#define MATRIX_ROW_PINS { D3, D2, D1, D0, D4 }
46#define MATRIX_COL_PINS { C6, D7, E6, B4, B5, B6, B2, B3, B1, F7, F6, F5, F4 }
47#define UNUSED_PINS
48
49/* COL2ROW or ROW2COL */
50#define DIODE_DIRECTION COL2ROW
51
52// #define BACKLIGHT_PIN B7
53// #define BACKLIGHT_BREATHING
54// #define BACKLIGHT_LEVELS 3
55
56
57/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
58#define DEBOUNCING_DELAY 5
59
60/* define if matrix has ghost (lacks anti-ghosting diodes) */
61//#define MATRIX_HAS_GHOST
62
63/* number of backlight levels */
64
65/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
66#define LOCKING_SUPPORT_ENABLE
67/* Locking resynchronize hack */
68#define LOCKING_RESYNC_ENABLE
69
70/*
71 * Force NKRO
72 *
73 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
74 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
75 * makefile for this to work.)
76 *
77 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
78 * until the next keyboard reset.
79 *
80 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
81 * fully operational during normal computer usage.
82 *
83 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
84 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
85 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
86 * power-up.
87 *
88 */
89//#define FORCE_NKRO
90
91/*
92 * Magic Key Options
93 *
94 * Magic keys are hotkey commands that allow control over firmware functions of
95 * the keyboard. They are best used in combination with the HID Listen program,
96 * found here: https://www.pjrc.com/teensy/hid_listen.html
97 *
98 * The options below allow the magic key functionality to be changed. This is
99 * useful if your keyboard/keypad is missing keys and you want magic key support.
100 *
101 */
102
103/* key combination for magic key command */
104#define IS_COMMAND() ( \
105 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
106)
107
108/* control how magic key switches layers */
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
110//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
111//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
112
113/* override magic key keymap */
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
116//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
117//#define MAGIC_KEY_HELP1 H
118//#define MAGIC_KEY_HELP2 SLASH
119//#define MAGIC_KEY_DEBUG D
120//#define MAGIC_KEY_DEBUG_MATRIX X
121//#define MAGIC_KEY_DEBUG_KBD K
122//#define MAGIC_KEY_DEBUG_MOUSE M
123//#define MAGIC_KEY_VERSION V
124//#define MAGIC_KEY_STATUS S
125//#define MAGIC_KEY_CONSOLE C
126//#define MAGIC_KEY_LAYER0_ALT1 ESC
127//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
128//#define MAGIC_KEY_LAYER0 0
129//#define MAGIC_KEY_LAYER1 1
130//#define MAGIC_KEY_LAYER2 2
131//#define MAGIC_KEY_LAYER3 3
132//#define MAGIC_KEY_LAYER4 4
133//#define MAGIC_KEY_LAYER5 5
134//#define MAGIC_KEY_LAYER6 6
135//#define MAGIC_KEY_LAYER7 7
136//#define MAGIC_KEY_LAYER8 8
137//#define MAGIC_KEY_LAYER9 9
138//#define MAGIC_KEY_BOOTLOADER PAUSE
139//#define MAGIC_KEY_LOCK CAPS
140//#define MAGIC_KEY_EEPROM E
141//#define MAGIC_KEY_NKRO N
142//#define MAGIC_KEY_SLEEP_LED Z
143
144/*
145 * Feature disable options
146 * These options are also useful to firmware size reduction.
147 */
148
149/* disable debug print */
150//#define NO_DEBUG
151
152/* disable print */
153//#define NO_PRINT
154
155/* disable action features */
156//#define NO_ACTION_LAYER
157//#define NO_ACTION_TAPPING
158//#define NO_ACTION_ONESHOT
159//#define NO_ACTION_MACRO
160//#define NO_ACTION_FUNCTION
161
162#endif
diff --git a/keyboards/handwired/ortho5x13/keymaps/default/keymap.c b/keyboards/handwired/ortho5x13/keymaps/default/keymap.c
new file mode 100644
index 000000000..c1262a83d
--- /dev/null
+++ b/keyboards/handwired/ortho5x13/keymaps/default/keymap.c
@@ -0,0 +1,289 @@
1#include "ortho5x13.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4#ifdef AUDIO_ENABLE
5 #include "audio.h"
6#endif
7
8// Each layer gets a name for readability, which is then used in the keymap matrix below.
9// The underscores don't mean anything - you can have a layer called STUFF or any other name.
10// Layer names don't all need to be of the same length, obviously, and you can also skip them
11// entirely and just use numbers.
12#define _QWERTY 0
13#define _COLEMAK 1
14#define _DVORAK 2
15#define _LOWER 3
16#define _RAISE 4
17#define _ADJUST 16
18
19enum custom_keycodes {
20 QWERTY = SAFE_RANGE,
21 COLEMAK,
22 DVORAK,
23 LOWER,
24 RAISE,
25 BACKLIT
26};
27
28// Fillers to make layering more clear
29#define _______ KC_TRNS
30#define XXXXXXX KC_NO
31
32#define KC_L1 LOWER
33#define KC_L2 RAISE
34
35const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
36
37/* Qwerty
38 * ,------------------------------------------------------------------------------------------.
39 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |
40 * |------+------+------+------+------+------+------+------+------+------+------+------+------|
41 * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] |
42 * |------+------+------+------+------+-------------+------+------+------+------+------+------|
43 * | ` | A | S | D | F | G | H | J | K | L | ; | ' | \ |
44 * |------+------+------+------+------+------|------+------+------+------+------+------+------|
45 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | Up |
46 * |------+------+------+------+------+------+------+------+------+------+------+------+------|
47 * | Hyper| Ctrl | Alt | GUI |Lower | Space |Raise | Bksp |Shift | Left | Down |Right |
48 * `------------------------------------------------------------------------------------------'
49 */
50[_QWERTY] = COMPACT_KEYMAP(
51 //,----+----+----+----+----+----+----+----+----+----+----+----+----.
52 ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL ,
53 //|----+----+----+----+----+----+----+----+----+----+----+----+----|
54 TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC,
55 //|----+----+----+----+----+----+----+----+----+----+----+----+----|
56 GRV , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,BSLS,
57 //|----+----+----+----+----+----+----+----+----+----+----+----+----|
58 LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,ENT , UP ,
59 //|----+----+----+----+----+---------+----+----+----+----+----+----|
60 HYPR,LCTL,LALT,LGUI, L1 , SPACE , L2 ,BSPC,RSFT,LEFT,RGHT,DOWN
61 //`----+----+----+----+----+---------+----+----+----+----+----+----'
62 ),
63
64/* Colemak
65 * ,-----------------------------------------------------------------------------------.
66 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
67 * |------+------+------+------+------+------+------+------+------+------+------+------|
68 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
69 * |------+------+------+------+------+-------------+------+------+------+------+------|
70 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
71 * |------+------+------+------+------+------|------+------+------+------+------+------|
72 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
73 * |------+------+------+------+------+------+------+------+------+------+------+------|
74 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
75 * `-----------------------------------------------------------------------------------'
76 */
77[_COLEMAK] = {
78 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
79 {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL},
80 {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
81 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
82 {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
83},
84
85/* Dvorak
86 * ,-----------------------------------------------------------------------------------.
87 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
88 * |------+------+------+------+------+------+------+------+------+------+------+------|
89 * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
90 * |------+------+------+------+------+-------------+------+------+------+------+------|
91 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
92 * |------+------+------+------+------+------|------+------+------+------+------+------|
93 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
94 * |------+------+------+------+------+------+------+------+------+------+------+------|
95 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
96 * `-----------------------------------------------------------------------------------'
97 */
98[_DVORAK] = {
99 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
100 {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL},
101 {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
102 {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
103 {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
104},
105
106/* Lower
107 * ,-----------------------------------------------------------------------------------.
108 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
109 * |------+------+------+------+------+-------------+------+------+------+------+------|
110 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
111 * |------+------+------+------+------+-------------+------+------+------+------+------|
112 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
113 * |------+------+------+------+------+------|------+------+------+------+------+------|
114 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
115 * |------+------+------+------+------+------+------+------+------+------+------+------|
116 * | | | | | | | | Next | Vol- | Vol+ | Play |
117 * `-----------------------------------------------------------------------------------'
118 */
119[_LOWER] = {
120 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
121 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
122 {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
123 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
124 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
125},
126
127/* Raise
128 * ,-----------------------------------------------------------------------------------.
129 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
130 * |------+------+------+------+------+------+------+------+------+------+------+------|
131 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
132 * |------+------+------+------+------+-------------+------+------+------+------+------|
133 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
134 * |------+------+------+------+------+------|------+------+------+------+------+------|
135 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
136 * |------+------+------+------+------+------+------+------+------+------+------+------|
137 * | | | | | | | | Next | Vol- | Vol+ | Play |
138 * `-----------------------------------------------------------------------------------'
139 */
140[_RAISE] = {
141 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
142 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
143 {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
144 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______},
145 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
146},
147
148/* Adjust (Lower + Raise)
149 * ,-----------------------------------------------------------------------------------.
150 * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
151 * |------+------+------+------+------+------+------+------+------+------+------+------|
152 * | | Reset| | | | | | | | | | Del |
153 * |------+------+------+------+------+-------------+------+------+------+------+------|
154 * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
155 * |------+------+------+------+------+------|------+------+------+------+------+------|
156 * | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
157 * |------+------+------+------+------+------+------+------+------+------+------+------|
158 * | | | | | | | | | | | |
159 * `-----------------------------------------------------------------------------------'
160 */
161[_ADJUST] = {
162 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
163 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
164 {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
165 {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
166 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
167}
168
169
170};
171
172#ifdef AUDIO_ENABLE
173float tone_startup[][2] = {
174 {NOTE_B5, 20},
175 {NOTE_B6, 8},
176 {NOTE_DS6, 20},
177 {NOTE_B6, 8}
178};
179
180float tone_qwerty[][2] = SONG(QWERTY_SOUND);
181float tone_dvorak[][2] = SONG(DVORAK_SOUND);
182float tone_colemak[][2] = SONG(COLEMAK_SOUND);
183
184float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
185
186float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
187#endif
188
189void persistant_default_layer_set(uint16_t default_layer) {
190 eeconfig_update_default_layer(default_layer);
191 default_layer_set(default_layer);
192}
193
194bool process_record_user(uint16_t keycode, keyrecord_t *record) {
195 switch (keycode) {
196 case QWERTY:
197 if (record->event.pressed) {
198 #ifdef AUDIO_ENABLE
199 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
200 #endif
201 persistant_default_layer_set(1UL<<_QWERTY);
202 }
203 return false;
204 break;
205 case COLEMAK:
206 if (record->event.pressed) {
207 #ifdef AUDIO_ENABLE
208 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
209 #endif
210 persistant_default_layer_set(1UL<<_COLEMAK);
211 }
212 return false;
213 break;
214 case DVORAK:
215 if (record->event.pressed) {
216 #ifdef AUDIO_ENABLE
217 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
218 #endif
219 persistant_default_layer_set(1UL<<_DVORAK);
220 }
221 return false;
222 break;
223 case LOWER:
224 if (record->event.pressed) {
225 layer_on(_LOWER);
226 update_tri_layer(_LOWER, _RAISE, _ADJUST);
227 } else {
228 layer_off(_LOWER);
229 update_tri_layer(_LOWER, _RAISE, _ADJUST);
230 }
231 return false;
232 break;
233 case RAISE:
234 if (record->event.pressed) {
235 layer_on(_RAISE);
236 update_tri_layer(_LOWER, _RAISE, _ADJUST);
237 } else {
238 layer_off(_RAISE);
239 update_tri_layer(_LOWER, _RAISE, _ADJUST);
240 }
241 return false;
242 break;
243 case BACKLIT:
244 if (record->event.pressed) {
245 register_code(KC_RSFT);
246 #ifdef BACKLIGHT_ENABLE
247 backlight_step();
248 #endif
249 } else {
250 unregister_code(KC_RSFT);
251 }
252 return false;
253 break;
254 }
255 return true;
256};
257
258void matrix_init_user(void) {
259 #ifdef AUDIO_ENABLE
260 startup_user();
261 #endif
262}
263
264#ifdef AUDIO_ENABLE
265
266void startup_user()
267{
268 _delay_ms(20); // gets rid of tick
269 PLAY_NOTE_ARRAY(tone_startup, false, 0);
270}
271
272void shutdown_user()
273{
274 PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
275 _delay_ms(150);
276 stop_all_notes();
277}
278
279void music_on_user(void)
280{
281 music_scale_user();
282}
283
284void music_scale_user(void)
285{
286 PLAY_NOTE_ARRAY(music_scale, false, 0);
287}
288
289#endif \ No newline at end of file
diff --git a/keyboards/handwired/ortho5x13/ortho5x13.c b/keyboards/handwired/ortho5x13/ortho5x13.c
new file mode 100644
index 000000000..cf8352cc4
--- /dev/null
+++ b/keyboards/handwired/ortho5x13/ortho5x13.c
@@ -0,0 +1,8 @@
1#include "ortho5x13.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6
7 matrix_init_user();
8}
diff --git a/keyboards/handwired/ortho5x13/ortho5x13.h b/keyboards/handwired/ortho5x13/ortho5x13.h
new file mode 100644
index 000000000..d442212fe
--- /dev/null
+++ b/keyboards/handwired/ortho5x13/ortho5x13.h
@@ -0,0 +1,36 @@
1#ifndef ORTHO5X13_H
2#define ORTHO5X13_H
3
4#include "quantum.h"
5
6#define KEYMAP( \
7 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
8 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
9 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
10 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
11 k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c \
12) \
13{ \
14 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c }, \
15 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c }, \
16 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c }, \
17 { k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b, k3c }, \
18 { k40, k41, k42, k43, k44, k45, KC_NO, k47, k48, k49, k4a, k4b, k4c } \
19}
20
21#define COMPACT_KEYMAP( \
22 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
23 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
24 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
25 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
26 k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c \
27) \
28{ \
29 { 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 }, \
30 { 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 }, \
31 { 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 }, \
32 { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k35, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b, KC_##k3c }, \
33 { KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_NO, KC_##k47, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c } \
34}
35
36#endif \ No newline at end of file
diff --git a/keyboards/handwired/ortho5x13/rules.mk b/keyboards/handwired/ortho5x13/rules.mk
new file mode 100644
index 000000000..e897ef252
--- /dev/null
+++ b/keyboards/handwired/ortho5x13/rules.mk
@@ -0,0 +1,83 @@
1
2# MCU name
3MCU = atmega32u4
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18
19#
20# LUFA specific
21#
22# Target architecture (see library "Board Types" documentation).
23ARCH = AVR8
24
25# Input clock frequency.
26# This will define a symbol, F_USB, in all source code files equal to the
27# input clock frequency (before any prescaling is performed) in Hz. This value may
28# differ from F_CPU if prescaling is used on the latter, and is required as the
29# raw input clock is fed directly to the PLL sections of the AVR for high speed
30# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
31# at the end, this will be done automatically to create a 32-bit value in your
32# source code.
33#
34# If no clock division is performed on the input clock inside the AVR (via the
35# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
36F_USB = $(F_CPU)
37
38# Interrupt driven control endpoint task(+60)
39OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
40
41
42# Boot Section Size in *bytes*
43# Teensy halfKay 512
44# Teensy++ halfKay 1024
45# Atmel DFU loader 4096
46# LUFA bootloader 4096
47# USBaspLoader 2048
48OPT_DEFS += -DBOOTLOADER_SIZE=512
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
57CONSOLE_ENABLE ?= yes # Console for debug(+400)
58COMMAND_ENABLE ?= yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE ?= no # USB Nkey Rollover
63BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE ?= no # MIDI controls
65UNICODE_ENABLE ?= no # Unicode
66BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE ?= no # Audio output on port C6
68
69ifndef QUANTUM_DIR
70 include ../../../Makefile
71endif
72
73avrdude: build
74 ls /dev/tty* > /tmp/1; \
75 echo "Reset your Pro Micro now"; \
76 while [[ -z $$USB ]]; do \
77 sleep 1; \
78 ls /dev/tty* > /tmp/2; \
79 USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \
80 done; \
81 avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex
82
83.PHONY: avrdude
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/README.md b/keyboards/handwired/promethium/keymaps/priyadi/README.md
index 37c2be6f9..ddeaed939 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/README.md
+++ b/keyboards/handwired/promethium/keymaps/priyadi/README.md
@@ -13,7 +13,7 @@ Main layer modifications from default Planck layout:
13* Lower & Raise is now called Num and Fun. 13* Lower & Raise is now called Num and Fun.
14* OS & Left keys become another thumb modifier: Empty & Greek (Empty because I used this for another use and my muscle memory is not adapted to it yet) 14* OS & Left keys become another thumb modifier: Empty & Greek (Empty because I used this for another use and my muscle memory is not adapted to it yet)
15 15
16On Promethium, Trackpoint is enabled on PD2 and PD2. We impersonate a Thinkpad keyboard to be able to use Thinkpad driver on Windows (still needs verification). 16On Promethium, Trackpoint is enabled on PD2 and PD3. We impersonate a Thinkpad keyboard to be able to use Thinkpad driver on Windows (still needs verification).
17 17
18AltGr & Compose dual use key. Tap for Compose (mapped to Scroll Lock in hardware) and press for AltGr. 18AltGr & Compose dual use key. Tap for Compose (mapped to Scroll Lock in hardware) and press for AltGr.
19 19
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index 2c43f9884..cf7c67339 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -51,8 +51,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
51#define KC_WWWF KC_WWW_FORWARD 51#define KC_WWWF KC_WWW_FORWARD
52 52
53// hybrid right-alt & scroll lock (mapped to Compose in OS) 53// hybrid right-alt & scroll lock (mapped to Compose in OS)
54#undef KC_RALT 54#define C_RALT MT(MOD_RALT, KC_SLCK)
55#define KC_RALT MT(MOD_RALT, KC_SLCK) 55
56// dual use right-shift & del key
57// #define C_RSFT MT(MOD_RSFT, KC_DEL)
56 58
57bool capslock = false; 59bool capslock = false;
58#ifdef DOUBLESPACE_LAYER_ENABLE 60#ifdef DOUBLESPACE_LAYER_ENABLE
@@ -572,7 +574,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
572 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, 574 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
573 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT , 575 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT ,
574 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, 576 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
575 KC_LCTL, KC_LALT, KC_LGUI, EMPTY, NUM, LSPACE, RSPACE, FUN, GREEK, KC_RGUI, KC_RALT, KC_RCTL 577 KC_LCTL, KC_LALT, KC_LGUI, EMPTY, NUM, LSPACE, RSPACE, FUN, GREEK, KC_RGUI, C_RALT, KC_RCTL
576), 578),
577 579
578/* Dvorak 580/* Dvorak
@@ -664,16 +666,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
664 * |------+------+------+------+------+-------------+------+------+------+------+------| 666 * |------+------+------+------+------+-------------+------+------+------+------+------|
665 * | | * | \ | - | = | / | ≠ | ( | ) | < | > | | 667 * | | * | \ | - | = | / | ≠ | ( | ) | < | > | |
666 * |------+------+------+------+------+------|------+------+------+------+------+------| 668 * |------+------+------+------+------+------|------+------+------+------+------+------|
667 * | & | ^ | | | _ | + | ? | ± | [ | ] | { | } | : | 669 * | & | ^ | | | _ | + | ? | ± | [ | ] | { | } | |
668 * |------+------+------+------+------+------+------+------+------+------+------+------| 670 * |------+------+------+------+------+------+------+------+------+------+------+------|
669 * | | | | | | | | | | | | 671 * | | | | | | | | | | : | |
670 * `-----------------------------------------------------------------------------------' 672 * `-----------------------------------------------------------------------------------'
671 */ 673 */
672[_PUNC] = KEYMAP( 674[_PUNC] = KEYMAP(
673 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______, 675 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______,
674 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______, 676 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______,
675 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_COLN, 677 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______,
676 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 678 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, _______
677), 679),
678 680
679/* Num 681/* Num
@@ -682,33 +684,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
682 * |------+------+------+------+------+-------------+------+------+------+------+------| 684 * |------+------+------+------+------+-------------+------+------+------+------+------|
683 * | ` | * | \ | - | = | / | B | 4 | 5 | 6 | E | | 685 * | ` | * | \ | - | = | / | B | 4 | 5 | 6 | E | |
684 * |------+------+------+------+------+------|------+------+------+------+------+------| 686 * |------+------+------+------+------+------|------+------+------+------+------+------|
685 * | & | ^ | | | _ | + | ? | C | 1 | 2 | 3 | F | : | 687 * | & | ^ | | | _ | + | ? | C | 1 | 2 | 3 | F | |
686 * |------+------+------+------+------+------+------+------+------+------+------+------| 688 * |------+------+------+------+------+------+------+------+------+------+------+------|
687 * | | | | | | | | 0 | , | . | x | | 689 * | | | x | | | | | 0 | , | . | : | |
688 * `-----------------------------------------------------------------------------------' 690 * `-----------------------------------------------------------------------------------'
689 */ 691 */
690[_NUM] = KEYMAP( 692[_NUM] = KEYMAP(
691 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), _______, 693 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), _______,
692 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______, 694 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______,
693 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), KC_COLN, 695 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), _______,
694 _______, _______, _______, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_X, _______ 696 _______, _______, KC_X, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_COLN, _______
695), 697),
696 698
697/* Func 699/* Func
698 * ,-----------------------------------------------------------------------------------. 700 * ,-----------------------------------------------------------------------------------.
699 * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del | 701 * | | F1 | F2 | F3 | F4 | Ins | | PgUp | Up | PgDn | PgUp | |
700 * |------+------+------+------+------+-------------+------+------+------+------+------| 702 * |------+------+------+------+------+-------------+------+------+------+------+------|
701 * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins | 703 * | Caps | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | |
702 * |------+------+------+------+------+------|------+------+------+------+------+------| 704 * |------+------+------+------+------+------|------+------+------+------+------+------|
703 * | | F9 | F10 | F11 | F12 | | | | Home | End | | | 705 * | | F9 | F10 | F11 | F12 |Pause | | | Home | End | | |
704 * |------+------+------+------+------+------+------+------+------+------+------+------| 706 * |------+------+------+------+------+------+------+------+------+------+------+------|
705 * | | | | | | | | | | | | 707 * | | | | | | | | | | | |
706 * `-----------------------------------------------------------------------------------' 708 * `-----------------------------------------------------------------------------------'
707 */ 709 */
708[_FUN] = KEYMAP( 710[_FUN] = KEYMAP(
709 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL, 711 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_INS, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
710 XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS, 712 KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
711 _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______, 713 _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
712 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 714 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
713), 715),
714 716
@@ -933,7 +935,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
933#endif 935#endif
934 936
935 // handle greek layer shift 937 // handle greek layer shift
936 // handle both shift = capslock
937 case KC_LSFT: 938 case KC_LSFT:
938 case KC_RSFT: 939 case KC_RSFT:
939 ; 940 ;
@@ -947,13 +948,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
947 layer_off(_GREEKU); 948 layer_off(_GREEKU);
948 } 949 }
949 } 950 }
950 } else {
951 if (record->event.pressed) {
952 if (lshift ^ rshift) { // if only one shift was pressed
953 register_code(KC_CAPS);
954 unregister_code(KC_CAPS);
955 }
956 }
957 } 951 }
958 return true; 952 return true;
959 break; 953 break;
@@ -1044,6 +1038,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
1044 break; 1038 break;
1045#endif 1039#endif
1046 1040
1041 // only process Fnumber on key release, and only when layer switcher is still pressed.
1042 // this is to avoid accidental presses on potentially destructive keys
1043 case KC_F1 ... KC_F12:
1044 case KC_PAUS:
1045 case KC_PSCR:
1046 case KC_INS:
1047 if (!record->event.pressed && layer == _FUN) { // key released and still in FUN layer
1048 register_code(keycode);
1049 unregister_code(keycode);
1050 }
1051 return false;
1052 break;
1053
1047 // layer switcher 1054 // layer switcher
1048 // 1055 //
1049 case GREEK: 1056 case GREEK:
diff --git a/keyboards/lets_split/common/glcdfont.c b/keyboards/lets_split/common/glcdfont.c
new file mode 100644
index 000000000..6f88bd23a
--- /dev/null
+++ b/keyboards/lets_split/common/glcdfont.c
@@ -0,0 +1,276 @@
1// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
2// See gfxfont.h for newer custom bitmap font info.
3
4#ifndef FONT5X7_H
5#define FONT5X7_H
6
7#ifdef __AVR__
8 #include <avr/io.h>
9 #include <avr/pgmspace.h>
10#elif defined(ESP8266)
11 #include <pgmspace.h>
12#else
13 #define PROGMEM
14#endif
15
16// Standard ASCII 5x7 font
17
18static const unsigned char font[] PROGMEM = {
19 0x00, 0x00, 0x00, 0x00, 0x00,
20 0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
21 0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
22 0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
23 0x18, 0x3C, 0x7E, 0x3C, 0x18,
24 0x1C, 0x57, 0x7D, 0x57, 0x1C,
25 0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
26 0x00, 0x18, 0x3C, 0x18, 0x00,
27 0xFF, 0xE7, 0xC3, 0xE7, 0xFF,
28 0x00, 0x18, 0x24, 0x18, 0x00,
29 0xFF, 0xE7, 0xDB, 0xE7, 0xFF,
30 0x30, 0x48, 0x3A, 0x06, 0x0E,
31 0x26, 0x29, 0x79, 0x29, 0x26,
32 0x40, 0x7F, 0x05, 0x05, 0x07,
33 0x40, 0x7F, 0x05, 0x25, 0x3F,
34 0x5A, 0x3C, 0xE7, 0x3C, 0x5A,
35 0x7F, 0x3E, 0x1C, 0x1C, 0x08,
36 0x08, 0x1C, 0x1C, 0x3E, 0x7F,
37 0x14, 0x22, 0x7F, 0x22, 0x14,
38 0x5F, 0x5F, 0x00, 0x5F, 0x5F,
39 0x06, 0x09, 0x7F, 0x01, 0x7F,
40 0x00, 0x66, 0x89, 0x95, 0x6A,
41 0x60, 0x60, 0x60, 0x60, 0x60,
42 0x94, 0xA2, 0xFF, 0xA2, 0x94,
43 0x08, 0x04, 0x7E, 0x04, 0x08,
44 0x10, 0x20, 0x7E, 0x20, 0x10,
45 0x08, 0x08, 0x2A, 0x1C, 0x08,
46 0x08, 0x1C, 0x2A, 0x08, 0x08,
47 0x1E, 0x10, 0x10, 0x10, 0x10,
48 0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
49 0x30, 0x38, 0x3E, 0x38, 0x30,
50 0x06, 0x0E, 0x3E, 0x0E, 0x06,
51 0x00, 0x00, 0x00, 0x00, 0x00,
52 0x00, 0x00, 0x5F, 0x00, 0x00,
53 0x00, 0x07, 0x00, 0x07, 0x00,
54 0x14, 0x7F, 0x14, 0x7F, 0x14,
55 0x24, 0x2A, 0x7F, 0x2A, 0x12,
56 0x23, 0x13, 0x08, 0x64, 0x62,
57 0x36, 0x49, 0x56, 0x20, 0x50,
58 0x00, 0x08, 0x07, 0x03, 0x00,
59 0x00, 0x1C, 0x22, 0x41, 0x00,
60 0x00, 0x41, 0x22, 0x1C, 0x00,
61 0x2A, 0x1C, 0x7F, 0x1C, 0x2A,
62 0x08, 0x08, 0x3E, 0x08, 0x08,
63 0x00, 0x80, 0x70, 0x30, 0x00,
64 0x08, 0x08, 0x08, 0x08, 0x08,
65 0x00, 0x00, 0x60, 0x60, 0x00,
66 0x20, 0x10, 0x08, 0x04, 0x02,
67 0x3E, 0x51, 0x49, 0x45, 0x3E,
68 0x00, 0x42, 0x7F, 0x40, 0x00,
69 0x72, 0x49, 0x49, 0x49, 0x46,
70 0x21, 0x41, 0x49, 0x4D, 0x33,
71 0x18, 0x14, 0x12, 0x7F, 0x10,
72 0x27, 0x45, 0x45, 0x45, 0x39,
73 0x3C, 0x4A, 0x49, 0x49, 0x31,
74 0x41, 0x21, 0x11, 0x09, 0x07,
75 0x36, 0x49, 0x49, 0x49, 0x36,
76 0x46, 0x49, 0x49, 0x29, 0x1E,
77 0x00, 0x00, 0x14, 0x00, 0x00,
78 0x00, 0x40, 0x34, 0x00, 0x00,
79 0x00, 0x08, 0x14, 0x22, 0x41,
80 0x14, 0x14, 0x14, 0x14, 0x14,
81 0x00, 0x41, 0x22, 0x14, 0x08,
82 0x02, 0x01, 0x59, 0x09, 0x06,
83 0x3E, 0x41, 0x5D, 0x59, 0x4E,
84 0x7C, 0x12, 0x11, 0x12, 0x7C,
85 0x7F, 0x49, 0x49, 0x49, 0x36,
86 0x3E, 0x41, 0x41, 0x41, 0x22,
87 0x7F, 0x41, 0x41, 0x41, 0x3E,
88 0x7F, 0x49, 0x49, 0x49, 0x41,
89 0x7F, 0x09, 0x09, 0x09, 0x01,
90 0x3E, 0x41, 0x41, 0x51, 0x73,
91 0x7F, 0x08, 0x08, 0x08, 0x7F,
92 0x00, 0x41, 0x7F, 0x41, 0x00,
93 0x20, 0x40, 0x41, 0x3F, 0x01,
94 0x7F, 0x08, 0x14, 0x22, 0x41,
95 0x7F, 0x40, 0x40, 0x40, 0x40,
96 0x7F, 0x02, 0x1C, 0x02, 0x7F,
97 0x7F, 0x04, 0x08, 0x10, 0x7F,
98 0x3E, 0x41, 0x41, 0x41, 0x3E,
99 0x7F, 0x09, 0x09, 0x09, 0x06,
100 0x3E, 0x41, 0x51, 0x21, 0x5E,
101 0x7F, 0x09, 0x19, 0x29, 0x46,
102 0x26, 0x49, 0x49, 0x49, 0x32,
103 0x03, 0x01, 0x7F, 0x01, 0x03,
104 0x3F, 0x40, 0x40, 0x40, 0x3F,
105 0x1F, 0x20, 0x40, 0x20, 0x1F,
106 0x3F, 0x40, 0x38, 0x40, 0x3F,
107 0x63, 0x14, 0x08, 0x14, 0x63,
108 0x03, 0x04, 0x78, 0x04, 0x03,
109 0x61, 0x59, 0x49, 0x4D, 0x43,
110 0x00, 0x7F, 0x41, 0x41, 0x41,
111 0x02, 0x04, 0x08, 0x10, 0x20,
112 0x00, 0x41, 0x41, 0x41, 0x7F,
113 0x04, 0x02, 0x01, 0x02, 0x04,
114 0x40, 0x40, 0x40, 0x40, 0x40,
115 0x00, 0x03, 0x07, 0x08, 0x00,
116 0x20, 0x54, 0x54, 0x78, 0x40,
117 0x7F, 0x28, 0x44, 0x44, 0x38,
118 0x38, 0x44, 0x44, 0x44, 0x28,
119 0x38, 0x44, 0x44, 0x28, 0x7F,
120 0x38, 0x54, 0x54, 0x54, 0x18,
121 0x00, 0x08, 0x7E, 0x09, 0x02,
122 0x18, 0xA4, 0xA4, 0x9C, 0x78,
123 0x7F, 0x08, 0x04, 0x04, 0x78,
124 0x00, 0x44, 0x7D, 0x40, 0x00,
125 0x20, 0x40, 0x40, 0x3D, 0x00,
126 0x7F, 0x10, 0x28, 0x44, 0x00,
127 0x00, 0x41, 0x7F, 0x40, 0x00,
128 0x7C, 0x04, 0x78, 0x04, 0x78,
129 0x7C, 0x08, 0x04, 0x04, 0x78,
130 0x38, 0x44, 0x44, 0x44, 0x38,
131 0xFC, 0x18, 0x24, 0x24, 0x18,
132 0x18, 0x24, 0x24, 0x18, 0xFC,
133 0x7C, 0x08, 0x04, 0x04, 0x08,
134 0x48, 0x54, 0x54, 0x54, 0x24,
135 0x04, 0x04, 0x3F, 0x44, 0x24,
136 0x3C, 0x40, 0x40, 0x20, 0x7C,
137 0x1C, 0x20, 0x40, 0x20, 0x1C,
138 0x3C, 0x40, 0x30, 0x40, 0x3C,
139 0x44, 0x28, 0x10, 0x28, 0x44,
140 0x4C, 0x90, 0x90, 0x90, 0x7C,
141 0x44, 0x64, 0x54, 0x4C, 0x44,
142 0x00, 0x08, 0x36, 0x41, 0x00,
143 0x00, 0x00, 0x77, 0x00, 0x00,
144 0x00, 0x41, 0x36, 0x08, 0x00,
145 0x02, 0x01, 0x02, 0x04, 0x02,
146 0x3C, 0x26, 0x23, 0x26, 0x3C,
147 0x1E, 0xA1, 0xA1, 0x61, 0x12,
148 0x3A, 0x40, 0x40, 0x20, 0x7A,
149 0x38, 0x54, 0x54, 0x55, 0x59,
150 0x21, 0x55, 0x55, 0x79, 0x41,
151 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut
152 0x21, 0x55, 0x54, 0x78, 0x40,
153 0x20, 0x54, 0x55, 0x79, 0x40,
154 0x0C, 0x1E, 0x52, 0x72, 0x12,
155 0x39, 0x55, 0x55, 0x55, 0x59,
156 0x39, 0x54, 0x54, 0x54, 0x59,
157 0x39, 0x55, 0x54, 0x54, 0x58,
158 0x00, 0x00, 0x45, 0x7C, 0x41,
159 0x00, 0x02, 0x45, 0x7D, 0x42,
160 0x00, 0x01, 0x45, 0x7C, 0x40,
161 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut
162 0xF0, 0x28, 0x25, 0x28, 0xF0,
163 0x7C, 0x54, 0x55, 0x45, 0x00,
164 0x20, 0x54, 0x54, 0x7C, 0x54,
165 0x7C, 0x0A, 0x09, 0x7F, 0x49,
166 0x32, 0x49, 0x49, 0x49, 0x32,
167 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut
168 0x32, 0x4A, 0x48, 0x48, 0x30,
169 0x3A, 0x41, 0x41, 0x21, 0x7A,
170 0x3A, 0x42, 0x40, 0x20, 0x78,
171 0x00, 0x9D, 0xA0, 0xA0, 0x7D,
172 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut
173 0x3D, 0x40, 0x40, 0x40, 0x3D,
174 0x3C, 0x24, 0xFF, 0x24, 0x24,
175 0x48, 0x7E, 0x49, 0x43, 0x66,
176 0x2B, 0x2F, 0xFC, 0x2F, 0x2B,
177 0xFF, 0x09, 0x29, 0xF6, 0x20,
178 0xC0, 0x88, 0x7E, 0x09, 0x03,
179 0x20, 0x54, 0x54, 0x79, 0x41,
180 0x00, 0x00, 0x44, 0x7D, 0x41,
181 0x30, 0x48, 0x48, 0x4A, 0x32,
182 0x38, 0x40, 0x40, 0x22, 0x7A,
183 0x00, 0x7A, 0x0A, 0x0A, 0x72,
184 0x7D, 0x0D, 0x19, 0x31, 0x7D,
185 0x26, 0x29, 0x29, 0x2F, 0x28,
186 0x26, 0x29, 0x29, 0x29, 0x26,
187 0x30, 0x48, 0x4D, 0x40, 0x20,
188 0x38, 0x08, 0x08, 0x08, 0x08,
189 0x08, 0x08, 0x08, 0x08, 0x38,
190 0x2F, 0x10, 0xC8, 0xAC, 0xBA,
191 0x2F, 0x10, 0x28, 0x34, 0xFA,
192 0x00, 0x00, 0x7B, 0x00, 0x00,
193 0x08, 0x14, 0x2A, 0x14, 0x22,
194 0x22, 0x14, 0x2A, 0x14, 0x08,
195 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code
196 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block
197 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block
198 0x00, 0x00, 0x00, 0xFF, 0x00,
199 0x10, 0x10, 0x10, 0xFF, 0x00,
200 0x14, 0x14, 0x14, 0xFF, 0x00,
201 0x10, 0x10, 0xFF, 0x00, 0xFF,
202 0x10, 0x10, 0xF0, 0x10, 0xF0,
203 0x14, 0x14, 0x14, 0xFC, 0x00,
204 0x14, 0x14, 0xF7, 0x00, 0xFF,
205 0x00, 0x00, 0xFF, 0x00, 0xFF,
206 0x14, 0x14, 0xF4, 0x04, 0xFC,
207 0x14, 0x14, 0x17, 0x10, 0x1F,
208 0x10, 0x10, 0x1F, 0x10, 0x1F,
209 0x14, 0x14, 0x14, 0x1F, 0x00,
210 0x10, 0x10, 0x10, 0xF0, 0x00,
211 0x00, 0x00, 0x00, 0x1F, 0x10,
212 0x10, 0x10, 0x10, 0x1F, 0x10,
213 0x10, 0x10, 0x10, 0xF0, 0x10,
214 0x00, 0x00, 0x00, 0xFF, 0x10,
215 0x10, 0x10, 0x10, 0x10, 0x10,
216 0x10, 0x10, 0x10, 0xFF, 0x10,
217 0x00, 0x00, 0x00, 0xFF, 0x14,
218 0x00, 0x00, 0xFF, 0x00, 0xFF,
219 0x00, 0x00, 0x1F, 0x10, 0x17,
220 0x00, 0x00, 0xFC, 0x04, 0xF4,
221 0x14, 0x14, 0x17, 0x10, 0x17,
222 0x14, 0x14, 0xF4, 0x04, 0xF4,
223 0x00, 0x00, 0xFF, 0x00, 0xF7,
224 0x14, 0x14, 0x14, 0x14, 0x14,
225 0x14, 0x14, 0xF7, 0x00, 0xF7,
226 0x14, 0x14, 0x14, 0x17, 0x14,
227 0x10, 0x10, 0x1F, 0x10, 0x1F,
228 0x14, 0x14, 0x14, 0xF4, 0x14,
229 0x10, 0x10, 0xF0, 0x10, 0xF0,
230 0x00, 0x00, 0x1F, 0x10, 0x1F,
231 0x00, 0x00, 0x00, 0x1F, 0x14,
232 0x00, 0x00, 0x00, 0xFC, 0x14,
233 0x00, 0x00, 0xF0, 0x10, 0xF0,
234 0x10, 0x10, 0xFF, 0x10, 0xFF,
235 0x14, 0x14, 0x14, 0xFF, 0x14,
236 0x10, 0x10, 0x10, 0x1F, 0x00,
237 0x00, 0x00, 0x00, 0xF0, 0x10,
238 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
239 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
240 0xFF, 0xFF, 0xFF, 0x00, 0x00,
241 0x00, 0x00, 0x00, 0xFF, 0xFF,
242 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
243 0x38, 0x44, 0x44, 0x38, 0x44,
244 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta
245 0x7E, 0x02, 0x02, 0x06, 0x06,
246 0x02, 0x7E, 0x02, 0x7E, 0x02,
247 0x63, 0x55, 0x49, 0x41, 0x63,
248 0x38, 0x44, 0x44, 0x3C, 0x04,
249 0x40, 0x7E, 0x20, 0x1E, 0x20,
250 0x06, 0x02, 0x7E, 0x02, 0x02,
251 0x99, 0xA5, 0xE7, 0xA5, 0x99,
252 0x1C, 0x2A, 0x49, 0x2A, 0x1C,
253 0x4C, 0x72, 0x01, 0x72, 0x4C,
254 0x30, 0x4A, 0x4D, 0x4D, 0x30,
255 0x30, 0x48, 0x78, 0x48, 0x30,
256 0xBC, 0x62, 0x5A, 0x46, 0x3D,
257 0x3E, 0x49, 0x49, 0x49, 0x00,
258 0x7E, 0x01, 0x01, 0x01, 0x7E,
259 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
260 0x44, 0x44, 0x5F, 0x44, 0x44,
261 0x40, 0x51, 0x4A, 0x44, 0x40,
262 0x40, 0x44, 0x4A, 0x51, 0x40,
263 0x00, 0x00, 0xFF, 0x01, 0x03,
264 0xE0, 0x80, 0xFF, 0x00, 0x00,
265 0x08, 0x08, 0x6B, 0x6B, 0x08,
266 0x36, 0x12, 0x36, 0x24, 0x36,
267 0x06, 0x0F, 0x09, 0x0F, 0x06,
268 0x00, 0x00, 0x18, 0x18, 0x00,
269 0x00, 0x00, 0x10, 0x10, 0x00,
270 0x30, 0x40, 0xFF, 0x01, 0x01,
271 0x00, 0x1F, 0x01, 0x01, 0x1E,
272 0x00, 0x19, 0x1D, 0x17, 0x12,
273 0x00, 0x3C, 0x3C, 0x3C, 0x3C,
274 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP
275};
276#endif // FONT5X7_H
diff --git a/keyboards/lets_split/i2c.h b/keyboards/lets_split/i2c.h
index 08ce4b009..c15b6bc50 100644
--- a/keyboards/lets_split/i2c.h
+++ b/keyboards/lets_split/i2c.h
@@ -16,7 +16,7 @@
16#define SLAVE_BUFFER_SIZE 0x10 16#define SLAVE_BUFFER_SIZE 0x10
17 17
18// i2c SCL clock frequency 18// i2c SCL clock frequency
19#define SCL_CLOCK 100000L 19#define SCL_CLOCK 400000L
20 20
21extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; 21extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
22 22
@@ -28,4 +28,22 @@ uint8_t i2c_master_read(int);
28void i2c_reset_state(void); 28void i2c_reset_state(void);
29void i2c_slave_init(uint8_t address); 29void i2c_slave_init(uint8_t address);
30 30
31
32static inline unsigned char i2c_start_read(unsigned char addr) {
33 return i2c_master_start((addr << 1) | I2C_READ);
34}
35
36static inline unsigned char i2c_start_write(unsigned char addr) {
37 return i2c_master_start((addr << 1) | I2C_WRITE);
38}
39
40// from SSD1306 scrips
41extern unsigned char i2c_rep_start(unsigned char addr);
42extern void i2c_start_wait(unsigned char addr);
43extern unsigned char i2c_readAck(void);
44extern unsigned char i2c_readNak(void);
45extern unsigned char i2c_read(unsigned char ack);
46
47#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
48
31#endif 49#endif
diff --git a/keyboards/lets_split/keymaps/OLED_sample/Makefile b/keyboards/lets_split/keymaps/OLED_sample/Makefile
new file mode 100644
index 000000000..90616d1f1
--- /dev/null
+++ b/keyboards/lets_split/keymaps/OLED_sample/Makefile
@@ -0,0 +1,25 @@
1
2# Build Options
3# change to "no" to disable the options, or define them in the Makefile in
4# the appropriate keymap folder that will get included automatically
5#
6BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
7MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
8EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
9CONSOLE_ENABLE = no # Console for debug(+400)
10COMMAND_ENABLE = no # Commands for debug and configuration
11NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
12BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
13MIDI_ENABLE = no # MIDI controls
14AUDIO_ENABLE = no # Audio output on port C6
15UNICODE_ENABLE = no # Unicode
16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
17RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
18ONEHAND_ENABLE = no # Enable one-hand typing
19
20# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
21SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
22
23ifndef QUANTUM_DIR
24 include ../../../../Makefile
25endif \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/OLED_sample/config.h b/keyboards/lets_split/keymaps/OLED_sample/config.h
new file mode 100644
index 000000000..353ea368c
--- /dev/null
+++ b/keyboards/lets_split/keymaps/OLED_sample/config.h
@@ -0,0 +1,45 @@
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#define USE_I2C
19//#define USE_SERIAL
20//#define MASTER_RIGHT
21#define FLIP_HALF
22
23#define SSD1306OLED
24
25
26#define PREVENT_STUCK_MODIFIERS
27#define TAPPING_FORCE_HOLD
28#define TAPPING_TERM 100
29
30#undef RGBLED_NUM
31#define RGBLIGHT_ANIMATIONS
32#define RGBLED_NUM 6
33#define RGBLIGHT_HUE_STEP 10
34#define RGBLIGHT_SAT_STEP 17
35#define RGBLIGHT_VAL_STEP 17
36
37
38
39
40#ifdef SUBPROJECT_rev1
41 #include "../../rev1/config.h"
42#endif
43#ifdef SUBPROJECT_rev2
44 #include "../../rev2/config.h"
45#endif \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/OLED_sample/keymap.c b/keyboards/lets_split/keymaps/OLED_sample/keymap.c
new file mode 100644
index 000000000..072b825ab
--- /dev/null
+++ b/keyboards/lets_split/keymaps/OLED_sample/keymap.c
@@ -0,0 +1,356 @@
1#include "lets_split.h"
2#include "bootloader.h"
3#include "action_layer.h"
4#include "eeconfig.h"
5#include "tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/Peripheral/TWI.h"
6#ifdef AUDIO_ENABLE
7 #include "audio.h"
8#endif
9
10extern keymap_config_t keymap_config;
11
12//Following line allows macro to read current RGB settings
13extern rgblight_config_t rgblight_config;
14
15
16// Each layer gets a name for readability, which is then used in the keymap matrix below.
17// The underscores don't mean anything - you can have a layer called STUFF or any other name.
18// Layer names don't all need to be of the same length, obviously, and you can also skip them
19// entirely and just use numbers.
20#define _QWERTY 0
21#define _COLEMAK 1
22#define _DVORAK 2
23#define _LOWER 3
24#define _RAISE 4
25#define _ADJUST 16
26
27enum custom_keycodes {
28 QWERTY = SAFE_RANGE,
29 COLEMAK,
30 DVORAK,
31 LOWER,
32 RAISE,
33 ADJUST,
34 BACKLIT,
35 RGBLED_TOGGLE,
36 RGBLED_STEP_MODE,
37 RGBLED_INCREASE_HUE,
38 RGBLED_DECREASE_HUE,
39 RGBLED_INCREASE_SAT,
40 RGBLED_DECREASE_SAT,
41 RGBLED_INCREASE_VAL,
42 RGBLED_DECREASE_VAL,
43};
44
45enum macro_keycodes {
46 KC_SAMPLEMACRO,
47};
48
49
50// Fillers to make layering more clear
51#define _______ KC_TRNS
52#define XXXXXXX KC_NO
53//Macros
54#define M_SAMPLE M(KC_SAMPLEMACRO)
55
56const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
57
58/* Qwerty
59 * ,-----------------------------------------------------------------------------------.
60 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
61 * |------+------+------+------+------+-------------+------+------+------+------+------|
62 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
63 * |------+------+------+------+------+------|------+------+------+------+------+------|
64 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
65 * |------+------+------+------+------+------+------+------+------+------+------+------|
66 * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
67 * `-----------------------------------------------------------------------------------'
68 */
69[_QWERTY] = KEYMAP( \
70 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
71 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
72 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
73 ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
74),
75
76/* Colemak
77 * ,-----------------------------------------------------------------------------------.
78 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
79 * |------+------+------+------+------+-------------+------+------+------+------+------|
80 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
81 * |------+------+------+------+------+------|------+------+------+------+------+------|
82 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
83 * |------+------+------+------+------+------+------+------+------+------+------+------|
84 * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
85 * `-----------------------------------------------------------------------------------'
86 */
87[_COLEMAK] = KEYMAP( \
88 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
89 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
90 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
91 ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
92),
93
94/* Dvorak
95 * ,-----------------------------------------------------------------------------------.
96 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
97 * |------+------+------+------+------+-------------+------+------+------+------+------|
98 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
99 * |------+------+------+------+------+------|------+------+------+------+------+------|
100 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
101 * |------+------+------+------+------+------+------+------+------+------+------+------|
102 * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
103 * `-----------------------------------------------------------------------------------'
104 */
105[_DVORAK] = KEYMAP( \
106 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
107 KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
108 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
109 ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
110),
111
112/* Lower
113 * ,-----------------------------------------------------------------------------------.
114 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
115 * |------+------+------+------+------+-------------+------+------+------+------+------|
116 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
117 * |------+------+------+------+------+------|------+------+------+------+------+------|
118 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
119 * |------+------+------+------+------+------+------+------+------+------+------+------|
120 * | | | | | | | | Next | Vol- | Vol+ | Play |
121 * `-----------------------------------------------------------------------------------'
122 */
123[_LOWER] = KEYMAP( \
124 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
125 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
126 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
127 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
128),
129
130/* Raise
131 * ,-----------------------------------------------------------------------------------.
132 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
133 * |------+------+------+------+------+-------------+------+------+------+------+------|
134 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
135 * |------+------+------+------+------+------|------+------+------+------+------+------|
136 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
137 * |------+------+------+------+------+------+------+------+------+------+------+------|
138 * | | | | | | | | Next | Vol- | Vol+ | Play |
139 * `-----------------------------------------------------------------------------------'
140 */
141[_RAISE] = KEYMAP( \
142 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
143 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
144 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
145 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
146),
147
148/* Adjust (Lower + Raise)
149 * ,-----------------------------------------------------------------------------------.
150 * | | Reset| | | | | | | | | | Del |
151 * |------+------+------+------+------+-------------+------+------+------+------+------|
152 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
153 * |------+------+------+------+------+------|------+------+------+------+------+------|
154 * | | | | | | | | | | | | |
155 * |------+------+------+------+------+------+------+------+------+------+------+------|
156 * | | | | | | | | | | | |
157 * `-----------------------------------------------------------------------------------'
158 */
159[_ADJUST] = KEYMAP( \
160 _______, RESET, _______, M_SAMPLE, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
161 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
162 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
163 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
164)
165
166
167};
168
169
170#ifdef AUDIO_ENABLE
171
172float tone_startup[][2] = SONG(STARTUP_SOUND);
173float tone_qwerty[][2] = SONG(QWERTY_SOUND);
174float tone_dvorak[][2] = SONG(DVORAK_SOUND);
175float tone_colemak[][2] = SONG(COLEMAK_SOUND);
176float tone_plover[][2] = SONG(PLOVER_SOUND);
177float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
178float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
179float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
180#endif
181
182// define variables for reactive RGB
183bool TOG_STATUS = false;
184int RGB_current_mode;
185
186void persistant_default_layer_set(uint16_t default_layer) {
187 eeconfig_update_default_layer(default_layer);
188 default_layer_set(default_layer);
189}
190
191// Setting ADJUST layer RGB back to default
192void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
193 if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
194 rgblight_mode(RGB_current_mode);
195 layer_on(layer3);
196 } else {
197 layer_off(layer3);
198 }
199}
200
201bool process_record_user(uint16_t keycode, keyrecord_t *record) {
202 switch (keycode) {
203 case QWERTY:
204 if (record->event.pressed) {
205 #ifdef AUDIO_ENABLE
206 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
207 #endif
208 persistant_default_layer_set(1UL<<_QWERTY);
209 }
210 return false;
211 break;
212 case COLEMAK:
213 if (record->event.pressed) {
214 #ifdef AUDIO_ENABLE
215 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
216 #endif
217 persistant_default_layer_set(1UL<<_COLEMAK);
218 }
219 return false;
220 break;
221 case DVORAK:
222 if (record->event.pressed) {
223 #ifdef AUDIO_ENABLE
224 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
225 #endif
226 persistant_default_layer_set(1UL<<_DVORAK);
227 }
228 return false;
229 break;
230 case LOWER:
231 if (record->event.pressed) {
232 //not sure how to have keyboard check mode and set it to a variable, so my work around
233 //uses another variable that would be set to true after the first time a reactive key is pressed.
234 if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
235 } else {
236 TOG_STATUS = !TOG_STATUS;
237 rgblight_mode(16);
238 }
239 layer_on(_LOWER);
240 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
241 } else {
242 rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
243 TOG_STATUS = false;
244 layer_off(_LOWER);
245 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
246 }
247 return false;
248 break;
249 case RAISE:
250 if (record->event.pressed) {
251 //not sure how to have keyboard check mode and set it to a variable, so my work around
252 //uses another variable that would be set to true after the first time a reactive key is pressed.
253 if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
254 } else {
255 TOG_STATUS = !TOG_STATUS;
256 rgblight_mode(15);
257 }
258 layer_on(_RAISE);
259 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
260 } else {
261 rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
262 layer_off(_RAISE);
263 TOG_STATUS = false;
264 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
265 }
266 return false;
267 break;
268 case BACKLIT:
269 if (record->event.pressed) {
270 register_code(KC_RSFT);
271 #ifdef BACKLIGHT_ENABLE
272 backlight_step();
273 #endif
274 } else {
275 unregister_code(KC_RSFT);
276 }
277 return false;
278 break;
279 //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
280 case RGB_MOD:
281 if (record->event.pressed) {
282 rgblight_mode(RGB_current_mode);
283 rgblight_step();
284 RGB_current_mode = rgblight_config.mode;
285 }
286 return false;
287 break;
288 }
289 return true;
290}
291
292void matrix_init_user(void) {
293 #ifdef AUDIO_ENABLE
294 startup_user();
295 #endif
296 RGB_current_mode = rgblight_config.mode;
297}
298
299//SSD1306 OLED init and update loop, make sure to add #define SSD1306OLED in config.h
300#ifdef SSD1306OLED
301void matrix_master_OLED_init (void) {
302 TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
303 iota_gfx_init(); // turns on the display
304}
305
306void matrix_scan_user(void) {
307 iota_gfx_task(); // this is what updates the display continuously
308}
309#endif
310
311#ifdef AUDIO_ENABLE
312
313void startup_user()
314{
315 _delay_ms(20); // gets rid of tick
316 PLAY_NOTE_ARRAY(tone_startup, false, 0);
317}
318
319void shutdown_user()
320{
321 PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
322 _delay_ms(150);
323 stop_all_notes();
324}
325
326void music_on_user(void)
327{
328 music_scale_user();
329}
330
331void music_scale_user(void)
332{
333 PLAY_NOTE_ARRAY(music_scale, false, 0);
334}
335
336#endif
337
338/*
339 * Macro definition
340 */
341const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
342{
343 if (!eeconfig_is_enabled()) {
344 eeconfig_init();
345 }
346
347 switch (id) {
348 case KC_SAMPLEMACRO:
349 if (record->event.pressed){
350 return MACRO (I(10), T(H), T(E), T(L), T(L), T(O), T(SPACE), T(W), T(O), T(R), T(L), T(D), END);
351 }
352
353 }
354
355 return MACRO_NONE;
356}
diff --git a/keyboards/lets_split/keymaps/OLED_sample/readme.md b/keyboards/lets_split/keymaps/OLED_sample/readme.md
new file mode 100644
index 000000000..02888855b
--- /dev/null
+++ b/keyboards/lets_split/keymaps/OLED_sample/readme.md
@@ -0,0 +1,25 @@
1SSD1306 OLED Display via I2C
2======
3
4Features
5--------
6
7Some features supported by the firmware:
8
9
10* I2C connection between the two halves is required as the OLED display will use this connection as well. Note this
11 requires pull-up resistors on the data and clock lines.
12* OLED display will connect from either side
13
14
15Wiring
16------
17
18
19Work in progress...
20
21
22OLED Configuration
23-------------------------------
24
25Work in progress...
diff --git a/keyboards/lets_split/keymaps/hexwire/Makefile b/keyboards/lets_split/keymaps/hexwire/Makefile
new file mode 100644
index 000000000..1e5761278
--- /dev/null
+++ b/keyboards/lets_split/keymaps/hexwire/Makefile
@@ -0,0 +1,5 @@
1RGBLIGHT_ENABLE = yes
2
3ifndef QUANTUM_DIR
4 include ../../../../Makefile
5endif
diff --git a/keyboards/lets_split/keymaps/hexwire/README.md b/keyboards/lets_split/keymaps/hexwire/README.md
new file mode 100644
index 000000000..edf2b6627
--- /dev/null
+++ b/keyboards/lets_split/keymaps/hexwire/README.md
@@ -0,0 +1,108 @@
1Hexwire's Let's Split Layout
2============================
3
4### Changes from default layout
5
6- Main layer
7 - The right space bar key has been changed to backspace, as I only hit space with my left thumb
8 - Backtick is at the lower right and also serves goes to the 3rd function layer when held
9 - Enter key acts as shift when held
10 - Escape key acts as control when held
11 - Minus key at upper right
12- Lower layer
13 - Numbers are on the lower layer, to make it easier to use a numpad on the right hand
14 - Arrow keys
15 - Straight and curly brackets in the middle two columns
16 - Screenshot keys for MacOS
17- Upper layer
18 - Symbols are on the upper layer
19 - Media keys
20 - Page Up/Down, Home/End
21- 3rd function layer
22 - Function keys
23
24## Layouts
25
26### Qwerty
27
28```
29,----+----+----+----+----+----. ,----+----+----+----+----+----.
30 TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
31|----+----+----+----+----+----| |----+----+----+----+----+----|
32 X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
33|----+----+----+----+----+----| |----+----+----+----+----+----|
34 LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
35|----+----+----+----+----+----| |----+----+----+----+----+----|
36 X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT
37`----+----+----+----+----+----' `----+----+----+----+----+----'
38```
39
40### Colemak
41
42```
43,----+----+----+----+----+----. ,----+----+----+----+----+----.
44 TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS,
45|----+----+----+----+----+----| |----+----+----+----+----+----|
46 X0 , A , R , S , T , D , H , N , E , I , O ,QUOT,
47|----+----+----+----+----+----| |----+----+----+----+----+----|
48 LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH, X4 ,
49|----+----+----+----+----+----| |----+----+----+----+----+----|
50 X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT
51`----+----+----+----+----+----' `----+----+----+----+----+----'
52```
53
54### Dvorak
55
56```
57,----+----+----+----+----+----. ,----+----+----+----+----+----.
58 TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS,
59|----+----+----+----+----+----| |----+----+----+----+----+----|
60 X0 , A , O , E , U , I , D , H , R , N , S ,SLSH,
61|----+----+----+----+----+----| |----+----+----+----+----+----|
62 LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 ,
63|----+----+----+----+----+----| |----+----+----+----+----+----|
64 X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT
65`----+----+----+----+----+----' `----+----+----+----+----+----'
66```
67
68### Lower
69
70```
71,----+----+----+----+----+----. ,----+----+----+----+----+----.
72 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
73|----+----+----+----+----+----| |----+----+----+----+----+----|
74 DEL ,CAPP,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE,
75|----+----+----+----+----+----| |----+----+----+----+----+----|
76 ,CPYP, , ,DOWN,LCBR, RCBR, P1 , P2 , P3 ,MINS, ,
77|----+----+----+----+----+----| |----+----+----+----+----+----|
78 , , , , , , DEL , , P0 ,PDOT, ,
79`----+----+----+----+----+----' `----+----+----+----+----+----'
80```
81
82### Raise
83
84```
85,----+----+----+----+----+----. ,----+----+----+----+----+----.
86 ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
87|----+----+----+----+----+----| |----+----+----+----+----+----|
88 DEL ,MPRV,MNXT,VOLU,PGUP,UNDS, EQL ,HOME, , , ,BSLS,
89|----+----+----+----+----+----| |----+----+----+----+----+----|
90 MUTE,MSTP,MPLY,VOLD,PGDN,MINS, PLUS,END , , , , ,
91|----+----+----+----+----+----| |----+----+----+----+----+----|
92 , , , , , , , , , , ,
93`----+----+----+----+----+----' `----+----+----+----+----+----'
94```
95
96### 3rd function layer
97
98```
99,----+----+----+----+----+----. ,----+----+----+----+----+----.
100 F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
101|----+----+----+----+----+----| |----+----+----+----+----+----|
102 , , , , , , , , , , , ,
103|----+----+----+----+----+----| |----+----+----+----+----+----|
104 , , , , , , , , , , , ,
105|----+----+----+----+----+----| |----+----+----+----+----+----|
106 , , , , , , , , , , ,
107`----+----+----+----+----+----' `----+----+----+----+----+----'
108```
diff --git a/keyboards/lets_split/keymaps/hexwire/config.h b/keyboards/lets_split/keymaps/hexwire/config.h
new file mode 100644
index 000000000..9c8c6d7f4
--- /dev/null
+++ b/keyboards/lets_split/keymaps/hexwire/config.h
@@ -0,0 +1,70 @@
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#define USE_SERIAL
20
21#define TAPPING_TERM 150
22
23#undef RGBLED_NUM
24#define RGBLIGHT_ANIMATIONS
25#define RGBLED_NUM 8
26#define RGBLIGHT_HUE_STEP 8
27#define RGBLIGHT_SAT_STEP 8
28#define RGBLIGHT_VAL_STEP 8
29
30#ifdef SUBPROJECT_rev1
31 #include "../../rev1/config.h"
32 #define COMPACT_KEYMAP( \
33 k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
34 k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
35 k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
36 k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
37 ) \
38 { \
39 { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05 }, \
40 { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15 }, \
41 { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25 }, \
42 { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35 }, \
43 { KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45 }, \
44 { KC_##k50, KC_##k51, KC_##k52, KC_##k53, KC_##k54, KC_##k55 }, \
45 { KC_##k60, KC_##k61, KC_##k62, KC_##k63, KC_##k64, KC_##k65 }, \
46 { KC_##k70, KC_##k71, KC_##k72, KC_##k73, KC_##k74, KC_##k75 } \
47 }
48#endif
49#ifdef SUBPROJECT_rev2
50 #include "../../rev2/config.h"
51 #define COMPACT_KEYMAP( \
52 k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \
53 k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \
54 k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \
55 k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \
56 ) \
57 { \
58 { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05 }, \
59 { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15 }, \
60 { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25 }, \
61 { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35 }, \
62 { KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45 }, \
63 { KC_##k50, KC_##k51, KC_##k52, KC_##k53, KC_##k54, KC_##k55 }, \
64 { KC_##k60, KC_##k61, KC_##k62, KC_##k63, KC_##k64, KC_##k65 }, \
65 { KC_##k70, KC_##k71, KC_##k72, KC_##k73, KC_##k74, KC_##k75 } \
66 }
67#endif
68#ifdef SUBPROJECT_rev2fliphalf
69 #include "../../rev2fliphalf/config.h"
70#endif
diff --git a/keyboards/lets_split/keymaps/hexwire/keymap.c b/keyboards/lets_split/keymaps/hexwire/keymap.c
new file mode 100644
index 000000000..f8370490d
--- /dev/null
+++ b/keyboards/lets_split/keymaps/hexwire/keymap.c
@@ -0,0 +1,205 @@
1#include "lets_split.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7#define _QWERTY 0
8#define _COLEMAK 1
9#define _DVORAK 2
10#define _LOWER 3
11#define _RAISE 4
12#define _FN3 5
13#define _FN4 6
14#define _ADJUST 16
15
16enum custom_keycodes {
17 QWERTY = SAFE_RANGE,
18 COLEMAK,
19 DVORAK,
20 LOWER,
21 RAISE,
22 FN3,
23 FN4,
24 ADJUST,
25};
26
27#define KC_ KC_TRNS
28#define _______ KC_TRNS
29
30#define KC_CAPW LGUI(LSFT(KC_3)) // Capture whole screen
31#define KC_CPYW LGUI(LSFT(LCTL(KC_3))) // Copy whole screen
32#define KC_CAPP LGUI(LSFT(KC_4)) // Capture portion of screen
33#define KC_CPYP LGUI(LSFT(LCTL(KC_4))) // Copy portion of screen
34#define KC_X0 MT(MOD_LCTL, KC_ESC)
35#define KC_X1 LOWER
36#define KC_X2 RAISE
37#define KC_X3 LT(_FN3, KC_GRV)
38#define KC_X4 MT(MOD_LSFT, KC_ENT)
39
40const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
41
42 [_QWERTY] = COMPACT_KEYMAP(
43 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
44 TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
45 //|----+----+----+----+----+----| |----+----+----+----+----+----|
46 X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
47 //|----+----+----+----+----+----| |----+----+----+----+----+----|
48 LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
49 //|----+----+----+----+----+----| |----+----+----+----+----+----|
50 X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT
51 //`----+----+----+----+----+----' `----+----+----+----+----+----'
52 ),
53
54 [_COLEMAK] = COMPACT_KEYMAP(
55 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
56 TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS,
57 //|----+----+----+----+----+----| |----+----+----+----+----+----|
58 X0 , A , R , S , T , D , H , N , E , I , O ,QUOT,
59 //|----+----+----+----+----+----| |----+----+----+----+----+----|
60 LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH, X4 ,
61 //|----+----+----+----+----+----| |----+----+----+----+----+----|
62 X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT
63 //`----+----+----+----+----+----' `----+----+----+----+----+----'
64 ),
65
66 [_DVORAK] = COMPACT_KEYMAP(
67 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
68 TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS,
69 //|----+----+----+----+----+----| |----+----+----+----+----+----|
70 X0 , A , O , E , U , I , D , H , R , N , S ,SLSH,
71 //|----+----+----+----+----+----| |----+----+----+----+----+----|
72 LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 ,
73 //|----+----+----+----+----+----| |----+----+----+----+----+----|
74 X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT
75 //`----+----+----+----+----+----' `----+----+----+----+----+----'
76 ),
77
78 [_LOWER] = COMPACT_KEYMAP(
79 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
80 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
81 //|----+----+----+----+----+----| |----+----+----+----+----+----|
82 DEL ,CAPP,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE,
83 //|----+----+----+----+----+----| |----+----+----+----+----+----|
84 ,CPYP, , ,DOWN,LCBR, RCBR, P1 , P2 , P3 ,MINS, ,
85 //|----+----+----+----+----+----| |----+----+----+----+----+----|
86 , , , , , , DEL , , P0 ,PDOT, ,
87 //`----+----+----+----+----+----' `----+----+----+----+----+----'
88 ),
89
90 [_RAISE] = COMPACT_KEYMAP(
91 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
92 ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
93 //|----+----+----+----+----+----| |----+----+----+----+----+----|
94 DEL ,MPRV,MNXT,VOLU,PGUP,UNDS, EQL ,HOME, , , ,BSLS,
95 //|----+----+----+----+----+----| |----+----+----+----+----+----|
96 MUTE,MSTP,MPLY,VOLD,PGDN,MINS, PLUS,END , , , , ,
97 //|----+----+----+----+----+----| |----+----+----+----+----+----|
98 , , , , , , , , , , ,
99 //`----+----+----+----+----+----' `----+----+----+----+----+----'
100 ),
101
102 [_FN3] = COMPACT_KEYMAP(
103 //,----+----+----+----+----+----. ,----+----+----+----+----+----.
104 F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
105 //|----+----+----+----+----+----| |----+----+----+----+----+----|
106 , , , , , , , , , , , ,
107 //|----+----+----+----+----+----| |----+----+----+----+----+----|
108 , , , , , , , , , , , ,
109 //|----+----+----+----+----+----| |----+----+----+----+----+----|
110 , , , , , , , , , , ,
111 //`----+----+----+----+----+----' `----+----+----+----+----+----'
112 ),
113
114/* Adjust (Lower + Raise)
115 * ,-----------------------------------------------------------------------------------.
116 * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | |
117 * |------+------+------+------+------+-------------+------+------+------+------+------|
118 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
119 * |------+------+------+------+------+------|------+------+------+------+------+------|
120 * | | | | | | | | | | | | |
121 * |------+------+------+------+------+------+------+------+------+------+------+------|
122 * | | | | | | | | | | | |
123 * `-----------------------------------------------------------------------------------'
124 */
125 [_ADJUST] = KEYMAP( \
126 _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
127 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
128 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
129 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
130 )
131
132
133};
134
135#ifdef AUDIO_ENABLE
136float tone_qwerty[][2] = SONG(QWERTY_SOUND);
137float tone_dvorak[][2] = SONG(DVORAK_SOUND);
138float tone_colemak[][2] = SONG(COLEMAK_SOUND);
139#endif
140
141void persistant_default_layer_set(uint16_t default_layer) {
142 eeconfig_update_default_layer(default_layer);
143 default_layer_set(default_layer);
144}
145
146bool process_record_user(uint16_t keycode, keyrecord_t *record) {
147 switch (keycode) {
148 case QWERTY:
149 if (record->event.pressed) {
150 #ifdef AUDIO_ENABLE
151 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
152 #endif
153 persistant_default_layer_set(1UL<<_QWERTY);
154 }
155 return false;
156 break;
157 case COLEMAK:
158 if (record->event.pressed) {
159 #ifdef AUDIO_ENABLE
160 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
161 #endif
162 persistant_default_layer_set(1UL<<_COLEMAK);
163 }
164 return false;
165 break;
166 case DVORAK:
167 if (record->event.pressed) {
168 #ifdef AUDIO_ENABLE
169 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
170 #endif
171 persistant_default_layer_set(1UL<<_DVORAK);
172 }
173 return false;
174 break;
175 case LOWER:
176 if (record->event.pressed) {
177 layer_on(_LOWER);
178 update_tri_layer(_LOWER, _RAISE, _ADJUST);
179 } else {
180 layer_off(_LOWER);
181 update_tri_layer(_LOWER, _RAISE, _ADJUST);
182 }
183 return false;
184 break;
185 case RAISE:
186 if (record->event.pressed) {
187 layer_on(_RAISE);
188 update_tri_layer(_LOWER, _RAISE, _ADJUST);
189 } else {
190 layer_off(_RAISE);
191 update_tri_layer(_LOWER, _RAISE, _ADJUST);
192 }
193 return false;
194 break;
195 case ADJUST:
196 if (record->event.pressed) {
197 layer_on(_ADJUST);
198 } else {
199 layer_off(_ADJUST);
200 }
201 return false;
202 break;
203 }
204 return true;
205}
diff --git a/keyboards/lets_split/keymaps/smt/config.h b/keyboards/lets_split/keymaps/smt/config.h
new file mode 100644
index 000000000..ba271d1ac
--- /dev/null
+++ b/keyboards/lets_split/keymaps/smt/config.h
@@ -0,0 +1,34 @@
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#define USE_SERIAL
20
21#define MASTER_LEFT
22// #define _MASTER_RIGHT
23// #define EE_HANDS
24
25
26#ifdef SUBPROJECT_rev1
27 #include "../../rev1/config.h"
28#endif
29#ifdef SUBPROJECT_rev2
30 #include "../../rev2/config.h"
31#endif
32#ifdef SUBPROJECT_rev2fliphalf
33 #include "../../rev2fliphalf/config.h"
34#endif
diff --git a/keyboards/lets_split/keymaps/smt/keymap.c b/keyboards/lets_split/keymaps/smt/keymap.c
new file mode 100644
index 000000000..c4bdb7ebc
--- /dev/null
+++ b/keyboards/lets_split/keymaps/smt/keymap.c
@@ -0,0 +1,219 @@
1#include "lets_split.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _QWERTY 0
12#define _COLEMAK 1
13#define _DVORAK 2
14#define _LOWER 3
15#define _RAISE 4
16#define _ADJUST 16
17
18enum custom_keycodes {
19 QWERTY = SAFE_RANGE,
20 COLEMAK,
21 DVORAK,
22 LOWER,
23 RAISE,
24 ADJUST,
25};
26
27// Fillers to make layering more clear
28#define _______ KC_TRNS
29#define XXXXXXX KC_NO
30
31// Custom macros
32#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
33#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
34#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
35#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift)
36
37const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38
39/* Qwerty
40 * ,-----------------------------------------. ,-----------------------------------------.
41 * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
42 * |------+------+------+------+------+------| |------+------+------+------+------+------|
43 * | Esc | A | S | D | F | G | | H | J | K | L | ; | " |
44 * |------+------+------+------+------+------| |------+------+------+------+------+------|
45 * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
46 * |------+------+------+------+------+------| |------+------+------+------+------+------|
47 * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right |
48 * `-----------------------------------------' `-----------------------------------------'
49 */
50[_QWERTY] = KEYMAP( \
51 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
52 CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
53 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \
54 MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
55),
56
57/* Colemak
58 * ,-----------------------------------------. ,-----------------------------------------.
59 * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
60 * |------+------+------+------+------+------| |------+------+------+------+------+------|
61 * | Esc | A | R | S | T | D | | H | N | E | I | O | " |
62 * |------+------+------+------+------+------| |------+------+------+------+------+------|
63 * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
64 * |------+------+------+------+------+------| |------+------+------+------+------+------|
65 * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right |
66 * `-----------------------------------------' `-----------------------------------------'
67 */
68[_COLEMAK] = KEYMAP( \
69 HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
70 CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
71 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \
72 MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
73),
74
75/* Dvorak
76 * ,-----------------------------------------. ,-----------------------------------------.
77 * | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp |
78 * |------+------+------+------+------+------| |------+------+------+------+------+------|
79 * | Esc | A | O | E | U | I | | D | H | T | N | S | - |
80 * |------+------+------+------+------+------| |------+------+------+------+------+------|
81 * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
82 * |------+------+------+------+------+------| |------+------+------+------+------+------|
83 * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right |
84 * `-----------------------------------------' `-----------------------------------------'
85 */
86[_DVORAK] = KEYMAP( \
87 HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
88 CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
89 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \
90 MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
91),
92
93/* Lower
94 * ,-----------------------------------------. ,-----------------------------------------.
95 * | 0 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
96 * |------+------+------+------+------+------| |------+------+------+------+------+------|
97 * | $ | F1 | F2 | F3 | F4 | F5 | | F6 | 4 | 5 | 6 | | |
98 * |------+------+------+------+------+------| |------+------+------+------+------+------|
99 * | | F7 | F8 | F9 | F10 | F11 | | F12 | 1 | 2 | 3 | | |
100 * |------+------+------+------+------+------| |------+------+------+------+------+------|
101 * | | | | | | | | | | Next | Vol- | Vol+ | Play |
102 * `-----------------------------------------' `-----------------------------------------'
103 */
104[_LOWER] = KEYMAP( \
105 ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
106 CTL_T(KC_DLR), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______, \
107 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, _______, _______, \
108 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
109),
110
111/* Raise
112 * ,-----------------------------------------. ,-----------------------------------------.
113 * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del |
114 * |------+------+------+------+------+------| |------+------+------+------+------+------|
115 * | | | | | | | | _ | ? | + | { | } | | |
116 * |------+------+------+------+------+------| |------+------+------+------+------+------|
117 * | | | | | | | | - | / | = | [ | ] | \ |
118 * |------+------+------+------+------+------| |------+------+------+------+------+------|
119 * | | | | | | | | | | Home |PageDn|PageUp| End |
120 * `-----------------------------------------' `-----------------------------------------'
121 */
122[_RAISE] = KEYMAP( \
123 ALL_T(KC_TILD), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
124 _______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
125 _______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, SFT_T(KC_BSLS), \
126 _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
127),
128
129/* Adjust (Lower + Raise)
130 * ,-----------------------------------------. ,-----------------------------------------.
131 * | | Reset| | | | | | | | | | | Reset|
132 * |------+------+------+------+------+------| |------+------+------+------+------+------|
133 * | | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | |
134 * |------+------+------+------+------+------| |------+------+------+------+------+------|
135 * | | | | | | | | | | | | | |
136 * |------+------+------+------+------+------| |------+------+------+------+------+------|
137 * | | | | | | | | | | | | | |
138 * `-----------------------------------------' `-----------------------------------------'
139 */
140[_ADJUST] = KEYMAP( \
141 _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
142 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
143 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
144 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
145)
146
147};
148
149#ifdef AUDIO_ENABLE
150float tone_qwerty[][2] = SONG(QWERTY_SOUND);
151float tone_dvorak[][2] = SONG(DVORAK_SOUND);
152float tone_colemak[][2] = SONG(COLEMAK_SOUND);
153#endif
154
155void persistant_default_layer_set(uint16_t default_layer) {
156 eeconfig_update_default_layer(default_layer);
157 default_layer_set(default_layer);
158}
159
160bool process_record_user(uint16_t keycode, keyrecord_t *record) {
161 switch (keycode) {
162 case QWERTY:
163 if (record->event.pressed) {
164 #ifdef AUDIO_ENABLE
165 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
166 #endif
167 persistant_default_layer_set(1UL<<_QWERTY);
168 }
169 return false;
170 break;
171 case COLEMAK:
172 if (record->event.pressed) {
173 #ifdef AUDIO_ENABLE
174 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
175 #endif
176 persistant_default_layer_set(1UL<<_COLEMAK);
177 }
178 return false;
179 break;
180 case DVORAK:
181 if (record->event.pressed) {
182 #ifdef AUDIO_ENABLE
183 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
184 #endif
185 persistant_default_layer_set(1UL<<_DVORAK);
186 }
187 return false;
188 break;
189 case LOWER:
190 if (record->event.pressed) {
191 layer_on(_LOWER);
192 update_tri_layer(_LOWER, _RAISE, _ADJUST);
193 } else {
194 layer_off(_LOWER);
195 update_tri_layer(_LOWER, _RAISE, _ADJUST);
196 }
197 return false;
198 break;
199 case RAISE:
200 if (record->event.pressed) {
201 layer_on(_RAISE);
202 update_tri_layer(_LOWER, _RAISE, _ADJUST);
203 } else {
204 layer_off(_RAISE);
205 update_tri_layer(_LOWER, _RAISE, _ADJUST);
206 }
207 return false;
208 break;
209 case ADJUST:
210 if (record->event.pressed) {
211 layer_on(_ADJUST);
212 } else {
213 layer_off(_ADJUST);
214 }
215 return false;
216 break;
217 }
218 return true;
219}
diff --git a/keyboards/lets_split/keymaps/smt/readme.md b/keyboards/lets_split/keymaps/smt/readme.md
new file mode 100644
index 000000000..20bc662f0
--- /dev/null
+++ b/keyboards/lets_split/keymaps/smt/readme.md
@@ -0,0 +1,88 @@
1# smt's Let's Split keymap
2
3This keymap is ported from my Planck keymap.
4
5
6## Qwerty
7
8```
9,-----------------------------------------. ,-----------------------------------------.
10| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
11|------+------+------+------+------+------| |------+------+------+------+------+------|
12| Esc | A | S | D | F | G | | H | J | K | L | ; | " |
13|------+------+------+------+------+------| |------+------+------+------+------+------|
14| Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
15|------+------+------+------+------+------| |------+------+------+------+------+------|
16| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right |
17`-----------------------------------------' `-----------------------------------------'
18```
19
20## Colemak
21
22```
23,-----------------------------------------. ,-----------------------------------------.
24| Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
25|------+------+------+------+------+------| |------+------+------+------+------+------|
26| Esc | A | R | S | T | D | | H | N | E | I | O | " |
27|------+------+------+------+------+------| |------+------+------+------+------+------|
28| Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
29|------+------+------+------+------+------| |------+------+------+------+------+------|
30| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right |
31`-----------------------------------------' `-----------------------------------------'
32```
33
34## Dvorak
35
36```
37,-----------------------------------------. ,-----------------------------------------.
38| Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp |
39|------+------+------+------+------+------| |------+------+------+------+------+------|
40| Esc | A | O | E | U | I | | D | H | T | N | S | - |
41|------+------+------+------+------+------| |------+------+------+------+------+------|
42| Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
43|------+------+------+------+------+------| |------+------+------+------+------+------|
44| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right |
45`-----------------------------------------' `-----------------------------------------'
46```
47
48## Lower
49
50```
51,-----------------------------------------. ,-----------------------------------------.
52| 0 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
53|------+------+------+------+------+------| |------+------+------+------+------+------|
54| $ | F1 | F2 | F3 | F4 | F5 | | F6 | 4 | 5 | 6 | | |
55|------+------+------+------+------+------| |------+------+------+------+------+------|
56| | F7 | F8 | F9 | F10 | F11 | | F12 | 1 | 2 | 3 | | |
57|------+------+------+------+------+------| |------+------+------+------+------+------|
58| | | | | | | | | | Next | Vol- | Vol+ | Play |
59`-----------------------------------------' `-----------------------------------------'
60```
61
62## Raise
63
64```
65,-----------------------------------------. ,-----------------------------------------.
66| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del |
67|------+------+------+------+------+------| |------+------+------+------+------+------|
68| | | | | | | | _ | ? | + | { | } | | |
69|------+------+------+------+------+------| |------+------+------+------+------+------|
70| | | | | | | | - | / | = | [ | ] | \ |
71|------+------+------+------+------+------| |------+------+------+------+------+------|
72| | | | | | | | | | Home |PageDn|PageUp| End |
73`-----------------------------------------' `-----------------------------------------'
74```
75
76## Adjust (Lower + Raise)
77
78```
79,-----------------------------------------. ,-----------------------------------------.
80| | Reset| | | | | | | | | | | Reset|
81|------+------+------+------+------+------| |------+------+------+------+------+------|
82| | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | |
83|------+------+------+------+------+------| |------+------+------+------+------+------|
84| | | | | | | | | | | | | |
85|------+------+------+------+------+------| |------+------+------+------+------+------|
86| | | | | | | | | | | | | |
87`-----------------------------------------' `-----------------------------------------'
88```
diff --git a/keyboards/lets_split/matrix.c b/keyboards/lets_split/matrix.c
index 138969004..81dfb1445 100644
--- a/keyboards/lets_split/matrix.c
+++ b/keyboards/lets_split/matrix.c
@@ -226,9 +226,7 @@ uint8_t matrix_scan(void)
226 TXLED0; 226 TXLED0;
227 error_count = 0; 227 error_count = 0;
228 } 228 }
229
230 matrix_scan_quantum(); 229 matrix_scan_quantum();
231
232 return ret; 230 return ret;
233} 231}
234 232
diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h
index 2f5bde953..5fb87cf5d 100644
--- a/keyboards/lets_split/rev1/config.h
+++ b/keyboards/lets_split/rev1/config.h
@@ -63,6 +63,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
63 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ 63 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
64) 64)
65 65
66/* ws2812 RGB LED */
67#define RGB_DI_PIN D3
68#define RGBLIGHT_TIMER
69#define RGBLED_NUM 16 // Number of LEDs
70#define ws2812_PORTREG PORTD
71#define ws2812_DDRREG DDRD
72
66/* 73/*
67 * Feature disable options 74 * Feature disable options
68 * These options are also useful to firmware size reduction. 75 * These options are also useful to firmware size reduction.
diff --git a/keyboards/lets_split/rev2/rev2.c b/keyboards/lets_split/rev2/rev2.c
index c505d3a6e..8bfa171d0 100644
--- a/keyboards/lets_split/rev2/rev2.c
+++ b/keyboards/lets_split/rev2/rev2.c
@@ -5,6 +5,13 @@
5 float tone_goodbye[][2] = SONG(GOODBYE_SOUND); 5 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
6#endif 6#endif
7 7
8#ifdef SSD1306OLED
9void led_set_kb(uint8_t usb_led) {
10 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
11 led_set_user(usb_led);
12}
13#endif
14
8void matrix_init_kb(void) { 15void matrix_init_kb(void) {
9 16
10 #ifdef AUDIO_ENABLE 17 #ifdef AUDIO_ENABLE
@@ -30,3 +37,4 @@ void shutdown_user(void) {
30 stop_all_notes(); 37 stop_all_notes();
31 #endif 38 #endif
32} 39}
40
diff --git a/keyboards/lets_split/rev2/rev2.h b/keyboards/lets_split/rev2/rev2.h
index 990976de2..054731366 100644
--- a/keyboards/lets_split/rev2/rev2.h
+++ b/keyboards/lets_split/rev2/rev2.h
@@ -6,23 +6,66 @@
6//void promicro_bootloader_jmp(bool program); 6//void promicro_bootloader_jmp(bool program);
7#include "quantum.h" 7#include "quantum.h"
8 8
9
10#ifdef USE_I2C
11#include <stddef.h>
12#ifdef __AVR__
13#include <avr/io.h>
14#include <avr/interrupt.h>
15#endif
16#ifdef SSD1306OLED
17extern bool iota_gfx_init(void);
18extern void iota_gfx_task(void);
19extern bool iota_gfx_off(void);
20extern bool iota_gfx_on(void);
21extern void iota_gfx_flush(void);
22extern void iota_gfx_write_char(uint8_t c);
23extern void iota_gfx_write(const char *data);
24extern void iota_gfx_write_P(const char *data);
25extern void iota_gfx_clear_screen(void);
26#endif
27#endif
28
9//void promicro_bootloader_jmp(bool program); 29//void promicro_bootloader_jmp(bool program);
10 30
31#ifndef FLIP_HALF
32//Standard Keymap
11#define KEYMAP( \ 33#define KEYMAP( \
12 k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \ 34 k40, k41, k42, k43, k44, k45, k05, k04, k03, k02, k01, k00, \
13 k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \ 35 k50, k51, k52, k53, k54, k55, k15, k14, k13, k12, k11, k10, \
14 k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \ 36 k60, k61, k62, k63, k64, k65, k25, k24, k23, k22, k21, k20, \
15 k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \ 37 k70, k71, k72, k73, k74, k75, k35, k34, k33, k32, k31, k30 \
38 ) \
39 { \
40 { k45, k44, k43, k42, k41, k40 }, \
41 { k55, k54, k53, k52, k51, k50 }, \
42 { k65, k64, k63, k62, k61, k60 }, \
43 { k75, k74, k73, k72, k71, k70 }, \
44 { k00, k01, k02, k03, k04, k05 }, \
45 { k10, k11, k12, k13, k14, k15 }, \
46 { k20, k21, k22, k23, k24, k25 }, \
47 { k30, k31, k32, k33, k34, k35 } \
48 }
49
50#else
51// Keymap with one side flipped
52#define KEYMAP( \
53 k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
54 k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
55 k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
56 k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
16 ) \ 57 ) \
17 { \ 58 { \
18 { k00, k01, k02, k03, k04, k05 }, \ 59 { k00, k01, k02, k03, k04, k05 }, \
19 { k10, k11, k12, k13, k14, k15 }, \ 60 { k10, k11, k12, k13, k14, k15 }, \
20 { k20, k21, k22, k23, k24, k25 }, \ 61 { k20, k21, k22, k23, k24, k25 }, \
21 { k30, k31, k32, k33, k34, k35 }, \ 62 { k30, k31, k32, k33, k34, k35 }, \
22 { k40, k41, k42, k43, k44, k45 }, \ 63 { k45, k44, k43, k42, k41, k40 }, \
23 { k50, k51, k52, k53, k54, k55 }, \ 64 { k55, k54, k53, k52, k51, k50 }, \
24 { k60, k61, k62, k63, k64, k65 }, \ 65 { k65, k64, k63, k62, k61, k60 }, \
25 { k70, k71, k72, k73, k74, k75 } \ 66 { k75, k74, k73, k72, k71, k70 } \
26 } 67 }
68#endif
69
27 70
28#endif \ No newline at end of file 71#endif \ No newline at end of file
diff --git a/keyboards/lets_split/rev2fliphalf/rev2fliphalf.c b/keyboards/lets_split/rev2fliphalf/rev2fliphalf.c
deleted file mode 100644
index c505d3a6e..000000000
--- a/keyboards/lets_split/rev2fliphalf/rev2fliphalf.c
+++ /dev/null
@@ -1,32 +0,0 @@
1#include "lets_split.h"
2
3#ifdef AUDIO_ENABLE
4 float tone_startup[][2] = SONG(STARTUP_SOUND);
5 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
6#endif
7
8void matrix_init_kb(void) {
9
10 #ifdef AUDIO_ENABLE
11 _delay_ms(20); // gets rid of tick
12 PLAY_NOTE_ARRAY(tone_startup, false, 0);
13 #endif
14
15 // // green led on
16 // DDRD |= (1<<5);
17 // PORTD &= ~(1<<5);
18
19 // // orange led on
20 // DDRB |= (1<<0);
21 // PORTB &= ~(1<<0);
22
23 matrix_init_user();
24};
25
26void shutdown_user(void) {
27 #ifdef AUDIO_ENABLE
28 PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
29 _delay_ms(150);
30 stop_all_notes();
31 #endif
32}
diff --git a/keyboards/lets_split/rev2fliphalf/rev2fliphalf.h b/keyboards/lets_split/rev2fliphalf/rev2fliphalf.h
deleted file mode 100644
index 7dc8e5ba8..000000000
--- a/keyboards/lets_split/rev2fliphalf/rev2fliphalf.h
+++ /dev/null
@@ -1,28 +0,0 @@
1#ifndef REV2FLIPHALF_H
2#define REV2FLIPHALF_H
3
4#include "../lets_split.h"
5
6//void promicro_bootloader_jmp(bool program);
7#include "quantum.h"
8
9//void promicro_bootloader_jmp(bool program);
10
11#define KEYMAP( \
12 k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
13 k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
14 k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
15 k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
16 ) \
17 { \
18 { k00, k01, k02, k03, k04, k05 }, \
19 { k10, k11, k12, k13, k14, k15 }, \
20 { k20, k21, k22, k23, k24, k25 }, \
21 { k30, k31, k32, k33, k34, k35 }, \
22 { k40, k41, k42, k43, k44, k45 }, \
23 { k50, k51, k52, k53, k54, k55 }, \
24 { k60, k61, k62, k63, k64, k65 }, \
25 { k70, k71, k72, k73, k74, k75 } \
26 }
27
28#endif \ No newline at end of file
diff --git a/keyboards/lets_split/rev2fliphalf/rules.mk b/keyboards/lets_split/rev2fliphalf/rules.mk
deleted file mode 100644
index 80a942d06..000000000
--- a/keyboards/lets_split/rev2fliphalf/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
1BACKLIGHT_ENABLE = no
2
3ifndef QUANTUM_DIR
4 include ../../../Makefile
5endif
diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk
index 0efa78550..ff159e0f0 100644
--- a/keyboards/lets_split/rules.mk
+++ b/keyboards/lets_split/rules.mk
@@ -1,7 +1,8 @@
1SRC += matrix.c \ 1SRC += matrix.c \
2 i2c.c \ 2 i2c.c \
3 split_util.c \ 3 split_util.c \
4 serial.c 4 serial.c\
5 ssd1306.c
5 6
6# MCU name 7# MCU name
7#MCU = at90usb1287 8#MCU = at90usb1287
@@ -73,15 +74,3 @@ USE_I2C ?= yes
73SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend 74SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
74 75
75CUSTOM_MATRIX = yes 76CUSTOM_MATRIX = yes
76
77avrdude: build
78 ls /dev/tty* > /tmp/1; \
79 echo "Reset your Pro Micro now"; \
80 while [[ -z $$USB ]]; do \
81 sleep 1; \
82 ls /dev/tty* > /tmp/2; \
83 USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \
84 done; \
85 avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex
86
87.PHONY: avrdude
diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c
index 226dc1881..46586fbc0 100644
--- a/keyboards/lets_split/split_util.c
+++ b/keyboards/lets_split/split_util.c
@@ -21,7 +21,7 @@ static void setup_handedness(void) {
21 #ifdef EE_HANDS 21 #ifdef EE_HANDS
22 isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); 22 isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
23 #else 23 #else
24 // I2C_MASTER_RIGHT is deprecated use MASTER_RIGHT instead since this works for both serial and i2c 24 // I2c_MASTER_RIGHT ish deprecate use MASTER_RIGHT instead since this works for both serial and i2c:
25 #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) 25 #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
26 isLeftHand = !has_usb(); 26 isLeftHand = !has_usb();
27 #else 27 #else
@@ -33,6 +33,9 @@ static void setup_handedness(void) {
33static void keyboard_master_setup(void) { 33static void keyboard_master_setup(void) {
34#ifdef USE_I2C 34#ifdef USE_I2C
35 i2c_master_init(); 35 i2c_master_init();
36#ifdef SSD1306OLED
37 matrix_master_OLED_init ();
38#endif
36#else 39#else
37 serial_master_init(); 40 serial_master_init();
38#endif 41#endif
diff --git a/keyboards/lets_split/split_util.h b/keyboards/lets_split/split_util.h
index 6b896679c..3ae76c209 100644
--- a/keyboards/lets_split/split_util.h
+++ b/keyboards/lets_split/split_util.h
@@ -19,4 +19,6 @@ void split_keyboard_setup(void);
19bool has_usb(void); 19bool has_usb(void);
20void keyboard_slave_loop(void); 20void keyboard_slave_loop(void);
21 21
22void matrix_master_OLED_init (void);
23
22#endif 24#endif
diff --git a/keyboards/lets_split/ssd1306.c b/keyboards/lets_split/ssd1306.c
new file mode 100644
index 000000000..3c7816bb3
--- /dev/null
+++ b/keyboards/lets_split/ssd1306.c
@@ -0,0 +1,468 @@
1#include "config.h"
2#include "i2c.h"
3#include <stdbool.h>
4#include <string.h>
5#include <stdio.h>
6#include "print.h"
7#include "lets_split.h"
8#include "common/glcdfont.c"
9#ifdef ADAFRUIT_BLE_ENABLE
10#include "adafruit_ble.h"
11#endif
12#ifdef PROTOCOL_LUFA
13#include "lufa.h"
14#endif
15#include "sendchar.h"
16#include "pincontrol.h"
17
18//assign the right code to your layers
19#define _BASE 0
20#define _LOWER 8
21#define _RAISE 16
22#define _FNLAYER 64
23#define _NUMLAY 128
24#define _NLOWER 136
25#define _NFNLAYER 192
26#define _MOUSECURSOR 256
27#define _ADJUST 65560
28
29// Set this to 1 to help diagnose early startup problems
30// when testing power-on with ble. Turn it off otherwise,
31// as the latency of printing most of the debug info messes
32// with the matrix scan, causing keys to drop.
33#define DEBUG_TO_SCREEN 0
34
35// Controls the SSD1306 128x32 OLED display via i2c
36
37#define i2cAddress 0x3C
38
39#define DisplayHeight 32
40#define DisplayWidth 128
41
42#define FontHeight 8
43#define FontWidth 6
44
45#define MatrixRows (DisplayHeight / FontHeight)
46#define MatrixCols (DisplayWidth / FontWidth)
47
48struct CharacterMatrix {
49 uint8_t display[MatrixRows][MatrixCols];
50 uint8_t *cursor;
51 bool dirty;
52};
53
54static struct CharacterMatrix display;
55//static uint16_t last_battery_update;
56//static uint32_t vbat;
57//#define BatteryUpdateInterval 10000 /* milliseconds */
58#define ScreenOffInterval 300000 /* milliseconds */
59#if DEBUG_TO_SCREEN
60static uint8_t displaying;
61#endif
62static uint16_t last_flush;
63
64enum ssd1306_cmds {
65 DisplayOff = 0xAE,
66 DisplayOn = 0xAF,
67
68 SetContrast = 0x81,
69 DisplayAllOnResume = 0xA4,
70
71 DisplayAllOn = 0xA5,
72 NormalDisplay = 0xA6,
73 InvertDisplay = 0xA7,
74 SetDisplayOffset = 0xD3,
75 SetComPins = 0xda,
76 SetVComDetect = 0xdb,
77 SetDisplayClockDiv = 0xD5,
78 SetPreCharge = 0xd9,
79 SetMultiPlex = 0xa8,
80 SetLowColumn = 0x00,
81 SetHighColumn = 0x10,
82 SetStartLine = 0x40,
83
84 SetMemoryMode = 0x20,
85 ColumnAddr = 0x21,
86 PageAddr = 0x22,
87
88 ComScanInc = 0xc0,
89 ComScanDec = 0xc8,
90 SegRemap = 0xa0,
91 SetChargePump = 0x8d,
92 ExternalVcc = 0x01,
93 SwitchCapVcc = 0x02,
94
95 ActivateScroll = 0x2f,
96 DeActivateScroll = 0x2e,
97 SetVerticalScrollArea = 0xa3,
98 RightHorizontalScroll = 0x26,
99 LeftHorizontalScroll = 0x27,
100 VerticalAndRightHorizontalScroll = 0x29,
101 VerticalAndLeftHorizontalScroll = 0x2a,
102};
103
104
105// Write command sequence.
106// Returns true on success.
107static inline bool _send_cmd1(uint8_t cmd) {
108 bool res = false;
109
110 if (i2c_start_write(i2cAddress)) {
111 xprintf("failed to start write to %d\n", i2cAddress);
112 goto done;
113 }
114
115 if (i2c_master_write(0x0 /* command byte follows */)) {
116 print("failed to write control byte\n");
117
118 goto done;
119 }
120
121 if (i2c_master_write(cmd)) {
122 xprintf("failed to write command %d\n", cmd);
123 goto done;
124 }
125 res = true;
126done:
127 i2c_master_stop();
128 return res;
129}
130
131// Write 2-byte command sequence.
132// Returns true on success
133static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) {
134 if (!_send_cmd1(cmd)) {
135 return false;
136 }
137 return _send_cmd1(opr);
138}
139
140// Write 3-byte command sequence.
141// Returns true on success
142static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
143 if (!_send_cmd1(cmd)) {
144 return false;
145 }
146 if (!_send_cmd1(opr1)) {
147 return false;
148 }
149 return _send_cmd1(opr2);
150}
151
152#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;}
153#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
154#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
155
156static void matrix_clear(struct CharacterMatrix *matrix);
157
158static void clear_display(void) {
159 matrix_clear(&display);
160
161 // Clear all of the display bits (there can be random noise
162 // in the RAM on startup)
163 send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
164 send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
165
166 if (i2c_start_write(i2cAddress)) {
167 goto done;
168 }
169 if (i2c_master_write(0x40)) {
170 // Data mode
171 goto done;
172 }
173 for (uint8_t row = 0; row < MatrixRows; ++row) {
174 for (uint8_t col = 0; col < DisplayWidth; ++col) {
175 i2c_master_write(0);
176 }
177 }
178
179 display.dirty = false;
180
181done:
182 i2c_master_stop();
183}
184
185#if DEBUG_TO_SCREEN
186#undef sendchar
187static int8_t capture_sendchar(uint8_t c) {
188 sendchar(c);
189 iota_gfx_write_char(c);
190
191 if (!displaying) {
192 iota_gfx_flush();
193 }
194 return 0;
195}
196#endif
197
198bool iota_gfx_init(void) {
199 bool success = false;
200
201 send_cmd1(DisplayOff);
202 send_cmd2(SetDisplayClockDiv, 0x80);
203 send_cmd2(SetMultiPlex, DisplayHeight - 1);
204
205 send_cmd2(SetDisplayOffset, 0);
206
207
208 send_cmd1(SetStartLine | 0x0);
209 send_cmd2(SetChargePump, 0x14 /* Enable */);
210 send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
211
212/// Flips the display orientation 0 degrees
213 send_cmd1(SegRemap | 0x1);
214 send_cmd1(ComScanDec);
215/*
216// the following Flip the display orientation 180 degrees
217 send_cmd1(SegRemap);
218 send_cmd1(ComScanInc);
219// end flip */
220 send_cmd2(SetComPins, 0x2);
221 send_cmd2(SetContrast, 0x8f);
222 send_cmd2(SetPreCharge, 0xf1);
223 send_cmd2(SetVComDetect, 0x40);
224 send_cmd1(DisplayAllOnResume);
225 send_cmd1(NormalDisplay);
226 send_cmd1(DeActivateScroll);
227 send_cmd1(DisplayOn);
228
229 send_cmd2(SetContrast, 0); // Dim
230
231 clear_display();
232
233 success = true;
234
235 iota_gfx_flush();
236
237#if DEBUG_TO_SCREEN
238 print_set_sendchar(capture_sendchar);
239#endif
240
241done:
242 return success;
243}
244
245bool iota_gfx_off(void) {
246 bool success = false;
247
248 send_cmd1(DisplayOff);
249 success = true;
250
251done:
252 return success;
253}
254
255bool iota_gfx_on(void) {
256 bool success = false;
257
258 send_cmd1(DisplayOn);
259 success = true;
260
261done:
262 return success;
263}
264
265static void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
266 *matrix->cursor = c;
267 ++matrix->cursor;
268
269 if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) {
270 // We went off the end; scroll the display upwards by one line
271 memmove(&matrix->display[0], &matrix->display[1],
272 MatrixCols * (MatrixRows - 1));
273 matrix->cursor = &matrix->display[MatrixRows - 1][0];
274 memset(matrix->cursor, ' ', MatrixCols);
275 }
276}
277
278static void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
279 matrix->dirty = true;
280
281 if (c == '\n') {
282 // Clear to end of line from the cursor and then move to the
283 // start of the next line
284 uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols;
285
286 while (cursor_col++ < MatrixCols) {
287 matrix_write_char_inner(matrix, ' ');
288 }
289 return;
290 }
291
292 matrix_write_char_inner(matrix, c);
293}
294
295void iota_gfx_write_char(uint8_t c) {
296 matrix_write_char(&display, c);
297}
298
299static void matrix_write(struct CharacterMatrix *matrix, const char *data) {
300 const char *end = data + strlen(data);
301 while (data < end) {
302 matrix_write_char(matrix, *data);
303 ++data;
304 }
305}
306
307void iota_gfx_write(const char *data) {
308 matrix_write(&display, data);
309}
310
311static void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
312 while (true) {
313 uint8_t c = pgm_read_byte(data);
314 if (c == 0) {
315 return;
316 }
317 matrix_write_char(matrix, c);
318 ++data;
319 }
320}
321
322void iota_gfx_write_P(const char *data) {
323 matrix_write_P(&display, data);
324}
325
326static void matrix_clear(struct CharacterMatrix *matrix) {
327 memset(matrix->display, ' ', sizeof(matrix->display));
328 matrix->cursor = &matrix->display[0][0];
329 matrix->dirty = true;
330}
331
332void iota_gfx_clear_screen(void) {
333 matrix_clear(&display);
334}
335
336static void matrix_render(struct CharacterMatrix *matrix) {
337 last_flush = timer_read();
338 iota_gfx_on();
339#if DEBUG_TO_SCREEN
340 ++displaying;
341#endif
342
343 // Move to the home position
344 send_cmd3(PageAddr, 0, MatrixRows - 1);
345 send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
346
347 if (i2c_start_write(i2cAddress)) {
348 goto done;
349 }
350 if (i2c_master_write(0x40)) {
351 // Data mode
352 goto done;
353 }
354
355 for (uint8_t row = 0; row < MatrixRows; ++row) {
356 for (uint8_t col = 0; col < MatrixCols; ++col) {
357 const uint8_t *glyph = font + (matrix->display[row][col] * (FontWidth - 1));
358
359 for (uint8_t glyphCol = 0; glyphCol < FontWidth - 1; ++glyphCol) {
360 uint8_t colBits = pgm_read_byte(glyph + glyphCol);
361 i2c_master_write(colBits);
362 }
363
364 // 1 column of space between chars (it's not included in the glyph)
365 i2c_master_write(0);
366 }
367 }
368
369 matrix->dirty = false;
370
371done:
372 i2c_master_stop();
373#if DEBUG_TO_SCREEN
374 --displaying;
375#endif
376}
377
378void iota_gfx_flush(void) {
379 matrix_render(&display);
380}
381
382static void matrix_update(struct CharacterMatrix *dest,
383 const struct CharacterMatrix *source) {
384 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
385 memcpy(dest->display, source->display, sizeof(dest->display));
386 dest->dirty = true;
387 }
388}
389
390static void render_status_info(void) {
391#if DEBUG_TO_SCREEN
392 if (debug_enable) {
393 return;
394 }
395#endif
396
397 struct CharacterMatrix matrix;
398
399 matrix_clear(&matrix);
400 matrix_write_P(&matrix, PSTR("USB: "));
401#ifdef PROTOCOL_LUFA
402 switch (USB_DeviceState) {
403 case DEVICE_STATE_Unattached:
404 matrix_write_P(&matrix, PSTR("Unattached"));
405 break;
406 case DEVICE_STATE_Suspended:
407 matrix_write_P(&matrix, PSTR("Suspended"));
408 break;
409 case DEVICE_STATE_Configured:
410 matrix_write_P(&matrix, PSTR("Connected"));
411 break;
412 case DEVICE_STATE_Powered:
413 matrix_write_P(&matrix, PSTR("Powered"));
414 break;
415 case DEVICE_STATE_Default:
416 matrix_write_P(&matrix, PSTR("Default"));
417 break;
418 case DEVICE_STATE_Addressed:
419 matrix_write_P(&matrix, PSTR("Addressed"));
420 break;
421 default:
422 matrix_write_P(&matrix, PSTR("Invalid"));
423 }
424#endif
425
426// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
427
428 char buf[40];
429 snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
430 matrix_write_P(&matrix, PSTR("\n\nLayer: "));
431 switch (layer_state) {
432 case _BASE:
433 matrix_write_P(&matrix, PSTR("Default"));
434 break;
435 case _RAISE:
436 matrix_write_P(&matrix, PSTR("Raise"));
437 break;
438 case _LOWER:
439 matrix_write_P(&matrix, PSTR("Lower"));
440 break;
441 case _ADJUST:
442 matrix_write_P(&matrix, PSTR("ADJUST"));
443 break;
444 default:
445 matrix_write(&matrix, buf);
446 }
447
448 // Host Keyboard LED Status
449 char led[40];
450 snprintf(led, sizeof(led), "\n%s %s %s",
451 (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
452 (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
453 (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
454 matrix_write(&matrix, led);
455 matrix_update(&display, &matrix);
456}
457
458void iota_gfx_task(void) {
459 render_status_info();
460
461 if (display.dirty) {
462 iota_gfx_flush();
463 }
464
465 if (timer_elapsed(last_flush) > ScreenOffInterval) {
466 iota_gfx_off();
467 }
468}
diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c
index 2acd988ea..aede27df7 100644
--- a/keyboards/planck/keymaps/callum/keymap.c
+++ b/keyboards/planck/keymaps/callum/keymap.c
@@ -14,7 +14,7 @@ extern keymap_config_t keymap_config;
14#define _FUNC 4 14#define _FUNC 4
15#define ENDASH LALT(KC_MINS) 15#define ENDASH LALT(KC_MINS)
16#define POUND LALT(KC_3) 16#define POUND LALT(KC_3)
17 17#define H(X) LALT(LCTL(X))
18 18
19enum planck_keycodes { 19enum planck_keycodes {
20 MOVE = SAFE_RANGE, 20 MOVE = SAFE_RANGE,
@@ -48,19 +48,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
48 48
49/* MOVE 49/* MOVE
50 * ,-----------------------------------------------------------------------------------. 50 * ,-----------------------------------------------------------------------------------.
51 * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | 51 * | H(3) | H(F1)| H(F2)| H(F3)| H(F4)| H(F5)| H(8) | Home | Up | End | H(7) | Esc |
52 * |------+------+------+------+------+------+------+------+------+------+------+------| 52 * |------+------+------+------+------+------+------+------+------+------+------+------|
53 * | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del | 53 * | H(4) | H(F6)| H(F7)| H(F8)| H(F9)|H(F10)| H(9) | Left | Down | Right| Caps | Del |
54 * |------+------+------+------+------+------+------+------+------+------+------+------| 54 * |------+------+------+------+------+------+------+------+------+------+------+------|
55 * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | 55 * | |H(F11)|H(F12)| H(0) | H(1) | H(2) | H(A) | Pg Dn| Pg Up| H(5) | H(6) | |
56 * |------+------+------+------+------+------+------+------+------+------+------+------| 56 * |------+------+------+------+------+------+------+------+------+------+------+------|
57 * | | | | | | | | | | | | | 57 * | | | | | | | | | | | | |
58 * `-----------------------------------------------------------------------------------' 58 * `-----------------------------------------------------------------------------------'
59 */ 59 */
60[_MOVE] = { 60[_MOVE] = {
61 {KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC }, 61 {H(KC_3), H(KC_F1),H(KC_F2),H(KC_F3),H(KC_F4),H(KC_F5),H(KC_8), KC_HOME, KC_UP, KC_END, H(KC_7), KC_ESC },
62 {KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL }, 62 {H(KC_4), H(KC_F6),H(KC_F7),H(KC_F8),H(KC_F9),H(KC_F10),H(KC_9),KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL },
63 {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______}, 63 {_______, H(KC_F11),H(KC_F12),H(KC_0),H(KC_1),H(KC_2), H(KC_A), KC_PGDN, KC_PGUP, H(KC_5), H(KC_6), _______},
64 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 64 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
65}, 65},
66 66
@@ -114,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
114[_FUNC] = { 114[_FUNC] = {
115 {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLU}, 115 {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLU},
116 {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_VOLD}, 116 {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_VOLD},
117 {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, KC_POWER, XXXXXXX, XXXXXXX, XXXXXXX, _______}, 117 {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, KC_POWER,XXXXXXX, XXXXXXX, XXXXXXX, _______},
118 {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______} 118 {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______}
119} 119}
120 120
diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md
index 71e200b9d..4d4e5cdd7 100644
--- a/keyboards/planck/keymaps/callum/readme.md
+++ b/keyboards/planck/keymaps/callum/readme.md
@@ -6,7 +6,7 @@ This is a layout for the grid planck, built with a few ideals in mind:
6- The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible. 6- The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible.
7- There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make. 7- There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make.
8 8
9We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster and other movement keys; a `SYMB` layer, with numbers and symbols; a `FUNC` layer, with function keys and media keys; and a `MOUSE` layer, with mouse emulation. The `MOUSE` layer is activated by holding the Move and Symb keys simultaniously. 9We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster, other movement keys, and hotkeys; a `SYMB` layer, with numbers and symbols; a `FUNC` layer, with function keys and media keys; and a `MOUSE` layer, with mouse emulation. The `MOUSE` layer is activated by holding the Move and Symb keys simultaniously.
10 10
11``` 11```
12/* BASE 12/* BASE
@@ -23,11 +23,11 @@ We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow c
23 23
24/* MOVE 24/* MOVE
25 * ,-----------------------------------------------------------------------------------. 25 * ,-----------------------------------------------------------------------------------.
26 * | Esc | | Home | Up | End | | | Home | Up | End | | Esc | 26 * | H(3) | H(F1)| H(F2)| H(F3)| H(F4)| H(F5)| H(8) | Home | Up | End | H(7) | Esc |
27 * |------+------+------+------+------+------+------+------+------+------+------+------| 27 * |------+------+------+------+------+------+------+------+------+------+------+------|
28 * | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del | 28 * | H(4) | H(F6)| H(F7)| H(F8)| H(F9)|H(F10)| H(9) | Left | Down | Right| Caps | Del |
29 * |------+------+------+------+------+------+------+------+------+------+------+------| 29 * |------+------+------+------+------+------+------+------+------+------+------+------|
30 * | | | | Pg Up| Pg Dn| | | Pg Dn| Pg Up| | | | 30 * | |H(F11)|H(F12)| H(0) | H(1) | H(2) | H(A) | Pg Dn| Pg Up| H(5) | H(6) | |
31 * |------+------+------+------+------+------+------+------+------+------+------+------| 31 * |------+------+------+------+------+------+------+------+------+------+------+------|
32 * | | | | | | | | | | | | | 32 * | | | | | | | | | | | | |
33 * `-----------------------------------------------------------------------------------' 33 * `-----------------------------------------------------------------------------------'
@@ -68,4 +68,4 @@ We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow c
68 * | | | | | Prev | Mute | Play | Next | | | | | 68 * | | | | | Prev | Mute | Play | Next | | | | |
69 * `-----------------------------------------------------------------------------------' 69 * `-----------------------------------------------------------------------------------'
70 */ 70 */
71 ``` 71```
diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c
index 1b1b998b2..d149019fe 100644
--- a/keyboards/planck/keymaps/default/keymap.c
+++ b/keyboards/planck/keymaps/default/keymap.c
@@ -102,16 +102,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
102 * |------+------+------+------+------+-------------+------+------+------+------+------| 102 * |------+------+------+------+------+-------------+------+------+------+------+------|
103 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | 103 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
104 * |------+------+------+------+------+------|------+------+------+------+------+------| 104 * |------+------+------+------+------+------|------+------+------+------+------+------|
105 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | 105 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
106 * |------+------+------+------+------+------+------+------+------+------+------+------| 106 * |------+------+------+------+------+------+------+------+------+------+------+------|
107 * | | | | | | | | Next | Vol- | Vol+ | Play | 107 * | | | | | | | | Next | Vol- | Vol+ | Play |
108 * `-----------------------------------------------------------------------------------' 108 * `-----------------------------------------------------------------------------------'
109 */ 109 */
110[_LOWER] = { 110[_LOWER] = {
111 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, 111 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
112 {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, 112 {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
113 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______}, 113 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______},
114 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} 114 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
115}, 115},
116 116
117/* Raise 117/* Raise
@@ -120,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
120 * |------+------+------+------+------+-------------+------+------+------+------+------| 120 * |------+------+------+------+------+-------------+------+------+------+------+------|
121 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | 121 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
122 * |------+------+------+------+------+------|------+------+------+------+------+------| 122 * |------+------+------+------+------+------|------+------+------+------+------+------|
123 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | 123 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
124 * |------+------+------+------+------+------+------+------+------+------+------+------| 124 * |------+------+------+------+------+------+------+------+------+------+------+------|
125 * | | | | | | | | Next | Vol- | Vol+ | Play | 125 * | | | | | | | | Next | Vol- | Vol+ | Play |
126 * `-----------------------------------------------------------------------------------' 126 * `-----------------------------------------------------------------------------------'
@@ -138,7 +138,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
138 * |------+------+------+------+------+-------------+------+------+------+------+------| 138 * |------+------+------+------+------+-------------+------+------+------+------+------|
139 * | | S | T | P | H | * | * | F | P | L | T | D | 139 * | | S | T | P | H | * | * | F | P | L | T | D |
140 * |------+------+------+------+------+------|------+------+------+------+------+------| 140 * |------+------+------+------+------+------|------+------+------+------+------+------|
141 * |TogOut| S | K | W | R | * | * | R | B | G | S | Z | 141 * | | S | K | W | R | * | * | R | B | G | S | Z |
142 * |------+------+------+------+------+------+------+------+------+------+------+------| 142 * |------+------+------+------+------+------+------+------+------+------+------+------|
143 * | Exit | | | A | O | | E | U | | | | 143 * | Exit | | | A | O | | E | U | | | |
144 * `-----------------------------------------------------------------------------------' 144 * `-----------------------------------------------------------------------------------'
@@ -163,7 +163,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
163 * `-----------------------------------------------------------------------------------' 163 * `-----------------------------------------------------------------------------------'
164 */ 164 */
165[_ADJUST] = { 165[_ADJUST] = {
166 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, 166 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL },
167 {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, 167 {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
168 {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, 168 {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
169 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 169 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
diff --git a/keyboards/planck/keymaps/espynn/keyboard-layout.jpg b/keyboards/planck/keymaps/espynn/keyboard-layout.jpg
index 55e5396bf..c5e438f6a 100644
--- a/keyboards/planck/keymaps/espynn/keyboard-layout.jpg
+++ b/keyboards/planck/keymaps/espynn/keyboard-layout.jpg
Binary files differ
diff --git a/keyboards/planck/keymaps/espynn/keymap.c b/keyboards/planck/keymaps/espynn/keymap.c
index 4a3fe32b8..a24ad9d48 100644
--- a/keyboards/planck/keymaps/espynn/keymap.c
+++ b/keyboards/planck/keymaps/espynn/keymap.c
@@ -60,7 +60,7 @@ const uint16_t PROGMEM fn_actions[] = {
60 [7] = ACTION_MODS_KEY(MOD_LCTL, KC_UNDS), 60 [7] = ACTION_MODS_KEY(MOD_LCTL, KC_UNDS),
61 }; 61 };
62 62
63// This config can be found at Keyboard layout editor site: http://goo.gl/zjXL2l 63// This config can be found at Keyboard layout editor site: https://goo.gl/cF7uIO
64const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 64const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
65[_QWERTY] = { /* QWERTY */ 65[_QWERTY] = { /* QWERTY */
66 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, 66 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
@@ -69,22 +69,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
69 {KC_LCTL, KC_ESC, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} 69 {KC_LCTL, KC_ESC, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
70}, 70},
71[_LOWER] = { /* LOWER */ 71[_LOWER] = { /* LOWER */
72 {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL}, 72 {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_TRNS},
73 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, 73 {KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_MINS, KC_TRNS, KC_TRNS, KC_TRNS},
74 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_QUOT, KC_DQT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, 74 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_QUOT, KC_DQT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
75 {KC_TRNS, ZM_NRM, ZM_IN, ZM_OUT, KC_TRNS, KC_PGDN, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} 75 {KC_TRNS, ZM_NRM, ZM_IN, ZM_OUT, KC_TRNS, KC_PGDN, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
76}, 76},
77[_RAISE] = { /* RAISE */ 77[_RAISE] = { /* RAISE */
78 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, 78 {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, KC_TRNS},
79 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_LCBR, KC_BSLS, KC_TRNS}, 79 {KC_TRNS, KC_TRNS, KC_TRNS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PLUS, KC_TRNS, KC_TRNS, KC_TRNS},
80 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_PIPE, KC_GRV, KC_TILD, KC_LBRC, KC_LBRC, KC_TRNS, KC_TRNS}, 80 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_PIPE, KC_GRV, KC_TILD, S(KC_COMM), S(KC_DOT), KC_BSLS, KC_TRNS},
81 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGUP, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} 81 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGUP, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
82}, 82},
83[_CUSTOM] = { /* CUSTOM */ 83[_CUSTOM] = { /* CUSTOM */
84 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CUS4, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, 84 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS},
85 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CUS0, CUS3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, 85 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CUS0, CUS3, CUS4, KC_TRNS, KC_F12, KC_TRNS},
86 {KC_TRNS, KC_TRNS, CUT, COPY, PASTE, CUS1, CUS5, CUS2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, 86 {KC_TRNS, KC_TRNS, CUT, COPY, PASTE, CUS1, CUS5, CUS2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
87 {BL, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} 87 {BL, RESET, LALT(LCTL(KC_DEL)), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
88} 88}
89}; 89};
90 90
diff --git a/keyboards/planck/keymaps/espynn/layout.json b/keyboards/planck/keymaps/espynn/layout.json
index 38ccc3452..ccdf2afde 100644
--- a/keyboards/planck/keymaps/espynn/layout.json
+++ b/keyboards/planck/keymaps/espynn/layout.json
@@ -3,6 +3,7 @@
3 "backcolor": "#858585", 3 "backcolor": "#858585",
4 "name": "Planck 40%", 4 "name": "Planck 40%",
5 "author": "James Folkert", 5 "author": "James Folkert",
6 "notes": "# Espynn's keymap for Planck Ortholinear 40% Mechanical Keyboard\nAdded several custom functions to the keymap from the \"ab\" map. Special thanks to \"mollat\" for demonstration of macros in their keymap.c\n \n\n![Layout](keyboard-layout.png \"Practical Keymap\")\n\n* Online keyboard layout editor: http://goo.gl/mlLAFZ\n\n# Notes\n* Front legend text is the custom layer (both raise and lower)\n* Holding is denoted by down arrow, for example, right shift is an enter button when tapped, shift when held\n* Simultaneous RAISE+LOWER enters CUSTOM layer. Several custom keymaps are here\n* I disregarded the advice of Jack and used macros for passwords. I accept my fate.\n* RAISE and LOWER also acts as PgUp and PgDn when tapped.\n* [CapsLock] also acts as [Ctrl] key when you press and hold. It is convenient for GNU Emacs users. (not sure if this works)\n* Bracket/ paran/ brace keys are placed in the center of the keyboard for programmer's convenience.",
6 "background": { 7 "background": {
7 "name": "Aluminium brushed", 8 "name": "Aluminium brushed",
8 "style": "background-image: url('/bg/metal/aluminum_texture1642.jpg');" 9 "style": "background-image: url('/bg/metal/aluminum_texture1642.jpg');"
@@ -19,41 +20,49 @@
19 2, 20 2,
20 2, 21 2,
21 0, 22 0,
22 2 23 0
23 ] 24 ]
24 }, 25 },
25 "F1\n1\n\n!\n\n\n\n\n\n<i class='kb kb-Tab-2'></i>", 26 "!\n1\n\n\nF1\n\n\n\n\n<i class='kb kb-Tab-2'></i>",
26 "F2\n2\n\n@\n\n\n\n\n\nQ", 27 "@\n2\n\n\nF2\n\n\n\n\nQ",
27 "F3\n3\n\n#\n\n\n\n\n\nW", 28 "#\n3\n\n\nF3\n\n\n\n\nW",
28 "F4\n4\n\n$\n\n\n\n\n\nE", 29 "$\n4\n\n\nF4\n\n\n\n\nE",
29 "F5\n5\n\n%\n\n\n\n\n\nR", 30 "%\n5\n\n\nF5\n\n\n\n\nR",
30 "F6\n6\n\n^\n\n\n\n\n\nT", 31 "^\n6\n\n\nF6\n\n\n\n\nT",
31 "F7\n6\n\n&\n\n\n\n\n\nY", 32 "&\n7\n\n\nF7\n\n\n\n\nY",
32 "F8\n8\n\n*\nMacro4\n\n\n\n\nU", 33 "*\n8\n\n\nF8\n\n\n\n\nU",
33 "F9\n9\n\n(\n\n\n\n\n\nI", 34 "(\n9\n\n\nF9\n\n\n\n\nI",
34 { 35 {
35 "fa": [ 36 "fa": [
37 2,
36 0, 38 0,
37 0, 39 0,
38 0, 40 0
39 2
40 ] 41 ]
41 }, 42 },
42 "F10\n0\n\n)\n\n\n\n\n\nO", 43 ")\n0\n\n\nF10\n\n\n\n\nO",
43 { 44 {
44 "fa": [ 45 "fa": [
45 2, 46 2,
46 2, 47 2,
47 0, 48 0,
48 2 49 0,
50 0,
51 0,
52 0,
53 0,
54 0
49 ] 55 ]
50 }, 56 },
51 "F11\n-\n\n_\n\n\n\n\n\nP", 57 "_\n-\n\n\nF11\n\n\n\n\nP",
52 "F12\n=\n\n+\n\n\n\n\n\n<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>" 58 {
59 "a": 7,
60 "f": 3
61 },
62 "<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>"
53 ], 63 ],
54 [ 64 [
55 { 65 {
56 "a": 7,
57 "f": 3 66 "f": 3
58 }, 67 },
59 "<i class='mss mss-Unicode-DeleteRight-Big-2'></i>", 68 "<i class='mss mss-Unicode-DeleteRight-Big-2'></i>",
@@ -66,12 +75,12 @@
66 }, 75 },
67 "S", 76 "S",
68 { 77 {
78 "a": 4,
69 "f": 3 79 "f": 3
70 }, 80 },
71 "D", 81 "=\n_\n\n\n\n\n\n\n\nD",
72 { 82 {
73 "t": "#ff0000", 83 "t": "#ff0000",
74 "a": 4,
75 "f": 3 84 "f": 3
76 }, 85 },
77 "\n(\n\n\n\n\n\n\n\nF", 86 "\n(\n\n\n\n\n\n\n\nF",
@@ -93,24 +102,21 @@
93 "t": "#000000", 102 "t": "#000000",
94 "f": 3 103 "f": 3
95 }, 104 },
96 "{\n\n\n\n\n\n\n\n\nK", 105 "+\n-\n\n\nMacro4\n\n\n\n\nK",
97 { 106 {
107 "a": 7,
98 "f": 3 108 "f": 3
99 }, 109 },
100 "{\n\n\n\n\n\n\n\n\nL", 110 "L",
101 { 111 {
112 "a": 6,
102 "fa": [ 113 "fa": [
103 2, 114 2,
104 2, 115 2,
105 2,
106 2,
107 0,
108 0,
109 0,
110 2 116 2
111 ] 117 ]
112 }, 118 },
113 "\\\n\n|\n\n\n\n\n:\n\n;", 119 "\n\n:\n\nF12\n\n\n\n;",
114 { 120 {
115 "a": 7, 121 "a": 7,
116 "fa": [ 122 "fa": [
@@ -141,66 +147,79 @@
141 "fa": [ 147 "fa": [
142 2, 148 2,
143 2, 149 2,
144 2, 150 0,
145 2 151 0
146 ] 152 ]
147 }, 153 },
148 "\\\n[\n|\n{\nPaste\n\n\n\n\nV", 154 "\\\n[\n\n\nPaste\n\n\n\n\nV",
149 "|\n]\n\n}\nMacro1\n\n\n\n\nB", 155 "|\n]\n\n\nMacro1\n\n\n\n\nB",
150 "`\n'\n~\n\"\nMacro5\n\n\n\n\nN", 156 "`\n'\n\n\nMacro5\n\n\n\n\nN",
151 "~\n\"\n\n\nMacro2\n\n\n\n\nM", 157 "~\n\"\n\n\nMacro2\n\n\n\n\nM",
152 { 158 {
153 "fa": [ 159 "fa": [
154 2, 160 2,
155 2, 161 2,
156 2,
157 2,
158 0, 162 0,
159 0, 163 0,
160 0, 164 0,
161 1 165 0,
166 0,
167 2
162 ] 168 ]
163 }, 169 },
164 "[\n\n{\n\n\n\n\n<\n\n,", 170 "<\n\n\n\n\n\n\n<\n\n,",
165 "[\n\n{\n\n\n\n\n\n\n.",
166 { 171 {
167 "a": 6 172 "fa": [
173 2,
174 2,
175 0
176 ]
168 }, 177 },
169 "\n\n?\n\n\n\n\n\n/", 178 ">\n\n\n\n\n\n\n>\n\n.",
170 { 179 {
171 "a": 4,
172 "fa": [ 180 "fa": [
181 0,
173 2, 182 2,
174 2, 183 0,
184 0,
185 0,
186 0,
187 0,
188 2
189 ]
190 },
191 "\\\n\n\n\n\n\n\n?\n\n/",
192 {
193 "fa": [
194 0,
175 2, 195 2,
176 0, 196 0,
177 0, 197 0,
178 0, 198 0,
179 0, 199 0,
180 1, 200 0,
181 9, 201 2,
182 0 202 9
183 ] 203 ]
184 }, 204 },
185 "\n\n\n<i class='kb kb-Arrows-Bottom-4'></i>Shift\n\n\n\n\n<i class='mss mss-Unicode-Enter-3'></i>\n\n<i class='kb kb-Arrows-Bottom-4'></i>Shift" 205 "\n\n\n<i class='kb kb-Arrows-Bottom-4'></i>Shift\n\n\n\n\n<i class='mss mss-Unicode-Enter-3'></i>\n\n<i class='kb kb-Arrows-Bottom-4'></i>Shift"
186 ], 206 ],
187 [ 207 [
188 { 208 {
189 "a": 7, 209 "a": 7
190 "f": 3
191 }, 210 },
192 "Ctrl\n\n\n\nBLight", 211 "Ctrl\n\n\n\nBLight",
193 { 212 {
194 "a": 4, 213 "a": 4,
195 "fa": [ 214 "fa": [
196 2, 215 0,
197 1, 216 1,
198 2,
199 0, 217 0,
200 0, 218 0,
201 0, 219 0,
202 0, 220 0,
203 1, 221 0,
222 2,
204 9, 223 9,
205 9 224 9
206 ] 225 ]
@@ -208,29 +227,29 @@
208 "\nZNorm\n\n\nRESET\n\n\n\n\n<i class='mss mss-Unicode-Escape-3'></i>", 227 "\nZNorm\n\n\nRESET\n\n\n\n\n<i class='mss mss-Unicode-Escape-3'></i>",
209 { 228 {
210 "fa": [ 229 "fa": [
211 2, 230 0,
212 1, 231 1,
213 2,
214 0, 232 0,
215 0, 233 0,
216 0, 234 0,
217 0, 235 0,
218 1, 236 0,
237 2,
219 9, 238 9,
220 6 239 6
221 ] 240 ]
222 }, 241 },
223 "\nZIn\n\n\n\n\n\n\n\n<i class='kb kb-logo-windows-8'></i>", 242 "\nZIn\n\n\nc.a.del\n\n\n\n\n<i class='kb kb-logo-windows-8'></i>",
224 { 243 {
225 "fa": [ 244 "fa": [
226 2, 245 0,
227 1, 246 1,
228 2,
229 0, 247 0,
230 0, 248 0,
231 0, 249 0,
232 0, 250 0,
233 1, 251 0,
252 2,
234 9, 253 9,
235 9 254 9
236 ] 255 ]
diff --git a/keyboards/planck/keymaps/espynn/readme.md b/keyboards/planck/keymaps/espynn/readme.md
index 8882f4601..ea84cf955 100644
--- a/keyboards/planck/keymaps/espynn/readme.md
+++ b/keyboards/planck/keymaps/espynn/readme.md
@@ -3,7 +3,7 @@ Created by James Folkert: https://twitter.com/trekloFsemaJ
3Added several custom functions to the keymap from the "ab" map. Special thanks to "mollat" for demonstration of macros in their keymap.c 3Added several custom functions to the keymap from the "ab" map. Special thanks to "mollat" for demonstration of macros in their keymap.c
4 4
5 5
6![Layout](keyboard-layout.png "Practical Keymap") 6![Layout](keyboard-layout.jpg "Practical Keymap")
7 7
8 8
9* Online keyboard layout editor: http://www.keyboard-layout-editor.com/ 9* Online keyboard layout editor: http://www.keyboard-layout-editor.com/
@@ -14,5 +14,11 @@ Added several custom functions to the keymap from the "ab" map. Special thanks t
14* I disregarded the advice of Jack and used macros for passwords. I accept my fate. These have been abstracted to macros 2, 3, and 4 14* I disregarded the advice of Jack and used macros for passwords. I accept my fate. These have been abstracted to macros 2, 3, and 4
15* add your mobile and email to the keymap before make 15* add your mobile and email to the keymap before make
16* RAISE and LOWER also acts as PgUp and PgDn when tapped. 16* RAISE and LOWER also acts as PgUp and PgDn when tapped.
17* [CapsLock] also acts as [Ctrl] key when you press and hold. It is convenient for GNU Emacs users. (not sure if this works) 17* Bracket/ paran/ brace keys are placed in the center of the keyboard for programmer's convenience.
18* Bracket/ paran/ brace keys are placed in the center of the keyboard for programmer's convenience. \ No newline at end of file 18
19## changes
20* Removed some unneeded keys from raise and lower layers
21* moved the + and = signs, backspace is now more intuitive
22* moved all the Function keys to CUSTOM layer
23* added ctrl alt del to CUSTOM layer
24* simplified the layout picture greatly \ No newline at end of file
diff --git a/keyboards/planck/keymaps/khord/Makefile b/keyboards/planck/keymaps/khord/Makefile
new file mode 100644
index 000000000..f0ed9e8dc
--- /dev/null
+++ b/keyboards/planck/keymaps/khord/Makefile
@@ -0,0 +1,4 @@
1TAP_DANCE_ENABLE = yes
2ifndef QUANTUM_DIR
3 include ../../../../Makefile
4endif
diff --git a/keyboards/lets_split/rev2fliphalf/config.h b/keyboards/planck/keymaps/khord/config.h
index 1c45cf136..008f3a5c2 100644
--- a/keyboards/lets_split/rev2fliphalf/config.h
+++ b/keyboards/planck/keymaps/khord/config.h
@@ -22,23 +22,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
22 22
23/* USB Device descriptor parameter */ 23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED 24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x3060 25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001 26#define MANUFACTURER Ortholinear Keyboards
27#define MANUFACTURER Wootpatoot 27#define PRODUCT The Planck Keyboard
28#define PRODUCT Lets Split v2 28#define DESCRIPTION A compact ortholinear keyboard
29#define DESCRIPTION A split keyboard for the cheap makers
30 29
31/* key matrix size */ 30/* key matrix size */
32// Rows are doubled-up 31#define MATRIX_ROWS 4
33#define MATRIX_ROWS 8 32#define MATRIX_COLS 12
34#define MATRIX_COLS 6
35 33
36// wiring of each half 34/* Planck PCB default pin-out */
37#define MATRIX_ROW_PINS { D7, E6, B4, B5 } 35#define MATRIX_ROW_PINS { D0, D5, B5, B6 }
38//#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } 36#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
39#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6 } //uncomment this line and comment line above if you need to reverse left-to-right key order 37#define UNUSED_PINS
40 38
41//#define CATERINA_BOOTLOADER 39#define AUDIO_VOICES
40
41#define BACKLIGHT_PIN B7
42 42
43/* COL2ROW or ROW2COL */ 43/* COL2ROW or ROW2COL */
44#define DIODE_DIRECTION COL2ROW 44#define DIODE_DIRECTION COL2ROW
@@ -47,7 +47,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
47//#define MATRIX_HAS_GHOST 47//#define MATRIX_HAS_GHOST
48 48
49/* number of backlight levels */ 49/* number of backlight levels */
50// #define BACKLIGHT_LEVELS 3 50#define BACKLIGHT_LEVELS 3
51 51
52/* Set 0 if debouncing isn't needed */ 52/* Set 0 if debouncing isn't needed */
53#define DEBOUNCING_DELAY 5 53#define DEBOUNCING_DELAY 5
@@ -62,12 +62,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
62 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ 62 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
63) 63)
64 64
65/* ws2812 RGB LED */ 65/* Tap Dance */
66#define RGB_DI_PIN D3 66#define TAPPING_TERM 150
67#define RGBLIGHT_TIMER
68#define RGBLED_NUM 12 // Number of LEDs
69#define ws2812_PORTREG PORTD
70#define ws2812_DDRREG DDRD
71 67
72/* 68/*
73 * Feature disable options 69 * Feature disable options
@@ -75,10 +71,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
75 */ 71 */
76 72
77/* disable debug print */ 73/* disable debug print */
78// #define NO_DEBUG 74//#define NO_DEBUG
79 75
80/* disable print */ 76/* disable print */
81// #define NO_PRINT 77//#define NO_PRINT
82 78
83/* disable action features */ 79/* disable action features */
84//#define NO_ACTION_LAYER 80//#define NO_ACTION_LAYER
@@ -87,5 +83,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
87//#define NO_ACTION_MACRO 83//#define NO_ACTION_MACRO
88//#define NO_ACTION_FUNCTION 84//#define NO_ACTION_FUNCTION
89 85
86#ifdef SUBPROJECT_rev3
87 #include "rev3/config.h"
88#endif
89#ifdef SUBPROJECT_rev4
90 #include "rev4/config.h"
91#endif
90 92
91#endif \ No newline at end of file 93#endif
diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c
new file mode 100644
index 000000000..8001a0986
--- /dev/null
+++ b/keyboards/planck/keymaps/khord/keymap.c
@@ -0,0 +1,336 @@
1// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
2// this is the style you want to emulate.
3
4#include "planck.h"
5#include "action_layer.h"
6#ifdef AUDIO_ENABLE
7 #include "audio.h"
8#endif
9#include "eeconfig.h"
10
11extern keymap_config_t keymap_config;
12
13// Each layer gets a name for readability, which is then used in the keymap matrix below.
14// The underscores don't mean anything - you can have a layer called STUFF or any other name.
15// Layer names don't all need to be of the same length, obviously, and you can also skip them
16// entirely and just use numbers.
17#define _QWERTY 0
18#define _COLEMAK 1
19#define _DVORAK 2
20#define _LOWER 3
21#define _RAISE 4
22#define _PLOVER 5
23#define _ADJUST 16
24
25enum planck_keycodes {
26 QWERTY = SAFE_RANGE,
27 COLEMAK,
28 DVORAK,
29 PLOVER,
30 LOWER,
31 RAISE,
32 BACKLIT,
33 EXT_PLV
34};
35
36// Fillers to make layering more clear
37#define _______ KC_TRNS
38#define XXXXXXX KC_NO
39
40// Tap Dance Declarations
41enum {
42 ESC_CAP = 0,
43 LFT_HOM,
44 DWN_PDN,
45 UPP_PUP,
46 RGT_END
47};
48
49// Dylan's additions
50#define C_A_DEL LALT(LCTL(KC_DEL))
51#define C_A_INS LALT(LCTL(KC_INS))
52
53const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
54
55/* Qwerty
56 * ,-----------------------------------------------------------------------------------.
57 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
58 * |------+------+------+------+------+-------------+------+------+------+------+------|
59 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
60 * |------+------+------+------+------+------|------+------+------+------+------+------|
61 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
62 * |------+------+------+------+------+------+------+------+------+------+------+------|
63 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
64 * `-----------------------------------------------------------------------------------'
65 */
66[_QWERTY] = {
67 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
68 {TD(ESC_CAP), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
69 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)},
70 {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT }
71},
72
73/* Colemak
74 * ,-----------------------------------------------------------------------------------.
75 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
76 * |------+------+------+------+------+-------------+------+------+------+------+------|
77 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
78 * |------+------+------+------+------+------|------+------+------+------+------+------|
79 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
80 * |------+------+------+------+------+------+------+------+------+------+------+------|
81 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
82 * `-----------------------------------------------------------------------------------'
83 */
84[_COLEMAK] = {
85 {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
86 {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
87 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
88 {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
89},
90
91/* Dvorak
92 * ,-----------------------------------------------------------------------------------.
93 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
94 * |------+------+------+------+------+-------------+------+------+------+------+------|
95 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
96 * |------+------+------+------+------+------|------+------+------+------+------+------|
97 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
98 * |------+------+------+------+------+------+------+------+------+------+------+------|
99 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
100 * `-----------------------------------------------------------------------------------'
101 */
102[_DVORAK] = {
103 {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
104 {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
105 {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
106 {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
107},
108
109/* Lower
110 * ,-----------------------------------------------------------------------------------.
111 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
112 * |------+------+------+------+------+-------------+------+------+------+------+------|
113 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
114 * |------+------+------+------+------+------|------+------+------+------+------+------|
115 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | END | HOME |Enter |
116 * |------+------+------+------+------+------+------+------+------+------+------+------|
117 * | | | | | | | | Next | Vol- | Vol+ | Play |
118 * `-----------------------------------------------------------------------------------'
119 */
120[_LOWER] = {
121 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
122 {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
123 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_END, KC_HOME, _______},
124 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
125},
126
127/* Raise
128 * ,-----------------------------------------------------------------------------------.
129 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
130 * |------+------+------+------+------+-------------+------+------+------+------+------|
131 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
132 * |------+------+------+------+------+------|------+------+------+------+------+------|
133 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |PG DN |PG UP |Enter |
134 * |------+------+------+------+------+------+------+------+------+------+------+------|
135 * | | | | | | | | Next | Vol- | Vol+ | Play |
136 * `-----------------------------------------------------------------------------------'
137 */
138[_RAISE] = {
139 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
140 {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
141 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGDN, KC_PGUP, _______},
142 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
143},
144
145/* Plover layer (http://opensteno.org)
146 * ,-----------------------------------------------------------------------------------.
147 * | # | # | # | # | # | # | # | # | # | # | # | # |
148 * |------+------+------+------+------+-------------+------+------+------+------+------|
149 * | | S | T | P | H | * | * | F | P | L | T | D |
150 * |------+------+------+------+------+------|------+------+------+------+------+------|
151 * |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
152 * |------+------+------+------+------+------+------+------+------+------+------+------|
153 * | Exit | | | A | O | | E | U | | | |
154 * `-----------------------------------------------------------------------------------'
155 */
156
157[_PLOVER] = {
158 {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
159 {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
160 {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
161 {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
162},
163
164/* Adjust (Lower + Raise)
165 * ,-----------------------------------------------------------------------------------.
166 * | | Reset| | | | | | | | | | Del |
167 * |------+------+------+------+------+-------------+------+------+------+------+------|
168 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
169 * |------+------+------+------+------+------|------+------+------+------+------+------|
170 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
171 * |------+------+------+------+------+------+------+------+------+------+------+------|
172 * | | | | | | | | | | | |
173 * `-----------------------------------------------------------------------------------'
174 */
175[_ADJUST] = {
176 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
177 {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
178 {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
179 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_A_INS, C_A_DEL}
180}
181
182
183};
184
185
186qk_tap_dance_action_t tap_dance_actions[] = {
187 [ESC_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS),
188 [LFT_HOM] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME),
189 [DWN_PDN] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_PGDN),
190 [UPP_PUP] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_PGUP),
191 [RGT_END] = ACTION_TAP_DANCE_DOUBLE(KC_RGHT, KC_END)
192};
193
194#ifdef AUDIO_ENABLE
195
196float tone_startup[][2] = SONG(SONIC_RING); //plug in
197float tone_qwerty[][2] = SONG(QWERTY_SOUND);
198float tone_dvorak[][2] = SONG(DVORAK_SOUND);
199float tone_colemak[][2] = SONG(COLEMAK_SOUND);
200float tone_plover[][2] = SONG(PLOVER_SOUND);
201float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
202float music_scale[][2] = SONG(ZELDA_PUZZLE); //music mode
203
204float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
205#endif
206
207
208void persistant_default_layer_set(uint16_t default_layer) {
209 eeconfig_update_default_layer(default_layer);
210 default_layer_set(default_layer);
211}
212
213bool process_record_user(uint16_t keycode, keyrecord_t *record) {
214 switch (keycode) {
215 case QWERTY:
216 if (record->event.pressed) {
217 #ifdef AUDIO_ENABLE
218 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
219 #endif
220 persistant_default_layer_set(1UL<<_QWERTY);
221 }
222 return false;
223 break;
224 case COLEMAK:
225 if (record->event.pressed) {
226 #ifdef AUDIO_ENABLE
227 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
228 #endif
229 persistant_default_layer_set(1UL<<_COLEMAK);
230 }
231 return false;
232 break;
233 case DVORAK:
234 if (record->event.pressed) {
235 #ifdef AUDIO_ENABLE
236 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
237 #endif
238 persistant_default_layer_set(1UL<<_DVORAK);
239 }
240 return false;
241 break;
242 case LOWER:
243 if (record->event.pressed) {
244 layer_on(_LOWER);
245 update_tri_layer(_LOWER, _RAISE, _ADJUST);
246 } else {
247 layer_off(_LOWER);
248 update_tri_layer(_LOWER, _RAISE, _ADJUST);
249 }
250 return false;
251 break;
252 case RAISE:
253 if (record->event.pressed) {
254 layer_on(_RAISE);
255 update_tri_layer(_LOWER, _RAISE, _ADJUST);
256 } else {
257 layer_off(_RAISE);
258 update_tri_layer(_LOWER, _RAISE, _ADJUST);
259 }
260 return false;
261 break;
262 case BACKLIT:
263 if (record->event.pressed) {
264 register_code(KC_RSFT);
265 #ifdef BACKLIGHT_ENABLE
266 backlight_step();
267 #endif
268 } else {
269 unregister_code(KC_RSFT);
270 }
271 return false;
272 break;
273 case PLOVER:
274 if (record->event.pressed) {
275 #ifdef AUDIO_ENABLE
276 stop_all_notes();
277 PLAY_NOTE_ARRAY(tone_plover, false, 0);
278 #endif
279 layer_off(_RAISE);
280 layer_off(_LOWER);
281 layer_off(_ADJUST);
282 layer_on(_PLOVER);
283 if (!eeconfig_is_enabled()) {
284 eeconfig_init();
285 }
286 keymap_config.raw = eeconfig_read_keymap();
287 keymap_config.nkro = 1;
288 eeconfig_update_keymap(keymap_config.raw);
289 }
290 return false;
291 break;
292 case EXT_PLV:
293 if (record->event.pressed) {
294 #ifdef AUDIO_ENABLE
295 PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
296 #endif
297 layer_off(_PLOVER);
298 }
299 return false;
300 break;
301 }
302 return true;
303}
304
305void matrix_init_user(void) {
306 #ifdef AUDIO_ENABLE
307 startup_user();
308 #endif
309}
310
311#ifdef AUDIO_ENABLE
312
313void startup_user()
314{
315 _delay_ms(20); // gets rid of tick
316 PLAY_NOTE_ARRAY(tone_startup, false, 0);
317}
318
319void shutdown_user()
320{
321 PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
322 _delay_ms(150);
323 stop_all_notes();
324}
325
326void music_on_user(void)
327{
328 music_scale_user();
329}
330
331void music_scale_user(void)
332{
333 PLAY_NOTE_ARRAY(music_scale, false, 0);
334}
335
336#endif
diff --git a/keyboards/planck/keymaps/smt/keymap.c b/keyboards/planck/keymaps/smt/keymap.c
index 51e5a40bf..708f699da 100644
--- a/keyboards/planck/keymaps/smt/keymap.c
+++ b/keyboards/planck/keymaps/smt/keymap.c
@@ -11,15 +11,17 @@ extern keymap_config_t keymap_config;
11// The underscores don't mean anything - you can have a layer called STUFF or any other name. 11// The underscores don't mean anything - you can have a layer called STUFF or any other name.
12// Layer names don't all need to be of the same length, obviously, and you can also skip them 12// Layer names don't all need to be of the same length, obviously, and you can also skip them
13// entirely and just use numbers. 13// entirely and just use numbers.
14#define _DVORAK 0 14#define _QWERTY 0
15#define _QWERTY 1 15#define _COLEMAK 1
16#define _LOWER 2 16#define _DVORAK 2
17#define _RAISE 3 17#define _LOWER 3
18#define _RAISE 4
18#define _ADJUST 16 19#define _ADJUST 16
19 20
20enum planck_keycodes { 21enum planck_keycodes {
21 DVORAK = SAFE_RANGE, 22 QWERTY = SAFE_RANGE,
22 QWERTY, 23 COLEMAK,
24 DVORAK,
23 LOWER, 25 LOWER,
24 RAISE, 26 RAISE,
25 BACKLIT 27 BACKLIT
@@ -29,60 +31,84 @@ enum planck_keycodes {
29#define _______ KC_TRNS 31#define _______ KC_TRNS
30#define XXXXXXX KC_NO 32#define XXXXXXX KC_NO
31 33
34// Custom macros
35#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
36#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
37#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
38#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift)
39
32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 40const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33 41
34/* Dvorak 42/* Qwerty
35 * ,-----------------------------------------------------------------------------------. 43 * ,-----------------------------------------------------------------------------------.
36 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | 44 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
37 * |------+------+------+------+------+-------------+------+------+------+------+------| 45 * |------+------+------+------+------+-------------+------+------+------+------+------|
38 * | Esc | A | O | E | U | I | D | H | T | N | S | - | 46 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
39 * |------+------+------+------+------+------|------+------+------+------+------+------| 47 * |------+------+------+------+------+------|------+------+------+------+------+------|
40 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | 48 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
41 * |------+------+------+------+------+------+------+------+------+------+------+------| 49 * |------+------+------+------+------+------+------+------+------+------+------+------|
42 * | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | 50 * | ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
43 * `-----------------------------------------------------------------------------------' 51 * `-----------------------------------------------------------------------------------'
44 */ 52 */
45[_DVORAK] = { 53[_QWERTY] = {
46 {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, 54 {HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
47 {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, 55 {CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
48 {SFT_T(KC_ESC), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)}, 56 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT},
49 {ALL_T(KC_GRV), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} 57 {MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
50}, 58},
51 59
52/* Qwerty 60/* Colemak
53 * ,-----------------------------------------------------------------------------------. 61 * ,-----------------------------------------------------------------------------------.
54 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | 62 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
55 * |------+------+------+------+------+-------------+------+------+------+------+------| 63 * |------+------+------+------+------+-------------+------+------+------+------+------|
56 * | Esc | A | S | D | F | G | H | J | K | L | ; | " | 64 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
57 * |------+------+------+------+------+------|------+------+------+------+------+------| 65 * |------+------+------+------+------+------|------+------+------+------+------+------|
58 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | 66 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
59 * |------+------+------+------+------+------+------+------+------+------+------+------| 67 * |------+------+------+------+------+------+------+------+------+------+------+------|
60 * | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | 68 * | ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
61 * `-----------------------------------------------------------------------------------' 69 * `-----------------------------------------------------------------------------------'
62 */ 70 */
63[_QWERTY] = { 71[_COLEMAK] = {
64 {_______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, 72 {HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
65 {_______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, 73 {CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
66 {_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______}, 74 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT},
67 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 75 {MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
76},
77
78/* Dvorak
79 * ,-----------------------------------------------------------------------------------.
80 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
81 * |------+------+------+------+------+-------------+------+------+------+------+------|
82 * | Esc | A | O | E | U | I | D | H | T | N | S | - |
83 * |------+------+------+------+------+------|------+------+------+------+------+------|
84 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
85 * |------+------+------+------+------+------+------+------+------+------+------+------|
86 * | ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
87 * `-----------------------------------------------------------------------------------'
88 */
89[_DVORAK] = {
90 {HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
91 {CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS},
92 {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT},
93 {MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
68}, 94},
69 95
70/* Lower 96/* Lower
71 * ,-----------------------------------------------------------------------------------. 97 * ,-----------------------------------------------------------------------------------.
72 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | 98 * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
73 * |------+------+------+------+------+-------------+------+------+------+------+------| 99 * |------+------+------+------+------+-------------+------+------+------+------+------|
74 * | | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | Home |PageUp| 100 * | $ | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | | |
75 * |------+------+------+------+------+------|------+------+------+------+------+------| 101 * |------+------+------+------+------+------|------+------+------+------+------+------|
76 * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | End |PageDn| 102 * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | | |
77 * |------+------+------+------+------+------+------+------+------+------+------+------| 103 * |------+------+------+------+------+------+------+------+------+------+------+------|
78 * | | | | | | | | Next | Vol- | Vol+ | Play | 104 * | | | | | | | | Next | Vol- | Vol+ | Play |
79 * `-----------------------------------------------------------------------------------' 105 * `-----------------------------------------------------------------------------------'
80 */ 106 */
81[_LOWER] = { 107[_LOWER] = {
82 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, 108 {ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
83 {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_HOME, KC_PGUP}, 109 {CTL_T(KC_DLR), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______},
84 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_END, KC_PGDN}, 110 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, _______, _______},
85 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} 111 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
86}, 112},
87 113
88/* Raise 114/* Raise
@@ -93,21 +119,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
93 * |------+------+------+------+------+------|------+------+------+------+------+------| 119 * |------+------+------+------+------+------|------+------+------+------+------+------|
94 * | | | | | | | - | / | = | [ | ] | \ | 120 * | | | | | | | - | / | = | [ | ] | \ |
95 * |------+------+------+------+------+------+------+------+------+------+------+------| 121 * |------+------+------+------+------+------+------+------+------+------+------+------|
96 * | | | | | | | | Next | Vol- | Vol+ | Play | 122 * | | | | | | | | | Home |PageDn|PageUp| End |
97 * `-----------------------------------------------------------------------------------' 123 * `-----------------------------------------------------------------------------------'
98 */ 124 */
99[_RAISE] = { 125[_RAISE] = {
100 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, 126 {ALL_T(KC_TILD), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
101 {_______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, 127 {_______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
102 {_______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, 128 {_______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, SFT_T(KC_BSLS)},
103 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} 129 {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
104}, 130},
105 131
106/* Adjust (Lower + Raise) 132/* Adjust (Lower + Raise)
107 * ,-----------------------------------------------------------------------------------. 133 * ,-----------------------------------------------------------------------------------.
108 * | | Reset| | | | | | | | | | Del | 134 * | | Reset| | | | | | | | | | Reset|
109 * |------+------+------+------+------+-------------+------+------+------+------+------| 135 * |------+------+------+------+------+-------------+------+------+------+------+------|
110 * | | | |Aud on|Audoff|AGnorm|AGswap|Dvorak|Qwerty| | | | 136 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
111 * |------+------+------+------+------+------|------+------+------+------+------+------| 137 * |------+------+------+------+------+------|------+------+------+------+------+------|
112 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | 138 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
113 * |------+------+------+------+------+------+------+------+------+------+------+------| 139 * |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -115,8 +141,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
115 * `-----------------------------------------------------------------------------------' 141 * `-----------------------------------------------------------------------------------'
116 */ 142 */
117[_ADJUST] = { 143[_ADJUST] = {
118 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, 144 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET},
119 {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, DVORAK, QWERTY, _______, _______, _______}, 145 {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
120 {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, 146 {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
121 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 147 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
122} 148}
@@ -128,6 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
128 154
129float tone_startup[][2] = SONG(STARTUP_SOUND); 155float tone_startup[][2] = SONG(STARTUP_SOUND);
130float tone_qwerty[][2] = SONG(QWERTY_SOUND); 156float tone_qwerty[][2] = SONG(QWERTY_SOUND);
157float tone_colemak[][2] = SONG(COLEMAK_SOUND);
131float tone_dvorak[][2] = SONG(DVORAK_SOUND); 158float tone_dvorak[][2] = SONG(DVORAK_SOUND);
132float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); 159float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
133 160
@@ -142,21 +169,30 @@ void persistant_default_layer_set(uint16_t default_layer) {
142 169
143bool process_record_user(uint16_t keycode, keyrecord_t *record) { 170bool process_record_user(uint16_t keycode, keyrecord_t *record) {
144 switch (keycode) { 171 switch (keycode) {
145 case DVORAK: 172 case QWERTY:
146 if (record->event.pressed) { 173 if (record->event.pressed) {
147 #ifdef AUDIO_ENABLE 174 #ifdef AUDIO_ENABLE
148 PLAY_NOTE_ARRAY(tone_dvorak, false, 0); 175 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
149 #endif 176 #endif
150 persistant_default_layer_set(1UL<<_DVORAK); 177 persistant_default_layer_set(1UL<<_QWERTY);
151 } 178 }
152 return false; 179 return false;
153 break; 180 break;
154 case QWERTY: 181 case COLEMAK:
155 if (record->event.pressed) { 182 if (record->event.pressed) {
156 #ifdef AUDIO_ENABLE 183 #ifdef AUDIO_ENABLE
157 PLAY_NOTE_ARRAY(tone_qwerty, false, 0); 184 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
158 #endif 185 #endif
159 persistant_default_layer_set(1UL<<_QWERTY); 186 persistant_default_layer_set(1UL<<_COLEMAK);
187 }
188 return false;
189 break;
190 case DVORAK:
191 if (record->event.pressed) {
192 #ifdef AUDIO_ENABLE
193 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
194 #endif
195 persistant_default_layer_set(1UL<<_DVORAK);
160 } 196 }
161 return false; 197 return false;
162 break; 198 break;
diff --git a/keyboards/planck/keymaps/smt/readme.md b/keyboards/planck/keymaps/smt/readme.md
index 0e955a574..dc7c9cf9f 100644
--- a/keyboards/planck/keymaps/smt/readme.md
+++ b/keyboards/planck/keymaps/smt/readme.md
@@ -4,49 +4,70 @@ This keymap is primarily based on the default Planck keymap.
4 4
5Notable differences from the default are: 5Notable differences from the default are:
6 6
71. **Dvorak by default** 7- **[Mod-Tap](https://github.com/jackhumbert/qmk_firmware/wiki#fun-with-modifier-keys) keys**
8 8
9 I happen to type in Dvorak, and prefer that layer to be the default on my keyboard. This is easy enough to switch around with Qwerty, Colemak, or whatever. 9 - `Esc/Ctrl`
10 10
112. **Right Shift** 11 I am experimenting with using Left Shift as a mod-tap key for Escape, similar to how I use the Enter key. It's set up like this on my Minivan, so in the interest of consistency...
12 12
13 I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory. 13 - `Enter/Shift`
14 14
15 Thankfully, QMK supports [mod-tap](https://github.com/jackhumbert/qmk_firmware/wiki#fun-with-modifier-keys) keys, and this allows me to set the Enter key to send a modifier (MOD_LSFT) when held, and KC_ENT when tapped. Awesome! 15 I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory.
16 16
173. Escape 17 - `Tab/Hyper` (Super+Ctrl+Shift+Alt)
18 18
19 I am experimenting with using Left Shift as a mod-tap key for Escape, similar to how I use the Enter key. It's set up like this on my Minivan, so in the interest of consistency... 19 It's great to be able to use Tab as a custom modifier key. I tend to use [Hyper](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) commands for various OS-specific operations depending on what machine I'm working on.
20 20
214. Backtick 21 - `Backtick/Meh` (Ctrl+Shift+Alt)
22 22
23 I don't currently have LEDs on any of my keyboards, and even if I did, I don't think I would want their controls on a base layer. 23 Why use backtick in the lower left corner? I use it as my tmux prefix key, so I need to type it more frequently than most people. Putting it on the base layer works well for me. The "Meh" mapping is just a less-cool "Hyper"; the same, just without Super.
24 24
25 So, why use backtick in the lower left corner? I use it as my tmux prefix key, so I need to type it more frequently than most people. Putting it on the base layer works well for me. 25- **Swapped responsibilities of "lower" and "raise" layers**
26 26
27## Dvorak (default) 27 I prefer to use symbols via the "raise" layer, and numbers via the "lower" layer.
28
29- **Removed Plover layer**
30
31 I don't intend to use stenography anytime soon, so Plover just didn't have a place in my keymap.
32
33
34## Qwerty
28 35
29``` 36```
30,-----------------------------------------------------------------------------------. 37,-----------------------------------------------------------------------------------.
31| Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | 38| Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
32|------+------+------+------+------+-------------+------+------+------+------+------| 39|------+------+------+------+------+-------------+------+------+------+------+------|
33| Esc | A | O | E | U | I | D | H | T | N | S | - | 40| Esc | A | S | D | F | G | H | J | K | L | ; | " |
34|------+------+------+------+------+------|------+------+------+------+------+------| 41|------+------+------+------+------+------|------+------+------+------+------+------|
35| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | 42| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
36|------+------+------+------+------+------+------+------+------+------+------+------| 43|------+------+------+------+------+------+------+------+------+------+------+------|
37| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | 44| ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
38`-----------------------------------------------------------------------------------' 45`-----------------------------------------------------------------------------------'
39``` 46```
40 47
41## Qwerty (same as default) 48## Colemak
42 49
43``` 50```
44,-----------------------------------------------------------------------------------. 51,-----------------------------------------------------------------------------------.
45| Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | 52| Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
46|------+------+------+------+------+-------------+------+------+------+------+------| 53|------+------+------+------+------+-------------+------+------+------+------+------|
47| Esc | A | S | D | F | G | H | J | K | L | ; | " | 54| Esc | A | R | S | T | D | H | N | E | I | O | " |
48|------+------+------+------+------+------|------+------+------+------+------+------| 55|------+------+------+------+------+------|------+------+------+------+------+------|
49| Shift| Z | X | C | V | B | N | M | , | . | / |Enter | 56| Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
57|------+------+------+------+------+------+------+------+------+------+------+------|
58| ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
59`-----------------------------------------------------------------------------------'
60```
61
62## Dvorak
63
64```
65,-----------------------------------------------------------------------------------.
66| Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
67|------+------+------+------+------+-------------+------+------+------+------+------|
68| Esc | A | O | E | U | I | D | H | T | N | S | - |
69|------+------+------+------+------+------|------+------+------+------+------+------|
70| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
50|------+------+------+------+------+------+------+------+------+------+------+------| 71|------+------+------+------+------+------+------+------+------+------+------+------|
51| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | 72| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
52`-----------------------------------------------------------------------------------' 73`-----------------------------------------------------------------------------------'
@@ -54,15 +75,15 @@ Notable differences from the default are:
54 75
55## Lower 76## Lower
56 77
57This is where I put the number row, a numpad cluster, function keys, and some light navigation via Home/End/PageUp/PageDn. Like the "Raise" layer, the top row is redundant to help with Planck compatibility. 78This is where I put the number row, a numpad cluster, function keys, and media controls.
58 79
59``` 80```
60,-----------------------------------------------------------------------------------. 81,-----------------------------------------------------------------------------------.
61| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | 82| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
62|------+------+------+------+------+-------------+------+------+------+------+------| 83|------+------+------+------+------+-------------+------+------+------+------+------|
63| | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | Home |PageUp| 84| $ | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | | |
64|------+------+------+------+------+------|------+------+------+------+------+------| 85|------+------+------+------+------+------|------+------+------+------+------+------|
65| | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | End |PageDn| 86| | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | | |
66|------+------+------+------+------+------+------+------+------+------+------+------| 87|------+------+------+------+------+------+------+------+------+------+------+------|
67| | | | | | | | Next | Vol- | Vol+ | Play | 88| | | | | | | | Next | Vol- | Vol+ | Play |
68`-----------------------------------------------------------------------------------' 89`-----------------------------------------------------------------------------------'
@@ -70,7 +91,7 @@ This is where I put the number row, a numpad cluster, function keys, and some li
70 91
71## Raise 92## Raise
72 93
73As a developer, it makes the most sense for me to group all the commonly-used symbols that don't fit on the main layer. In particular, having the dual-column of parens-braces-brackets really helps a lot. 94As a developer, it makes the most sense for me to group all the commonly-used symbols that don't fit on the main layer. In particular, having the dual-column of parens-braces-brackets really helps a lot. I've also added cursorkeys to correspond to the arrows.
74 95
75I haven't completely filled this layer, which leaves room for future mappings and macros. 96I haven't completely filled this layer, which leaves room for future mappings and macros.
76 97
@@ -82,21 +103,21 @@ I haven't completely filled this layer, which leaves room for future mappings an
82|------+------+------+------+------+------|------+------+------+------+------+------| 103|------+------+------+------+------+------|------+------+------+------+------+------|
83| | | | | | | - | / | = | [ | ] | \ | 104| | | | | | | - | / | = | [ | ] | \ |
84|------+------+------+------+------+------+------+------+------+------+------+------| 105|------+------+------+------+------+------+------+------+------+------+------+------|
85| | | | | | | | Next | Vol- | Vol+ | Play | 106| | | | | | | | | Home |PageDn|PageUp| End |
86`-----------------------------------------------------------------------------------' 107`-----------------------------------------------------------------------------------'
87``` 108```
88 109
89## Adjust (Lower + Raise) 110## Adjust (Lower + Raise)
90 111
91Utility layer. This is where I'd switch to Qwerty, or ~~fool around with~~ adjust the audio/music settings. 112Utility layer. This is where I'd switch between Qwerty and Dvorak, ~~fool around with~~ adjust the audio/music settings, or put the Planck into bootloader mode.
92 113
93``` 114```
94,-----------------------------------------------------------------------------------. 115,-----------------------------------------------------------------------------------.
95| | Reset| | | | | | | | | | Del | 116| | Reset| | | | | | | | | | Reset|
96|------+------+------+------+------+-------------+------+------+------+------+------| 117|------+------+------+------+------+-------------+------+------+------+------+------|
97| | | |Aud on|AudOff|AGnorm|AGswap|Dvorak|Qwerty| | | | 118| | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
98|------+------+------+------+------+------|------+------+------+------+------+------| 119|------+------+------+------+------+------|------+------+------+------+------+------|
99| |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | 120| |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
100|------+------+------+------+------+------+------+------+------+------+------+------| 121|------+------+------+------+------+------+------+------+------+------+------+------|
101| | | | | | | | | | | | 122| | | | | | | | | | | |
102`-----------------------------------------------------------------------------------' 123`-----------------------------------------------------------------------------------'
diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk
index 4423d422f..6776062f6 100644
--- a/keyboards/planck/rules.mk
+++ b/keyboards/planck/rules.mk
@@ -56,13 +56,13 @@ EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
56CONSOLE_ENABLE ?= no # Console for debug(+400) 56CONSOLE_ENABLE ?= no # Console for debug(+400)
57COMMAND_ENABLE ?= no # Commands for debug and configuration 57COMMAND_ENABLE ?= no # Commands for debug and configuration
58NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work 58NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
59BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality 59BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
60MIDI_ENABLE ?= yes # MIDI controls 60MIDI_ENABLE ?= yes # MIDI controls
61AUDIO_ENABLE ?= yes # Audio output on port C6 61AUDIO_ENABLE ?= yes # Audio output on port C6
62UNICODE_ENABLE ?= no # Unicode 62UNICODE_ENABLE ?= no # Unicode
63BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID 63BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
64RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. 64RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight.
65API_SYSEX_ENABLE = yes 65API_SYSEX_ENABLE = no
66 66
67# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE 67# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
68SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend 68SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
diff --git a/keyboards/preonic/keymaps/smt/keymap.c b/keyboards/preonic/keymaps/smt/keymap.c
index ba05d9ad5..a10deb750 100644
--- a/keyboards/preonic/keymaps/smt/keymap.c
+++ b/keyboards/preonic/keymaps/smt/keymap.c
@@ -9,15 +9,17 @@
9// The underscores don't mean anything - you can have a layer called STUFF or any other name. 9// The underscores don't mean anything - you can have a layer called STUFF or any other name.
10// Layer names don't all need to be of the same length, obviously, and you can also skip them 10// Layer names don't all need to be of the same length, obviously, and you can also skip them
11// entirely and just use numbers. 11// entirely and just use numbers.
12#define _DVORAK 0 12#define _QWERTY 0
13#define _QWERTY 1 13#define _COLEMAK 1
14#define _LOWER 2 14#define _DVORAK 2
15#define _RAISE 3 15#define _LOWER 3
16#define _RAISE 4
16#define _ADJUST 16 17#define _ADJUST 16
17 18
18enum preonic_keycodes { 19enum preonic_keycodes {
19 DVORAK = SAFE_RANGE, 20 QWERTY = SAFE_RANGE,
20 QWERTY, 21 COLEMAK,
22 DVORAK,
21 LOWER, 23 LOWER,
22 RAISE, 24 RAISE,
23 BACKLIT 25 BACKLIT
@@ -27,69 +29,96 @@ enum preonic_keycodes {
27#define _______ KC_TRNS 29#define _______ KC_TRNS
28#define XXXXXXX KC_NO 30#define XXXXXXX KC_NO
29 31
32// Custom macros
33#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
34#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
35#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
36#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift)
37
30const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 38const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
31 39
32/* Dvorak 40/* Qwerty
33 * ,-----------------------------------------------------------------------------------. 41 * ,-----------------------------------------------------------------------------------.
34 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 42 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
35 * |------+------+------+------+------+------+------+------+------+------+------+------| 43 * |------+------+------+------+------+------+------+------+------+------+------+------|
36 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | 44 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
37 * |------+------+------+------+------+-------------+------+------+------+------+------| 45 * |------+------+------+------+------+-------------+------+------+------+------+------|
38 * | Esc | A | O | E | U | I | D | H | T | N | S | - | 46 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
39 * |------+------+------+------+------+------|------+------+------+------+------+------| 47 * |------+------+------+------+------+------|------+------+------+------+------+------|
40 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | 48 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
41 * |------+------+------+------+------+------+------+------+------+------+------+------| 49 * |------+------+------+------+------+------+------+------+------+------+------+------|
42 * | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | 50 * | ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
43 * `-----------------------------------------------------------------------------------' 51 * `-----------------------------------------------------------------------------------'
44 */ 52 */
45[_DVORAK] = { 53[_QWERTY] = {
46 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, 54 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
47 {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, 55 {HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
48 {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, 56 {CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
49 {SFT_T(KC_ESC), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)}, 57 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT},
50 {ALL_T(KC_GRV), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} 58 {MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
51}, 59},
52 60
53/* Qwerty 61/* Colemak
54 * ,-----------------------------------------------------------------------------------. 62 * ,-----------------------------------------------------------------------------------.
55 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 63 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
56 * |------+------+------+------+------+------+------+------+------+------+------+------| 64 * |------+------+------+------+------+------+------+------+------+------+------+------|
57 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | 65 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
58 * |------+------+------+------+------+-------------+------+------+------+------+------| 66 * |------+------+------+------+------+-------------+------+------+------+------+------|
59 * | Esc | A | S | D | F | G | H | J | K | L | ; | " | 67 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
60 * |------+------+------+------+------+------|------+------+------+------+------+------| 68 * |------+------+------+------+------+------|------+------+------+------+------+------|
61 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | 69 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
62 * |------+------+------+------+------+------+------+------+------+------+------+------| 70 * |------+------+------+------+------+------+------+------+------+------+------+------|
63 * | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | 71 * | ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
64 * `-----------------------------------------------------------------------------------' 72 * `-----------------------------------------------------------------------------------'
65 */ 73 */
66[_QWERTY] = { 74[_COLEMAK] = {
67 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, 75 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
68 {_______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, _______}, 76 {HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
69 {_______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, 77 {CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
70 {_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______}, 78 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT},
71 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 79 {MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
80},
81
82/* Dvorak
83 * ,-----------------------------------------------------------------------------------.
84 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
85 * |------+------+------+------+------+------+------+------+------+------+------+------|
86 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
87 * |------+------+------+------+------+-------------+------+------+------+------+------|
88 * | Esc | A | O | E | U | I | D | H | T | N | S | - |
89 * |------+------+------+------+------+------|------+------+------+------+------+------|
90 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
91 * |------+------+------+------+------+------+------+------+------+------+------+------|
92 * | ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
93 * `-----------------------------------------------------------------------------------'
94 */
95[_DVORAK] = {
96 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
97 {HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
98 {CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS},
99 {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT},
100 {MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
72}, 101},
73 102
74/* Lower 103/* Lower
75 * ,-----------------------------------------------------------------------------------. 104 * ,-----------------------------------------------------------------------------------.
76 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | 105 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
77 * |------+------+------+------+------+------+------+------+------+------+------+------| 106 * |------+------+------+------+------+------+------+------+------+------+------+------|
78 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | 107 * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
79 * |------+------+------+------+------+-------------+------+------+------+------+------| 108 * |------+------+------+------+------+-------------+------+------+------+------+------|
80 * | | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | Home |PageUp| 109 * | $ | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | | |
81 * |------+------+------+------+------+------|------+------+------+------+------+------| 110 * |------+------+------+------+------+------|------+------+------+------+------+------|
82 * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | End |PageDn| 111 * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | | |
83 * |------+------+------+------+------+------+------+------+------+------+------+------| 112 * |------+------+------+------+------+------+------+------+------+------+------+------|
84 * | | | | | | | | Next | Vol- | Vol+ | Play | 113 * | | | | | | | | Next | Vol- | Vol+ | Play |
85 * `-----------------------------------------------------------------------------------' 114 * `-----------------------------------------------------------------------------------'
86 */ 115 */
87[_LOWER] = { 116[_LOWER] = {
88 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, 117 {ALL_T(KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
89 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, 118 {ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
90 {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_HOME, KC_PGUP}, 119 {CTL_T(KC_DLR), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______},
91 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_END, KC_PGDN}, 120 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, _______, _______},
92 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} 121 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
93}, 122},
94 123
95/* Raise 124/* Raise
@@ -102,24 +131,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
102 * |------+------+------+------+------+------|------+------+------+------+------+------| 131 * |------+------+------+------+------+------|------+------+------+------+------+------|
103 * | | | | | | | - | / | = | [ | ] | \ | 132 * | | | | | | | - | / | = | [ | ] | \ |
104 * |------+------+------+------+------+------+------+------+------+------+------+------| 133 * |------+------+------+------+------+------+------+------+------+------+------+------|
105 * | | | | | | | | Next | Vol- | Vol+ | Play | 134 * | | | | | | | | | Home |PageDn|PageUp| End |
106 * `-----------------------------------------------------------------------------------' 135 * `-----------------------------------------------------------------------------------'
107 */ 136 */
108[_RAISE] = { 137[_RAISE] = {
109 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, 138 {ALL_T(KC_TILD), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
110 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, 139 {ALL_T(KC_TILD), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
111 {_______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, 140 {_______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
112 {_______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, 141 {_______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, SFT_T(KC_BSLS)},
113 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} 142 {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
114}, 143},
115 144
116/* Adjust (Lower + Raise) 145/* Adjust (Lower + Raise)
117 * ,-----------------------------------------------------------------------------------. 146 * ,-----------------------------------------------------------------------------------.
118 * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | 147 * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
119 * |------+------+------+------+------+------+------+------+------+------+------+------| 148 * |------+------+------+------+------+------+------+------+------+------+------+------|
120 * | | Reset| | | | | | | | | | Del | 149 * | | Reset| | | | | | | | | | Reset|
121 * |------+------+------+------+------+-------------+------+------+------+------+------| 150 * |------+------+------+------+------+-------------+------+------+------+------+------|
122 * | | | |Aud on|AudOff|AGnorm|AGswap|Dvorak|Qwerty| | | | 151 * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
123 * |------+------+------+------+------+------|------+------+------+------+------+------| 152 * |------+------+------+------+------+------|------+------+------+------+------+------|
124 * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | 153 * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
125 * |------+------+------+------+------+------+------+------+------+------+------+------| 154 * |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -128,8 +157,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
128 */ 157 */
129[_ADJUST] = { 158[_ADJUST] = {
130 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, 159 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
131 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, 160 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET},
132 {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, DVORAK, QWERTY, _______, _______, _______}, 161 {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
133 {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, 162 {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
134 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 163 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
135} 164}
@@ -145,8 +174,9 @@ float tone_startup[][2] = {
145 {NOTE_B6, 8} 174 {NOTE_B6, 8}
146}; 175};
147 176
148float tone_dvorak[][2] = SONG(DVORAK_SOUND);
149float tone_qwerty[][2] = SONG(QWERTY_SOUND); 177float tone_qwerty[][2] = SONG(QWERTY_SOUND);
178float tone_colemak[][2] = SONG(COLEMAK_SOUND);
179float tone_dvorak[][2] = SONG(DVORAK_SOUND);
150 180
151float tone_goodbye[][2] = SONG(GOODBYE_SOUND); 181float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
152 182
@@ -160,21 +190,30 @@ void persistant_default_layer_set(uint16_t default_layer) {
160 190
161bool process_record_user(uint16_t keycode, keyrecord_t *record) { 191bool process_record_user(uint16_t keycode, keyrecord_t *record) {
162 switch (keycode) { 192 switch (keycode) {
163 case DVORAK: 193 case QWERTY:
164 if (record->event.pressed) { 194 if (record->event.pressed) {
165 #ifdef AUDIO_ENABLE 195 #ifdef AUDIO_ENABLE
166 PLAY_NOTE_ARRAY(tone_dvorak, false, 0); 196 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
167 #endif 197 #endif
168 persistant_default_layer_set(1UL<<_DVORAK); 198 persistant_default_layer_set(1UL<<_QWERTY);
169 } 199 }
170 return false; 200 return false;
171 break; 201 break;
172 case QWERTY: 202 case COLEMAK:
173 if (record->event.pressed) { 203 if (record->event.pressed) {
174 #ifdef AUDIO_ENABLE 204 #ifdef AUDIO_ENABLE
175 PLAY_NOTE_ARRAY(tone_qwerty, false, 0); 205 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
176 #endif 206 #endif
177 persistant_default_layer_set(1UL<<_QWERTY); 207 persistant_default_layer_set(1UL<<_COLEMAK);
208 }
209 return false;
210 break;
211 case DVORAK:
212 if (record->event.pressed) {
213 #ifdef AUDIO_ENABLE
214 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
215 #endif
216 persistant_default_layer_set(1UL<<_DVORAK);
178 } 217 }
179 return false; 218 return false;
180 break; 219 break;
diff --git a/keyboards/preonic/keymaps/smt/readme.md b/keyboards/preonic/keymaps/smt/readme.md
index 016da7b01..2ec2603f3 100644
--- a/keyboards/preonic/keymaps/smt/readme.md
+++ b/keyboards/preonic/keymaps/smt/readme.md
@@ -4,53 +4,76 @@ This keymap is primarily based on the default Preonic keymap, which in turn is d
4 4
5Notable differences from the default are: 5Notable differences from the default are:
6 6
71. **Dvorak by default** 7- **[Mod-Tap](https://github.com/jackhumbert/qmk_firmware/wiki#fun-with-modifier-keys) keys**
8 8
9 I happen to type in Dvorak, and prefer that layer to be the default on my keyboard. This is easy enough to switch around with Qwerty, Colemak, or whatever. 9 - `Esc/Ctrl`
10 10
112. **Right Shift** 11 I am experimenting with using Left Shift as a mod-tap key for Escape, similar to how I use the Enter key. It's set up like this on my Minivan, so in the interest of consistency...
12 12
13 I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory. 13 - `Enter/Shift`
14 14
15 Thankfully, QMK supports [mod-tap](https://github.com/jackhumbert/qmk_firmware/wiki#fun-with-modifier-keys) keys, and this allows me to set the Enter key to send a modifier (MOD_LSFT) when held, and KC_ENT when tapped. Awesome! 15 I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory.
16 16
173. Escape 17 - `Tab/Hyper` (Super+Ctrl+Shift+Alt)
18 18
19 I am experimenting with using Left Shift as a mod-tap key for Escape, similar to how I use the Enter key. It's set up like this on my Minivan, so in the interest of consistency... 19 It's great to be able to use Tab as a custom modifier key. I tend to use [Hyper](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) commands for various OS-specific operations depending on what machine I'm working on.
20 20
214. Backtick 21 - `Backtick/Meh` (Ctrl+Shift+Alt)
22 22
23 I don't currently have LEDs on any of my keyboards, and even if I did, I don't think I would want their controls on a base layer. 23 Why use backtick in the lower left corner? I use it as my tmux prefix key, so I need to type it more frequently than most people. Putting it on the base layer works well for me. The "Meh" mapping is just a less-cool "Hyper"; the same, just without Super.
24 24
25 So, why use backtick in the lower left corner? I use it as my tmux prefix key, so I need to type it more frequently than most people. Putting it on the base layer works well for me. 25- **Swapped responsibilities of "lower" and "raise" layers**
26 26
27## Dvorak (default) 27 I prefer to use symbols via the "raise" layer, and numbers via the "lower" layer.
28
29- **Removed Plover layer**
30
31 I don't intend to use stenography anytime soon, so Plover just didn't have a place in my keymap.
32
33
34## Qwerty
28 35
29``` 36```
30,-----------------------------------------------------------------------------------. 37,-----------------------------------------------------------------------------------.
31| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 38| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
32|------+------+------+------+------+------+------+------+------+------+------+------| 39|------+------+------+------+------+------+------+------+------+------+------+------|
33| Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | 40| Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
34|------+------+------+------+------+-------------+------+------+------+------+------| 41|------+------+------+------+------+-------------+------+------+------+------+------|
35| Esc | A | O | E | U | I | D | H | T | N | S | - | 42| Esc | A | S | D | F | G | H | J | K | L | ; | " |
36|------+------+------+------+------+------|------+------+------+------+------+------| 43|------+------+------+------+------+------|------+------+------+------+------+------|
37| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | 44| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
38|------+------+------+------+------+------+------+------+------+------+------+------| 45|------+------+------+------+------+------+------+------+------+------+------+------|
39| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | 46| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
40`-----------------------------------------------------------------------------------' 47`-----------------------------------------------------------------------------------'
41``` 48```
42 49
43## Qwerty (same as default) 50## Colemak
44 51
45``` 52```
46,-----------------------------------------------------------------------------------. 53,-----------------------------------------------------------------------------------.
47| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 54| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
48|------+------+------+------+------+------+------+------+------+------+------+------| 55|------+------+------+------+------+------+------+------+------+------+------+------|
49| Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | 56| Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
50|------+------+------+------+------+-------------+------+------+------+------+------| 57|------+------+------+------+------+-------------+------+------+------+------+------|
51| Esc | A | S | D | F | G | H | J | K | L | ; | " | 58| Esc | A | R | S | T | D | H | N | E | I | O | " |
52|------+------+------+------+------+------|------+------+------+------+------+------| 59|------+------+------+------+------+------|------+------+------+------+------+------|
53| Shift| Z | X | C | V | B | N | M | , | . | / |Enter | 60| Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
61|------+------+------+------+------+------+------+------+------+------+------+------|
62| ` | Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
63`-----------------------------------------------------------------------------------'
64```
65
66## Dvorak
67
68```
69,-----------------------------------------------------------------------------------.
70| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
71|------+------+------+------+------+------+------+------+------+------+------+------|
72| Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
73|------+------+------+------+------+-------------+------+------+------+------+------|
74| Esc | A | O | E | U | I | D | H | T | N | S | - |
75|------+------+------+------+------+------|------+------+------+------+------+------|
76| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
54|------+------+------+------+------+------+------+------+------+------+------+------| 77|------+------+------+------+------+------+------+------+------+------+------+------|
55| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | 78| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
56`-----------------------------------------------------------------------------------' 79`-----------------------------------------------------------------------------------'
@@ -58,17 +81,17 @@ Notable differences from the default are:
58 81
59## Lower 82## Lower
60 83
61This is where I put the number row, a numpad cluster, function keys, and some light navigation via Home/End/PageUp/PageDn. Like the "Raise" layer, the top row is redundant to help with Planck compatibility. 84This is where I put the number row, a numpad cluster, function keys, and media controls. Like the "Raise" layer, the top row is redundant to help with Planck compatibility.
62 85
63``` 86```
64,-----------------------------------------------------------------------------------. 87,-----------------------------------------------------------------------------------.
65| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | 88| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
66|------+------+------+------+------+------+------+------+------+------+------+------| 89|------+------+------+------+------+------+------+------+------+------+------+------|
67| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | 90| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
68|------+------+------+------+------+-------------+------+------+------+------+------| 91|------+------+------+------+------+-------------+------+------+------+------+------|
69| | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | Home |PageUp| 92| $ | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | | |
70|------+------+------+------+------+------|------+------+------+------+------+------| 93|------+------+------+------+------+------|------+------+------+------+------+------|
71| | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | End |PageDn| 94| | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | | |
72|------+------+------+------+------+------+------+------+------+------+------+------| 95|------+------+------+------+------+------+------+------+------+------+------+------|
73| | | | | | | | Next | Vol- | Vol+ | Play | 96| | | | | | | | Next | Vol- | Vol+ | Play |
74`-----------------------------------------------------------------------------------' 97`-----------------------------------------------------------------------------------'
@@ -76,7 +99,7 @@ This is where I put the number row, a numpad cluster, function keys, and some li
76 99
77## Raise 100## Raise
78 101
79As a developer, it makes the most sense for me to group all the commonly-used symbols that don't fit on the main layer. In particular, having the dual-column of parens-braces-brackets really helps a lot. 102As a developer, it makes the most sense for me to group all the commonly-used symbols that don't fit on the main layer. In particular, having the dual-column of parens-braces-brackets really helps a lot. I've also added cursorkeys to correspond to the arrows.
80 103
81I haven't completely filled this layer, which leaves room for future mappings and macros. 104I haven't completely filled this layer, which leaves room for future mappings and macros.
82 105
@@ -90,21 +113,21 @@ I haven't completely filled this layer, which leaves room for future mappings an
90|------+------+------+------+------+------|------+------+------+------+------+------| 113|------+------+------+------+------+------|------+------+------+------+------+------|
91| | | | | | | - | / | = | [ | ] | \ | 114| | | | | | | - | / | = | [ | ] | \ |
92|------+------+------+------+------+------+------+------+------+------+------+------| 115|------+------+------+------+------+------+------+------+------+------+------+------|
93| | | | | | | | Next | Vol- | Vol+ | Play | 116| | | | | | | | | Home |PageDn|PageUp| End |
94`-----------------------------------------------------------------------------------' 117`-----------------------------------------------------------------------------------'
95``` 118```
96 119
97## Adjust (Lower + Raise) 120## Adjust (Lower + Raise)
98 121
99Utility layer. This is where I'd switch to Qwerty, or ~~fool around with~~ adjust the audio/music settings. 122Utility layer. This is where I'd switch between Qwerty and Dvorak, ~~fool around with~~ adjust the audio/music settings, or put the Preonic into bootloader mode.
100 123
101``` 124```
102,-----------------------------------------------------------------------------------. 125,-----------------------------------------------------------------------------------.
103| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | 126| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
104|------+------+------+------+------+------+------+------+------+------+------+------| 127|------+------+------+------+------+------+------+------+------+------+------+------|
105| | Reset| | | | | | | | | | Del | 128| | Reset| | | | | | | | | | Reset|
106|------+------+------+------+------+-------------+------+------+------+------+------| 129|------+------+------+------+------+-------------+------+------+------+------+------|
107| | | |Aud on|AudOff|AGnorm|AGswap|Dvorak|Qwerty| | | | 130| | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
108|------+------+------+------+------+------|------+------+------+------+------+------| 131|------+------+------+------+------+------|------+------+------+------+------+------|
109| |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | 132| |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
110|------+------+------+------+------+------+------+------+------+------+------+------| 133|------+------+------+------+------+------+------+------+------+------+------+------|
diff --git a/keyboards/preonic/rules.mk b/keyboards/preonic/rules.mk
index 62473e356..6be5b55bc 100644
--- a/keyboards/preonic/rules.mk
+++ b/keyboards/preonic/rules.mk
@@ -58,13 +58,13 @@ EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
58CONSOLE_ENABLE ?= no # Console for debug(+400) 58CONSOLE_ENABLE ?= no # Console for debug(+400)
59COMMAND_ENABLE ?= no # Commands for debug and configuration 59COMMAND_ENABLE ?= no # Commands for debug and configuration
60NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work 60NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
61BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality 61BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
62MIDI_ENABLE ?= yes # MIDI controls 62MIDI_ENABLE ?= yes # MIDI controls
63AUDIO_ENABLE ?= yes # Audio output on port C6 63AUDIO_ENABLE ?= yes # Audio output on port C6
64UNICODE_ENABLE ?= no # Unicode 64UNICODE_ENABLE ?= no # Unicode
65BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID 65BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
66RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. 66RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight.
67API_SYSEX_ENABLE ?= yes 67API_SYSEX_ENABLE ?= no
68 68
69# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE 69# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
70SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file 70SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file
diff --git a/keyboards/lets_split/rev2fliphalf/Makefile b/keyboards/roadkit/Makefile
index 4e2a6f00f..4e2a6f00f 100644
--- a/keyboards/lets_split/rev2fliphalf/Makefile
+++ b/keyboards/roadkit/Makefile
diff --git a/keyboards/roadkit/config.h b/keyboards/roadkit/config.h
new file mode 100644
index 000000000..9596f7f3b
--- /dev/null
+++ b/keyboards/roadkit/config.h
@@ -0,0 +1,162 @@
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#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEAE
25#define PRODUCT_ID 0x8846
26#define DEVICE_VER 0x0001
27#define MANUFACTURER TheVan Keyboards
28#define PRODUCT Roadkit Micro
29#define DESCRIPTION keyboard firmware for Roadkit Micro
30
31/* key matrix size */
32#define MATRIX_ROWS 4
33#define MATRIX_COLS 4
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45#define MATRIX_ROW_PINS { F0, F5, D7, B4 }
46#define MATRIX_COL_PINS { F1, F4, D6, D4 }
47#define UNUSED_PINS
48
49/* COL2ROW or ROW2COL */
50#define DIODE_DIRECTION COL2ROW
51
52// #define BACKLIGHT_PIN B7
53// #define BACKLIGHT_BREATHING
54// #define BACKLIGHT_LEVELS 3
55
56
57/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
58#define DEBOUNCING_DELAY 5
59
60/* define if matrix has ghost (lacks anti-ghosting diodes) */
61//#define MATRIX_HAS_GHOST
62
63/* number of backlight levels */
64
65/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
66#define LOCKING_SUPPORT_ENABLE
67/* Locking resynchronize hack */
68#define LOCKING_RESYNC_ENABLE
69
70/*
71 * Force NKRO
72 *
73 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
74 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
75 * makefile for this to work.)
76 *
77 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
78 * until the next keyboard reset.
79 *
80 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
81 * fully operational during normal computer usage.
82 *
83 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
84 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
85 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
86 * power-up.
87 *
88 */
89//#define FORCE_NKRO
90
91/*
92 * Magic Key Options
93 *
94 * Magic keys are hotkey commands that allow control over firmware functions of
95 * the keyboard. They are best used in combination with the HID Listen program,
96 * found here: https://www.pjrc.com/teensy/hid_listen.html
97 *
98 * The options below allow the magic key functionality to be changed. This is
99 * useful if your keyboard/keypad is missing keys and you want magic key support.
100 *
101 */
102
103/* key combination for magic key command */
104#define IS_COMMAND() ( \
105 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
106)
107
108/* control how magic key switches layers */
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
110//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
111//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
112
113/* override magic key keymap */
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
116//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
117//#define MAGIC_KEY_HELP1 H
118//#define MAGIC_KEY_HELP2 SLASH
119//#define MAGIC_KEY_DEBUG D
120//#define MAGIC_KEY_DEBUG_MATRIX X
121//#define MAGIC_KEY_DEBUG_KBD K
122//#define MAGIC_KEY_DEBUG_MOUSE M
123//#define MAGIC_KEY_VERSION V
124//#define MAGIC_KEY_STATUS S
125//#define MAGIC_KEY_CONSOLE C
126//#define MAGIC_KEY_LAYER0_ALT1 ESC
127//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
128//#define MAGIC_KEY_LAYER0 0
129//#define MAGIC_KEY_LAYER1 1
130//#define MAGIC_KEY_LAYER2 2
131//#define MAGIC_KEY_LAYER3 3
132//#define MAGIC_KEY_LAYER4 4
133//#define MAGIC_KEY_LAYER5 5
134//#define MAGIC_KEY_LAYER6 6
135//#define MAGIC_KEY_LAYER7 7
136//#define MAGIC_KEY_LAYER8 8
137//#define MAGIC_KEY_LAYER9 9
138//#define MAGIC_KEY_BOOTLOADER PAUSE
139//#define MAGIC_KEY_LOCK CAPS
140//#define MAGIC_KEY_EEPROM E
141//#define MAGIC_KEY_NKRO N
142//#define MAGIC_KEY_SLEEP_LED Z
143
144/*
145 * Feature disable options
146 * These options are also useful to firmware size reduction.
147 */
148
149/* disable debug print */
150//#define NO_DEBUG
151
152/* disable print */
153//#define NO_PRINT
154
155/* disable action features */
156//#define NO_ACTION_LAYER
157//#define NO_ACTION_TAPPING
158//#define NO_ACTION_ONESHOT
159//#define NO_ACTION_MACRO
160//#define NO_ACTION_FUNCTION
161
162#endif
diff --git a/keyboards/roadkit/keymaps/default/Makefile b/keyboards/roadkit/keymaps/default/Makefile
new file mode 100644
index 000000000..f4671a9d1
--- /dev/null
+++ b/keyboards/roadkit/keymaps/default/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/default/config.h b/keyboards/roadkit/keymaps/default/config.h
new file mode 100644
index 000000000..df06a2620
--- /dev/null
+++ b/keyboards/roadkit/keymaps/default/config.h
@@ -0,0 +1,8 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6// place overrides here
7
8#endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/default/keymap.c b/keyboards/roadkit/keymaps/default/keymap.c
new file mode 100644
index 000000000..3fc18915a
--- /dev/null
+++ b/keyboards/roadkit/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
1#include "roadkit.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11
12#define _NP 0
13
14// Macro name shortcuts
15#define NUMPAD M(_NP)
16
17// Fillers to make layering more clear
18#define _______ KC_TRNS
19#define XXXXXXX KC_NO
20
21
22const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
23 [_NP] = /* Numpad */
24 KEYMAP(KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, \
25 KC_KP_4, KC_KP_5, KC_KP_6, \
26 KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, \
27 KC_KP_0, KC_KP_DOT),
28};
29
30const uint16_t PROGMEM fn_actions[] = {
31
32};
33
34void persistant_default_layer_set(uint16_t default_layer) {
35 eeconfig_update_default_layer(default_layer);
36 default_layer_set(default_layer);
37}
38
39const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
40{
41 switch(id) {
42 case _NP:
43 if (record->event.pressed) {
44 persistant_default_layer_set(1UL<<_NP);
45 }
46 break;
47 }
48 return MACRO_NONE;
49};
diff --git a/keyboards/roadkit/keymaps/default/readme.md b/keyboards/roadkit/keymaps/default/readme.md
new file mode 100644
index 000000000..5984a71d1
--- /dev/null
+++ b/keyboards/roadkit/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for roadkit
diff --git a/keyboards/roadkit/keymaps/singles/Makefile b/keyboards/roadkit/keymaps/singles/Makefile
new file mode 100644
index 000000000..f4671a9d1
--- /dev/null
+++ b/keyboards/roadkit/keymaps/singles/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/singles/config.h b/keyboards/roadkit/keymaps/singles/config.h
new file mode 100644
index 000000000..df06a2620
--- /dev/null
+++ b/keyboards/roadkit/keymaps/singles/config.h
@@ -0,0 +1,8 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6// place overrides here
7
8#endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/singles/keymap.c b/keyboards/roadkit/keymaps/singles/keymap.c
new file mode 100644
index 000000000..5ee7a752b
--- /dev/null
+++ b/keyboards/roadkit/keymaps/singles/keymap.c
@@ -0,0 +1,61 @@
1#include "roadkit.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11
12#define _NP 0
13#define _L1 1
14
15// Macro name shortcuts
16#define NUMPAD M(_NP)
17#define LAYER1 M(_L1)
18
19// Fillers to make layering more clear
20#define _______ KC_TRNS
21#define XXXXXXX KC_NO
22
23
24const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
25 [_NP] = /* Numpad */
26 SINGLES_KEYMAP(KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, \
27 KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_MINUS, \
28 KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, \
29 KC_KP_0, KC_KP_DOT, TG(_L1), KC_BSPC),
30 [_L1] = /* LAYER 1 */
31 SINGLES_KEYMAP(KC_NUMLOCK, KC_TRNS, KC_TRNS, KC_VOLU, \
32 KC_TRNS, KC_UP, KC_TRNS, KC_VOLD, \
33 KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, \
34 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
35};
36
37const uint16_t PROGMEM fn_actions[] = {
38
39};
40
41void persistant_default_layer_set(uint16_t default_layer) {
42 eeconfig_update_default_layer(default_layer);
43 default_layer_set(default_layer);
44}
45
46const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
47{
48 switch(id) {
49 case _L1:
50 if (record->event.pressed) {
51 persistant_default_layer_set(1UL<<_L1);
52 }
53 break;
54 case _NP:
55 if (record->event.pressed) {
56 persistant_default_layer_set(1UL<<_NP);
57 }
58 break;
59 }
60 return MACRO_NONE;
61};
diff --git a/keyboards/roadkit/keymaps/singles/readme.md b/keyboards/roadkit/keymaps/singles/readme.md
new file mode 100644
index 000000000..48ea4a8b3
--- /dev/null
+++ b/keyboards/roadkit/keymaps/singles/readme.md
@@ -0,0 +1,3 @@
1# The singles keymap for roadkit
2
3This keymap has a base layer with numpad functionality, and then a second layer with some additional keys. The user is encouraged to develop their own keymap using this as a starting point.
diff --git a/keyboards/roadkit/readme.md b/keyboards/roadkit/readme.md
new file mode 100644
index 000000000..d7480a165
--- /dev/null
+++ b/keyboards/roadkit/readme.md
@@ -0,0 +1,32 @@
1roadkit keyboard firmware
2======================
3
4## Quantum MK Firmware
5
6For the full Quantum feature list, see [the QMK Wiki](https://github.com/qmk/qmk_firmware/wiki).
7
8## Building
9
10Download or clone the whole firmware and navigate to the `keyboards/roadkit` folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex. You can then use the programmer of your choice to program your .hex file.
11
12Depending on which keymap you would like to use, you will have to compile slightly differently.
13
14### Default
15
16To build with the default keymap, simply run `make default`. For the roadkit, the default layout is a standard numpad layout.
17
18### Singles
19
20The singles layout for the roadkit corresponds to the configuration where only 1u keys are used and there are 16 of them on the board. To build the singles keymap, run `make singles`.
21
22### Other Keymaps
23
24Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
25
26To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
27
28```
29$ make [default|jack|<name>]
30```
31
32Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/roadkit/roadkit.c b/keyboards/roadkit/roadkit.c
new file mode 100644
index 000000000..26e0c51ec
--- /dev/null
+++ b/keyboards/roadkit/roadkit.c
@@ -0,0 +1,28 @@
1#include "roadkit.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6
7 matrix_init_user();
8}
9
10void matrix_scan_kb(void) {
11 // put your looping keyboard code here
12 // runs every cycle (a lot)
13
14 matrix_scan_user();
15}
16
17bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
18 // put your per-action keyboard code here
19 // runs for every action, just before processing by the firmware
20
21 return process_record_user(keycode, record);
22}
23
24void led_set_kb(uint8_t usb_led) {
25 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
26
27 led_set_user(usb_led);
28}
diff --git a/keyboards/roadkit/roadkit.h b/keyboards/roadkit/roadkit.h
new file mode 100644
index 000000000..b10e5740f
--- /dev/null
+++ b/keyboards/roadkit/roadkit.h
@@ -0,0 +1,33 @@
1#ifndef ROADKIT_H
2#define ROADKIT_H
3
4#include "quantum.h"
5
6// This is a shortcut to help you visually see your layout.
7#define KEYMAP( \
8 K00, K01, K02, K03, \
9 K10, K11, K12, \
10 K20, K21, K22, K23, \
11 K30, K32 \
12) \
13{ \
14 { K00, K01, K02, K03 }, \
15 { K10, K11, K12, KC_NO }, \
16 { K20, K21, K22, K23 }, \
17 { K30, KC_NO, K32, KC_NO } \
18}
19
20#define SINGLES_KEYMAP( \
21 K00, K01, K02, K03, \
22 K10, K11, K12, K13, \
23 K20, K21, K22, K23, \
24 K30, K31, K32, K33 \
25) \
26{ \
27 { K00, K01, K02, K03 }, \
28 { K10, K11, K12, K13 }, \
29 { K20, K21, K22, K23 }, \
30 { K30, K31, K32, K33 } \
31}
32
33#endif
diff --git a/keyboards/roadkit/rules.mk b/keyboards/roadkit/rules.mk
new file mode 100644
index 000000000..dbba6bace
--- /dev/null
+++ b/keyboards/roadkit/rules.mk
@@ -0,0 +1,69 @@
1
2
3# MCU name
4#MCU = at90usb1287
5MCU = atmega32u4
6
7# Processor frequency.
8# This will define a symbol, F_CPU, in all source code files equal to the
9# processor frequency in Hz. You can then use this symbol in your source code to
10# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
11# automatically to create a 32-bit value in your source code.
12#
13# This will be an integer division of F_USB below, as it is sourced by
14# F_USB after it has run through any CPU prescalers. Note that this value
15# does not *change* the processor frequency - it should merely be updated to
16# reflect the processor speed set externally so that the code can use accurate
17# software delays.
18F_CPU = 16000000
19
20
21#
22# LUFA specific
23#
24# Target architecture (see library "Board Types" documentation).
25ARCH = AVR8
26
27# Input clock frequency.
28# This will define a symbol, F_USB, in all source code files equal to the
29# input clock frequency (before any prescaling is performed) in Hz. This value may
30# differ from F_CPU if prescaling is used on the latter, and is required as the
31# raw input clock is fed directly to the PLL sections of the AVR for high speed
32# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
33# at the end, this will be done automatically to create a 32-bit value in your
34# source code.
35#
36# If no clock division is performed on the input clock inside the AVR (via the
37# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
38F_USB = $(F_CPU)
39
40# Interrupt driven control endpoint task(+60)
41OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
42
43
44# Boot Section Size in *bytes*
45# Teensy halfKay 512
46# Teensy++ halfKay 1024
47# Atmel DFU loader 4096
48# LUFA bootloader 4096
49# USBaspLoader 2048
50OPT_DEFS += -DBOOTLOADER_SIZE=4096
51
52
53# Build Options
54# change yes to no to disable
55#
56BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
57MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
58EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
59CONSOLE_ENABLE ?= yes # Console for debug(+400)
60COMMAND_ENABLE ?= yes # Commands for debug and configuration
61# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
62SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
63# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
64NKRO_ENABLE ?= yes # USB Nkey Rollover
65BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
66MIDI_ENABLE ?= no # MIDI controls
67UNICODE_ENABLE ?= no # Unicode
68BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
69AUDIO_ENABLE ?= no # Audio output on port C6
diff --git a/keyboards/satan/keymaps/smt/Makefile b/keyboards/satan/keymaps/smt/Makefile
new file mode 100644
index 000000000..0c9ae824f
--- /dev/null
+++ b/keyboards/satan/keymaps/smt/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif
diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c
new file mode 100644
index 000000000..d90849914
--- /dev/null
+++ b/keyboards/satan/keymaps/smt/keymap.c
@@ -0,0 +1,141 @@
1#include "satan.h"
2
3
4// Used for SHIFT_ESC
5#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _QWERTY 0
12#define _COLEMAK 1
13#define _DVORAK 2
14#define _FUNC 3
15
16enum planck_keycodes {
17 QWERTY = SAFE_RANGE,
18 COLEMAK,
19 DVORAK
20};
21
22#define _______ KC_TRNS
23#define XXXXXXX KC_NO
24
25// Custom macros
26#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt
27#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
28#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt)
29#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
30
31const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
32 /* Keymap _QWERTY: (Base Layer) Default Layer
33 * ,-----------------------------------------------------------.
34 * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
35 * |-----------------------------------------------------------|
36 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
37 * |-----------------------------------------------------------|
38 * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
39 * |-----------------------------------------------------------|
40 * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
41 * |-----------------------------------------------------------|
42 * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl |
43 * `-----------------------------------------------------------'
44 */
45[_QWERTY] = KEYMAP_ANSI(
46 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, \
47 HPR_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, \
48 CTL_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, \
49 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \
50 KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_FUNC),KC_RCTL),
51
52 /* Keymap _COLEMAK: (Base Layer) Default Layer
53 * ,-----------------------------------------------------------.
54 * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
55 * |-----------------------------------------------------------|
56 * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \ |
57 * |-----------------------------------------------------------|
58 * |CAPS | A| R| S| T| D| H| N| E| I| O| '|Return |
59 * |-----------------------------------------------------------|
60 * |Shift | Z| X| C| V| B| K| M| ,| .| /|Shift |
61 * |-----------------------------------------------------------|
62 * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl |
63 * `-----------------------------------------------------------'
64 */
65[_COLEMAK] = KEYMAP_ANSI(
66 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, \
67 HPR_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, \
68 CTL_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, \
69 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_ENT, \
70 KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_FUNC),KC_RCTL),
71
72 /* Keymap _DVORAK: (Base Layer) Default Layer
73 * ,-----------------------------------------------------------.
74 * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backsp |
75 * |-----------------------------------------------------------|
76 * |HypTb| '| ,| .| P| Y| F| G| C| R| L| /| =| \ |
77 * |-----------------------------------------------------------|
78 * |CtrlEsc| A| O| E| U| I| D| H| T| N| S| -|Return |
79 * |-----------------------------------------------------------|
80 * |Shift | ;| Q| J| K| X| B| M| W| V| Z|ShiftEnter|
81 * |-----------------------------------------------------------|
82 * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl |
83 * `-----------------------------------------------------------'
84 */
85[_DVORAK] = KEYMAP_ANSI(
86 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC,KC_BSPC, \
87 HPR_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \
88 CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \
89 KC_LSFT, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \
90 KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(_FUNC),KC_RCTL),
91
92 /* Keymap _FUNC: Function Layer
93 * ,-----------------------------------------------------------.
94 * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
95 * |-----------------------------------------------------------|
96 * | |Hom| UP|End| | | |Qwt|Cmk|Dvk| |BL-|BL+|BL |
97 * |-----------------------------------------------------------|
98 * | |LFT| DN| RT| | |LFT| DN| UP| RT|Vo+|Pg+| |
99 * |-----------------------------------------------------------|
100 * | | | |Prv|Ply|Nxt| | | |Vo-|Pg-| |
101 * |-----------------------------------------------------------|
102 * |RESET| | | | | | | |
103 * `-----------------------------------------------------------'
104 */
105[_FUNC] = KEYMAP_ANSI(
106 _______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_DEL, \
107 _______,KC_HOME,KC_UP ,KC_END ,_______,_______,_______,QWERTY ,COLEMAK,DVORAK ,_______,BL_DEC ,BL_INC ,BL_TOGG, \
108 _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_VOLU,KC_PGUP ,_______, \
109 _______ ,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_VOLD,KC_PGDN ,_______, \
110 RESET ,_______,_______ ,_______ ,_______,_______,_______,_______
111 )
112};
113
114void persistant_default_layer_set(uint16_t default_layer) {
115 eeconfig_update_default_layer(default_layer);
116 default_layer_set(default_layer);
117}
118
119bool process_record_user(uint16_t keycode, keyrecord_t *record) {
120 switch (keycode) {
121 case QWERTY:
122 if (record->event.pressed) {
123 persistant_default_layer_set(1UL<<_QWERTY);
124 }
125 return false;
126 break;
127 case COLEMAK:
128 if (record->event.pressed) {
129 persistant_default_layer_set(1UL<<_COLEMAK);
130 }
131 return false;
132 break;
133 case DVORAK:
134 if (record->event.pressed) {
135 persistant_default_layer_set(1UL<<_DVORAK);
136 }
137 return false;
138 break;
139 }
140 return true;
141}
diff --git a/keyboards/satan/keymaps/smt/readme.md b/keyboards/satan/keymaps/smt/readme.md
new file mode 100644
index 000000000..7b706d601
--- /dev/null
+++ b/keyboards/satan/keymaps/smt/readme.md
@@ -0,0 +1 @@
# smt's Satan GH60 layout
diff --git a/keyboards/satan/keymaps/unxmaal/Makefile b/keyboards/satan/keymaps/unxmaal/Makefile
new file mode 100644
index 000000000..ee94a67b4
--- /dev/null
+++ b/keyboards/satan/keymaps/unxmaal/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif
diff --git a/keyboards/satan/keymaps/unxmaal/README.md b/keyboards/satan/keymaps/unxmaal/README.md
new file mode 100644
index 000000000..50ad0cf1f
--- /dev/null
+++ b/keyboards/satan/keymaps/unxmaal/README.md
@@ -0,0 +1,20 @@
1Unxmaal's GH60 Satan Layout
2=====================
3* Mostly stolen from /u/robotmaxtron
4
5##Quantum MK Firmware
6For the full Quantum feature list, see the parent readme.md.
7
8* Standard Mac ANSI layout
9* Spacebar acts as space when tapped, Fn when held
10* Menu acts as menu when tapped, Fn2 when held
11* Layer1:
12 * Top row = `~, F1-F12, Del
13 * JKIL = arrow cluster
14* Layer2:
15 * Top row = media controls
16 * JKIL = PgDn/Up/Home/Insert
17 * Backspace = Reset
18
19### Additional Credits
20Keymap has been based on various keymaps available from the QMK Repo for the GH60-SATAN and KC60 keyboards. \ No newline at end of file
diff --git a/keyboards/satan/keymaps/unxmaal/keymap.c b/keyboards/satan/keymaps/unxmaal/keymap.c
new file mode 100644
index 000000000..657602de0
--- /dev/null
+++ b/keyboards/satan/keymaps/unxmaal/keymap.c
@@ -0,0 +1,119 @@
1#include "satan.h"
2
3
4// Used for SHIFT_ESC
5#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11#define _BL 0
12#define _AL 1
13#define _FL 2
14
15#define _______ KC_TRNS
16
17const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18 /*
19 * ANSI Base, Mac style
20 * ,-----------------------------------------------------------------------------.
21 * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| = | Backsp |
22 * |-----------------------------------------------------------------------------|
23 * |Tab | Q | W | E | R | T | Y | U | I| O| P| [| ]| \|
24 * |-----------------------------------------------------------------------------|
25 * |Caps/Fn | A| S| D| F| G| H| J| K| L| ;| '| Enter |
26 * |-----------------------------------------------------------------------------|
27 * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
28 * |-----------------------------------------------------------------------------|
29 * |Fn|Alt |Gui | Space(tapped), Fn(held) |Gui |Alt |Menu(tapped, Fn2(held)|Ctrl|
30 * `-----------------------------------------------------------------------------'
31 */
32[_BL] = KEYMAP_ANSI(
33 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, \
34 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, \
35 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
36 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
37 MO(_AL), KC_LALT,KC_LGUI, LT(_AL,KC_SPACE), KC_RGUI, KC_RALT, LT(_FL,KC_MENU), KC_RCTL),
38 /*
39 * Pok3r style arrow cluster
40 * ,-----------------------------------------------------------.
41 * |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL |
42 * |-----------------------------------------------------------|
43 * | | | | | | | | |Up| | | | | |
44 * |-----------------------------------------------------------|
45 * | | | | | | | |Left|Down|Right| | | |
46 * |-----------------------------------------------------------|
47 * | | | | | | | | | | | | |
48 * |-----------------------------------------------------------|
49 * | | | | | | | | |
50 * `-----------------------------------------------------------'
51 */
52[_AL] = KEYMAP_ANSI(
53 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_DELETE, \
54 KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
55 KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS, \
56 KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
57 KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
58 /* Keymap _FL: Function Layer
59 * ,-----------------------------------------------------------.
60 * | | | | | | | | | | | | | | RESET|
61 * |-----------------------------------------------------------|
62 * | | | | | | | | | | | |BL-|BL+|BL |
63 * |-----------------------------------------------------------|
64 * | | | | | | | | | | | | |
65 * |-----------------------------------------------------------|
66 * | | RGB on|RGB step|Hue+|Hue- |Sat+|Sat-|Val+| Val-| | | |
67 * |-----------------------------------------------------------|
68 * | | | | | | | | |
69 * `-----------------------------------------------------------'
70 */
71[_FL] = KEYMAP_ANSI(
72 #ifdef RGBLIGHT_ENABLE
73 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \
74 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \
75 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
76 _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______, \
77 _______,_______,_______, _______, _______,_______,_______, _______),
78 #else
79 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \
80 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC, BL_INC,BL_TOGG, \
81 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
82 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
83 _______,_______,_______, _______, _______,_______,_______,_______),
84 #endif
85};
86
87enum function_id {
88 SHIFT_ESC,
89};
90
91const uint16_t PROGMEM fn_actions[] = {
92 [0] = ACTION_FUNCTION(SHIFT_ESC),
93};
94
95void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
96 static uint8_t shift_esc_shift_mask;
97 switch (id) {
98 case SHIFT_ESC:
99 shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
100 if (record->event.pressed) {
101 if (shift_esc_shift_mask) {
102 add_key(KC_GRV);
103 send_keyboard_report();
104 } else {
105 add_key(KC_ESC);
106 send_keyboard_report();
107 }
108 } else {
109 if (shift_esc_shift_mask) {
110 del_key(KC_GRV);
111 send_keyboard_report();
112 } else {
113 del_key(KC_ESC);
114 send_keyboard_report();
115 }
116 }
117 break;
118 }
119}
diff --git a/keyboards/tada68/keymaps/default/keymap.c b/keyboards/tada68/keymaps/default/keymap.c
index da57c0343..f28116e0a 100644
--- a/keyboards/tada68/keymaps/default/keymap.c
+++ b/keyboards/tada68/keymaps/default/keymap.c
@@ -1,9 +1,5 @@
1#include "tada68.h" 1#include "tada68.h"
2 2
3
4// Used for SHIFT_ESC
5#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below. 3// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name. 4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them 5// Layer names don't all need to be of the same length, obviously, and you can also skip them
@@ -36,63 +32,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
36 32
37 /* Keymap _FL: Function Layer 33 /* Keymap _FL: Function Layer
38 * ,----------------------------------------------------------------. 34 * ,----------------------------------------------------------------.
39 * | | | | | | | | | | | | | | RESET| | 35 * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
40 * |----------------------------------------------------------------| 36 * |----------------------------------------------------------------|
41 * | | | | | | | | | | | |BL-|BL+|BL | | 37 * | | |Up | | | | | | | | | | | |Hme |
42 * |----------------------------------------------------------------| 38 * |----------------------------------------------------------------|
43 * | | | | | | | | | | | | | | 39 * | |<- |Dn | ->| | | | | | | | | |End |
44 * |----------------------------------------------------------------| 40 * |----------------------------------------------------------------|
45 * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | | | 41 * | | | |Bl-|BL |BL+| |VU-|VU+|MUT| |MouseL|MsU|Rck |
46 * |----------------------------------------------------------------| 42 * |----------------------------------------------------------------|
47 * | | | | | | | | | | | 43 * | | | | | | | |MsL|MsD|MsR |
48 * `----------------------------------------------------------------' 44 * `----------------------------------------------------------------'
49 */ 45 */
50[_FL] = KEYMAP_ANSI( 46[_FL] = KEYMAP_ANSI(
51 #ifdef RGBLIGHT_ENABLE 47 _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS , \
52 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \ 48 _______,_______,KC_UP, _______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,KC_HOME, \
53 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \ 49 _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \
54 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \ 50 _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,KC_VOLD,KC_VOLU,KC_MUTE,_______,KC_BTN1, KC_MS_U, KC_BTN2, \
55 _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______,_______,_______, \ 51 _______,_______,_______, _______, _______,_______,_______,KC_MS_L,KC_MS_D, KC_MS_R),
56 _______,_______,_______, _______, _______,_______,_______,_______,_______, _______),
57 #else
58 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \
59 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \
60 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \
61 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
62 _______,_______,_______, _______, _______,_______,_______,_______,_______, _______),
63 #endif
64};
65
66/*enum function_id {
67 //SHIFT_ESC,
68}; 52};
69
70const uint16_t PROGMEM fn_actions[] = {
71 //[0] = ACTION_FUNCTION(SHIFT_ESC),
72};
73
74void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
75 static uint8_t shift_esc_shift_mask;
76 switch (id) {
77 case SHIFT_ESC:
78 shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
79 if (record->event.pressed) {
80 if (shift_esc_shift_mask) {
81 add_key(KC_GRV);
82 send_keyboard_report();
83 } else {
84 add_key(KC_ESC);
85 send_keyboard_report();
86 }
87 } else {
88 if (shift_esc_shift_mask) {
89 del_key(KC_GRV);
90 send_keyboard_report();
91 } else {
92 del_key(KC_ESC);
93 send_keyboard_report();
94 }
95 }
96 break;
97 }
98}*/
diff --git a/keyboards/tada68/keymaps/default/readme.md b/keyboards/tada68/keymaps/default/readme.md
index 36760d6b9..53412d7c2 100644
--- a/keyboards/tada68/keymaps/default/readme.md
+++ b/keyboards/tada68/keymaps/default/readme.md
@@ -1 +1,3 @@
1# default TADA68 layout 1# default TADA68 layout
2
3This layout replicates the default factory layout of the TADA68.
diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md
index 552fdea52..dbe2fdca1 100644
--- a/keyboards/tada68/readme.md
+++ b/keyboards/tada68/readme.md
@@ -1,4 +1,15 @@
1TADA68 keyboard firmware 1TADA68 keyboard firmware
2====================== 2========================
3 3
4TODO: to be updated. 41) from the keyboards/tada68 directory run:
5```
6$ make flashbin
7```
8
92) hit the reset button on the TADA, the lights will start flashing.
10
113) You'll see a new drive on your computer called TADA68. Backup the original factory `FLASH.BIN` file thats inside it.
12
134) Delete `FLASH.BIN` from the TADA drive and copy `tada68_default.bin` that was generated at the root of the qmk directory into the TADA drive.
14
155) Hit ESC on the keyboard. The lights will stop flashing and your firmware is loaded! \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/smt/keymap.c b/keyboards/tv44/keymaps/smt/keymap.c
index de5ce03e2..532e74de0 100644
--- a/keyboards/tv44/keymaps/smt/keymap.c
+++ b/keyboards/tv44/keymaps/smt/keymap.c
@@ -32,8 +32,8 @@ enum planck_keycodes {
32// Custom macros 32// Custom macros
33#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl 33#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
34#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift 34#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
35#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper 35#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
36#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt 36#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt (Ctrl+Alt+Shift)
37 37
38const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 38const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
39 39
@@ -117,13 +117,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
117 */ 117 */
118[_LOWER] = KEYMAP_TV45( 118[_LOWER] = KEYMAP_TV45(
119/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ 119/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
120 KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL , 120ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL ,
121/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ 121/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
122 KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_ASTR, KC_4, KC_5, KC_6, KC_DOT, KC_PGUP , 122CTL_T(KC_DLR), KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_ASTR, KC_4, KC_5, KC_6, KC_DOT, KC_PGUP ,
123/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ 123/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
124 KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_SLSH, KC_1, KC_2, KC_3, KC_UP, KC_PGDN , 124SFT_T(KC_EQL), KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_SLSH, KC_1, KC_2, KC_3, KC_UP, SFT_T(KC_PGDN),
125/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ 125/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
126 BACKLIT , _______ , _______ , KC_HOME , KC_END , _______ , KC_LEFT, KC_DOWN, KC_RGHT ), 126ALT_T(BACKLIT), _______ , _______ , KC_HOME , KC_END , _______ , KC_LEFT, KC_DOWN, KC_RGHT ),
127/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/ 127/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
128 128
129/* Raise 129/* Raise
@@ -139,18 +139,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
139 */ 139 */
140[_RAISE] = KEYMAP_TV45( 140[_RAISE] = KEYMAP_TV45(
141/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ 141/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
142 KC_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL , 142ALL_T(KC_TILD),KC_EXLM,KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL ,
143/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ 143/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
144 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE , 144CTL_T(KC_F1), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE ,
145/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ 145/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
146 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS , 146 SFT_T(KC_F7), KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, SFT_T(KC_BSLS),
147/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ 147/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
148 BACKLIT , _______ , _______ , KC_MPLY , KC_MNXT , _______ , KC_MUTE, KC_VOLD, KC_VOLU ), 148ALT_T(BACKLIT), _______ , _______ , KC_MPLY , KC_MNXT , _______ , KC_MUTE, KC_VOLD, KC_VOLU ),
149/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/ 149/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
150 150
151/* Adjust (Lower + Raise) 151/* Adjust (Lower + Raise)
152 * ,---------+------+------+------+------+------+------+------+------+------+------+---------. 152 * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
153 * | | Reset| | | | | | | | | | Del | 153 * | | Reset| | | | | | | | | | Reset |
154 * |---------`------`------`------`------`------`------`------`------`------`------`---------| 154 * |---------`------`------`------`------`------`------`------`------`------`------`---------|
155 * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | 155 * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
156 * |----------`------`------`------`------`------`------`------`------`------`------`--------| 156 * |----------`------`------`------`------`------`------`------`------`------`------`--------|
@@ -161,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
161 */ 161 */
162[_ADJUST] = KEYMAP_TV45( 162[_ADJUST] = KEYMAP_TV45(
163/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/ 163/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
164 _______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , 164 _______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET ,
165/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/ 165/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
166 _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______ , 166 _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______ ,
167/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ 167/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
diff --git a/keyboards/xd60/arrow-cluster.JPG b/keyboards/xd60/arrow-cluster.JPG
deleted file mode 100644
index aa03dc08e..000000000
--- a/keyboards/xd60/arrow-cluster.JPG
+++ /dev/null
Binary files differ
diff --git a/keyboards/xd60/config.h b/keyboards/xd60/config.h
index 13ae29063..4bbaec882 100644
--- a/keyboards/xd60/config.h
+++ b/keyboards/xd60/config.h
@@ -25,8 +25,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
25#define PRODUCT_ID 0x6060 25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001 26#define DEVICE_VER 0x0001
27#define MANUFACTURER XIUDI 27#define MANUFACTURER XIUDI
28#define PRODUCT XD60 28#define PRODUCT XD60v2
29#define DESCRIPTION XD60 Keyboard by XIUDI 29#define DESCRIPTION XD60 v2 Keyboard PCB by XIUDI
30 30
31/* key matrix size */ 31/* key matrix size */
32#define MATRIX_ROWS 5 32#define MATRIX_ROWS 5
@@ -46,14 +46,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
46#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } 46#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
47#define UNUSED_PINS 47#define UNUSED_PINS
48 48
49/* Backlight Setup */
50#define BACKLIGHT_PIN F5
51#define BACKLIGHT_LEVELS 6
52
49/* COL2ROW or ROW2COL */ 53/* COL2ROW or ROW2COL */
50#define DIODE_DIRECTION COL2ROW 54#define DIODE_DIRECTION COL2ROW
51 55
52/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ 56/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
53#define DEBOUNCING_DELAY 5 57#define DEBOUNCING_DELAY 5
54 58
55/* number of backlight levels */ 59/* RGB Underglow
56#define BACKLIGHT_LEVELS 3 60 * F6 PIN for XD60v2 that has pre-soldered WS2812 LEDs
61 */
62#define RGB_DI_PIN F6
63#define RGBLIGHT_ANIMATIONS
64#define RGBLED_NUM 6 // Number of LEDs
65#define RGBLIGHT_HUE_STEP 10
66#define RGBLIGHT_SAT_STEP 17
67#define RGBLIGHT_VAL_STEP 17
57 68
58/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ 69/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
59#define LOCKING_SUPPORT_ENABLE 70#define LOCKING_SUPPORT_ENABLE
diff --git a/keyboards/xd60/keymaps/cheese/README.md b/keyboards/xd60/keymaps/cheese/README.md
new file mode 100644
index 000000000..8a5b97c03
--- /dev/null
+++ b/keyboards/xd60/keymaps/cheese/README.md
@@ -0,0 +1,13 @@
1# cheese's Layout
2Customized xd60 keymap
3
4![Base Layout](base_layout.png "Base Layout")
5![Fn Layout](fn_layout.png "Fn Layout")
6
7## Programming Instructions:
8`cd` into keymap directory, `make dfu`
9
10## Features
11- Media keys and movement keys setup like on the pok3r
12- Lower right movement keys setup like on the fc660m (fn+direction for home/end/page up and down)
13- Caps lock can be triggered by pressing both shift keys at the same time (and deactivated the same way)
diff --git a/keyboards/xd60/keymaps/cheese/base_layout.png b/keyboards/xd60/keymaps/cheese/base_layout.png
new file mode 100644
index 000000000..211c4c731
--- /dev/null
+++ b/keyboards/xd60/keymaps/cheese/base_layout.png
Binary files differ
diff --git a/keyboards/xd60/keymaps/cheese/fn_layout.png b/keyboards/xd60/keymaps/cheese/fn_layout.png
new file mode 100644
index 000000000..fe5ae99e0
--- /dev/null
+++ b/keyboards/xd60/keymaps/cheese/fn_layout.png
Binary files differ
diff --git a/keyboards/xd60/keymaps/cheese/keymap.c b/keyboards/xd60/keymaps/cheese/keymap.c
new file mode 100644
index 000000000..25919a41f
--- /dev/null
+++ b/keyboards/xd60/keymaps/cheese/keymap.c
@@ -0,0 +1,67 @@
1#include "xd60.h"
2#include "action_layer.h"
3
4// Each layer gets a name for readability.
5// The underscores don't mean anything - you can
6// have a layer called STUFF or any other name.
7// Layer names don't all need to be of the same
8// length, and you can also skip them entirely
9// and just use numbers.
10#define _BL 0
11#define _FL 1
12#define _LS 2
13#define _RS 3
14
15const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16
17 /* (Base Layer) Default Layer
18 * ,-----------------------------------------------------------.
19 * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
20 * |-----------------------------------------------------------|
21 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
22 * |-----------------------------------------------------------|
23 * |FUNCTION| A| S| D| F| G| H| J| K| L| ;| '|Return|
24 * |-----------------------------------------------------------|
25 * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
26 * |-----------------------------------------------------------|
27 * |Ctrl|Gui |Alt | Space |FN|Left|Up|Down|Right|
28 * `-----------------------------------------------------------'
29 */
30 [_BL] = KEYMAP(
31 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_BSPC, \
32 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, \
33 MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
34 F(0), KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, F(1), F(1), F(1), \
35 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FL), KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT),
36
37// Function Layer
38 [_FL] = KEYMAP(
39 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, \
40 KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_CALC, KC_INS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
41 KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, \
42 KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \
43 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_PGDN, KC_END),
44
45// Left Shift Layer
46 [_LS] = KEYMAP(
47 KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
48 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
49 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
50 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_CAPS, KC_CAPS, \
51 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
52
53// Right Shift Layer
54 [_RS] = KEYMAP(
55 KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
57 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
58 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
59 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
60
61};
62
63// Custom Actions
64const uint16_t PROGMEM fn_actions[] = {
65 [0] = ACTION_LAYER_MODS(_LS, MOD_LSFT),
66 [1] = ACTION_LAYER_MODS(_RS, MOD_RSFT),
67};
diff --git a/keyboards/xd60/keymaps/default/keymap.c b/keyboards/xd60/keymaps/default/keymap.c
index ea85c02a3..11be9afca 100644
--- a/keyboards/xd60/keymaps/default/keymap.c
+++ b/keyboards/xd60/keymaps/default/keymap.c
@@ -9,56 +9,38 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
9 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ 9 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
10 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ 10 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
11 KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \ 11 KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \
12 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT), 12 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, F(0), KC_LEFT, KC_DOWN, KC_RIGHT),
13 13
14 // 1: Function Layer 14 // 1: Function Layer
15 KEYMAP( 15 KEYMAP(
16 RESET, 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_F13, KC_F14, \ 16 RESET, 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_F13, KC_F14, \
17 KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \ 17 KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
18 KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \ 18 KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
19 KC_LSFT, KC_NO, KC_NO, KC_APP, BL_TOGG,BL_DEC, BL_INC, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, KC_NO, \ 19 KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_PGDN, KC_RSFT, KC_PGUP, KC_INS, \
20 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, F(0), KC_HOME, KC_PGDOWN,KC_END), 20 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, F(0), KC_HOME, KC_PGDOWN,KC_END),
21 21
22}; 22};
23 23
24// Custom Actions
24const uint16_t PROGMEM fn_actions[] = { 25const uint16_t PROGMEM fn_actions[] = {
25 [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay 26 [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
26}; 27};
27 28
29// Macros
28const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { 30const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
29 // MACRODOWN only works in this function
30 31
32 // MACRODOWN only works in this function
31 switch(id) { 33 switch(id) {
32 case 0: 34 case 0:
33 if (record->event.pressed) { 35 if (record->event.pressed) { register_code(KC_RSFT); }
34 register_code(KC_RSFT); 36 else { unregister_code(KC_RSFT); }
35 } else { 37 break;
36 unregister_code(KC_RSFT);
37 }
38 break;
39 } 38 }
40 39
41 return MACRO_NONE; 40 return MACRO_NONE;
42}; 41};
43 42
43// Loop
44void matrix_scan_user(void) { 44void matrix_scan_user(void) {
45 45 // Empty
46 // Layer LED indicators
47 uint32_t layer = layer_state;
48
49 if (layer & (1<<1)) {
50 xd60_esc_led_on();
51 } else {
52 xd60_esc_led_off();
53 }
54
55 /*
56 if (layer & (1<<2)) {
57 xd60_poker_leds_on();
58 xd60_esc_led_on();
59 } else {
60 xd60_poker_leds_off();
61 xd60_esc_led_off();
62 }
63 */
64}; 46};
diff --git a/keyboards/xd60/keymaps/stanleylai/keymap.c b/keyboards/xd60/keymaps/stanleylai/keymap.c
index a84ee0f89..feb2cd1b6 100644
--- a/keyboards/xd60/keymaps/stanleylai/keymap.c
+++ b/keyboards/xd60/keymaps/stanleylai/keymap.c
@@ -8,53 +8,48 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
8 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_BSLS, KC_GRV, \ 8 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_BSLS, KC_GRV, \
9 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ 9 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
10 F(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ 10 F(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
11 KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \ 11 KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, F(1), KC_UP, KC_DEL, \
12 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT), 12 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
13 13
14 // 1: Function Layer 14 // 1: Function Layer
15 KEYMAP( 15 KEYMAP(
16 RESET, 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_F13, KC_F14, \ 16 RESET, 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_F13, KC_F14, \
17 KC_CAPS, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_STEP, BL_TOGG, KC_DEL, \ 17 KC_CAPS, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, \
18 F(0), KC_LEFT, KC_DOWN, KC_RIGHT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT, \ 18 F(0), KC_LEFT, KC_DOWN, KC_RIGHT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT, \
19 KC_LSFT, KC_NO, KC_VOLD, KC_MUTE, KC_VOLU,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, KC_PGUP, KC_INS, \ 19 KC_LSFT, KC_NO, KC_VOLD, KC_MUTE, KC_VOLU,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_INS, \
20 KC_LCTL, KC_LALT, KC_LGUI, KC_MPLY, KC_RGUI, KC_RALT, KC_HOME, KC_PGDOWN,KC_END), 20 KC_LCTL, KC_LALT, KC_LGUI, KC_MPLY, KC_RGUI, KC_RALT, KC_HOME, KC_PGDOWN,KC_END),
21 21
22 // 2: RGB Layer
23 KEYMAP(
24 KC_NO, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
25 KC_NO, RGB_TOG, RGB_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
26 KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
27 KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_VAD,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, F(1), KC_NO, KC_NO, \
28 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
29
22}; 30};
23 31
32// Custom Actions
24const uint16_t PROGMEM fn_actions[] = { 33const uint16_t PROGMEM fn_actions[] = {
25 [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay 34 [0] = ACTION_LAYER_MOMENTARY(1), // to Function Layer
35 [1] = ACTION_LAYER_MOMENTARY(2), // to RGB Layer
26}; 36};
27 37
38// Macros
28const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { 39const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
29 // MACRODOWN only works in this function
30 40
41 // MACRODOWN only works in this function
31 switch(id) { 42 switch(id) {
32 case 0: 43 case 0:
33 if (record->event.pressed) { 44 if (record->event.pressed) { register_code(KC_RSFT); }
34 register_code(KC_RSFT); 45 else { unregister_code(KC_RSFT); }
35 } else { 46 break;
36 unregister_code(KC_RSFT);
37 }
38 break;
39 } 47 }
40 48
41 return MACRO_NONE; 49 return MACRO_NONE;
42}; 50};
43 51
52// Loop
44void matrix_scan_user(void) { 53void matrix_scan_user(void) {
45 54 // Empty
46 // Layer LED indicators
47 uint32_t layer = layer_state;
48
49 if (layer & (1<<1)) {
50 xd60_wasd_leds_on();
51 xd60_fn_led_on();
52 xd60_esc_led_on();
53 xd60_poker_leds_on();
54 } else {
55 xd60_wasd_leds_off();
56 xd60_fn_led_off();
57 xd60_esc_led_off();
58 xd60_poker_leds_off();
59 }
60}; 55};
diff --git a/keyboards/xd60/readme.md b/keyboards/xd60/readme.md
index 393ea5d68..224498caa 100644
--- a/keyboards/xd60/readme.md
+++ b/keyboards/xd60/readme.md
@@ -1,7 +1,6 @@
1# QMK Firmware for XIUDI's 60% XD60 PCB 1# QMK Firmware for XIUDI's 60% XD60 PCB
2 2
3![Top View of XD60 Keyboard, with DSA Dolch keycaps](./top-view.JPG) 3![Top View of a pair of XD60 Keyboard](./xd60.JPG)
4![Angled View of XD60 Keyboard Arrow Cluster, with DSA Dolch keycaps](./arrow-cluster.JPG)
5 4
6## Quantum MK Firmware 5## Quantum MK Firmware
7For the full Quantum feature list, see [the parent readme.md](/readme.md). 6For the full Quantum feature list, see [the parent readme.md](/readme.md).
@@ -9,5 +8,10 @@ For the full Quantum feature list, see [the parent readme.md](/readme.md).
9## Additional Notes 8## Additional Notes
10The XD60 is essentially a GH60 rev. C, with support for a right-hand arrow cluster. Includes full compatibility with GH60 expansion boards. Board also supports in-switch LEDs (two-pin, single colour), as well as WS2182 LED strips for underglow lighting. Default keymap included, matching configuration on sale page. 9The XD60 is essentially a GH60 rev. C, with support for a right-hand arrow cluster. Includes full compatibility with GH60 expansion boards. Board also supports in-switch LEDs (two-pin, single colour), as well as WS2182 LED strips for underglow lighting. Default keymap included, matching configuration on sale page.
11 10
11Version 2 PCBs include 6 soldered on RGB underglow LEDs on the bottom, and are labelled "XD60v2" on the top. They are otherwise identical to v1 PCBs.
12
13## Known Issues
14In-switch backlight LEDs seem to only support 1 brightness level.
15
12## Build 16## Build
13To build the default keymap, simply run `make xd60-default`. 17To build the default keymap, simply run `make xd60-default`.
diff --git a/keyboards/xd60/rules.mk b/keyboards/xd60/rules.mk
index e0b92121d..174c3ec84 100644
--- a/keyboards/xd60/rules.mk
+++ b/keyboards/xd60/rules.mk
@@ -61,5 +61,5 @@ MIDI_ENABLE = no # MIDI controls
61AUDIO_ENABLE = no # Audio output on port C6 61AUDIO_ENABLE = no # Audio output on port C6
62UNICODE_ENABLE = no # Unicode 62UNICODE_ENABLE = no # Unicode
63BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID 63BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
64RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. 64RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
65SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend 65SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/xd60/top-view.JPG b/keyboards/xd60/top-view.JPG
deleted file mode 100644
index 613759b4d..000000000
--- a/keyboards/xd60/top-view.JPG
+++ /dev/null
Binary files differ
diff --git a/keyboards/xd60/xd60.h b/keyboards/xd60/xd60.h
index 36442cb52..dd5f63c0c 100644
--- a/keyboards/xd60/xd60.h
+++ b/keyboards/xd60/xd60.h
@@ -6,24 +6,18 @@
6 6
7/* XD60 LEDs 7/* XD60 LEDs
8 * GPIO pads 8 * GPIO pads
9 * 0 F7 WASD LEDs 9 * 0 F7 not connected
10 * 1 F6 ESC LED 10 * 1 F6 RGB PWM Underglow
11 * 2 F5 FN LED 11 * 2 F5 Backlight LED
12 * 3 F4 POKER Arrow LEDs 12 * 3 F4 not connected
13 * B2 Capslock LED 13 * B2 Capslock LED
14 * B0 not connected 14 * B0 not connected
15 */ 15 */
16inline void xd60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); } 16inline void xd60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
17inline void xd60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); } 17inline void xd60_bl_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
18inline void xd60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
19inline void xd60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); }
20inline void xd60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); }
21 18
22inline void xd60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); } 19inline void xd60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
23inline void xd60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); } 20inline void xd60_bl_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
24inline void xd60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
25inline void xd60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
26inline void xd60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
27 21
28/* XD60 Keymap Definition Macro */ 22/* XD60 Keymap Definition Macro */
29#define KEYMAP( \ 23#define KEYMAP( \
diff --git a/keyboards/xd60/xd60.jpg b/keyboards/xd60/xd60.jpg
new file mode 100644
index 000000000..11654f0fd
--- /dev/null
+++ b/keyboards/xd60/xd60.jpg
Binary files differ
diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h
index 8022ca672..400915db9 100644
--- a/quantum/audio/song_list.h
+++ b/quantum/audio/song_list.h
@@ -122,4 +122,31 @@
122 E__NOTE(_E5), \ 122 E__NOTE(_E5), \
123 E__NOTE(_D5), 123 E__NOTE(_D5),
124 124
125#define COIN_SOUND \
126 E__NOTE(_A5 ), \
127 HD_NOTE(_E6 ),
128
129#define ONE_UP_SOUND \
130 Q__NOTE(_E6 ), \
131 Q__NOTE(_G6 ), \
132 Q__NOTE(_E7 ), \
133 Q__NOTE(_C7 ), \
134 Q__NOTE(_D7 ), \
135 Q__NOTE(_G7 ),
136
137#define SONIC_RING \
138 E__NOTE(_E6), \
139 E__NOTE(_G6), \
140 HD_NOTE(_C7),
141
142#define ZELDA_PUZZLE \
143 Q__NOTE(_G5), \
144 Q__NOTE(_FS5), \
145 Q__NOTE(_DS5), \
146 Q__NOTE(_A4), \
147 Q__NOTE(_GS4), \
148 Q__NOTE(_E5), \
149 Q__NOTE(_GS5), \
150 HD_NOTE(_C6),
151
125#endif 152#endif
diff --git a/quantum/process_keycode/process_unicodemap.c b/quantum/process_keycode/process_unicodemap.c
index 37f10df86..68a593a18 100644
--- a/quantum/process_keycode/process_unicodemap.c
+++ b/quantum/process_keycode/process_unicodemap.c
@@ -1,25 +1,26 @@
1#include "process_unicodemap.h" 1#include "process_unicodemap.h"
2#include "process_unicode_common.h"
2 3
3__attribute__((weak)) 4__attribute__((weak))
4const uint32_t PROGMEM unicode_map[] = { 5const uint32_t PROGMEM unicode_map[] = {
5}; 6};
6 7
7void register_hex32(uint32_t hex) { 8void register_hex32(uint32_t hex) {
8 uint8_t onzerostart = 1; 9 bool onzerostart = true;
9 for(int i = 7; i >= 0; i--) { 10 for(int i = 7; i >= 0; i--) {
10 if (i <= 3) { 11 if (i <= 3) {
11 onzerostart = 0; 12 onzerostart = false;
12 } 13 }
13 uint8_t digit = ((hex >> (i*4)) & 0xF); 14 uint8_t digit = ((hex >> (i*4)) & 0xF);
14 if (digit == 0) { 15 if (digit == 0) {
15 if (onzerostart == 0) { 16 if (!onzerostart) {
16 register_code(hex_to_keycode(digit)); 17 register_code(hex_to_keycode(digit));
17 unregister_code(hex_to_keycode(digit)); 18 unregister_code(hex_to_keycode(digit));
18 } 19 }
19 } else { 20 } else {
20 register_code(hex_to_keycode(digit)); 21 register_code(hex_to_keycode(digit));
21 unregister_code(hex_to_keycode(digit)); 22 unregister_code(hex_to_keycode(digit));
22 onzerostart = 0; 23 onzerostart = false;
23 } 24 }
24 } 25 }
25} 26}
@@ -28,6 +29,7 @@ __attribute__((weak))
28void unicode_map_input_error() {} 29void unicode_map_input_error() {}
29 30
30bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { 31bool process_unicode_map(uint16_t keycode, keyrecord_t *record) {
32 uint8_t input_mode = get_unicode_input_mode();
31 if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { 33 if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) {
32 const uint32_t* map = unicode_map; 34 const uint32_t* map = unicode_map;
33 uint16_t index = keycode - QK_UNICODE_MAP; 35 uint16_t index = keycode - QK_UNICODE_MAP;
diff --git a/quantum/quantum.c b/quantum/quantum.c
index a4a12061b..5a9e771a9 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -7,6 +7,9 @@
7#define TAPPING_TERM 200 7#define TAPPING_TERM 200
8#endif 8#endif
9 9
10#include "backlight.h"
11extern backlight_config_t backlight_config;
12
10#ifdef FAUXCLICKY_ENABLE 13#ifdef FAUXCLICKY_ENABLE
11#include "fauxclicky.h" 14#include "fauxclicky.h"
12#endif 15#endif
@@ -294,14 +297,6 @@ bool process_record_quantum(keyrecord_t *record) {
294 return false; 297 return false;
295 break; 298 break;
296 #endif 299 #endif
297 #ifdef ADAFRUIT_BLE_ENABLE
298 case OUT_BLE:
299 if (record->event.pressed) {
300 set_output(OUTPUT_ADAFRUIT_BLE);
301 }
302 return false;
303 break;
304 #endif
305 #endif 300 #endif
306 case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO: 301 case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO:
307 if (record->event.pressed) { 302 if (record->event.pressed) {
@@ -604,6 +599,10 @@ void matrix_scan_quantum() {
604 matrix_scan_combo(); 599 matrix_scan_combo();
605 #endif 600 #endif
606 601
602 #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN)
603 backlight_task();
604 #endif
605
607 matrix_scan_kb(); 606 matrix_scan_kb();
608} 607}
609 608
@@ -671,13 +670,13 @@ __attribute__ ((weak))
671void backlight_set(uint8_t level) 670void backlight_set(uint8_t level)
672{ 671{
673 // Prevent backlight blink on lowest level 672 // Prevent backlight blink on lowest level
674 #if BACKLIGHT_ON_STATE == 0 673 // #if BACKLIGHT_ON_STATE == 0
675 // PORTx &= ~n 674 // // PORTx &= ~n
676 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); 675 // _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
677 #else 676 // #else
678 // PORTx |= n 677 // // PORTx |= n
679 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); 678 // _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
680 #endif 679 // #endif
681 680
682 if ( level == 0 ) { 681 if ( level == 0 ) {
683 #ifndef NO_BACKLIGHT_CLOCK 682 #ifndef NO_BACKLIGHT_CLOCK
@@ -685,13 +684,13 @@ void backlight_set(uint8_t level)
685 TCCR1A &= ~(_BV(COM1x1)); 684 TCCR1A &= ~(_BV(COM1x1));
686 OCR1x = 0x0; 685 OCR1x = 0x0;
687 #else 686 #else
688 #if BACKLIGHT_ON_STATE == 0 687 // #if BACKLIGHT_ON_STATE == 0
689 // PORTx |= n 688 // // PORTx |= n
690 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); 689 // _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
691 #else 690 // #else
692 // PORTx &= ~n 691 // // PORTx &= ~n
693 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); 692 // _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
694 #endif 693 // #endif
695 #endif 694 #endif
696 } 695 }
697 #ifndef NO_BACKLIGHT_CLOCK 696 #ifndef NO_BACKLIGHT_CLOCK
@@ -714,6 +713,30 @@ void backlight_set(uint8_t level)
714 #endif 713 #endif
715} 714}
716 715
716uint8_t backlight_tick = 0;
717
718void backlight_task(void) {
719 #ifdef NO_BACKLIGHT_CLOCK
720 if ((0xFFFF >> ((BACKLIGHT_LEVELS - backlight_config.level) * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {
721 #if BACKLIGHT_ON_STATE == 0
722 // PORTx &= ~n
723 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
724 #else
725 // PORTx |= n
726 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
727 #endif
728 } else {
729 #if BACKLIGHT_ON_STATE == 0
730 // PORTx |= n
731 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
732 #else
733 // PORTx &= ~n
734 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
735 #endif
736 }
737 backlight_tick = (backlight_tick + 1) % 16;
738 #endif
739}
717 740
718#ifdef BACKLIGHT_BREATHING 741#ifdef BACKLIGHT_BREATHING
719 742
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 77732d43f..1f1bb0afd 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -108,6 +108,7 @@ void unregister_code16 (uint16_t code);
108 108
109#ifdef BACKLIGHT_ENABLE 109#ifdef BACKLIGHT_ENABLE
110void backlight_init_ports(void); 110void backlight_init_ports(void);
111void backlight_task(void);
111 112
112#ifdef BACKLIGHT_BREATHING 113#ifdef BACKLIGHT_BREATHING
113void breathing_enable(void); 114void breathing_enable(void);
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index 56228f276..1e3df9fa6 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -389,9 +389,6 @@ enum quantum_keycodes {
389#ifdef BLUETOOTH_ENABLE 389#ifdef BLUETOOTH_ENABLE
390 OUT_BT, 390 OUT_BT,
391#endif 391#endif
392#ifdef ADAFRUIT_BLE_ENABLE
393 OUT_BLE,
394#endif
395 392
396 // always leave at the end 393 // always leave at the end
397 SAFE_RANGE 394 SAFE_RANGE
@@ -413,6 +410,7 @@ enum quantum_keycodes {
413#define ALTG(kc) (kc | QK_RCTL | QK_RALT) 410#define ALTG(kc) (kc | QK_RCTL | QK_RALT)
414#define SCMD(kc) (kc | QK_LGUI | QK_LSFT) 411#define SCMD(kc) (kc | QK_LGUI | QK_LSFT)
415#define SWIN(kc) SCMD(kc) 412#define SWIN(kc) SCMD(kc)
413#define LCA(kc) (kc | QK_LCTL | QK_LALT)
416 414
417#define MOD_HYPR 0xf 415#define MOD_HYPR 0xf
418#define MOD_MEH 0x7 416#define MOD_MEH 0x7
@@ -566,6 +564,7 @@ enum quantum_keycodes {
566#define ALL_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI), kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ 564#define ALL_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI), kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
567#define SCMD_T(kc) MT((MOD_LGUI | MOD_LSFT), kc) 565#define SCMD_T(kc) MT((MOD_LGUI | MOD_LSFT), kc)
568#define SWIN_T(kc) SCMD_T(kc) 566#define SWIN_T(kc) SCMD_T(kc)
567#define LCA_T(kc) MT((MOD_LCTL | MOD_LALT), kc) // Left control and left alt
569 568
570// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap 569// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
571#define KC_HYPR HYPR(KC_NO) 570#define KC_HYPR HYPR(KC_NO)
diff --git a/readme.md b/readme.md
index 21bb79a49..b2dfc5f75 100644
--- a/readme.md
+++ b/readme.md
@@ -1,6 +1,6 @@
1# Quantum Mechanical Keyboard Firmware 1# Quantum Mechanical Keyboard Firmware
2 2
3[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/jackhumbert/qmk_firmware) [![Gitter](https://badges.gitter.im/qmk/qmk_firmware.svg)](https://gitter.im/qmk/qmk_firmware?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) 3[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) [![Gitter](https://badges.gitter.im/qmk/qmk_firmware.svg)](https://gitter.im/qmk/qmk_firmware?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
4 4
5This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). 5This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/).
6 6
@@ -35,5 +35,5 @@ This is not a tiny project. While this is the main readme, there are many other
35* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on. 35* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on.
36* The list of possible keycodes you can use in your keymap is actually spread out in a few different places: 36* The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
37 * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. 37 * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes.
38 * [quantum/keymap.h](quantum/keymap.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap.h` is where they're actually defined. 38 * [quantum/quantum_keycodes.h](quantum/quantum_keycodes.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `quantum_keycodes.h` is where they're actually defined.
39* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally. 39* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally.
diff --git a/tmk_core/common.mk b/tmk_core/common.mk
index a86dccc61..47f6fc571 100644
--- a/tmk_core/common.mk
+++ b/tmk_core/common.mk
@@ -93,14 +93,20 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
93 TMK_COMMON_DEFS += -DBACKLIGHT_ENABLE 93 TMK_COMMON_DEFS += -DBACKLIGHT_ENABLE
94endif 94endif
95 95
96ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes)
97 TMK_COMMON_DEFS += -DADAFRUIT_BLE_ENABLE
98endif
99
100ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) 96ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
101 TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE 97 TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE
102endif 98endif
103 99
100ifeq ($(strip $(BLUETOOTH)), AdafruitBLE)
101 TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE
102 TMK_COMMON_DEFS += -DMODULE_ADAFRUIT_BLE
103endif
104
105ifeq ($(strip $(BLUETOOTH)), AdafruitEZKey)
106 TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE
107 TMK_COMMON_DEFS += -DMODULE_ADAFRUIT_EZKEY
108endif
109
104ifeq ($(strip $(ONEHAND_ENABLE)), yes) 110ifeq ($(strip $(ONEHAND_ENABLE)), yes)
105 TMK_COMMON_DEFS += -DONEHAND_ENABLE 111 TMK_COMMON_DEFS += -DONEHAND_ENABLE
106endif 112endif
diff --git a/tmk_core/common/action_tapping.c b/tmk_core/common/action_tapping.c
index e16e11be7..bd9a69ae0 100644
--- a/tmk_core/common/action_tapping.c
+++ b/tmk_core/common/action_tapping.c
@@ -228,6 +228,7 @@ bool process_tapping(keyrecord_t *keyp)
228 if (WITHIN_TAPPING_TERM(event)) { 228 if (WITHIN_TAPPING_TERM(event)) {
229 if (event.pressed) { 229 if (event.pressed) {
230 if (IS_TAPPING_KEY(event.key)) { 230 if (IS_TAPPING_KEY(event.key)) {
231#ifndef TAPPING_FORCE_HOLD
231 if (!tapping_key.tap.interrupted && tapping_key.tap.count > 0) { 232 if (!tapping_key.tap.interrupted && tapping_key.tap.count > 0) {
232 // sequential tap. 233 // sequential tap.
233 keyp->tap = tapping_key.tap; 234 keyp->tap = tapping_key.tap;
@@ -237,11 +238,11 @@ bool process_tapping(keyrecord_t *keyp)
237 tapping_key = *keyp; 238 tapping_key = *keyp;
238 debug_tapping_key(); 239 debug_tapping_key();
239 return true; 240 return true;
240 } else {
241 // FIX: start new tap again
242 tapping_key = *keyp;
243 return true;
244 } 241 }
242#endif
243 // FIX: start new tap again
244 tapping_key = *keyp;
245 return true;
245 } else if (is_tap_key(event.key)) { 246 } else if (is_tap_key(event.key)) {
246 // Sequential tap can be interfered with other tap key. 247 // Sequential tap can be interfered with other tap key.
247 debug("Tapping: Start with interfering other tap.\n"); 248 debug("Tapping: Start with interfering other tap.\n");
@@ -257,7 +258,7 @@ bool process_tapping(keyrecord_t *keyp)
257 return true; 258 return true;
258 } 259 }
259 } else { 260 } else {
260 if (!IS_NOEVENT(event)) debug("Tapping: other key just after tap.\n") {}; 261 if (!IS_NOEVENT(event)) debug("Tapping: other key just after tap.\n");
261 process_record(keyp); 262 process_record(keyp);
262 return true; 263 return true;
263 } 264 }
diff --git a/tmk_core/protocol/lufa.mk b/tmk_core/protocol/lufa.mk
index de0cc795f..5b1577972 100644
--- a/tmk_core/protocol/lufa.mk
+++ b/tmk_core/protocol/lufa.mk
@@ -22,11 +22,16 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)
22 include $(TMK_PATH)/protocol/midi.mk 22 include $(TMK_PATH)/protocol/midi.mk
23endif 23endif
24 24
25ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes) 25ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
26 LUFA_SRC += $(LUFA_DIR)/adafruit_ble.cpp 26 LUFA_SRC += $(LUFA_DIR)/bluetooth.c \
27 $(TMK_DIR)/protocol/serial_uart.c
27endif 28endif
28 29
29ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) 30ifeq ($(strip $(BLUETOOTH)), AdafruitBLE)
31 LUFA_SRC += $(LUFA_DIR)/adafruit_ble.cpp
32endif
33
34ifeq ($(strip $(BLUETOOTH)), AdafruitEZKey)
30 LUFA_SRC += $(LUFA_DIR)/bluetooth.c \ 35 LUFA_SRC += $(LUFA_DIR)/bluetooth.c \
31 $(TMK_DIR)/protocol/serial_uart.c 36 $(TMK_DIR)/protocol/serial_uart.c
32endif 37endif
@@ -54,6 +59,7 @@ LUFA_OPTS += -DUSE_FLASH_DESCRIPTORS
54LUFA_OPTS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" 59LUFA_OPTS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
55#LUFA_OPTS += -DINTERRUPT_CONTROL_ENDPOINT 60#LUFA_OPTS += -DINTERRUPT_CONTROL_ENDPOINT
56LUFA_OPTS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 61LUFA_OPTS += -DFIXED_CONTROL_ENDPOINT_SIZE=8
62LUFA_OPTS += -DFIXED_CONTROL_ENDPOINT_SIZE=8
57LUFA_OPTS += -DFIXED_NUM_CONFIGURATIONS=1 63LUFA_OPTS += -DFIXED_NUM_CONFIGURATIONS=1
58 64
59# Remote wakeup fix for ATmega32U2 https://github.com/tmk/tmk_keyboard/issues/361 65# Remote wakeup fix for ATmega32U2 https://github.com/tmk/tmk_keyboard/issues/361
diff --git a/tmk_core/protocol/lufa/adafruit_ble.h b/tmk_core/protocol/lufa/adafruit_ble.h
index 351fd55ae..b3bab3ca0 100644
--- a/tmk_core/protocol/lufa/adafruit_ble.h
+++ b/tmk_core/protocol/lufa/adafruit_ble.h
@@ -3,7 +3,7 @@
3 * Supports the Adafruit BLE board built around the nRF51822 chip. 3 * Supports the Adafruit BLE board built around the nRF51822 chip.
4 */ 4 */
5#pragma once 5#pragma once
6#ifdef ADAFRUIT_BLE_ENABLE 6#ifdef MODULE_ADAFRUIT_BLE
7#include <stdbool.h> 7#include <stdbool.h>
8#include <stdint.h> 8#include <stdint.h>
9#include <string.h> 9#include <string.h>
@@ -57,4 +57,4 @@ extern bool adafruit_ble_set_power_level(int8_t level);
57} 57}
58#endif 58#endif
59 59
60#endif // ADAFRUIT_BLE_ENABLE 60#endif // MODULE_ADAFRUIT_BLE
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index 651a0f347..60cba8d2a 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -67,10 +67,11 @@
67#endif 67#endif
68 68
69#ifdef BLUETOOTH_ENABLE 69#ifdef BLUETOOTH_ENABLE
70 #include "bluetooth.h" 70 #ifdef MODULE_ADAFRUIT_BLE
71#endif
72#ifdef ADAFRUIT_BLE_ENABLE
73 #include "adafruit_ble.h" 71 #include "adafruit_ble.h"
72 #else
73 #include "bluetooth.h"
74 #endif
74#endif 75#endif
75 76
76#ifdef VIRTSER_ENABLE 77#ifdef VIRTSER_ENABLE
@@ -602,18 +603,16 @@ static void send_keyboard(report_keyboard_t *report)
602 uint8_t where = where_to_send(); 603 uint8_t where = where_to_send();
603 604
604#ifdef BLUETOOTH_ENABLE 605#ifdef BLUETOOTH_ENABLE
605 if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { 606 if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
606 bluefruit_serial_send(0xFD); 607 #ifdef MODULE_ADAFRUIT_BLE
607 for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
608 bluefruit_serial_send(report->raw[i]);
609 }
610 }
611#endif
612
613#ifdef ADAFRUIT_BLE_ENABLE
614 if (where == OUTPUT_ADAFRUIT_BLE) {
615 adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys)); 608 adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));
616 } 609 #else
610 bluefruit_serial_send(0xFD);
611 for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
612 bluefruit_serial_send(report->raw[i]);
613 }
614 #endif
615 }
617#endif 616#endif
618 617
619 if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) { 618 if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) {
@@ -660,24 +659,22 @@ static void send_mouse(report_mouse_t *report)
660 uint8_t where = where_to_send(); 659 uint8_t where = where_to_send();
661 660
662#ifdef BLUETOOTH_ENABLE 661#ifdef BLUETOOTH_ENABLE
663 if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { 662 if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
664 bluefruit_serial_send(0xFD); 663 #ifdef MODULE_ADAFRUIT_BLE
665 bluefruit_serial_send(0x00);
666 bluefruit_serial_send(0x03);
667 bluefruit_serial_send(report->buttons);
668 bluefruit_serial_send(report->x);
669 bluefruit_serial_send(report->y);
670 bluefruit_serial_send(report->v); // should try sending the wheel v here
671 bluefruit_serial_send(report->h); // should try sending the wheel h here
672 bluefruit_serial_send(0x00);
673 }
674#endif
675
676#ifdef ADAFRUIT_BLE_ENABLE
677 if (where == OUTPUT_ADAFRUIT_BLE) {
678 // FIXME: mouse buttons 664 // FIXME: mouse buttons
679 adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h); 665 adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h);
680 } 666 #else
667 bluefruit_serial_send(0xFD);
668 bluefruit_serial_send(0x00);
669 bluefruit_serial_send(0x03);
670 bluefruit_serial_send(report->buttons);
671 bluefruit_serial_send(report->x);
672 bluefruit_serial_send(report->y);
673 bluefruit_serial_send(report->v); // should try sending the wheel v here
674 bluefruit_serial_send(report->h); // should try sending the wheel h here
675 bluefruit_serial_send(0x00);
676 #endif
677 }
681#endif 678#endif
682 679
683 if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) { 680 if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) {
@@ -727,6 +724,9 @@ static void send_consumer(uint16_t data)
727 724
728#ifdef BLUETOOTH_ENABLE 725#ifdef BLUETOOTH_ENABLE
729 if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) { 726 if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
727 #ifdef MODULE_ADAFRUIT_BLE
728 adafruit_ble_send_consumer_key(data, 0);
729 #else
730 static uint16_t last_data = 0; 730 static uint16_t last_data = 0;
731 if (data == last_data) return; 731 if (data == last_data) return;
732 last_data = data; 732 last_data = data;
@@ -740,12 +740,7 @@ static void send_consumer(uint16_t data)
740 bluefruit_serial_send(0x00); 740 bluefruit_serial_send(0x00);
741 bluefruit_serial_send(0x00); 741 bluefruit_serial_send(0x00);
742 bluefruit_serial_send(0x00); 742 bluefruit_serial_send(0x00);
743 } 743 #endif
744#endif
745
746#ifdef ADAFRUIT_BLE_ENABLE
747 if (where == OUTPUT_ADAFRUIT_BLE) {
748 adafruit_ble_send_consumer_key(data, 0);
749 } 744 }
750#endif 745#endif
751 746
@@ -1137,7 +1132,7 @@ int main(void)
1137 // midi_send_noteoff(&midi_device, 0, 64, 127); 1132 // midi_send_noteoff(&midi_device, 0, 64, 127);
1138#endif 1133#endif
1139 1134
1140#ifdef BLUETOOTH_ENABLE 1135#ifdef MODULE_ADAFRUIT_EZKEY
1141 serial_init(); 1136 serial_init();
1142#endif 1137#endif
1143 1138
@@ -1168,7 +1163,7 @@ int main(void)
1168 1163
1169 print("Keyboard start.\n"); 1164 print("Keyboard start.\n");
1170 while (1) { 1165 while (1) {
1171 #if !defined(BLUETOOTH_ENABLE) && !defined(ADAFRUIT_BLE_ENABLE) 1166 #if !defined(BLUETOOTH_ENABLE)
1172 while (USB_DeviceState == DEVICE_STATE_Suspended) { 1167 while (USB_DeviceState == DEVICE_STATE_Suspended) {
1173 print("[s]"); 1168 print("[s]");
1174 suspend_power_down(); 1169 suspend_power_down();
@@ -1191,7 +1186,7 @@ int main(void)
1191 rgblight_task(); 1186 rgblight_task();
1192#endif 1187#endif
1193 1188
1194#ifdef ADAFRUIT_BLE_ENABLE 1189#ifdef MODULE_ADAFRUIT_BLE
1195 adafruit_ble_task(); 1190 adafruit_ble_task();
1196#endif 1191#endif
1197 1192
diff --git a/tmk_core/protocol/lufa/outputselect.c b/tmk_core/protocol/lufa/outputselect.c
index 5d2457bff..0df5d3b75 100644
--- a/tmk_core/protocol/lufa/outputselect.c
+++ b/tmk_core/protocol/lufa/outputselect.c
@@ -14,7 +14,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
14 14
15#include "lufa.h" 15#include "lufa.h"
16#include "outputselect.h" 16#include "outputselect.h"
17#ifdef ADAFRUIT_BLE_ENABLE 17#ifdef MODULE_ADAFRUIT_BLE
18 #include "adafruit_ble.h" 18 #include "adafruit_ble.h"
19#endif 19#endif
20 20
@@ -34,9 +34,9 @@ uint8_t auto_detect_output(void) {
34 return OUTPUT_USB; 34 return OUTPUT_USB;
35 } 35 }
36 36
37#ifdef ADAFRUIT_BLE_ENABLE 37#ifdef MODULE_ADAFRUIT_BLE
38 if (adafruit_ble_is_connected()) { 38 if (adafruit_ble_is_connected()) {
39 return OUTPUT_ADAFRUIT_BLE; 39 return OUTPUT_BLUETOOTH;
40 } 40 }
41#endif 41#endif
42 42
diff --git a/tmk_core/protocol/lufa/outputselect.h b/tmk_core/protocol/lufa/outputselect.h
index 79b4dd35d..28cc3298e 100644
--- a/tmk_core/protocol/lufa/outputselect.h
+++ b/tmk_core/protocol/lufa/outputselect.h
@@ -18,7 +18,6 @@ enum outputs {
18 OUTPUT_NONE, 18 OUTPUT_NONE,
19 OUTPUT_USB, 19 OUTPUT_USB,
20 OUTPUT_BLUETOOTH, 20 OUTPUT_BLUETOOTH,
21 OUTPUT_ADAFRUIT_BLE,
22 21
23 // backward compatibility 22 // backward compatibility
24 OUTPUT_USB_AND_BT 23 OUTPUT_USB_AND_BT
diff --git a/util/install_dependencies.sh b/util/install_dependencies.sh
index 936a86593..1b73a8b3b 100755
--- a/util/install_dependencies.sh
+++ b/util/install_dependencies.sh
@@ -92,4 +92,23 @@ elif [[ -n "$(type -P zypper)" ]]; then
92 # TODO: The avr and eabi tools are not available as default packages, so we need 92 # TODO: The avr and eabi tools are not available as default packages, so we need
93 # another way to install them 93 # another way to install them
94 94
95elif [[ -n "$(type -P pkg)" ]]; then
96 # FreeBSD
97 pkg update
98 pkg install -y \
99 git \
100 wget \
101 gmake \
102 gcc \
103 zip \
104 unzip \
105 avr-binutils \
106 avr-gcc \
107 avr-libc \
108 dfu-programmer \
109 dfu-util \
110 arm-none-eabi-gcc \
111 arm-none-eabi-binutils \
112 arm-none-eabi-newlib \
113 diffutils
95fi 114fi