summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Vagrantfile31
-rw-r--r--build_keyboard.mk87
-rw-r--r--common_features.mk21
-rw-r--r--docs/_sidebar.md100
-rw-r--r--docs/_summary.md2
-rw-r--r--docs/config_options.md15
-rw-r--r--docs/custom_quantum_functions.md45
-rw-r--r--docs/feature_advanced_keycodes.md66
-rw-r--r--docs/feature_encoders.md20
-rw-r--r--docs/feature_unicode.md47
-rw-r--r--docs/features.md1
-rw-r--r--docs/getting_started_build_tools.md6
-rw-r--r--docs/getting_started_make_guide.md28
-rw-r--r--docs/index.html2
-rw-r--r--docs/internals_gpio_control.md6
-rw-r--r--docs/isp_flashing_guide.md2
-rw-r--r--docs/keycodes.md480
-rw-r--r--docs/keycodes_basic.md100
-rw-r--r--docs/proton_c_conversion.md21
-rw-r--r--docs/understanding_qmk.md58
-rw-r--r--docs/zh/_summary.md (renamed from docs/zh/_sidebar.md)0
-rwxr-xr-xdrivers/avr/i2c_master.c5
-rwxr-xr-xdrivers/avr/i2c_slave.c25
-rwxr-xr-xdrivers/avr/i2c_slave.h13
-rw-r--r--drivers/boards/GENERIC_STM32_F303XC/board.c (renamed from keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.c)0
-rw-r--r--drivers/boards/GENERIC_STM32_F303XC/board.h (renamed from keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.h)4
-rw-r--r--drivers/boards/GENERIC_STM32_F303XC/board.mk (renamed from keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.mk)0
-rw-r--r--drivers/boards/GENERIC_STM32_F303XC/bootloader_defs.h (renamed from keyboards/clueboard/60/bootloader_defs.h)0
-rw-r--r--drivers/issi/is31fl3733.c2
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c8
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c31
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/readme.md5
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/rules.mk12
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c99
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h189
-rw-r--r--keyboards/40percentclub/luddite/info.json80
-rw-r--r--keyboards/40percentclub/ut47/readme.md2
-rw-r--r--keyboards/412_64/keymaps/default/keymap.c6
-rw-r--r--keyboards/6ball/keymaps/default/rules.mk3
-rw-r--r--keyboards/6ball/readme.md2
-rw-r--r--keyboards/9key/keymaps/default/rules.mk3
-rw-r--r--keyboards/9key/readme.md2
-rw-r--r--keyboards/acr60/readme.md2
-rw-r--r--keyboards/al1/keymaps/splitbs/keymap.c4
-rw-r--r--keyboards/al1/readme.md2
-rw-r--r--keyboards/alf/dc60/dc60.h14
-rw-r--r--keyboards/alf/dc60/info.json5
-rw-r--r--keyboards/alf/dc60/keymaps/default/keymap.c14
-rw-r--r--keyboards/alice/alice.c55
-rw-r--r--keyboards/alice/alice.h38
-rw-r--r--keyboards/alice/config.h42
-rw-r--r--keyboards/alice/info.json12
-rw-r--r--keyboards/alice/keymaps/default/keymap.c37
-rw-r--r--keyboards/alice/keymaps/mrkeebs/keymap.c37
-rwxr-xr-xkeyboards/alice/program106
-rw-r--r--keyboards/alice/readme.md60
-rw-r--r--keyboards/alice/rules.mk48
-rw-r--r--keyboards/alice/usbconfig.h396
-rw-r--r--keyboards/alpha/keymaps/vderm/README.md35
-rw-r--r--keyboards/alpha/keymaps/vderm/alpha_vderm.hex1422
-rw-r--r--keyboards/alpha/keymaps/vderm/keymap.c34
-rw-r--r--keyboards/alps64/keymaps/crd/keymap.c2
-rw-r--r--keyboards/alps64/keymaps/default/keymap.c1
-rw-r--r--keyboards/alps64/keymaps/mechmerlin/keymap.c26
-rw-r--r--keyboards/alps64/keymaps/mechmerlin/readme.md10
-rw-r--r--keyboards/alps64/readme.md9
-rwxr-xr-xkeyboards/alu84/keymaps/default/keymap.c35
-rw-r--r--keyboards/alu84/keymaps/turbomech/rules.mk3
-rw-r--r--keyboards/alu84/readme.md2
-rw-r--r--keyboards/amj40/keymaps/default/rules.mk4
-rwxr-xr-xkeyboards/amj40/readme.md2
-rw-r--r--keyboards/amj60/keymaps/iso_split_rshift/rules.mk3
-rw-r--r--keyboards/amj60/readme.md2
-rw-r--r--keyboards/amj96/keymaps/default/keymap.c4
-rw-r--r--keyboards/amj96/readme.md2
-rw-r--r--keyboards/amjpad/keymaps/default/keymap.c37
-rw-r--r--keyboards/amjpad/readme.md2
-rw-r--r--keyboards/atom47/readme.md2
-rw-r--r--keyboards/atom47/rev2/readme.md2
-rw-r--r--keyboards/atomic/keymaps/default/keymap.c4
-rw-r--r--keyboards/atomic/keymaps/michelle.c3
-rw-r--r--keyboards/atomic/readme.md2
-rw-r--r--keyboards/atreus/keymaps/alphadox/keymap.c4
-rw-r--r--keyboards/atreus/keymaps/classic/keymap.c4
-rw-r--r--keyboards/atreus/keymaps/default/keymap.c4
-rw-r--r--keyboards/atreus/keymaps/dvorak_42_key/keymap.c4
-rw-r--r--keyboards/atreus/keymaps/gerb/keymap.c4
-rw-r--r--keyboards/atreus/keymaps/jeremy/keymap.c4
-rw-r--r--keyboards/atreus/keymaps/nojjan/keymap.c4
-rw-r--r--keyboards/atreus/keymaps/xk/rules.mk3
-rw-r--r--keyboards/atreus/keymaps/xyverz/keymap.c4
-rw-r--r--keyboards/atreus/readme.md2
-rw-r--r--keyboards/atreus62/keymaps/default/keymap.c6
-rw-r--r--keyboards/atreus62/keymaps/mfluid/keymap.c6
-rw-r--r--keyboards/atreus62/keymaps/mneme/keymap.c3
-rw-r--r--keyboards/atreus62/keymaps/pcewing/keymap.c4
-rw-r--r--keyboards/atreus62/keymaps/xyverz/keymap.c3
-rw-r--r--keyboards/atreus62/readme.md2
-rw-r--r--keyboards/bantam44/keymaps/default/keymap.c3
-rw-r--r--keyboards/bantam44/readme.md2
-rw-r--r--keyboards/bdn9/bdn9.c1
-rw-r--r--keyboards/bdn9/bdn9.h (renamed from quantum/template/avr/template.h)15
-rw-r--r--keyboards/bdn9/config.h74
-rw-r--r--keyboards/bdn9/info.json0
-rw-r--r--keyboards/bdn9/keymaps/default/keymap.c41
-rw-r--r--keyboards/bdn9/readme.md15
-rw-r--r--keyboards/bdn9/rules.mk50
-rw-r--r--keyboards/bface/README.md2
-rw-r--r--keyboards/bface/keymaps/default/keymap.c4
-rw-r--r--keyboards/bfake/readme.md2
-rw-r--r--keyboards/bfo9000/readme.md2
-rw-r--r--keyboards/blockey/readme.md2
-rw-r--r--keyboards/bmini/readme.md2
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c6
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c7
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c10
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk3
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk3
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c5
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c5
-rw-r--r--keyboards/bthlabs/geekpad/config.h227
-rw-r--r--keyboards/bthlabs/geekpad/geekpad.c43
-rw-r--r--keyboards/bthlabs/geekpad/geekpad.h40
-rw-r--r--keyboards/bthlabs/geekpad/info.json22
-rw-r--r--keyboards/bthlabs/geekpad/keymaps/default/config.h19
-rw-r--r--keyboards/bthlabs/geekpad/keymaps/default/keymap.c24
-rw-r--r--keyboards/bthlabs/geekpad/readme.md15
-rw-r--r--keyboards/bthlabs/geekpad/rules.mk81
-rw-r--r--keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.c (renamed from keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.c)25
-rw-r--r--keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.h923
-rw-r--r--keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.mk5
-rw-r--r--keyboards/candybar/bootloader_defs.h (renamed from keyboards/planck/rev6/bootloader_defs.h)2
-rw-r--r--keyboards/candybar/candybar.c21
-rw-r--r--keyboards/candybar/candybar.h30
-rw-r--r--keyboards/candybar/chconf.h524
-rw-r--r--keyboards/candybar/config.h121
-rw-r--r--keyboards/candybar/halconf.h353
-rw-r--r--keyboards/candybar/info.json210
-rw-r--r--keyboards/candybar/keymaps/default/keymap.c38
-rw-r--r--keyboards/candybar/mcuconf.h171
-rw-r--r--keyboards/candybar/readme.md18
-rw-r--r--keyboards/candybar/rules.mk50
-rw-r--r--keyboards/canoe/readme.md2
-rw-r--r--keyboards/catch22/keymaps/default/keymap.c3
-rw-r--r--keyboards/chibios_test/keymaps/default/keymap.c3
-rw-r--r--keyboards/chimera_ergo/keymaps/default/keymap.c5
-rw-r--r--keyboards/chimera_ergo/readme.md2
-rw-r--r--keyboards/chimera_ortho/keymaps/gordon/keymap.c5
-rw-r--r--keyboards/chimera_ortho/readme.md2
-rw-r--r--keyboards/chocopad/README.md2
-rw-r--r--keyboards/chocopad/keymaps/default/rules.mk3
-rw-r--r--keyboards/chocopad/keymaps/khord/rules.mk3
-rw-r--r--keyboards/christmas_tree/keymaps/default/rules.mk3
-rw-r--r--keyboards/christmas_tree/readme.md2
-rwxr-xr-xkeyboards/ckeys/handwire_101/config.h197
-rwxr-xr-xkeyboards/ckeys/handwire_101/handwire_101.c28
-rwxr-xr-xkeyboards/ckeys/handwire_101/handwire_101.h21
-rw-r--r--keyboards/ckeys/handwire_101/info.json13
-rwxr-xr-xkeyboards/ckeys/handwire_101/keymaps/default/config.h3
-rwxr-xr-xkeyboards/ckeys/handwire_101/keymaps/default/keymap.c178
-rwxr-xr-xkeyboards/ckeys/handwire_101/keymaps/default/readme.md1
-rwxr-xr-xkeyboards/ckeys/handwire_101/readme.md163
-rwxr-xr-xkeyboards/ckeys/handwire_101/rules.mk69
-rw-r--r--keyboards/ckeys/nakey/keymaps/default/keymap.c4
-rw-r--r--keyboards/ckeys/nakey/readme.md2
-rw-r--r--keyboards/ckeys/obelus/readme.md2
-rw-r--r--keyboards/ckeys/readme.md11
-rw-r--r--keyboards/clueboard/17/17.c9
-rw-r--r--keyboards/clueboard/17/17.h23
-rw-r--r--keyboards/clueboard/17/info.json31
-rw-r--r--keyboards/clueboard/17/keymaps/default/keymap.c43
-rw-r--r--keyboards/clueboard/17/readme.md4
-rw-r--r--keyboards/clueboard/17/rules.mk25
-rw-r--r--keyboards/clueboard/2x1800/2x1800.c15
-rw-r--r--keyboards/clueboard/2x1800/2x1800.h4
-rw-r--r--keyboards/clueboard/2x1800/config.h1
-rw-r--r--keyboards/clueboard/2x1800/info.json392
-rw-r--r--keyboards/clueboard/2x1800/keymaps/default/config.h5
-rw-r--r--keyboards/clueboard/2x1800/keymaps/default_4u/config.h5
-rw-r--r--keyboards/clueboard/2x1800/keymaps/default_7u/config.h5
-rw-r--r--keyboards/clueboard/2x1800/keymaps/macroboard/config.h5
-rw-r--r--keyboards/clueboard/2x1800/keymaps/mouseboard_left/config.h5
-rw-r--r--keyboards/clueboard/2x1800/keymaps/mouseboard_left/rules.mk1
-rw-r--r--keyboards/clueboard/2x1800/keymaps/mouseboard_right/config.h5
-rw-r--r--keyboards/clueboard/2x1800/keymaps/mouseboard_right/rules.mk1
-rw-r--r--keyboards/clueboard/2x1800/readme.md10
-rw-r--r--keyboards/clueboard/2x1800/rules.mk60
-rw-r--r--keyboards/clueboard/60/60.h13
-rw-r--r--keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.h1187
-rw-r--r--keyboards/clueboard/60/config.h27
-rw-r--r--keyboards/clueboard/60/info.json1653
-rw-r--r--keyboards/clueboard/60/keymaps/default/keymap.c8
-rw-r--r--keyboards/clueboard/60/keymaps/default_aek/keymap.c8
-rw-r--r--keyboards/clueboard/60/keymaps/yanfali/keymap.c10
-rw-r--r--keyboards/clueboard/60/matrix.c175
-rw-r--r--keyboards/clueboard/60/readme.md2
-rw-r--r--keyboards/clueboard/60/rules.mk21
-rw-r--r--keyboards/clueboard/66/66.c1
-rw-r--r--keyboards/clueboard/66/66.h16
-rw-r--r--keyboards/clueboard/66/info.json28
-rw-r--r--keyboards/clueboard/66/keymaps/66_ansi/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/66_ansi/readme.md4
-rw-r--r--keyboards/clueboard/66/keymaps/66_iso/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/66_iso/readme.md4
-rw-r--r--keyboards/clueboard/66/keymaps/bloodlvst/config.h6
-rw-r--r--keyboards/clueboard/66/keymaps/bloodlvst/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/caps_fn/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/caps_fn/readme.md2
-rw-r--r--keyboards/clueboard/66/keymaps/colemak/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/default/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/default/readme.md4
-rw-r--r--keyboards/clueboard/66/keymaps/jokrik/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/mac_optimized/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/mac_optimized/readme.md2
-rw-r--r--keyboards/clueboard/66/keymaps/magicmonty/config.h7
-rw-r--r--keyboards/clueboard/66/keymaps/magicmonty/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/magicmonty/rules.mk1
-rw-r--r--keyboards/clueboard/66/keymaps/manofinterests/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/maximised/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/maximised/readme.md2
-rw-r--r--keyboards/clueboard/66/keymaps/mouse_keys/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/mouse_keys/readme.md2
-rw-r--r--keyboards/clueboard/66/keymaps/mrscooty/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/muzfuz/keymap.c74
-rw-r--r--keyboards/clueboard/66/keymaps/muzfuz/readme.md8
-rw-r--r--keyboards/clueboard/66/keymaps/serubin/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/shift_fn/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/shift_fn/readme.md2
-rw-r--r--keyboards/clueboard/66/keymaps/smt/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/tetris/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/unix_optimized/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/unix_optimized/readme.md4
-rw-r--r--keyboards/clueboard/66/keymaps/win_optimized/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/win_optimized/readme.md4
-rw-r--r--keyboards/clueboard/66/keymaps/xyverz/config.h4
-rw-r--r--keyboards/clueboard/66/keymaps/xyverz/keymap.c2
-rw-r--r--keyboards/clueboard/66/keymaps/xyverz/rules.mk3
-rw-r--r--keyboards/clueboard/66/readme.md6
-rw-r--r--keyboards/clueboard/66/rev1/config.h59
-rw-r--r--keyboards/clueboard/66/rev1/rev1.h11
-rw-r--r--keyboards/clueboard/66/rev1/rules.mk24
-rw-r--r--keyboards/clueboard/66/rev2/config.h53
-rw-r--r--keyboards/clueboard/66/rev2/rev2.h11
-rw-r--r--keyboards/clueboard/66/rev2/rules.mk23
-rw-r--r--keyboards/clueboard/66/rev3/config.h53
-rw-r--r--keyboards/clueboard/66/rev3/rev3.c4
-rw-r--r--keyboards/clueboard/66/rev3/rev3.h11
-rw-r--r--keyboards/clueboard/66/rev3/rules.mk24
-rw-r--r--keyboards/clueboard/66/rev4/chconf.h (renamed from keyboards/planck/rev6/chconf.h)0
-rw-r--r--keyboards/clueboard/66/rev4/config.h83
-rw-r--r--keyboards/clueboard/66/rev4/halconf.h (renamed from keyboards/proton_c/halconf.h)2
-rw-r--r--keyboards/clueboard/66/rev4/mcuconf.h (renamed from keyboards/proton_c/mcuconf.h)6
-rw-r--r--keyboards/clueboard/66/rev4/readme.md15
-rw-r--r--keyboards/clueboard/66/rev4/rev4.c76
-rw-r--r--keyboards/clueboard/66/rev4/rev4.h94
-rw-r--r--keyboards/clueboard/66/rev4/rules.mk32
-rw-r--r--keyboards/clueboard/66/rules.mk25
-rw-r--r--keyboards/clueboard/66_hotswap/config.h1
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/config.h11
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/gen1.h80
-rw-r--r--keyboards/clueboard/66_hotswap/info.json17
-rw-r--r--keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c2
-rw-r--r--keyboards/clueboard/66_hotswap/keymaps/default/keymap.c8
-rw-r--r--keyboards/clueboard/66_hotswap/readme.md8
-rw-r--r--keyboards/clueboard/card/card.h17
-rw-r--r--keyboards/clueboard/card/config.h15
-rw-r--r--keyboards/clueboard/card/info.json20
-rw-r--r--keyboards/clueboard/card/keymaps/default/config.h7
-rw-r--r--keyboards/clueboard/card/keymaps/default/keymap.c7
-rw-r--r--keyboards/clueboard/card/keymaps/default/rules.mk16
-rw-r--r--keyboards/clueboard/card/keymaps/rgb_effects/config.h7
-rw-r--r--keyboards/clueboard/card/keymaps/rgb_effects/keymap.c6
-rw-r--r--keyboards/clueboard/card/keymaps/rgb_effects/rules.mk14
-rw-r--r--keyboards/clueboard/card/readme.md4
-rw-r--r--keyboards/clueboard/card/rules.mk71
-rw-r--r--keyboards/clueboard/readme.md7
-rw-r--r--keyboards/cod67/keymaps/default/keymap.c4
-rw-r--r--keyboards/cod67/readme.md2
-rw-r--r--keyboards/comet46/keymaps/satt/rules.mk1
-rw-r--r--keyboards/contra/keymaps/dana/rules.mk3
-rw-r--r--keyboards/contra/keymaps/losinggeneration/rules.mk3
-rw-r--r--keyboards/contra/keymaps/maxr1998/rules.mk3
-rw-r--r--keyboards/contra/readme.md2
-rw-r--r--keyboards/converter/sun_usb/readme.md2
-rw-r--r--keyboards/converter/usb_usb/README.md2
-rw-r--r--keyboards/cospad/keymaps/default/keymap.c5
-rwxr-xr-xkeyboards/crawlpad/config.h4
-rwxr-xr-xkeyboards/crawlpad/crawlpad.h6
-rw-r--r--keyboards/crawlpad/crawlpad.json1
-rw-r--r--keyboards/crawlpad/info.json29
-rwxr-xr-xkeyboards/crawlpad/keymaps/default/keymap.c46
-rw-r--r--keyboards/crawlpad/readme.md6
-rwxr-xr-xkeyboards/crawlpad/rules.mk22
-rw-r--r--keyboards/crkbd/keymaps/omgvee/config.h45
-rw-r--r--keyboards/crkbd/keymaps/omgvee/keymap.c239
-rw-r--r--keyboards/crkbd/keymaps/omgvee/readme.md15
-rw-r--r--keyboards/crkbd/keymaps/omgvee/rules.mk31
-rw-r--r--keyboards/cu24/readme.md2
-rw-r--r--keyboards/cu75/keymaps/default/keymap.c6
-rw-r--r--keyboards/cu75/keymaps/default/rules.mk4
-rw-r--r--keyboards/cu75/keymaps/iso/keymap.c6
-rw-r--r--keyboards/cu75/keymaps/iso/rules.mk4
-rw-r--r--keyboards/cu75/readme.md2
-rw-r--r--keyboards/daisy/keymaps/default/keymap.c4
-rw-r--r--keyboards/daisy/readme.md2
-rw-r--r--keyboards/dc01/arrow/matrix.c12
-rw-r--r--keyboards/dc01/arrow/readme.md2
-rw-r--r--keyboards/dc01/left/readme.md2
-rw-r--r--keyboards/dc01/numpad/matrix.c12
-rw-r--r--keyboards/dc01/numpad/readme.md2
-rw-r--r--keyboards/dc01/right/matrix.c12
-rw-r--r--keyboards/dc01/right/readme.md2
-rw-r--r--keyboards/deltasplit75/keymaps/itsaferbie/rules.mk3
-rw-r--r--keyboards/deltasplit75/readme.md2
-rw-r--r--keyboards/dichotomy/info.json2
-rwxr-xr-xkeyboards/dichotomy/keymaps/default/keymap.c5
-rw-r--r--keyboards/dilly/README.md2
-rw-r--r--keyboards/diverge3/readme.md2
-rw-r--r--keyboards/dk60/readme.md2
-rw-r--r--keyboards/do60/keymaps/crd/keymap.c33
-rw-r--r--keyboards/duck/eagle_viper/readme.md2
-rw-r--r--keyboards/duck/eagle_viper/v2/config.h6
-rw-r--r--keyboards/duck/eagle_viper/v2/readme.md2
-rw-r--r--keyboards/duck/jetfire/config.h6
-rw-r--r--keyboards/duck/jetfire/readme.md2
-rw-r--r--keyboards/duck/lightsaver/config.h4
-rw-r--r--keyboards/duck/lightsaver/keymaps/rasmus/keymap.c3
-rw-r--r--keyboards/duck/lightsaver/readme.md2
-rw-r--r--keyboards/duck/octagon/readme.md2
-rw-r--r--keyboards/duck/octagon/v1/config.h6
-rw-r--r--keyboards/duck/octagon/v1/readme.md2
-rw-r--r--keyboards/duck/octagon/v2/config.h6
-rw-r--r--keyboards/duck/octagon/v2/readme.md2
-rw-r--r--keyboards/dz60/keymaps/muzfuz/README.md8
-rw-r--r--keyboards/dz60/keymaps/muzfuz/keymap.c80
-rw-r--r--keyboards/dz60/readme.md2
-rw-r--r--keyboards/e6v2/le/readme.md2
-rw-r--r--keyboards/e6v2/oe/readme.md2
-rw-r--r--keyboards/eco/keymaps/default/rules.mk3
-rw-r--r--keyboards/eco/keymaps/hexwire/rules.mk3
-rw-r--r--keyboards/eco/keymaps/that_canadian/rules.mk3
-rw-r--r--keyboards/eco/readme.md2
-rw-r--r--keyboards/ergo42/readme.md2
-rw-r--r--keyboards/ergodox_ez/keymaps/bdk/config.h5
-rw-r--r--keyboards/ergodox_ez/keymaps/bdk/keymap.c176
-rw-r--r--keyboards/ergodox_ez/keymaps/bdk/readme.md36
-rw-r--r--keyboards/ergodox_ez/keymaps/bdk/rules.mk3
-rw-r--r--keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk3
-rw-r--r--keyboards/ergodox_ez/keymaps/matrixman/keymap.c5
-rw-r--r--keyboards/ergodox_ez/keymaps/testing/keymap.c4
-rw-r--r--keyboards/ergodox_ez/util/compile_keymap.py3
-rw-r--r--keyboards/ergoinu/readme.md2
-rw-r--r--keyboards/ergotravel/keymaps/rs/config.h38
-rw-r--r--keyboards/ergotravel/keymaps/rs/keymap.c59
-rw-r--r--keyboards/ergotravel/keymaps/rs/readme.md13
-rw-r--r--keyboards/ergotravel/keymaps/rs/rules.mk0
-rw-r--r--keyboards/ergotravel/readme.md2
-rw-r--r--keyboards/espectro/keymaps/mikethetiger/keymap.c88
-rw-r--r--keyboards/facew/readme.md2
-rw-r--r--keyboards/fc660c/README.md2
-rw-r--r--keyboards/fc660c/keymaps/dbroqua/keymap.c3
-rw-r--r--keyboards/fc660c/keymaps/default/keymap.c3
-rw-r--r--keyboards/fc980c/README.md2
-rw-r--r--keyboards/fc980c/keymaps/actuation-point-example/keymap.c2
-rw-r--r--keyboards/fc980c/keymaps/coloneljesus/keymap.c2
-rw-r--r--keyboards/fc980c/keymaps/default/keymap.c2
-rw-r--r--keyboards/felix/readme.md2
-rw-r--r--keyboards/fleuron/readme.md2
-rw-r--r--keyboards/fortitude60/readme.md2
-rw-r--r--keyboards/four_banger/readme.md2
-rw-r--r--keyboards/fourier/keymaps/valgrahf/rules.mk3
-rw-r--r--keyboards/fourier/readme.md2
-rwxr-xr-xkeyboards/fractal/fractal.h7
-rw-r--r--keyboards/fractal/readme.md2
-rwxr-xr-xkeyboards/fractal/rules.mk2
-rw-r--r--keyboards/gergo/config.h73
-rw-r--r--keyboards/gergo/gergo.c66
-rw-r--r--keyboards/gergo/gergo.h58
-rw-r--r--keyboards/gergo/i2cmaster.h178
-rw-r--r--keyboards/gergo/info.json277
-rw-r--r--keyboards/gergo/keymaps/default/keymap.c151
-rw-r--r--keyboards/gergo/keymaps/default/readme.md10
-rw-r--r--keyboards/gergo/keymaps/default/rules.mk36
-rw-r--r--keyboards/gergo/matrix.c517
-rw-r--r--keyboards/gergo/readme.md26
-rw-r--r--keyboards/gergo/rules.mk20
-rw-r--r--keyboards/gh60/keymaps/bluezio/keymap.c3
-rw-r--r--keyboards/gh60/keymaps/dbroqua/rules.mk4
-rw-r--r--keyboards/gh60/keymaps/dbroqua_7U/rules.mk3
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/rules.mk4
-rw-r--r--keyboards/gh60/keymaps/sethbc/rules.mk3
-rw-r--r--keyboards/gh60/keymaps/xyverz/keymap.c4
-rw-r--r--keyboards/gh60/readme.md2
-rw-r--r--keyboards/gh80_3000/readme.md2
-rw-r--r--keyboards/gonnerd/keymaps/default/keymap.c4
-rw-r--r--keyboards/gonnerd/keymaps/default/rules.mk3
-rw-r--r--keyboards/gonnerd/keymaps/gam3cat/rules.mk1
-rw-r--r--keyboards/gonnerd/keymaps/mauin/rules.mk3
-rw-r--r--keyboards/gonnerd/keymaps/tkl/keymap.c4
-rw-r--r--keyboards/gonnerd/keymaps/tkl/rules.mk3
-rw-r--r--keyboards/gonnerd/readme.md2
-rw-r--r--keyboards/h87a/keymaps/default/keymap.c4
-rw-r--r--keyboards/hadron/readme.md2
-rw-r--r--keyboards/hadron/ver0/rules.mk1
-rw-r--r--keyboards/hadron/ver0/ver0.c1
-rw-r--r--keyboards/hadron/ver0/ver0.h6
-rw-r--r--keyboards/hadron/ver2/keymaps/side_numpad/rules.mk3
-rw-r--r--keyboards/hadron/ver3/keymaps/sebaslayout/config.h1
-rw-r--r--keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c57
-rw-r--r--keyboards/hadron/ver3/keymaps/sebaslayout/readme.md7
-rw-r--r--keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk4
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keymaps/default/rules.mk3
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/rules.mk3
-rw-r--r--keyboards/handwired/datahand/config.h87
-rw-r--r--keyboards/handwired/datahand/datahand.h133
-rw-r--r--keyboards/handwired/datahand/keymaps/default/keymap.c313
-rw-r--r--keyboards/handwired/datahand/matrix.c125
-rw-r--r--keyboards/handwired/datahand/readme.md15
-rw-r--r--keyboards/handwired/datahand/rules.mk59
-rw-r--r--keyboards/handwired/downbubble/config.h245
-rw-r--r--keyboards/handwired/downbubble/downbubble.c16
-rw-r--r--keyboards/handwired/downbubble/downbubble.h111
-rw-r--r--keyboards/handwired/downbubble/info.json559
-rw-r--r--keyboards/handwired/downbubble/keymaps/default/config.h19
-rw-r--r--keyboards/handwired/downbubble/keymaps/default/keymap.c103
-rw-r--r--keyboards/handwired/downbubble/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/downbubble/license201
-rw-r--r--keyboards/handwired/downbubble/readme.md15
-rw-r--r--keyboards/handwired/downbubble/rules.mk81
-rw-r--r--keyboards/handwired/frenchdev/keymaps/default/keymap.c9
-rw-r--r--keyboards/handwired/frenchdev/rules.mk3
-rw-r--r--keyboards/handwired/hexon38/config.h60
-rw-r--r--keyboards/handwired/hexon38/hexon38.c3
-rw-r--r--keyboards/handwired/hexon38/hexon38.h17
-rw-r--r--keyboards/handwired/hexon38/keymaps/default/keymap.c407
-rw-r--r--keyboards/handwired/hexon38/readme.md11
-rw-r--r--keyboards/handwired/hexon38/rules.mk64
-rw-r--r--keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c4
-rw-r--r--keyboards/handwired/ibm122m/readme.md2
-rw-r--r--keyboards/handwired/not_so_minidox/readme.md2
-rw-r--r--keyboards/handwired/numbrero/config.h51
-rw-r--r--keyboards/handwired/numbrero/info.json62
-rw-r--r--keyboards/handwired/numbrero/keymaps/default/keymap.c30
-rw-r--r--keyboards/handwired/numbrero/license201
-rw-r--r--keyboards/handwired/numbrero/numbrero.c1
-rw-r--r--keyboards/handwired/numbrero/numbrero.h30
-rw-r--r--keyboards/handwired/numbrero/readme.md13
-rw-r--r--keyboards/handwired/numbrero/rules.mk59
-rw-r--r--keyboards/handwired/numpad20/readme.md2
-rw-r--r--keyboards/handwired/ortho5x13/ortho5x13.h7
-rw-r--r--keyboards/handwired/ortho60/info.json67
-rw-r--r--keyboards/handwired/ortho60/readme.md11
-rw-r--r--keyboards/handwired/ortho60/rules.mk2
-rw-r--r--keyboards/handwired/promethium/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c1
-rw-r--r--keyboards/handwired/pteron/keymaps/FSund/keymap.c4
-rw-r--r--keyboards/handwired/qc60/README.md5
-rw-r--r--keyboards/handwired/qc60/info.json634
-rw-r--r--keyboards/handwired/qc60/keymaps/default/keymap.c3
-rw-r--r--keyboards/handwired/qc60/keymaps/wntrmln/keymap.c3
-rw-r--r--keyboards/handwired/qc60/proto/proto.h26
-rw-r--r--keyboards/handwired/reddot/info.json108
-rw-r--r--[-rwxr-xr-x]keyboards/handwired/reddot/keymaps/default/keymap.c39
-rwxr-xr-xkeyboards/handwired/reddot/readme.md26
-rwxr-xr-xkeyboards/handwired/reddot/reddot.h27
-rw-r--r--keyboards/handwired/retro_refit/info.json95
-rw-r--r--keyboards/handwired/retro_refit/keymaps/default/keymap.c37
-rw-r--r--keyboards/handwired/retro_refit/readme.md72
-rw-r--r--keyboards/handwired/retro_refit/retro_refit.h51
-rw-r--r--keyboards/handwired/rs60/README.md27
-rw-r--r--keyboards/handwired/rs60/config.h47
-rw-r--r--keyboards/handwired/rs60/keymaps/default/keymap.c207
-rw-r--r--keyboards/handwired/rs60/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/rs60/rs60.c18
-rw-r--r--keyboards/handwired/rs60/rs60.h36
-rw-r--r--keyboards/handwired/rs60/rules.mk61
-rw-r--r--keyboards/handwired/terminus_mini/readme.md2
-rw-r--r--keyboards/handwired/tradestation/info.json12
-rw-r--r--keyboards/handwired/tradestation/readme.md26
-rw-r--r--keyboards/handwired/tradestation/rules.mk3
-rw-r--r--keyboards/handwired/tradestation/tradestation.h32
-rw-r--r--keyboards/handwired/traveller/keymaps/default/keymap.c3
-rw-r--r--keyboards/handwired/woodpad/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/woodpad/keymaps/default/rules.mk3
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/rules.mk3
-rw-r--r--keyboards/handwired/xealous/debounce.c63
-rw-r--r--keyboards/handwired/xealous/rules.mk10
-rw-r--r--keyboards/helix/pico/keymaps/default/rules.mk4
-rw-r--r--keyboards/helix/pico/keymaps/mtei/rules.mk4
-rw-r--r--keyboards/helix/readme.md2
-rw-r--r--keyboards/helix/rev1/keymaps/OLED_sample/rules.mk20
-rw-r--r--keyboards/helix/rev1/keymaps/default/rules.mk3
-rw-r--r--keyboards/helix/rev2/keymaps/default/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/edvorakjp/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/froggy/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/led_test/rules.mk4
-rw-r--r--keyboards/hhkb/keymaps/cinaeco/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/cinaeco/rules.mk3
-rw-r--r--keyboards/hhkb/keymaps/dbroqua/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/default/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/enoch_jp/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/eric/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/jp/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/jp_mac/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/krusli/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/mjt/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/rdg_jp/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/schaeferdev/README.md36
-rw-r--r--keyboards/hhkb/keymaps/schaeferdev/config.h9
-rw-r--r--keyboards/hhkb/keymaps/schaeferdev/keymap.c76
-rw-r--r--keyboards/hhkb/keymaps/schaeferdev/rules.mk1
-rw-r--r--keyboards/hhkb/keymaps/sh_jp/keymap.c4
-rw-r--r--keyboards/hhkb/keymaps/smt/keymap.c4
-rw-r--r--keyboards/hhkb/readme.md2
-rwxr-xr-xkeyboards/hid_liber/readme.md2
-rw-r--r--keyboards/hs60/v1/readme.md2
-rw-r--r--keyboards/hs60/v2/config.h89
-rw-r--r--keyboards/hs60/v2/keymaps/ansi/config.h2
-rw-r--r--keyboards/hs60/v2/keymaps/ansi/keymap.c22
-rw-r--r--keyboards/hs60/v2/keymaps/ansi/readme.md6
-rw-r--r--keyboards/hs60/v2/keymaps/default/keymap.c20
-rw-r--r--keyboards/hs60/v2/keymaps/default/readme.md6
-rw-r--r--keyboards/hs60/v2/keymaps/hhkb/config.h13
-rw-r--r--keyboards/hs60/v2/keymaps/hhkb/keymap.c34
-rw-r--r--keyboards/hs60/v2/keymaps/hhkb/readme.md6
-rw-r--r--keyboards/hs60/v2/mcuconf.h2
-rw-r--r--keyboards/hs60/v2/readme.md2
-rw-r--r--keyboards/hs60/v2/rules.mk18
-rw-r--r--keyboards/hs60/v2/v2.c621
-rw-r--r--keyboards/hs60/v2/v2.h7
-rw-r--r--keyboards/idobo/rules.mk7
-rw-r--r--keyboards/infinity60/keymaps/default/keymap.c4
-rwxr-xr-xkeyboards/infinity60/keymaps/depariel/keymap.c4
-rw-r--r--keyboards/infinity60/keymaps/hasu/keymap.c7
-rw-r--r--keyboards/iris/iris.h1
-rw-r--r--keyboards/iris/keymaps/ave-63/config.h38
-rw-r--r--keyboards/iris/keymaps/ave-63/keymap.c120
-rw-r--r--keyboards/iris/keymaps/davidrambo/rules.mk3
-rw-r--r--keyboards/iris/keymaps/default/keymap.c71
-rw-r--r--keyboards/iris/keymaps/dvp-zjpxshade/rules.mk3
-rw-r--r--keyboards/iris/keymaps/hag/rules.mk3
-rw-r--r--keyboards/iris/keymaps/hexwire/rules.mk3
-rw-r--r--keyboards/iris/keymaps/impstyle/rules.mk3
-rw-r--r--keyboards/iris/keymaps/krusli/rules.mk3
-rw-r--r--keyboards/iris/keymaps/lewisridden/rules.mk3
-rw-r--r--keyboards/iris/keymaps/mtdjr/rules.mk4
-rw-r--r--keyboards/iris/keymaps/omgvee/readme.md8
-rw-r--r--keyboards/iris/keymaps/rdhaene/rules.mk3
-rw-r--r--keyboards/iris/keymaps/rs/config.h38
-rw-r--r--keyboards/iris/keymaps/rs/karabiner.json154
-rw-r--r--keyboards/iris/keymaps/rs/keymap.c48
-rw-r--r--keyboards/iris/keymaps/rs/readme.md13
-rw-r--r--keyboards/iris/keymaps/rs/rules.mk1
-rw-r--r--keyboards/iris/keymaps/s1carii/readme.md2
-rw-r--r--keyboards/iris/keymaps/swedish/rules.mk3
-rw-r--r--keyboards/iris/keymaps/transmogrified/rules.mk3
-rw-r--r--keyboards/iris/keymaps/yanfali/rules.mk3
-rw-r--r--keyboards/iris/rev1/config.h38
-rw-r--r--keyboards/iris/rev1/rev1.c14
-rw-r--r--keyboards/iris/rev1_led/config.h38
-rw-r--r--keyboards/iris/rev1_led/rev1_led.c14
-rw-r--r--keyboards/iris/rev2/config.h38
-rw-r--r--keyboards/iris/rev2/rev2.c14
-rw-r--r--keyboards/iris/rev3/config.h47
-rw-r--r--keyboards/iris/rev3/rev3.c15
-rw-r--r--keyboards/iris/rev3/rev3.h2
-rw-r--r--keyboards/iris/rev3/rules.mk1
-rw-r--r--keyboards/iris/rules.mk40
-rw-r--r--keyboards/jc65/v32a/readme.md2
-rw-r--r--keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk1
-rw-r--r--keyboards/jc65/v32u4/readme.md2
-rw-r--r--keyboards/jd40/keymaps/vanagon/rules.mk3
-rw-r--r--keyboards/jd45/keymaps/mjt6u/rules.mk3
-rw-r--r--keyboards/jj40/README.md2
-rw-r--r--keyboards/jj40/keymaps/ajp10304/rules.mk5
-rw-r--r--keyboards/jj40/keymaps/fun40/rules.mk3
-rw-r--r--keyboards/jj50/README.md2
-rw-r--r--keyboards/jj50/rules.mk4
-rw-r--r--keyboards/jm60/readme.md2
-rw-r--r--keyboards/k_type/keymaps/belak/keymap.c4
-rw-r--r--keyboards/k_type/keymaps/default/keymap.c4
-rw-r--r--keyboards/k_type/readme.md2
-rw-r--r--keyboards/katana60/keymaps/colemak/keymap.c6
-rw-r--r--keyboards/katana60/keymaps/default/keymap.c6
-rw-r--r--keyboards/katana60/readme.md2
-rw-r--r--keyboards/kbd66/keymaps/ansi/keymap.c4
-rw-r--r--keyboards/kbd66/keymaps/default/keymap.c4
-rw-r--r--keyboards/kbd66/keymaps/iso/keymap.c4
-rw-r--r--keyboards/kbd66/readme.md2
-rw-r--r--keyboards/kbd67/hotswap/config.h245
-rw-r--r--keyboards/kbd67/hotswap/hotswap.c43
-rw-r--r--keyboards/kbd67/hotswap/hotswap.h43
-rw-r--r--keyboards/kbd67/hotswap/info.json12
-rw-r--r--keyboards/kbd67/hotswap/keymaps/default/config.h19
-rw-r--r--keyboards/kbd67/hotswap/keymaps/default/keymap.c72
-rw-r--r--keyboards/kbd67/hotswap/keymaps/default/readme.md1
-rw-r--r--keyboards/kbd67/hotswap/keymaps/zunger/config.h22
-rw-r--r--keyboards/kbd67/hotswap/keymaps/zunger/keymap.c176
-rw-r--r--keyboards/kbd67/hotswap/keymaps/zunger/readme.md27
-rw-r--r--keyboards/kbd67/hotswap/keymaps/zunger/rules.mk2
-rw-r--r--keyboards/kbd67/hotswap/readme.md13
-rw-r--r--keyboards/kbd67/hotswap/rules.mk (renamed from keyboards/kbd67/rules.mk)2
-rw-r--r--keyboards/kbd67/readme.md14
-rw-r--r--keyboards/kbd67/rev1/config.h (renamed from keyboards/kbd67/config.h)0
-rw-r--r--keyboards/kbd67/rev1/info.json (renamed from keyboards/kbd67/info.json)0
-rw-r--r--keyboards/kbd67/rev1/keymaps/default/config.h (renamed from keyboards/kbd67/keymaps/default/config.h)0
-rw-r--r--keyboards/kbd67/rev1/keymaps/default/keymap.c (renamed from keyboards/kbd67/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kbd67/rev1/keymaps/default/readme.md (renamed from keyboards/kbd67/keymaps/default/readme.md)0
-rw-r--r--keyboards/kbd67/rev1/readme.md13
-rw-r--r--keyboards/kbd67/rev1/rev1.c (renamed from keyboards/kbd67/kbd67.c)2
-rw-r--r--keyboards/kbd67/rev1/rev1.h (renamed from keyboards/kbd67/kbd67.h)4
-rw-r--r--keyboards/kbd67/rev1/rules.mk80
-rw-r--r--keyboards/kbd6x/keymaps/konstantin/config.h3
-rw-r--r--keyboards/kbd6x/keymaps/konstantin/keymap.c92
-rw-r--r--keyboards/kbd6x/keymaps/konstantin/rules.mk2
-rw-r--r--keyboards/kbd6x/readme.md2
-rw-r--r--keyboards/kbd75/keymaps/edulpn/README.md13
-rw-r--r--keyboards/kbd75/keymaps/edulpn/keymap.c67
-rw-r--r--keyboards/kbd75/readme.md2
-rw-r--r--keyboards/kbd8x/keymaps/default/keymap.c4
-rw-r--r--keyboards/kbd8x/keymaps/default_backlighting/keymap.c4
-rw-r--r--keyboards/kbd8x/readme.md2
-rw-r--r--keyboards/kc60/keymaps/default/keymap.c4
-rw-r--r--keyboards/kc60/keymaps/sgoodwin/keymap.c4
-rw-r--r--keyboards/kc60/keymaps/stanleylai/rules.mk3
-rw-r--r--keyboards/kc60/keymaps/wigguno/keymap.c4
-rw-r--r--keyboards/kc60/keymaps/wigguno/rules.mk3
-rw-r--r--keyboards/kc60/keymaps/ws2812/rules.mk3
-rw-r--r--keyboards/kc60se/readme.md2
-rw-r--r--keyboards/kinesis/keymaps/carpalx/keymap.c5
-rw-r--r--keyboards/kinesis/keymaps/carpalx/rules.mk3
-rw-r--r--keyboards/kinesis/keymaps/default/keymap.c5
-rw-r--r--keyboards/kinesis/keymaps/default/rules.mk3
-rw-r--r--keyboards/kinesis/keymaps/default_pretty/keymap.c5
-rw-r--r--keyboards/kinesis/keymaps/default_pretty/rules.mk3
-rw-r--r--keyboards/kinesis/keymaps/dvorak/keymap.c5
-rw-r--r--keyboards/kinesis/keymaps/dvorak/rules.mk3
-rw-r--r--keyboards/kinesis/keymaps/insertsnideremarks/rules.mk3
-rw-r--r--keyboards/kinesis/keymaps/milestogo/rules.mk3
-rw-r--r--keyboards/kinesis/keymaps/xyverz/keymap.c5
-rw-r--r--keyboards/kinesis/keymaps/xyverz/rules.mk3
-rw-r--r--keyboards/kira75/keymaps/default/keymap.c4
-rw-r--r--keyboards/kira75/readme.md2
-rw-r--r--keyboards/kmac/keymaps/default/keymap.c4
-rw-r--r--keyboards/kmac/keymaps/default/rules.mk3
-rw-r--r--keyboards/kmac/keymaps/winkeyless/keymap.c4
-rw-r--r--keyboards/kmac/keymaps/winkeyless/rules.mk3
-rw-r--r--keyboards/knops/mini/readme.md2
-rw-r--r--keyboards/kona_classic/README.md2
-rw-r--r--keyboards/kona_classic/keymaps/ansi/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/ansi_arrows/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/ansi_arrows_lcap/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/ansi_split/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/ansi_split_arrows/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/default/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/iso/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/iso_arrows/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/iso_split/rules.mk3
-rw-r--r--keyboards/kona_classic/keymaps/iso_split_arrows/rules.mk3
-rw-r--r--keyboards/laplace/keymaps/bakingpy/rules.mk3
-rw-r--r--keyboards/laplace/keymaps/default/rules.mk3
-rw-r--r--keyboards/laplace/readme.md2
-rw-r--r--keyboards/launchpad/keymaps/default/rules.mk3
-rw-r--r--keyboards/launchpad/readme.md2
-rw-r--r--keyboards/lazydesigners/the50/config.h49
-rw-r--r--keyboards/lazydesigners/the50/info.json67
-rw-r--r--keyboards/lazydesigners/the50/keymaps/default/keymap.c59
-rw-r--r--keyboards/lazydesigners/the50/keymaps/default/readme.md31
-rw-r--r--keyboards/lazydesigners/the50/readme.md17
-rw-r--r--keyboards/lazydesigners/the50/rules.mk52
-rw-r--r--keyboards/lazydesigners/the50/the50.c9
-rw-r--r--keyboards/lazydesigners/the50/the50.h32
-rwxr-xr-xkeyboards/lets_split/keymaps/bbaserdem/rules.mk3
-rwxr-xr-xkeyboards/lets_split/keymaps/bbaserdem_right/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/cpeters1982/rules.mk9
-rw-r--r--keyboards/lets_split/keymaps/fabian/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/heartrobotninja/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/khord/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/mbsurfer/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/mjt/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/mtdjr/rules.mk5
-rw-r--r--keyboards/lets_split/keymaps/pitty/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/poker/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/waples/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/xk/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/zer09/rules.mk3
-rw-r--r--keyboards/lets_split/sockets/config.h9
-rw-r--r--keyboards/lets_split/sockets/rules.mk2
-rw-r--r--keyboards/lets_split_eh/README.md2
-rwxr-xr-xkeyboards/lets_split_eh/keymaps/bbaserdem/rules.mk3
-rw-r--r--keyboards/lets_split_eh/keymaps/resfury/config.h (renamed from keyboards/hadron/ver0/config.h)19
-rw-r--r--keyboards/lets_split_eh/keymaps/resfury/keymap.c189
-rw-r--r--keyboards/lets_split_eh/keymaps/resfury/readme.md7
-rw-r--r--keyboards/lets_split_eh/keymaps/resfury/rules.mk1
-rw-r--r--keyboards/lets_split_eh/keymaps/that_canadian/rules.mk3
-rw-r--r--keyboards/levinson/keymaps/drogglbecher/rules.mk3
-rw-r--r--keyboards/levinson/keymaps/losinggeneration/rules.mk3
-rw-r--r--keyboards/lfkeyboards/lfk65_hs/readme.md2
-rw-r--r--keyboards/lfkeyboards/lfk78/readme.md2
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c2
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c16
-rw-r--r--keyboards/lfkeyboards/lfk87/readme.md2
-rw-r--r--keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c2
-rw-r--r--keyboards/lfkeyboards/mini1800/readme.md2
-rw-r--r--keyboards/lfkeyboards/mini1800/rules.mk6
-rw-r--r--keyboards/lfkeyboards/readme.md2
-rw-r--r--keyboards/lfkeyboards/rules.mk1
-rw-r--r--keyboards/lfkeyboards/smk65/keymaps/default/keymap.c12
-rw-r--r--keyboards/lfkeyboards/smk65/keymaps/default/rules.mk5
-rw-r--r--keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c11
-rw-r--r--keyboards/lfkeyboards/smk65/keymaps/iso/rules.mk5
-rw-r--r--keyboards/lfkeyboards/smk65/readme.md2
-rw-r--r--keyboards/lily58/config.h15
-rwxr-xr-x[-rw-r--r--]keyboards/lily58/i2c.c2
-rwxr-xr-x[-rw-r--r--]keyboards/lily58/i2c.h7
-rw-r--r--keyboards/lily58/keymaps/default/config.h21
-rw-r--r--keyboards/lily58/keymaps/default/keymap.c123
-rw-r--r--keyboards/lily58/keymaps/default/rules.mk27
-rw-r--r--keyboards/lily58/keymaps/yuchi/config.h21
-rw-r--r--keyboards/lily58/keymaps/yuchi/keymap.c125
-rw-r--r--keyboards/lily58/keymaps/yuchi/rules.mk28
-rw-r--r--keyboards/lily58/lib/glcdfont.c243
-rw-r--r--keyboards/lily58/lib/host_led_state_reader.c15
-rw-r--r--keyboards/lily58/lib/keylogger.c45
-rw-r--r--keyboards/lily58/lib/layer_state_reader.c35
-rw-r--r--keyboards/lily58/lib/logo_reader.c11
-rw-r--r--keyboards/lily58/lib/mode_icon_reader.c15
-rw-r--r--keyboards/lily58/lib/rgb_state_reader.c15
-rw-r--r--keyboards/lily58/lib/timelogger.c16
-rw-r--r--keyboards/lily58/lily58.c11
-rw-r--r--keyboards/lily58/lily58.h25
-rw-r--r--keyboards/lily58/readme.md8
-rw-r--r--keyboards/lily58/rev1/config.h14
-rwxr-xr-xkeyboards/lily58/rev1/matrix.c357
-rw-r--r--keyboards/lily58/rev1/rev1.c18
-rw-r--r--keyboards/lily58/rev1/rev1.h4
-rw-r--r--keyboards/lily58/rev1/rules.mk4
-rwxr-xr-xkeyboards/lily58/rev1/serial_config.h4
-rwxr-xr-xkeyboards/lily58/rev1/split_scomm.c91
-rwxr-xr-xkeyboards/lily58/rev1/split_scomm.h24
-rwxr-xr-xkeyboards/lily58/rev1/split_util.c70
-rwxr-xr-xkeyboards/lily58/rev1/split_util.h19
-rw-r--r--keyboards/lily58/rules.mk20
-rwxr-xr-x[-rw-r--r--]keyboards/lily58/serial.c285
-rwxr-xr-x[-rw-r--r--]keyboards/lily58/serial.h22
-rw-r--r--keyboards/lily58/serial_config.h12
-rwxr-xr-xkeyboards/lily58/ssd1306.c344
-rwxr-xr-xkeyboards/lily58/ssd1306.h91
-rw-r--r--keyboards/m10a/keymaps/default/rules.mk3
-rw-r--r--keyboards/m10a/keymaps/gam3cat/rules.mk1
-rw-r--r--keyboards/m10a/readme.md2
-rw-r--r--keyboards/massdrop/alt/keymaps/default/keymap.c4
-rw-r--r--keyboards/massdrop/alt/keymaps/mac/keymap.c4
-rw-r--r--keyboards/massdrop/alt/keymaps/reywood/keymap.c4
-rw-r--r--keyboards/massdrop/alt/matrix.c12
-rw-r--r--keyboards/massdrop/ctrl/keymaps/default/keymap.c4
-rw-r--r--keyboards/massdrop/ctrl/keymaps/mac/keymap.c4
-rw-r--r--keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c939
-rw-r--r--keyboards/massdrop/ctrl/matrix.c12
-rw-r--r--keyboards/maxipad/keymaps/default/keymap.c3
-rw-r--r--keyboards/mechmini/readme.md2
-rw-r--r--keyboards/mechmini/v1/README.md2
-rw-r--r--keyboards/mechmini/v2/README.md2
-rw-r--r--keyboards/mehkee96/readme.md32
-rw-r--r--keyboards/meira/keymaps/cole/keymap.c4
-rw-r--r--keyboards/meira/keymaps/default/keymap.c4
-rw-r--r--keyboards/meira/keymaps/grahampheath/keymap.c4
-rw-r--r--keyboards/meira/keymaps/takmiya/keymap.c4
-rw-r--r--keyboards/meira/meira.c26
-rw-r--r--keyboards/meira/readme.md2
-rw-r--r--keyboards/melody96/readme.md2
-rw-r--r--keyboards/meme/readme.md2
-rw-r--r--keyboards/miniaxe/config.h5
-rw-r--r--keyboards/miniaxe/matrix.c641
-rw-r--r--keyboards/miniaxe/rules.mk3
-rw-r--r--keyboards/minidox/keymaps/that_canadian/rules.mk3
-rw-r--r--keyboards/minidox/keymaps/tw1t611/keymap.c59
-rw-r--r--keyboards/minidox/keymaps/tw1t611/readme.md23
-rw-r--r--keyboards/minidox/keymaps/tw1t611/rules.mk1
-rw-r--r--keyboards/minidox/readme.md2
-rw-r--r--keyboards/mint60/keymaps/default/keymap.c4
-rw-r--r--keyboards/mint60/keymaps/eucalyn/keymap.c4
-rw-r--r--keyboards/mitosis/keymaps/default/keymap.c5
-rw-r--r--keyboards/mitosis/keymaps/mjt/keymap.c3
-rw-r--r--keyboards/mitosis/keymaps/mjt/rules.mk3
-rw-r--r--keyboards/mitosis/readme.md2
-rw-r--r--keyboards/miuni32/keymaps/adam-lee/rules.mk3
-rw-r--r--keyboards/miuni32/keymaps/default/rules.mk3
-rw-r--r--keyboards/miuni32/keymaps/ht_156/rules.mk3
-rw-r--r--keyboards/miuni32/keymaps/ki/rules.mk3
-rw-r--r--keyboards/miuni32/readme.md2
-rw-r--r--keyboards/mxss/keymaps/default/keymap.c5
-rw-r--r--keyboards/mxss/readme.md2
-rw-r--r--keyboards/niu_mini/keymaps/planck/rules.mk3
-rw-r--r--keyboards/niu_mini/keymaps/spacebarracecar/keymap.c4
-rw-r--r--keyboards/niu_mini/keymaps/xtonhasvim/rules.mk5
-rw-r--r--keyboards/niu_mini/readme.md2
-rw-r--r--keyboards/novelpad/README.md (renamed from keyboards/novelpad/readme.md)2
-rwxr-xr-xkeyboards/novelpad/keymaps/0xdec/keymap.c59
-rw-r--r--keyboards/noxary/268/readme.md2
-rw-r--r--keyboards/nyquist/keymaps/bramver/keymap.c9
-rw-r--r--keyboards/nyquist/keymaps/jojiichan/rules.mk3
-rw-r--r--keyboards/nyquist/keymaps/kim-kim/rules.mk3
-rw-r--r--keyboards/nyquist/keymaps/losinggeneration/rules.mk3
-rw-r--r--keyboards/nyquist/keymaps/pitty/rules.mk3
-rw-r--r--keyboards/nyquist/keymaps/shovelpaw/config.h43
-rw-r--r--keyboards/nyquist/keymaps/shovelpaw/keymap.c156
-rw-r--r--keyboards/nyquist/keymaps/shovelpaw/rules.mk3
-rw-r--r--keyboards/nyquist/keymaps/skug/config.h43
-rw-r--r--keyboards/nyquist/keymaps/skug/keymap.c170
-rw-r--r--keyboards/nyquist/keymaps/skug/rules.mk1
-rw-r--r--keyboards/nyquist/readme.md2
-rw-r--r--keyboards/nyquist/rev3/config.h5
-rw-r--r--keyboards/nyquist/rev3/rev3.h29
-rw-r--r--keyboards/nyquist/rev3/rules.mk1
-rw-r--r--keyboards/ok60/readme.md2
-rw-r--r--keyboards/omnikey_blackheart/readme.md2
-rw-r--r--keyboards/org60/keymaps/boardy/rules.mk5
-rwxr-xr-xkeyboards/paladin64/keymaps/default/keymap.c1
-rw-r--r--keyboards/paladin64/readme.md2
-rw-r--r--keyboards/phantom/keymaps/default/rules.mk3
-rw-r--r--keyboards/phantom/keymaps/rgbmod/rules.mk3
-rw-r--r--keyboards/phantom/keymaps/xyverz/keymap.c5
-rw-r--r--keyboards/phantom/readme.md2
-rw-r--r--keyboards/pinky/3/3.c1
-rw-r--r--keyboards/pinky/3/3.h46
-rw-r--r--keyboards/pinky/3/config.h246
-rw-r--r--keyboards/pinky/3/keymaps/default/config.h31
-rw-r--r--keyboards/pinky/3/keymaps/default/keymap.c134
-rw-r--r--keyboards/pinky/3/keymaps/default/rules.mk18
-rw-r--r--keyboards/pinky/3/rules.mk1
-rw-r--r--keyboards/pinky/4/4.c1
-rw-r--r--keyboards/pinky/4/4.h51
-rw-r--r--keyboards/pinky/4/config.h246
-rw-r--r--keyboards/pinky/4/keymaps/default/config.h31
-rw-r--r--keyboards/pinky/4/keymaps/default/keymap.c154
-rw-r--r--keyboards/pinky/4/keymaps/default/rules.mk18
-rw-r--r--keyboards/pinky/4/rules.mk1
-rw-r--r--keyboards/pinky/config.h20
-rw-r--r--keyboards/pinky/pinky.c43
-rw-r--r--keyboards/pinky/pinky.h29
-rw-r--r--keyboards/pinky/readme.md25
-rw-r--r--keyboards/pinky/rules.mk85
-rw-r--r--keyboards/plain60/config.h75
-rw-r--r--keyboards/plain60/info.json79
-rw-r--r--keyboards/plain60/keymaps/default/keymap.c17
-rw-r--r--keyboards/plain60/plain60.c1
-rw-r--r--keyboards/plain60/plain60.h24
-rw-r--r--keyboards/plain60/readme.md14
-rw-r--r--keyboards/plain60/rules.mk66
-rw-r--r--keyboards/planck/keymaps/ab/rules.mk3
-rw-r--r--keyboards/planck/keymaps/ajp10304/rules.mk5
-rw-r--r--keyboards/planck/keymaps/alexey/keymap.c4
-rw-r--r--keyboards/planck/keymaps/alexey/rules.mk3
-rw-r--r--keyboards/planck/keymaps/altgr/rules.mk3
-rw-r--r--keyboards/planck/keymaps/angerthosenear/rules.mk3
-rw-r--r--keyboards/planck/keymaps/austin/rules.mk3
-rw-r--r--keyboards/planck/keymaps/basic/keymap.c4
-rw-r--r--keyboards/planck/keymaps/basic/rules.mk3
-rw-r--r--keyboards/planck/keymaps/bone2planck/keymap.c5
-rw-r--r--keyboards/planck/keymaps/bone2planck/rules.mk3
-rw-r--r--keyboards/planck/keymaps/brandon/rules.mk3
-rw-r--r--keyboards/planck/keymaps/callum/keymap.c3
-rw-r--r--keyboards/planck/keymaps/callum/rules.mk3
-rw-r--r--keyboards/planck/keymaps/cbbrowne/keymap.c5
-rw-r--r--keyboards/planck/keymaps/cbbrowne/rules.mk3
-rw-r--r--keyboards/planck/keymaps/chance/rules.mk3
-rw-r--r--keyboards/planck/keymaps/charlie/rules.mk3
-rw-r--r--keyboards/planck/keymaps/circuit/rules.mk3
-rw-r--r--keyboards/planck/keymaps/coloneljesus/rules.mk3
-rw-r--r--keyboards/planck/keymaps/daniel/rules.mk3
-rw-r--r--keyboards/planck/keymaps/david/rules.mk3
-rw-r--r--keyboards/planck/keymaps/davidrambo/rules.mk3
-rw-r--r--keyboards/planck/keymaps/dc/rules.mk7
-rw-r--r--keyboards/planck/keymaps/dcompact/rules.mk5
-rw-r--r--keyboards/planck/keymaps/dlaroe/rules.mk3
-rw-r--r--keyboards/planck/keymaps/dr_notsokind/rules.mk3
-rw-r--r--keyboards/planck/keymaps/dshields/rules.mk4
-rw-r--r--keyboards/planck/keymaps/dudeofawesome/rules.mk5
-rw-r--r--keyboards/planck/keymaps/dzobert/rules.mk3
-rw-r--r--keyboards/planck/keymaps/espynn/rules.mk3
-rw-r--r--keyboards/planck/keymaps/experimental/rules.mk3
-rw-r--r--keyboards/planck/keymaps/gabriel/keymap.c4
-rw-r--r--keyboards/planck/keymaps/gabriel/rules.mk3
-rw-r--r--keyboards/planck/keymaps/grahampheath/rules.mk4
-rw-r--r--keyboards/planck/keymaps/gunp/rules.mk3
-rw-r--r--keyboards/planck/keymaps/handwired_binaryplease/rules.mk7
-rw-r--r--keyboards/planck/keymaps/hiea/rules.mk3
-rw-r--r--keyboards/planck/keymaps/hieax/rules.mk3
-rwxr-xr-xkeyboards/planck/keymaps/ishtob/rule.mk3
-rw-r--r--keyboards/planck/keymaps/jacob/keymap.c4
-rw-r--r--keyboards/planck/keymaps/jacob/rules.mk3
-rw-r--r--keyboards/planck/keymaps/jirgn/rules.mk3
-rw-r--r--keyboards/planck/keymaps/johannes/keymap.c4
-rw-r--r--keyboards/planck/keymaps/johannes/rules.mk3
-rw-r--r--keyboards/planck/keymaps/khord/rules.mk3
-rw-r--r--keyboards/planck/keymaps/kmontag42/rules.mk3
-rw-r--r--keyboards/planck/keymaps/kyle/rules.mk3
-rw-r--r--keyboards/planck/keymaps/lae3/rules.mk3
-rw-r--r--keyboards/planck/keymaps/lukas/keymap.c4
-rw-r--r--keyboards/planck/keymaps/lukas/rules.mk3
-rw-r--r--keyboards/planck/keymaps/luke/keymap.c4
-rw-r--r--keyboards/planck/keymaps/luke/rules.mk3
-rw-r--r--keyboards/planck/keymaps/max/rules.mk3
-rw-r--r--keyboards/planck/keymaps/mikethetiger/config.h39
-rw-r--r--keyboards/planck/keymaps/mikethetiger/keymap.c346
-rw-r--r--keyboards/planck/keymaps/mikethetiger/readme.md2
-rw-r--r--keyboards/planck/keymaps/mikethetiger/rules.mk1
-rw-r--r--keyboards/planck/keymaps/mitch/rules.mk3
-rw-r--r--keyboards/planck/keymaps/mjt/rules.mk3
-rw-r--r--keyboards/planck/keymaps/mjtnumsym/rules.mk3
-rw-r--r--keyboards/planck/keymaps/muzfuz/config.h40
-rw-r--r--keyboards/planck/keymaps/muzfuz/keymap.c297
-rw-r--r--keyboards/planck/keymaps/muzfuz/readme.md8
-rw-r--r--keyboards/planck/keymaps/muzfuz/rules.mk1
-rw-r--r--keyboards/planck/keymaps/myoung34/rules.mk5
-rw-r--r--keyboards/planck/keymaps/neo2planck/keymap.c4
-rw-r--r--keyboards/planck/keymaps/neo2planck/rules.mk3
-rw-r--r--keyboards/planck/keymaps/not-quite-neo/rules.mk3
-rw-r--r--keyboards/planck/keymaps/originerd/rules.mk3
-rwxr-xr-xkeyboards/planck/keymaps/paget/rules.mk3
-rw-r--r--keyboards/planck/keymaps/pete/keymap.c3
-rw-r--r--keyboards/planck/keymaps/pete/rules.mk3
-rw-r--r--keyboards/planck/keymaps/phreed/readme.md4
-rw-r--r--keyboards/planck/keymaps/phreed/rules.mk3
-rw-r--r--keyboards/planck/keymaps/piemod/rules.mk3
-rw-r--r--keyboards/planck/keymaps/priyadi/rules.mk3
-rw-r--r--keyboards/planck/keymaps/rai-suta/keymap.c1
-rw-r--r--keyboards/planck/keymaps/rai-suta/rules.mk3
-rw-r--r--keyboards/planck/keymaps/sdothum/rules.mk3
-rw-r--r--keyboards/planck/keymaps/sebas/keymap.c90
-rw-r--r--keyboards/planck/keymaps/sebas/readme.md3
-rw-r--r--keyboards/planck/keymaps/smt/rules.mk3
-rw-r--r--keyboards/planck/keymaps/spacebarracecar/keymap.c4
-rw-r--r--keyboards/planck/keymaps/steno/rules.mk5
-rw-r--r--keyboards/planck/keymaps/tak3over/keymap.c4
-rw-r--r--keyboards/planck/keymaps/tehwalris/rules.mk3
-rw-r--r--keyboards/planck/keymaps/tong92/rules.mk3
-rw-r--r--keyboards/planck/keymaps/unicode/keymap.c4
-rw-r--r--keyboards/planck/keymaps/unicode/rules.mk3
-rw-r--r--keyboards/planck/keymaps/vifon/rules.mk3
-rw-r--r--keyboards/planck/keymaps/yale/keymap.c4
-rw-r--r--keyboards/planck/keymaps/yale/rules.mk3
-rw-r--r--keyboards/planck/keymaps/yang/keymap.c10
-rw-r--r--keyboards/planck/keymaps/yang/rules.mk3
-rw-r--r--keyboards/planck/keymaps/zach/rules.mk3
-rw-r--r--keyboards/planck/keymaps/zach/zach_common_functions.c1
-rwxr-xr-xkeyboards/planck/keymaps/zrichard/rules.mk3
-rw-r--r--keyboards/planck/rev1/config.h3
-rw-r--r--keyboards/planck/rev1/rules.mk1
-rw-r--r--keyboards/planck/rev2/config.h3
-rw-r--r--keyboards/planck/rev2/rules.mk1
-rw-r--r--keyboards/planck/rev3/config.h7
-rw-r--r--keyboards/planck/rev4/config.h7
-rw-r--r--keyboards/planck/rev5/config.h7
-rw-r--r--keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.c126
-rw-r--r--keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.mk5
-rw-r--r--keyboards/planck/rev6/rules.mk35
-rw-r--r--keyboards/planck/rules.mk33
-rw-r--r--keyboards/playkbtw/ca66/readme.md2
-rw-r--r--keyboards/preonic/keymaps/0xdec/rules.mk3
-rw-r--r--keyboards/preonic/keymaps/CMD-Preonic/keymap.c4
-rw-r--r--keyboards/preonic/keymaps/bucktooth/rules.mk3
-rw-r--r--keyboards/preonic/keymaps/dlaroe/rules.mk3
-rw-r--r--keyboards/preonic/keymaps/jacwib/rules.mk3
-rw-r--r--keyboards/preonic/keymaps/kinesis/rules.mk3
-rw-r--r--keyboards/preonic/keymaps/nikchi/rules.mk3
-rw-r--r--keyboards/preonic/keymaps/smt/rules.mk3
-rw-r--r--keyboards/preonic/keymaps/that_canadian/Makefile3
-rw-r--r--keyboards/preonic/keymaps/zach/rules.mk3
-rw-r--r--keyboards/preonic/keymaps/zach/zach_common_functions.c1
-rw-r--r--keyboards/preonic/readme.md2
-rw-r--r--keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h21
-rw-r--r--keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c186
-rw-r--r--keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md5
-rw-r--r--keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk20
-rw-r--r--keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c88
-rw-r--r--keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.h1187
-rw-r--r--keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.mk5
-rw-r--r--keyboards/proton_c/bootloader_defs.h7
-rw-r--r--keyboards/proton_c/config.h1
-rw-r--r--keyboards/proton_c/rules.mk36
-rw-r--r--keyboards/quefrency/readme.md2
-rw-r--r--keyboards/qwertyydox/readme.md2
-rw-r--r--keyboards/rama/m10_b/readme.md2
-rw-r--r--keyboards/readme.md1
-rw-r--r--keyboards/redox/keymaps/default/rules.mk3
-rw-r--r--keyboards/redox/keymaps/italian/rules.mk3
-rw-r--r--keyboards/rorschach/readme.md2
-rw-r--r--keyboards/s60_x/keymaps/ansi_qwertz/rules.mk3
-rw-r--r--keyboards/s60_x/keymaps/custom/keymap.c2
-rw-r--r--keyboards/s60_x/keymaps/plain/keymap.c1
-rw-r--r--keyboards/s60_x/readme.md2
-rw-r--r--keyboards/s65_plus/info.json86
-rw-r--r--keyboards/s65_plus/keymaps/default/keymap.c71
-rw-r--r--keyboards/s65_plus/keymaps/iso/keymap.c56
-rw-r--r--keyboards/s65_plus/keymaps/iso/readme.md3
-rw-r--r--keyboards/s65_plus/readme.md4
-rw-r--r--keyboards/s65_plus/s65_plus.h15
-rw-r--r--keyboards/s65_x/config.h4
-rw-r--r--keyboards/s65_x/info.json157
-rw-r--r--keyboards/s65_x/keymaps/default/keymap.c155
-rw-r--r--keyboards/s65_x/keymaps/iso/keymap.c155
-rw-r--r--keyboards/s65_x/keymaps/kelorean/keymap.c14
-rw-r--r--keyboards/s65_x/keymaps/nall/keymap.c10
-rw-r--r--keyboards/s65_x/keymaps/s65plus/keymap.c30
-rw-r--r--keyboards/s65_x/keymaps/s65plus/readme.md5
-rw-r--r--keyboards/s65_x/keymaps/smt/keymap.c16
-rw-r--r--keyboards/s65_x/readme.md4
-rw-r--r--keyboards/s65_x/rules.mk2
-rw-r--r--keyboards/s65_x/s65_x.h90
-rw-r--r--keyboards/satan/keymaps/admiralStrokers/keymap.c7
-rw-r--r--keyboards/satan/keymaps/admiralStrokers/rules.mk4
-rw-r--r--keyboards/satan/keymaps/ben_iso/rules.mk3
-rw-r--r--keyboards/satan/keymaps/bri/keymap.c35
-rw-r--r--keyboards/satan/keymaps/chaser/rules.mk3
-rw-r--r--keyboards/satan/keymaps/colemak/rules.mk3
-rw-r--r--keyboards/satan/keymaps/default/rules.mk3
-rw-r--r--keyboards/satan/keymaps/dende_iso/rules.mk3
-rw-r--r--keyboards/satan/keymaps/denolfe/rules.mk3
-rw-r--r--keyboards/satan/keymaps/dkrieger/rules.mk3
-rw-r--r--keyboards/satan/keymaps/fakb/rules.mk3
-rw-r--r--keyboards/satan/keymaps/isoHHKB/rules.mk3
-rw-r--r--keyboards/satan/keymaps/iso_split_rshift/rules.mk3
-rw-r--r--keyboards/satan/keymaps/lepa/rules.mk3
-rw-r--r--keyboards/satan/keymaps/midi/rules.mk3
-rw-r--r--keyboards/satan/keymaps/sethbc/rules.mk3
-rw-r--r--keyboards/satan/keymaps/smt/rules.mk3
-rw-r--r--keyboards/satan/keymaps/unxmaal/rules.mk3
-rw-r--r--keyboards/satan/readme.md2
-rw-r--r--keyboards/scrabblepad/keymaps/default/keymap.c4
-rw-r--r--keyboards/scrabblepad/readme.md2
-rw-r--r--keyboards/singa/readme.md2
-rw-r--r--keyboards/sixkeyboard/keymaps/default/keymap.c6
-rw-r--r--keyboards/sixkeyboard/readme.md2
-rw-r--r--keyboards/sixshooter/readme.md2
-rw-r--r--keyboards/snagpad/config.h26
-rw-r--r--keyboards/snagpad/info.json9
-rw-r--r--keyboards/snagpad/keymaps/via/keymap.c76
-rw-r--r--keyboards/snagpad/keymaps/via/rules.mk76
-rw-r--r--keyboards/speedo/keymaps/default/keymap.c4
-rw-r--r--keyboards/speedo/readme.md2
-rw-r--r--keyboards/staryu/readme.md2
-rw-r--r--keyboards/sx60/readme.md2
-rw-r--r--keyboards/tada68/keymaps/ardakilic/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/default/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/fakb/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/fezzant/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/iso-nor/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/iso-uk/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/isoish/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/mattdicarlo/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/mlechner/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/mtdjr/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/pascamel/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/raylas/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/rgb/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/rys/keymap.c35
-rw-r--r--keyboards/tada68/keymaps/rys/readme.md2
-rw-r--r--keyboards/tada68/keymaps/rys/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/stephengrier/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/trashcat/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/tshack/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/unix/rules.mk3
-rw-r--r--keyboards/tada68/keymaps/wamsm_tada/rules.mk3
-rw-r--r--keyboards/tanuki/readme.md2
-rw-r--r--keyboards/tanuki/rules.mk3
-rw-r--r--keyboards/telophase/readme.md2
-rw-r--r--keyboards/tetris/readme.md2
-rw-r--r--keyboards/the_ruler/keymaps/default/rules.mk3
-rw-r--r--keyboards/the_ruler/readme.md2
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/0010/keymap.c4
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk3
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c4
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk3
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/default/keymap.c3
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk3
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/hhkbanana/keymap.c3
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c3
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c3
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/kamon/keymap.c4
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk3
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/nic/keymap.c3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c2
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/belak/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/core/keymap.c3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/core/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/default/keymap.c4
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/default/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk3
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c4
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk3
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/flipphone/keymap.c4
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk3
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk3
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/mjt/keymap.c4
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk3
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singles/keymap.c4
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk3
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/keymap.c4
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk3
-rw-r--r--keyboards/tkc1800/README.md11
-rw-r--r--keyboards/tkc1800/config.h5
-rw-r--r--keyboards/tkc1800/info.json648
-rw-r--r--keyboards/tkc1800/keymaps/default/config.h7
-rw-r--r--keyboards/tkc1800/keymaps/default/keymap.c118
-rw-r--r--keyboards/tkc1800/keymaps/smt/config.h7
-rw-r--r--keyboards/tkc1800/keymaps/smt/keymap.c135
-rw-r--r--keyboards/tkc1800/keymaps/wkl/config.h7
-rw-r--r--keyboards/tkc1800/keymaps/wkl/keymap.c101
-rw-r--r--keyboards/tkc1800/keymaps/yanfali/config.h7
-rw-r--r--keyboards/tkc1800/keymaps/yanfali/keymap.c75
-rw-r--r--keyboards/tkc1800/rules.mk26
-rw-r--r--keyboards/tkc1800/tkc1800.h23
-rw-r--r--keyboards/tmo50/config.h208
-rw-r--r--keyboards/tmo50/info.json13
-rw-r--r--keyboards/tmo50/keymaps/default/keymap.c51
-rw-r--r--keyboards/tmo50/readme.md15
-rw-r--r--keyboards/tmo50/rules.mk63
-rw-r--r--keyboards/tmo50/tmo50.c43
-rw-r--r--keyboards/tmo50/tmo50.h40
-rw-r--r--keyboards/tokyo60/readme.md2
-rw-r--r--keyboards/touchpad/config.h (renamed from keyboards/clueboard/66/config.h)29
-rw-r--r--keyboards/touchpad/keymaps/default/keymap.c30
-rw-r--r--keyboards/touchpad/matrix.c291
-rw-r--r--keyboards/touchpad/readme.md15
-rw-r--r--keyboards/touchpad/rules.mk67
-rw-r--r--keyboards/touchpad/touchpad.c1
-rw-r--r--keyboards/touchpad/touchpad.h2
-rw-r--r--keyboards/tragicforce68/README.md2
-rw-r--r--keyboards/uk78/readme.md2
-rw-r--r--keyboards/v60_type_r/keymaps/default/keymap.c7
-rw-r--r--keyboards/v60_type_r/keymaps/vimouse/keymap.c3
-rw-r--r--keyboards/v60_type_r/readme.md2
-rw-r--r--keyboards/v60_type_r/rules.mk15
-rw-r--r--keyboards/vinta/readme.md2
-rw-r--r--keyboards/vision_division/keymaps/default/rules.mk3
-rw-r--r--keyboards/vision_division/readme.md2
-rw-r--r--keyboards/viterbi/readme.md2
-rw-r--r--keyboards/wavelet/readme.md2
-rwxr-xr-xkeyboards/wheatfield/blocked65/blocked65.c1
-rwxr-xr-xkeyboards/wheatfield/blocked65/blocked65.h20
-rwxr-xr-xkeyboards/wheatfield/blocked65/config.h53
-rw-r--r--keyboards/wheatfield/blocked65/info.json13
-rw-r--r--keyboards/wheatfield/blocked65/keymaps/default/keymap.c25
-rw-r--r--keyboards/wheatfield/blocked65/keymaps/walker/config.h9
-rw-r--r--keyboards/wheatfield/blocked65/keymaps/walker/keymap.c27
-rwxr-xr-xkeyboards/wheatfield/blocked65/rules.mk59
-rw-r--r--keyboards/whitefox/keymaps/dudeofawesome/keymap.c4
-rw-r--r--keyboards/whitefox/keymaps/jetpacktuxedo/rules.mk5
-rw-r--r--keyboards/whitefox/keymaps/kim-kim/keymap.c21
-rw-r--r--keyboards/whitefox/keymaps/konstantin/config.h24
-rw-r--r--keyboards/whitefox/keymaps/konstantin/keymap.c141
-rw-r--r--keyboards/whitefox/keymaps/konstantin/rules.mk11
-rw-r--r--keyboards/whitefox/keymaps/matt3o/keymap.c21
-rw-r--r--keyboards/whitefox/readme.md2
-rw-r--r--keyboards/xd60/readme.md2
-rw-r--r--keyboards/xd75/keymaps/adi/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/adi/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/atomic_style/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/atomic_style/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/bbaserdem/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/boy_314/keymap.c6
-rw-r--r--keyboards/xd75/keymaps/bramver/keymap.c2
-rw-r--r--keyboards/xd75/keymaps/c4software_bepo/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/cbbrowne/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/default/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/default/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/dyn_macro_tap_dance/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/dyn_macro_tap_dance/rules.mk5
-rw-r--r--keyboards/xd75/keymaps/emilyh/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/emilyh/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/fabian/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/french/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/french/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/germanized/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/kim-kim-xd73/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/kim-kim-xd73/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/kim-kim/keymap.c4
-rw-r--r--keyboards/xd75/keymaps/kim-kim/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/kloki/keymap.c3
-rw-r--r--keyboards/xd75/keymaps/kloki/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/markus/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/mtdjr/rules.mk5
-rw-r--r--keyboards/xd75/keymaps/skewwhiffy/keymap.c8
-rw-r--r--keyboards/xd75/keymaps/skewwhiffy/rules.mk3
-rw-r--r--keyboards/xd75/keymaps/tdl-jturner/rules.mk5
-rw-r--r--keyboards/ymd75/README.md2
-rw-r--r--keyboards/ymd75/rules.mk4
-rw-r--r--keyboards/ymd96/keymaps/epx/keymap.c87
-rw-r--r--keyboards/zeal60/rgb_backlight.c285
-rw-r--r--keyboards/zen/keymaps/default/rules.mk3
-rw-r--r--keyboards/zen/keymaps/jwlawrence/rules.mk3
-rw-r--r--keyboards/zen/keymaps/xyverz/rules.mk3
-rw-r--r--keyboards/zen/readme.md2
-rw-r--r--keyboards/zinc/keymaps/monks/rules.mk5
-rw-r--r--keyboards/zlant/readme.md2
-rw-r--r--layouts/community/ergodox/ab/keymap.c3
-rw-r--r--layouts/community/ergodox/alphadox/keymap.c3
-rw-r--r--layouts/community/ergodox/bepo_csa/keymap.c3
-rw-r--r--layouts/community/ergodox/berfarah/rules.mk3
-rw-r--r--layouts/community/ergodox/colemak_code_friendly/keymap.c335
-rw-r--r--layouts/community/ergodox/colemak_code_friendly/readme.md106
-rw-r--r--layouts/community/ergodox/colemak_code_friendly/rules.mk7
-rw-r--r--layouts/community/ergodox/dave/keymap.c5
-rw-r--r--layouts/community/ergodox/erez_experimental/keymap.c6
-rw-r--r--layouts/community/ergodox/german-manuneo/compile_keymap.py3
-rw-r--r--layouts/community/ergodox/german-manuneo/keymap.c2
-rw-r--r--layouts/community/ergodox/neo2_on_qwertz_hardware/keymap.c2
-rw-r--r--layouts/community/ergodox/osx_de/keymap.c4
-rw-r--r--layouts/community/ergodox/osx_de_adnw_koy/keymap.c4
-rw-r--r--layouts/community/ergodox/osx_de_experimental/keymap.c4
-rw-r--r--layouts/community/ergodox/reset_eeprom/keymap.c4
-rw-r--r--layouts/community/ergodox/robot_test_layout/keymap.c6
-rw-r--r--layouts/community/ergodox/romanzolotarev-norman-osx/keymap.c3
-rw-r--r--layouts/community/ergodox/romanzolotarev-norman-qwerty-osx/keymap.c3
-rw-r--r--layouts/community/ergodox/sethbc/keymap.c3
-rw-r--r--layouts/community/ergodox/software_neo2/keymap.c4
-rw-r--r--layouts/community/ergodox/supercoder/keymap.c3
-rw-r--r--layouts/community/ergodox/tm2030/keymap.c3
-rw-r--r--layouts/community/ergodox/xyverz/keymap.c4
-rw-r--r--layouts/community/ergodox/yoruian/keymap.c3
-rw-r--r--layouts/community/ortho_4x12/bakingpy/config.h11
-rw-r--r--layouts/community/ortho_4x12/bakingpy/keymap.c77
-rw-r--r--layouts/community/ortho_4x12/grahampheath/rules.mk3
-rw-r--r--layouts/community/ortho_4x12/xyverz/rules.mk3
-rw-r--r--layouts/community/ortho_5x12/rs/config.h35
-rw-r--r--layouts/community/ortho_5x12/rs/karabiner.json154
-rw-r--r--layouts/community/ortho_5x12/rs/keymap.c63
-rw-r--r--layouts/community/ortho_5x12/rs/readme.md17
-rw-r--r--layouts/default/65_iso/default_65_iso/keymap.c12
-rw-r--r--layouts/default/65_iso/layout.json5
-rw-r--r--layouts/default/65_iso/readme.md5
-rw-r--r--layouts/default/66_iso/default_60_iso/keymap.c11
-rw-r--r--layouts/default/66_iso/default_66_iso/keymap.c11
-rw-r--r--quantum/audio/musical_notes.h4
-rw-r--r--quantum/config_common.h43
-rw-r--r--quantum/debounce.c52
-rw-r--r--quantum/debounce.h11
-rw-r--r--quantum/keymap_common.c2
-rw-r--r--quantum/matrix.c79
-rw-r--r--quantum/mcu_selection.mk70
-rw-r--r--quantum/process_keycode/process_combo.c18
-rw-r--r--quantum/process_keycode/process_combo.h1
-rw-r--r--quantum/process_keycode/process_terminal.c6
-rw-r--r--quantum/process_keycode/process_unicode_common.c2
-rw-r--r--quantum/process_keycode/process_unicodemap.c33
-rw-r--r--quantum/process_keycode/process_unicodemap.h4
-rw-r--r--quantum/quantum.c5
-rw-r--r--quantum/quantum.h3
-rw-r--r--quantum/quantum_keycodes.h72
-rw-r--r--quantum/split_common/i2c.h5
-rw-r--r--quantum/split_common/matrix.c639
-rw-r--r--quantum/split_common/matrix.h30
-rw-r--r--quantum/split_common/serial.h5
-rw-r--r--quantum/split_common/split_flags.h9
-rw-r--r--quantum/split_common/split_util.c152
-rw-r--r--quantum/split_common/split_util.h15
-rw-r--r--quantum/split_common/transport.c224
-rw-r--r--quantum/split_common/transport.h10
-rw-r--r--quantum/stm32/chconf.h (renamed from keyboards/proton_c/chconf.h)0
-rw-r--r--quantum/stm32/halconf.h (renamed from keyboards/planck/rev6/halconf.h)0
-rw-r--r--quantum/stm32/mcuconf.h (renamed from keyboards/planck/rev6/mcuconf.h)0
-rw-r--r--quantum/stm32/proton_c.mk44
-rw-r--r--quantum/template/avr/config.h2
-rw-r--r--quantum/template/avr/template.c2
-rw-r--r--quantum/template/base/keymaps/default/config.h2
-rw-r--r--quantum/template/base/keymaps/default/keymap.c2
-rw-r--r--quantum/template/base/template.h (renamed from quantum/template/ps2avrgb/template.h)7
-rw-r--r--quantum/template/ps2avrgb/rules.mk2
-rw-r--r--quantum/template/ps2avrgb/template.c2
-rw-r--r--tests/basic/keymap.c3
-rw-r--r--tmk_core/common/action.c10
-rw-r--r--tmk_core/common/action.h1
-rw-r--r--tmk_core/common/action_layer.c303
-rw-r--r--tmk_core/common/action_util.c4
-rw-r--r--tmk_core/common/arm_atsam/timer.c20
-rwxr-xr-xtmk_core/common/chibios/eeprom_stm32.c710
-rwxr-xr-xtmk_core/common/chibios/eeprom_stm32.h68
-rwxr-xr-xtmk_core/common/chibios/flash_stm32.c15
-rwxr-xr-xtmk_core/common/chibios/flash_stm32.h1
-rw-r--r--tmk_core/common/eeconfig.c4
-rw-r--r--tmk_core/common/eeconfig.h21
-rw-r--r--tmk_core/common/eeprom.h1
-rw-r--r--tmk_core/common/host.h11
-rw-r--r--tmk_core/common/keyboard.h2
-rw-r--r--tmk_core/common/keycode.h20
-rw-r--r--tmk_core/common/progmem.h6
-rw-r--r--tmk_core/common/report.h8
-rw-r--r--tmk_core/common/wait.h4
-rw-r--r--tmk_core/protocol/arm_atsam/arm_atsam_protocol.h2
-rw-r--r--tmk_core/protocol/arm_atsam/clks.c90
-rw-r--r--tmk_core/protocol/arm_atsam/clks.h5
-rw-r--r--tmk_core/protocol/arm_atsam/i2c_master.c4
-rw-r--r--tmk_core/protocol/arm_atsam/led_matrix.c26
-rw-r--r--tmk_core/protocol/arm_atsam/led_matrix.h2
-rw-r--r--tmk_core/protocol/arm_atsam/main_arm_atsam.c18
-rw-r--r--tmk_core/protocol/arm_atsam/usb/compiler.h4
-rw-r--r--tmk_core/protocol/arm_atsam/usb/udi_cdc.c8
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb2422.c15
-rw-r--r--tmk_core/protocol/chibios/main.c2
-rw-r--r--tmk_core/protocol/lufa/lufa.c17
-rw-r--r--users/konstantin/config.h24
-rw-r--r--users/konstantin/konstantin.c77
-rw-r--r--users/konstantin/konstantin.h50
-rw-r--r--users/konstantin/rules.mk16
-rw-r--r--users/konstantin/tap_dance.c93
-rw-r--r--users/konstantin/tap_dance.h25
-rw-r--r--users/konstantin/unicode.h11
-rw-r--r--users/losinggeneration/rules.mk3
-rw-r--r--users/spacebarracecar/config.h2
-rw-r--r--users/spacebarracecar/spacebarracecar.c6
-rw-r--r--users/spacebarracecar/spacebarracecar.h2
1320 files changed, 28757 insertions, 13415 deletions
diff --git a/Vagrantfile b/Vagrantfile
index 9c414b2bcb..5aa56bf2a7 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -2,8 +2,11 @@
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
- # VMware/Virtualbox 64 bit
- config.vm.box = "phusion/ubuntu-14.04-amd64"
+ # define a name instead of just 'default'
+ config.vm.define "qmk_firmware"
+
+ # VMware/Virtualbox ( and also Hyperv/Parallels) 64 bit
+ config.vm.box = "bento/ubuntu-16.04"
# This section allows you to customize the Virtualbox VM
# settings, ie showing the GUI or upping the memory
@@ -15,13 +18,16 @@ Vagrant.configure(2) do |config|
# your Teensy via the VM rather than your host OS
#vb.customize ['modifyvm', :id, '--usb', 'on']
#vb.customize ['usbfilter', 'add', '0',
- # '--target', :id,
- # '--name', 'teensy',
- # '--vendorid', '0x16c0',
- # '--productid','0x0478'
- # ]
+ # '--target', :id,
+ # '--name', 'teensy',
+ # '--vendorid', '0x16c0',
+ # '--productid','0x0478'
+ # ]
# Customize the amount of memory on the VM:
vb.memory = "512"
+ # Uncomment the below lines if you have time sync
+ # issues with make and incremental builds
+ #vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end
# This section allows you to customize the VMware VM
@@ -56,19 +62,18 @@ Vagrant.configure(2) do |config|
# This script ensures the required packages for AVR programming are installed
# It also ensures the system always gets the latest updates when powered on
# If this causes issues you can run a 'vagrant destroy' and then
- # add a # before ,args: and run 'vagrant up' to get a working
+ # add a # before ,run: (or change "always" to "once") and run 'vagrant up' to get a working
# non-updated box and then attempt to troubleshoot or open a Github issue
-
- config.vm.provision "shell", run: "always", path: "./util/qmk_install.sh", args: "-update"
+ config.vm.provision "shell", inline: "/bin/sh -c 'yes | /vagrant/util/qmk_install.sh'", run: "always"
config.vm.post_up_message = <<-EOT
Log into the VM using 'vagrant ssh'. QMK directory synchronized with host is
located at /vagrant
- To compile the .hex files use make command inside this directory.
+ To compile the .hex files use make command inside this directory, e.g.
+ cd /vagrant
+ make <keyboard>:default
- QMK's make format recently changed to use folder locations and colons:
- make project_folder:keymap[:target]
Examples:
make planck/rev4:default:dfu
make planck:default
diff --git a/build_keyboard.mk b/build_keyboard.mk
index b639b92d3e..1d60f3ad79 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -16,6 +16,7 @@ include common.mk
KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
+STM32_PATH := quantum/stm32
# Force expansion
TARGET := $(TARGET)
@@ -72,6 +73,7 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
endif
+
# Pull in rules.mk files from all our subfolders
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
include $(KEYBOARD_PATH_5)/rules.mk
@@ -89,6 +91,58 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
include $(KEYBOARD_PATH_1)/rules.mk
endif
+
+MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
+
+ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_5)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_4)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_3)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_2)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_1)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
+else ifneq ($(LAYOUTS),)
+ include build_layout.mk
+else
+ $(error Could not find keymap)
+ # this state should never be reached
+endif
+
+ifeq ($(strip $(CTPC)), yes)
+ CONVERT_TO_PROTON_C=yes
+endif
+
+ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes)
+ TARGET := $(TARGET)_proton_c
+ include $(STM32_PATH)/proton_c.mk
+ OPT_DEFS += -DCONVERT_TO_PROTON_C
+endif
+
+include quantum/mcu_selection.mk
+
+ifdef MCU_FAMILY
+ OPT_DEFS += -DQMK_STM32
+ KEYBOARD_PATHS += $(STM32_PATH)
+endif
+
+
# Find all the C source files to be compiled in subfolders.
KEYBOARD_SRC :=
@@ -227,39 +281,6 @@ PROJECT_DEFS := $(OPT_DEFS)
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
PROJECT_CONFIG := $(CONFIG_H)
-MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
-MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
-
-ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_5)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_4)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_3)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_2)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_1)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
-else ifneq ($(LAYOUTS),)
- include build_layout.mk
-else
- $(error Could not find keymap)
- # this state should never be reached
-endif
-
# Userspace setup and definitions
ifeq ("$(USER_NAME)","")
USER_NAME := $(KEYMAP)
diff --git a/common_features.mk b/common_features.mk
index c86e8bbfe3..8c3361732c 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -254,6 +254,7 @@ QUANTUM_SRC:= \
$(QUANTUM_DIR)/keymap_common.c \
$(QUANTUM_DIR)/keycode_config.c
+# Include the standard or split matrix code if needed
ifneq ($(strip $(CUSTOM_MATRIX)), yes)
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/matrix.c
@@ -262,11 +263,25 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
endif
endif
+# Include the standard debounce code if needed
+ifneq ($(strip $(CUSTOM_DEBOUNCE)), yes)
+ QUANTUM_SRC += $(QUANTUM_DIR)/debounce.c
+endif
+
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
OPT_DEFS += -DSPLIT_KEYBOARD
+
+ # Include files used by all split keyboards
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
- $(QUANTUM_DIR)/split_common/split_util.c
- QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/i2c.c
- QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/serial.c
+ $(QUANTUM_DIR)/split_common/split_util.c
+
+ # Determine which (if any) transport files are required
+ ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
+ QUANTUM_SRC += $(QUANTUM_DIR)/split_common/transport.c
+ # Functions added via QUANTUM_LIB_SRC are only included in the final binary if they're called.
+ # Unused functions are pruned away, which is why we can add both drivers here without bloat.
+ QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/i2c.c \
+ $(QUANTUM_DIR)/split_common/serial.c
+ endif
COMMON_VPATH += $(QUANTUM_PATH)/split_common
endif
diff --git a/docs/_sidebar.md b/docs/_sidebar.md
deleted file mode 100644
index b209c5e0b8..0000000000
--- a/docs/_sidebar.md
+++ /dev/null
@@ -1,100 +0,0 @@
-* [Complete Newbs Guide](newbs.md)
- * [Getting Started](newbs_getting_started.md)
- * [Building Your First Firmware](newbs_building_firmware.md)
- * [Flashing Firmware](newbs_flashing.md)
- * [Testing and Debugging](newbs_testing_debugging.md)
- * [Best Practices](newbs_best_practices.md)
- * [Learning Resources](newbs_learn_more_resources.md)
-
-* [QMK Basics](README.md)
- * [QMK Introduction](getting_started_introduction.md)
- * [Contributing to QMK](contributing.md)
- * [How to Use Github](getting_started_github.md)
- * [Getting Help](getting_started_getting_help.md)
-
-* [FAQ](faq.md)
- * [General FAQ](faq_general.md)
- * [Build/Compile QMK](faq_build.md)
- * [Debugging/Troubleshooting QMK](faq_debug.md)
- * [Keymap](faq_keymap.md)
-
-* Detailed Guides
- * [Install Build Tools](getting_started_build_tools.md)
- * [Vagrant Guide](getting_started_vagrant.md)
- * [Build/Compile Instructions](getting_started_make_guide.md)
- * [Flashing Firmware](flashing.md)
- * [Customizing Functionality](custom_quantum_functions.md)
- * [Keymap Overview](keymap.md)
-
-* [Hardware](hardware.md)
- * [AVR Processors](hardware_avr.md)
- * [Drivers](hardware_drivers.md)
-
-* Reference
- * [Keyboard Guidelines](hardware_keyboard_guidelines.md)
- * [Config Options](config_options.md)
- * [Keycodes](keycodes.md)
- * [Documentation Best Practices](documentation_best_practices.md)
- * [Documentation Templates](documentation_templates.md)
- * [Glossary](reference_glossary.md)
- * [Unit Testing](unit_testing.md)
- * [Useful Functions](ref_functions.md)
- * [Configurator Support](reference_configurator_support.md)
-
-* [Features](features.md)
- * [Basic Keycodes](keycodes_basic.md)
- * [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
- * [Quantum Keycodes](quantum_keycodes.md)
- * [Advanced Keycodes](feature_advanced_keycodes.md)
- * [Audio](feature_audio.md)
- * [Auto Shift](feature_auto_shift.md)
- * [Backlight](feature_backlight.md)
- * [Bluetooth](feature_bluetooth.md)
- * [Bootmagic](feature_bootmagic.md)
- * [Combos](feature_combo)
- * [Command](feature_command.md)
- * [Dynamic Macros](feature_dynamic_macros.md)
- * [Encoders](feature_encoders.md)
- * [Grave Escape](feature_grave_esc.md)
- * [Key Lock](feature_key_lock.md)
- * [Layouts](feature_layouts.md)
- * [Leader Key](feature_leader_key.md)
- * [Macros](feature_macros.md)
- * [Mouse Keys](feature_mouse_keys.md)
- * [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys)
- * [Pointing Device](feature_pointing_device.md)
- * [PS/2 Mouse](feature_ps2_mouse.md)
- * [RGB Lighting](feature_rgblight.md)
- * [RGB Matrix](feature_rgb_matrix.md)
- * [Space Cadet Shift](feature_space_cadet_shift.md)
- * [Space Cadet Shift Enter](feature_space_cadet_shift_enter.md)
- * [Stenography](feature_stenography.md)
- * [Swap Hands](feature_swap_hands.md)
- * [Tap Dance](feature_tap_dance.md)
- * [Terminal](feature_terminal.md)
- * [Thermal Printer](feature_thermal_printer.md)
- * [Unicode](feature_unicode.md)
- * [Userspace](feature_userspace.md)
-
-* For Makers and Modders
- * [Hand Wiring Guide](hand_wire.md)
- * [ISP Flashing Guide](isp_flashing_guide.md)
- * [ARM Debugging Guide](arm_debugging.md)
- * [I2C Driver](i2c_driver.md)
-
-* For a Deeper Understanding
- * [How Keyboards Work](how_keyboards_work.md)
- * [Understanding QMK](understanding_qmk.md)
-
-* Other Topics
- * [Using Eclipse with QMK](eclipse.md)
- * [Support](support.md)
-
-* QMK Internals (In Progress)
- * [Defines](internals_defines.md)
- * [Input Callback Reg](internals_input_callback_reg.md)
- * [Midi Device](internals_midi_device.md)
- * [Midi Device Setup Process](internals_midi_device_setup_process.md)
- * [Midi Util](internals_midi_util.md)
- * [Send Functions](internals_send_functions.md)
- * [Sysex Tools](internals_sysex_tools.md)
diff --git a/docs/_summary.md b/docs/_summary.md
index b209c5e0b8..c467a7231a 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -81,6 +81,8 @@
* [ISP Flashing Guide](isp_flashing_guide.md)
* [ARM Debugging Guide](arm_debugging.md)
* [I2C Driver](i2c_driver.md)
+ * [GPIO Controls](internals_gpio_control.md)
+ * [Proton C Conversion](proton_c_conversion.md)
* For a Deeper Understanding
* [How Keyboards Work](how_keyboards_work.md)
diff --git a/docs/config_options.md b/docs/config_options.md
index 085ab3ee58..f5c2e76e7e 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -109,9 +109,9 @@ If you define these options you will disable the associated feature, which can s
* `#define NO_ACTION_ONESHOT`
* disable one-shot modifiers
* `#define NO_ACTION_MACRO`
- * disable all macro handling
+ * disable old style macro handling: MACRO() & action_get_macro
* `#define NO_ACTION_FUNCTION`
- * disable the action function (deprecated)
+ * disable calling of action_function() from the fn_actions array (deprecated)
## Features That Can Be Enabled
@@ -143,7 +143,7 @@ If you define these options you will enable the associated feature, which may in
* Breaks any Tap Toggle functionality (`TT` or the One Shot Tap Toggle)
* `#define LEADER_TIMEOUT 300`
* how long before the leader key times out
- * If you're having issues finishing the sequence before it times out, you may need to increase the timeout setting. Or you may want to enable the `LEADER_PER_KEY_TIMING` option, which resets the timeout after each key is tapped.
+ * If you're having issues finishing the sequence before it times out, you may need to increase the timeout setting. Or you may want to enable the `LEADER_PER_KEY_TIMING` option, which resets the timeout after each key is tapped.
* `#define LEADER_PER_KEY_TIMING`
* sets the timer for leader key chords to run on each key press rather than overall
* `#define LEADER_KEY_STRICT_KEY_PROCESSING`
@@ -197,6 +197,9 @@ If you define these options you will enable the associated feature, which may in
Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk
+* `SPLIT_TRANSPORT = custom`
+ * Allows replacing the standard split communication routines with a custom one. ARM based split keyboards must use this at present.
+
### Setting Handedness
One thing to remember, the side that the USB port is plugged into is always the master half. The side not plugged into USB is the slave.
@@ -208,7 +211,7 @@ There are a few different ways to set handedness for split keyboards (listed in
3. Set `MASTER_RIGHT`: Half that is plugged into the USB port is determined to be the master and right half (inverse of the default)
4. Default: The side that is plugged into the USB port is the master half and is assumed to be the left half. The slave side is the right half
-* `#define SPLIT_HAND_PIN B7`
+* `#define SPLIT_HAND_PIN B7`
* For using high/low pin to determine handedness, low = right hand, high = left hand. Replace `B7` with the pin you are using. This is optional, and if you leave `SPLIT_HAND_PIN` undefined, then you can still use the EE_HANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
* `#define EE_HANDS` (only works if `SPLIT_HAND_PIN` is not defined)
@@ -302,6 +305,10 @@ Use these to enable or disable building certain features. The more you have enab
* Current options are AdafruitEzKey, AdafruitBLE, RN42
* `SPLIT_KEYBOARD`
* Enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common
+* `CUSTOM_MATRIX`
+ * Allows replacing the standard matrix scanning routine with a custom one.
+* `CUSTOM_DEBOUNCE`
+ * Allows replacing the standard key debouncing routine with a custom one.
* `WAIT_FOR_USB`
* Forces the keyboard to wait for a USB connection to be established before it starts up
* `NO_USB_STARTUP_CHECK`
diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md
index 5b95450f26..d44786e2d5 100644
--- a/docs/custom_quantum_functions.md
+++ b/docs/custom_quantum_functions.md
@@ -90,7 +90,7 @@ keyrecord_t record {
# LED Control
-This allows you to control the 5 LED's defined as part of the USB Keyboard spec. It will be called when the state of one of those 5 LEDs changes.
+QMK provides methods to read the 5 LEDs defined as part of the HID spec:
* `USB_LED_NUM_LOCK`
* `USB_LED_CAPS_LOCK`
@@ -98,31 +98,44 @@ This allows you to control the 5 LED's defined as part of the USB Keyboard spec.
* `USB_LED_COMPOSE`
* `USB_LED_KANA`
+These five constants correspond to the positional bits of the host LED state.
+There are two ways to get the host LED state:
+
+* by implementing `led_set_user()`
+* by calling `host_keyboard_leds()`
+
+## `led_set_user()`
+
+This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a parameter.
+Use the `IS_LED_ON(usb_led, led_name)` and `IS_LED_OFF(usb_led, led_name)` macros to check the LED status.
+
+!> `host_keyboard_leds()` may already reflect a new value before `led_set_user()` is called.
+
### Example `led_set_user()` Implementation
```c
void led_set_user(uint8_t usb_led) {
- if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
PORTB |= (1<<0);
} else {
PORTB &= ~(1<<0);
}
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
PORTB |= (1<<1);
} else {
PORTB &= ~(1<<1);
}
- if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
PORTB |= (1<<2);
} else {
PORTB &= ~(1<<2);
}
- if (usb_led & (1<<USB_LED_COMPOSE)) {
+ if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) {
PORTB |= (1<<3);
} else {
PORTB &= ~(1<<3);
}
- if (usb_led & (1<<USB_LED_KANA)) {
+ if (IS_LED_ON(usb_led, USB_LED_KANA)) {
PORTB |= (1<<4);
} else {
PORTB &= ~(1<<4);
@@ -135,10 +148,26 @@ void led_set_user(uint8_t usb_led) {
* Keyboard/Revision: `void led_set_kb(uint8_t usb_led)`
* Keymap: `void led_set_user(uint8_t usb_led)`
+## `host_keyboard_leds()`
+
+Call this function to get the last received LED state. This is useful for reading the LED state outside `led_set_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code).
+For convenience, you can use the `IS_HOST_LED_ON(led_name)` and `IS_HOST_LED_OFF(led_name)` macros instead of calling and checking `host_keyboard_leds()` directly.
+
+## Setting Physical LED State
+
+Some keyboard implementations provide convenience methods for setting the state of the physical LEDs.
+
+### Ergodox Boards
+
+The Ergodox implementations provide `ergodox_right_led_1`/`2`/`3_on`/`off()` to turn individual LEDs on or off, as well as `ergodox_right_led_on`/`off(uint8_t led)` to turn them on or off by their index.
+
+In addition, it is possible to specify the brightness level of all LEDs with `ergodox_led_all_set(uint8_t n)`; of individual LEDs with `ergodox_right_led_1`/`2`/`3_set(uint8_t n)`; or by index with `ergodox_right_led_set(uint8_t led, uint8_t n)`.
+
+Ergodox boards also define `LED_BRIGHTNESS_LO` for the lowest brightness and `LED_BRIGHTNESS_HI` for the highest brightness (which is the default).
# Matrix Initialization Code
-Before a keyboard can be used the hardware must be initialized. QMK handles initialization of the keyboard matrix itself, but if you have other hardware like LED's or i&#xb2;c controllers you will need to set up that hardware before it can be used.
+Before a keyboard can be used the hardware must be initialized. QMK handles initialization of the keyboard matrix itself, but if you have other hardware like LEDs or i&#xb2;c controllers you will need to set up that hardware before it can be used.
### Example `matrix_init_user()` Implementation
@@ -176,7 +205,7 @@ This example has been deliberately omitted. You should understand enough about Q
This function gets called at every matrix scan, which is basically as often as the MCU can handle. Be careful what you put here, as it will get run a lot.
-You should use this function if you need custom matrix scanning code. It can also be used for custom status output (such as LED's or a display) or other functionality that you want to trigger regularly even when the user isn't typing.
+You should use this function if you need custom matrix scanning code. It can also be used for custom status output (such as LEDs or a display) or other functionality that you want to trigger regularly even when the user isn't typing.
# Keyboard Idling/Wake Code
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index 8c0a22fc67..37a3d43fc3 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -25,7 +25,7 @@ These functions allow you to activate layers in various ways. Note that layers a
* `DF(layer)` - switches the default layer. The default layer is the always-active base layer that other layers stack on top of. See below for more about the default layer. This might be used to switch from QWERTY to Dvorak layout. (Note that this is a temporary switch that only persists until the keyboard loses power. To modify the default layer in a persistent way requires deeper customization, such as calling the `set_single_persistent_default_layer` function inside of [process_record_user](custom_quantum_functions.md#programming-the-behavior-of-any-keycode).)
* `MO(layer)` - momentarily activates *layer*. As soon as you let go of the key, the layer is deactivated.
-* `LM(layer, mod)` - Momentarily activates *layer* (like `MO`), but with modifier(s) *mod* active. Only supports layers 0-15 and the left modifiers.
+* `LM(layer, mod)` - Momentarily activates *layer* (like `MO`), but with modifier(s) *mod* active. Only supports layers 0-15 and the left modifiers: `MOD_LCTL`, `MOD_LSFT`, `MOD_LALT`, `MOD_LGUI` (note the use of `MOD_` constants instead of `KC_`). These modifiers can be combined using bitwise OR, e.g. `LM(_RAISE, MOD_LCTL | MOD_LALT)`.
* `LT(layer, kc)` - momentarily activates *layer* when held, and sends *kc* when tapped. Only supports layers 0-15.
* `OSL(layer)` - momentarily activates *layer* until the next key is pressed. See [One Shot Keys](#one-shot-keys) for details and additional functionality.
* `TG(layer)` - toggles *layer*, activating it if it's inactive and vice versa
@@ -60,21 +60,21 @@ Sometimes, you might want to switch between layers in a macro or as part of a ta
These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent.
-|Key |Aliases |Description |
-|----------|----------------------|----------------------------------------------------|
-|`LCTL(kc)`| |Hold Left Control and press `kc` |
-|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
-|`LALT(kc)`| |Hold Left Alt and press `kc` |
-|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
-|`RCTL(kc)`| |Hold Right Control and press `kc` |
-|`RSFT(kc)`| |Hold Right Shift and press `kc` |
-|`RALT(kc)`|`ALGR(kc)` |Hold Right Alt and press `kc` |
-|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
-|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
-|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
-|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
-|`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` |
-|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
+|Key |Aliases |Description |
+|----------|-------------------------------|----------------------------------------------------|
+|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
+|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
+|`LALT(kc)`|`A(kc)` |Hold Left Alt and press `kc` |
+|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
+|`RCTL(kc)`| |Hold Right Control and press `kc` |
+|`RSFT(kc)`| |Hold Right Shift and press `kc` |
+|`RALT(kc)`|`ALGR(kc)` |Hold Right Alt and press `kc` |
+|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)` |Hold Right GUI and press `kc` |
+|`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)` |Hold Left Shift and GUI and press `kc` |
+|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
+|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
+|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
+|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
You can also chain them, for example `LCTL(LALT(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress.
@@ -107,23 +107,23 @@ This key would activate Left Control and Left Shift when held, and send Escape w
For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap:
-|Key |Aliases |Description |
-|------------|---------------------------------------|-------------------------------------------------------|
-|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
-|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
-|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
-|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
-|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
-|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
-|`LGUI_T(kc)`|`LCMD_T(kc)`, `RWIN_T(kc)`, `GUI_T(kc)`|Left GUI when held, `kc` when tapped |
-|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
-|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
-|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped|
-|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
-|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
-|`ALL_T(kc)` | |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
-|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
-|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
+|Key |Aliases |Description |
+|------------|-----------------------------------------------------------------|-------------------------------------------------------|
+|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
+|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
+|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
+|`LGUI_T(kc)`|`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
+|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
+|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
+|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
+|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
+|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
+|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
+|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
+|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
+|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
+|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped|
+|`HYPR_T(kc)`|`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
## Caveats
diff --git a/docs/feature_encoders.md b/docs/feature_encoders.md
index 208d6db13c..6eab402ef9 100644
--- a/docs/feature_encoders.md
+++ b/docs/feature_encoders.md
@@ -32,15 +32,19 @@ The callback functions can be inserted into your `<keyboard>.c`:
or `keymap.c`:
void encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) {
- if (clockwise) {
- register_code(KC_PGDN);
- unregister_code(KC_PGDN);
- } else {
- register_code(KC_PGUP);
- unregister_code(KC_PGUP);
- }
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
}
+ } else if (index == 2) {
+ if (clockwise) {
+ tap_code(KC_UP);
+ } else {
+ tap_code(KC_DOWN);
+ }
+ }
}
## Hardware
diff --git a/docs/feature_unicode.md b/docs/feature_unicode.md
index 9d57e2fb7a..7dd85c5c2e 100644
--- a/docs/feature_unicode.md
+++ b/docs/feature_unicode.md
@@ -2,15 +2,15 @@
There are three Unicode keymap definition methods available in QMK:
-## UNICODE_ENABLE
+## `UNICODE_ENABLE`
-Supports Unicode up to `0xFFFF`. The keycode function is `UC(n)` in the keymap file, where _n_ is a 4 digit hexadecimal number.
+Supports Unicode up to `0x7FFF`. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji. The keycode function is `UC(c)` in the keymap file, where _c_ is the code point's number (preferably hexadecimal, up to 4 digits long). For example: `UC(0x45B)`, `UC(0x30C4)`.
-## UNICODEMAP_ENABLE
+## `UNICODEMAP_ENABLE`
-Supports Unicode up to `0x10FFFF` (all possible code points). You need to maintain a separate mapping table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. The keycode function is `X(n)`, where _n_ is an array index into the mapping table.
+Supports Unicode up to `0x10FFFF` (all possible code points). You need to maintain a separate mapping table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. The keycode function is `X(i)`, where _i_ is an array index into the mapping table. The table may contain at most 1024 entries.
-And you may want to have an enum to make reference easier. So you'd want to add something like this to your keymap:
+You may want to have an enum to make referencing easier. So, you could add something like this to your keymap file:
```c
enum unicode_names {
@@ -20,38 +20,37 @@ enum unicode_names {
};
const uint32_t PROGMEM unicode_map[] = {
- [BANG] = 0x203D, // ‽
- [IRONY] = 0x2E2E, // ⸮
- [SNEK] = 0x1F40D, // 🐍
+ [BANG] = 0x203D, // ‽
+ [IRONY] = 0x2E2E, // ⸮
+ [SNEK] = 0x1F40D, // 🐍
};
```
-Make sure that the order for both matches.
+Then you can use `X(BANG)` etc. in your keymap.
-## UCIS_ENABLE
+## `UCIS_ENABLE`
-Supports Unicode up to `0x10FFFF` (all possible code points). As with `UNICODEMAP`, you may want to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you will have to add a keycode or function that calls `qk_ucis_start()`. Once it's been called, you can type the mnemonic for your character, then hit Space or Enter to complete it or Esc to cancel. If the mnemonic matches an entry in your table, the typed text will automatically be erased and the corresponding Unicode sequence inserted.
+Supports Unicode up to `0x10FFFF` (all possible code points). As with `UNICODEMAP`, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you will have to add a keycode or function that calls `qk_ucis_start()`. Once this function's been called, you can type the corresponding mnemonic for your character, then hit Space or Enter to complete it, or Esc to cancel. If the mnemonic matches an entry in your table, the typed text will automatically be erased and the corresponding Unicode character inserted.
-For instance, you would need to have a table like this in your keymap:
+For instance, you would define a table like this in your keymap file:
```c
-const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE
-(
- UCIS_SYM("poop", 0x1f4a9),
- UCIS_SYM("rofl", 0x1f923),
- UCIS_SYM("kiss", 0x1f619)
+const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE(
+ UCIS_SYM("poop", 0x1F4A9), // 💩
+ UCIS_SYM("rofl", 0x1F923), // 🤣
+ UCIS_SYM("kiss", 0x1F619) // 😙
);
```
-You run the function, and then type "rofl" and hit enter, it should backspace remove "rofl" and input the `0x1f923` unicode.
+You call `qk_ucis_start()`, then type "rofl" and hit Enter. QMK should erase the "rofl" text and input the laughing emoji.
### Customization
-There are several functions that you can add to your keymap to customize the functionality of this feature.
+There are several functions that you can define in your keymap to customize the functionality of this feature.
-* `void qk_ucis_start_user(void)` - This runs when you run the "start" function, and can be used to provide feedback. By default, it types out a keyboard emoji.
-* `void qk_ucis_success(uint8_t symbol_index)` - This runs when the unicode input has matched something, and has completed. Default doesn't do anything.
-* `void qk_ucis_symbol_fallback (void)` - This runs if the input text doesn't match anything. The default function falls back to trying that input as a unicode code.
+* `void qk_ucis_start_user(void)` – This runs when you call the "start" function, and can be used to provide feedback. By default, it types out a keyboard emoji.
+* `void qk_ucis_success(uint8_t symbol_index)` – This runs when the input has matched something and has completed. By default, it doesn't do anything.
+* `void qk_ucis_symbol_fallback (void)` – This runs when the input doesn't match anything. By default, it falls back to trying that input as a Unicode code.
You can find the default implementations of these functions in [`process_ucis.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c).
@@ -66,7 +65,7 @@ The following input modes are available:
To enable, go to _System Preferences > Keyboard > Input Sources_, add _Unicode Hex Input_ to the list (it's under _Other_), then activate it from the input dropdown in the Menu Bar.
By default, this mode uses the left Option key (`KC_LALT`), but this can be changed by defining [`UNICODE_OSX_KEY`](#input-key-configuration) with another keycode.
-* **`UC_LNX`**: Linux built-in IBus Unicode input. Supports all possible code points (`0x10FFFF`).
+* **`UC_LNX`**: Linux built-in IBus Unicode input. Supports code points up to `0x10FFFF` (all possible code points).
Enabled by default and works almost anywhere on IBus-enabled distros. Without IBus, this mode works under GTK apps, but rarely anywhere else.
@@ -77,7 +76,7 @@ The following input modes are available:
* **`UC_BSD`**: _(non implemented)_ Unicode input under BSD. Not implemented at this time. If you're a BSD user and want to help add support for it, please [open an issue on GitHub](https://github.com/qmk/qmk_firmware/issues).
-* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.8.2, supports code points up to `0xFFFFF`.
+* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.8.2, supports code points up to `0xFFFFF` (all currently assigned code points).
To enable, install the [latest release](https://github.com/samhocevar/wincompose/releases/latest). Once installed, WinCompose will automatically run on startup. Works reliably under all version of Windows supported by the app.
By default, this mode uses the right Alt key (`KC_RALT`), but this can be changed in the WinCompose settings and by defining [`UNICODE_WINC_KEY`](#input-key-configuration) with another keycode.
diff --git a/docs/features.md b/docs/features.md
index 85f4cf6e00..9030500a2b 100644
--- a/docs/features.md
+++ b/docs/features.md
@@ -11,6 +11,7 @@ QMK has a staggering number of features for building your keyboard. It can take
* [Combos](feature_combo.md) - Custom actions for multiple key holds.
* [Command](feature_command.md) - Runtime version of bootmagic (Formerly known as "Magic").
* [Dynamic Macros](feature_dynamic_macros.md) - Record and playback macros from the keyboard itself.
+* [Encoders](feature_encoders.md) - Rotary encoders!
* [Grave Escape](feature_grave_esc.md) - Lets you use a single key for Esc and Grave.
* [HD44780 LCD Display](feature_hd44780.md) - Support for LCD character displays using the HD44780 standard.
* [Key Lock](feature_key_lock.md) - Lock a key in the "down" state.
diff --git a/docs/getting_started_build_tools.md b/docs/getting_started_build_tools.md
index 375e9d108f..dbed200d1b 100644
--- a/docs/getting_started_build_tools.md
+++ b/docs/getting_started_build_tools.md
@@ -41,6 +41,12 @@ Debian / Ubuntu example:
Fedora / Red Hat example:
sudo dnf install gcc unzip wget zip dfu-util dfu-programmer avr-gcc avr-libc binutils-avr32-linux-gnu arm-none-eabi-gcc-cs arm-none-eabi-binutils-cs arm-none-eabi-newlib
+
+Arch / Manjaro example:
+
+ pacman -S base-devel gcc unzip wget zip avr-gcc avr-binutils avr-libc dfu-util arm-none-eabi-gcc arm-none-eabi-binutils arm-none-eabi-newlib git
+
+(the `dfu-programmer` package is availble on AUR only so you should download from there or use an AUR helper)
## Nix
diff --git a/docs/getting_started_make_guide.md b/docs/getting_started_make_guide.md
index e515411901..bb7e1e7e3b 100644
--- a/docs/getting_started_make_guide.md
+++ b/docs/getting_started_make_guide.md
@@ -93,19 +93,17 @@ This enables MIDI sending and receiving with your keyboard. To enter MIDI send m
`UNICODE_ENABLE`
-This allows you to send unicode symbols via `UC(<unicode>)` in your keymap. Only codes up to 0x7FFF are currently supported.
+This allows you to send Unicode characters using `UC(<code point>)` in your keymap. Code points up to `0x7FFF` are supported. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji.
`UNICODEMAP_ENABLE`
-This allows sending unicode symbols using `X(<unicode>)` in your keymap. Codes
-up to 0xFFFFFFFF are supported, including emojis. You will need to maintain
-a separate mapping table in your keymap file.
+This allows you to send Unicode characters using `X(<map index>)` in your keymap. You will need to maintain a mapping table in your keymap file. All possible code points (up to `0x10FFFF`) are supported.
-Known limitations:
-- Under Mac OS, only codes up to 0xFFFF are supported.
-- Under Linux ibus, only codes up to 0xFFFFF are supported (but anything important is still under this limit for now).
+`UCIS_ENABLE`
-Characters out of range supported by the OS will be ignored.
+This allows you to send Unicode characters by inputting a mnemonic corresponding to the character you want to send. You will need to maintain a mapping table in your keymap file. All possible code points (up to `0x10FFFF`) are supported.
+
+For further details, as well as limitations, see the [Unicode page](feature_unicode.md).
`BLUETOOTH_ENABLE`
@@ -117,7 +115,7 @@ This allows you output audio on the C6 pin (needs abstracting). See the [audio p
`FAUXCLICKY_ENABLE`
-Uses buzzer to emulate clicky switches. A cheap imitation of the Cherry blue switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
+Uses buzzer to emulate clicky switches. A cheap imitation of the Cherry blue switches. By default, uses the C6 pin, same as `AUDIO_ENABLE`.
`VARIABLE_TRACE`
@@ -137,6 +135,18 @@ This enables [key lock](feature_key_lock.md). This consumes an additional 260 by
This enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common
+`SPLIT_TRANSPORT`
+
+As there is no standard split communication driver for ARM-based split keyboards yet, `SPLIT_TRANSPORT = custom` must be used for these. It will prevent the standard split keyboard communication code (which is AVR-specific) from being included, allowing a custom implementation to be used.
+
+`CUSTOM_MATRIX`
+
+Lets you replace the default matrix scanning routine with your own code. You will need to provide your own implementations of matrix_init() and matrix_scan().
+
+`CUSTOM_DEBOUNCE`
+
+Lets you replace the default key debouncing routine with your own code. You will need to provide your own implementation of debounce().
+
## Customizing Makefile Options on a Per-Keymap Basis
If your keymap directory has a file called `rules.mk` any options you set in that file will take precedence over other `rules.mk` options for your particular keyboard.
diff --git a/docs/index.html b/docs/index.html
index f5aa92b531..d6fdbdbcc1 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -17,7 +17,7 @@
name: 'QMK Firmware',
nameLink: 'https://qmk.fm/',
repo: 'qmk/qmk_firmware',
- loadSidebar: true,
+ loadSidebar: '_summary.md',
auto2top: true,
formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}',
search: {
diff --git a/docs/internals_gpio_control.md b/docs/internals_gpio_control.md
index 083e696648..51a549f1c9 100644
--- a/docs/internals_gpio_control.md
+++ b/docs/internals_gpio_control.md
@@ -1,6 +1,6 @@
# GPIO Control
-QMK has a GPIO control abstraction layer which is micro-controller agnostic. This is done to allow easy access to pin control across different platforms.
+QMK has a GPIO control abstraction layer which is microcontroller agnostic. This is done to allow easy access to pin control across different platforms.
## Functions
@@ -17,7 +17,7 @@ The following functions can provide basic control of GPIOs and are found in `qua
|`writePin(pin, level)`|Set pin level, assuming it is an output |
|`readPin(pin)` |Returns the level of the pin |
-## Advance settings
+## Advanced Settings
-Each micro-controller can have multiple advance settings regarding its GPIO. This abstraction layer does not limit the use of architecture specific functions. Advance users should consult the datasheet of there desired device and include any needed libraries. For AVR the standard avr/io.h library is used and for STM32 the Chibios [PAL library](http://chibios.sourceforge.net/docs3/hal/group___p_a_l.html) is used.
+Each microcontroller can have multiple advanced settings regarding its GPIO. This abstraction layer does not limit the use of architecture-specific functions. Advanced users should consult the datasheet of their desired device and include any needed libraries. For AVR, the standard avr/io.h library is used; for STM32, the ChibiOS [PAL library](http://chibios.sourceforge.net/docs3/hal/group___p_a_l.html) is used.
diff --git a/docs/isp_flashing_guide.md b/docs/isp_flashing_guide.md
index 008f944cc3..18f2147846 100644
--- a/docs/isp_flashing_guide.md
+++ b/docs/isp_flashing_guide.md
@@ -53,7 +53,7 @@ This is pretty straight-forward - we'll be connecting like-things to like-things
The only difference between the .hex files below is which pin is connected to RESET. You can use them on other boards as well, as long as you're aware of the pins being used. If for some reason neither of these pins are available, [create an issue](https://github.com/qmk/qmk_firmware/issues/new), and we can generate one for you!
* Teensy 2.0: [`util/teensy_2.0_ISP_B0.hex`](https://github.com/qmk/qmk_firmware/blob/master/util/teensy_2.0_ISP_B0.hex) (`B0`)
-* Pro Micro: [`util/pro_micro_ISP_B6_10.hex`](https://github.com/qmk/qmk_firmware/blob/master/util/pro_mico_ISP_B6_10.hex) (`B6/10`)
+* Pro Micro: [`util/pro_micro_ISP_B6_10.hex`](https://github.com/qmk/qmk_firmware/blob/master/util/pro_micro_ISP_B6_10.hex) (`B6/10`)
**Flash your Teenys/Pro Micro with one of these and continue - you won't need the file after flashing your ISP device.**
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 6d85253935..91578414d1 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -6,205 +6,205 @@ This is a reference only. Each group of keys links to the page documenting their
## [Basic Keycodes](keycodes_basic.md)
-|Key |Aliases |Description |
-|-----------------------|--------------------|-----------------------------------------------|
-|`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) |
-|`KC_TRANSPARENT` |`KC_TRNS`, `_______`|Use the next lowest non-transparent key |
-|`KC_A` | |`a` and `A` |
-|`KC_B` | |`b` and `B` |
-|`KC_C` | |`c` and `C` |
-|`KC_D` | |`d` and `D` |
-|`KC_E` | |`e` and `E` |
-|`KC_F` | |`f` and `F` |
-|`KC_G` | |`g` and `G` |
-|`KC_H` | |`h` and `H` |
-|`KC_I` | |`i` and `I` |
-|`KC_J` | |`j` and `J` |
-|`KC_K` | |`k` and `K` |
-|`KC_L` | |`l` and `L` |
-|`KC_M` | |`m` and `M` |
-|`KC_N` | |`n` and `N` |
-|`KC_O` | |`o` and `O` |
-|`KC_P` | |`p` and `P` |
-|`KC_Q` | |`q` and `Q` |
-|`KC_R` | |`r` and `R` |
-|`KC_S` | |`s` and `S` |
-|`KC_T` | |`t` and `T` |
-|`KC_U` | |`u` and `U` |
-|`KC_V` | |`v` and `V` |
-|`KC_W` | |`w` and `W` |
-|`KC_X` | |`x` and `X` |
-|`KC_Y` | |`y` and `Y` |
-|`KC_Z` | |`z` and `Z` |
-|`KC_1` | |`1` and `!` |
-|`KC_2` | |`2` and `@` |
-|`KC_3` | |`3` and `#` |
-|`KC_4` | |`4` and `$` |
-|`KC_5` | |`5` and `%` |
-|`KC_6` | |`6` and `^` |
-|`KC_7` | |`7` and `&` |
-|`KC_8` | |`8` and `*` |
-|`KC_9` | |`9` and `(` |
-|`KC_0` | |`0` and `)` |
-|`KC_ENTER` |`KC_ENT` |Return (Enter) |
-|`KC_ESCAPE` |`KC_ESC` |Escape |
-|`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) |
-|`KC_TAB` | |Tab |
-|`KC_SPACE` |`KC_SPC` |Spacebar |
-|`KC_MINUS` |`KC_MINS` |`-` and `_` |
-|`KC_EQUAL` |`KC_EQL` |`=` and `+` |
-|`KC_LBRACKET` |`KC_LBRC` |`[` and `{` |
-|`KC_RBRACKET` |`KC_RBRC` |`]` and `}` |
-|`KC_BSLASH` |`KC_BSLS` |`\` and <code>&#124;</code> |
-|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |
-|`KC_SCOLON` |`KC_SCLN` |`;` and `:` |
-|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |
-|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK` |<code>&#96;</code> and `~`, JIS Zenkaku/Hankaku|
-|`KC_COMMA` |`KC_COMM` |`,` and `<` |
-|`KC_DOT` | |`.` and `>` |
-|`KC_SLASH` |`KC_SLSH` |`/` and `?` |
-|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS`|Caps Lock |
-|`KC_F1` | |F1 |
-|`KC_F2` | |F2 |
-|`KC_F3` | |F3 |
-|`KC_F4` | |F4 |
-|`KC_F5` | |F5 |
-|`KC_F6` | |F6 |
-|`KC_F7` | |F7 |
-|`KC_F8` | |F8 |
-|`KC_F9` | |F9 |
-|`KC_F10` | |F10 |
-|`KC_F11` | |F11 |
-|`KC_F12` | |F12 |
-|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
-|`KC_SCROLLLOCK` |`KC_SLCK` |Scroll Lock |
-|`KC_PAUSE` |`KC_PAUS`, `KC_BRK` |Pause |
-|`KC_INSERT` |`KC_INS` |Insert |
-|`KC_HOME` | |Home |
-|`KC_PGUP` | |Page Up |
-|`KC_DELETE` |`KC_DEL` |Forward Delete |
-|`KC_END` | |End |
-|`KC_PGDOWN` |`KC_PGDN` |Page Down |
-|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
-|`KC_LEFT` | |Left Arrow |
-|`KC_DOWN` | |Down Arrow |
-|`KC_UP` | |Up Arrow |
-|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear |
-|`KC_KP_SLASH` |`KC_PSLS` |Keypad `/` |
-|`KC_KP_ASTERISK` |`KC_PAST` |Keypad `*` |
-|`KC_KP_MINUS` |`KC_PMNS` |Keypad `-` |
-|`KC_KP_PLUS` |`KC_PPLS` |Keypad `+` |
-|`KC_KP_ENTER` |`KC_PENT` |Keypad Enter |
-|`KC_KP_1` |`KC_P1` |Keypad `1` and End |
-|`KC_KP_2` |`KC_P2` |Keypad `2` and Down Arrow |
-|`KC_KP_3` |`KC_P3` |Keypad `3` and Page Down |
-|`KC_KP_4` |`KC_P4` |Keypad `4` and Left Arrow |
-|`KC_KP_5` |`KC_P5` |Keypad `5` |
-|`KC_KP_6` |`KC_P6` |Keypad `6` and Right Arrow |
-|`KC_KP_7` |`KC_P7` |Keypad `7` and Home |
-|`KC_KP_8` |`KC_P8` |Keypad `8` and Up Arrow |
-|`KC_KP_9` |`KC_P9` |Keypad `9` and Page Up |
-|`KC_KP_0` |`KC_P0` |Keypad `0` and Insert |
-|`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete |
-|`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and <code>&#124;</code> |
-|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key) |
-|`KC_POWER` | |System Power (macOS) |
-|`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` |
-|`KC_F13` | |F13 |
-|`KC_F14` | |F14 |
-|`KC_F15` | |F15 |
-|`KC_F16` | |F16 |
-|`KC_F17` | |F17 |
-|`KC_F18` | |F18 |
-|`KC_F19` | |F19 |
-|`KC_F20` | |F20 |
-|`KC_F21` | |F21 |
-|`KC_F22` | |F22 |
-|`KC_F23` | |F23 |
-|`KC_F24` | |F24 |
-|`KC_EXECUTE` |`KC_EXEC` |Execute |
-|`KC_HELP` | |Help |
-|`KC_MENU` | |Menu |
-|`KC_SELECT` |`KC_SLCT` |Select |
-|`KC_STOP` | |Stop |
-|`KC_AGAIN` |`KC_AGIN` |Again |
-|`KC_UNDO` | |Undo |
-|`KC_CUT` | |Cut |
-|`KC_COPY` | |Copy |
-|`KC_PASTE` |`KC_PSTE` |Paste |
-|`KC_FIND` | |Find |
-|`KC__MUTE` | |Mute (macOS) |
-|`KC__VOLUP` | |Volume Up (macOS) |
-|`KC__VOLDOWN` | |Volume Down (macOS) |
-|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
-|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
-|`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock |
-|`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` |
-|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards |
-|`KC_INT1` |`KC_RO` |JIS `\` and `_` |
-|`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana |
-|`KC_INT3` |`KC_JYEN` |JIS `¥` and <code>&#124;</code> |
-|`KC_INT4` |`KC_HENK` |JIS Henkan |
-|`KC_INT5` |`KC_MHEN` |JIS Muhenkan |
-|`KC_INT6` | |JIS Numpad `,` |
-|`KC_INT7` | |International 7 |
-|`KC_INT8` | |International 8 |
-|`KC_INT9` | |International 9 |
-|`KC_LANG1` |`KC_HAEN` |Hangul/English |
-|`KC_LANG2` |`KC_HANJ` |Hanja |
-|`KC_LANG3` | |JIS Katakana |
-|`KC_LANG4` | |JIS Hiragana |
-|`KC_LANG5` | |JIS Zenkaku/Hankaku |
-|`KC_LANG6` | |Language 6 |
-|`KC_LANG7` | |Language 7 |
-|`KC_LANG8` | |Language 8 |
-|`KC_LANG9` | |Language 9 |
-|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
-|`KC_SYSREQ` | |SysReq/Attention |
-|`KC_CANCEL` | |Cancel |
-|`KC_CLEAR` |`KC_CLR` |Clear |
-|`KC_PRIOR` | |Prior |
-|`KC_RETURN` | |Return |
-|`KC_SEPARATOR` | |Separator |
-|`KC_OUT` | |Out |
-|`KC_OPER` | |Oper |
-|`KC_CLEAR_AGAIN` | |Clear/Again |
-|`KC_CRSEL` | |CrSel/Props |
-|`KC_EXSEL` | |ExSel |
-|`KC_LCTRL` |`KC_LCTL` |Left Control |
-|`KC_LSHIFT` |`KC_LSFT` |Left Shift |
-|`KC_LALT` | |Left Alt |
-|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
-|`KC_RCTRL` |`KC_RCTL` |Right Control |
-|`KC_RSHIFT` |`KC_RSFT` |Right Shift |
-|`KC_RALT` |`KC_ALGR` |Right Alt (AltGr) |
-|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key) |
-|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |
-|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |
-|`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake |
-|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute |
-|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up |
-|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down |
-|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT` |Next Track (Windows) |
-|`KC_MEDIA_PREV_TRACK` |`KC_MPRV` |Previous Track (Windows) |
-|`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track (Windows) |
-|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track |
-|`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player (Windows) |
-|`KC_MEDIA_EJECT` |`KC_EJCT` |Eject (macOS) |
-|`KC_MAIL` | |Launch Mail (Windows) |
-|`KC_CALCULATOR` |`KC_CALC` |Launch Calculator (Windows) |
-|`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer (Windows) |
-|`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search (Windows) |
-|`KC_WWW_HOME` |`KC_WHOM` |Browser Home (Windows) |
-|`KC_WWW_BACK` |`KC_WBAK` |Browser Back (Windows) |
-|`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward (Windows) |
-|`KC_WWW_STOP` |`KC_WSTP` |Browser Stop (Windows) |
-|`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh (Windows) |
-|`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites (Windows) |
-|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD` |Next Track (macOS) |
-|`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track (macOS) |
-|`KC_BRIGHTNESS_UP` |`KC_BRIU` |Brightness Up |
-|`KC_BRIGHTNESS_DOWN` |`KC_BRID` |Brightness Down |
+|Key |Aliases |Description |
+|-----------------------|------------------------------|-----------------------------------------------|
+|`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) |
+|`KC_TRANSPARENT` |`KC_TRNS`, `_______` |Use the next lowest non-transparent key |
+|`KC_A` | |`a` and `A` |
+|`KC_B` | |`b` and `B` |
+|`KC_C` | |`c` and `C` |
+|`KC_D` | |`d` and `D` |
+|`KC_E` | |`e` and `E` |
+|`KC_F` | |`f` and `F` |
+|`KC_G` | |`g` and `G` |
+|`KC_H` | |`h` and `H` |
+|`KC_I` | |`i` and `I` |
+|`KC_J` | |`j` and `J` |
+|`KC_K` | |`k` and `K` |
+|`KC_L` | |`l` and `L` |
+|`KC_M` | |`m` and `M` |
+|`KC_N` | |`n` and `N` |
+|`KC_O` | |`o` and `O` |
+|`KC_P` | |`p` and `P` |
+|`KC_Q` | |`q` and `Q` |
+|`KC_R` | |`r` and `R` |
+|`KC_S` | |`s` and `S` |
+|`KC_T` | |`t` and `T` |
+|`KC_U` | |`u` and `U` |
+|`KC_V` | |`v` and `V` |
+|`KC_W` | |`w` and `W` |
+|`KC_X` | |`x` and `X` |
+|`KC_Y` | |`y` and `Y` |
+|`KC_Z` | |`z` and `Z` |
+|`KC_1` | |`1` and `!` |
+|`KC_2` | |`2` and `@` |
+|`KC_3` | |`3` and `#` |
+|`KC_4` | |`4` and `$` |
+|`KC_5` | |`5` and `%` |
+|`KC_6` | |`6` and `^` |
+|`KC_7` | |`7` and `&` |
+|`KC_8` | |`8` and `*` |
+|`KC_9` | |`9` and `(` |
+|`KC_0` | |`0` and `)` |
+|`KC_ENTER` |`KC_ENT` |Return (Enter) |
+|`KC_ESCAPE` |`KC_ESC` |Escape |
+|`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) |
+|`KC_TAB` | |Tab |
+|`KC_SPACE` |`KC_SPC` |Spacebar |
+|`KC_MINUS` |`KC_MINS` |`-` and `_` |
+|`KC_EQUAL` |`KC_EQL` |`=` and `+` |
+|`KC_LBRACKET` |`KC_LBRC` |`[` and `{` |
+|`KC_RBRACKET` |`KC_RBRC` |`]` and `}` |
+|`KC_BSLASH` |`KC_BSLS` |`\` and <code>&#124;</code> |
+|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |
+|`KC_SCOLON` |`KC_SCLN` |`;` and `:` |
+|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |
+|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK` |<code>&#96;</code> and `~`, JIS Zenkaku/Hankaku|
+|`KC_COMMA` |`KC_COMM` |`,` and `<` |
+|`KC_DOT` | |`.` and `>` |
+|`KC_SLASH` |`KC_SLSH` |`/` and `?` |
+|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS` |Caps Lock |
+|`KC_F1` | |F1 |
+|`KC_F2` | |F2 |
+|`KC_F3` | |F3 |
+|`KC_F4` | |F4 |
+|`KC_F5` | |F5 |
+|`KC_F6` | |F6 |
+|`KC_F7` | |F7 |
+|`KC_F8` | |F8 |
+|`KC_F9` | |F9 |
+|`KC_F10` | |F10 |
+|`KC_F11` | |F11 |
+|`KC_F12` | |F12 |
+|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
+|`KC_SCROLLLOCK` |`KC_SLCK`, `KC_BRMD` |Scroll Lock, Brightness Down (macOS) |
+|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |
+|`KC_INSERT` |`KC_INS` |Insert |
+|`KC_HOME` | |Home |
+|`KC_PGUP` | |Page Up |
+|`KC_DELETE` |`KC_DEL` |Forward Delete |
+|`KC_END` | |End |
+|`KC_PGDOWN` |`KC_PGDN` |Page Down |
+|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
+|`KC_LEFT` | |Left Arrow |
+|`KC_DOWN` | |Down Arrow |
+|`KC_UP` | |Up Arrow |
+|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear |
+|`KC_KP_SLASH` |`KC_PSLS` |Keypad `/` |
+|`KC_KP_ASTERISK` |`KC_PAST` |Keypad `*` |
+|`KC_KP_MINUS` |`KC_PMNS` |Keypad `-` |
+|`KC_KP_PLUS` |`KC_PPLS` |Keypad `+` |
+|`KC_KP_ENTER` |`KC_PENT` |Keypad Enter |
+|`KC_KP_1` |`KC_P1` |Keypad `1` and End |
+|`KC_KP_2` |`KC_P2` |Keypad `2` and Down Arrow |
+|`KC_KP_3` |`KC_P3` |Keypad `3` and Page Down |
+|`KC_KP_4` |`KC_P4` |Keypad `4` and Left Arrow |
+|`KC_KP_5` |`KC_P5` |Keypad `5` |
+|`KC_KP_6` |`KC_P6` |Keypad `6` and Right Arrow |
+|`KC_KP_7` |`KC_P7` |Keypad `7` and Home |
+|`KC_KP_8` |`KC_P8` |Keypad `8` and Up Arrow |
+|`KC_KP_9` |`KC_P9` |Keypad `9` and Page Up |
+|`KC_KP_0` |`KC_P0` |Keypad `0` and Insert |
+|`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete |
+|`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and <code>&#124;</code> |
+|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key) |
+|`KC_POWER` | |System Power (macOS) |
+|`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` |
+|`KC_F13` | |F13 |
+|`KC_F14` | |F14 |
+|`KC_F15` | |F15 |
+|`KC_F16` | |F16 |
+|`KC_F17` | |F17 |
+|`KC_F18` | |F18 |
+|`KC_F19` | |F19 |
+|`KC_F20` | |F20 |
+|`KC_F21` | |F21 |
+|`KC_F22` | |F22 |
+|`KC_F23` | |F23 |
+|`KC_F24` | |F24 |
+|`KC_EXECUTE` |`KC_EXEC` |Execute |
+|`KC_HELP` | |Help |
+|`KC_MENU` | |Menu |
+|`KC_SELECT` |`KC_SLCT` |Select |
+|`KC_STOP` | |Stop |
+|`KC_AGAIN` |`KC_AGIN` |Again |
+|`KC_UNDO` | |Undo |
+|`KC_CUT` | |Cut |
+|`KC_COPY` | |Copy |
+|`KC_PASTE` |`KC_PSTE` |Paste |
+|`KC_FIND` | |Find |
+|`KC__MUTE` | |Mute (macOS) |
+|`KC__VOLUP` | |Volume Up (macOS) |
+|`KC__VOLDOWN` | |Volume Down (macOS) |
+|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
+|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
+|`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock |
+|`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` |
+|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards |
+|`KC_INT1` |`KC_RO` |JIS `\` and `_` |
+|`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana |
+|`KC_INT3` |`KC_JYEN` |JIS `¥` and <code>&#124;</code> |
+|`KC_INT4` |`KC_HENK` |JIS Henkan |
+|`KC_INT5` |`KC_MHEN` |JIS Muhenkan |
+|`KC_INT6` | |JIS Numpad `,` |
+|`KC_INT7` | |International 7 |
+|`KC_INT8` | |International 8 |
+|`KC_INT9` | |International 9 |
+|`KC_LANG1` |`KC_HAEN` |Hangul/English |
+|`KC_LANG2` |`KC_HANJ` |Hanja |
+|`KC_LANG3` | |JIS Katakana |
+|`KC_LANG4` | |JIS Hiragana |
+|`KC_LANG5` | |JIS Zenkaku/Hankaku |
+|`KC_LANG6` | |Language 6 |
+|`KC_LANG7` | |Language 7 |
+|`KC_LANG8` | |Language 8 |
+|`KC_LANG9` | |Language 9 |
+|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
+|`KC_SYSREQ` | |SysReq/Attention |
+|`KC_CANCEL` | |Cancel |
+|`KC_CLEAR` |`KC_CLR` |Clear |
+|`KC_PRIOR` | |Prior |
+|`KC_RETURN` | |Return |
+|`KC_SEPARATOR` | |Separator |
+|`KC_OUT` | |Out |
+|`KC_OPER` | |Oper |
+|`KC_CLEAR_AGAIN` | |Clear/Again |
+|`KC_CRSEL` | |CrSel/Props |
+|`KC_EXSEL` | |ExSel |
+|`KC_LCTRL` |`KC_LCTL` |Left Control |
+|`KC_LSHIFT` |`KC_LSFT` |Left Shift |
+|`KC_LALT` | |Left Alt |
+|`KC_LGUI` |`KC_LCMD`, `KC_LWIN` |Left GUI (Windows/Command/Meta key) |
+|`KC_RCTRL` |`KC_RCTL` |Right Control |
+|`KC_RSHIFT` |`KC_RSFT` |Right Shift |
+|`KC_RALT` |`KC_ALGR` |Right Alt (AltGr) |
+|`KC_RGUI` |`KC_RCMD`, `KC_RWIN` |Right GUI (Windows/Command/Meta key) |
+|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |
+|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |
+|`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake |
+|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute |
+|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up |
+|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down |
+|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT` |Next Track (Windows) |
+|`KC_MEDIA_PREV_TRACK` |`KC_MPRV` |Previous Track (Windows) |
+|`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track (Windows) |
+|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track |
+|`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player (Windows) |
+|`KC_MEDIA_EJECT` |`KC_EJCT` |Eject (macOS) |
+|`KC_MAIL` | |Launch Mail (Windows) |
+|`KC_CALCULATOR` |`KC_CALC` |Launch Calculator (Windows) |
+|`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer (Windows) |
+|`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search (Windows) |
+|`KC_WWW_HOME` |`KC_WHOM` |Browser Home (Windows) |
+|`KC_WWW_BACK` |`KC_WBAK` |Browser Back (Windows) |
+|`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward (Windows) |
+|`KC_WWW_STOP` |`KC_WSTP` |Browser Stop (Windows) |
+|`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh (Windows) |
+|`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites (Windows) |
+|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD` |Next Track (macOS) |
+|`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track (macOS) |
+|`KC_BRIGHTNESS_UP` |`KC_BRIU` |Brightness Up |
+|`KC_BRIGHTNESS_DOWN` |`KC_BRID` |Brightness Down |
## [Quantum Keycodes](quantum_keycodes.md#qmk-keycodes)
@@ -238,8 +238,6 @@ This is a reference only. Each group of keys links to the page documenting their
|`MU_TOG` | |Toggles Music Mode |
|`MU_MOD` | |Cycles through the music modes |
-
-
## [Backlighting](feature_backlight.md)
|Key |Description |
@@ -285,7 +283,6 @@ This is a reference only. Each group of keys links to the page documenting their
|`OUT_USB` |USB only |
|`OUT_BT` |Bluetooth only |
-
## [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
|Key |Description |
@@ -293,7 +290,7 @@ This is a reference only. Each group of keys links to the page documenting their
|`DF(layer)` |Set the base (default) layer |
|`MO(layer)` |Momentarily turn on `layer` when pressed (requires `KC_TRNS` on destination layer)|
|`OSL(layer)` |Momentarily activates `layer` until a key is pressed. See [One Shot Keys](https://docs.qmk.fm/#/feature_advanced_keycodes?id=one-shot-keys) for details. |
-|`LM(layer, mod)`|Momentarily turn on `layer` (like MO) with `mod` active as well.
+|`LM(layer, mod)`|Momentarily turn on `layer` (like MO) with `mod` active as well. Where `mod` is a mods_bit. Mods can be viewed [here](https://docs.qmk.fm/#/feature_advanced_keycodes?id=mod-tap). Example Implementation: `LM(LAYER_1, MOD_LALT)`|
|`LT(layer, kc)` |Turn on `layer` when held, `kc` when tapped |
|`TG(layer)` |Toggle `layer` on or off |
|`TO(layer)` |Turn on `layer` when pressed |
@@ -322,43 +319,43 @@ This is a reference only. Each group of keys links to the page documenting their
## [Modifiers](feature_advanced_keycodes.md#modifier-keys)
-|Key |Aliases |Description |
-|----------|----------------------|----------------------------------------------------|
-|`KC_HYPR` | |Hold Left Control, Shift, Alt and GUI |
-|`KC_MEH` | |Hold Left Control, Shift and Alt |
-|`LCTL(kc)`| |Hold Left Control and press `kc` |
-|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
-|`LALT(kc)`| |Hold Left Alt and press `kc` |
-|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
-|`RCTL(kc)`| |Hold Right Control and press `kc` |
-|`RSFT(kc)`| |Hold Right Shift and press `kc` |
-|`RALT(kc)`|`ALGR(kc)` |Hold Right Alt and press `kc` |
-|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
-|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
-|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
-|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
-|`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` |
-|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
+|Key |Aliases |Description |
+|----------|-------------------------------|----------------------------------------------------|
+|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
+|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
+|`LALT(kc)`|`A(kc)` |Hold Left Alt and press `kc` |
+|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
+|`RCTL(kc)`| |Hold Right Control and press `kc` |
+|`RSFT(kc)`| |Hold Right Shift and press `kc` |
+|`RALT(kc)`|`ALGR(kc)` |Hold Right Alt and press `kc` |
+|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)` |Hold Right GUI and press `kc` |
+|`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)` |Hold Left Shift and GUI and press `kc` |
+|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
+|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
+|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
+|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
+|`KC_MEH` | |Left Control, Shift and Alt |
+|`KC_HYPR` | |Left Control, Shift, Alt and GUI |
## [Mod-Tap Keys](feature_advanced_keycodes.md#mod-tap)
-|Key |Aliases |Description |
-|------------|---------------------------------------|-------------------------------------------------------|
-|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
-|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
-|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
-|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
-|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
-|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
-|`LGUI_T(kc)`|`LCMD_T(kc)`, `RWIN_T(kc)`, `GUI_T(kc)`|Left GUI when held, `kc` when tapped |
-|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
-|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
-|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped|
-|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
-|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
-|`ALL_T(kc)` | |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
-|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
-|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
+|Key |Aliases |Description |
+|------------|-----------------------------------------------------------------|-------------------------------------------------------|
+|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
+|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
+|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
+|`LGUI_T(kc)`|`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
+|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
+|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
+|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
+|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
+|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
+|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
+|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
+|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
+|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
+|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped|
+|`HYPR_T(kc)`|`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
## [RGB Lighting](feature_rgblight.md)
@@ -439,7 +436,6 @@ This is a reference only. Each group of keys links to the page documenting their
|`OSM(mod)` |Hold `mod` for one keypress |
|`OSL(layer)`|Switch to `layer` for one keypress|
-
## [Swap Hands](feature_swap_hands.md)
|Key |Description |
@@ -454,7 +450,7 @@ This is a reference only. Each group of keys links to the page documenting their
## [Unicode Support](feature_unicode.md)
-|Key |Aliases| |
-|------------|-------|-------------------------------------------------|
-|`UNICODE(n)`|`UC(n)`|Send Unicode character `n` |
-|`X(n)` | |Send Unicode character `n` via a different method|
+|Key |Description |
+|-------|---------------------------------------------------------------------------|
+|`UC(c)`|Send Unicode code point `c` (`UNICODE_ENABLE`) |
+|`X(i)` |Send Unicode code point at index `i` in `unicode_map` (`UNICODEMAP_ENABLE`)|
diff --git a/docs/keycodes_basic.md b/docs/keycodes_basic.md
index cba876d346..6f21cabd2a 100644
--- a/docs/keycodes_basic.md
+++ b/docs/keycodes_basic.md
@@ -97,14 +97,14 @@ The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07
## Lock Keys
-|Key |Aliases |Description |
-|-------------------|--------------------|-------------------------|
-|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS`|Caps Lock |
-|`KC_SCROLLLOCK` |`KC_SLCK` |Scroll Lock |
-|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear|
-|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
-|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
-|`KC_LOCKING_SCROLL`|`KC_LSCR` |Locking Scroll Lock |
+|Key |Aliases |Description |
+|-------------------|--------------------|------------------------------------|
+|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS`|Caps Lock |
+|`KC_SCROLLLOCK` |`KC_SLCK`, `KC_BRMD`|Scroll Lock, Brightness Down (macOS)|
+|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear |
+|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
+|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
+|`KC_LOCKING_SCROLL`|`KC_LSCR` |Locking Scroll Lock |
## Modifiers
@@ -144,48 +144,48 @@ The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07
## Commands
-|Key |Aliases |Description |
-|------------------|-------------------|------------------------------|
-|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
-|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`|Pause |
-|`KC_INSERT` |`KC_INS` |Insert |
-|`KC_HOME` | |Home |
-|`KC_PGUP` | |Page Up |
-|`KC_DELETE` |`KC_DEL` |Forward Delete |
-|`KC_END` | |End |
-|`KC_PGDOWN` |`KC_PGDN` |Page Down |
-|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
-|`KC_LEFT` | |Left Arrow |
-|`KC_DOWN` | |Down Arrow |
-|`KC_UP` | |Up Arrow |
-|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key)|
-|`KC_POWER` | |System Power (macOS/Linux) |
-|`KC_EXECUTE` |`KC_EXEC` |Execute |
-|`KC_HELP` | |Help |
-|`KC_MENU` | |Menu |
-|`KC_SELECT` |`KC_SLCT` |Select |
-|`KC_STOP` | |Stop |
-|`KC_AGAIN` |`KC_AGIN` |Again |
-|`KC_UNDO` | |Undo |
-|`KC_CUT` | |Cut |
-|`KC_COPY` | |Copy |
-|`KC_PASTE` |`KC_PSTE` |Paste |
-|`KC_FIND` | |Find |
-|`KC__MUTE` | |Mute (macOS) |
-|`KC__VOLUP` | |Volume Up (macOS) |
-|`KC__VOLDOWN` | |Volume Down (macOS) |
-|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
-|`KC_SYSREQ` | |SysReq/Attention |
-|`KC_CANCEL` | |Cancel |
-|`KC_CLEAR` |`KC_CLR` |Clear |
-|`KC_PRIOR` | |Prior |
-|`KC_RETURN` | |Return |
-|`KC_SEPARATOR` | |Separator |
-|`KC_OUT` | |Out |
-|`KC_OPER` | |Oper |
-|`KC_CLEAR_AGAIN` | |Clear/Again |
-|`KC_CRSEL` | |CrSel/Props |
-|`KC_EXSEL` | |ExSel |
+|Key |Aliases |Description |
+|------------------|------------------------------|------------------------------|
+|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
+|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |
+|`KC_INSERT` |`KC_INS` |Insert |
+|`KC_HOME` | |Home |
+|`KC_PGUP` | |Page Up |
+|`KC_DELETE` |`KC_DEL` |Forward Delete |
+|`KC_END` | |End |
+|`KC_PGDOWN` |`KC_PGDN` |Page Down |
+|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
+|`KC_LEFT` | |Left Arrow |
+|`KC_DOWN` | |Down Arrow |
+|`KC_UP` | |Up Arrow |
+|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key)|
+|`KC_POWER` | |System Power (macOS/Linux) |
+|`KC_EXECUTE` |`KC_EXEC` |Execute |
+|`KC_HELP` | |Help |
+|`KC_MENU` | |Menu |
+|`KC_SELECT` |`KC_SLCT` |Select |
+|`KC_STOP` | |Stop |
+|`KC_AGAIN` |`KC_AGIN` |Again |
+|`KC_UNDO` | |Undo |
+|`KC_CUT` | |Cut |
+|`KC_COPY` | |Copy |
+|`KC_PASTE` |`KC_PSTE` |Paste |
+|`KC_FIND` | |Find |
+|`KC__MUTE` | |Mute (macOS) |
+|`KC__VOLUP` | |Volume Up (macOS) |
+|`KC__VOLDOWN` | |Volume Down (macOS) |
+|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
+|`KC_SYSREQ` | |SysReq/Attention |
+|`KC_CANCEL` | |Cancel |
+|`KC_CLEAR` |`KC_CLR` |Clear |
+|`KC_PRIOR` | |Prior |
+|`KC_RETURN` | |Return |
+|`KC_SEPARATOR` | |Separator |
+|`KC_OUT` | |Out |
+|`KC_OPER` | |Oper |
+|`KC_CLEAR_AGAIN` | |Clear/Again |
+|`KC_CRSEL` | |CrSel/Props |
+|`KC_EXSEL` | |ExSel |
## Media Keys
diff --git a/docs/proton_c_conversion.md b/docs/proton_c_conversion.md
new file mode 100644
index 0000000000..be7d50a9f4
--- /dev/null
+++ b/docs/proton_c_conversion.md
@@ -0,0 +1,21 @@
+# Converting a board to use the Proton C
+
+If a board currently supported in QMK uses a Pro Micro (or compatible board) and you want to use the Proton C, you can generate the firmware by appending `CONVERT_TO_PROTON_C=yes` (or `CTPC=yes`) to your make argument, like this:
+
+ make 40percentclub/mf68:default CTPC=yes
+
+You can add the same argument to your keymap's `rules.mk`, which will accomplish the same thing.
+
+This exposes the `CONVERT_TO_PROTON_C` flag that you can use in your code with `#ifdef`s, like this:
+
+ #ifdef CONVERT_TO_PROTON_C
+ // Proton C code
+ #else
+ // Pro Micro code
+ #endif
+
+Before being able to compile, you may get some errors about `PORTB/DDRB`, etc not being defined, so you'll need to convert the keyboard's code to use the [GPIO Controls](internals_gpio_control.md) that will work for both ARM and AVR. This shouldn't affect the AVR builds at all.
+
+The Proton C only has one on-board LED (C13), and by default, the TXLED (D5) is mapped to it. If you want the RXLED (B0) mapped to it instead, add this like to your `config.h`:
+
+ #define CONVERT_TO_PROTON_C_RXLED
diff --git a/docs/understanding_qmk.md b/docs/understanding_qmk.md
index 35596cc692..20ead2b3f5 100644
--- a/docs/understanding_qmk.md
+++ b/docs/understanding_qmk.md
@@ -12,7 +12,7 @@ You can think of QMK as no different from any other computer program. It is star
The reason for this is the different platforms that QMK supports. The most common platform is `lufa`, which runs on AVR processors such at the atmega32u4. We also support `chibios` and `vusb`.
-We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/protocol/lufa/lufa.c#L1019). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/protocol/lufa/lufa.c#L1060). This is [The Main Loop](#the-main-loop).
+We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/protocol/lufa/lufa.c#L1028). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/protocol/lufa/lufa.c#L1069). This is [The Main Loop](#the-main-loop).
## The Main Loop
@@ -22,7 +22,7 @@ This section of code is called "The Main Loop" because it's responsible for loop
keyboard_task();
```
-This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/common/keyboard.c#L206), and it is responsible for detecting changes in the matrix and turning status LED's on and off.
+This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/common/keyboard.c#L216), and it is responsible for detecting changes in the matrix and turning status LED's on and off.
Within `keyboard_task()` you'll find code to handle:
@@ -77,7 +77,7 @@ At the keyboard level we define a C macro (typically named `KEYMAP()`) which map
Notice how the second block of our `KEYMAP()` macro matches the Matrix Scanning array above? This macro is what will map the matrix scanning array to keycodes. However, if you look at a 17 key numpad you'll notice that it has 3 places where the matrix could have a switch but doesn't, due to larger keys. We have populated those spaces with `KC_NO` so that our keymap definition doesn't have to.
-You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
+You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
##### Keycode Assignment
@@ -130,31 +130,33 @@ Comparing against our keymap we can see that the pressed key is KC_NLCK. From he
##### Process Record
-The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is listed below, using cluecard whenever we need to look at the keyboard/keymap level functions. Depending on options set in rule.mk or elsewhere, only a subset of the functions below will be included in final firmware.
-
-* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/tmk_core/common/action.c#L172)
- * [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/quantum.c#L193)
- * [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/quantum.c#L213)
- * [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_tap_dance.c#L115)
- * [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_key_lock.c#L62)
- * [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_clicky.c#L44)
- * [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/keyboards/clueboard/card/card.c#L20)
- * [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
- * [`bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/fdd0f915271f79b104aa5d216566bcc3fd134e85/quantum/rgb_matrix.c#L139)
- * [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_midi.c#L81)
- * [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_audio.c#L19)
- * [`bool process_steno(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_steno.c#L160)
- * [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_music.c#L114)
- * [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_tap_dance.c#L136)
- * [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_leader.c#L38)
- * [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_combo.c#L115)
- * [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_unicode.c#L22)
- * [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_ucis.c#L91)
- * [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_printer.c#L77)
- * [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_auto_shift.c#L94)
- * [`bool process_unicode_map(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_unicodemap.c#L47)
- * [`bool process_terminal(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_terminal.c#L264)
- * [Identify and process quantum specific keycodes](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/quantum.c#L287)
+The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is listed below, using cluecard whenever we need to look at the keyboard/keymap level functions. Depending on options set in `rules.mk` or elsewhere, only a subset of the functions below will be included in final firmware.
+
+* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/common/action.c#L172)
+ * [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L206)
+ * [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L226)
+ * [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L119)
+ * [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_key_lock.c#L62)
+ * [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_clicky.c#L79)
+ * [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/card.c#L20)
+ * [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
+ * [`bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/rgb_matrix.c#L139)
+ * [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_midi.c#L81)
+ * [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_audio.c#L19)
+ * [`bool process_steno(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_steno.c#L160)
+ * [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_music.c#L114)
+ * [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L141)
+ * [`bool process_unicode_common(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicode_common.c#L169)
+ calls one of:
+ * [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicode.c#L20)
+ * [`bool process_unicodemap(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicodemap.c#L46)
+ * [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_ucis.c#L95)
+ * [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_leader.c#L51)
+ * [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_combo.c#L115)
+ * [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_printer.c#L77)
+ * [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_auto_shift.c#L94)
+ * [`bool process_terminal(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_terminal.c#L264)
+ * [Identify and process Quantum-specific keycodes](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L291)
At any step during this chain of events a function (such as `process_record_kb()`) can `return false` to halt all further processing.
diff --git a/docs/zh/_sidebar.md b/docs/zh/_summary.md
index c167612929..c167612929 100644
--- a/docs/zh/_sidebar.md
+++ b/docs/zh/_summary.md
diff --git a/drivers/avr/i2c_master.c b/drivers/avr/i2c_master.c
index a04e6570d7..19bae33e9f 100755
--- a/drivers/avr/i2c_master.c
+++ b/drivers/avr/i2c_master.c
@@ -179,6 +179,9 @@ i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16
status = i2c_write(regaddr, timeout);
if (status) return status;
+ status = i2c_stop(timeout);
+ if (status) return status;
+
status = i2c_start(devaddr | 0x01, timeout);
if (status) return status;
@@ -217,4 +220,4 @@ i2c_status_t i2c_stop(uint16_t timeout)
}
return I2C_STATUS_SUCCESS;
-} \ No newline at end of file
+}
diff --git a/drivers/avr/i2c_slave.c b/drivers/avr/i2c_slave.c
index 27696ca01a..18a29a45a5 100755
--- a/drivers/avr/i2c_slave.c
+++ b/drivers/avr/i2c_slave.c
@@ -9,23 +9,26 @@
#include "i2c_slave.h"
-void i2c_init(uint8_t address){
+volatile uint8_t i2c_slave_reg[I2C_SLAVE_REG_COUNT];
+
+static volatile uint8_t buffer_address;
+static volatile bool slave_has_register_set = false;
+
+void i2c_slave_init(uint8_t address){
// load address into TWI address register
TWAR = (address << 1);
// set the TWCR to enable address matching and enable TWI, clear TWINT, enable TWI interrupt
TWCR = (1 << TWIE) | (1 << TWEA) | (1 << TWINT) | (1 << TWEN);
}
-void i2c_stop(void){
+void i2c_slave_stop(void){
// clear acknowledge and enable bits
TWCR &= ~((1 << TWEA) | (1 << TWEN));
}
ISR(TWI_vect){
uint8_t ack = 1;
- // temporary stores the received data
- //uint8_t data;
-
+
switch(TW_STATUS){
case TW_SR_SLA_ACK:
// The device is now a slave receiver
@@ -38,13 +41,13 @@ ISR(TWI_vect){
if(!slave_has_register_set){
buffer_address = TWDR;
- if (buffer_address >= RX_BUFFER_SIZE){ // address out of bounds dont ack
- ack = 0;
- buffer_address = 0;
+ if (buffer_address >= I2C_SLAVE_REG_COUNT) { // address out of bounds dont ack
+ ack = 0;
+ buffer_address = 0;
}
slave_has_register_set = true; // address has been receaved now fill in buffer
} else {
- rxbuffer[buffer_address] = TWDR;
+ i2c_slave_reg[buffer_address] = TWDR;
buffer_address++;
}
break;
@@ -52,7 +55,7 @@ ISR(TWI_vect){
case TW_ST_SLA_ACK:
case TW_ST_DATA_ACK:
// This device is a slave transmitter and master has requested data
- TWDR = txbuffer[buffer_address];
+ TWDR = i2c_slave_reg[buffer_address];
buffer_address++;
break;
@@ -63,6 +66,6 @@ ISR(TWI_vect){
break;
}
- // Reset i2c state mahcine to be ready for next interrupt
+ // Reset i2c state machine to be ready for next interrupt
TWCR |= (1 << TWIE) | (1 << TWINT) | (ack << TWEA) | (1 << TWEN);
} \ No newline at end of file
diff --git a/drivers/avr/i2c_slave.h b/drivers/avr/i2c_slave.h
index 1c3b9ecc00..7b5dcbdc3e 100755
--- a/drivers/avr/i2c_slave.h
+++ b/drivers/avr/i2c_slave.h
@@ -8,16 +8,11 @@
#ifndef I2C_SLAVE_H
#define I2C_SLAVE_H
-#define TX_BUFFER_SIZE 30
-#define RX_BUFFER_SIZE 30
+#define I2C_SLAVE_REG_COUNT 30
-volatile uint8_t buffer_address;
-static volatile bool slave_has_register_set = false;
-volatile uint8_t txbuffer[TX_BUFFER_SIZE];
-volatile uint8_t rxbuffer[RX_BUFFER_SIZE];
+extern volatile uint8_t i2c_slave_reg[I2C_SLAVE_REG_COUNT];
-void i2c_init(uint8_t address);
-void i2c_stop(void);
-ISR(TWI_vect);
+void i2c_slave_init(uint8_t address);
+void i2c_slave_stop(void);
#endif // I2C_SLAVE_H \ No newline at end of file
diff --git a/keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.c b/drivers/boards/GENERIC_STM32_F303XC/board.c
index 4331155df4..4331155df4 100644
--- a/keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.c
+++ b/drivers/boards/GENERIC_STM32_F303XC/board.c
diff --git a/keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.h b/drivers/boards/GENERIC_STM32_F303XC/board.h
index ec26557f3a..11120dfd74 100644
--- a/keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.h
+++ b/drivers/boards/GENERIC_STM32_F303XC/board.h
@@ -18,14 +18,14 @@
#define _BOARD_H_
/*
- * Setup for Clueboard 60% Keyboard
+ * Setup for Generic STM32_F303 Board
*/
/*
* Board identifier.
*/
#define BOARD_GENERIC_STM32_F303XC
-#define BOARD_NAME "Planck PCB"
+#define BOARD_NAME "STM32_F303"
/*
* Board oscillators-related settings.
diff --git a/keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.mk b/drivers/boards/GENERIC_STM32_F303XC/board.mk
index 43377629a3..43377629a3 100644
--- a/keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.mk
+++ b/drivers/boards/GENERIC_STM32_F303XC/board.mk
diff --git a/keyboards/clueboard/60/bootloader_defs.h b/drivers/boards/GENERIC_STM32_F303XC/bootloader_defs.h
index 3b0e9d20a6..3b0e9d20a6 100644
--- a/keyboards/clueboard/60/bootloader_defs.h
+++ b/drivers/boards/GENERIC_STM32_F303XC/bootloader_defs.h
diff --git a/drivers/issi/is31fl3733.c b/drivers/issi/is31fl3733.c
index c198ec5174..c18ed7ca30 100644
--- a/drivers/issi/is31fl3733.c
+++ b/drivers/issi/is31fl3733.c
@@ -24,10 +24,10 @@
#include "wait.h"
#endif
+#include "is31fl3733.h"
#include <string.h>
#include "i2c_master.h"
#include "progmem.h"
-#include "rgb_matrix.h"
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c
index 2ddf8acb41..899afaba17 100644
--- a/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c
@@ -6,9 +6,9 @@ enum custom_keycodes {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT_ortho_4x4(
- KC_7, KC_8, KC_9, KC_ASTR,
- KC_4, KC_5, KC_6, KC_SLSH,
- KC_1, KC_2, KC_3, KC_MINS,
+ KC_7, KC_8, KC_9, KC_ASTR,
+ KC_4, KC_5, KC_6, KC_SLSH,
+ KC_1, KC_2, KC_3, KC_MINS,
KC_0, KC_ENT, KC_DOT, KC_EQL
)
};
@@ -27,6 +27,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
void led_set_user(uint8_t usb_led) {
+ #ifndef CONVERT_TO_PROTON_C
/* Map RXLED to USB_LED_NUM_LOCK */
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
DDRB |= (1 << 0); PORTB &= ~(1 << 0);
@@ -40,4 +41,5 @@ void led_set_user(uint8_t usb_led) {
} else {
DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
}
+ #endif
}
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c
new file mode 100644
index 0000000000..caab5b343a
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c
@@ -0,0 +1,31 @@
+#include QMK_KEYBOARD_H
+#include "switches.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ortho_4x4(
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
+
+struct mechswitch switches[MATRIX_ROWS][MATRIX_COLS] = {
+ {CHERRY_MX_BLUE, CHERRY_MX_RED, CHERRY_MX_BLACK, CHERRY_MX_BROWN},
+ {GATERON_BLUE, GATERON_RED, GATERON_BLACK, GATERON_BROWN},
+ {KAILH_BLUE, KAILH_RED, KAILH_BLACK, KAILH_BROWN},
+ {HAKO_CLEAR, HAKO_TRUE, HAKO_VIOLET, HAKO_ROYAL_TRUE}
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint8_t col = record->event.key.col;
+ uint8_t row = record->event.key.row;
+
+ if (record->event.pressed) {
+ char name[MAX_SWITCH_NAME_LENGTH];
+ switch_name(switches[row][col], name);
+ send_string(name);
+ SEND_STRING("\n");
+ }
+ return false;
+}
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/readme.md b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/readme.md
new file mode 100644
index 0000000000..9edb4e1813
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/readme.md
@@ -0,0 +1,5 @@
+# Sweet16 as a switch tester
+
+This keymap uses the Sweet16 as a switch tester. The functionality outputs the switch name of whatever key the user pressed.
+
+the `switches` two-dimensional (4x4) array contains the switches attached to the macropad. The switches supported are defined as macros in the `switches.h` header file.
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/rules.mk b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/rules.mk
new file mode 100644
index 0000000000..c0f2d0182d
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/rules.mk
@@ -0,0 +1,12 @@
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = no
+
+SRC += switches.c
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c
new file mode 100644
index 0000000000..ae37995448
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c
@@ -0,0 +1,99 @@
+#include <stdio.h>
+#include <string.h>
+#include "switches.h"
+
+static const char *BRAND_NAMES[] = {
+ "Kailh",
+ "Kailh Low Profile Choc",
+ "Gateron",
+ "Cherry MX",
+ "Cherry ML",
+ "Outemu",
+ "Greetech",
+ "Varmilo",
+ "MOD",
+ "Hako"
+};
+
+static const char *COLOR_NAMES[] = {
+ "",
+ "White",
+ "Black",
+ "Blue",
+ "Red",
+ "Yellow",
+ "Brown",
+ "Green",
+ "Clear",
+ "Silver",
+ "Nature White",
+ "Grey",
+ "Jade",
+ "Navy",
+ "Burnt Orange",
+ "Pale Blue",
+ "Dark Yellow",
+ "Gold",
+ "Chocolate White",
+ "Burgundy",
+ "Purple",
+ "Light Green",
+ "True",
+ "Berry",
+ "Plum",
+ "Sage",
+ "Violet",
+ "L",
+ "M",
+ "H",
+ "SH"
+};
+
+static const char *VARIANT_NAMES[] = {
+ "",
+ "BOX",
+ "BOX Thick",
+ "BOX Heavy",
+ "Silent",
+ "Tactile",
+ "Linear",
+ "Speed",
+ "Speed Heavy",
+ "Speed Thick Click",
+ "Pro",
+ "Pro Heavy",
+ "Royal",
+ "Thick Click",
+ "Heavy"
+};
+
+const char *brand_name(struct mechswitch ms) {
+ return BRAND_NAMES[ms.brand - 1];
+}
+
+const char *variant_name(struct mechswitch ms) {
+ return VARIANT_NAMES[ms.variant];
+}
+
+const char *color_name(struct mechswitch ms) {
+ return COLOR_NAMES[ms.color];
+}
+
+void switch_name(struct mechswitch ms, char *buf) {
+ const char *v_name = variant_name(ms);
+ const char *c_name = color_name(ms);
+
+ snprintf(buf, MAX_SWITCH_NAME_LENGTH, "%s", brand_name(ms));
+ strncat(buf, " ", MAX_SWITCH_NAME_LENGTH - strlen(buf));
+ if (strlen(v_name) > 0) {
+ strncat(buf, v_name, MAX_SWITCH_NAME_LENGTH - strlen(buf));
+ strncat(buf, " ", MAX_SWITCH_NAME_LENGTH - strlen(buf));
+ }
+ if (strlen(c_name) > 0) {
+ strncat(buf, c_name, MAX_SWITCH_NAME_LENGTH - strlen(buf));
+ }
+}
+
+int bitfieldtoi(struct mechswitch ms) {
+ return ((ms.brand << 9) | (ms.variant << 5) | ms.color);
+}
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h
new file mode 100644
index 0000000000..6e58068bf5
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h
@@ -0,0 +1,189 @@
+#pragma once
+
+struct mechswitch
+{
+ unsigned int brand: 4;
+ unsigned int variant: 4;
+ unsigned int color: 5;
+};
+
+#define MAX_SWITCH_NAME_LENGTH 256
+
+#define BRAND_KAILH 1
+#define BRAND_KAILH_LOW 2
+#define BRAND_GATERON 3
+#define BRAND_CHERRY_MX 4
+#define BRAND_CHERRY_ML 5
+#define BRAND_OUTEMU 6
+#define BRAND_GREETECH 7
+#define BRAND_VARMILO 8
+#define BRAND_MOD 9
+#define BRAND_HAKO 10
+
+#define COLOR_NO 0
+#define COLOR_WHITE 1
+#define COLOR_BLACK 2
+#define COLOR_BLUE 3
+#define COLOR_RED 4
+#define COLOR_YELLOW 5
+#define COLOR_BROWN 6
+#define COLOR_GREEN 7
+#define COLOR_CLEAR 8
+#define COLOR_SILVER 9
+#define COLOR_NATURE_WHITE 10
+#define COLOR_GREY 11
+#define COLOR_JADE 12
+#define COLOR_NAVY 13
+#define COLOR_BURNT_ORANGE 14
+#define COLOR_PALE_BLUE 15
+#define COLOR_DARK_YELLOW 16
+#define COLOR_GOLD 17
+#define COLOR_CHOCOLATE_WHITE 18
+#define COLOR_BURGUNDY 19
+#define COLOR_PURPLE 20
+#define COLOR_LIGHT_GREEN 21
+#define COLOR_TRUE 22
+#define COLOR_BERRY 23
+#define COLOR_PLUM 24
+#define COLOR_SAGE 25
+#define COLOR_VIOLET 26
+#define COLOR_L 27
+#define COLOR_M 28
+#define COLOR_H 29
+#define COLOR_SH 30
+
+#define VARIANT_NO 0
+#define VARIANT_BOX 1
+#define VARIANT_BOX_THICK 2
+#define VARIANT_BOX_HEAVY 3
+#define VARIANT_SILENT 4
+#define VARIANT_TACTILE 5
+#define VARIANT_LINEAR 6
+#define VARIANT_SPEED 7
+#define VARIANT_SPEED_HEAVY 8
+#define VARIANT_SPEED_CLICK_THICK 9
+#define VARIANT_PRO 10
+#define VARIANT_PRO_HEAVY 11
+#define VARIANT_ROYAL 12
+#define VARIANT_CLICK_THICK 13
+
+#define CHERRY_MX_BLUE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BLUE}
+#define CHERRY_MX_RED {BRAND_CHERRY_MX, VARIANT_NO, COLOR_RED}
+#define CHERRY_MX_BROWN {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BROWN}
+#define CHERRY_MX_BLACK {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BLACK}
+#define CHERRY_MX_GREEN {BRAND_CHERRY_MX, VARIANT_NO, COLOR_GREEN}
+#define CHERRY_MX_CLEAR {BRAND_CHERRY_MX, VARIANT_NO, COLOR_CLEAR}
+#define CHERRY_MX_WHITE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_WHITE}
+#define CHERRY_MX_SILVER {BRAND_CHERRY_MX, VARIANT_NO, COLOR_SILVER}
+#define CHERRY_MX_NATURE_WHITE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_NATURE_WHITE}
+#define CHERRY_MX_SILENT_BLACK {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_BLACK}
+#define CHERRY_MX_SILENT_RED {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_RED}
+#define CHERRY_MX_TACTILE_BLACK {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_GREY}
+#define CHERRY_MX_LINEAR_BLACK {BRAND_CHERRY_MX, VARIANT_LINEAR, COLOR_GREY}
+
+#define CHERRY_ML {BRAND_CHERRY_ML, VARIANT_NO, COLOR_NO}
+
+#define GATERON_BLUE {BRAND_GATERON, VARIANT_NO, COLOR_BLUE}
+#define GATERON_BROWN {BRAND_GATERON, VARIANT_NO, COLOR_BROWN}
+#define GATERON_BLACK {BRAND_GATERON, VARIANT_NO, COLOR_BLACK}
+#define GATERON_RED {BRAND_GATERON, VARIANT_NO, COLOR_RED}
+#define GATERON_CLEAR {BRAND_GATERON, VARIANT_NO, COLOR_CLEAR}
+#define GATERON_GREEN {BRAND_GATERON, VARIANT_NO, COLOR_GREEN}
+#define GATERON_YELLOW {BRAND_GATERON, VARIANT_NO, COLOR_YELLOW}
+
+#define GATERON_SILENT_CLEAR {BRAND_GATERON, VARIANT_SILENT, COLOR_CLEAR}
+#define GATERON_SILENT_RED {BRAND_GATERON, VARIANT_SILENT, COLOR_RED}
+#define GATERON_SILENT_YELLOW {BRAND_GATERON, VARIANT_SILENT, COLOR_YELLOW}
+#define GATERON_SILENT_BLACK {BRAND_GATERON, VARIANT_SILENT, COLOR_BLACK}
+#define GATERON_SILENT_BROWN {BRAND_GATERON, VARIANT_SILENT, COLOR_BROWN}
+
+#define GREETECH_BLUE {BRAND_GREETECH, VARIANT_NO, COLOR_BLUE}
+#define GREETECH_BROWN {BRAND_GREETECH, VARIANT_NO, COLOR_BROWN}
+#define GREETECH_BLACK {BRAND_GREETECH, VARIANT_NO, COLOR_BLACK}
+#define GREETECH_RED {BRAND_GREETECH, VARIANT_NO, COLOR_RED}
+
+#define OUTEMU_BLUE {BRAND_OUTEMU, VARIANT_NO, COLOR_BLUE}
+#define OUTEMU_BROWN {BRAND_OUTEMU, VARIANT_NO, COLOR_BROWN}
+#define OUTEMU_BLACK {BRAND_OUTEMU, VARIANT_NO, COLOR_BLACK}
+#define OUTEMU_RED {BRAND_OUTEMU, VARIANT_NO, COLOR_RED}
+
+#define KAILH_BLUE {BRAND_KAILH, VARIANT_NO, COLOR_BLUE}
+#define KAILH_BROWN {BRAND_KAILH, VARIANT_NO, COLOR_BROWN}
+#define KAILH_BLACK {BRAND_KAILH, VARIANT_NO, COLOR_BLACK}
+#define KAILH_RED {BRAND_KAILH, VARIANT_NO, COLOR_RED}
+#define KAILH_GREEN {BRAND_KAILH, VARIANT_NO, COLOR_GREEN}
+
+#define KAILH_BOX_WHITE {BRAND_KAILH, VARIANT_BOX, COLOR_WHITE}
+#define KAILH_BOX_RED {BRAND_KAILH, VARIANT_BOX, COLOR_RED}
+#define KAILH_BOX_BLACK {BRAND_KAILH, VARIANT_BOX, COLOR_BLACK}
+#define KAILH_BOX_BROWN {BRAND_KAILH, VARIANT_BOX, COLOR_BROWN}
+#define KAILH_BOX_ROYAL {BRAND_KAILH, VARIANT_BOX, COLOR_ROYAL}
+
+#define KAILH_BOX_THICK_JADE {BRAND_KAILH, VARIANT_BOX_THICK, COLOR_JADE}
+#define KAILH_BOX_THICK_NAVY {BRAND_KAILH, VARIANT_BOX_THICK, COLOR_NAVY}
+#define KAILH_BOX_HEAVY_BURNT_ORANGE {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_BURNT_ORANGE}
+#define KAILH_BOX_HEAVY_PALE_BLUE {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_PALE_BLUE}
+#define KAILH_BOX_HEAVY_DARK_YELLOW {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_DARK_YELLOW}
+
+#define KAILH_SPEED_BRONZE {BRAND_KAILH, VARIANT_SPEED, COLOR_BRONZE}
+#define KAILH_SPEED_COPPER {BRAND_KAILH, VARIANT_SPEED, COLOR_COPPER}
+#define KAILH_SPEED_GOLD {BRAND_KAILH, VARIANT_SPEED, COLOR_GOLD}
+#define KAILH_SPEED_SILVER {BRAND_KAILH, VARIANT_SPEED, COLOR_SILVER}
+
+#define KAILH_SPEED_HEAVY_BURNT_ORANGE {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_BURNT_ORANGE}
+#define KAILH_SPEED_HEAVY_PALE_BLUE {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_PALE_BLUE}
+#define KAILH_SPEED_HEAVY_DARK_YELLOW {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_DARK_YELLOW}
+
+#define KAILH_SPEED_THICK_CLICK_NAVY {BRAND_KAILH, VARIANT_SPEED_CLICK_THICK, COLOR_NAVY}
+
+#define KAILH_PRO_BURGUNDY {BRAND_KAILH, VARIANT_PRO, COLOR_BURGUNDY}
+#define KAILH_PRO_PURPLE {BRAND_KAILH, VARIANT_PRO, COLOR_PURPLE}
+#define KAILH_PRO_LIGHT_GREEN {BRAND_KAILH, VARIANT_PRO, COLOR_LIGHT_GREEN}
+
+#define KAILH_PRO_HEAVY_BERRY {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_BERRY}
+#define KAILH_PRO_HEAVY_PLUM {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_PLUM}
+#define KAILH_PRO_GEAVY_SAGE {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_SAGE}
+
+#define KAILH_LOW_WHITE {BRAND_KAILH_LOW, VARIANT_NO, COLOR_WHITE}
+#define KAILH_LOW_BROWN {BRAND_KAILH_LOW, VARIANT_NO, COLOR_BROWN}
+#define KAILH_LOW_RED {BRAND_KAILH_LOW, VARIANT_NO, COLOR_RED}
+#define KAILH_LOW_CHOCOLATE_WHITE {BRAND_KAILH_LOW, VARIANT_NO, COLOR_CHOCOLATE_WHITE}
+#define KAILH_LOW_THICK_CLICK_NAVY {BRAND_KAILH_LOW, VARIANT_THICK_CLICK, COLOR_NAVY}
+#define KAILH_LOW_THICK_CLICK_JADE {BRAND_KAILH_LOW, VARIANT_THICK_CLICK, COLOR_JADE}
+#define KAILH_LOW_HEAVY_DARK_YELLOW {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_DARK_YELLOW}
+#define KAILH_LOW_HEAVY_BURNT_ORANGE {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_BURNT_ORANGE}
+#define KAILH_LOW_HEAVY_PALE_BLUE {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_PALE_BLUE}
+
+#define HAKO_ROYAL_CLEAR {BRAND_HAKO, VARIANT_ROYAL, COLOR_CLEAR}
+#define HAKO_ROYAL_TRUE {BRAND_HAKO, VARIANT_ROYAL, COLOR_TRUE}
+
+#define HAKO_CLEAR {BRAND_HAKO, VARIANT_NO, COLOR_CLEAR}
+#define HAKO_TRUE {BRAND_HAKO, VARIANT_NO, COLOR_TRUE}
+#define HAKO_VIOLET {BRAND_HAKO, VARIANT_NO, COLOR_VIOLET}
+
+#define MOD_L_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_L}
+#define MOD_M_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_M}
+#define MOD_H_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_H}
+#define MOD_SH_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_SH}
+
+#define MOD_L_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_L}
+#define MOD_M_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_M}
+#define MOD_H_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_H}
+
+#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
+#define BYTE_TO_BINARY(byte) \
+ (byte & 0x80 ? '1' : '0'), \
+ (byte & 0x40 ? '1' : '0'), \
+ (byte & 0x20 ? '1' : '0'), \
+ (byte & 0x10 ? '1' : '0'), \
+ (byte & 0x08 ? '1' : '0'), \
+ (byte & 0x04 ? '1' : '0'), \
+ (byte & 0x02 ? '1' : '0'), \
+ (byte & 0x01 ? '1' : '0')
+
+
+const char *brand_name(struct mechswitch ms);
+const char *variant_name(struct mechswitch ms);
+const char *color_name(struct mechswitch ms);
+void switch_name(struct mechswitch ms, char *buf);
+int bitfieldtoi(struct mechswitch ms);
diff --git a/keyboards/40percentclub/luddite/info.json b/keyboards/40percentclub/luddite/info.json
index 51d71ec772..e3c5fa9f9d 100644
--- a/keyboards/40percentclub/luddite/info.json
+++ b/keyboards/40percentclub/luddite/info.json
@@ -1,12 +1,74 @@
{
- "keyboard_name": "foobar",
- "url": "",
- "maintainer": "qmk",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT_60_ansi": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- }
+ "keyboard_name": "Luddite",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
}
+ }
}
diff --git a/keyboards/40percentclub/ut47/readme.md b/keyboards/40percentclub/ut47/readme.md
index bbae1384a9..31be1d9f77 100644
--- a/keyboards/40percentclub/ut47/readme.md
+++ b/keyboards/40percentclub/ut47/readme.md
@@ -33,7 +33,7 @@ Go to the [default layout README](keymaps/default/readme.md) for more informatio
Credit: Forked from [di0ib TMK version](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gnap)
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
### Build Guide
diff --git a/keyboards/412_64/keymaps/default/keymap.c b/keyboards/412_64/keymaps/default/keymap.c
index c098a37e5e..405c563056 100644
--- a/keyboards/412_64/keymaps/default/keymap.c
+++ b/keyboards/412_64/keymaps/default/keymap.c
@@ -71,12 +71,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
keyevent_t event = record->event;
(void)event;
diff --git a/keyboards/6ball/keymaps/default/rules.mk b/keyboards/6ball/keymaps/default/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/6ball/keymaps/default/rules.mk
+++ b/keyboards/6ball/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/6ball/readme.md b/keyboards/6ball/readme.md
index 7316a98169..c9548453a9 100644
--- a/keyboards/6ball/readme.md
+++ b/keyboards/6ball/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make 6ball:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/9key/keymaps/default/rules.mk b/keyboards/9key/keymaps/default/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/9key/keymaps/default/rules.mk
+++ b/keyboards/9key/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/9key/readme.md b/keyboards/9key/readme.md
index 8c66991293..89629cc8c7 100644
--- a/keyboards/9key/readme.md
+++ b/keyboards/9key/readme.md
@@ -14,4 +14,4 @@ Make example for this keyboard (after setting up your build environment):
make 9key:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/acr60/readme.md b/keyboards/acr60/readme.md
index a0ba2ecdea..54ea265f1c 100644
--- a/keyboards/acr60/readme.md
+++ b/keyboards/acr60/readme.md
@@ -15,4 +15,4 @@ Make example for this keyboard (after setting up your build environment):
make acr60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/al1/keymaps/splitbs/keymap.c b/keyboards/al1/keymaps/splitbs/keymap.c
index 095c9b9785..42bdfc7ec1 100644
--- a/keyboards/al1/keymaps/splitbs/keymap.c
+++ b/keyboards/al1/keymaps/splitbs/keymap.c
@@ -15,10 +15,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_TRNS, KC_RGUI, KC_RCTRL, BL_TOGG, BL_DEC, BL_INC, KC_P0, KC_PDOT ),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/al1/readme.md b/keyboards/al1/readme.md
index 0032885ff3..bdb336a750 100644
--- a/keyboards/al1/readme.md
+++ b/keyboards/al1/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make al1:default
make al1:splitbs
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/alf/dc60/dc60.h b/keyboards/alf/dc60/dc60.h
index 30e05b31f0..db5154a28c 100644
--- a/keyboards/alf/dc60/dc60.h
+++ b/keyboards/alf/dc60/dc60.h
@@ -24,19 +24,19 @@
// layout of the board and position of the keys
// The second converts the arguments into a two-dimensional array which
// represents the switch matrix.
-#define LAYOUT( \
+#define LAYOUT_all( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KOD, KOE, \
K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
K40, K42, K43, K45, K47, K48, K4A, K4B, K4C, K4D, K4E \
) \
{ \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KOD, KOE }, \
- { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
- { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
- { K40, KC_NO, K42, K43, KC_NO, K45, KC_NO, K47, K48, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KOD, KOE }, \
+ { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, KC_NO, K42, K43, KC_NO, K45, KC_NO, K47, K48, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
}
#endif
diff --git a/keyboards/alf/dc60/info.json b/keyboards/alf/dc60/info.json
index 3929545205..1c3ebf4f0a 100644
--- a/keyboards/alf/dc60/info.json
+++ b/keyboards/alf/dc60/info.json
@@ -2,11 +2,12 @@
"keyboard_name": "dc60",
"url": "",
"maintainer": "qmk",
+ "bootloader": "",
"width": 15,
"height": 5,
"layouts": {
- "LAYOUT": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
+ "LAYOUT_all": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.75}, {"x":6.5, "y":4, "w":1.25}, {"x":7.75, "y":4, "w":2.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
}
}
} \ No newline at end of file
diff --git a/keyboards/alf/dc60/keymaps/default/keymap.c b/keyboards/alf/dc60/keymaps/default/keymap.c
index b7425178bc..a4385bcc0b 100644
--- a/keyboards/alf/dc60/keymaps/default/keymap.c
+++ b/keyboards/alf/dc60/keymaps/default/keymap.c
@@ -16,27 +16,23 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_all(
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,
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_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_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_NO,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_SPACE, KC_SPACE, KC_RALT, MO(1), KC_RGUI, KC_RGUI, KC_RCTL
+ KC_LSFT, 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_SPACE, KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
),
- [1] = LAYOUT(
+ [1] = LAYOUT_all(
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_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,
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_NO, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO,
+ KC_TRNS, KC_LSFT, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, 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, KC_TRNS, KC_TRNS
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/alice/alice.c b/keyboards/alice/alice.c
new file mode 100644
index 0000000000..adb88fef0a
--- /dev/null
+++ b/keyboards/alice/alice.c
@@ -0,0 +1,55 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <string.h>
+
+#include "rgblight.h"
+
+#include "i2c_master.h"
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+void matrix_init_kb(void) {
+ i2c_init();
+ // call user level keymaps, if any
+ matrix_init_user();
+}
+
+// custom RGB driver
+void rgblight_set(void) {
+ if (!rgblight_config.enable) {
+ memset(led, 0, 3 * RGBLED_NUM);
+ }
+
+ i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
+}
+
+bool rgb_init = false;
+
+void matrix_scan_kb(void) {
+ // if LEDs were previously on before poweroff, turn them back on
+ if (rgb_init == false && rgblight_config.enable) {
+ i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
+ rgb_init = true;
+ }
+
+ rgblight_task();
+ matrix_scan_user();
+}
+#endif
diff --git a/keyboards/alice/alice.h b/keyboards/alice/alice.h
new file mode 100644
index 0000000000..a92618593a
--- /dev/null
+++ b/keyboards/alice/alice.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, \
+ K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, \
+ K29, K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, \
+ K42, K43, K44, K45, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, \
+ K56, K57, K58, K59, K60, K61, K62, \
+ K63, K64, K65 \
+) \
+{ \
+ { K00 , K01 , K02 , K03 , K04 , K05 , K06 , K07 , K08 , K09 , K10 , K11 , K12 , K13 , K14 }, \
+ { K15 , K16 , K17 , K18 , K19 , K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 , K28 , KC_NO }, \
+ { K29 , K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 , K38 , K39 , K40 , K41 , KC_NO, KC_NO }, \
+ { K42 , K43 , K44 , K45 , K46 , K47 , K48 , K49 , K50 , K51 , K52 , K53 , K54 , K55 , KC_NO }, \
+ { K56 , K57 , K58 , K59 , KC_NO, KC_NO, K60 , K61 , K62 , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K63 , K64 , K65 , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
+}
+
diff --git a/keyboards/alice/config.h b/keyboards/alice/config.h
new file mode 100644
index 0000000000..7a8cbb52f1
--- /dev/null
+++ b/keyboards/alice/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define VENDOR_ID 0x20A0
+#define PRODUCT_ID 0x422E
+// TODO: share these strings with usbconfig.h
+// Edit usbconfig.h to change these.
+#define MANUFACTURER TGR
+#define PRODUCT TGR Alice
+
+/* matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, C1 }
+#define DIODE_DIRECTION COL2ROW
+
+#define RGBLED_NUM 20
+#define RGBLIGHT_ANIMATIONS
+
+#define NO_UART 1
+#define BOOTLOADHID_BOOTLOADER 1
+
+/* key combination for command */
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
diff --git a/keyboards/alice/info.json b/keyboards/alice/info.json
new file mode 100644
index 0000000000..5ea1f6756e
--- /dev/null
+++ b/keyboards/alice/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "TGR Alice",
+ "url": "",
+ "maintainer": "Felipe Coury",
+ "width": 17.75,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"~", "x":1.25, "y":0}, {"label":"!", "x":2.25, "y":0}, {"label":"@", "x":3.25, "y":0}, {"label":"#", "x":4.25, "y":0}, {"label":"$", "x":5.25, "y":0}, {"label":"%", "x":6.25, "y":0}, {"label":"^", "x":7.25, "y":0}, {"label":"&", "x":9.75, "y":0}, {"label":"*", "x":10.75, "y":0}, {"label":"(", "x":11.75, "y":0}, {"label":")", "x":12.75, "y":0}, {"label":"_", "x":13.75, "y":0}, {"label":"+", "x":14.75, "y":0}, {"label":"|", "x":15.75, "y":0}, {"label":"~", "x":16.75, "y":0}, {"label":"Insert", "x":0, "y":1}, {"label":"Tab", "x":1.25, "y":1, "w":1.5}, {"label":"Q", "x":2.75, "y":1}, {"label":"W", "x":3.75, "y":1}, {"label":"E", "x":4.75, "y":1}, {"label":"R", "x":5.75, "y":1}, {"label":"T", "x":6.75, "y":1}, {"label":"Y", "x":9.25, "y":1}, {"label":"U", "x":10.25, "y":1}, {"label":"I", "x":11.25, "y":1}, {"label":"O", "x":12.25, "y":1}, {"label":"P", "x":13.25, "y":1}, {"label":"{", "x":14.25, "y":1}, {"label":"}", "x":15.25, "y":1}, {"label":"Backspace", "x":16.25, "y":1, "w":1.5}, {"label":"Delete", "x":0, "y":2}, {"label":"Caps Lock", "x":1.25, "y":2, "w":1.75}, {"label":"A", "x":3, "y":2}, {"label":"S", "x":4, "y":2}, {"label":"D", "x":5, "y":2}, {"label":"F", "x":6, "y":2}, {"label":"G", "x":7, "y":2}, {"label":"H", "x":9.5, "y":2}, {"label":"J", "x":10.5, "y":2}, {"label":"K", "x":11.5, "y":2}, {"label":"L", "x":12.5, "y":2}, {"label":":", "x":13.5, "y":2}, {"label":"\"", "x":14.5, "y":2}, {"label":"Enter", "x":15.5, "y":2, "w":2.25}, {"label":"Shift", "x":1.25, "y":3, "w":2.25}, {"label":"Z", "x":3.5, "y":3}, {"label":"X", "x":4.5, "y":3}, {"label":"C", "x":5.5, "y":3}, {"label":"V", "x":6.5, "y":3}, {"label":"B", "x":9, "y":3}, {"label":"N", "x":10, "y":3}, {"label":"M", "x":11, "y":3}, {"label":"<", "x":12, "y":3}, {"label":">", "x":13, "y":3}, {"label":"?", "x":14, "y":3}, {"label":"Shift", "x":15, "y":3, "w":1.75}, {"label":"Fn", "x":16.75, "y":3}, {"label":"Ctrl", "x":1.25, "y":4, "w":1.5}, {"label":"Alt", "x":3.5, "y":4, "w":1.5}, {"x":5, "y":4, "w":2.25}, {"label":"Win", "x":7.25, "y":4, "w":1.25}, {"x":9, "y":4, "w":2.75}, {"label":"Alt", "x":11.75, "y":4, "w":1.5}, {"label":"Ctrl", "x":16.25, "y":4, "w":1.5}]
+ }
+ }
+}
diff --git a/keyboards/alice/keymaps/default/keymap.c b/keyboards/alice/keymaps/default/keymap.c
new file mode 100644
index 0000000000..a0b6d467d4
--- /dev/null
+++ b/keyboards/alice/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_GESC, 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_BSLS, \
+ 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, \
+ 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, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), \
+ KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, \
+ KC_ESC, KC_PGUP, KC_PGDN \
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP , _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______ \
+ ),
+};
diff --git a/keyboards/alice/keymaps/mrkeebs/keymap.c b/keyboards/alice/keymaps/mrkeebs/keymap.c
new file mode 100644
index 0000000000..6b01338700
--- /dev/null
+++ b/keyboards/alice/keymaps/mrkeebs/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_GESC, 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_BSLS, \
+ 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, \
+ 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, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), \
+ KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, \
+ KC_ESC, KC_PGUP, KC_PGDN \
+ ),
+ [1] = LAYOUT(
+ 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, \
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_UP , _______, _______, \
+ _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, \
+ RESET, _______, _______ \
+ ),
+};
diff --git a/keyboards/alice/program b/keyboards/alice/program
new file mode 100755
index 0000000000..3779bad040
--- /dev/null
+++ b/keyboards/alice/program
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>, Sebastian Kaim <sebb@sebb767.de>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import print_function
+
+import os
+import sys
+import time
+import usb
+
+
+def checkForKeyboardInNormalMode():
+ """Returns a device if a ps2avrGB device in normal made (that is in keyboard mode) or None if it is not found."""
+ return usb.core.find(idVendor=0x20A0, idProduct=0x422D)
+
+def checkForKeyboardInBootloaderMode():
+ """Returns True if a ps2avrGB device in bootloader (flashable) mode is found and False otherwise."""
+ return (usb.core.find(idVendor=0x16c0, idProduct=0x05df) is not None)
+
+def flashKeyboard(firmware_file):
+ """Calls bootloadHID to flash the given file to the device."""
+ print('Flashing firmware to device ...')
+ if os.system('bootloadHID -r "%s"' % firmware_file) == 0:
+ print('\nDone!')
+ else:
+ print('\nbootloadHID returned an error.')
+
+def printDeviceInfo(dev):
+ """Prints all infos for a given USB device"""
+ print('Device Information:')
+ print(' idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
+ print(' idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
+ print('Manufacturer: %s' % (dev.iManufacturer))
+ print('Serial: %s' % (dev.iSerialNumber))
+ print('Product: %s' % (dev.iProduct), end='\n\n')
+
+def sendDeviceToBootloaderMode(dev):
+ """Tries to send a given ps2avrGB keyboard to bootloader mode to allow flashing."""
+ try:
+ dev.set_configuration()
+
+ request_type = usb.util.build_request_type(
+ usb.util.CTRL_OUT,
+ usb.util.CTRL_TYPE_CLASS,
+ usb.util.CTRL_RECIPIENT_DEVICE)
+
+ USBRQ_HID_SET_REPORT = 0x09
+ HID_REPORT_OPTION = 0x0301
+
+ dev.ctrl_transfer(request_type, USBRQ_HID_SET_REPORT, HID_REPORT_OPTION, 0, [0, 0, 0xFF] + [0] * 5)
+ except usb.core.USBError:
+ # for some reason I keep getting USBError, but it works!
+ pass
+
+
+if len(sys.argv) < 2:
+ print('Usage: %s <firmware.hex>' % sys.argv[0])
+ sys.exit(1)
+
+kb = checkForKeyboardInNormalMode()
+
+if kb is not None:
+ print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='')
+ printDeviceInfo(kb)
+ sendDeviceToBootloaderMode(kb)
+ print(' done.')
+ print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.")
+ print(" You can find more infos about this here: https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB#setting-the-board-to-bootloader-mode")
+
+attempts = 12 # 60 seconds
+found = False
+for attempt in range(1, attempts + 1):
+ print("Searching for keyboard in bootloader mode (%i/%i) ... " % (attempt, attempts), end='')
+
+ if checkForKeyboardInBootloaderMode():
+ print('Found', end='\n\n')
+ flashKeyboard(sys.argv[1])
+ found = True
+ break
+ else:
+ print('Nothing.', end='')
+
+ if attempt != attempts: # no need to wait on the last attempt
+ print(' Sleeping 5 seconds.', end='')
+ time.sleep(5)
+
+ # print a newline
+ print()
+
+if not found:
+ print("Couldn't find a flashable keyboard. Aborting.")
+ sys.exit(2)
+
diff --git a/keyboards/alice/readme.md b/keyboards/alice/readme.md
new file mode 100644
index 0000000000..8e901ae7e4
--- /dev/null
+++ b/keyboards/alice/readme.md
@@ -0,0 +1,60 @@
+# TGR Alice
+
+![TGR Alice](https://i.imgur.com/cJohEqS.jpg)
+
+An ergonomic 60% keyboard.
+
+Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
+Hardware Supported: TGR Alice
+Hardware Availability: Group buy finished
+
+Make example for this keyboard (after setting up your build environment):
+
+ make alice:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+
+ps2avrGB keyboard firmware
+==========================
+
+This keyboard uses the port of the QMK firmware for boards that are based on the
+ps2avrGB firmware.
+
+Note that this is a complete replacement for the firmware, so you won't be
+using Bootmapper Client to change any keyboard settings, since not all the
+USB report options are supported.
+
+## Installing
+
+First, install the requirements. These commands are for OSX, but all you
+need is the AVR toolchain and `bootloadHID` for flashing:
+
+```
+$ brew cask install crosspack-avr
+$ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+$ pip install pyusb
+```
+
+Then, with the keyboard plugged in, simply run this command from the
+`qmk_firmware` directory:
+
+```
+$ make alice
+$ bootloadHID -r alice_default.hex
+```
+
+## Setting the board to bootloader mode
+
+Hold the ESC key (the one before the 1! key, in case you remaped it).
+
+## Troubleshooting
+
+From my experience, it's really hard to brick these boards. But these
+tricks have been useful when it got stuck in a weird scenario.
+
+1. Try plugging the board in while holding the bootloader key. This will force
+ it to boot only the bootloader without loading the firmware. Once this is
+ done, just reflash the board with the original firmware.
+2. Sometimes USB hubs can act weird, so try connecting the board directly
+ to your computer or plugging/unplugging the USB hub.
diff --git a/keyboards/alice/rules.mk b/keyboards/alice/rules.mk
new file mode 100644
index 0000000000..bb57cbeae3
--- /dev/null
+++ b/keyboards/alice/rules.mk
@@ -0,0 +1,48 @@
+# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# MCU name
+MCU = atmega32a
+PROTOCOL = VUSB
+
+# unsupported features for now
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+# processor frequency
+F_CPU = 12000000
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = bootloadHID
+
+# build options
+BOOTMAGIC_ENABLE = full
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+SRC += i2c_master.c
+
+# programming options
+PROGRAM_CMD = ./keyboards/ps2avrGB/program $(TARGET).hex
diff --git a/keyboards/alice/usbconfig.h b/keyboards/alice/usbconfig.h
new file mode 100644
index 0000000000..df7a88e3ab
--- /dev/null
+++ b/keyboards/alice/usbconfig.h
@@ -0,0 +1,396 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+#include "config.h"
+
+/*
+General Description:
+This file is an example configuration (with inline documentation) for the USB
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
+other hardware interrupt, as long as it is the highest level interrupt, see
+section at the end of this file).
+*/
+
+/* ---------------------------- Hardware Config ---------------------------- */
+
+#define USB_CFG_IOPORTNAME D
+/* This is the port where the USB bus is connected. When you configure it to
+ * "B", the registers PORTB, PINB and DDRB will be used.
+ */
+#define USB_CFG_DMINUS_BIT 3
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
+ * This may be any bit in the port.
+ */
+#define USB_CFG_DPLUS_BIT 2
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
+ * This may be any bit in the port. Please note that D+ must also be connected
+ * to interrupt pin INT0! [You can also use other interrupts, see section
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
+ * markers every millisecond.]
+ */
+#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
+ * frequency. All other rates require a precision of 2000 ppm and thus a
+ * crystal!
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
+ * not need to modify this setting.
+ */
+#define USB_CFG_CHECK_CRC 0
+/* Define this to 1 if you want that the driver checks integrity of incoming
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
+ * currently only available for 18 MHz crystal clock. You must choose
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
+ */
+
+/* ----------------------- Optional Hardware Config ------------------------ */
+
+/* #define USB_CFG_PULLUP_IOPORTNAME D */
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
+ * V+, you can connect and disconnect the device from firmware by calling
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
+ * This constant defines the port on which the pullup resistor is connected.
+ */
+/* #define USB_CFG_PULLUP_BIT 4 */
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
+ * above) where the 1.5k pullup resistor is connected. See description
+ * above for details.
+ */
+
+/* --------------------------- Functional Range ---------------------------- */
+
+#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
+/* Define this to 1 if you want to compile a version with two endpoints: The
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
+ * number).
+ */
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
+/* Define this to 1 if you want to compile a version with three endpoints: The
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
+ * configured below) and a catch-all default interrupt-in endpoint as above.
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
+ */
+#define USB_CFG_EP3_NUMBER 3
+/* If the so-called endpoint 3 is used, it can now be configured to any other
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
+ */
+/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
+/* The above macro defines the startup condition for data toggling on the
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
+ * Since the token is toggled BEFORE sending any data, the first packet is
+ * sent with the oposite value of this configuration!
+ */
+#define USB_CFG_IMPLEMENT_HALT 0
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
+ * it is required by the standard. We have made it a config option because it
+ * bloats the code considerably.
+ */
+#define USB_CFG_SUPPRESS_INTR_CODE 0
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
+ * want to send any data over them. If this macro is defined to 1, functions
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
+ * you need the interrupt-in endpoints in order to comply to an interface
+ * (e.g. HID), but never want to send any data. This option saves a couple
+ * of bytes in flash memory and the transmit buffers in RAM.
+ */
+#define USB_CFG_INTR_POLL_INTERVAL 1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED 0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+#define USB_CFG_MAX_BUS_POWER 500
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE 1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ 0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL 0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE 0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS 0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF 1
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ * in YL, TCNT0
+ * sts timer0Snapshot, YL
+ * endm
+ * #endif
+ * #define USB_SOF_HOOK myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING 0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC 0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'T', 'G', 'R'
+#define USB_CFG_VENDOR_NAME_LEN 3
+/* These two values define the vendor name returned by the USB device. The name
+ * must be given as a list of characters under single quotes. The characters
+ * are interpreted as Unicode (UTF-16) entities.
+ * If you don't want a vendor name string, undefine these macros.
+ * ALWAYS define a vendor name containing your Internet domain name if you use
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
+ * details.
+ */
+#define USB_CFG_DEVICE_NAME 'T', 'G', 'R', ' ', 'A', 'l', 'i', 'c', 'e'
+#define USB_CFG_DEVICE_NAME_LEN 9
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS 0
+#define USB_CFG_DEVICE_SUBCLASS 0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS 3 /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ * you want RAM pointers.
+ * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ * in static memory is in RAM, not in flash memory.
+ * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ * the driver must know the descriptor's length. The descriptor itself is
+ * found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ * char usbDescriptorDevice[];
+ * char usbDescriptorConfiguration[];
+ * char usbDescriptorHidReport[];
+ * char usbDescriptorString0[];
+ * int usbDescriptorStringVendor[];
+ * int usbDescriptorStringDevice[];
+ * int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ * USB_CFG_DESCR_PROPS_DEVICE
+ * USB_CFG_DESCR_PROPS_CONFIGURATION
+ * USB_CFG_DESCR_PROPS_STRINGS
+ * USB_CFG_DESCR_PROPS_STRING_0
+ * USB_CFG_DESCR_PROPS_STRING_VENDOR
+ * USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ * USB_CFG_DESCR_PROPS_HID
+ * USB_CFG_DESCR_PROPS_HID_REPORT
+ * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int serialNumberDescriptor[] = {
+ * USB_STRING_DESCRIPTOR_HEADER(6),
+ * 'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE 0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
+#define USB_CFG_DESCR_PROPS_STRINGS 0
+#define USB_CFG_DESCR_PROPS_STRING_0 0
+#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
+#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
+#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
+#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID 0
+#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID_REPORT 0
+#define USB_CFG_DESCR_PROPS_UNKNOWN 0
+
+#define usbMsgPtr_t unsigned short
+/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
+ * a scalar type here because gcc generates slightly shorter code for scalar
+ * arithmetics than for pointer arithmetics. Remove this define for backward
+ * type compatibility or define it to an 8 bit type if you use data in RAM only
+ * and all RAM is below 256 bytes (tiny memory model in IAR CC).
+ */
+
+/* ----------------------- Optional MCU Description ------------------------ */
+
+/* The following configurations have working defaults in usbdrv.h. You
+ * usually don't need to set them explicitly. Only if you want to run
+ * the driver on a device which is not yet supported or with a compiler
+ * which is not fully supported (such as IAR C) or if you use a differnt
+ * interrupt than INT0, you may have to define some of these.
+ */
+/* #define USB_INTR_CFG MCUCR */
+/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
+/* #define USB_INTR_CFG_CLR 0 */
+/* #define USB_INTR_ENABLE GIMSK */
+/* #define USB_INTR_ENABLE_BIT INT0 */
+/* #define USB_INTR_PENDING GIFR */
+/* #define USB_INTR_PENDING_BIT INTF0 */
+/* #define USB_INTR_VECTOR INT0_vect */
+
+/* Set INT1 for D- falling edge to count SOF */
+/* #define USB_INTR_CFG EICRA */
+#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10))
+/* #define USB_INTR_CFG_CLR 0 */
+/* #define USB_INTR_ENABLE EIMSK */
+#define USB_INTR_ENABLE_BIT INT1
+/* #define USB_INTR_PENDING EIFR */
+#define USB_INTR_PENDING_BIT INTF1
+#define USB_INTR_VECTOR INT1_vect
+
+#endif /* __usbconfig_h_included__ */
diff --git a/keyboards/alpha/keymaps/vderm/README.md b/keyboards/alpha/keymaps/vderm/README.md
new file mode 100644
index 0000000000..26a8ab3e85
--- /dev/null
+++ b/keyboards/alpha/keymaps/vderm/README.md
@@ -0,0 +1,35 @@
+# Alpha 28-Key Keyboard Alternate Keymap
+Alternate keymap for [Alpha 28-key keyboard](https://github.com/qmk/qmk_firmware/tree/master/keyboards/alpha).
+
+## How-to
+Assuming you've followed all the instructions from the original post, put my "keymap.c" file in "$qmk-firmware-folder$/keyboards/alpha/keymaps/vderm/" and then run your make command ("make alpha:vderm" while in $qmk-firmware-folder$ where this folder is what you've downloaded from the official github page) to compile the hex file to upload to your microcontroller. I've also uploaded my hex file.
+
+## Description
+Instead of going up and down layers like in the original Alpha keyboard, I've made the bottom row keys all have alternate functions:
++ Like in the original Alpha28 keymap, the 2U spacebar is a shift key when held down and space when tapped
++ Z and M are Ctrl keys when held down or Z and M when tapped
++ X and N are Alt keys
++ C activates the function keys layer (arrows, page up/dn, esc, tab, etc.)
++ V activates the characters and numbers layer
++ C and V combined activated the F-keys layer (F1, F2, F3, etc.)
++ The enter key is an enter key in the home layer, backspace in the function keys and characters/numbers layer and a delete in the F-keys layer
++ While in the other layers, the bottom row acts like a "regular" bottom modified row: ctrl, alt, winkey
+
+## Keymap
+![keymap](https://imgur.com/ZbDz0eL.jpg)
+
+## Build Images
+Here is my keyboard.
++ Switches: Aliaz Silent Switches (Tactile), PCB mount, 80g from [KBDfans](https://kbdfans.cn/collections/aliaz-switches/products/pre-orderaliaz-silent-switch-tactile?variant=2519899832333)
++ PCB board: ordered from JLCPCB, in white
++ Keycaps: ebay, can't find link :S
++ Bottom plate: I cut a piece of canary wood that was laying around, needs to be varnished; I also need to actually screw the pcb to the wood instead of relying on double-sided tape
+
+![vderm_alpha0](https://imgur.com/MjjoVtr.jpg)
+![vderm_alpha1](https://imgur.com/mIFu9WV.jpg)
+![vderm_alpha2](https://imgur.com/A70Iemw.jpg)
+![vderm_alpha3](https://imgur.com/eYljPWh.jpg)
+![vderm_alpha4](https://imgur.com/OhUKowj.jpg)
+
+Good luck on your build!
+//vderm
diff --git a/keyboards/alpha/keymaps/vderm/alpha_vderm.hex b/keyboards/alpha/keymaps/vderm/alpha_vderm.hex
new file mode 100644
index 0000000000..7515ad0305
--- /dev/null
+++ b/keyboards/alpha/keymaps/vderm/alpha_vderm.hex
@@ -0,0 +1,1422 @@
+:100000000C949F020C94E6020C94E6020C94E60217
+:100010000C94E6020C94E6020C94E6020C94E602C0
+:100020000C94E6020C94E6020C94E0250C94B226A3
+:100030000C940D1D0C94E6020C94E6020C94E6025E
+:100040000C94E6020C94E6020C94E6020C94E60290
+:100050000C94E6020C94751D0C94E6020C94E602D6
+:100060000C94E6020C94E6020C94E6020C94E60270
+:100070000C94E6020C94E6020C94E6020C94E60260
+:100080000C94E6020C94E6020C94E6020C94E60250
+:100090000C94E6020C94E6020C94E6020C94E60240
+:1000A0000C94E6020C94E6020C94E602AE03B00354
+:1000B000BB03B203B403B603B803BA03BD03BF0363
+:1000C000C103CC03C303C503C703C903CB03CE03DA
+:1000D000181318134A134A138813A6130C150C157A
+:1000E000E8130C158B148B14FC140C150C1505154A
+:1000F00098149814981498149814981498149814A0
+:10010000981498149814981498149814981498148F
+:10011000A914B714BE14C514CF149D159D15AF15A1
+:10012000AF15A615AF15AF15AF159D159D15AB15E0
+:10013000AF15AF15AB151F2746273E2846273E288B
+:100140009227B5273E280C281B2807634236B79B09
+:10015000D8A71A39685618AEBAAB558C1D3CB7CC27
+:100160005763BD6DEDFD753EF6177231BF0000009F
+:10017000803F05A84CCDB2D44EB93836A9020C50F8
+:10018000B9918688083CA6AAAA2ABE000000803F32
+:1001900014001A000800150017001C0018000C00BD
+:1001A0001200130004001600070009000A000B00EB
+:1001B0000D000E000F0028001D611B64064119424E
+:1001C00000002C62000005781174107129007F0076
+:1001D000AA00A900AE004A004E004B004D000000EE
+:1001E0002B000000000000000000500051005200F1
+:1001F0004F002A00E000E2000100035100002C62E1
+:100200000000E700E600E4001E001F0020002100BF
+:1002100022002300240025002600270035000000CE
+:100220002D002E0031002F003000330034002A0052
+:10023000E000E2000351010000002C6200003600E3
+:10024000370038003A003B003C003D003E003F00D4
+:10025000400041004200430044004500000000000F
+:10026000000000000000000000004C00E000E20080
+:100270000100010000002C620000E700E600E4003D
+:1002800000047F3F1F643214643214783C1E1E1435
+:100290000A056801F000B40078005A000000000070
+:1002A0000001010101010101010102020202020239
+:1002B000020202030303030303030304040404040C
+:1002C00004050505050506060606060707070708CF
+:1002D0000808080909090A0A0A0A0B0B0B0C0C0C7E
+:1002E0000D0D0D0E0E0F0F0F101011111112121314
+:1002F000131414151516161717181819191A1A1B8E
+:100300001C1C1D1D1E1F1F202021222223242525E9
+:1003100026272728292A2B2B2C2D2E2F2F30313220
+:1003200033343536363738393A3B3C3D3E3F404131
+:10033000424344464748494A4B4C4D4F5051525313
+:10034000555657585A5B5C5E5F60626364666769C6
+:100350006A6C6D6E707173747678797B7C7E808147
+:10036000838486888A8B8D8F91929496989A9B9D90
+:100370009FA1A3A5A7A9ABADAFB1B3B5B7B9BBBD9D
+:10038000BFC1C4C6C8CACCCFD1D3D6D8DADCDFE16E
+:10039000E4E6E8EBEDF0F2F5F7FAFCFF04033000D9
+:1003A00000000C0361006C00700068006100000038
+:1003B0000C035000790072006F004C000000040331
+:1003C000090409026D00040100A0FA0904000001FB
+:1003D00003010100092111010001224000070581EC
+:1003E0000308000A090401000103010200092111A8
+:1003F000010001224D000705820308000A090402DA
+:10040000000103000000092111010001223600074C
+:1004100005830308000A0904030001030000000922
+:100420002111010001223900070584032000011277
+:1004300001100100000008EDFE60600100010203F0
+:100440000105010906A101050719E029E7150025A5
+:1004500001950875018102050819012905950575A1
+:100460000191029501750391010507190029F715FE
+:1004700000250195F875018102C005010980A101DF
+:1004800085021601002603001A81002A83007510D8
+:1004900095018100C0050C0901A101850316010029
+:1004A000269C021A01002A9C02751095018100C049
+:1004B00005010902A1010901A10005091901290588
+:1004C00015002501950575018102950175038101CE
+:1004D0000501093009311581257F950275088106CE
+:1004E00009381581257F950175088106050C0A38A4
+:1004F000021581257F950175088106C0C005010997
+:1005000006A101050719E029E715002501950875E1
+:1005100001810295017508810105081901290595D8
+:1005200005750191029501750391010507190029CF
+:10053000FF150026FF00950675088100C0001124F4
+:100540001FBECFEFDAE0DEBFCDBF04B603FE27C08B
+:100550008091620290916302A0916402B091650261
+:100560008730904BA740B04BD1F4109262021092AA
+:100570006302109264021092650214BE84B7877FF2
+:1005800084BF0FB6F894A89580916000886180932D
+:100590006000109260000FBEE0E0F8E3099511E002
+:1005A000A0E0B1E0E0E8F8E502C005900D92A234C9
+:1005B000B107D9F722E0A2E4B1E001C01D92A23652
+:1005C000B207E1F70E940B230C943E2C0C94000020
+:1005D0000895089581E0089581E008950C94EC0257
+:1005E0000C9461080C94630808950C94F4020C9424
+:1005F000F50208950E9489150E94F9022FEF84E305
+:100600009CE0215080409040E1F700C0000087E767
+:1006100097E790930108809300080C949B1DFF922C
+:100620000F931F93CF93DF938C01FC01C081D18185
+:1006300080919101811113C08281882349F0CE01FC
+:100640000E94E61AF82E682FCE010E948F1A04C06D
+:10065000CE010E94BA1AF82EBE018F2D04C0CE0121
+:100660000E94E61ABE010E94B305EC01B8010E9487
+:10067000EE02882309F46CC2B801CE010E94120870
+:10068000882309F465C2C93CFCE5DF0741F4F801A1
+:100690008281882309F45CC20E94290A59C2CA3C9B
+:1006A0008CE5D80708F013C1C13C9CE5D90761F47B
+:1006B000F8018281882309F44BC20E94B71B827221
+:1006C000F1F00E94490C44C2C23CECE5DE07D0F0D8
+:1006D000F8018281C53CFCE5DF0709F4CDC008F0D4
+:1006E000DDC0C33CECE5DE0709F4CCC008F0D0C0A7
+:1006F000882309F42DC20E94B71B827211F30E9455
+:100700003F0C26C2C531FCE5DF0708F07EC0C230D1
+:100710008CE5D80708F452C0F8018281882309F4D7
+:1007200059C00E94141C811102C00E94F31B0E9438
+:10073000311C90E09093540280935302FE01E350E9
+:10074000FC45E231F10530F4EA5AFF4F8091530243
+:100750000C94E32B80915302816027C0826025C0F6
+:10076000846023C0806121C080621FC080641DC07E
+:1007700080681BC08460886018C08E7F16C08D7F23
+:1007800014C08B7F12C08F7E10C08F7D0EC08F7BF8
+:100790000CC08F770AC08B7F877F07C087FB22271B
+:1007A00020F991E0922790FB87F980935302809182
+:1007B00053020E94351C0E948915CAC1C1159CE5CF
+:1007C000D90781F0C130DC45A9F081E08093470171
+:1007D00080934801C801DF91CF911F910F91FF9045
+:1007E0000C94EA02F8018281882309F4B1C10E94C5
+:1007F000FA02AEC1F8018281882309F4A9C180916F
+:100800000B02816080930B02A3C1C531FCE5DF07B9
+:1008100039F50E94B71B982FF801828120910D01B4
+:1008200030910E01882379F09A7A81E009F480E012
+:1008300080934201911102C069E201C065E3C901E0
+:100840000E94971C0AC080914201811102C069E296
+:1008500001C065E3C9010E94A21C0E94841B78C1EB
+:10086000C03CDC4509F0B1CFF8018281882309F44E
+:100870006FC10E94DA0C6CC1882309F469C10E941F
+:10088000880B66C1882309F463C10E94510B60C1C3
+:10089000882309F45DC10E94690B5AC1C73C9CE5DD
+:1008A000D90731F4882309F453C10E94BD0B50C10C
+:1008B000C83CDC4530F4882309F44AC10E94A30BEC
+:1008C00047C1882309F444C10E94D80B41C1C13DEE
+:1008D000FCE5DF0749F4F8018281882309F438C177
+:1008E00088E10E943C0C34C1C23D8CE5D80708F079
+:1008F00087C0F8018281CD3CFCE5DF07A1F48823A5
+:1009000009F426C10E941B0A663071058105910514
+:1009100040F00E941B0A683071058105910508F4BA
+:10092000EECE86E0DECFCE3C9CE5D90730F5CB3C61
+:10093000ECE5DE0729F4882309F40AC181E0D1CF70
+:10094000CC3CDC4530F4882309F402C10E943E0A05
+:10095000FFC0882309F4FCC00E941B0A62307105A5
+:100960008105910540F00E941B0A653071058105E3
+:10097000910508F4C4CE82E0B4CFCF3C9CE5D90702
+:10098000A1F4882309F4E4C00E941B0A6F307105AA
+:100990008105910540F00E941B0A643171058105B3
+:1009A000910508F4ACCE8FE09CCFC03DDC45A0F4AF
+:1009B000882309F4CDC00E941B0A693071058105A6
+:1009C000910540F00E941B0A6E307105810591056A
+:1009D00008F495CE89E085CF882309F4B9C00E9438
+:1009E0001B0A653171058105910540F00E941B0AC3
+:1009F000673171058105910508F481CE85E171CFDC
+:100A0000C53DFCE5DF0739F5F8018281882361F0F7
+:100A1000109248010E943F1D90934601809345012A
+:100A200080E20E94D51294C08091480181110FC0CC
+:100A300080914501909146010E944B1D883C910593
+:100A400030F487E20E94731187E20E946F1280E205
+:100A50000E94DC127DC0C63D8CE5D80708F043C07B
+:100A6000F8018281C33DFCE5DF0729F4882309F4FE
+:100A70006FC083E236CFC43DDC45A0F4882309F47F
+:100A800067C00E941B0A693171058105910540F01C
+:100A90000E941B0A623271058105910508F42FCE70
+:100AA00089E11FCF882351F0109247010E943F1D1A
+:100AB000909344018093430182E0B3CF809147013A
+:100AC00081110FC080914301909144010E944B1D00
+:100AD000883C910530F486E20E94731186E20E9400
+:100AE0006F1282E0B5CFC93DECE5DE0731F4F801C5
+:100AF0008281882369F180E009C0CA3DFCE5DF07F7
+:100B000041F4F8018281882319F182E00E94A72331
+:100B10001FC0C63DDC4509F058CEF8018281811125
+:100B200077CF80914801811192CF809145019091BA
+:100B300046010E944B1D883C910508F088CF80E259
+:100B40000E94DC1288E20E94731188E20E946F12F8
+:100B500080E0DF91CF911F910F91FF90089580E089
+:100B600090E0089508952EE1829FC0011124FC01B8
+:100B70002AE0729FE00DF11D1124E60FF11DEE0F2A
+:100B8000FF1FE057FE4F859194910895880F991F9C
+:100B9000FC01E058FD4F859194910895CF93DF9328
+:100BA0000E94B3050E947207EC018115904508F080
+:100BB00041C0C11580E4D80708F01CC1C83ED1056A
+:100BC00010F5C03ED10508F089C1C83AD10578F4C6
+:100BD000C53AD10508F09EC0C130D10509F47EC1E7
+:100BE00008F435C1C430D10508F078C130C1CD3B1F
+:100BF000D10508F49AC0C03CD10508F428C1CE0143
+:100C0000805C9109E9C0C11590E2D90758F4C1157B
+:100C100021E0D20708F062C1C03FD10508F417C136
+:100C2000D0655CC1C11580E3D80708F0D9C0CE01FA
+:100C30009F70D2C0C11595E5D90708F044C0C11511
+:100C400024E5D20708F0EDC0C11582E5D80710F5FC
+:100C5000C11591E5D90708F0D0C0CE0174E0969592
+:100C600087957A95E1F7282F23703C2F337081E028
+:100C700090E002C0880F991F3A95E2F79C68922B8A
+:100C8000CF70C695C69520E2C29FE0011124C82B03
+:100C9000D92B24C19E01237033278C2F86958695EE
+:100CA000C115D34508F0AEC0C1E0D0E002C0CC0F02
+:100CB000DD1F2A95E2F720E2829FC0011124C82B94
+:100CC000D92BDC680BC1C11529E5D20780F4C11509
+:100CD00088E5D80708F0AAC0C11596E5D90708F03D
+:100CE000B6C0CF71DD27DC2FCC27D062F7C0CE0194
+:100CF000C1152AE5D20708F49EC09056811590428E
+:100D000008F0A5C08D2F8F710E94EE07DD27D062FD
+:100D10008F719BC0C53AD10509F49CC0C63AD10574
+:100D200009F09BC0C2E8D0E4D9C0C83AD10509F4A3
+:100D300097C0C93AD10509F496C0CA3AD10509F459
+:100D400095C0CB3AD10509F494C0CC3AD10509F449
+:100D500093C0CB3BD10509F492C0CC3BD10509F43B
+:100D600091C0CD3AD10509F490C0C03BD10509F43A
+:100D70008FC0CE3AD10509F48EC0CF3AD10509F41F
+:100D80008DC0C13BD10509F48CC0C23BD10509F42B
+:100D90008BC0C33BD10509F48AC0C43BD10509F41B
+:100DA00089C0C53BD10509F488C0C63BD10509F40B
+:100DB00087C0C73BD10509F486C0C83BD10509F4FB
+:100DC00085C0C93BD10509F484C0CA3BD10509F4EB
+:100DD00083C0C0E0D4E482C00E94C605EC017EC09E
+:100DE000CE019927D3FF03C0EC01D86C77C0EC018A
+:100DF000D06C74C0DF70D06A71C0DC2FCC27C16F9B
+:100E0000D06A6CC0C1E0D0E002C0CC0FDD1F2A95D3
+:100E1000E2F720E2829FC0011124C82BD92BDA68A7
+:100E20005DC0DC2FCC27C46FD06A58C0DC2FCC2724
+:100E3000C06FD06A53C024E0969587952A95E1F754
+:100E40008F70CF70C06ED0E0D06AD82B47C0C0E0A2
+:100E5000D0E044C0C1E8D0E441C0C3E8D0E43EC023
+:100E6000C2EED4E43BC0C9EED4E438C0CAEED4E448
+:100E700035C0C5EBD4E432C0C6EBD4E42FC0C3EB1D
+:100E8000D4E42CC0C4EBD4E429C0C7EBD4E426C01E
+:100E9000CCECD4E423C0CDECD4E420C0C3E8D5E44A
+:100EA0001DC0CAE8D5E41AC0C2E9D5E417C0C4E938
+:100EB000D5E414C0C1E2D6E411C0C3E2D6E40EC04A
+:100EC000C4E2D6E40BC0C5E2D6E408C0C6E2D6E46C
+:100ED00005C0C7E2D6E402C0CAE2D6E4CE01DF9183
+:100EE000CF9108958238910549F1B0F4813391058D
+:100EF00009F459C048F48932910509F44FC08A3287
+:100F0000910509F455C008958533910509F441C050
+:100F10008933910599F00895833E910531F138F4B4
+:100F2000803E910591F0823E9105A9F00895863E9C
+:100F3000910501F1873E910539F108952091530201
+:100F400020FD3BC021FD39C008958091530280FFF0
+:100F500034C089E341C08091530282FF30C0809148
+:100F6000530284FD2EC083EE37C08091530282FD70
+:100F700026C0F5CF8091530283FF25C08091530294
+:100F800084FD1FC087EE28C08091530283FD1BC0E3
+:100F9000F5CF8091530285FD18C019C0809153028E
+:100FA00085FD15C012C08091530286FD12C013C08A
+:100FB0008091530286FD0FC00CC080EE0DC082EE02
+:100FC0000BC080E009C086EE07C089E205C085E35A
+:100FD00003C08AE201C081E390E00895909153023A
+:100FE00092FF0DC0282F2871283019F4877F846064
+:100FF00006C0282F2471243011F48B7F886093FF62
+:101000000DC0282F2871283119F4877E846106C00D
+:10101000282F2471243111F48B7E886194FD877E02
+:10102000089508950F931F93CF93FB0122812111FF
+:1010300002C0C1E041C08C01C0915601C11125C060
+:1010400086319C45B1F70E94110881E080935601DA
+:101050000E943F1D909355018093540110924901C5
+:1010600010924B0110924A0110924D0110924C01C6
+:1010700010924F0110924E011092510110925001A6
+:10108000109253011092520117C080915401909117
+:1010900055010E944B1D8C32914058F690914901A8
+:1010A000E92FF0E0EE0FFF1FE65BFE4F1183008398
+:1010B0009F5F90934901C0E08C2FCF911F910F91BA
+:1010C00008950C94E8020C94E902CF93DF93AAE20E
+:1010D000B1E04DE251E061E070E08D91E82FE295E2
+:1010E000EF70F0E021A18F70EB0102C0CC0FDD1F8B
+:1010F0008A95E2F7CE019C2F9095922391A392A11D
+:10110000892B82A34A175B0741F7A0E2B1E04AE2CC
+:1011100051E061E070E08D91E82FE295EF70F0E032
+:1011200021A18F70EB0102C0CC0FDD1F8A95E2F781
+:10113000CE019C2F9095922391A392A1892B82A3FB
+:101140004A175B0741F710925E0110925D01109201
+:101150005801109257011092600110925F01109295
+:101160005A0110925901109262011092610110927D
+:101170005C0110925B01DF91CF910C94F0022F92F1
+:101180003F924F925F926F927F928F929F92AF9217
+:10119000BF92CF92DF92EF92FF920F931F93CF9364
+:1011A000DF932AE2E22E21E0F22EC7E5D1E03DE511
+:1011B000832E31E0932E01E010E066246394BE019B
+:1011C000A880B98019821882D7018D917D01E82FFE
+:1011D000E295EF70F0E021A18F70A80102C0440FEA
+:1011E000551F8A95E2F7CA01242B21A322A1742E50
+:1011F0007094272122A350EA5A95F1F790E2292E04
+:1012000091E0392E20E030E0D1015D901D01452DA7
+:1012100042954F7050E0DA0190964C90C880D9808A
+:10122000552D5F70D80102C0AA0FBB1F5A95E2F777
+:10123000AD01442141F4A801022E02C0440F551F04
+:101240000A94E2F702C040E050E04C295D2959833E
+:1012500048832F5F3F4F2A303105B1F691A17922A3
+:1012600071A292A1892B82A32296FB018081918198
+:10127000A816B90641F0609263010E943F1D909349
+:101280006501809364018C169D0609F098CF8091CA
+:101290006301882311F180916401909165010E949E
+:1012A0004B1D0697D0F08091570190915801909373
+:1012B0005E0180935D018091590190915A01909354
+:1012C000600180935F0180915B0190915C0190933C
+:1012D000620180936101109263010E94F20281E039
+:1012E000DF91CF911F910F91FF90EF90DF90CF9002
+:1012F000BF90AF909F908F907F906F905F904F9036
+:101300003F902F900895E82FF0E0EE0FFF1FE35A73
+:10131000FE4F8081918108950895EF92FF920F937F
+:101320001F93CF93DF93E901662309F44BC0242F69
+:1013300030E0EFEFF0E0E61BF109B901E69F900124
+:10134000E79F300DF69F300D1124232F8B01031BD7
+:1013500011095CE3E52EF12CB7010E94BB2BFB01C8
+:10136000BC01069FC001079F900D169F900D112490
+:10137000B7010E94BB2BE230F105B1F040F4309789
+:1013800079F0319711F5832F242F461B21C0E430CB
+:10139000F105A1F068F03597C1F4842F861B18C0C1
+:1013A000832F262F230F14C0862F830FE42F03C013
+:1013B000E42FE61B842F432F2E2F0AC0842F462FA5
+:1013C000430F06C0842F242F03C080E020E040E0BC
+:1013D000E42FF0E0E456FD4F4491E22FF0E0E456B4
+:1013E000FD4F9491E82FF0E0E456FD4FE4914983DE
+:1013F0009883EA83DF91CF911F910F91FF90EF9037
+:10140000089588E090E00C94FE2BAB01BC0188E0CD
+:1014100090E00C941C2CE9E3F2E083E080831092CE
+:101420003A028FEF8283838314826081718182818B
+:1014300093810C94050A6091390260FF06C066959D
+:101440006F7370E080E090E0089560E070E0CB01A1
+:10145000089580913D0290E001968430910514F04A
+:1014600083E090E080933D026091390270913A02EE
+:1014700080913B0290913C020C94050A80913D02C0
+:1014800090E0019797FF02C080E090E084309105E2
+:1014900014F083E090E080933D02609139027091F6
+:1014A0003A0280913B0290913C020C94050A809193
+:1014B000390280FF06C065E070E08EE392E00C9494
+:1014C0001910EEE3F2E0118210821282339682E06C
+:1014D000ED34F807C1F7EFCF9091390290FF0CC0BF
+:1014E000EEE3F2E0818360834283339692E0ED3451
+:1014F000F907C1F70C94570A0895CF93DF9300D0F2
+:101500001F92CDB7DEB72091390220FF0AC09E019D
+:101510002F5F3F4F0E948D094B8169818A810E9414
+:101520006C0A0F900F900F90DF91CF9108955F920A
+:101530006F927F928F929F92AF92BF92CF92DF92E3
+:10154000EF92FF920F931F93CF93DF9300D01F92E0
+:10155000CDB7DEB78C01E62EF42E522E80913902E3
+:1015600080FF89C0982F9E77923061F49E012F5F93
+:101570003F4FC8010E948D094B8169818A810E9479
+:101580006C0A59C0E82FE695EF739EE39E0F9F7398
+:10159000943018F4F0903C024EC09AE39E0F9F7373
+:1015A000993068F4881F8827881F90913A02292F64
+:1015B000220F022F082B97FB112710F93CC087E25E
+:1015C0008E0F8F738A30B8F5F0E07997E0FD02C096
+:1015D00021E001C02FEFEE7FEE56FD4F85919491F3
+:1015E00065E070E00E94BB2B26034001279F900C12
+:1015F0001124580188E9A81A8EEFB80A8EE3C82E84
+:1016000082E0D82E98E6692E77247394C501B30141
+:101610000E94BB2B96014F2D6E2D0E948D09A80CA8
+:10162000B91C83E0C80ED11C8DE4C81682E0D80630
+:1016300069F70E94570A8091390200FB87F980936D
+:101640003902902F969580913A028078892B10FB71
+:1016500087F980933A02E0923B02F0923C025520D7
+:1016600051F06091390270913A0280913B02909161
+:101670003C020E94050A0F900F900F90DF91CF91CE
+:101680001F910F91FF90EF90DF90CF90BF90AF90A0
+:101690009F908F907F906F905F90089521E00C94C1
+:1016A000970AE9E3F2E02081221F2227221F3091CE
+:1016B0003A02432F440F842F822B37FB992790F94E
+:1016C000089668E671E00E94CF2B438162810C94FA
+:1016D0004E0B20913902221F2227221F30913A02FD
+:1016E000432F440F842F822B37FB992790F98830A2
+:1016F00091051CF4805A9E4F05C0089768E671E07A
+:101700000E94CF2B40913C0260913B020C944E0B07
+:1017100060913B02862F90E0883F910514F4685F4A
+:1017200001C06FEF80913902881F8827881F909130
+:101730003A02292F220F97FB992790F940913C02FA
+:10174000822B0C944E0B60913B02862F90E0089701
+:1017500014F0685001C060E080913902881F88272A
+:10176000881F90913A02292F220F97FB992790F911
+:1017700040913C02822B0C944E0B40913C02842FF2
+:1017800090E0883F910514F4485F01C04FEF8091CD
+:101790003902881F8827881F90913A02292F220F2B
+:1017A00097FB992790F960913B02822B0C944E0B8A
+:1017B00040913C02842F90E0089714F0485001C0FB
+:1017C00040E080913902881F8827881F90913A0253
+:1017D000292F220F97FB992790F960913B02822BCA
+:1017E0000C944E0B20E00C94970ACF939091390201
+:1017F00090FF40C09178811102C0926007C085328D
+:1018000010F0986403C08F73880F982B909339025F
+:10181000662351F06091390270913A0280913B0247
+:1018200090913C020E94050AC09139026C2F669586
+:101830006F7370E04BE050E082E091E00E94E92B92
+:10184000892B19F01092830103C081E080938301FA
+:10185000CC1FCC27CC1F90913A02892F880F97FB81
+:10186000992790F940913C0260913B028C2BCF91DB
+:101870000C94F20BCF91089561E00C94F50B8091DC
+:10188000390286958F738F5F853208F081E00C9462
+:101890003C0C8091390286958F73815009F484E263
+:1018A0000C943C0CE9E3F2E08081816080838695B2
+:1018B0008F730C943C0C60E00C94F50B80910B0240
+:1018C000816080930B020E94141C811104C00E944D
+:1018D000F31B0E940B0A0E94010A60933902709365
+:1018E0003A0280933B0290933C026E7761F40E942F
+:1018F0000B0A0E94010A6093390270933A028093A6
+:101900003B0290933C0281E08093830180913902F5
+:1019100080FF04C086958F730C945B0C08959091A2
+:10192000390290FF10C0253070F430E0F901EE0F5D
+:10193000FF1F2E0F3F1FF901E25CFD4F8183608383
+:1019400042830C94570A08951F93CF93DF9300D0DE
+:101950001F92CDB7DEB73091390230FF0CC0122F85
+:101960009E012F5F3F4F0E948D09212F4B8169817E
+:101970008A810E948F0C0F900F900F90DF91CF9172
+:101980001F910895E9E3F2E080818E7F808360817A
+:101990007181828193810E94050A109283012FEF49
+:1019A00080E792E0215080409040E1F700C00000C5
+:1019B0000C94570A8091390280FD0C94C20C0C944F
+:1019C000520CCF93C82F80918101909182010E9487
+:1019D0004B1DEC2FF0E0E257FD4FE491F0E08E1745
+:1019E0009F0708F443C00E943F1D9093820180939B
+:1019F00081016091800170E080E090E00E94BC294C
+:101A000020E030E04FE753E40E94DF282BED3FE079
+:101A100049E450E40E94E52A0E94522B0E94592971
+:101A20002BE43AE34EE25FE30E94722820EF3BEFA3
+:101A300048ED52E40E94E52A0E948B29462F8091AE
+:101A40003902881F8827881F90913A02292F220F78
+:101A500097FB992790F960913B02822B0E947D0AA7
+:101A60008091800190E0019680938001CF9108954C
+:101A7000CF93C82F80917E0190917F010E944B1DD2
+:101A8000EC2FF0E0E557FD4FE491F0E08E179F0753
+:101A9000E8F00E943F1D90937F0180937E0140916A
+:101AA0003C0260913B0280917C0190917D010E94FB
+:101AB0007D0A80917C0190917D01019668E671E03C
+:101AC0000E94BB2B90937D0180937C01CF91089560
+:101AD000CF92DF92FF920F931F93CF93DF93F82E55
+:101AE00080917A0190917B010E944B1DEF2DE6952C
+:101AF000F0E0E857FD4FE491F0E08E179F07C0F14A
+:101B00000E943F1D90937B0180937A010EE312E0C7
+:101B1000C0E0D0E088E6C82EDD24D394809178011F
+:101B2000909179018C0F9D1FB6010E94BB2B9801EB
+:101B300040913C0260913B020E948D09C85BDF4FDF
+:101B40000D5F1F4FC83681E0D80741F70E94570A42
+:101B50008091780190917901F0FE05C00196BE0157
+:101B60000E94BB2B01C0019790937901809378016B
+:101B7000DF91CF911F910F91FF90DF90CF9008954B
+:101B8000CF92DF92EF92FF920F931F93CF93DF9349
+:101B9000C82F80FF02C01FEF01C011E080917601C5
+:101BA000909177010E944B1DC695EC2FF0E0EB570A
+:101BB000FD4FE491F0E08E179F0708F45BC00E9490
+:101BC0003F1D90937701809376012EE3E22E22E071
+:101BD000F22EC0E0D0E0F70111821082128294E070
+:101BE000C92ED12C00E080917501800F87FD8B5F9D
+:101BF000082E000C990BC817D907E9F480913C0214
+:101C00008C9DA0018D9D500D11245595479555959E
+:101C1000479580913902881F8827881F90913A0242
+:101C2000592F550F97FB992790F9970160913B0227
+:101C3000852B0E948D09010FF1E0CF1AD10899F68A
+:101C4000219683E0E80EF11CC530D10521F60E94F3
+:101C5000570A80917501113031F4811102C084E07E
+:101C600007C0815005C090E00196BE010E94CF2BB5
+:101C700080937501DF91CF911F910F91FF90EF90AD
+:101C8000DF90CF9008950F931F93CF93DF93C82FCA
+:101C900080917301909174010E944B1DEC2FF0E034
+:101CA000EE57FD4FE491F0E08E179F0708F456C001
+:101CB0000E943F1D9093740180937301CEE3D2E0A4
+:101CC000FE01118210821282339682E0ED34F80711
+:101CD000C1F700E010E080917201082E000C990B12
+:101CE00008171907ECF080910101082E000C990BE0
+:101CF00080179107ACF080913902881F8827881FD0
+:101D000090913A02592F550F97FB992790F99E0110
+:101D100040913C0260913B02852B0E948D0903C0DB
+:101D2000198218821A820F5F1F4F23960530110502
+:101D300091F60E94570A8091000190917201980FCC
+:101D40009093720120910101280F20930101121636
+:101D500014F494301CF0819580930001DF91CF91B1
+:101D60001F910F910895EF92FF920F931F93CF93BE
+:101D7000DF9380917001909171010E944B1D883E0C
+:101D80009340D0F10E943F1D9093710180937001A8
+:101D9000C0916E01D0916F012196C170DD27D09363
+:101DA0006F01C0936E018EE3E82E82E0F82E10E002
+:101DB00008E7812F8695FE01E80FF11DCF018170A4
+:101DC0009927970140913C0260913B02FC010E9FD4
+:101DD000C0010F9F900D11240E948D091F5FF3E039
+:101DE000EF0EF11C153029F7DF91CF911F910F9164
+:101DF000FF90EF900C94570ADF91CF911F910F91B4
+:101E0000FF90EF900895CF93DF9300D01F92CDB74E
+:101E1000DEB780916C0190916D010E944B1DE0E84E
+:101E2000F2E02591349182179307C0F180916B0104
+:101E300081110CC09E012F5F3F4F4FEF6FEF80E08D
+:101E400090E00E948D098A8180936B010E943F1D62
+:101E500090936D0180936C0180916A01813051F003
+:101E600028F0823061F440916B010AC080916B01CF
+:101E700040E007C060916B0140E080E003C040E0BB
+:101E800080E060E00E946C0A80916A0190E0019617
+:101E900063E070E00E94CF2B80936A010F900F9057
+:101EA0000F90DF91CF910895CF93DF9380916801D8
+:101EB000909169010E944B1D843F914008F444C0F9
+:101EC0000E943F1D9093690180936801C0E0D0E0BB
+:101ED00020916601309167018091390290913A0218
+:101EE000C230D1051CF4232B79F002C0232B61F4FE
+:101EF000881F8827881F392F330F97FB992790F960
+:101F00002C2F40913C020AC0881F8827881F392F38
+:101F1000330F97FB992790F92C2F40E060913B02FB
+:101F2000832B0E94A40C2196C530D10589F60E940E
+:101F3000570A8091660190916701019681709927F7
+:101F40009093670180936601DF91CF91089580910E
+:101F500083018823D9F190913902892F86958F7357
+:101F60002EE3280F2F73243018F482500C94E10CC8
+:101F70002AE3280F2F73233018F486500C94380D61
+:101F800027E3280F2F73263018F489500C94680D1E
+:101F900021E3280F2F73263018F48F500C94C00DB6
+:101FA0002BE2280F2F73233018F485510C94430E25
+:101FB000892F8E77803311F40C94B30E863411F48C
+:101FC0000C94030F883411F40C94540F089521B32A
+:101FD000342F3095232331B3432B3FB7F894FC01C2
+:101FE000680F791FE617F70789F0819198E041BBE8
+:101FF000000000C087FF21BB880F000000C000C0A8
+:1020000000C021BB00C09A9591F7ECCF3FBF089567
+:1020100020B3242B20BB9B01220F331F620F731FA1
+:102020000E94E70F87EC90E00197F1F700C00000F5
+:10203000089540E10C9408109093890180938801E1
+:102040000895E0918801F0918901309721F0019085
+:10205000F081E02D099480E00895E0918801F091ED
+:102060008901309721F00280F381E02D09940895D1
+:10207000E0918801F0918901309721F00480F58189
+:10208000E02D099408952091860130918701281749
+:10209000390771F09093870180938601E091880160
+:1020A000F0918901309721F00680F781E02D0994A5
+:1020B000089520918401309185012817390771F026
+:1020C0009093850180938401E0918801F0918901CA
+:1020D000309721F00084F185E02D0994089508954A
+:1020E0000C946F1081E008950E94361D85B78068BA
+:1020F00085BF85B7806885BF0E9465080E94F81D6E
+:102100000C945E0C5F926F927F928F929F92AF922F
+:10211000BF92CF92DF92EF92FF920F931F93CF93D4
+:10212000DF93CDB7DEB72A970FB6F894DEBF0FBEA8
+:10213000CDBF0E94BF080E947210811111C08FEFA5
+:1021400089838A831B820E943F1D8160782F9D8333
+:102150008C8349815A816B818D810E943F1156C0C9
+:102160009BE8692E91E0792E00E010E088248394AA
+:10217000912C502E802F0E9483096C01F301A190B5
+:10218000B1903F01A826B926A114B10431F40F5F24
+:102190001F4F0330110569F7D2CF80910B0281FDEB
+:1021A0000E948C0980E090E07401082E02C0EE0CC1
+:1021B000FF1C0A94E2F795012E213F21232B09F100
+:1021C0008E835F82CE20DF2081E0CD2809F480E07D
+:1021D00088870E943F1D8160782F9A8789874E816A
+:1021E0005F8168858A850E943F11000F111FF801E9
+:1021F000E557FE4F80819181E826F926F182E08241
+:1022000005C001968A30910579F6C1CF0E949B20C6
+:102210000E94211090918A018917D9F00E94211003
+:1022200080938A012A960FB6F894DEBF0FBECDBF09
+:10223000DF91CF911F910F91FF90EF90DF90CF90A2
+:10224000BF90AF909F908F907F906F905F900C9415
+:10225000F7022A960FB6F894DEBF0FBECDBFDF910E
+:10226000CF911F910F91FF90EF90DF90CF90BF9093
+:10227000AF909F908F907F906F905F900895CF93D5
+:10228000DF93CDB7DEB72B970FB6F894DEBF0FBE46
+:10229000CDBF4F83588769877A878B87DE01119678
+:1022A00086E0FD0111928A95E9F785E0FE013796F7
+:1022B00001900D928A95E1F749815A816B817C8169
+:1022C0008D819E810E9456182B960FB6F894DEBF22
+:1022D0000FBECDBFDF91CF910895FC018081918128
+:1022E0000E94251B0895882309F4F8C08238C1F4A0
+:1022F0000E94211081FDF2C069E380910D0190914F
+:102300000E010E94971C0E94841B2FEF81EE94E027
+:10231000215080409040E1F700C0000069E319C0FF
+:102320008338F9F40E94211080FDD8C063E58091C4
+:102330000D0190910E010E94971C0E94841B2FEFAB
+:1023400081EE94E0215080409040E1F700C0000011
+:1023500063E580910D0190910E010E94A21C0C94E6
+:10236000841B8438C1F40E94211082FDB7C067E449
+:1023700080910D0190910E010E94971C0E94841B78
+:102380002FEF81EE94E0215080409040E1F700C0B3
+:10239000000067E4DECF9CEF980F913A40F4682F7D
+:1023A00080910D0190910E010E94971CD8CF90E270
+:1023B000980F983050F4877091E001C0990F8A957A
+:1023C000EAF7892F0E94BA1BCACF9BE5980F93307A
+:1023D00070F4853A29F0863A31F083E890E005C040
+:1023E00081E890E002C082E890E00C94431098E508
+:1023F000980F953108F06EC0883A61F1893A69F119
+:102400008A3A71F18B3A79F18C3A81F18B3B89F1FF
+:102410008C3B91F18D3A99F1803BA1F18E3AA9F173
+:102420008F3AB1F1813BB9F1823BC1F1833BC9F1F4
+:10243000843BD1F1853BD9F1863BE1F1873BE9F162
+:10244000883BF1F1893BF9F18A3B09F43FC080E018
+:1024500090E03EC082EE90E03BC089EE90E038C054
+:102460008AEE90E035C085EB90E032C086EB90E0DC
+:102470002FC083EB90E02CC084EB90E029C087EB69
+:1024800090E026C08CEC90E023C08DEC90E020C062
+:1024900083E891E01DC08AE891E01AC082E991E0EA
+:1024A00017C084E991E014C081E292E011C083E298
+:1024B00092E00EC084E292E00BC085E292E008C098
+:1024C00086E292E005C087E292E002C08AE292E0F2
+:1024D0000C945910803F10F00C94A31F089588238A
+:1024E00009F462C0823879F40E94211081FF5CC037
+:1024F00069E380910D0190910E010E94971C0E944A
+:10250000841B69E310C08338B1F40E94211080FF5E
+:102510004BC063E580910D0190910E010E94971CC4
+:102520000E94841B63E580910D0190910E010E9431
+:10253000A21C0C94841B843879F40E94211082FF21
+:1025400033C067E480910D0190910E010E94971CA9
+:102550000E94841B67E4E7CF9CEF980F913A10F438
+:10256000682FE1CF90E2980F983050F4877091E097
+:1025700001C0990F8A95EAF7892F0E94C01BD9CF15
+:102580009BE5980F933020F480E090E00C9443108A
+:1025900098E5980F953120F480E090E00C94591064
+:1025A000803F10F00C940B200895882321F00E94A6
+:1025B000BA1B0C94841B0895882321F00E94C01B31
+:1025C0000C94841B08958F929F92AF92BF92DF92DA
+:1025D000EF92FF920F931F93CF93DF937C01D62F3F
+:1025E000C72FFC01058102950F70128111110E9405
+:1025F000D71B0E947D1B882379F0112369F080E2AC
+:102600008D0F883048F082E00E94661B0E947D1B7F
+:1026100091E0D82ED92601C0D12CBC2EB2948FE0E7
+:10262000B8228B2D90E0FC01E859FF4F0C94E32B6E
+:102630008C2F807FCF70882311F0C295C07F11232B
+:1026400099F0CC2309F4C3C180E28D0F883010F0DB
+:10265000D11104C08C2F0E94BA1B03C08C2F0E9482
+:10266000CA1B0E94841BB3C18D2F0E946F12CC2302
+:1026700009F4D2C180E28D0F883010F0D11104C06E
+:102680008C2F0E94C01B03C08C2F0E94D01B0E9465
+:10269000841BC2C18C2F807FCF70803211F0C29515
+:1026A000C07FDD2319F0D130C9F022C0112371F0B1
+:1026B000002341F0013031F40E94F01B8C2B0E946A
+:1026C000EA1BAAC10E94F01B8C2B3AC1002319F00F
+:1026D000013009F4A1C10E94ED1B18C0112321F0A3
+:1026E000063008F099C10EC0053008F095C10EC043
+:1026F000112351F0002331F0F701858180FF67C17C
+:102700008F7085838C2F1CC1011172C18C2F1EC14B
+:102710008C2F86958695837019F0813061F07CC18D
+:10272000112321F08D2F9C2F937002C080E090E048
+:102730000E9443107EC1112321F08D2F9C2F937096
+:1027400002C080E090E00E94591073C11123F9F09B
+:10275000D53F51F0D63F71F0D43FA9F480914D029E
+:1027600090914E0281600BC080914D0290914E027B
+:10277000826005C080914D0290914E0284609093DA
+:102780004E0280934D028D2F0E94A31F1EC0D53F85
+:1027900051F0D63F71F0D43FA9F480914D02909151
+:1027A0004E028E7F0BC080914D0290914E028D7F24
+:1027B00005C080914D0290914E028B7F90934E0206
+:1027C00080934D028D2F0E940B200E94902031C1DA
+:1027D0008C2F837009F04CC0111127C12D2F229529
+:1027E00026952770220F220F6D2F6F70862F90E095
+:1027F000A0E0B0E04C015D01022E04C0880C991CE1
+:10280000AA1CBB1C0A94D2F7D4FF12C08FE090E040
+:10281000A0E0B0E004C0880F991FAA1FBB1F2A9533
+:10282000D2F7BC01CD01609570958095909503C05D
+:1028300060E070E0CB01C695C695C370C23051F020
+:1028400080F4682979298A299B29C13071F00E9476
+:10285000A519EBC0682979298A299B290E94B719F3
+:10286000E4C00E94A519C501B4010E949319DDC0FE
+:10287000112319F08C2F817001C08695882309F4EB
+:10288000D4C02D2F229526952770220F220F6D2F51
+:102890006F70862F90E0A0E0B0E04C015D01022E49
+:1028A00004C0880C991CAA1CBB1C0A94D2F7D4FF44
+:1028B00012C08FE090E0A0E0B0E004C0880F991F44
+:1028C000AA1FBB1F2A95D2F7BC01CD016095709558
+:1028D0008095909503C060E070E0CB01C695C695E9
+:1028E000C370C23051F080F4682979298A299B2964
+:1028F000C13071F00E946A1A98C0682979298A2922
+:102900009B290E947C1A91C00E946A1AC501B401D9
+:102910000E94581A8AC08D2F90E0FC01E05EF109F8
+:10292000E531F10508F04FC0E858FF4F0C94E32B58
+:10293000DF708C2F8F71112331F00E94F1198D2FD0
+:102940000E94D51269C00E94121A8D2F0E94DC12BB
+:1029500063C0112341F0053008F05EC08C2F8F71E9
+:102960000E94371A59C0063008F056C0F7CF11231D
+:1029700039F08C2F8F710E94F1194EC01123C9F3C9
+:102980008C2F8F710E94121A47C0112329F08C2FAF
+:102990008F710E94DC1940C00E94D7193DC01123DD
+:1029A00049F0CF718C2F0E94F11963E08C2F0E94A7
+:1029B0005D1B32C081E00E94661B023068F182E03C
+:1029C0000E94661B29C0112331F0002391F28D2F44
+:1029D0000E94731121C0002399F2D93349F4FFEF0B
+:1029E00027EE83E0F15020408040E1F700C0000076
+:1029F0008D2F0E946F1210C04C2F4F706D2FC7018A
+:102A00000E94AF050E94041914C04C2F4F706D2F07
+:102A1000C7010E94B2050DC098E0B91631F0B91691
+:102A200040F086EF8B0D823020F40E9421100E942E
+:102A3000F702DD20E1F00E94591B80FD18C0F7016C
+:102A400012820E94531B0E94F119C7010E94431574
+:102A50000E94531BDF91CF911F910F91FF90EF9038
+:102A6000DF90BF90AF909F908F900C94121ADF91DF
+:102A7000CF911F910F91FF90EF90DF90BF90AF909B
+:102A80009F908F9008950F931F93CF93DF93EC0146
+:102A9000988189812B813C81232B31F08F3F31F448
+:102AA00081E09F3F19F403C081E001C080E080FD18
+:102AB00013C0CE010E940F03882371F068817981D1
+:102AC0008A810E94301B8C010E948E1A0E948119FB
+:102AD000B801CE010E94E312DF91CF911F910F91B7
+:102AE00008950E94D71B0E94E71B80910D019091D1
+:102AF0000E010E94AD1C0E94841B0E9432210E9484
+:102B0000902080E090E00E94431080E090E00C94E0
+:102B100059100E94C71B0C9471150E94251BE92FA8
+:102B2000E295EF704E2F50E0FA013297EE30F1054A
+:102B3000B0F4E357FF4F0C94E32B803F91F018F46F
+:102B4000803E68F40EC0843F51F40BC0803E48F0D4
+:102B5000813F29F406C093FB882780F9089580E01F
+:102B6000089581E00895CF93DF9300D000D01F92A5
+:102B7000CDB7DEB70F900F900F900F900F90DF91B1
+:102B8000CF910895CF93DF9300D000D000D0CDB780
+:102B9000DEB726960FB6F894DEBF0FBECDBFDF912D
+:102BA000CF9108951F93CF93DF93C091920116E0C8
+:102BB00080919301C81799F0D0E01C9FF0011D9FF0
+:102BC000F00D1124EC56FE4F4081518162817381DA
+:102BD000848195810E94C2152196C770E9CFDF914B
+:102BE000CF911F9108954091C4015091C50160910A
+:102BF000C6017091C7018091C8019091C9010C94E0
+:102C0000C215CF938091C90182958F7009F05FC082
+:102C10008091C601882309F45AC080919201B09135
+:102C200093017091C401A091C5014091C7015091D9
+:102C3000C80191E07F3F09F090E0692FC6E08B1753
+:102C400009F445C04115510521F0AF3F21F020E0C6
+:102C500003C021E001C0262F90E020FD35C0C89FB1
+:102C6000F001C99FF00D1124EC56FE4F21812A136B
+:102C70002BC02081271328C02281211125C0238148
+:102C800034812417350710F421503109241B350BEA
+:102C9000283C3105C8F42091C9012F702061209390
+:102CA000C90126E0289FF001299FF00D1124E75665
+:102CB000FE4F80818F708061808384EC91E00E9460
+:102CC0004315CF910C94D21501968770B8CFCF9150
+:102CD0000895AF92BF92CF92DF92EF92FF920F933F
+:102CE0001F93CF93DF93CDB7DEB761970FB6F894FC
+:102CF000DEBF0FBECDBF8C0185E0F801DE011D9661
+:102D000001900D928A95E1F7D8014C9111965C9152
+:102D100011971296EC903091C4016091C501809199
+:102D2000C7019091C801009731F06F3F31F421E065
+:102D30003F3F19F403C021E001C020E0B22FB17081
+:102D4000BB2E20FD60C1F801C380D480A090C601D5
+:102D5000AA2009F4EEC02091C901C816D90628F0AE
+:102D6000D601A81BB90BCD0104C0809590958C0DA0
+:102D70009D1DFF24F394883C910580F0F12C207F69
+:102D800009F09CC07C2DD98AC88A6E2D89890E9441
+:102D9000B31584EC91E00E9443152DC1822F807FF2
+:102DA00009F054C0561314C0431312C0FE2CE11096
+:102DB0000FC02F7020612093C9010E94F31584EC8D
+:102DC00091E00E9443158091C901F80185835CC19F
+:102DD000CD2831F05F3F31F481E04F3F19F403C05B
+:102DE00081E001C080E080FD03C081E08E2502C04B
+:102DF00080E090E0F82FF170FF2E80FF1CC08091E2
+:102E000092012091930136E0821709F41AC190E0F3
+:102E1000389FF001399FF00D1124EC56FE4F61816F
+:102E2000561306C06081461303C06281E61203C0D8
+:102E300001968770E9CFFE2CEE2009F425C1809120
+:102E4000C90181608093C901F12C1EC1561309C0CC
+:102E5000431307C0E11005C08091C901F8018583C3
+:102E6000A4C04D875E878D859E850E948D15882321
+:102E700079F1EE2069F12091C901822F82958F703E
+:102E800090E0029774F08091C4019091C5019887F9
+:102E90008F831986DB86CA862C87CE0107960E940F
+:102EA000431586E0F801A4ECB1E001900D928A95FB
+:102EB000E1F70E9401160E94F3150DC0561771F03C
+:102EC0004D875E878D859E850E948D1581111AC064
+:102ED000C8010E944315FF24F394D6C04313F0CFDA
+:102EE000E110EECF8091C901F8018583C8010E94ED
+:102EF000431586E0E4ECF1E0DF011D928A95E9F7E5
+:102F0000FA2CC2C0EE2021F32091C901822F8295B4
+:102F10008F7090E002972CF28091C4019091C501CE
+:102F20009A8389831B82DD82CC822E83CE01019617
+:102F3000B6CFC816D90628F0F601E81BF90BCF0169
+:102F400004C0809590958C0D9D1D883C910548F09E
+:102F5000F12C7C2DD98AC88A6E2D89890E94B315DF
+:102F60004AC0FE2CEE2009F4B3CF561333C04313EE
+:102F700031C02091C90120FD24C0822F82958F701D
+:102F8000482F50E041155105E1F0D80115962C93DA
+:102F900015974F30510549F08F5F982F9295907F8C
+:102FA000822F8F70892B15968C93C8010E94431530
+:102FB00086E0F801A4ECB1E001900D928A95E1F76A
+:102FC0003DC086E0F801A4ECB1E001900D928A9535
+:102FD000E1F75AC04D875E878D859E850E948D15CD
+:102FE00081115FCF8091C90181608093C901C801BF
+:102FF0000E94431549C0E4ECF1E086E0DF011D9238
+:103000008A95E9F71BC0EE2009F462CF4D875E87F1
+:103010008D859E850E948D15F82E882309F458CF42
+:1030200086E0F801A4ECB1E001900D928A95E1F7F9
+:1030300084EC91E00E946D110E9401160E94F3152C
+:1030400023C04D875E878D859E850E94251B292F75
+:1030500022952F70223028F49F7039F0811105C01D
+:103060000BC0243028F49F7049F4805E883020F033
+:10307000C8010E944315BF2CFB2C06C0D801159631
+:103080009C91907F91F7F8CF8F2D61960FB6F894B1
+:10309000DEBF0FBECDBFDF91CF911F910F91FF908B
+:1030A000EF90DF90CF90BF90AF9008951F93CF9394
+:1030B000DF93CDB7DEB72C970FB6F894DEBF0FBE07
+:1030C000CDBF4F83588769877A878B879C87CE01CE
+:1030D00007960E9469168823D1F09F8188852A85EA
+:1030E0003B85232B31F08F3F31F481E09F3F19F472
+:1030F00003C081E001C080E080FD47C04F8158855A
+:1031000069857A858B859C850E94C2153EC086E0C4
+:10311000FE013796DE01119601900D928A95E1F736
+:10312000FF81E8856A857B856115710531F0EF3F88
+:1031300031F481E0FF3F19F403C081E001C080E079
+:1031400080FD23C02091930130E0C9010196877072
+:1031500099274091920150E084179507F1F1F98386
+:10316000EA837D836C8396E0929FD001939FB00D9C
+:103170001124AC56BE4FFE01319601900D929A95E6
+:10318000E1F7809393010E94D21516E0809192019D
+:1031900090919301891771F1189FC00111248C56E9
+:1031A0009E4F0E946916882329F1E09192011E9F8B
+:1031B000F0011124EC56FE4F4081518162817381F0
+:1031C000848195810E94C2158091920190E00196C0
+:1031D0008770992780939201D9CF0E948915109208
+:1031E000930110929201E4ECF1E086E0DF011D9280
+:1031F0008A95E9F72C960FB6F894DEBF0FBECDBFC7
+:10320000DF91CF911F910895EF92FF920F931F933B
+:10321000CF93DF938C01892B09F46CC0F12CEE2441
+:10322000E394E8012196F8018491843740F48430D6
+:1032300008F051C0813081F0823019F15BC08537D0
+:1032400009F444C0A8F19CE7980F903708F052C0E9
+:103250008F770E946F1241C00E5F1F4FFE01849155
+:1032600090E2980F983050F48770FE2D01C0FF0F48
+:103270008A95EAF78F2F0E94DA1B14C00E947311FF
+:103280002DC00E5F1F4FFE01849190E2980F983081
+:1032900060F48770FE2D01C0FF0F8A95EAF78F2F2B
+:1032A0000E94E01B0E94841B19C00E946F1216C06E
+:1032B0000E5F1F4FFE01C491CC2381F08FE99FE088
+:1032C0000197F1F700C00000C150F6CF0E5F1F4F0D
+:1032D000FE01F49003C00E9473118E018F2D88238C
+:1032E00009F49FCFEFE9FFE03197F1F700C000004C
+:1032F0008150F5CFDF91CF911F910F91FF90EF900B
+:103300000895089508950C9482190E94831960937A
+:10331000E2017093E3018093E4019093E5010C9442
+:1033200071150C9485190F931F930091E201109170
+:10333000E3012091E4013091E501602B712B822B98
+:10334000932B1F910F910C9485190F931F9300914C
+:10335000E2011091E3012091E4013091E501602345
+:103360007123822393231F910F910C9485190F933E
+:103370001F930091E2011091E3012091E40130914B
+:10338000E50160277127822793271F910F910C94E5
+:1033900085190C9482190E94C9196093DE017093FB
+:1033A000DF018093E0019093E1010C94711560E0DE
+:1033B00070E0CB010C94CB190F931F9341E050E0C8
+:1033C00060E070E08A019B0104C0000F111F221F02
+:1033D000331F8A95D2F7C901B8011F910F910C9440
+:1033E000CB190F931F9341E050E060E070E004C000
+:1033F000440F551F661F771F8A95D2F78091DE0113
+:103400009091DF01A091E001B091E1018A019B015F
+:10341000082B192B2A2B3B2BC901B8011F910F91A7
+:103420000C94CB190F931F9341E050E060E070E0E3
+:1034300004C0440F551F661F771F8A95D2F7409529
+:103440005095609570958091DE019091DF01A0917B
+:10345000E001B091E1018A019B01082319232A238D
+:103460003B23C901B8011F910F910C94CB190F9305
+:103470001F9341E050E060E070E004C0440F551F2E
+:10348000661F771F8A95D2F78091DE019091DF0148
+:10349000A091E001B091E1018A019B010827192761
+:1034A0002A273B27C901B8011F910F910C94CB1912
+:1034B0000F931F930091DE011091DF012091E00135
+:1034C0003091E101602B712B822B932B1F910F9177
+:1034D0000C94CB190F931F930091DE011091DF0123
+:1034E0002091E0013091E101602371238223932335
+:1034F0001F910F910C94CB190F931F930091DE0134
+:103500001091DF012091E0013091E10160277127E6
+:10351000822793271F910F910C94CB1908952AE0CD
+:10352000929F800D1124E82FE695E695E695877029
+:1035300051E001C0550F8A95EAF785E0E89FF00158
+:103540001124E653FE4F20E030E070E04081CB01D3
+:10355000022E02C0969587950A94E2F781708195B4
+:1035600084278523842781932F5F3F4F25303105A2
+:1035700069F708952AE0929F800D1124682F6695BF
+:1035800066956695982F977085E0689FB001112425
+:1035900040E050E080E0FB01E40FF51FE653FE4FF2
+:1035A000208130E0092E02C0369527950A94E2F773
+:1035B00021703327042E01C0220F0A94EAF7822BD0
+:1035C0004F5F5F4F4530510531F70895CF92DF923D
+:1035D000EF92FF920F931F93CF93DF938C01C090D4
+:1035E000DE01D090DF01E090E001F090E1018091F8
+:1035F000E2019091E301A091E401B091E501C82AB4
+:10360000D92AEA2AFB2ACFE1D0E0D701C6010C2E45
+:1036100004C0B695A795979587950A94D2F780FD33
+:1036200004C0219790F780E007C0B8018C2F0E945A
+:10363000CE050197B1F38C2FDF91CF911F910F91A0
+:10364000FF90EF90DF90CF900895CF93DF93EC0140
+:103650000E94E61ABE010E94CE05DF91CF91089527
+:103660001F93CF93DF93EB0190919101992321F068
+:10367000CB010E94251B13C0882349F0CB010E9477
+:10368000E61A182F682FCE010E948F1A04C0CB01B2
+:103690000E94BA1A182FBE01812F0E94CE05DF9119
+:1036A000CF911F9108958091E60185958595859527
+:1036B00008958091E6018770089598E0899F9001B0
+:1036C0001124262B2093E6010C94F1192091E60198
+:1036D000809582238093E601982F977069F430E0FB
+:1036E000482F082E000C550B2417350729F0859517
+:1036F000859585950C94121A08959091E60197701E
+:1037000081E009F480E00895E0910D01F0910E014F
+:1037100080910A028083E0910D01F0910E01908169
+:1037200080910902892B8083E0910D01F0910E01B7
+:10373000908180910802892B80838091E701882302
+:1037400081F0E0910D01F0910E019081892B808331
+:1037500080910D0190910E010E943A1C81111092EE
+:10376000E70180910D0190910E010C942D10809134
+:103770000A02089590910A02892B80930A02089503
+:10378000809590910A02892380930A0208951092ED
+:103790000A02089590910902892B809309020895E5
+:1037A00080959091090289238093090208951092CF
+:1037B0000902089590910802892B809308020895C8
+:1037C00080959091080289238093080208951092B1
+:1037D000080208958093E70108951092E701089583
+:1037E0008091E70108956DEE7EEF80E090E00E9409
+:1037F000282C60E082E090E00E940A2C60E083E0E8
+:1038000090E00E940A2C60E084E090E00E940A2C84
+:1038100060E085E090E00E940A2C40E050E0BA01B0
+:1038200088E090E00C941C2C80E090E00E94042C36
+:1038300021E08D3E9E4F09F020E0822F089582E026
+:1038400090E00C94F62B682F82E090E00C940A2C08
+:1038500083E090E00C94F62B682F83E090E00C94CA
+:103860000A2C84E090E00C94F62B682F84E090E022
+:103870000C940A2CFC0131969C01205E3F4F80E0A5
+:10388000919191118F5FE217F307D1F708959C0191
+:10389000FC0132969FEF80E04191461789F09F3FEF
+:1038A00019F4411101C0982F8F5F8E31A9F79F3F06
+:1038B00039F0F901E90FF11D97FDFA95628308953A
+:1038C00008959C01225E3F4FFC014281461301C0D6
+:1038D0001282019682179307B9F70895262F26952D
+:1038E000269526952F3169F0FC01E20FF11D6770D6
+:1038F00021E030E001C0220F6A95EAF78181282B90
+:1039000021830895262F2695269526952F3171F02F
+:10391000FC01E20FF11D677021E030E001C0220FD1
+:103920006A95EAF7209581812823218308952091C3
+:103930001F01222329F02091530227FD0C946E1CB5
+:103940000C94471C20911F01222329F0209153023F
+:1039500027FD0C94821C0C94611CFC01319680960E
+:103960001192E817F907E1F7089508950C94B51C32
+:103970000C94B51CCF930E94B81C0E94BF080E94F3
+:10398000B61CC0E08C2F0E948309892B29F4CF5FDD
+:10399000C330C1F780E001C081E0CF9108950C945D
+:1039A000B51C0C94CF1C0E94D11C8091590284300C
+:1039B00049F110920C0220E488E190E00FB6F894EF
+:1039C000A895809360000FBE2093600080E00E9465
+:1039D000F7020E94D11C83B7817F846083BF83B7C5
+:1039E000816083BF7894889583B78E7F83BF0FB63D
+:1039F000F894A8958091600088618093600010928F
+:103A000060000FBE08950C94B51C0E9489150E9499
+:103A100021100E94F7020C94031D1F920F920FB603
+:103A20000F9211248F939F93AF93BF9380910C02B9
+:103A3000811113C080914F0290915002A0915102C8
+:103A4000B09152024196A11DB11D80934F029093F7
+:103A50005002A0935102B0935202BF91AF919F9137
+:103A60008F910F900FBE0F901F90189582E084BD2C
+:103A700093E095BD9AEF97BD80936E0008952FB7A0
+:103A8000F89480914F0290915002A0915102B09110
+:103A900052022FBF0895CF92DF92EF92FF920F93C1
+:103AA0001F932FB7F89440914F02509150026091AC
+:103AB0005102709152022FBF6A017B01EE24FF2454
+:103AC0008C0120E030E0C016D106E206F30610F4C7
+:103AD000415051099A01281B390BC9011F910F91BF
+:103AE000FF90EF90DF90CF90089578941F920F92FF
+:103AF0000FB60F9211248F939F93AF93BF93809132
+:103B00004F0290915002A0915102B0915202019641
+:103B1000A11DB11D80934F0290935002A0935102BA
+:103B2000B0935202BF91AF919F918F910F900FBEB2
+:103B30000F901F90189587E797E79093010880935F
+:103B400000089AE088E10FB6F894A8958093600089
+:103B50000FBE90936000FFCFAF92BF92CF92DF92E3
+:103B6000EF92FF920F931F93CF93C0E0CC24C394A6
+:103B7000D12CE82EF12C8C2F0E9483095C0100E0EF
+:103B800010E0C601002E02C0880F991F0A94E2F7C8
+:103B90008A219B21892B31F40F5F1F4F0A301105B9
+:103BA00081F70AC0602F7C2F80E00E94B305E816E1
+:103BB000F90691F781E004C0CF5FC330E1F680E001
+:103BC000CF911F910F91FF90EF90DF90CF90BF901A
+:103BD000AF900895CF93C82F8CE20E94AC1D88232C
+:103BE00021F08C2FCF910C94AC1D80E0CF910895E3
+:103BF000CF930E94141C811102C00E94F31BC5E6E2
+:103C0000C15049F00E94BF088FE39CE90197F1F78A
+:103C100000C00000F5CF89E20E94EA1D81110FC1AA
+:103C20008AE20E94EA1D81110E94F31B85E00E9436
+:103C3000EA1D81110E949B1D0E941F1C80930B0294
+:103C400087E00E94EA1D8823A9F18BE10E94EA1D0A
+:103C5000882351F080910B0281FB222720F991E00B
+:103C6000922790FB81F90EC08EE00E94EA1D882306
+:103C700061F080910B0282FB222720F991E09227CC
+:103C800090FB82F980930B0215C080E10E94EA1D2F
+:103C900090910B02882341F093FB222720F981E0C9
+:103CA000822780FB93F904C0892F809580FB90F9CF
+:103CB00090930B0280910B020E94231C0E94311CE6
+:103CC00090E0909354028093530280EE0E94EA1D8C
+:103CD000882341F080915302982F909590FB80F9B2
+:103CE0008093530289E30E94EA1D882359F0809152
+:103CF000530281FB222720F991E0922790FB81F962
+:103D00008093530282EE0E94EA1D882359F080912D
+:103D1000530282FB222720F991E0922790FB82F93F
+:103D20008093530286EE0E94EA1D882359F0809109
+:103D3000530283FB222720F991E0922790FB83F91D
+:103D40008093530283EE0E94EA1D882359F08091EC
+:103D5000530284FB222720F991E0922790FB84F9FB
+:103D60008093530285E30E94EA1D882359F08091D5
+:103D7000530285FB222720F991E0922790FB85F9D9
+:103D80008093530281E30E94EA1D882359F08091B9
+:103D9000530286FB222720F991E0922790FB86F9B7
+:103DA0008093530281E10E94EA1D882359F080919B
+:103DB000530287FB222720F991E0922790FB87F995
+:103DC00080935302809153020E94351C87E20E9427
+:103DD000EA1DC82F8EE10E94EA1D8111C2608FE1A9
+:103DE0000E94EA1D8111C46080E20E94EA1D8111D7
+:103DF000C86081E20E94EA1D8111C06182E20E94D6
+:103E0000EA1D8111C06283E20E94EA1D8111C06433
+:103E100084E20E94EA1D882311F0C06802C0CC230E
+:103E200029F08C2F0E942C1C6C2F03C00E94281C90
+:103E3000682F70E080E090E0CF910C949119CF91C1
+:103E4000089580910F0280FF0BC06091120185E000
+:103E5000689FB001112475956795759567952BC07E
+:103E600081FF09C06091120185E0689FB0011124B3
+:103E70007595679520C082FF07C06091120185E0AB
+:103E8000689FB001112417C0909110029923D1F0BE
+:103E900060911101961788F72091120185E0289F03
+:103EA00090011124929FA001939F500D112470E066
+:103EB000CA010E94CF2B6038710540F4611571056D
+:103EC00019F406C065E070E0862F08958FE7089525
+:103ED00081E0089580910F0280FF08C06091100179
+:103EE00070E0759567957595679521C081FF06C04F
+:103EF0006091100170E07595679519C082FF04C04C
+:103F00006091100170E010C090911002992399F017
+:103F100060910F019617A0F780911001899FC00151
+:103F2000112470E00E94CF2B6038710540F46115B8
+:103F3000710519F406C061E070E0862F08958FE7DF
+:103F4000089581E00895803F21F40E94211F81950A
+:103F500004C0813F29F40E94211F80931302089519
+:103F6000823F21F40E94211F819504C0833F29F4E0
+:103F70000E94211F809312020895893F19F40E9424
+:103F80006A1F05C08A3F31F40E946A1F81958093A1
+:103F9000140208958B3F21F40E946A1F819504C08A
+:103FA0008C3F29F40E946A1F809315020895843F74
+:103FB00021F480911102816017C0853F21F4809126
+:103FC0001102826011C0863F21F480911102846049
+:103FD0000BC0873F21F480911102886005C0883FA3
+:103FE00031F48091110280618093110208958D3F18
+:103FF00021F480910F0281600BC08E3F21F48091EB
+:104000000F02826005C08F3F29F480910F02846007
+:1040100080930F020895803F39F48091130287FF47
+:104020006CC01092130269C0813F29F48091130281
+:104030001816BCF362C090911202823F29F497FFD8
+:104040005CC01092120259C0833F19F41916CCF3C8
+:1040500054C0893F41F48091140218160CF04DC0F1
+:10406000109214024AC08A3F29F48091140287FFFB
+:1040700044C0F6CF8B3F39F48091150287FF3DC0D5
+:10408000109215023AC08C3F29F48091150218163F
+:10409000BCF333C0843F21F4809111028E7F17C09E
+:1040A000853F21F4809111028D7F11C0863F21F45C
+:1040B000809111028B7F0BC0873F21F48091110208
+:1040C000877F05C0883F31F4809111028F7E8093F5
+:1040D000110213C08D3F21F480910F028E7F0BC01F
+:1040E0008E3F21F480910F028D7F05C08F3F29F410
+:1040F00080910F028B7F80930F02809112028111B9
+:104100000EC08091130281110AC0809114028111A6
+:1041100006C080911502811102C01092100208950C
+:1041200081E192E00E9438100E943F1D90930E02A0
+:1041300080930D0208951F93CF93DF9380910D021A
+:1041400090910E020E944B1DAC0190911002992398
+:1041500021F02091130130E006C0209114018AE083
+:10416000289F900111244217530708F477C08091CB
+:104170001202C0911302D091140210911502811104
+:1041800007C0C11167C0D11165C0111163C066C0FD
+:104190009F3F19F09F5F90931002181624F40E941D
+:1041A000211F809312028091120287FF05C00E9496
+:1041B000211F8195809312021C1624F40E94211F56
+:1041C000809313028091130287FF05C00E94211F74
+:1041D000819580931302309112023323C1F0209114
+:1041E00013022223A1F045EB3403C0011124892FCF
+:1041F000911101C081E08093120235EB2303C001CD
+:104200001124892F911101C081E0809313021D16A2
+:1042100024F40E946A1F809314028091140287FF85
+:1042200005C00E946A1F819580931402111624F420
+:104230000E946A1F809315028091150287FF05C0B6
+:104240000E946A1F819580931502DF91CF911F9183
+:104250000C9490209F3F09F09DCFAECFDF91CF917E
+:104260001F910895E1E1F2E085E0DF011D928A955A
+:10427000E9F71092100210920F0208958091360211
+:1042800008950F931F93CF93DF9300D01F92CDB764
+:10429000DEB78C010E94B723823011F0843019F50B
+:1042A00083E089831B830A838093E9008FEF9091D9
+:1042B000E800815095FD06C095ED9A95F1F7000054
+:1042C0008111F5CF8091E80085FF0DC040E050E0FE
+:1042D00063E070E0CE0101960E94D4238091E80053
+:1042E0008E778093E8000F900F900F90DF91CF9121
+:1042F0001F910F910895CF93DF9300D01F92CDB7F8
+:10430000DEB720915902243031F522E0298380580C
+:1043100091099B838A8383E08093E9008FEF9091DA
+:10432000E800815095FD06C095ED9A95F1F70000E3
+:104330008111F5CF8091E80085FF0DC040E050E08D
+:1043400063E070E0CE0101960E94D4238091E800E2
+:104350008E778093E8000F900F900F90DF91CF91B0
+:104360000895CF93DF93EC010E94B723823011F0C0
+:104370008430F9F482E08093E9008FEF9091E800B7
+:10438000815095FD06C095ED9A95F1F700008111D9
+:10439000F5CF8091E80085FF0CC040E050E065E07B
+:1043A00070E0CE010E94D4238091E8008E77809344
+:1043B000E800DF91CF910895CF93DF93EC010E9445
+:1043C000B723823019F0843009F047C080911F0173
+:1043D0008823E1F08091530287FF18C084E0809326
+:1043E000E9008FEF9091E800815095FD06C095E1BE
+:1043F0009A95F1F700008111F5CF8091E80085FFD3
+:104400002CC040E050E060E270E017C081E0809393
+:10441000E9008FEF9091E800815095FD06C095ED81
+:104420009A95F1F700008111F5CF8091E80085FFA2
+:1044300014C040E050E068E070E0CE010E94D42358
+:104440008091E8008E778093E80080E2FE01A6E18B
+:10445000B2E001900D928A95E1F7DF91CF91089536
+:1044600080915802811109C00E9465250E94C225D1
+:104470008091E20084608093E200089510925802D7
+:104480000895089508950C94051D42E061EC81E0C3
+:104490000E94DE2442E061EC82E00E94DE2442E0E1
+:1044A00061EC83E00E94DE2442E261EC84E00C9443
+:1044B000DE2480915B02833009F455C030F48130F2
+:1044C00071F0823009F48EC008958A3009F47AC000
+:1044D0008B3009F460C0893009F09CC020C0809105
+:1044E0005A02813A09F096C08091E800877F809354
+:1044F000E80080915E0290915F02892B21F460E2D6
+:1045000086E192E003C060E080E090E070E00E940D
+:104510001F248091E8008B778093E80008958091B4
+:104520005A02813209F076C080915E0290915F025A
+:10453000009719F0039709F06DC08091E800877F1C
+:104540008093E8008091E80082FD05C080915902C7
+:104550008111F8CF5FC08091F10080933602809185
+:10456000E8008B7753C080915A02813A09F052C01B
+:1045700080915E0290915F02892B09F04BC080917F
+:10458000E800877F8093E8008091E80080FFFCCFFF
+:1045900080911F0136C080915A028132D9F58091F5
+:1045A0005E0290915F02892BA9F58091E800877FD8
+:1045B0008093E8000E94132580915C0280931F0184
+:1045C0000C94891580915A02813221F58091E8007E
+:1045D000877F8093E8000E94132580915D0280937D
+:1045E0003702089580915A02813AA1F48091E8003F
+:1045F000877F8093E8008091E80080FFFCCF809166
+:1046000037028093F1008091E8008E778093E80074
+:104610000C941325089584B7877F84BF0FB6F89450
+:10462000A89580916000886180936000109260007E
+:104630000FBE80E880936100109261000E947010AC
+:104640000E9465250E94C2258091E20084608093CB
+:10465000E20078940E9457280E94741085E191E04E
+:104660000E941C1080915902853069F40E94D31C6D
+:10467000809157028823B1F30E94BA1C882391F3DA
+:104680000E94BE23EFCF0E9482100E94A70FEACFA4
+:104690000C944A23292F332723303105C9F060F4C5
+:1046A0002130310581F02230310509F047C08DE617
+:1046B00090E022EC33E046C02132310511F1223284
+:1046C000310561F13BC082E190E02FE234E03AC075
+:1046D00099278130910561F040F08230910559F0C1
+:1046E000039761F5ECE9F3E008C0EEEBF3E005C0F9
+:1046F000E0EBF3E002C0E2EAF3E0849190E09F0196
+:1047000021C064307105D0F4660F771FFB01E75CB0
+:10471000FE4F2081318189E090E014C06430710542
+:1047200068F4FB01EE0FFF1FEF5CFE4F208131812B
+:10473000FB01E35DFE4F808190E004C080E090E0EB
+:1047400020E030E0FA013183208308950895CF936B
+:10475000C82F0E94A623C0933802CF91089580915C
+:104760005902843011F081E0089582E0089580912B
+:104770003802811102C00C94AF23089580E189BDF5
+:1047800082E189BD09B400FEFDCF8091D8008F7D04
+:104790008093D8008091E00082608093E000809157
+:1047A000E00081FDFCCF0895CF92DF92EF92FF925F
+:1047B0000F931F93CF93DF93EC018B017A010E943B
+:1047C0003225811133C0E114F10439F0F701808101
+:1047D0009181081B190BC80FD91FC12CD12C0115B1
+:1047E000110519F18091E80085FD16C08091E8005F
+:1047F0008E778093E800E114F10449F0F70180819D
+:104800009181C80ED91ED182C08285E00FC00E945E
+:104810003225882321F30AC089918093F100015049
+:104820001109FFEFCF1ADF0ADACF80E0DF91CF91D5
+:104830001F910F91FF90EF90DF90CF9008952091FE
+:104840006002309161022617370748F06115710543
+:1048500039F42091E8002E772093E80001C0B901D7
+:10486000FC0120E06115710579F1809159028823DE
+:10487000F1F18530F1F18091E80083FD3CC0809139
+:10488000E80082FD2EC08091E80080FFEBCF2091F0
+:10489000F3008091F20090E0922B6115710551F0C8
+:1048A0008830910538F421912093F100615071090D
+:1048B0000196F3CF21E0089709F020E08091E8000D
+:1048C0008E778093E800CECF2111CFCF0AC08091A0
+:1048D0005902882361F0853061F08091E80083FD02
+:1048E0000AC08091E80082FFF2CF80E0089582E064
+:1048F000089583E0089581E0089520916002309149
+:1049000061022617370748F06115710539F42091C7
+:10491000E8002E772093E80001C0B901FC0120E0F7
+:104920006115710591F180915902882309F440C005
+:10493000853009F43FC08091E80083FD3DC080913F
+:10494000E80082FD2FC08091E80080FFE9CF209130
+:10495000F3008091F20090E0922B6115710559F0FF
+:104960008830910540F424912093F10031966150F4
+:1049700071090196F2CF21E0089709F020E08091BB
+:10498000E8008E778093E800CBCF2111CCCF0AC00E
+:1049900080915902882361F0853061F08091E800B0
+:1049A00083FD0AC08091E80082FFF2CF80E0089585
+:1049B00082E0089583E0089581E00895982F97306C
+:1049C00068F59093E900981739F07091EC00209108
+:1049D000ED005091F00003C0242F762F50E021FD10
+:1049E00002C09F5FECCF3091EB003E7F3093EB0035
+:1049F0003091ED003D7F3093ED003091EB00316060
+:104A00003093EB007093EC002093ED005093F00096
+:104A10002091EE0027FDE5CF80E008958F70809310
+:104A2000E90081E0089580915A0287FF11C08091CA
+:104A3000E80082FD05C0809159028111F8CF11C0B4
+:104A40008091E8008B770BC080915902882349F050
+:104A50008091E80080FFF8CF8091E8008E77809306
+:104A6000E80008952091E4003091E50095E640913A
+:104A7000EC00842F817040FF23C08091E80080FD0E
+:104A80001DC080915902882399F0853099F080915A
+:104A9000EB0085FD11C04091E4005091E500241722
+:104AA000350729F3915011F09A01E1CF84E0089580
+:104AB00082E0089583E0089581E0089580E00895FC
+:104AC0004091E80042FFDDCF08950E94D3250E9467
+:104AD000DB25E0EEF0E0808181608083E8EDF0E0AE
+:104AE00080818F77808319BCA7EDB0E08C918E7F99
+:104AF0008C9380818F7E80831092580208950F934B
+:104B00001F93CF93DF930E94D3250E94DB25C8ED2E
+:104B1000D0E088818F7788838881806888838881C6
+:104B20008F7D888319BC1092590210925502109201
+:104B300057021092560200EE10E0F80180818B7F40
+:104B4000808388818160888342E060E080E00E9409
+:104B5000DE24E1EEF0E080818E7F8083E2EEF0E003
+:104B6000808181608083808188608083F80180817A
+:104B70008E7F8083888180618883DF91CF911F91B0
+:104B80000F910895E8EDF0E080818F7E8083E7ED5E
+:104B9000F0E080818160808384E082BF81E0809347
+:104BA00058020C947F25E8EDF0E080818E7F8083B1
+:104BB0001092E20008951092DA001092E100089538
+:104BC0001F920F920FB60F9211242F933F934F9382
+:104BD0005F936F937F938F939F93AF93BF93EF9365
+:104BE000FF938091E10082FF0BC08091E20082FF81
+:104BF00007C08091E1008B7F8093E1000E945628DE
+:104C00008091DA0080FF1FC08091D80080FF1BC018
+:104C10008091DA008E7F8093DA008091D90080FF46
+:104C20000DC080E189BD82E189BD09B400FEFDCFE0
+:104C300081E0809359020E94302205C019BC109275
+:104C400059020E943E228091E10080FF19C08091AC
+:104C5000E20080FF15C08091E2008E7F8093E20029
+:104C60008091E20080618093E2008091D8008062B0
+:104C70008093D80019BC85E0809359020E9442229B
+:104C80008091E10084FF30C08091E20084FF2CC05D
+:104C900080E189BD82E189BD09B400FEFDCF80912C
+:104CA000D8008F7D8093D8008091E1008F7E809323
+:104CB000E1008091E2008F7E8093E2008091E2002B
+:104CC00081608093E20080915502882311F084E096
+:104CD00007C08091E30087FD02C081E001C083E04E
+:104CE000809359020E9443228091E10083FF29C0F2
+:104CF0008091E20083FF25C08091E100877F80934F
+:104D0000E10082E080935902109255028091E10007
+:104D10008E7F8093E1008091E2008E7F8093E2009D
+:104D20008091E20080618093E20042E060E080E0F8
+:104D30000E94DE248091F00088608093F0000E9441
+:104D40004122FF91EF91BF91AF919F918F917F9100
+:104D50006F915F914F913F912F910F900FBE0F90E8
+:104D60001F9018951F920F920FB60F9211242F9338
+:104D70003F934F935F936F937F938F939F93AF93E3
+:104D8000BF93CF93DF93EF93FF93C091E900CF7070
+:104D90008091EC00D82FD17080FDD0E81092E9000E
+:104DA0008091F000877F8093F00078940E94F6262F
+:104DB0001092E9008091F00088608093F000CD2B84
+:104DC000CF70C093E900FF91EF91DF91CF91BF9138
+:104DD000AF919F918F917F916F915F914F913F9193
+:104DE0002F910F900FBE0F901F9018951F93CF9388
+:104DF000DF93CDB7DEB7AA970FB6F894DEBF0FBE2C
+:104E0000CDBFEAE5F2E08091F100819322E0E23645
+:104E1000F207C9F70E9459228091E80083FF2EC152
+:104E200080915A0290915B02492F50E04A3051051F
+:104E300008F024C1FA01E556FF4F0C94E32B8038AB
+:104E400021F0823809F01AC108C080915602909171
+:104E50005702992389F082600FC080915E028F70A3
+:104E6000873008F00BC18093E9008091EB0085FB4F
+:104E7000882780F91092E9009091E800977F90933D
+:104E8000E8008093F1001092F100D1C0282F2D7F0F
+:104E900009F0F4C0882319F0823061F0EFC08091EE
+:104EA0005C02813009F0EAC0933009F080E0809321
+:104EB00057022EC080915C0281112AC080915E024F
+:104EC0008F702FEF280F263008F0D8C08093E900AC
+:104ED0002091EB0020FF1CC0933021F48091EB0067
+:104EE000806214C09091EB0090619093EB0021E000
+:104EF00030E0A90102C0440F551F8A95E2F74093A4
+:104F0000EA001092EA008091EB0088608093EB0049
+:104F10001092E9008091E800877F8093E8000E946A
+:104F20001325ACC08111AAC010915C021F7780913B
+:104F3000E3008078812B8093E3008091E800877FF5
+:104F40008093E8000E9413258091E80080FFFCCF49
+:104F50008091E30080688093E300111102C082E039
+:104F600001C083E08093590289C08058823008F0E4
+:104F700085C080915C0290915D028C3D53E0950765
+:104F800079F583E08A838AE289834FB7F894DE015A
+:104F9000139620E03EE051E2E32FF0E050935700FB
+:104FA000E49120FF03C0E295EF703F5FEF708E2F1A
+:104FB00090E0EA3010F0C79601C0C0968D939D93A3
+:104FC0002F5F243149F74FBF8091E800877F80939E
+:104FD000E8006AE270E0CE0101960E941F2416C02C
+:104FE00060915E0270915F02AE014F5F5F4F0E9461
+:104FF0004823BC01892B09F441C09091E800977FB8
+:105000009093E80089819A810E947D248091E80034
+:105010008B778093E80032C0803881F58091E8007A
+:10502000877F8093E800809155028093F100809102
+:10503000E8008E7772CF811121C080915C0290913F
+:105040005D0299270297D4F48091E800877F8093CE
+:10505000E80080915C02809355020E9413258091A4
+:105060005502811106C08091E30087FD02C081E0F6
+:1050700001C084E0809359020E9445228091E8009B
+:1050800083FF0AC08091E800877F8093E8008091C9
+:10509000EB0080628093EB00AA960FB6F894DEBF17
+:1050A0000FBECDBFDF91CF911F9108950895CF938B
+:1050B000809159028823A1F0C091E900CF709091AE
+:1050C000EC00892F817090FD80E8C82B1092E900D8
+:1050D0008091E80083FD0E94F626CF70C093E9001E
+:1050E000CF9108955058BB27AA270E948A280C9474
+:1050F000352A0E94272A38F00E942E2A20F039F4FF
+:105100009F3F19F426F40C94FD290EF4E095E7FB7B
+:105110000C94F729E92F0E94462A58F3BA17620720
+:1051200073078407950720F079F4A6F50C94682A94
+:105130000EF4E0950B2EBA2FA02D0B01B9019001B2
+:105140000C01CA01A0011124FF27591B99F0593FF6
+:1051500050F4503E68F11A16F040A22F232F342F3E
+:105160004427585FF3CF469537952795A795F0408C
+:105170005395C9F77EF41F16BA0B620B730B840BA1
+:10518000BAF09150A1F0FF0FBB1F661F771F881F59
+:10519000C2F70EC0BA0F621F731F841F48F48795B1
+:1051A00077956795B795F7959E3F08F0B0CF9395A3
+:1051B000880F08F09927EE0F9795879508950E941C
+:1051C000F3280C94352A0E942E2A58F00E94272A90
+:1051D00040F029F45F3F29F00C94F72951110C9409
+:1051E000692A0C94FD290E94462A68F39923B1F399
+:1051F000552391F3951B550BBB27AA2762177307FD
+:10520000840738F09F5F5F4F220F331F441FAA1F90
+:10521000A9F335D00E2E3AF0E0E832D0915050404C
+:10522000E695001CCAF72BD0FE2F29D0660F771FFA
+:10523000881FBB1F261737074807AB07B0E809F0E0
+:10524000BB0B802DBF01FF2793585F4F3AF09E3F65
+:10525000510578F00C94F7290C94692A5F3FE4F328
+:10526000983ED4F3869577956795B795F7959F5FA8
+:10527000C9F7880F911D9695879597F90895E1E0F4
+:10528000660F771F881FBB1F621773078407BA0753
+:1052900020F0621B730B840BBA0BEE1F88F7E095AE
+:1052A000089529F416F00C94F7290C94682A0C94AC
+:1052B000FD290E944E2AA8F39638A0F707F80F920E
+:1052C000E8942BE33AEA48EB5FE70E94FB2A0F924F
+:1052D0000F920F924DB75EB70F920E94B12AEAE487
+:1052E000F1E00E94002A4F915F91EF91FF91E595C7
+:1052F000EE1FFF1F49F0FE57E0684427EE0F441FE2
+:10530000FA95E1F74195550B0E947B2A0F9007FE15
+:105310000C946F2A08950E944E2A88F09F5798F0A7
+:10532000B92F9927B751B0F0E1F0660F771F881FAA
+:10533000991F1AF0BA95C9F714C0B13091F00E94C4
+:10534000682AB1E008950C94682A672F782F88277F
+:10535000B85F39F0B93FCCF3869577956795B395EB
+:10536000D9F73EF490958095709561957F4F8F4F5A
+:105370009F4F0895E89409C097FB3EF4909580955F
+:10538000709561957F4F8F4F9F4F9923A9F0F92F0B
+:1053900096E9BB279395F695879577956795B79589
+:1053A000F111F8CFFAF4BB0F11F460FF1BC06F5F6F
+:1053B0007F4F8F4F9F4F16C0882311F096E911C081
+:1053C000772321F09EE8872F762F05C0662371F0A2
+:1053D00096E8862F70E060E02AF09A95660F771FB6
+:1053E000881FDAF7880F9695879597F9089597F9AA
+:1053F0009F6780E870E060E008959FEF80EC08957B
+:10540000DF93CF931F930F93FF92EF92DF927B0175
+:105410008C01689406C0DA2EEF010E94F82AFE0182
+:10542000E894A5912591359145915591A6F3EF0109
+:105430000E948A28FE019701A801DA9469F7DF909B
+:10544000EF90FF900F911F91CF91DF91089500246D
+:105450000A941616170618060906089500240A94D9
+:1054600012161306140605060895092E0394000C5F
+:1054700011F4882352F0BB0F40F4BF2B11F460FFEE
+:1054800004C06F5F7F4F8F4F9F4F089557FD905817
+:10549000440F551F59F05F3F71F04795880F97FBF8
+:1054A000991F61F09F3F79F08795089512161306B2
+:1054B0001406551FF2CF4695F1DF08C016161706E1
+:1054C0001806991FF1CF8695710561050894089516
+:1054D000E894BB2766277727CB0197F908959B01AE
+:1054E000AC0160E070E080E89FE30C94DF280C944E
+:1054F000F7290C945A2B0E944E2AD8F39923C9F30A
+:10550000940F511DA3F39150504094F059F088230B
+:1055100032F0660F771F881F91505040C1F79E3FB1
+:1055200051052CF7880F911D9695879597F9089549
+:105530005F3FACF0983E9CF0BB27869577956795CA
+:10554000B79508F4B1609395C1F7BB0F58F711F404
+:1055500060FFE8CF6F5F7F4F8F4F9F4FE3CF0C947B
+:10556000692AFA01DC01AA0FBB1F9B01AC01BF57DE
+:1055700028F4222733274427507820C0B75190F4CD
+:10558000AB2F0024469537952795011CA395D2F3A0
+:10559000002071F0220F331F441FB395DAF30ED0B1
+:1055A0000C94722861307105A0E88A07B94630F47E
+:1055B0009B01AC016627772788279078309621F0E9
+:1055C000208331834283538308950E94F82A0C94E8
+:1055D000352A0E94272A38F00E942E2A20F095238F
+:1055E00011F00C94F7290C94FD2911240C94692ACC
+:1055F0000E94462A70F3959FC1F3950F50E0551F06
+:10560000629FF001729FBB27F00DB11D639FAA2717
+:10561000F00DB11DAA1F649F6627B00DA11D661F66
+:10562000829F2227B00DA11D621F739FB00DA11D87
+:10563000621F839FA00D611D221F749F3327A00D41
+:10564000611D231F849F600D211D822F762F6A2FDD
+:1056500011249F5750409AF0F1F088234AF0EE0F42
+:10566000FF1FBB1F661F771F881F91505040A9F76F
+:105670009E3F510580F00C94F7290C94692A5F3FF6
+:10568000E4F3983ED4F3869577956795B795F795AB
+:10569000E7959F5FC1F7FE2B880F911D9695879523
+:1056A00097F908959F930E946A2B0F9007FCEE5F75
+:1056B0000C94932B9F3F31F0915020F48795779570
+:1056C0006795B795880F911D9695879597F90895D9
+:1056D0000C94FD290E944E2AD8F3E894E0E0BB2701
+:1056E0009F57F0F02AED3FE049EC06C0EE0FBB0FEC
+:1056F000661F771F881F28F0B23A62077307840776
+:1057000028F0B25A620B730B840BE3959A9572F7EB
+:10571000803830F49A95BB0F661F771F881FD2F729
+:1057200090480C945C2BEF93E0FF07C0A2EA2AEDAF
+:105730003FE049EC5FEB0E948A280E94352A0F90D7
+:10574000039401FC9058E2E7F1E00C94A72B9F939F
+:105750008F937F936F93FF93EF939B01AC010E9414
+:10576000E52AEF91FF910E94002A2F913F914F91DE
+:105770005F910C94E52AAA1BBB1B51E107C0AA1F2D
+:10578000BB1FA617B70710F0A61BB70B881F991FE2
+:105790005A95A9F780959095BC01CD01089597FB86
+:1057A000072E16F4009407D077FD09D00E94BB2B7A
+:1057B00007FC05D03EF4909581959F4F0895709514
+:1057C00061957F4F0895EE0FFF1F0590F491E02D36
+:1057D0000994FC014150504030F001900616D1F779
+:1057E0003197CF010895882799270895F999FECF19
+:1057F00092BD81BDF89A992780B50895A6E1B0E0E1
+:1058000044E050E00C94302CA8E1B0E042E050E0DD
+:105810000C94302C262FF999FECF92BD81BDF89AB9
+:10582000019700B4021639F01FBA20BD0FB6F894E4
+:10583000FA9AF99A0FBE08950396272F0E940B2C0F
+:105840000E940A2C252F0E940B2C242F0C940B2C29
+:105850000196272F0E940B2C0C940A2CDC01CB0103
+:10586000FC01F999FECF06C0F2BDE1BDF89A319670
+:1058700000B40D9241505040B8F70895F894FFCF0E
+:10588000010201191A1B1C1D1E1F202122E80128DC
+:1058900008140A321E3E21DC21B1217B2141210165
+:1058A00097C66636323331F7F6F5943435404D36C7
+:1058B00039FD04B0047A044104D403ED0306041F47
+:0258C0000400E2
+:00000001FF
diff --git a/keyboards/alpha/keymaps/vderm/keymap.c b/keyboards/alpha/keymaps/vderm/keymap.c
new file mode 100644
index 0000000000..5fc642319b
--- /dev/null
+++ b/keyboards/alpha/keymaps/vderm/keymap.c
@@ -0,0 +1,34 @@
+#include QMK_KEYBOARD_H
+
+#define HOME 0
+#define FN 1
+#define FNCHAR 2
+#define FKEYS 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [HOME] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(1, KC_C), LT(2, KC_V), MT(MOD_LSFT, KC_SPC), MT(MOD_RGUI,KC_B), MT(MOD_RALT, KC_N), MT(MOD_RCTL, KC_M)),
+
+ [FN] = LAYOUT(
+ KC_ESC, KC__MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSPC,
+ KC_LCTL, KC_LALT, KC_TRNS, MO(3), MT(MOD_LSFT, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL),
+
+ [FNCHAR] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_GRV,KC_NO,KC_MINS,KC_EQL,KC_BSLS,KC_LBRC,KC_RBRC,KC_SCLN,KC_QUOT,KC_BSPC,
+ KC_LCTL, KC_LALT, MO(3), KC_TRNS, MT(MOD_LSFT, KC_SPC), KC_COMM, KC_DOT, KC_SLSH),
+
+ [FKEYS] = LAYOUT(
+ 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_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_DEL,
+ KC_LCTL, KC_LALT, KC_TRNS, KC_TRNS, MT(MOD_LSFT, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL),
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
diff --git a/keyboards/alps64/keymaps/crd/keymap.c b/keyboards/alps64/keymaps/crd/keymap.c
index 0b12f02ad7..9268083522 100644
--- a/keyboards/alps64/keymaps/crd/keymap.c
+++ b/keyboards/alps64/keymaps/crd/keymap.c
@@ -28,5 +28,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______
)
};
-
-const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/alps64/keymaps/default/keymap.c b/keyboards/alps64/keymaps/default/keymap.c
index dd598379e8..72d29a06fe 100644
--- a/keyboards/alps64/keymaps/default/keymap.c
+++ b/keyboards/alps64/keymaps/default/keymap.c
@@ -10,4 +10,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_APP, KC_RALT, KC_RGUI, KC_RCTL
),
};
-const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/alps64/keymaps/mechmerlin/keymap.c b/keyboards/alps64/keymaps/mechmerlin/keymap.c
new file mode 100644
index 0000000000..d32d9f61e9
--- /dev/null
+++ b/keyboards/alps64/keymaps/mechmerlin/keymap.c
@@ -0,0 +1,26 @@
+#include QMK_KEYBOARD_H
+#include "mechmerlin.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ [_BL] = LAYOUT_infinity( \
+ KC_GESC, 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_BSPC, \
+ 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_CTCP, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TG(_AL), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FL), KC_RALT, KC_RGUI, KC_RCTL),
+
+ [_FL] = LAYOUT_infinity( \
+ 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_F13, KC_DEL, \
+ 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, 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, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [_AL] = LAYOUT_infinity( \
+ 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, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RSFT_T(KC_UP), KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT),
+};
diff --git a/keyboards/alps64/keymaps/mechmerlin/readme.md b/keyboards/alps64/keymaps/mechmerlin/readme.md
new file mode 100644
index 0000000000..896e7ec3cb
--- /dev/null
+++ b/keyboards/alps64/keymaps/mechmerlin/readme.md
@@ -0,0 +1,10 @@
+# MechMerlin Alps64 Infinity Keymap
+
+This is the 60% infinity layout used by u/merlin36, host of the [MechMerlin](www.youtube.com/mechmerlin)
+YouTube channel.
+
+## Keymap Notes
+- `Caps Lock` can be held to act as a `Left Control`
+
+### Build
+To build the firmware file associated with this keymap, simply run `make alps64:mechmerlin`.
diff --git a/keyboards/alps64/readme.md b/keyboards/alps64/readme.md
index d6308ab190..1188d7819c 100644
--- a/keyboards/alps64/readme.md
+++ b/keyboards/alps64/readme.md
@@ -1,14 +1,15 @@
-Alps64
-===
+# Alps64
-An Alps-only 60% board designed by Hasu.
+An Alps only 60% board designed by Hasu.
Keyboard Maintainer: QMK Community
Hardware Supported: Alps64 PCB
Hardware Availability: https://geekhack.org/index.php?topic=69666.0
+QMK is not the Alps64 official firmware. To use the official tools, refer to [TMK Keymap Editor](http://www.tmk-kbd.com/tmk_keyboard/editor/unimap/?alps64) or [TMK Keyboard Firmware on Github](https://github.com/tmk/tmk_keyboard).
+
Make example for this keyboard (after setting up your build environment):
make alps64:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/alu84/keymaps/default/keymap.c b/keyboards/alu84/keymaps/default/keymap.c
index 10dbe273a7..8c08010705 100755
--- a/keyboards/alu84/keymaps/default/keymap.c
+++ b/keyboards/alu84/keymaps/default/keymap.c
@@ -1,5 +1,4 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
#define _BL 0
#define _FN1 1
@@ -108,37 +107,3 @@ void led_set_user(uint8_t usb_led) {
}
}
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-} \ No newline at end of file
diff --git a/keyboards/alu84/keymaps/turbomech/rules.mk b/keyboards/alu84/keymaps/turbomech/rules.mk
index ff8b4b2e64..c8b74bfc9a 100644
--- a/keyboards/alu84/keymaps/turbomech/rules.mk
+++ b/keyboards/alu84/keymaps/turbomech/rules.mk
@@ -10,6 +10,3 @@ AUDIO_ENABLE ?= no
RGBLIGHT_ENABLE ?= yes
UNICODE_ENABLE ?= yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/alu84/readme.md b/keyboards/alu84/readme.md
index ab20c41389..f98addd0bf 100644
--- a/keyboards/alu84/readme.md
+++ b/keyboards/alu84/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make alu84:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/amj40/keymaps/default/rules.mk b/keyboards/amj40/keymaps/default/rules.mk
index fe98672201..cbfa35e631 100644
--- a/keyboards/amj40/keymaps/default/rules.mk
+++ b/keyboards/amj40/keymaps/default/rules.mk
@@ -18,7 +18,3 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/amj40/readme.md b/keyboards/amj40/readme.md
index 42c5374d52..fbf1d9f229 100755
--- a/keyboards/amj40/readme.md
+++ b/keyboards/amj40/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make amj40:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/rules.mk b/keyboards/amj60/keymaps/iso_split_rshift/rules.mk
index 931affcd56..1b34f4f606 100644
--- a/keyboards/amj60/keymaps/iso_split_rshift/rules.mk
+++ b/keyboards/amj60/keymaps/iso_split_rshift/rules.mk
@@ -18,6 +18,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/amj60/readme.md b/keyboards/amj60/readme.md
index e87b1f9f82..394f864562 100644
--- a/keyboards/amj60/readme.md
+++ b/keyboards/amj60/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make amj60:maximized
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/amj96/keymaps/default/keymap.c b/keyboards/amj96/keymaps/default/keymap.c
index 0976d856e4..514c216681 100644
--- a/keyboards/amj96/keymaps/default/keymap.c
+++ b/keyboards/amj96/keymaps/default/keymap.c
@@ -36,10 +36,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/amj96/readme.md b/keyboards/amj96/readme.md
index 7c1b61c768..f131300479 100644
--- a/keyboards/amj96/readme.md
+++ b/keyboards/amj96/readme.md
@@ -10,7 +10,7 @@ Make example for this keyboard (after setting up your build environment):
make amj96:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Notes
- In-switch and underglow LEDs currently not supported.
diff --git a/keyboards/amjpad/keymaps/default/keymap.c b/keyboards/amjpad/keymaps/default/keymap.c
index 1ec81e6db8..01621d54f6 100644
--- a/keyboards/amjpad/keymaps/default/keymap.c
+++ b/keyboards/amjpad/keymaps/default/keymap.c
@@ -4,9 +4,6 @@
#include "rgblight.h"
#endif
-// Used for SHIFT_ESC
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
@@ -66,37 +63,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_P0, LT(_FL,KC_PDOT), KC_PENT \
),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/amjpad/readme.md b/keyboards/amjpad/readme.md
index 27d5e09270..c069af25ad 100644
--- a/keyboards/amjpad/readme.md
+++ b/keyboards/amjpad/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make amjpad:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/atom47/readme.md b/keyboards/atom47/readme.md
index 66f599c6b3..c3cffcea74 100644
--- a/keyboards/atom47/readme.md
+++ b/keyboards/atom47/readme.md
@@ -21,6 +21,6 @@ Hardware Availability: [GeekHack.com Group Buy](https://geekhack.org/index.php?t
## Build
To build the default keymap for the latest revision, simply run `make atom47:default`. Specifiy the revision like so: `make atom47/rev3:default`.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
![Atom47](https://i.imgur.com/JfYnOba.jpg)
diff --git a/keyboards/atom47/rev2/readme.md b/keyboards/atom47/rev2/readme.md
index 30f44df1dc..b63e1bb44c 100644
--- a/keyboards/atom47/rev2/readme.md
+++ b/keyboards/atom47/rev2/readme.md
@@ -20,4 +20,4 @@ To build the default keymap, simply run `make atom47/rev2:default`.
For an alternative, heavily modified layout you would just need to run `make atom47/rev2:LEdiodes`.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/atomic/keymaps/default/keymap.c b/keyboards/atomic/keymaps/default/keymap.c
index ae1efb2b66..6e8cd9f05c 100644
--- a/keyboards/atomic/keymaps/default/keymap.c
+++ b/keyboards/atomic/keymaps/default/keymap.c
@@ -211,10 +211,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
switch(id) {
diff --git a/keyboards/atomic/keymaps/michelle.c b/keyboards/atomic/keymaps/michelle.c
index 9c22423d68..61953bf660 100644
--- a/keyboards/atomic/keymaps/michelle.c
+++ b/keyboards/atomic/keymaps/michelle.c
@@ -168,9 +168,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
switch(id) {
diff --git a/keyboards/atomic/readme.md b/keyboards/atomic/readme.md
index 54a6ee9b54..ab2fa4a239 100644
--- a/keyboards/atomic/readme.md
+++ b/keyboards/atomic/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make atomic:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/atreus/keymaps/alphadox/keymap.c b/keyboards/atreus/keymaps/alphadox/keymap.c
index 575a640c4f..15485f287d 100644
--- a/keyboards/atreus/keymaps/alphadox/keymap.c
+++ b/keyboards/atreus/keymaps/alphadox/keymap.c
@@ -31,10 +31,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {
case TEENSY:
diff --git a/keyboards/atreus/keymaps/classic/keymap.c b/keyboards/atreus/keymaps/classic/keymap.c
index 529b58a13b..dce9dd96de 100644
--- a/keyboards/atreus/keymaps/classic/keymap.c
+++ b/keyboards/atreus/keymaps/classic/keymap.c
@@ -31,10 +31,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/atreus/keymaps/default/keymap.c b/keyboards/atreus/keymaps/default/keymap.c
index 2e991ac6f2..d353728a97 100644
--- a/keyboards/atreus/keymaps/default/keymap.c
+++ b/keyboards/atreus/keymaps/default/keymap.c
@@ -43,10 +43,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SLCK, KC_PAUS )
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
switch(id) {
diff --git a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
index 3672a40c1f..a6efd1befa 100644
--- a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
+++ b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
@@ -65,10 +65,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if(record->event.pressed) {
switch (keycode) {
diff --git a/keyboards/atreus/keymaps/gerb/keymap.c b/keyboards/atreus/keymaps/gerb/keymap.c
index c52f32ef61..f858aa49c4 100644
--- a/keyboards/atreus/keymaps/gerb/keymap.c
+++ b/keyboards/atreus/keymaps/gerb/keymap.c
@@ -46,10 +46,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
switch(id) {
diff --git a/keyboards/atreus/keymaps/jeremy/keymap.c b/keyboards/atreus/keymaps/jeremy/keymap.c
index 890980f41f..baf506b974 100644
--- a/keyboards/atreus/keymaps/jeremy/keymap.c
+++ b/keyboards/atreus/keymaps/jeremy/keymap.c
@@ -55,10 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {}
diff --git a/keyboards/atreus/keymaps/nojjan/keymap.c b/keyboards/atreus/keymaps/nojjan/keymap.c
index 8f56e57467..d0aa3b279a 100644
--- a/keyboards/atreus/keymaps/nojjan/keymap.c
+++ b/keyboards/atreus/keymaps/nojjan/keymap.c
@@ -41,10 +41,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SLCK, KC_PAUS )
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/atreus/keymaps/xk/rules.mk b/keyboards/atreus/keymaps/xk/rules.mk
index 2e76f9da5d..5b69426aca 100644
--- a/keyboards/atreus/keymaps/xk/rules.mk
+++ b/keyboards/atreus/keymaps/xk/rules.mk
@@ -13,6 +13,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c
index fb0c5077f8..dc9c308c38 100644
--- a/keyboards/atreus/keymaps/xyverz/keymap.c
+++ b/keyboards/atreus/keymaps/xyverz/keymap.c
@@ -163,10 +163,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/atreus/readme.md b/keyboards/atreus/readme.md
index 0756c186c4..50901ee328 100644
--- a/keyboards/atreus/readme.md
+++ b/keyboards/atreus/readme.md
@@ -18,4 +18,4 @@ the repository, not the directory containing this readme.
If your keyboard layout is a mirror image of what you expected (i.e. you do not get QWERTY on the left but YTREWQ on the right), then you have an A-Star powered Atreus (older than March 2016) with PCB labels facing *down* instead of up. Specify that by adding `PCBDOWN=yes` to your `make` commands.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/atreus62/keymaps/default/keymap.c b/keyboards/atreus62/keymaps/default/keymap.c
index 89ff7012ea..e39f5ad125 100644
--- a/keyboards/atreus62/keymaps/default/keymap.c
+++ b/keyboards/atreus62/keymaps/default/keymap.c
@@ -47,12 +47,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
switch (id) {
diff --git a/keyboards/atreus62/keymaps/mfluid/keymap.c b/keyboards/atreus62/keymaps/mfluid/keymap.c
index f19c02d8e6..206a4655be 100644
--- a/keyboards/atreus62/keymaps/mfluid/keymap.c
+++ b/keyboards/atreus62/keymaps/mfluid/keymap.c
@@ -38,12 +38,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
switch (id) {
diff --git a/keyboards/atreus62/keymaps/mneme/keymap.c b/keyboards/atreus62/keymaps/mneme/keymap.c
index 299b0c96b1..ba46d405ea 100644
--- a/keyboards/atreus62/keymaps/mneme/keymap.c
+++ b/keyboards/atreus62/keymaps/mneme/keymap.c
@@ -171,9 +171,6 @@ static void m_handle_kf (keyrecord_t *record, uint8_t id) {
}
}
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
diff --git a/keyboards/atreus62/keymaps/pcewing/keymap.c b/keyboards/atreus62/keymaps/pcewing/keymap.c
index 49d3c90842..46ec3d548e 100644
--- a/keyboards/atreus62/keymaps/pcewing/keymap.c
+++ b/keyboards/atreus62/keymaps/pcewing/keymap.c
@@ -76,10 +76,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/atreus62/keymaps/xyverz/keymap.c b/keyboards/atreus62/keymaps/xyverz/keymap.c
index 0f2e8ea08f..cc45e25fa4 100644
--- a/keyboards/atreus62/keymaps/xyverz/keymap.c
+++ b/keyboards/atreus62/keymaps/xyverz/keymap.c
@@ -137,9 +137,6 @@ void matrix_init_user(void) {
#endif
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/atreus62/readme.md b/keyboards/atreus62/readme.md
index b2de90011c..bb2a24e87e 100644
--- a/keyboards/atreus62/readme.md
+++ b/keyboards/atreus62/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make atreus62:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/bantam44/keymaps/default/keymap.c b/keyboards/bantam44/keymaps/default/keymap.c
index 0e15bebf86..dff91d6c20 100644
--- a/keyboards/bantam44/keymaps/default/keymap.c
+++ b/keyboards/bantam44/keymaps/default/keymap.c
@@ -24,9 +24,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
{
return MACRO_NONE;
diff --git a/keyboards/bantam44/readme.md b/keyboards/bantam44/readme.md
index 0103c16472..08a5167c6f 100644
--- a/keyboards/bantam44/readme.md
+++ b/keyboards/bantam44/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make bantam44:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/bdn9/bdn9.c b/keyboards/bdn9/bdn9.c
new file mode 100644
index 0000000000..0ff55fd6d4
--- /dev/null
+++ b/keyboards/bdn9/bdn9.c
@@ -0,0 +1 @@
+#include "bdn9.h"
diff --git a/quantum/template/avr/template.h b/keyboards/bdn9/bdn9.h
index 0d626ed50b..26b0435605 100644
--- a/quantum/template/avr/template.h
+++ b/keyboards/bdn9/bdn9.h
@@ -1,4 +1,4 @@
-/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 Danny Nguyen <danny@keeb.io>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,8 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef %KEYBOARD_UPPERCASE%_H
-#define %KEYBOARD_UPPERCASE%_H
+#pragma once
#include "quantum.h"
@@ -27,12 +26,10 @@
* represents the switch matrix.
*/
#define LAYOUT( \
- K00, K01, K02, \
- K10, K11 \
+ KA1, KA2, KA3, \
+ KB1, KB2, KB3, \
+ KC1, KC2, KC3 \
) \
{ \
- { K00, K01, K02 }, \
- { K10, KC_NO, K11 }, \
+ { KA1, KA2, KA3, KB1, KB2, KB3, KC1, KC2, KC3 } \
}
-
-#endif
diff --git a/keyboards/bdn9/config.h b/keyboards/bdn9/config.h
new file mode 100644
index 0000000000..604da5ef41
--- /dev/null
+++ b/keyboards/bdn9/config.h
@@ -0,0 +1,74 @@
+/*
+Copyright 2019 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCB10
+#define PRODUCT_ID 0x1133
+#define DEVICE_VER 0x0100
+#define MANUFACTURER Keebio
+#define PRODUCT BDN9
+#define DESCRIPTION 3x3 Macropad with Rotary Encoders
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 9
+
+/* Keyboard Matrix Assignments */
+#define NO_PIN (~0)
+#define MATRIX_ROW_PINS { NO_PIN }
+#define MATRIX_COL_PINS { D2, D4, F4, D7, B1, B3, E6, B4, B2 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define NUMBER_OF_ENCODERS 2
+#define ENCODERS_PAD_A { D1, F5 }
+#define ENCODERS_PAD_B { D0, F6 }
+
+
+#define BACKLIGHT_PIN B5
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 7
+
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 3
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+ #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+ /*== all animations enable ==*/
+ #define RGBLIGHT_ANIMATIONS
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
diff --git a/keyboards/bdn9/info.json b/keyboards/bdn9/info.json
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/bdn9/info.json
diff --git a/keyboards/bdn9/keymaps/default/keymap.c b/keyboards/bdn9/keymaps/default/keymap.c
new file mode 100644
index 0000000000..66b9a3eb67
--- /dev/null
+++ b/keyboards/bdn9/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2019 Danny Nguyen <danny@keeb.io>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_A, KC_B, KC_C, \
+ BL_STEP, KC_UP, RGB_MOD, \
+ KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+ else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_DOWN);
+ } else {
+ tap_code(KC_UP);
+ }
+ }
+}
diff --git a/keyboards/bdn9/readme.md b/keyboards/bdn9/readme.md
new file mode 100644
index 0000000000..c9d5ed0b35
--- /dev/null
+++ b/keyboards/bdn9/readme.md
@@ -0,0 +1,15 @@
+# BDN9
+
+![BDN9](https://cdn.shopify.com/s/files/1/1851/5125/products/image_bd8d9423-950e-4aad-bea5-665d896f879a_530x@2x.jpg?v=1547909493)
+
+A 3x3 macropad with support for a rotary encoder at the upper two corners.
+
+Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
+Hardware Supported: Pro Micro, Elite-C, Proton C
+Hardware Availability: [Keebio - BDN9](https://keeb.io/products/bdn9-3x3-9-key-macropad-rotary-encoder-support)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bdn9:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bdn9/rules.mk b/keyboards/bdn9/rules.mk
new file mode 100644
index 0000000000..3ab8491089
--- /dev/null
+++ b/keyboards/bdn9/rules.mk
@@ -0,0 +1,50 @@
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+ENCODER_ENABLE = yes
diff --git a/keyboards/bface/README.md b/keyboards/bface/README.md
index 4120e3bc2d..0dac7caf30 100644
--- a/keyboards/bface/README.md
+++ b/keyboards/bface/README.md
@@ -41,4 +41,4 @@ macOS:
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/bface/keymaps/default/keymap.c b/keyboards/bface/keymaps/default/keymap.c
index 9c41014bcb..a3e9bc9577 100644
--- a/keyboards/bface/keymaps/default/keymap.c
+++ b/keyboards/bface/keymaps/default/keymap.c
@@ -41,7 +41,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
), // */
};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(1),
-};
diff --git a/keyboards/bfake/readme.md b/keyboards/bfake/readme.md
index ca12b49962..1ccc25f2dc 100644
--- a/keyboards/bfake/readme.md
+++ b/keyboards/bfake/readme.md
@@ -41,4 +41,4 @@ macOS:
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/bfo9000/readme.md b/keyboards/bfo9000/readme.md
index 20c9b2ff79..d2175af236 100644
--- a/keyboards/bfo9000/readme.md
+++ b/keyboards/bfo9000/readme.md
@@ -15,4 +15,4 @@ Example of flashing this keyboard:
make bfo9000:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/blockey/readme.md b/keyboards/blockey/readme.md
index 24626318fb..20cb7e98cc 100644
--- a/keyboards/blockey/readme.md
+++ b/keyboards/blockey/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make blockey:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/bmini/readme.md b/keyboards/bmini/readme.md
index 38dc493075..9c70262129 100644
--- a/keyboards/bmini/readme.md
+++ b/keyboards/bmini/readme.md
@@ -41,4 +41,4 @@ macOS:
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
index 6767f04145..3ad3247d49 100644
--- a/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
@@ -14,10 +14,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
@@ -48,4 +44,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
void led_set_user(uint8_t usb_led) {
-} \ No newline at end of file
+}
diff --git a/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c
index 856cef9cc2..c0549c424e 100644
--- a/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c
+++ b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c
@@ -3,12 +3,13 @@
#define _______ KC_TRNS
#define XXXXXXX KC_NO
-#define C(kc) LCTL(KC_##kc)
+#undef C
+#undef S
+#define C(kc) LCTL(KC_##kc)
+#define S(kc) LSFT(KC_##kc)
#define RA(kc) RALT(KC_##kc)
#define KC_SLCT KC_SELECT
#define MEDAPP LT(MEDIA, KC_APP)
-#undef S
-#define S(kc) LSFT(KC_##kc)
uint8_t current_layer_global = 255;
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c
index 79f07d3bb8..5036bcb3f5 100644
--- a/keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c
+++ b/keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c
@@ -17,11 +17,15 @@
#include QMK_KEYBOARD_H
/* Allow shortcuts for combos like RALT(KC_RBRC) that don't take up more than 7 characters: */
-#define G(kc) RALT(KC_##kc)
-#define A(kc) LALT(KC_##kc)
+/* Original shortcuts (quantum_keycodes.h) take full-sized keycodes: too long! */
+#undef C
+#undef S
+#undef A
+#undef G
#define C(kc) LCTL(KC_##kc)
-#undef S /* Original shortcut (quantum_keycodes.h) takes full-sized keycodes: too long! */
#define S(kc) LSFT(KC_##kc)
+#define A(kc) LALT(KC_##kc)
+#define G(kc) RALT(KC_##kc)
#define CTALDEL LCTL(LALT(KC_DEL))
enum layers {
diff --git a/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk b/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk
index 93f927c7d0..7a331cd530 100644
--- a/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk
index 93f927c7d0..7a331cd530 100644
--- a/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c b/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c
index ea103154ea..0576cb2422 100644
--- a/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c
@@ -25,11 +25,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c
index 16c0342d23..afae406b1e 100644
--- a/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c
@@ -25,11 +25,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/bthlabs/geekpad/config.h b/keyboards/bthlabs/geekpad/config.h
new file mode 100644
index 0000000000..2c33f359fd
--- /dev/null
+++ b/keyboards/bthlabs/geekpad/config.h
@@ -0,0 +1,227 @@
+/*
+Copyright 2019-present Tomek Wójcik <contact@bthlabs.pl>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4257
+#define DEVICE_VER 0x0001
+#define MANUFACTURER BTHLabs
+#define PRODUCT GeekPad
+#define DESCRIPTION 3x3 custom macro pad
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F4, F5, F6 }
+#define MATRIX_COL_PINS { D4, D0, D1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+// #define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+// #define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/bthlabs/geekpad/geekpad.c b/keyboards/bthlabs/geekpad/geekpad.c
new file mode 100644
index 0000000000..e52507c93d
--- /dev/null
+++ b/keyboards/bthlabs/geekpad/geekpad.c
@@ -0,0 +1,43 @@
+/* Copyright 2019-present Tomek Wójcik <contact@bthlabs.pl>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "geekpad.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/bthlabs/geekpad/geekpad.h b/keyboards/bthlabs/geekpad/geekpad.h
new file mode 100644
index 0000000000..c9f1ac9d4f
--- /dev/null
+++ b/keyboards/bthlabs/geekpad/geekpad.h
@@ -0,0 +1,40 @@
+/* Copyright 2019-present Tomek Wójcik <contact@bthlabs.pl>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef GEEKPAD_H
+#define GEEKPAD_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ K00, K01, K02, \
+ K10, K11, K12, \
+ K20, K21, K22 \
+) \
+{ \
+ { K00, K01, K02 }, \
+ { K10, K11, K12 }, \
+ { K20, K21, K22 } \
+}
+
+#endif
diff --git a/keyboards/bthlabs/geekpad/info.json b/keyboards/bthlabs/geekpad/info.json
new file mode 100644
index 0000000000..c95497c553
--- /dev/null
+++ b/keyboards/bthlabs/geekpad/info.json
@@ -0,0 +1,22 @@
+{
+ "keyboard_name": "BTHLabs GeekPad",
+ "url": "https://git.bthlabs.pl/tomekwojcik/geekpad",
+ "maintainer": "Tomek Wójcik <contact@bthlabs.pl>",
+ "width": 3,
+ "height": 3,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2,"y": 0},
+ {"x": 0, "y": 1},
+ {"x": 1, "y": 1},
+ {"x": 2,"y": 1},
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2},
+ {"x": 2,"y": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/bthlabs/geekpad/keymaps/default/config.h b/keyboards/bthlabs/geekpad/keymaps/default/config.h
new file mode 100644
index 0000000000..1cba162c79
--- /dev/null
+++ b/keyboards/bthlabs/geekpad/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019-present Tomek Wójcik <contact@bthlabs.pl>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/bthlabs/geekpad/keymaps/default/keymap.c b/keyboards/bthlabs/geekpad/keymaps/default/keymap.c
new file mode 100644
index 0000000000..a8791e70ca
--- /dev/null
+++ b/keyboards/bthlabs/geekpad/keymaps/default/keymap.c
@@ -0,0 +1,24 @@
+/* Copyright 2019-present Tomek Wójcik <contact@bthlabs.pl>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( /* Base */
+ KC_F1, KC_F2, KC_F3,
+ KC_MEDIA_REWIND, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_FAST_FORWARD,
+ KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP
+ ),
+};
diff --git a/keyboards/bthlabs/geekpad/readme.md b/keyboards/bthlabs/geekpad/readme.md
new file mode 100644
index 0000000000..6558c32d97
--- /dev/null
+++ b/keyboards/bthlabs/geekpad/readme.md
@@ -0,0 +1,15 @@
+# BTHLabs GeekPad
+
+![GeekPad](https://i.imgur.com/FEzO81l.jpg)
+
+A 3x3 custom macro pad designed and developed by Tomek Wójcik.
+
+Keyboard Maintainer: [Tomek Wójcik](https://www.bthlabs.pl/)
+Hardware Supported: GeekPad Custom PCB
+Hardware Availability: [Project Repository](https://git.bthlabs.pl/tomekwojcik/geekpad)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bthlabs/geekpad:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bthlabs/geekpad/rules.mk b/keyboards/bthlabs/geekpad/rules.mk
new file mode 100644
index 0000000000..d4785aabbe
--- /dev/null
+++ b/keyboards/bthlabs/geekpad/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.c b/keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.c
index 4331155df4..7e9f90853e 100644
--- a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.c
+++ b/keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.c
@@ -14,6 +14,11 @@
limitations under the License.
*/
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
#include "hal.h"
#if HAL_USE_PAL || defined(__DOXYGEN__)
@@ -74,27 +79,7 @@ void __early_init(void) {
stm32_clock_init();
}
-#if HAL_USE_SDC || defined(__DOXYGEN__)
-/**
- * @brief SDC card detection.
- */
-bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
- (void)sdcp;
- /* TODO: Fill the implementation.*/
- return true;
-}
-
-/**
- * @brief SDC card write protection detection.
- */
-bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
-
- (void)sdcp;
- /* TODO: Fill the implementation.*/
- return false;
-}
-#endif /* HAL_USE_SDC */
#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
/**
diff --git a/keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.h b/keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.h
new file mode 100644
index 0000000000..173f7b6054
--- /dev/null
+++ b/keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.h
@@ -0,0 +1,923 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
+#ifndef BOARD_H
+#define BOARD_H
+
+/*
+ * Setup for ST STM32F072B-Discovery board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_ST_STM32F072B_DISCOVERY
+#define BOARD_NAME "ST STM32F072B-Discovery"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ * NOTE: HSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 0U
+#endif
+
+#define STM32_LSEDRV (3U << 3U)
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 0U
+#endif
+
+#define STM32_HSE_BYPASS
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F072xB
+
+/*
+ * IO pins assignments.
+ */
+#define GPIOA_BUTTON 0U
+#define GPIOA_PIN1 1U
+#define GPIOA_PIN2 2U
+#define GPIOA_PIN3 3U
+#define GPIOA_PIN4 4U
+#define GPIOA_PIN5 5U
+#define GPIOA_PIN6 6U
+#define GPIOA_PIN7 7U
+#define GPIOA_PIN8 8U
+#define GPIOA_PIN9 9U
+#define GPIOA_PIN10 10U
+#define GPIOA_USB_DM 11U
+#define GPIOA_USB_DP 12U
+#define GPIOA_SWDIO 13U
+#define GPIOA_SWCLK 14U
+#define GPIOA_PIN15 15U
+
+#define GPIOB_PIN0 0U
+#define GPIOB_PIN1 1U
+#define GPIOB_PIN2 2U
+#define GPIOB_PIN3 3U
+#define GPIOB_PIN4 4U
+#define GPIOB_PIN5 5U
+#define GPIOB_PIN6 6U
+#define GPIOB_PIN7 7U
+#define GPIOB_PIN8 8U
+#define GPIOB_PIN9 9U
+#define GPIOB_PIN10 10U
+#define GPIOB_PIN11 11U
+#define GPIOB_PIN12 12U
+#define GPIOB_SPI2_SCK 13U
+#define GPIOB_SPI2_MISO 14U
+#define GPIOB_SPI2_MOSI 15U
+
+#define GPIOC_MEMS_CS 0U
+#define GPIOC_PIN1 1U
+#define GPIOC_PIN2 2U
+#define GPIOC_PIN3 3U
+#define GPIOC_PIN4 4U
+#define GPIOC_PIN5 5U
+#define GPIOC_LED_RED 6U
+#define GPIOC_LED_BLUE 7U
+#define GPIOC_LED_ORANGE 8U
+#define GPIOC_LED_GREEN 9U
+#define GPIOC_PIN10 10U
+#define GPIOC_PIN11 11U
+#define GPIOC_PIN12 12U
+#define GPIOC_PIN13 13U
+#define GPIOC_OSC32_IN 14U
+#define GPIOC_OSC32_OUT 15U
+
+#define GPIOD_PIN0 0U
+#define GPIOD_PIN1 1U
+#define GPIOD_PIN2 2U
+#define GPIOD_PIN3 3U
+#define GPIOD_PIN4 4U
+#define GPIOD_PIN5 5U
+#define GPIOD_PIN6 6U
+#define GPIOD_PIN7 7U
+#define GPIOD_PIN8 8U
+#define GPIOD_PIN9 9U
+#define GPIOD_PIN10 10U
+#define GPIOD_PIN11 11U
+#define GPIOD_PIN12 12U
+#define GPIOD_PIN13 13U
+#define GPIOD_PIN14 14U
+#define GPIOD_PIN15 15U
+
+#define GPIOE_PIN0 0U
+#define GPIOE_PIN1 1U
+#define GPIOE_PIN2 2U
+#define GPIOE_PIN3 3U
+#define GPIOE_PIN4 4U
+#define GPIOE_PIN5 5U
+#define GPIOE_PIN6 6U
+#define GPIOE_PIN7 7U
+#define GPIOE_PIN8 8U
+#define GPIOE_PIN9 9U
+#define GPIOE_PIN10 10U
+#define GPIOE_PIN11 11U
+#define GPIOE_PIN12 12U
+#define GPIOE_PIN13 13U
+#define GPIOE_PIN14 14U
+#define GPIOE_PIN15 15U
+
+#define GPIOF_OSC_IN 0U
+#define GPIOF_OSC_OUT 1U
+#define GPIOF_PIN2 2U
+#define GPIOF_PIN3 3U
+#define GPIOF_PIN4 4U
+#define GPIOF_PIN5 5U
+#define GPIOF_PIN6 6U
+#define GPIOF_PIN7 7U
+#define GPIOF_PIN8 8U
+#define GPIOF_PIN9 9U
+#define GPIOF_PIN10 10U
+#define GPIOF_PIN11 11U
+#define GPIOF_PIN12 12U
+#define GPIOF_PIN13 13U
+#define GPIOF_PIN14 14U
+#define GPIOF_PIN15 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_BUTTON PAL_LINE(GPIOA, 0U)
+#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
+#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
+#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
+#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
+
+#define LINE_SPI2_SCK PAL_LINE(GPIOB, 13U)
+#define LINE_SPI2_MISO PAL_LINE(GPIOB, 14U)
+#define LINE_SPI2_MOSI PAL_LINE(GPIOB, 15U)
+
+#define LINE_MEMS_CS PAL_LINE(GPIOC, 0U)
+#define LINE_LED_RED PAL_LINE(GPIOC, 6U)
+#define LINE_LED_BLUE PAL_LINE(GPIOC, 7U)
+#define LINE_LED_ORANGE PAL_LINE(GPIOC, 8U)
+#define LINE_LED_GREEN PAL_LINE(GPIOC, 9U)
+#define LINE_OSC32_IN PAL_LINE(GPIOC, 14U)
+#define LINE_OSC32_OUT PAL_LINE(GPIOC, 15U)
+
+
+
+#define LINE_OSC_IN PAL_LINE(GPIOF, 0U)
+#define LINE_OSC_OUT PAL_LINE(GPIOF, 1U)
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
+#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
+#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
+#define PIN_ODR_LOW(n) (0U << (n))
+#define PIN_ODR_HIGH(n) (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
+#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
+#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
+#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
+#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
+#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
+#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
+#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
+#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
+
+/*
+ * GPIOA setup:
+ *
+ * PA0 - BUTTON (input floating).
+ * PA1 - PIN1 (input pullup).
+ * PA2 - PIN2 (input pullup).
+ * PA3 - PIN3 (input pullup).
+ * PA4 - PIN4 (input pullup).
+ * PA5 - PIN5 (input pullup).
+ * PA6 - PIN6 (input pullup).
+ * PA7 - PIN7 (input pullup).
+ * PA8 - PIN8 (input pullup).
+ * PA9 - PIN9 (input pullup).
+ * PA10 - PIN10 (input pullup).
+ * PA11 - USB_DM (input floating).
+ * PA12 - USB_DP (input floating).
+ * PA13 - SWDIO (alternate 0).
+ * PA14 - SWCLK (alternate 0).
+ * PA15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_BUTTON) | \
+ PIN_MODE_INPUT(GPIOA_PIN1) | \
+ PIN_MODE_INPUT(GPIOA_PIN2) | \
+ PIN_MODE_INPUT(GPIOA_PIN3) | \
+ PIN_MODE_INPUT(GPIOA_PIN4) | \
+ PIN_MODE_INPUT(GPIOA_PIN5) | \
+ PIN_MODE_INPUT(GPIOA_PIN6) | \
+ PIN_MODE_INPUT(GPIOA_PIN7) | \
+ PIN_MODE_INPUT(GPIOA_PIN8) | \
+ PIN_MODE_INPUT(GPIOA_PIN9) | \
+ PIN_MODE_INPUT(GPIOA_PIN10) | \
+ PIN_MODE_INPUT(GPIOA_USB_DM) | \
+ PIN_MODE_INPUT(GPIOA_USB_DP) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
+ PIN_MODE_INPUT(GPIOA_PIN15))
+#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_BUTTON) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
+#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_BUTTON) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOA_USB_DM) | \
+ PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
+ PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
+ PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
+ PIN_OSPEED_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_BUTTON) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
+ PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
+ PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN15))
+#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_BUTTON) | \
+ PIN_ODR_HIGH(GPIOA_PIN1) | \
+ PIN_ODR_HIGH(GPIOA_PIN2) | \
+ PIN_ODR_HIGH(GPIOA_PIN3) | \
+ PIN_ODR_HIGH(GPIOA_PIN4) | \
+ PIN_ODR_HIGH(GPIOA_PIN5) | \
+ PIN_ODR_HIGH(GPIOA_PIN6) | \
+ PIN_ODR_HIGH(GPIOA_PIN7) | \
+ PIN_ODR_HIGH(GPIOA_PIN8) | \
+ PIN_ODR_HIGH(GPIOA_PIN9) | \
+ PIN_ODR_HIGH(GPIOA_PIN10) | \
+ PIN_ODR_HIGH(GPIOA_USB_DM) | \
+ PIN_ODR_HIGH(GPIOA_USB_DP) | \
+ PIN_ODR_HIGH(GPIOA_SWDIO) | \
+ PIN_ODR_HIGH(GPIOA_SWCLK) | \
+ PIN_ODR_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_BUTTON, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN7, 0U))
+#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOA_USB_DM, 0U) | \
+ PIN_AFIO_AF(GPIOA_USB_DP, 0U) | \
+ PIN_AFIO_AF(GPIOA_SWDIO, 0U) | \
+ PIN_AFIO_AF(GPIOA_SWCLK, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN15, 0U))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0 - PIN0 (input pullup).
+ * PB1 - PIN1 (input pullup).
+ * PB2 - PIN2 (input pullup).
+ * PB3 - PIN3 (input pullup).
+ * PB4 - PIN4 (input pullup).
+ * PB5 - PIN5 (input pullup).
+ * PB6 - PIN6 (input pullup).
+ * PB7 - PIN7 (input pullup).
+ * PB8 - PIN8 (input pullup).
+ * PB9 - PIN9 (input pullup).
+ * PB10 - PIN10 (input pullup).
+ * PB11 - PIN11 (input pullup).
+ * PB12 - PIN12 (input pullup).
+ * PB13 - SPI2_SCK (alternate 0).
+ * PB14 - SPI2_MISO (alternate 0).
+ * PB15 - SPI2_MOSI (alternate 0).
+ */
+#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
+ PIN_MODE_INPUT(GPIOB_PIN1) | \
+ PIN_MODE_INPUT(GPIOB_PIN2) | \
+ PIN_MODE_INPUT(GPIOB_PIN3) | \
+ PIN_MODE_INPUT(GPIOB_PIN4) | \
+ PIN_MODE_INPUT(GPIOB_PIN5) | \
+ PIN_MODE_INPUT(GPIOB_PIN6) | \
+ PIN_MODE_INPUT(GPIOB_PIN7) | \
+ PIN_MODE_INPUT(GPIOB_PIN8) | \
+ PIN_MODE_INPUT(GPIOB_PIN9) | \
+ PIN_MODE_INPUT(GPIOB_PIN10) | \
+ PIN_MODE_INPUT(GPIOB_PIN11) | \
+ PIN_MODE_INPUT(GPIOB_PIN12) | \
+ PIN_MODE_ALTERNATE(GPIOB_SPI2_SCK) | \
+ PIN_MODE_ALTERNATE(GPIOB_SPI2_MISO) | \
+ PIN_MODE_ALTERNATE(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_SPI2_SCK) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MISO) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOB_SPI2_SCK) | \
+ PIN_OSPEED_VERYLOW(GPIOB_SPI2_MISO) | \
+ PIN_OSPEED_VERYLOW(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
+ PIN_PUPDR_FLOATING(GPIOB_SPI2_SCK) | \
+ PIN_PUPDR_FLOATING(GPIOB_SPI2_MISO) | \
+ PIN_PUPDR_FLOATING(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
+ PIN_ODR_HIGH(GPIOB_PIN1) | \
+ PIN_ODR_HIGH(GPIOB_PIN2) | \
+ PIN_ODR_HIGH(GPIOB_PIN3) | \
+ PIN_ODR_HIGH(GPIOB_PIN4) | \
+ PIN_ODR_HIGH(GPIOB_PIN5) | \
+ PIN_ODR_HIGH(GPIOB_PIN6) | \
+ PIN_ODR_HIGH(GPIOB_PIN7) | \
+ PIN_ODR_HIGH(GPIOB_PIN8) | \
+ PIN_ODR_HIGH(GPIOB_PIN9) | \
+ PIN_ODR_HIGH(GPIOB_PIN10) | \
+ PIN_ODR_HIGH(GPIOB_PIN11) | \
+ PIN_ODR_HIGH(GPIOB_PIN12) | \
+ PIN_ODR_HIGH(GPIOB_SPI2_SCK) | \
+ PIN_ODR_HIGH(GPIOB_SPI2_MISO) | \
+ PIN_ODR_HIGH(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN7, 0U))
+#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOB_SPI2_SCK, 0U) | \
+ PIN_AFIO_AF(GPIOB_SPI2_MISO, 0U) | \
+ PIN_AFIO_AF(GPIOB_SPI2_MOSI, 0U))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0 - MEMS_CS (output pushpull maximum).
+ * PC1 - PIN1 (input pullup).
+ * PC2 - PIN2 (input pullup).
+ * PC3 - PIN3 (input pullup).
+ * PC4 - PIN4 (input pullup).
+ * PC5 - PIN5 (input pullup).
+ * PC6 - LED_RED (output pushpull maximum).
+ * PC7 - LED_BLUE (output pushpull maximum).
+ * PC8 - LED_ORANGE (output pushpull maximum).
+ * PC9 - LED_GREEN (output pushpull maximum).
+ * PC10 - PIN10 (input pullup).
+ * PC11 - PIN11 (input pullup).
+ * PC12 - PIN12 (input pullup).
+ * PC13 - PIN13 (input pullup).
+ * PC14 - OSC32_IN (input floating).
+ * PC15 - OSC32_OUT (input floating).
+ */
+#define VAL_GPIOC_MODER (PIN_MODE_OUTPUT(GPIOC_MEMS_CS) | \
+ PIN_MODE_INPUT(GPIOC_PIN1) | \
+ PIN_MODE_INPUT(GPIOC_PIN2) | \
+ PIN_MODE_INPUT(GPIOC_PIN3) | \
+ PIN_MODE_INPUT(GPIOC_PIN4) | \
+ PIN_MODE_INPUT(GPIOC_PIN5) | \
+ PIN_MODE_OUTPUT(GPIOC_LED_RED) | \
+ PIN_MODE_OUTPUT(GPIOC_LED_BLUE) | \
+ PIN_MODE_OUTPUT(GPIOC_LED_ORANGE) | \
+ PIN_MODE_OUTPUT(GPIOC_LED_GREEN) | \
+ PIN_MODE_INPUT(GPIOC_PIN10) | \
+ PIN_MODE_INPUT(GPIOC_PIN11) | \
+ PIN_MODE_INPUT(GPIOC_PIN12) | \
+ PIN_MODE_INPUT(GPIOC_PIN13) | \
+ PIN_MODE_INPUT(GPIOC_OSC32_IN) | \
+ PIN_MODE_INPUT(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_MEMS_CS) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_LED_RED) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_LED_BLUE) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_LED_ORANGE) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_LED_GREEN) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_OSC32_IN) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_HIGH(GPIOC_MEMS_CS) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOC_LED_RED) | \
+ PIN_OSPEED_HIGH(GPIOC_LED_BLUE) | \
+ PIN_OSPEED_HIGH(GPIOC_LED_ORANGE) | \
+ PIN_OSPEED_HIGH(GPIOC_LED_GREEN) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOC_OSC32_IN) | \
+ PIN_OSPEED_HIGH(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_PUPDR (PIN_PUPDR_FLOATING(GPIOC_MEMS_CS) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
+ PIN_PUPDR_FLOATING(GPIOC_LED_RED) | \
+ PIN_PUPDR_FLOATING(GPIOC_LED_BLUE) | \
+ PIN_PUPDR_FLOATING(GPIOC_LED_ORANGE) | \
+ PIN_PUPDR_FLOATING(GPIOC_LED_GREEN) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
+ PIN_PUPDR_FLOATING(GPIOC_OSC32_IN) | \
+ PIN_PUPDR_FLOATING(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_MEMS_CS) | \
+ PIN_ODR_HIGH(GPIOC_PIN1) | \
+ PIN_ODR_HIGH(GPIOC_PIN2) | \
+ PIN_ODR_HIGH(GPIOC_PIN3) | \
+ PIN_ODR_HIGH(GPIOC_PIN4) | \
+ PIN_ODR_HIGH(GPIOC_PIN5) | \
+ PIN_ODR_LOW(GPIOC_LED_RED) | \
+ PIN_ODR_LOW(GPIOC_LED_BLUE) | \
+ PIN_ODR_LOW(GPIOC_LED_ORANGE) | \
+ PIN_ODR_LOW(GPIOC_LED_GREEN) | \
+ PIN_ODR_HIGH(GPIOC_PIN10) | \
+ PIN_ODR_HIGH(GPIOC_PIN11) | \
+ PIN_ODR_HIGH(GPIOC_PIN12) | \
+ PIN_ODR_HIGH(GPIOC_PIN13) | \
+ PIN_ODR_HIGH(GPIOC_OSC32_IN) | \
+ PIN_ODR_HIGH(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_MEMS_CS, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOC_LED_RED, 0U) | \
+ PIN_AFIO_AF(GPIOC_LED_BLUE, 0U))
+#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_LED_ORANGE, 0U) | \
+ PIN_AFIO_AF(GPIOC_LED_GREEN, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOC_OSC32_IN, 0U) | \
+ PIN_AFIO_AF(GPIOC_OSC32_OUT, 0U))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0 - PIN0 (input pullup).
+ * PD1 - PIN1 (input pullup).
+ * PD2 - PIN2 (input pullup).
+ * PD3 - PIN3 (input pullup).
+ * PD4 - PIN4 (input pullup).
+ * PD5 - PIN5 (input pullup).
+ * PD6 - PIN6 (input pullup).
+ * PD7 - PIN7 (input pullup).
+ * PD8 - PIN8 (input pullup).
+ * PD9 - PIN9 (input pullup).
+ * PD10 - PIN10 (input pullup).
+ * PD11 - PIN11 (input pullup).
+ * PD12 - PIN12 (input pullup).
+ * PD13 - PIN13 (input pullup).
+ * PD14 - PIN14 (input pullup).
+ * PD15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
+ PIN_MODE_INPUT(GPIOD_PIN1) | \
+ PIN_MODE_INPUT(GPIOD_PIN2) | \
+ PIN_MODE_INPUT(GPIOD_PIN3) | \
+ PIN_MODE_INPUT(GPIOD_PIN4) | \
+ PIN_MODE_INPUT(GPIOD_PIN5) | \
+ PIN_MODE_INPUT(GPIOD_PIN6) | \
+ PIN_MODE_INPUT(GPIOD_PIN7) | \
+ PIN_MODE_INPUT(GPIOD_PIN8) | \
+ PIN_MODE_INPUT(GPIOD_PIN9) | \
+ PIN_MODE_INPUT(GPIOD_PIN10) | \
+ PIN_MODE_INPUT(GPIOD_PIN11) | \
+ PIN_MODE_INPUT(GPIOD_PIN12) | \
+ PIN_MODE_INPUT(GPIOD_PIN13) | \
+ PIN_MODE_INPUT(GPIOD_PIN14) | \
+ PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
+#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN15))
+#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN15))
+#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
+ PIN_ODR_HIGH(GPIOD_PIN1) | \
+ PIN_ODR_HIGH(GPIOD_PIN2) | \
+ PIN_ODR_HIGH(GPIOD_PIN3) | \
+ PIN_ODR_HIGH(GPIOD_PIN4) | \
+ PIN_ODR_HIGH(GPIOD_PIN5) | \
+ PIN_ODR_HIGH(GPIOD_PIN6) | \
+ PIN_ODR_HIGH(GPIOD_PIN7) | \
+ PIN_ODR_HIGH(GPIOD_PIN8) | \
+ PIN_ODR_HIGH(GPIOD_PIN9) | \
+ PIN_ODR_HIGH(GPIOD_PIN10) | \
+ PIN_ODR_HIGH(GPIOD_PIN11) | \
+ PIN_ODR_HIGH(GPIOD_PIN12) | \
+ PIN_ODR_HIGH(GPIOD_PIN13) | \
+ PIN_ODR_HIGH(GPIOD_PIN14) | \
+ PIN_ODR_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN7, 0U))
+#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN15, 0U))
+
+/*
+ * GPIOE setup:
+ *
+ * PE0 - PIN0 (input pullup).
+ * PE1 - PIN1 (input pullup).
+ * PE2 - PIN2 (input pullup).
+ * PE3 - PIN3 (input pullup).
+ * PE4 - PIN4 (input pullup).
+ * PE5 - PIN5 (input pullup).
+ * PE6 - PIN6 (input pullup).
+ * PE7 - PIN7 (input pullup).
+ * PE8 - PIN8 (input pullup).
+ * PE9 - PIN9 (input pullup).
+ * PE10 - PIN10 (input pullup).
+ * PE11 - PIN11 (input pullup).
+ * PE12 - PIN12 (input pullup).
+ * PE13 - PIN13 (input pullup).
+ * PE14 - PIN14 (input pullup).
+ * PE15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
+ PIN_MODE_INPUT(GPIOE_PIN1) | \
+ PIN_MODE_INPUT(GPIOE_PIN2) | \
+ PIN_MODE_INPUT(GPIOE_PIN3) | \
+ PIN_MODE_INPUT(GPIOE_PIN4) | \
+ PIN_MODE_INPUT(GPIOE_PIN5) | \
+ PIN_MODE_INPUT(GPIOE_PIN6) | \
+ PIN_MODE_INPUT(GPIOE_PIN7) | \
+ PIN_MODE_INPUT(GPIOE_PIN8) | \
+ PIN_MODE_INPUT(GPIOE_PIN9) | \
+ PIN_MODE_INPUT(GPIOE_PIN10) | \
+ PIN_MODE_INPUT(GPIOE_PIN11) | \
+ PIN_MODE_INPUT(GPIOE_PIN12) | \
+ PIN_MODE_INPUT(GPIOE_PIN13) | \
+ PIN_MODE_INPUT(GPIOE_PIN14) | \
+ PIN_MODE_INPUT(GPIOE_PIN15))
+#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
+#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN15))
+#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN15))
+#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
+ PIN_ODR_HIGH(GPIOE_PIN1) | \
+ PIN_ODR_HIGH(GPIOE_PIN2) | \
+ PIN_ODR_HIGH(GPIOE_PIN3) | \
+ PIN_ODR_HIGH(GPIOE_PIN4) | \
+ PIN_ODR_HIGH(GPIOE_PIN5) | \
+ PIN_ODR_HIGH(GPIOE_PIN6) | \
+ PIN_ODR_HIGH(GPIOE_PIN7) | \
+ PIN_ODR_HIGH(GPIOE_PIN8) | \
+ PIN_ODR_HIGH(GPIOE_PIN9) | \
+ PIN_ODR_HIGH(GPIOE_PIN10) | \
+ PIN_ODR_HIGH(GPIOE_PIN11) | \
+ PIN_ODR_HIGH(GPIOE_PIN12) | \
+ PIN_ODR_HIGH(GPIOE_PIN13) | \
+ PIN_ODR_HIGH(GPIOE_PIN14) | \
+ PIN_ODR_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN7, 0U))
+#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN15, 0U))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0 - OSC_IN (input floating).
+ * PF1 - OSC_OUT (input floating).
+ * PF2 - PIN2 (input pullup).
+ * PF3 - PIN3 (input pullup).
+ * PF4 - PIN4 (input pullup).
+ * PF5 - PIN5 (input pullup).
+ * PF6 - PIN6 (input pullup).
+ * PF7 - PIN7 (input pullup).
+ * PF8 - PIN8 (input pullup).
+ * PF9 - PIN9 (input pullup).
+ * PF10 - PIN10 (input pullup).
+ * PF11 - PIN11 (input pullup).
+ * PF12 - PIN12 (input pullup).
+ * PF13 - PIN13 (input pullup).
+ * PF14 - PIN14 (input pullup).
+ * PF15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_OSC_IN) | \
+ PIN_MODE_INPUT(GPIOF_OSC_OUT) | \
+ PIN_MODE_INPUT(GPIOF_PIN2) | \
+ PIN_MODE_INPUT(GPIOF_PIN3) | \
+ PIN_MODE_INPUT(GPIOF_PIN4) | \
+ PIN_MODE_INPUT(GPIOF_PIN5) | \
+ PIN_MODE_INPUT(GPIOF_PIN6) | \
+ PIN_MODE_INPUT(GPIOF_PIN7) | \
+ PIN_MODE_INPUT(GPIOF_PIN8) | \
+ PIN_MODE_INPUT(GPIOF_PIN9) | \
+ PIN_MODE_INPUT(GPIOF_PIN10) | \
+ PIN_MODE_INPUT(GPIOF_PIN11) | \
+ PIN_MODE_INPUT(GPIOF_PIN12) | \
+ PIN_MODE_INPUT(GPIOF_PIN13) | \
+ PIN_MODE_INPUT(GPIOF_PIN14) | \
+ PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_OSC_IN) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_OSC_OUT) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
+#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOF_OSC_IN) | \
+ PIN_OSPEED_VERYLOW(GPIOF_OSC_OUT) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_OSC_IN) | \
+ PIN_PUPDR_FLOATING(GPIOF_OSC_OUT) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN15))
+#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_OSC_IN) | \
+ PIN_ODR_HIGH(GPIOF_OSC_OUT) | \
+ PIN_ODR_HIGH(GPIOF_PIN2) | \
+ PIN_ODR_HIGH(GPIOF_PIN3) | \
+ PIN_ODR_HIGH(GPIOF_PIN4) | \
+ PIN_ODR_HIGH(GPIOF_PIN5) | \
+ PIN_ODR_HIGH(GPIOF_PIN6) | \
+ PIN_ODR_HIGH(GPIOF_PIN7) | \
+ PIN_ODR_HIGH(GPIOF_PIN8) | \
+ PIN_ODR_HIGH(GPIOF_PIN9) | \
+ PIN_ODR_HIGH(GPIOF_PIN10) | \
+ PIN_ODR_HIGH(GPIOF_PIN11) | \
+ PIN_ODR_HIGH(GPIOF_PIN12) | \
+ PIN_ODR_HIGH(GPIOF_PIN13) | \
+ PIN_ODR_HIGH(GPIOF_PIN14) | \
+ PIN_ODR_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_OSC_IN, 0U) | \
+ PIN_AFIO_AF(GPIOF_OSC_OUT, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN7, 0U))
+#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN15, 0U))
+
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* BOARD_H */
diff --git a/keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.mk b/keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.mk
new file mode 100644
index 0000000000..b98dcdd26c
--- /dev/null
+++ b/keyboards/candybar/boards/ST_STM32F072B_DISCOVERY/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/ST_STM32F072B_DISCOVERY/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/ST_STM32F072B_DISCOVERY
diff --git a/keyboards/planck/rev6/bootloader_defs.h b/keyboards/candybar/bootloader_defs.h
index 3b0e9d20a6..43eb7b2f62 100644
--- a/keyboards/planck/rev6/bootloader_defs.h
+++ b/keyboards/candybar/bootloader_defs.h
@@ -4,4 +4,4 @@
* This also requires a patch to chibios:
* <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
*/
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFC800
diff --git a/keyboards/candybar/candybar.c b/keyboards/candybar/candybar.c
new file mode 100644
index 0000000000..c79e536ccc
--- /dev/null
+++ b/keyboards/candybar/candybar.c
@@ -0,0 +1,21 @@
+/* Copyright 2018 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "candybar.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
diff --git a/keyboards/candybar/candybar.h b/keyboards/candybar/candybar.h
new file mode 100644
index 0000000000..262edf3bbb
--- /dev/null
+++ b/keyboards/candybar/candybar.h
@@ -0,0 +1,30 @@
+/* Copyright 2018 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+#include "quantum.h"
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1c, k1d, k1e, k1f, k1g, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g, \
+ k30, k31, k32, k35, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, k3g \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, KC_NO, k1c, k1d, k1e, k1f, k1g }, \
+ { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g }, \
+ { k30, k31, k32, KC_NO, KC_NO, k35, KC_NO, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, k3g } \
+}
diff --git a/keyboards/candybar/chconf.h b/keyboards/candybar/chconf.h
new file mode 100644
index 0000000000..99fa8ce398
--- /dev/null
+++ b/keyboards/candybar/chconf.h
@@ -0,0 +1,524 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 10000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 2
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 0
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM FALSE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE FALSE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP FALSE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS FALSE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/candybar/config.h b/keyboards/candybar/config.h
new file mode 100644
index 0000000000..113e917175
--- /dev/null
+++ b/keyboards/candybar/config.h
@@ -0,0 +1,121 @@
+/* Copyright 2018 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0006
+#define MANUFACTURER The Key Company
+#define PRODUCT Candybar
+#define DESCRIPTION A compact staggered 40% keyboard with attached numpad
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 17
+#define DIODE_DIRECTION COL2ROW
+#define MATRIX_ROW_PINS { A8, A9, A10, A13 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, B2, B10, B11, B12, B13, B14, B15 }
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+// #define WS2812_LED_N 2
+// #define RGBLED_NUM WS2812_LED_N
+// #define WS2812_TIM_N 2
+// #define WS2812_TIM_CH 2
+// #define PORT_WS2812 GPIOA
+// #define PIN_WS2812 1
+// #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
+//#define WS2812_DMA_CHANNEL 7 // DMA channel for TIMx_UP
+//#define WS2812_EXTERNAL_PULLUP
+
diff --git a/keyboards/candybar/halconf.h b/keyboards/candybar/halconf.h
new file mode 100644
index 0000000000..8b9724b1a3
--- /dev/null
+++ b/keyboards/candybar/halconf.h
@@ -0,0 +1,353 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/keyboards/candybar/info.json b/keyboards/candybar/info.json
new file mode 100644
index 0000000000..442324ece2
--- /dev/null
+++ b/keyboards/candybar/info.json
@@ -0,0 +1,210 @@
+{
+ "keyboard_name": "TKC Candybar",
+ "url": "",
+ "maintainer": "terrymathews",
+ "width": 17,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc",
+ "x":0,
+ "y":0},
+ {"label":"Q",
+ "x":1,
+ "y":0},
+ {"label":"W",
+ "x":2,
+ "y":0},
+ {"label":"E",
+ "x":3,
+ "y":0},
+ {"label":"R",
+ "x":4,
+ "y":0},
+ {"label":"T",
+ "x":5,
+ "y":0},
+ {"label":"Y",
+ "x":6,
+ "y":0},
+ {"label":"U",
+ "x":7,
+ "y":0},
+ {"label":"I",
+ "x":8,
+ "y":0},
+ {"label":"O",
+ "x":9,
+ "y":0},
+ {"label":"P",
+ "x":10,
+ "y":0},
+ {"label":"Del",
+ "x":11,
+ "y":0},
+ {"label":"BkSp",
+ "x":12,
+ "y":0},
+ {"label":"7",
+ "x":13,
+ "y":0},
+ {"label":"8",
+ "x":14,
+ "y":0},
+ {"label":"9",
+ "x":15,
+ "y":0},
+ {"label":"*",
+ "x":16,
+ "y":0},
+ {"label":"Tab",
+ "x":0,
+ "y":1,
+ "w":1.25},
+ {"label":"A",
+ "x":1.25,
+ "y":1},
+ {"label":"S",
+ "x":2.25,
+ "y":1},
+ {"label":"D",
+ "x":3.25,
+ "y":1},
+ {"label":"F",
+ "x":4.25,
+ "y":1},
+ {"label":"G",
+ "x":5.25,
+ "y":1},
+ {"label":"H",
+ "x":6.25,
+ "y":1},
+ {"label":"J",
+ "x":7.25,
+ "y":1},
+ {"label":"K",
+ "x":8.25,
+ "y":1},
+ {"label":"L",
+ "x":9.25,
+ "y":1},
+ {"label":":",
+ "x":10.25,
+ "y":1},
+ {"label":"Enter",
+ "x":11.25,
+ "y":1,
+ "w":1.75},
+ {"label":"4",
+ "x":13,
+ "y":1},
+ {"label":"5",
+ "x":14,
+ "y":1},
+ {"label":"6",
+ "x":15,
+ "y":1},
+ {"label":"-",
+ "x":16,
+ "y":1},
+ {"label":"Shift",
+ "x":0,
+ "y":2,
+ "w":1.75},
+ {"label":"Z",
+ "x":1.75,
+ "y":2},
+ {"label":"X",
+ "x":2.75,
+ "y":2},
+ {"label":"C",
+ "x":3.75,
+ "y":2},
+ {"label":"V",
+ "x":4.75,
+ "y":2},
+ {"label":"B",
+ "x":5.75,
+ "y":2},
+ {"label":"N",
+ "x":6.75,
+ "y":2},
+ {"label":"M",
+ "x":7.75,
+ "y":2},
+ {"label":"<",
+ "x":8.75,
+ "y":2},
+ {"label":">",
+ "x":9.75,
+ "y":2},
+ {"label":"Shift",
+ "x":10.75,
+ "y":2,
+ "w":1.25},
+ {"label":"&uarr;",
+ "x":12,
+ "y":2},
+ {"label":"1",
+ "x":13,
+ "y":2},
+ {"label":"2",
+ "x":14,
+ "y":2},
+ {"label":"3",
+ "x":15,
+ "y":2},
+ {"label":"+",
+ "x":16,
+ "y":2},
+ {"label":"Ctrl",
+ "x":0,
+ "y":3,
+ "w":1.25},
+ {"label":"GUI",
+ "x":1.25,
+ "y":3,
+ "w":1.25},
+ {"label":"Alt",
+ "x":2.5,
+ "y":3,
+ "w":1.25},
+ {"x":3.75,
+ "y":3,
+ "w":1.75},
+ {"x":5.5,
+ "y":3,
+ "w":1},
+ {"label":"Backspace",
+ "x":6.5,
+ "y":3,
+ "w":2.25},
+ {"label":"Menu",
+ "x":8.75,
+ "y":3,
+ "w":1.25},
+ {"label":"Fn",
+ "x":10,
+ "y":3},
+ {"label":"&larr;",
+ "x":11,
+ "y":3},
+ {"label":"&darr;",
+ "x":12,
+ "y":3},
+ {"label":"&rarr;",
+ "x":13,
+ "y":3},
+ {"label":"0",
+ "x":14,
+ "y":3},
+ {"label":".",
+ "x":15,
+ "y":3},
+ {"label":"Enter",
+ "x":16,
+ "y":3}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/candybar/keymaps/default/keymap.c b/keyboards/candybar/keymaps/default/keymap.c
new file mode 100644
index 0000000000..bf589289a3
--- /dev/null
+++ b/keyboards/candybar/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+/* Copyright 2018 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "candybar.h"
+
+#define _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = LAYOUT(
+ KC_ESC,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_DEL,KC_BSPC,KC_P7,KC_P8,KC_P9,KC_PAST, \
+ KC_TAB,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_ENT,KC_P4,KC_P5,KC_P6,KC_PMNS, \
+ KC_LSFT,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_RSFT,KC_UP,KC_P1,KC_P2,KC_P3,KC_PPLS, \
+ KC_LCTL,KC_LGUI,KC_LALT,KC_SPC,KC_SPC,KC_BSPC,KC_APP,MO(_FL),KC_LEFT,KC_DOWN,KC_RGHT,KC_P0,KC_PDOT,KC_PENT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = LAYOUT(
+ RESET,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_LBRC,KC_RBRC,KC_INS,KC_BSPC,KC_P7,KC_P8,KC_P9,KC_VOLU, \
+ KC_TAB,KC_A,KC_SLCK,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_QUOT,KC_BSLS,KC_P4,KC_P5,KC_P6,KC_VOLD, \
+ KC_LSFT,KC_Z,KC_X,KC_CAPS,KC_V,KC_B,KC_NLCK,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_PGUP,KC_P1,KC_P2,KC_P3,KC_PEQL, \
+ KC_LCTL,KC_LGUI,KC_LALT,KC_SPC,KC_SPC,KC_BSPC,KC_APP,MO(_FL),KC_HOME,KC_PGDN,KC_END,KC_P0,KC_PDOT,KC_PENT),
+}; \ No newline at end of file
diff --git a/keyboards/candybar/mcuconf.h b/keyboards/candybar/mcuconf.h
new file mode 100644
index 0000000000..faca3defdf
--- /dev/null
+++ b/keyboards/candybar/mcuconf.h
@@ -0,0 +1,171 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+/*
+ * STM32F0xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 3...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F0xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_HSI14_ENABLED TRUE
+#define STM32_HSI48_ENABLED FALSE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED FALSE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 12
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE STM32_PPRE_DIV1
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_USBSW STM32_USBSW_HSI48
+#define STM32_CECSW STM32_CECSW_HSI
+#define STM32_I2C1SW STM32_I2C1SW_HSI
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 2
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM14 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 2
+#define STM32_GPT_TIM2_IRQ_PRIORITY 2
+#define STM32_GPT_TIM3_IRQ_PRIORITY 2
+#define STM32_GPT_TIM14_IRQ_PRIORITY 2
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 3
+#define STM32_I2C_I2C2_IRQ_PRIORITY 3
+#define STM32_I2C_USE_DMA TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 3
+#define STM32_ICU_TIM2_IRQ_PRIORITY 3
+#define STM32_ICU_TIM3_IRQ_PRIORITY 3
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 3
+#define STM32_PWM_TIM2_IRQ_PRIORITY 3
+#define STM32_PWM_TIM3_IRQ_PRIORITY 3
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 3
+#define STM32_SERIAL_USART2_PRIORITY 3
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_IRQ_PRIORITY 2
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 2
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 3
+#define STM32_UART_USART2_IRQ_PRIORITY 3
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/candybar/readme.md b/keyboards/candybar/readme.md
new file mode 100644
index 0000000000..6e0fa02857
--- /dev/null
+++ b/keyboards/candybar/readme.md
@@ -0,0 +1,18 @@
+The Key Company Candybar
+===
+
+![Candybar](https://cdn.shopify.com/s/files/1/1679/2319/articles/CandyBar_Promo_400x225_1000x.jpg?v=1538150501)
+
+
+The Key Company Candybar is a staggered 40% board with a numpad utilizing the STM32F072 microcontroller.
+
+Keyboard Maintainer: [Terry Mathews](https://github.com/TerryMathews/)
+Hardware Supported: TKC Candybar
+Hardware Availability: Via GB
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make candybar:default:dfu-util
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/candybar/rules.mk b/keyboards/candybar/rules.mk
new file mode 100644
index 0000000000..d27bbe102a
--- /dev/null
+++ b/keyboards/candybar/rules.mk
@@ -0,0 +1,50 @@
+## chip/board settings
+# - the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F0xx
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F072xB
+
+# Startup code to use
+# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f0xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+BOARD = ST_STM32F072B_DISCOVERY
+
+# Cortex version
+MCU = cortex-m0
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 6
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+# comment out to disable the options.
+#
+EXTRAFLAGS+=-flto
+BACKLIGHT_ENABLE = no
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
+SERIAL_LINK_ENABLE = no
diff --git a/keyboards/canoe/readme.md b/keyboards/canoe/readme.md
index f58ffe4fd6..b8ddadea78 100644
--- a/keyboards/canoe/readme.md
+++ b/keyboards/canoe/readme.md
@@ -41,4 +41,4 @@ macOS:
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/catch22/keymaps/default/keymap.c b/keyboards/catch22/keymaps/default/keymap.c
index f36478d440..790ae1eeb9 100644
--- a/keyboards/catch22/keymaps/default/keymap.c
+++ b/keyboards/catch22/keymaps/default/keymap.c
@@ -22,9 +22,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
{
return MACRO_NONE;
diff --git a/keyboards/chibios_test/keymaps/default/keymap.c b/keyboards/chibios_test/keymaps/default/keymap.c
index a362e2ccf6..11616cf559 100644
--- a/keyboards/chibios_test/keymaps/default/keymap.c
+++ b/keyboards/chibios_test/keymaps/default/keymap.c
@@ -20,6 +20,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{{KC_CAPS}}, // test with KC_CAPS, KC_A, RESET
};
-
-const uint16_t fn_actions[] = {
-};
diff --git a/keyboards/chimera_ergo/keymaps/default/keymap.c b/keyboards/chimera_ergo/keymaps/default/keymap.c
index f24e6194bc..1b83877266 100644
--- a/keyboards/chimera_ergo/keymaps/default/keymap.c
+++ b/keyboards/chimera_ergo/keymaps/default/keymap.c
@@ -92,11 +92,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
diff --git a/keyboards/chimera_ergo/readme.md b/keyboards/chimera_ergo/readme.md
index 619229544c..2b5d2d65c0 100644
--- a/keyboards/chimera_ergo/readme.md
+++ b/keyboards/chimera_ergo/readme.md
@@ -12,5 +12,5 @@ Make example for this keyboard (after setting up your build environment):
make chimera_ergo:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/chimera_ortho/keymaps/gordon/keymap.c b/keyboards/chimera_ortho/keymaps/gordon/keymap.c
index c6766bed3a..c0543f2e04 100644
--- a/keyboards/chimera_ortho/keymaps/gordon/keymap.c
+++ b/keyboards/chimera_ortho/keymaps/gordon/keymap.c
@@ -301,11 +301,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
diff --git a/keyboards/chimera_ortho/readme.md b/keyboards/chimera_ortho/readme.md
index 18ab3b09eb..644300f986 100644
--- a/keyboards/chimera_ortho/readme.md
+++ b/keyboards/chimera_ortho/readme.md
@@ -15,5 +15,5 @@ Make example for this keyboard (after setting up your build environment):
make chimera_ortho:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/chocopad/README.md b/keyboards/chocopad/README.md
index ad0f6b3560..ae28009c3c 100644
--- a/keyboards/chocopad/README.md
+++ b/keyboards/chocopad/README.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make chocopad:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/chocopad/keymaps/default/rules.mk b/keyboards/chocopad/keymaps/default/rules.mk
index 1e57612788..a81250cdf6 100644
--- a/keyboards/chocopad/keymaps/default/rules.mk
+++ b/keyboards/chocopad/keymaps/default/rules.mk
@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/chocopad/keymaps/khord/rules.mk b/keyboards/chocopad/keymaps/khord/rules.mk
index 1e57612788..a81250cdf6 100644
--- a/keyboards/chocopad/keymaps/khord/rules.mk
+++ b/keyboards/chocopad/keymaps/khord/rules.mk
@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/christmas_tree/keymaps/default/rules.mk b/keyboards/christmas_tree/keymaps/default/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/christmas_tree/keymaps/default/rules.mk
+++ b/keyboards/christmas_tree/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/christmas_tree/readme.md b/keyboards/christmas_tree/readme.md
index e0252328dc..b3337dd5ba 100644
--- a/keyboards/christmas_tree/readme.md
+++ b/keyboards/christmas_tree/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make christmas_tree/V2017:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/ckeys/handwire_101/config.h b/keyboards/ckeys/handwire_101/config.h
new file mode 100755
index 0000000000..7689c47038
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/config.h
@@ -0,0 +1,197 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ckeys_handwire
+#define PRODUCT ckeys_handwire
+#define DESCRIPTION 4x4 handwire workshop board
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+//#define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+//#define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+// Audio Click
+#define AUDIO_CLICKY
+
+// Music Mode Polyphony
+// NOTE: Must change polyphony_rate to a number higher than 0 in voices.c
+#define AUDIO_VOICES
+#define PITCH_STANDARD_A 880.0f
+
+// Mouse keys
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 2
+#define MOUSEKEY_TIME_TO_MAX 5
+#define MOUSEKEY_WHEEL_DELAY 0
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
diff --git a/keyboards/ckeys/handwire_101/handwire_101.c b/keyboards/ckeys/handwire_101/handwire_101.c
new file mode 100755
index 0000000000..a6ff8f0e3d
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/handwire_101.c
@@ -0,0 +1,28 @@
+#include "handwire_101.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ // Turn status LED on
+ //DDRD |= (1<<6);
+ //PORTD |= (1<<6);
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
diff --git a/keyboards/ckeys/handwire_101/handwire_101.h b/keyboards/ckeys/handwire_101/handwire_101.h
new file mode 100755
index 0000000000..0f0309c324
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/handwire_101.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33 \
+) \
+{ \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, k33 } \
+}
+
diff --git a/keyboards/ckeys/handwire_101/info.json b/keyboards/ckeys/handwire_101/info.json
new file mode 100644
index 0000000000..dfe6c48304
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "cKeys Handwire 101",
+ "url": "https://ckeys.org/slides/handwire/",
+ "maintainer": "brandenbyers",
+ "width": 4,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x4": {
+ "key_count": 16,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/ckeys/handwire_101/keymaps/default/config.h b/keyboards/ckeys/handwire_101/keymaps/default/config.h
new file mode 100755
index 0000000000..9935accb02
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/keymaps/default/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// Add overrides here
diff --git a/keyboards/ckeys/handwire_101/keymaps/default/keymap.c b/keyboards/ckeys/handwire_101/keymaps/default/keymap.c
new file mode 100755
index 0000000000..383b3355de
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/keymaps/default/keymap.c
@@ -0,0 +1,178 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BASE, // base layer
+ _LAYERS, // layer of all layers
+ _MUSIC, // music mode
+ _MUSIC_4_LIFE, // music mode until unplugged
+ _MOUSE, // mousekeys
+ _TERMINAL, // terminal
+ _ADMIN // admin duties
+};
+
+enum custom_keycodes {
+ TERM_ABOUT = SAFE_RANGE,
+ TERM_PRINT,
+ TERM_FLUSH,
+ TERM_HELP,
+ CKEYS_ABOUT,
+};
+
+extern keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* BASE (numpad)
+ * ,-----------------------.
+ * | 7 | 8 | 9 | / | <-- Hold for LAYERS
+ * |-----+-----+-----+-----|
+ * | 4 | 5 | 6 | * |
+ * |-----+-----+-----+-----|
+ * | 1 | 2 | 3 | - |
+ * |-----+-----+-----+-----|
+ * | 0 | . | = | + |
+ * `---------------------- '
+ */
+ [_BASE] = LAYOUT(
+ KC_KP_7, KC_KP_8, KC_KP_9, LT(MO(_LAYERS), KC_PSLS), \
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST, \
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, \
+ KC_KP_0, KC_KP_DOT, KC_KP_EQUAL, KC_PPLS \
+ ),
+ /* LAYERS
+ * ,---------------------------.
+ * | MUSIC | | | X |
+ * |---------+-----+-----+-----|
+ * | MOUSE | | | |
+ * |---------+-----+-----+-----|
+ * |TERMINAL | | | |
+ * |---------+-----+-----+-----|
+ * | ADMIN | | | |
+ * `---------------------------'
+ */
+ [_LAYERS] = LAYOUT(
+ TG(_MUSIC), _______, _______, _______, \
+ TG(_MOUSE), _______, _______, _______, \
+ TG(_TERMINAL), _______, _______, _______, \
+ TG(_ADMIN), _______, _______, _______\
+ ),
+ /* MUSIC
+ * ,-----------------------.
+ * | X | | | X |
+ * |-----+-----+-----+-----|
+ * | | | |4EVER|
+ * |-----+-----+-----+-----|
+ * | OFF | | | |
+ * |-----+-----+-----+-----|
+ * | ON | | |MODES|
+ * `---------------------- '
+ */
+ // TODO: Make this music layer the one to jump to other music layers (different octaves)
+ [_MUSIC] = LAYOUT(
+ _______, _______, _______, _______, \
+ _______, _______, _______, TG(_MUSIC_4_LIFE), \
+ MU_OFF, _______, _______, _______, \
+ MU_ON, _______, _______, MU_MOD \
+ ),
+ /* MUSIC_4_LIFE
+ * ,-----------------------.
+ * | ♫ | ♫ | ♫ | ♫ |
+ * |-----+-----+-----+-----|
+ * | ♫ | ♫ | ♫ | ♫ |
+ * |-----+-----+-----+-----|
+ * | ♫ | ♫ | ♫ | ♫ |
+ * |-----+-----+-----+-----|
+ * | ♫ | ♫ | ♫ | ♫ |
+ * `---------------------- '
+ */
+ [_MUSIC_4_LIFE] = LAYOUT(
+ KC_M, KC_M, KC_M, KC_M, \
+ KC_M, KC_M, KC_M, KC_M, \
+ KC_M, KC_M, KC_M, KC_M, \
+ KC_M, KC_M, KC_M, KC_M \
+ ),
+ /* MOUSE
+ * ,-------------------------------------------------.
+ * | BUTTON 5 | | SCROLL UP | X |
+ * |-----------+-----------+------------+------------|
+ * | X |LEFT CLICK | UP |RIGHT CLICK |
+ * |-----------+-----------+------------+------------|
+ * | BUTTON 4 | LEFT | DOWN | RIGHT |
+ * |-----------+-----------+------------+------=-----|
+ * | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT|
+ * `-------------------------------------------------'
+ */
+ [_MOUSE] = LAYOUT(
+ KC_MS_BTN5, _______, KC_MS_WH_UP, _______, \
+ _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, \
+ KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, \
+ KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT \
+ ),
+ /* TERMINAL
+ * ,---------------------------------------.
+ * | |ABOUT| | X |
+ * |------------+-----+----------+---------|
+ * |TERMINAL OFF|PRINT| | |
+ * |------------+-----+----------+---------|
+ * | X |FLUSH| | |
+ * |------------+-----+----------+---------|
+ * |TERMINAL ON |HELP | | |
+ * `--------=======------------------------'
+ */
+ [_TERMINAL] = LAYOUT(
+ _______, TERM_ABOUT, _______, _______, \
+ TERM_OFF, TERM_PRINT, _______, _______, \
+ _______, TERM_FLUSH, _______, _______, \
+ TERM_ON, TERM_HELP , _______, _______\
+ ),
+ /* ADMIN
+ * ,-----------------------------------------.
+ * | RESET | | | X |
+ * |------------+-----+-----------+----------|
+ * |ABOUT CKEYS | | | |
+ * |------------+-----+-----------+----------|
+ * | | |CLICKY UP |CLICKY OFF|
+ * |------------+-----+-----------+----------|
+ * | X | |CLICKY DOWN|CLICKY ON |
+ * `-----------------------------------------'
+ */
+ [_ADMIN] = LAYOUT(
+ RESET, _______, _______, _______, \
+ CKEYS_ABOUT, _______, _______, _______, \
+ _______, _______, _______, CK_OFF, \
+ _______, _______, _______, CK_ON \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TERM_ABOUT:
+ if (record->event.pressed) {
+ // when keycode TERM_ABOUT is pressed
+ SEND_STRING("about"SS_TAP(X_ENTER));
+ } else {
+ // when keycode TERM_ABOUT is released
+ }
+ break;
+ case TERM_PRINT:
+ if (record->event.pressed) {
+ SEND_STRING("print"SS_TAP(X_ENTER));
+ } else { }
+ break;
+ case TERM_FLUSH:
+ if (record->event.pressed) {
+ SEND_STRING("flush"SS_TAP(X_ENTER));
+ } else { }
+ break;
+ case TERM_HELP:
+ if (record->event.pressed) {
+ SEND_STRING("help"SS_TAP(X_ENTER));
+ } else { }
+ break;
+ case CKEYS_ABOUT:
+ if (record->event.pressed) {
+ SEND_STRING("https://cKeys.org"SS_TAP(X_ENTER)"Making people smile one keyboard at a time."SS_TAP(X_ENTER)"cKeys is a volunteer-run 501(c)(3) nonprofit organization."SS_TAP(X_ENTER));
+ } else { }
+ break;
+ }
+ return true;
+};
diff --git a/keyboards/ckeys/handwire_101/keymaps/default/readme.md b/keyboards/ckeys/handwire_101/keymaps/default/readme.md
new file mode 100755
index 0000000000..4594bdfe31
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for the cKeys Handwire 101 4x4 keyboard. \ No newline at end of file
diff --git a/keyboards/ckeys/handwire_101/readme.md b/keyboards/ckeys/handwire_101/readme.md
new file mode 100755
index 0000000000..cf20dab60b
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/readme.md
@@ -0,0 +1,163 @@
+# cKeys Handwire 101 Workshop
+
+![](https://ckeys.org/images/proton-c-handwire-1.jpg)
+
+## Slides
+
+Slides can be found at: https://ckeys.org/slides/handwire/
+
+## Case Design
+
+The laser cutting file is ideal for Ponoko's P1 board size.
+
+## Firmware
+
+If you want to reflash the pre-installed firmware, use the `.bin` file for Proton C and the `.hex` file for Pro Micro builds. Flash with the QMK Toolbox or via the command line.
+
+Building for Proton C: `make ckeys/handwire_101:default CTPC=yes`
+Building for Pro Micro: `make ckeys/handwire_101:default`
+
+Pre-built firmware files (and laser cutting case files) can be found here: https://github.com/c-keys/handwire
+
+## Default Layout
+
+You can find the default layout in `qmk-handwire/keymaps/default/keymap.c`
+
+### Layers
+
+When you plug in your keyboard, it will function as a numpad. You will remain in the `Base` numpad layer unless you hold down the top right corner key and select one of the keys in the left most column. In QMK, this is called a momentary switch and looks like `MO(LAYERS)` in the default `keymap.c`. You can read more about layer switching in the [QMK Documentation](https://beta.docs.qmk.fm/features/feature_advanced_keycodes#switching-and-toggling-layers).
+
+#### Base
+```
+ /* BASE (numpad)
+ * ,-----------------------.
+ * | 7 | 8 | 9 | / | <-- Hold for LAYERS
+ * |-----+-----+-----+-----|
+ * | 4 | 5 | 6 | * |
+ * |-----+-----+-----+-----|
+ * | 1 | 2 | 3 | - |
+ * |-----+-----+-----+-----|
+ * | 0 | . | = | + |
+ * `---------------------- '
+ */
+```
+
+#### Layers
+
+```
+ /* LAYERS
+ * ,---------------------------.
+ * | MUSIC | | | X |
+ * |---------+-----+-----+-----|
+ * | MOUSE | | | |
+ * |---------+-----+-----+-----|
+ * |TERMINAL | | | |
+ * |---------+-----+-----+-----|
+ * | ADMIN | | | |
+ * `---------------------------'
+ */
+```
+
+This is the layers layer. This is how you toggle other layers on and off. If you toggle on a layer, it is important that you re-toggle that layer offbefore switching to a new layer.
+
+#### Music
+
+```
+ /* MUSIC
+ * ,-----------------------.
+ * | X | | | X |
+ * |-----+-----+-----+-----|
+ * | | | |4EVER|
+ * |-----+-----+-----+-----|
+ * | OFF | | | |
+ * |-----+-----+-----+-----|
+ * | ON | | |MODES|
+ * `---------------------- '
+ */
+```
+
+You can toggle the music mode on and off. You can also change the mode of music modes. Lastly, you can switch to the Music 4 Life mode but tapping the key marked `4EVER` above (see below). For more information on music mode, see the [QMK Documentation](https://beta.docs.qmk.fm/features/feature_audio).
+
+_NOTE: This layer will only make sounds if you install a speaker. At the time of this writing, you can get the Proton C specific piezo speaker for [$2.61 with free overnight shipping](https://www.arrow.com/en/products/ast1109mltrq/mallory-sonalert-products). You can solder it on by desoldering the row wires where they contact the cathode end of the diodes. Then flip over the Proton C and solder the piezo speaker in. Then re-solder the row wires and you should hear beeps and boops the next time you plug in your keyboard._
+
+#### Music 4 Life
+
+```
+ /* MUSIC_4_LIFE
+ * ,-----------------------.
+ * | ♫ | ♫ | ♫ | ♫ |
+ * |-----+-----+-----+-----|
+ * | ♫ | ♫ | ♫ | ♫ |
+ * |-----+-----+-----+-----|
+ * | ♫ | ♫ | ♫ | ♫ |
+ * |-----+-----+-----+-----|
+ * | ♫ | ♫ | ♫ | ♫ |
+ * `---------------------- '
+ */
+```
+
+Music mode on every single key. However, you will need to unplug your keyboard in order to get out of this mode. The benefit of this is that you can use every single key as opposed to the few left over in the Music Mode layer. Try changing the chromatic mode before switching to this mode.
+
+#### Mouse
+
+```
+ /* MOUSE
+ * ,-------------------------------------------------.
+ * | BUTTON 5 | | SCROLL UP | X |
+ * |-----------+-----------+------------+------------|
+ * | X |LEFT CLICK | UP |RIGHT CLICK |
+ * |-----------+-----------+------------+------------|
+ * | BUTTON 4 | LEFT | DOWN | RIGHT |
+ * |-----------+-----------+------------+------=-----|
+ * | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT|
+ * `-------------------------------------------------'
+ */
+```
+
+Switch to this mode, force yourself through the steep transitionary period, and then you can ditch mice and trackpads forever!
+
+#### Terminal
+
+```
+ /* TERMINAL
+ * ,---------------------------------------.
+ * | |ABOUT| | X |
+ * |------------+-----+----------+---------|
+ * |TERMINAL OFF|PRINT| | |
+ * |------------+-----+----------+---------|
+ * | X |FLUSH| | |
+ * |------------+-----+----------+---------|
+ * |TERMINAL ON |HELP | | |
+ * `--------=======------------------------'
+ */
+```
+
+This layer is not currently working but has been left as an example of how to write macros.
+
+#### Admin
+
+```
+ /* ADMIN
+ * ,-----------------------------------------.
+ * | RESET | | | X |
+ * |------------+-----+-----------+----------|
+ * |ABOUT CKEYS | | | |
+ * |------------+-----+-----------+----------|
+ * | | |CLICKY UP |CLICKY OFF|
+ * |------------+-----+-----------+----------|
+ * | X | |CLICKY DOWN|CLICKY ON |
+ * `-----------------------------------------'
+ */
+```
+
+The most important key in this layer is the `RESET` switch. Use it to flash new firmware. It does the same thing as the hardware button on the Proton C. But since you soldered the Proton C with the reset button facing towards the keys, the only way to reach it is to de-solder wires. The reset switch solves this. Program a reset switch into all of your future keyboards.
+
+The `ABOUT CKEYS` is another example of using a macro. It will type out a few sentences about cKeys.
+
+The clicky buttons will only make a difference if you install a piezo speaker. If you install a speaker, then you can make your keyboard extra clicky sounding even if you did not install clicky switches.
+
+![](https://ckeys.org/images/proton-c-handwire-2.jpg)
+![](https://ckeys.org/images/proton-c-handwire-3.jpg)
+![](https://ckeys.org/images/handwire-1.jpg)
+![](https://ckeys.org/images/handwire-2.jpg)
+![](https://ckeys.org/images/handwire-3.jpg)
diff --git a/keyboards/ckeys/handwire_101/rules.mk b/keyboards/ckeys/handwire_101/rules.mk
new file mode 100755
index 0000000000..957a6c8fba
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/rules.mk
@@ -0,0 +1,69 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+BOOTLOADER = caterina
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+TERMINAL_ENABLE = yes
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+#MIDI_ENABLE = yes # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = yes # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/ckeys/nakey/keymaps/default/keymap.c b/keyboards/ckeys/nakey/keymaps/default/keymap.c
index 9c3e45b946..ee14c1716e 100644
--- a/keyboards/ckeys/nakey/keymaps/default/keymap.c
+++ b/keyboards/ckeys/nakey/keymaps/default/keymap.c
@@ -25,10 +25,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
switch(id) {
diff --git a/keyboards/ckeys/nakey/readme.md b/keyboards/ckeys/nakey/readme.md
index c7250cf506..b85e822abd 100644
--- a/keyboards/ckeys/nakey/readme.md
+++ b/keyboards/ckeys/nakey/readme.md
@@ -12,7 +12,7 @@ Make example for this keyboard (after setting up your build environment):
make ckeys/nakey:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Quantum MK Firmware
diff --git a/keyboards/ckeys/obelus/readme.md b/keyboards/ckeys/obelus/readme.md
index 6767956bf9..640e0f55e4 100644
--- a/keyboards/ckeys/obelus/readme.md
+++ b/keyboards/ckeys/obelus/readme.md
@@ -15,5 +15,5 @@ Or to make and flash:
make ckeys/obelus:default:dfu
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) and [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/ckeys/readme.md b/keyboards/ckeys/readme.md
index 01991d9e3f..bdcf5b34d8 100644
--- a/keyboards/ckeys/readme.md
+++ b/keyboards/ckeys/readme.md
@@ -1,9 +1,10 @@
-# Ckeys.org
+# cKeys.org
-[ckeys](https://ckeys.org/) is a mechanical keyboard based non profit, located in Seattle, Washington.
+[cKeys](https://ckeys.org/) is a mechanical keyboard-based nonprofit organization located in Seattle, Washington.
-In addition, to hosting the [Seattle Mechanical Keyboard Meetups](https://ckeys.org/events/), they have [soldering workshops](https://ckeys.org/workshops/) featuring hardware hosted in this repository.
+In addition, to hosting the [Seattle Mechanical Keyboard Meetups](https://ckeys.org/events/), they have [soldering workshops](https://ckeys.org/workshops/) featuring hardware hosted in this repository.
* Supported Hardware
- * The Obelus - 4x4 Macropad
- * naKey - Through hole numpad \ No newline at end of file
+ * The Obelus - 4x4 Macropad
+ * naKey - Through hole numpad
+ * Handwire 101 - Handwired 4x4 (Proton C or Pro Micro)
diff --git a/keyboards/clueboard/17/17.c b/keyboards/clueboard/17/17.c
index f84e3253e9..627aa236dd 100644
--- a/keyboards/clueboard/17/17.c
+++ b/keyboards/clueboard/17/17.c
@@ -12,13 +12,11 @@ void matrix_init_kb(void) {
MCUCR |= (1<<JTD);
};
-void led_set_kb(uint8_t usb_led)
-{
+void led_set_kb(uint8_t usb_led) {
print("led_set\n");
}
-void backlight_init_ports(void)
-{
+void backlight_init_ports(void) {
// Set C7 to output
DDRC |= (1<<7);
@@ -29,8 +27,7 @@ void backlight_init_ports(void)
TCCR4B = 0b00000001;
}
-void backlight_set(uint8_t level)
-{
+void backlight_set(uint8_t level) {
// Determine the PWM level
switch (level)
{
diff --git a/keyboards/clueboard/17/17.h b/keyboards/clueboard/17/17.h
index 5e4a5999e2..af3be4f5a9 100644
--- a/keyboards/clueboard/17/17.h
+++ b/keyboards/clueboard/17/17.h
@@ -19,18 +19,21 @@
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
-#define KEYMAP( \
+#define LAYOUT_numpad_5x4( \
k00, k01, k02, k03, \
- k10, k11, k12, k13, \
- k20, k21, k22, \
- k30, k31, k32, k33, \
- k40, k42 \
+ k10, k11, k12, \
+ k20, k21, k22, k13, \
+ k30, k31, k32, \
+ k40, k42, k33 \
) { \
- { k00, k01, k02, k03, }, \
- { k10, k11, k12, k13, }, \
- { k20, k21, k22, KC_NO, }, \
- { k30, k31, k32, k33, }, \
- { k40, KC_NO, k42, KC_NO } \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, KC_NO }, \
+ { k30, k31, k32, k33 }, \
+ { k40, KC_NO, k42, KC_NO } \
}
+#define LAYOUT LAYOUT_numpad_5x4
+#define KEYMAP LAYOUT_numpad_5x4
+
#endif
diff --git a/keyboards/clueboard/17/info.json b/keyboards/clueboard/17/info.json
new file mode 100644
index 0000000000..12338ae1d3
--- /dev/null
+++ b/keyboards/clueboard/17/info.json
@@ -0,0 +1,31 @@
+{
+ "keyboard_name": "Clueboard 17% (Cluepad)",
+ "keyboard_folder": "clueboard/17",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_numpad_5x4": {
+ "layout": [
+ {"label":"Num Lock", "x":0, "y":0},
+ {"label":"/", "x":1, "y":0},
+ {"label":"*", "x":2, "y":0},
+ {"label":"-", "x":3, "y":0},
+ {"label":"7", "x":0, "y":1},
+ {"label":"8", "x":1, "y":1},
+ {"label":"9", "x":2, "y":1},
+ {"label":"4", "x":0, "y":2},
+ {"label":"5", "x":1, "y":2},
+ {"label":"6", "x":2, "y":2},
+ {"label":"+", "x":3, "y":1, "h":2},
+ {"label":"1", "x":0, "y":3},
+ {"label":"2", "x":1, "y":3},
+ {"label":"3", "x":2, "y":3},
+ {"label":"0", "x":0, "y":4, "w":2},
+ {"label":".", "x":2, "y":4},
+ {"label":"Enter", "x":3, "y":3, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/clueboard/17/keymaps/default/keymap.c b/keyboards/clueboard/17/keymaps/default/keymap.c
index e8f3525a86..65c64e43c4 100644
--- a/keyboards/clueboard/17/keymaps/default/keymap.c
+++ b/keyboards/clueboard/17/keymaps/default/keymap.c
@@ -1,6 +1,4 @@
-#include "17.h"
-
-#include "backlight.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -8,7 +6,6 @@
// entirely and just use numbers.
#define _BL 0
#define _FL 1
-#define _RS 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
@@ -24,12 +21,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | 0| .| Ent|
* '-------------------'
*/
-[_BL] = KEYMAP(
- LT(_FL, KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS, \
- KC_P7, KC_P8, KC_P9, KC_PPLS, \
- KC_P4, KC_P5, KC_P6, \
- KC_P1, KC_P2, KC_P3, KC_PENT, \
- KC_P0, KC_PDOT),
+ [_BL] = LAYOUT_numpad_5x4(
+ LT(_FL, KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_P7, KC_P8, KC_P9, \
+ KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_P1, KC_P2, KC_P3, \
+ KC_P0, KC_PDOT, KC_PENT \
+ ),
/* Keymap _FL: Function Layer
* .-------------------.
@@ -44,22 +42,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Fn1| | Fn7|
* '-------------------'
*/
-[_FL] = KEYMAP(
- LT(_FL, KC_NLCK), KC_TRNS, KC_TRNS, RGB_TOG, \
- KC_TRNS, RGB_SAI, KC_TRNS, RGB_VAI, \
- RGB_HUD, BL_STEP, RGB_HUI, \
- KC_TRNS, RGB_SAD, KC_TRNS, RGB_VAD, \
- RGB_MOD, KC_TRNS)
-};
-
-/*enum function_id {
-};*/
-
-const uint16_t PROGMEM fn_actions[] = {
+ [_FL] = LAYOUT_numpad_5x4(
+ LT(_FL, KC_NLCK), _______, _______, RGB_TOG, \
+ _______, RGB_SAI, _______, \
+ RGB_HUD, BL_STEP, RGB_HUI, RGB_VAI, \
+ _______, RGB_SAD, _______, \
+ RGB_MOD, _______, RGB_VAD \
+ )
};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch (id) {
- }
-}
-
diff --git a/keyboards/clueboard/17/readme.md b/keyboards/clueboard/17/readme.md
index 877adc7842..c183657f96 100644
--- a/keyboards/clueboard/17/readme.md
+++ b/keyboards/clueboard/17/readme.md
@@ -1,6 +1,6 @@
# Clueboard 17% (Formerly Cluepad)
-![Clueboard 17%](https://static1.squarespace.com/static/55c13bdee4b099be5dcb82eb/5842fbdce3df28eae5ec557e/5844fb2cb8a79bbdfd63bad1/1498501250178/IMGP3931.jpg?format=750w)
+![Clueboard 17%](https://i.imgur.com/3XBC5c0.jpg)
A basic 17 key numpad PCB.
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make clueboard/17:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/clueboard/17/rules.mk b/keyboards/clueboard/17/rules.mk
index 264aba044d..591d40f030 100644
--- a/keyboards/clueboard/17/rules.mk
+++ b/keyboards/clueboard/17/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -50,16 +48,13 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-# CONSOLE_ENABLE = yes # Console for debug(+400)
-# COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable numpad's backlight functionality
-RGBLIGHT_ENABLE = yes
-# MIDI_ENABLE = YES # MIDI controls
-# UNICODE_ENABLE = YES # Unicode
-# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID \ No newline at end of file
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/clueboard/2x1800/2x1800.c b/keyboards/clueboard/2x1800/2x1800.c
index 4ad78899fc..09c90adbcf 100644
--- a/keyboards/clueboard/2x1800/2x1800.c
+++ b/keyboards/clueboard/2x1800/2x1800.c
@@ -21,10 +21,6 @@ void matrix_init_kb(void) {
DDRB |= (1<<5); // Capslock
DDRB |= (1<<6); // Scroll Lock
- // JTAG disable for PORT F. write JTD bit twice within four cycles.
- MCUCR |= (1<<JTD);
- MCUCR |= (1<<JTD);
-
// Run the keymap level init
matrix_init_user();
}
@@ -38,25 +34,24 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
}
void led_set_kb(uint8_t usb_led) {
+ // Toggle numlock as needed
if (usb_led & (1<<USB_LED_NUM_LOCK)) {
- // Turn numlock on
PORTB |= (1<<4);
} else {
- // Turn numlock off
PORTB &= ~(1<<4);
}
+
+ // Toggle capslock as needed
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- // Turn capslock on
PORTB |= (1<<5);
} else {
- // Turn capslock off
PORTB &= ~(1<<5);
}
+
+ // Toggle scrolllock as needed
if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
- // Turn scroll lock on
PORTB |= (1<<6);
} else {
- // Turn scroll lock off
PORTB &= ~(1<<6);
}
}
diff --git a/keyboards/clueboard/2x1800/2x1800.h b/keyboards/clueboard/2x1800/2x1800.h
index a4e86e8f22..818ceed80d 100644
--- a/keyboards/clueboard/2x1800/2x1800.h
+++ b/keyboards/clueboard/2x1800/2x1800.h
@@ -21,7 +21,7 @@
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
+#define LAYOUT_all( \
k00, k01, k02, k03, k04, k06, k07, k08, k09, k0a, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6a, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7a, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8a, \
@@ -90,4 +90,6 @@
{ kb0, KC_NO, KC_NO, KC_NO, kb4, kb5, kb6, kb7, kb8, kb9, KC_NO } \
}
+#define LAYOUT LAYOUT_all
+
#endif
diff --git a/keyboards/clueboard/2x1800/config.h b/keyboards/clueboard/2x1800/config.h
index ea3c7a6e97..cddcd1ce78 100644
--- a/keyboards/clueboard/2x1800/config.h
+++ b/keyboards/clueboard/2x1800/config.h
@@ -58,6 +58,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* audio support */
#define B7_AUDIO
#define C4_AUDIO
+#define AUDIO_CLICKY
/* number of backlight levels */
// #define BACKLIGHT_PIN B7
diff --git a/keyboards/clueboard/2x1800/info.json b/keyboards/clueboard/2x1800/info.json
index 86fd37ffa5..0e3bb36a9d 100644
--- a/keyboards/clueboard/2x1800/info.json
+++ b/keyboards/clueboard/2x1800/info.json
@@ -1,5 +1,5 @@
{
- "keyboard_name": "CB 2x1800",
+ "keyboard_name": "Clueboard 2x1800",
"url": "",
"maintainer": "skullydazed",
"width": 24,
@@ -8,388 +8,34 @@
"LAYOUT": {
"key_count": 127,
"layout": [
- {"label":"Home", "x":0, "y":0},
- {"label":"End", "x":1, "y":0},
- {"label":"PgUp", "x":2, "y":0},
- {"label":"PgDn", "x":3, "y":0},
- {"label":"Esc", "x":4.75, "y":0},
- {"label":"F1", "x":6.25, "y":0},
- {"label":"F2", "x":7.25, "y":0},
- {"label":"F3", "x":8.25, "y":0},
- {"label":"F4", "x":9.25, "y":0},
- {"label":"F5", "x":10.75, "y":0},
- {"label":"F6", "x":11.75, "y":0},
- {"label":"F7", "x":12.75, "y":0},
- {"label":"F8", "x":13.75, "y":0},
- {"label":"F9", "x":15.25, "y":0},
- {"label":"F10", "x":16.25, "y":0},
- {"label":"F11", "x":17.25, "y":0},
- {"label":"F12", "x":18.25, "y":0},
- {"label":"PrtSc", "x":20, "y":0},
- {"label":"Scroll Lock", "x":21, "y":0},
- {"label":"Pause", "x":22, "y":0},
- {"label":"Insert", "x":23, "y":0},
- {"label":"-", "x":0, "y":1.25},
- {"label":"Num Lock", "x":1, "y":1.25},
- {"label":"/", "x":2, "y":1.25},
- {"label":"*", "x":3, "y":1.25},
- {"label":"~", "x":4.5, "y":1.25},
- {"label":"!", "x":5.5, "y":1.25},
- {"label":"@", "x":6.5, "y":1.25},
- {"label":"#", "x":7.5, "y":1.25},
- {"label":"$", "x":8.5, "y":1.25},
- {"label":"%", "x":9.5, "y":1.25},
- {"label":"^", "x":10.5, "y":1.25},
- {"label":"&", "x":11.5, "y":1.25},
- {"label":"*", "x":12.5, "y":1.25},
- {"label":"(", "x":13.5, "y":1.25},
- {"label":")", "x":14.5, "y":1.25},
- {"label":"_", "x":15.5, "y":1.25},
- {"label":"+", "x":16.5, "y":1.25},
- {"label":"Backspace", "x":17.5, "y":1.25, "w":2},
- {"label":"Num Lock", "x":20, "y":1.25},
- {"label":"/", "x":21, "y":1.25},
- {"label":"*", "x":22, "y":1.25},
- {"label":"-", "x":23, "y":1.25},
- {"label":"+", "x":0, "y":2.25, "h":2},
- {"label":"7", "x":1, "y":2.25},
- {"label":"8", "x":2, "y":2.25},
- {"label":"9", "x":3, "y":2.25},
- {"label":"Tab", "x":4.5, "y":2.25, "w":1.5},
- {"label":"Q", "x":6, "y":2.25},
- {"label":"W", "x":7, "y":2.25},
- {"label":"E", "x":8, "y":2.25},
- {"label":"R", "x":9, "y":2.25},
- {"label":"T", "x":10, "y":2.25},
- {"label":"Y", "x":11, "y":2.25},
- {"label":"U", "x":12, "y":2.25},
- {"label":"I", "x":13, "y":2.25},
- {"label":"O", "x":14, "y":2.25},
- {"label":"P", "x":15, "y":2.25},
- {"label":"{", "x":16, "y":2.25},
- {"label":"}", "x":17, "y":2.25},
- {"label":"|", "x":18, "y":2.25, "w":1.5},
- {"label":"7", "x":20, "y":2.25},
- {"label":"8", "x":21, "y":2.25},
- {"label":"9", "x":22, "y":2.25},
- {"label":"+", "x":23, "y":2.25, "h":2},
- {"label":"4", "x":1, "y":3.25},
- {"label":"5", "x":2, "y":3.25},
- {"label":"6", "x":3, "y":3.25},
- {"label":"Caps Lock", "x":4.5, "y":3.25, "w":1.75},
- {"label":"A", "x":6.25, "y":3.25},
- {"label":"S", "x":7.25, "y":3.25},
- {"label":"D", "x":8.25, "y":3.25},
- {"label":"F", "x":9.25, "y":3.25},
- {"label":"G", "x":10.25, "y":3.25},
- {"label":"H", "x":11.25, "y":3.25},
- {"label":"J", "x":12.25, "y":3.25},
- {"label":"K", "x":13.25, "y":3.25},
- {"label":"L", "x":14.25, "y":3.25},
- {"label":":", "x":15.25, "y":3.25},
- {"label":"\"", "x":16.25, "y":3.25},
- {"label":"Enter", "x":17.25, "y":3.25, "w":2.25},
- {"label":"4", "x":20, "y":3.25},
- {"label":"5", "x":21, "y":3.25},
- {"label":"6", "x":22, "y":3.25},
- {"label":"Enter", "x":0, "y":4.25, "h":2},
- {"label":"1", "x":1, "y":4.25},
- {"label":"2", "x":2, "y":4.25},
- {"label":"3", "x":3, "y":4.25},
- {"label":"\\u2191", "x":4.25, "y":4.5},
- {"label":"Shift", "x":5.5, "y":4.25, "w":1.25},
- {"label":"Z", "x":6.75, "y":4.25},
- {"label":"X", "x":7.75, "y":4.25},
- {"label":"C", "x":8.75, "y":4.25},
- {"label":"V", "x":9.75, "y":4.25},
- {"label":"B", "x":10.75, "y":4.25},
- {"label":"N", "x":11.75, "y":4.25},
- {"label":"M", "x":12.75, "y":4.25},
- {"label":"<", "x":13.75, "y":4.25},
- {"label":">", "x":14.75, "y":4.25},
- {"label":"?", "x":15.75, "y":4.25},
- {"label":"Shift", "x":16.75, "y":4.25, "w":1.75},
- {"label":"\\u2191", "x":18.75, "y":4.5},
- {"label":"1", "x":20, "y":4.25},
- {"label":"2", "x":21, "y":4.25},
- {"label":"3", "x":22, "y":4.25},
- {"label":"Enter", "x":23, "y":4.25, "h":2},
- {"label":"0", "x":1, "y":5.25},
- {"label":".", "x":2, "y":5.25},
- {"label":"\\u2190", "x":3.25, "y":5.5},
- {"label":"\\u2193", "x":4.25, "y":5.5},
- {"label":"\\u2192", "x":5.25, "y":5.5},
- {"label":"Ctrl", "x":6.5, "y":5.25},
- {"label":"Win", "x":7.5, "y":5.25},
- {"label":"Alt", "x":8.5, "y":5.25},
- {"label":"1u", "x":9.5, "y":5.25},
- {"label":"1u", "x":10.5, "y":5.25},
- {"label":"1u", "x":11.5, "y":5.25},
- {"label":"1u", "x":12.5, "y":5.25},
- {"label":"Alt", "x":13.5, "y":5.25},
- {"label":"Win", "x":14.5, "y":5.25},
- {"label":"Menu", "x":15.5, "y":5.25},
- {"label":"Ctrl", "x":16.5, "y":5.25},
- {"label":"\\u2190", "x":17.75, "y":5.5},
- {"label":"\\u2193", "x":18.75, "y":5.5},
- {"label":"\\u2192", "x":19.75, "y":5.5},
- {"label":"0", "x":21, "y":5.25},
- {"label":".", "x":22, "y":5.25}
+ {"label":"Home", "x":0, "y":0}, {"label":"End", "x":1, "y":0}, {"label":"PgUp", "x":2, "y":0}, {"label":"PgDn", "x":3, "y":0}, {"label":"Esc", "x":4.75, "y":0}, {"label":"F1", "x":6.25, "y":0}, {"label":"F2", "x":7.25, "y":0}, {"label":"F3", "x":8.25, "y":0}, {"label":"F4", "x":9.25, "y":0}, {"label":"F5", "x":10.75, "y":0}, {"label":"F6", "x":11.75, "y":0}, {"label":"F7", "x":12.75, "y":0}, {"label":"F8", "x":13.75, "y":0}, {"label":"F9", "x":15.25, "y":0}, {"label":"F10", "x":16.25, "y":0}, {"label":"F11", "x":17.25, "y":0}, {"label":"F12", "x":18.25, "y":0}, {"label":"PrtSc", "x":20, "y":0}, {"label":"Scroll Lock", "x":21, "y":0}, {"label":"Pause", "x":22, "y":0}, {"label":"Insert", "x":23, "y":0},
+ {"label":"-", "x":0, "y":1.25}, {"label":"Num Lock", "x":1, "y":1.25}, {"label":"/", "x":2, "y":1.25}, {"label":"*", "x":3, "y":1.25}, {"label":"~", "x":4.5, "y":1.25}, {"label":"!", "x":5.5, "y":1.25}, {"label":"@", "x":6.5, "y":1.25}, {"label":"#", "x":7.5, "y":1.25}, {"label":"$", "x":8.5, "y":1.25}, {"label":"%", "x":9.5, "y":1.25}, {"label":"^", "x":10.5, "y":1.25}, {"label":"&", "x":11.5, "y":1.25}, {"label":"*", "x":12.5, "y":1.25}, {"label":"(", "x":13.5, "y":1.25}, {"label":")", "x":14.5, "y":1.25}, {"label":"_", "x":15.5, "y":1.25}, {"label":"+", "x":16.5, "y":1.25}, {"label":"Backspace", "x":17.5, "y":1.25, "w":2}, {"label":"Num Lock", "x":20, "y":1.25}, {"label":"/", "x":21, "y":1.25}, {"label":"*", "x":22, "y":1.25}, {"label":"-", "x":23, "y":1.25},
+ {"label":"+", "x":0, "y":2.25, "h":2}, {"label":"7", "x":1, "y":2.25}, {"label":"8", "x":2, "y":2.25}, {"label":"9", "x":3, "y":2.25}, {"label":"Tab", "x":4.5, "y":2.25, "w":1.5}, {"label":"Q", "x":6, "y":2.25}, {"label":"W", "x":7, "y":2.25}, {"label":"E", "x":8, "y":2.25}, {"label":"R", "x":9, "y":2.25}, {"label":"T", "x":10, "y":2.25}, {"label":"Y", "x":11, "y":2.25}, {"label":"U", "x":12, "y":2.25}, {"label":"I", "x":13, "y":2.25}, {"label":"O", "x":14, "y":2.25}, {"label":"P", "x":15, "y":2.25}, {"label":"{", "x":16, "y":2.25}, {"label":"}", "x":17, "y":2.25}, {"label":"|", "x":18, "y":2.25, "w":1.5}, {"label":"7", "x":20, "y":2.25}, {"label":"8", "x":21, "y":2.25}, {"label":"9", "x":22, "y":2.25}, {"label":"+", "x":23, "y":2.25, "h":2},
+ {"label":"4", "x":1, "y":3.25}, {"label":"5", "x":2, "y":3.25}, {"label":"6", "x":3, "y":3.25}, {"label":"Caps Lock", "x":4.5, "y":3.25, "w":1.75}, {"label":"A", "x":6.25, "y":3.25}, {"label":"S", "x":7.25, "y":3.25}, {"label":"D", "x":8.25, "y":3.25}, {"label":"F", "x":9.25, "y":3.25}, {"label":"G", "x":10.25, "y":3.25}, {"label":"H", "x":11.25, "y":3.25}, {"label":"J", "x":12.25, "y":3.25}, {"label":"K", "x":13.25, "y":3.25}, {"label":"L", "x":14.25, "y":3.25}, {"label":":", "x":15.25, "y":3.25}, {"label":"\"", "x":16.25, "y":3.25}, {"label":"Enter", "x":17.25, "y":3.25, "w":2.25}, {"label":"4", "x":20, "y":3.25}, {"label":"5", "x":21, "y":3.25}, {"label":"6", "x":22, "y":3.25},
+ {"label":"Enter", "x":0, "y":4.25, "h":2}, {"label":"1", "x":1, "y":4.25}, {"label":"2", "x":2, "y":4.25}, {"label":"3", "x":3, "y":4.25}, {"label":"\\u2191", "x":4.25, "y":4.5}, {"label":"Shift", "x":5.5, "y":4.25, "w":1.25}, {"label":"Z", "x":6.75, "y":4.25}, {"label":"X", "x":7.75, "y":4.25}, {"label":"C", "x":8.75, "y":4.25}, {"label":"V", "x":9.75, "y":4.25}, {"label":"B", "x":10.75, "y":4.25}, {"label":"N", "x":11.75, "y":4.25}, {"label":"M", "x":12.75, "y":4.25}, {"label":"<", "x":13.75, "y":4.25}, {"label":">", "x":14.75, "y":4.25}, {"label":"?", "x":15.75, "y":4.25}, {"label":"Shift", "x":16.75, "y":4.25, "w":1.75}, {"label":"\\u2191", "x":18.75, "y":4.5}, {"label":"1", "x":20, "y":4.25}, {"label":"2", "x":21, "y":4.25}, {"label":"3", "x":22, "y":4.25}, {"label":"Enter", "x":23, "y":4.25, "h":2},
+ {"label":"0", "x":1, "y":5.25}, {"label":".", "x":2, "y":5.25}, {"label":"\\u2190", "x":3.25, "y":5.5}, {"label":"\\u2193", "x":4.25, "y":5.5}, {"label":"\\u2192", "x":5.25, "y":5.5}, {"label":"Ctrl", "x":6.5, "y":5.25}, {"label":"Win", "x":7.5, "y":5.25}, {"label":"Alt", "x":8.5, "y":5.25}, {"label":"1u", "x":9.5, "y":5.25}, {"label":"1u", "x":10.5, "y":5.25}, {"label":"1u", "x":11.5, "y":5.25}, {"label":"1u", "x":12.5, "y":5.25}, {"label":"Alt", "x":13.5, "y":5.25}, {"label":"Win", "x":14.5, "y":5.25}, {"label":"Menu", "x":15.5, "y":5.25}, {"label":"Ctrl", "x":16.5, "y":5.25}, {"label":"\\u2190", "x":17.75, "y":5.5}, {"label":"\\u2193", "x":18.75, "y":5.5}, {"label":"\\u2192", "x":19.75, "y":5.5}, {"label":"0", "x":21, "y":5.25}, {"label":".", "x":22, "y":5.25}
]
},
"LAYOUT_7u_space": {
"key_count": 121,
"layout": [
- {"label":"k00", "x":0, "y":0},
- {"label":"k01", "x":1, "y":0},
- {"label":"k02", "x":2, "y":0},
- {"label":"k03", "x":3, "y":0},
- {"label":"k04", "x":4.75, "y":0},
- {"label":"k06", "x":6.25, "y":0},
- {"label":"k07", "x":7.25, "y":0},
- {"label":"k08", "x":8.25, "y":0},
- {"label":"k09", "x":9.25, "y":0},
- {"label":"k0a", "x":10.75, "y":0},
- {"label":"k60", "x":11.75, "y":0},
- {"label":"k61", "x":12.75, "y":0},
- {"label":"k62", "x":13.75, "y":0},
- {"label":"k63", "x":15.25, "y":0},
- {"label":"k64", "x":16.25, "y":0},
- {"label":"k65", "x":17.25, "y":0},
- {"label":"k66", "x":18.25, "y":0},
- {"label":"k67", "x":20, "y":0},
- {"label":"k68", "x":21, "y":0},
- {"label":"k69", "x":22, "y":0},
- {"label":"k6a", "x":23, "y":0},
- {"label":"k10", "x":0, "y":1.25},
- {"label":"k11", "x":1, "y":1.25},
- {"label":"k12", "x":2, "y":1.25},
- {"label":"k13", "x":3, "y":1.25},
- {"label":"k14", "x":4.5, "y":1.25},
- {"label":"k15", "x":5.5, "y":1.25},
- {"label":"k16", "x":6.5, "y":1.25},
- {"label":"k17", "x":7.5, "y":1.25},
- {"label":"k18", "x":8.5, "y":1.25},
- {"label":"k19", "x":9.5, "y":1.25},
- {"label":"k0a", "x":10.5, "y":1.25},
- {"label":"k70", "x":11.5, "y":1.25},
- {"label":"k71", "x":12.5, "y":1.25},
- {"label":"k72", "x":13.5, "y":1.25},
- {"label":"k73", "x":14.5, "y":1.25},
- {"label":"k74", "x":15.5, "y":1.25},
- {"label":"k75", "x":16.5, "y":1.25},
- {"label":"k76", "x":17.5, "y":1.25, "w":2},
- {"label":"k77", "x":20, "y":1.25},
- {"label":"k78", "x":21, "y":1.25},
- {"label":"k79", "x":22, "y":1.25},
- {"label":"k7a", "x":23, "y":1.25},
- {"label":"k20", "x":0, "y":2.25, "h":2},
- {"label":"k21", "x":1, "y":2.25},
- {"label":"k22", "x":2, "y":2.25},
- {"label":"k23", "x":3, "y":2.25},
- {"label":"k24", "x":4.5, "y":2.25, "w":1.5},
- {"label":"k25", "x":6, "y":2.25},
- {"label":"k26", "x":7, "y":2.25},
- {"label":"k27", "x":8, "y":2.25},
- {"label":"k28", "x":9, "y":2.25},
- {"label":"k29", "x":10, "y":2.25},
- {"label":"k2a", "x":11, "y":2.25},
- {"label":"k80", "x":12, "y":2.25},
- {"label":"k81", "x":13, "y":2.25},
- {"label":"k82", "x":14, "y":2.25},
- {"label":"k83", "x":15, "y":2.25},
- {"label":"k84", "x":16, "y":2.25},
- {"label":"k85", "x":17, "y":2.25},
- {"label":"k86", "x":18, "y":2.25, "w":1.5},
- {"label":"k87", "x":20, "y":2.25},
- {"label":"k88", "x":21, "y":2.25},
- {"label":"k89", "x":22, "y":2.25},
- {"label":"k8a", "x":23, "y":2.25, "h":2},
- {"label":"k31", "x":1, "y":3.25},
- {"label":"k32", "x":2, "y":3.25},
- {"label":"k33", "x":3, "y":3.25},
- {"label":"k34", "x":4.5, "y":3.25, "w":1.75},
- {"label":"k35", "x":6.25, "y":3.25},
- {"label":"k36", "x":7.25, "y":3.25},
- {"label":"k37", "x":8.25, "y":3.25},
- {"label":"k38", "x":9.25, "y":3.25},
- {"label":"k39", "x":10.25, "y":3.25},
- {"label":"k3a", "x":11.25, "y":3.25},
- {"label":"k90", "x":12.25, "y":3.25},
- {"label":"k91", "x":13.25, "y":3.25},
- {"label":"k92", "x":14.25, "y":3.25},
- {"label":"k93", "x":15.25, "y":3.25},
- {"label":"k94", "x":16.25, "y":3.25},
- {"label":"k95", "x":17.25, "y":3.25, "w":2.25},
- {"label":"k97", "x":20, "y":3.25},
- {"label":"k98", "x":21, "y":3.25},
- {"label":"k99", "x":22, "y":3.25},
- {"label":"k40", "x":0, "y":4.25, "h":2},
- {"label":"k41", "x":1, "y":4.25},
- {"label":"k42", "x":2, "y":4.25},
- {"label":"k43", "x":3, "y":4.25},
- {"label":"k45", "x":5.5, "y":4.25, "w":1.25},
- {"label":"k46", "x":6.75, "y":4.25},
- {"label":"k47", "x":7.75, "y":4.25},
- {"label":"k48", "x":8.75, "y":4.25},
- {"label":"k49", "x":9.75, "y":4.25},
- {"label":"k4a", "x":10.75, "y":4.25},
- {"label":"ka0", "x":11.75, "y":4.25},
- {"label":"ka1", "x":12.75, "y":4.25},
- {"label":"ka2", "x":13.75, "y":4.25},
- {"label":"ka3", "x":14.75, "y":4.25},
- {"label":"ka4", "x":15.75, "y":4.25},
- {"label":"ka5", "x":16.75, "y":4.25, "w":1.75},
- {"label":"ka7", "x":20, "y":4.25},
- {"label":"ka8", "x":21, "y":4.25},
- {"label":"ka9", "x":22, "y":4.25},
- {"label":"kaa", "x":23, "y":4.25, "h":2},
- {"label":"k44", "x":4.25, "y":4.5},
- {"label":"k96", "x":18.75, "y":4.5},
- {"label":"k51", "x":1, "y":5.25},
- {"label":"k52", "x":2, "y":5.25},
- {"label":"k56", "x":6.5, "y":5.25},
- {"label":"k57", "x":7.5, "y":5.25},
- {"label":"kb0", "x":8.5, "y":5.25, "w":7},
- {"label":"kb4", "x":15.5, "y":5.25},
- {"label":"kb5", "x":16.5, "y":5.25},
- {"label":"kb8", "x":21, "y":5.25},
- {"label":"kb9", "x":22, "y":5.25},
- {"label":"k53", "x":3.25, "y":5.5},
- {"label":"k54", "x":4.25, "y":5.5},
- {"label":"k55", "x":5.25, "y":5.5},
- {"label":"ka6", "x":17.75, "y":5.5},
- {"label":"kb6", "x":18.75, "y":5.5},
- {"label":"kb7", "x":19.75, "y":5.5}
+ {"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4.75, "y":0}, {"label":"k06", "x":6.25, "y":0}, {"label":"k07", "x":7.25, "y":0}, {"label":"k08", "x":8.25, "y":0}, {"label":"k09", "x":9.25, "y":0}, {"label":"k0a", "x":10.75, "y":0}, {"label":"k60", "x":11.75, "y":0}, {"label":"k61", "x":12.75, "y":0}, {"label":"k62", "x":13.75, "y":0}, {"label":"k63", "x":15.25, "y":0}, {"label":"k64", "x":16.25, "y":0}, {"label":"k65", "x":17.25, "y":0}, {"label":"k66", "x":18.25, "y":0}, {"label":"k67", "x":20, "y":0}, {"label":"k68", "x":21, "y":0}, {"label":"k69", "x":22, "y":0}, {"label":"k6a", "x":23, "y":0},
+ {"label":"k10", "x":0, "y":1.25}, {"label":"k11", "x":1, "y":1.25}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1.25}, {"label":"k14", "x":4.5, "y":1.25}, {"label":"k15", "x":5.5, "y":1.25}, {"label":"k16", "x":6.5, "y":1.25}, {"label":"k17", "x":7.5, "y":1.25}, {"label":"k18", "x":8.5, "y":1.25}, {"label":"k19", "x":9.5, "y":1.25}, {"label":"k0a", "x":10.5, "y":1.25}, {"label":"k70", "x":11.5, "y":1.25}, {"label":"k71", "x":12.5, "y":1.25}, {"label":"k72", "x":13.5, "y":1.25}, {"label":"k73", "x":14.5, "y":1.25}, {"label":"k74", "x":15.5, "y":1.25}, {"label":"k75", "x":16.5, "y":1.25}, {"label":"k76", "x":17.5, "y":1.25, "w":2}, {"label":"k77", "x":20, "y":1.25}, {"label":"k78", "x":21, "y":1.25}, {"label":"k79", "x":22, "y":1.25}, {"label":"k7a", "x":23, "y":1.25},
+ {"label":"k20", "x":0, "y":2.25, "h":2}, {"label":"k21", "x":1, "y":2.25}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2.25}, {"label":"k24", "x":4.5, "y":2.25, "w":1.5}, {"label":"k25", "x":6, "y":2.25}, {"label":"k26", "x":7, "y":2.25}, {"label":"k27", "x":8, "y":2.25}, {"label":"k28", "x":9, "y":2.25}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2a", "x":11, "y":2.25}, {"label":"k80", "x":12, "y":2.25}, {"label":"k81", "x":13, "y":2.25}, {"label":"k82", "x":14, "y":2.25}, {"label":"k83", "x":15, "y":2.25}, {"label":"k84", "x":16, "y":2.25}, {"label":"k85", "x":17, "y":2.25}, {"label":"k86", "x":18, "y":2.25, "w":1.5}, {"label":"k87", "x":20, "y":2.25}, {"label":"k88", "x":21, "y":2.25}, {"label":"k89", "x":22, "y":2.25}, {"label":"k8a", "x":23, "y":2.25, "h":2},
+ {"label":"k31", "x":1, "y":3.25}, {"label":"k32", "x":2, "y":3.25}, {"label":"k33", "x":3, "y":3.25}, {"label":"k34", "x":4.5, "y":3.25, "w":1.75}, {"label":"k35", "x":6.25, "y":3.25}, {"label":"k36", "x":7.25, "y":3.25}, {"label":"k37", "x":8.25, "y":3.25}, {"label":"k38", "x":9.25, "y":3.25}, {"label":"k39", "x":10.25, "y":3.25}, {"label":"k3a", "x":11.25, "y":3.25}, {"label":"k90", "x":12.25, "y":3.25}, {"label":"k91", "x":13.25, "y":3.25}, {"label":"k92", "x":14.25, "y":3.25}, {"label":"k93", "x":15.25, "y":3.25}, {"label":"k94", "x":16.25, "y":3.25}, {"label":"k95", "x":17.25, "y":3.25, "w":2.25}, {"label":"k97", "x":20, "y":3.25}, {"label":"k98", "x":21, "y":3.25}, {"label":"k99", "x":22, "y":3.25},
+ {"label":"k40", "x":0, "y":4.25, "h":2}, {"label":"k41", "x":1, "y":4.25}, {"label":"k42", "x":2, "y":4.25}, {"label":"k43", "x":3, "y":4.25}, {"label":"k45", "x":5.5, "y":4.25, "w":1.25}, {"label":"k46", "x":6.75, "y":4.25}, {"label":"k47", "x":7.75, "y":4.25}, {"label":"k48", "x":8.75, "y":4.25}, {"label":"k49", "x":9.75, "y":4.25}, {"label":"k4a", "x":10.75, "y":4.25}, {"label":"ka0", "x":11.75, "y":4.25}, {"label":"ka1", "x":12.75, "y":4.25}, {"label":"ka2", "x":13.75, "y":4.25}, {"label":"ka3", "x":14.75, "y":4.25}, {"label":"ka4", "x":15.75, "y":4.25}, {"label":"ka5", "x":16.75, "y":4.25, "w":1.75}, {"label":"ka7", "x":20, "y":4.25}, {"label":"ka8", "x":21, "y":4.25}, {"label":"ka9", "x":22, "y":4.25}, {"label":"kaa", "x":23, "y":4.25, "h":2}, {"label":"k44", "x":4.25, "y":4.5}, {"label":"k96", "x":18.75, "y":4.5},
+ {"label":"k51", "x":1, "y":5.25}, {"label":"k52", "x":2, "y":5.25}, {"label":"k56", "x":6.5, "y":5.25}, {"label":"k57", "x":7.5, "y":5.25}, {"label":"kb0", "x":8.5, "y":5.25, "w":7}, {"label":"kb4", "x":15.5, "y":5.25}, {"label":"kb5", "x":16.5, "y":5.25}, {"label":"kb8", "x":21, "y":5.25}, {"label":"kb9", "x":22, "y":5.25}, {"label":"k53", "x":3.25, "y":5.5}, {"label":"k54", "x":4.25, "y":5.5}, {"label":"k55", "x":5.25, "y":5.5}, {"label":"ka6", "x":17.75, "y":5.5}, {"label":"kb6", "x":18.75, "y":5.5}, {"label":"kb7", "x":19.75, "y":5.5}
]
},
"LAYOUT_4u_space": {
"key_count": 124,
"layout": [
- {"label":"k00", "x":0, "y":0},
- {"label":"k01", "x":1, "y":0},
- {"label":"k02", "x":2, "y":0},
- {"label":"k03", "x":3, "y":0},
- {"label":"k04", "x":4.75, "y":0},
- {"label":"k06", "x":6.25, "y":0},
- {"label":"k07", "x":7.25, "y":0},
- {"label":"k08", "x":8.25, "y":0},
- {"label":"k09", "x":9.25, "y":0},
- {"label":"k0a", "x":10.75, "y":0},
- {"label":"k60", "x":11.75, "y":0},
- {"label":"k61", "x":12.75, "y":0},
- {"label":"k62", "x":13.75, "y":0},
- {"label":"k63", "x":15.25, "y":0},
- {"label":"k64", "x":16.25, "y":0},
- {"label":"k65", "x":17.25, "y":0},
- {"label":"k66", "x":18.25, "y":0},
- {"label":"k67", "x":20, "y":0},
- {"label":"k68", "x":21, "y":0},
- {"label":"k69", "x":22, "y":0},
- {"label":"k6a", "x":23, "y":0},
- {"label":"k10", "x":0, "y":1.25},
- {"label":"k11", "x":1, "y":1.25},
- {"label":"k12", "x":2, "y":1.25},
- {"label":"k13", "x":3, "y":1.25},
- {"label":"k14", "x":4.5, "y":1.25},
- {"label":"k15", "x":5.5, "y":1.25},
- {"label":"k16", "x":6.5, "y":1.25},
- {"label":"k17", "x":7.5, "y":1.25},
- {"label":"k18", "x":8.5, "y":1.25},
- {"label":"k19", "x":9.5, "y":1.25},
- {"label":"k0a", "x":10.5, "y":1.25},
- {"label":"k70", "x":11.5, "y":1.25},
- {"label":"k71", "x":12.5, "y":1.25},
- {"label":"k72", "x":13.5, "y":1.25},
- {"label":"k73", "x":14.5, "y":1.25},
- {"label":"k74", "x":15.5, "y":1.25},
- {"label":"k75", "x":16.5, "y":1.25},
- {"label":"k76", "x":17.5, "y":1.25, "w":2},
- {"label":"k77", "x":20, "y":1.25},
- {"label":"k78", "x":21, "y":1.25},
- {"label":"k79", "x":22, "y":1.25},
- {"label":"k7a", "x":23, "y":1.25},
- {"label":"k20", "x":0, "y":2.25, "h":2},
- {"label":"k21", "x":1, "y":2.25},
- {"label":"k22", "x":2, "y":2.25},
- {"label":"k23", "x":3, "y":2.25},
- {"label":"k24", "x":4.5, "y":2.25, "w":1.5},
- {"label":"k25", "x":6, "y":2.25},
- {"label":"k26", "x":7, "y":2.25},
- {"label":"k27", "x":8, "y":2.25},
- {"label":"k28", "x":9, "y":2.25},
- {"label":"k29", "x":10, "y":2.25},
- {"label":"k2a", "x":11, "y":2.25},
- {"label":"k80", "x":12, "y":2.25},
- {"label":"k81", "x":13, "y":2.25},
- {"label":"k82", "x":14, "y":2.25},
- {"label":"k83", "x":15, "y":2.25},
- {"label":"k84", "x":16, "y":2.25},
- {"label":"k85", "x":17, "y":2.25},
- {"label":"k86", "x":18, "y":2.25, "w":1.5},
- {"label":"k87", "x":20, "y":2.25},
- {"label":"k88", "x":21, "y":2.25},
- {"label":"k89", "x":22, "y":2.25},
- {"label":"k8a", "x":23, "y":2.25, "h":2},
- {"label":"k31", "x":1, "y":3.25},
- {"label":"k32", "x":2, "y":3.25},
- {"label":"k33", "x":3, "y":3.25},
- {"label":"k34", "x":4.5, "y":3.25, "w":1.75},
- {"label":"k35", "x":6.25, "y":3.25},
- {"label":"k36", "x":7.25, "y":3.25},
- {"label":"k37", "x":8.25, "y":3.25},
- {"label":"k38", "x":9.25, "y":3.25},
- {"label":"k39", "x":10.25, "y":3.25},
- {"label":"k3a", "x":11.25, "y":3.25},
- {"label":"k90", "x":12.25, "y":3.25},
- {"label":"k91", "x":13.25, "y":3.25},
- {"label":"k92", "x":14.25, "y":3.25},
- {"label":"k93", "x":15.25, "y":3.25},
- {"label":"k94", "x":16.25, "y":3.25},
- {"label":"k95", "x":17.25, "y":3.25, "w":2.25},
- {"label":"k97", "x":20, "y":3.25},
- {"label":"k98", "x":21, "y":3.25},
- {"label":"k99", "x":22, "y":3.25},
- {"label":"k40", "x":0, "y":4.25, "h":2},
- {"label":"k41", "x":1, "y":4.25},
- {"label":"k42", "x":2, "y":4.25},
- {"label":"k43", "x":3, "y":4.25},
- {"label":"k45", "x":5.5, "y":4.25, "w":1.25},
- {"label":"k46", "x":6.75, "y":4.25},
- {"label":"k47", "x":7.75, "y":4.25},
- {"label":"k48", "x":8.75, "y":4.25},
- {"label":"k49", "x":9.75, "y":4.25},
- {"label":"k4a", "x":10.75, "y":4.25},
- {"label":"ka0", "x":11.75, "y":4.25},
- {"label":"ka1", "x":12.75, "y":4.25},
- {"label":"ka2", "x":13.75, "y":4.25},
- {"label":"ka3", "x":14.75, "y":4.25},
- {"label":"ka4", "x":15.75, "y":4.25},
- {"label":"ka5", "x":16.75, "y":4.25, "w":1.75},
- {"label":"ka7", "x":20, "y":4.25},
- {"label":"ka8", "x":21, "y":4.25},
- {"label":"ka9", "x":22, "y":4.25},
- {"label":"kaa", "x":23, "y":4.25, "h":2},
- {"label":"k44", "x":4.25, "y":4.5},
- {"label":"k96", "x":18.75, "y":4.5},
- {"label":"k51", "x":1, "y":5.25},
- {"label":"k52", "x":2, "y":5.25},
- {"label":"k56", "x":6.5, "y":5.25},
- {"label":"k57", "x":7.5, "y":5.25},
- {"label":"k58", "x":8.5, "y":5.25},
- {"label":"kb0", "x":9.5, "y":5.25, "w":4},
- {"label":"kb2", "x":13.5, "y":5.25},
- {"label":"kb3", "x":14.5, "y":5.25},
- {"label":"kb4", "x":15.5, "y":5.25},
- {"label":"kb5", "x":16.5, "y":5.25},
- {"label":"kb8", "x":21, "y":5.25},
- {"label":"kb9", "x":22, "y":5.25},
- {"label":"k53", "x":3.25, "y":5.5},
- {"label":"k54", "x":4.25, "y":5.5},
- {"label":"k55", "x":5.25, "y":5.5},
- {"label":"ka6", "x":17.75, "y":5.5},
- {"label":"kb6", "x":18.75, "y":5.5},
- {"label":"kb7", "x":19.75, "y":5.5}
+ {"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4.75, "y":0}, {"label":"k06", "x":6.25, "y":0}, {"label":"k07", "x":7.25, "y":0}, {"label":"k08", "x":8.25, "y":0}, {"label":"k09", "x":9.25, "y":0}, {"label":"k0a", "x":10.75, "y":0}, {"label":"k60", "x":11.75, "y":0}, {"label":"k61", "x":12.75, "y":0}, {"label":"k62", "x":13.75, "y":0}, {"label":"k63", "x":15.25, "y":0}, {"label":"k64", "x":16.25, "y":0}, {"label":"k65", "x":17.25, "y":0}, {"label":"k66", "x":18.25, "y":0}, {"label":"k67", "x":20, "y":0}, {"label":"k68", "x":21, "y":0}, {"label":"k69", "x":22, "y":0}, {"label":"k6a", "x":23, "y":0},
+ {"label":"k10", "x":0, "y":1.25}, {"label":"k11", "x":1, "y":1.25}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1.25}, {"label":"k14", "x":4.5, "y":1.25}, {"label":"k15", "x":5.5, "y":1.25}, {"label":"k16", "x":6.5, "y":1.25}, {"label":"k17", "x":7.5, "y":1.25}, {"label":"k18", "x":8.5, "y":1.25}, {"label":"k19", "x":9.5, "y":1.25}, {"label":"k0a", "x":10.5, "y":1.25}, {"label":"k70", "x":11.5, "y":1.25}, {"label":"k71", "x":12.5, "y":1.25}, {"label":"k72", "x":13.5, "y":1.25}, {"label":"k73", "x":14.5, "y":1.25}, {"label":"k74", "x":15.5, "y":1.25}, {"label":"k75", "x":16.5, "y":1.25}, {"label":"k76", "x":17.5, "y":1.25, "w":2}, {"label":"k77", "x":20, "y":1.25}, {"label":"k78", "x":21, "y":1.25}, {"label":"k79", "x":22, "y":1.25}, {"label":"k7a", "x":23, "y":1.25},
+ {"label":"k20", "x":0, "y":2.25, "h":2}, {"label":"k21", "x":1, "y":2.25}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2.25}, {"label":"k24", "x":4.5, "y":2.25, "w":1.5}, {"label":"k25", "x":6, "y":2.25}, {"label":"k26", "x":7, "y":2.25}, {"label":"k27", "x":8, "y":2.25}, {"label":"k28", "x":9, "y":2.25}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2a", "x":11, "y":2.25}, {"label":"k80", "x":12, "y":2.25}, {"label":"k81", "x":13, "y":2.25}, {"label":"k82", "x":14, "y":2.25}, {"label":"k83", "x":15, "y":2.25}, {"label":"k84", "x":16, "y":2.25}, {"label":"k85", "x":17, "y":2.25}, {"label":"k86", "x":18, "y":2.25, "w":1.5}, {"label":"k87", "x":20, "y":2.25}, {"label":"k88", "x":21, "y":2.25}, {"label":"k89", "x":22, "y":2.25}, {"label":"k8a", "x":23, "y":2.25, "h":2},
+ {"label":"k31", "x":1, "y":3.25}, {"label":"k32", "x":2, "y":3.25}, {"label":"k33", "x":3, "y":3.25}, {"label":"k34", "x":4.5, "y":3.25, "w":1.75}, {"label":"k35", "x":6.25, "y":3.25}, {"label":"k36", "x":7.25, "y":3.25}, {"label":"k37", "x":8.25, "y":3.25}, {"label":"k38", "x":9.25, "y":3.25}, {"label":"k39", "x":10.25, "y":3.25}, {"label":"k3a", "x":11.25, "y":3.25}, {"label":"k90", "x":12.25, "y":3.25}, {"label":"k91", "x":13.25, "y":3.25}, {"label":"k92", "x":14.25, "y":3.25}, {"label":"k93", "x":15.25, "y":3.25}, {"label":"k94", "x":16.25, "y":3.25}, {"label":"k95", "x":17.25, "y":3.25, "w":2.25}, {"label":"k97", "x":20, "y":3.25}, {"label":"k98", "x":21, "y":3.25}, {"label":"k99", "x":22, "y":3.25},
+ {"label":"k40", "x":0, "y":4.25, "h":2}, {"label":"k41", "x":1, "y":4.25}, {"label":"k42", "x":2, "y":4.25}, {"label":"k43", "x":3, "y":4.25}, {"label":"k45", "x":5.5, "y":4.25, "w":1.25}, {"label":"k46", "x":6.75, "y":4.25}, {"label":"k47", "x":7.75, "y":4.25}, {"label":"k48", "x":8.75, "y":4.25}, {"label":"k49", "x":9.75, "y":4.25}, {"label":"k4a", "x":10.75, "y":4.25}, {"label":"ka0", "x":11.75, "y":4.25}, {"label":"ka1", "x":12.75, "y":4.25}, {"label":"ka2", "x":13.75, "y":4.25}, {"label":"ka3", "x":14.75, "y":4.25}, {"label":"ka4", "x":15.75, "y":4.25}, {"label":"ka5", "x":16.75, "y":4.25, "w":1.75}, {"label":"ka7", "x":20, "y":4.25}, {"label":"ka8", "x":21, "y":4.25}, {"label":"ka9", "x":22, "y":4.25}, {"label":"kaa", "x":23, "y":4.25, "h":2}, {"label":"k44", "x":4.25, "y":4.5}, {"label":"k96", "x":18.75, "y":4.5},
+ {"label":"k51", "x":1, "y":5.25}, {"label":"k52", "x":2, "y":5.25}, {"label":"k56", "x":6.5, "y":5.25}, {"label":"k57", "x":7.5, "y":5.25}, {"label":"k58", "x":8.5, "y":5.25}, {"label":"kb0", "x":9.5, "y":5.25, "w":4}, {"label":"kb2", "x":13.5, "y":5.25}, {"label":"kb3", "x":14.5, "y":5.25}, {"label":"kb4", "x":15.5, "y":5.25}, {"label":"kb5", "x":16.5, "y":5.25}, {"label":"kb8", "x":21, "y":5.25}, {"label":"kb9", "x":22, "y":5.25}, {"label":"k53", "x":3.25, "y":5.5}, {"label":"k54", "x":4.25, "y":5.5}, {"label":"k55", "x":5.25, "y":5.5}, {"label":"ka6", "x":17.75, "y":5.5}, {"label":"kb6", "x":18.75, "y":5.5}, {"label":"kb7", "x":19.75, "y":5.5}
]
}
}
diff --git a/keyboards/clueboard/2x1800/keymaps/default/config.h b/keyboards/clueboard/2x1800/keymaps/default/config.h
index f5eccb2252..152e2f1487 100644
--- a/keyboards/clueboard/2x1800/keymaps/default/config.h
+++ b/keyboards/clueboard/2x1800/keymaps/default/config.h
@@ -14,11 +14,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
#include "config_common.h"
// place overrides here
-
-#endif
diff --git a/keyboards/clueboard/2x1800/keymaps/default_4u/config.h b/keyboards/clueboard/2x1800/keymaps/default_4u/config.h
index f5eccb2252..152e2f1487 100644
--- a/keyboards/clueboard/2x1800/keymaps/default_4u/config.h
+++ b/keyboards/clueboard/2x1800/keymaps/default_4u/config.h
@@ -14,11 +14,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
#include "config_common.h"
// place overrides here
-
-#endif
diff --git a/keyboards/clueboard/2x1800/keymaps/default_7u/config.h b/keyboards/clueboard/2x1800/keymaps/default_7u/config.h
index f5eccb2252..152e2f1487 100644
--- a/keyboards/clueboard/2x1800/keymaps/default_7u/config.h
+++ b/keyboards/clueboard/2x1800/keymaps/default_7u/config.h
@@ -14,11 +14,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
#include "config_common.h"
// place overrides here
-
-#endif
diff --git a/keyboards/clueboard/2x1800/keymaps/macroboard/config.h b/keyboards/clueboard/2x1800/keymaps/macroboard/config.h
index f5eccb2252..152e2f1487 100644
--- a/keyboards/clueboard/2x1800/keymaps/macroboard/config.h
+++ b/keyboards/clueboard/2x1800/keymaps/macroboard/config.h
@@ -14,11 +14,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
#include "config_common.h"
// place overrides here
-
-#endif
diff --git a/keyboards/clueboard/2x1800/keymaps/mouseboard_left/config.h b/keyboards/clueboard/2x1800/keymaps/mouseboard_left/config.h
index f5eccb2252..152e2f1487 100644
--- a/keyboards/clueboard/2x1800/keymaps/mouseboard_left/config.h
+++ b/keyboards/clueboard/2x1800/keymaps/mouseboard_left/config.h
@@ -14,11 +14,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
#include "config_common.h"
// place overrides here
-
-#endif
diff --git a/keyboards/clueboard/2x1800/keymaps/mouseboard_left/rules.mk b/keyboards/clueboard/2x1800/keymaps/mouseboard_left/rules.mk
deleted file mode 100644
index 6c605daecf..0000000000
--- a/keyboards/clueboard/2x1800/keymaps/mouseboard_left/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-MOUSEKEY_ENABLE = yes
diff --git a/keyboards/clueboard/2x1800/keymaps/mouseboard_right/config.h b/keyboards/clueboard/2x1800/keymaps/mouseboard_right/config.h
index f5eccb2252..152e2f1487 100644
--- a/keyboards/clueboard/2x1800/keymaps/mouseboard_right/config.h
+++ b/keyboards/clueboard/2x1800/keymaps/mouseboard_right/config.h
@@ -14,11 +14,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
#include "config_common.h"
// place overrides here
-
-#endif
diff --git a/keyboards/clueboard/2x1800/keymaps/mouseboard_right/rules.mk b/keyboards/clueboard/2x1800/keymaps/mouseboard_right/rules.mk
deleted file mode 100644
index 6c605daecf..0000000000
--- a/keyboards/clueboard/2x1800/keymaps/mouseboard_right/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-MOUSEKEY_ENABLE = yes
diff --git a/keyboards/clueboard/2x1800/readme.md b/keyboards/clueboard/2x1800/readme.md
index cccd8ac15f..7e2c206ede 100644
--- a/keyboards/clueboard/2x1800/readme.md
+++ b/keyboards/clueboard/2x1800/readme.md
@@ -2,12 +2,12 @@
Clueboard Double 1800 All The Way
-Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
-Hardware Supported: Clueboard 2x1800 PCB
-Hardware Availability: 2018 Apr 1 Group Buy
+* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
+* Hardware Supported: Clueboard 2x1800 PCB
+* Hardware Availability: 2018 Apr 1 Group Buy
-Make example for this keyboard (after setting up your build environment):
+Make example for this keyboard:
make 2x1800:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/clueboard/2x1800/rules.mk b/keyboards/clueboard/2x1800/rules.mk
index 516a536f6b..eb679b9fb7 100644
--- a/keyboards/clueboard/2x1800/rules.mk
+++ b/keyboards/clueboard/2x1800/rules.mk
@@ -1,64 +1,20 @@
-# MCU name
+# MCU details
MCU = at90usb1286
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=1024
# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
-RGBLIGHT_ENABLE = no # RGB on port C6
-AUDIO_ENABLE = no # Audio output on port C4 and B7
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+RGBLIGHT_ENABLE = yes # RGB on port C6
+AUDIO_ENABLE = yes # Audio output on port C4 and B7
diff --git a/keyboards/clueboard/60/60.h b/keyboards/clueboard/60/60.h
index ffff18f9e4..713f0d42be 100644
--- a/keyboards/clueboard/60/60.h
+++ b/keyboards/clueboard/60/60.h
@@ -19,15 +19,15 @@
#include "quantum.h"
/*
- * These are shortcuts to help you work with the various layout options. If your
+ * These are shortcuts to help you work with the various layout options. If your
* keymap works with one of the LAYOUT_...() macros you are encouraged to use that
- * and to contribute your keymap to the corresponding layout in
+ * and to contribute your keymap to the corresponding layout in
* `qmk_firmware/layouts/community`.
*/
-/* The fully-featured KEYMAP() that has every single key available in the matrix.
+/* The fully-featured LAYOUT_all() that has every single key available in the matrix.
*/
-#define KEYMAP(\
+#define LAYOUT_all(\
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
@@ -44,7 +44,7 @@
/* A layout that matches the Apple Extended Keyboard's main area. No split keys,
* 3 mods on either side of the spacebar.
*/
-#define KEYMAP_AEK(\
+#define LAYOUT_aek(\
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2e, \
@@ -102,4 +102,7 @@
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, k3e, }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
}
+
+#define LAYOUT LAYOUT_all
+#define KEYMAP LAYOUT_all
#endif
diff --git a/keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.h b/keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.h
deleted file mode 100644
index e09112eb98..0000000000
--- a/keyboards/clueboard/60/boards/GENERIC_STM32_F303XC/board.h
+++ /dev/null
@@ -1,1187 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _BOARD_H_
-#define _BOARD_H_
-
-/*
- * Setup for Clueboard 60% Keyboard
- */
-
-/*
- * Board identifier.
- */
-#define BOARD_GENERIC_STM32_F303XC
-#define BOARD_NAME "Clueboard 60 PCB"
-
-/*
- * Board oscillators-related settings.
- * NOTE: LSE not fitted.
- */
-#if !defined(STM32_LSECLK)
-#define STM32_LSECLK 0U
-#endif
-
-#define STM32_LSEDRV (3U << 3U)
-
-#if !defined(STM32_HSECLK)
-#define STM32_HSECLK 8000000U
-#endif
-
-// #define STM32_HSE_BYPASS
-
-/*
- * MCU type as defined in the ST header.
- */
-#define STM32F303xC
-
-/*
- * IO pins assignments.
- */
-#define GPIOA_PIN0 0U
-#define GPIOA_PIN1 1U
-#define GPIOA_PIN2 2U
-#define GPIOA_PIN3 3U
-#define GPIOA_PIN4 4U
-#define GPIOA_PIN5 5U
-#define GPIOA_PIN6 6U
-#define GPIOA_PIN7 7U
-#define GPIOA_PIN8 8U
-#define GPIOA_PIN9 9U
-#define GPIOA_PIN10 10U
-#define GPIOA_USB_DM 11U
-#define GPIOA_USB_DP 12U
-#define GPIOA_SWDIO 13U
-#define GPIOA_SWCLK 14U
-#define GPIOA_PIN15 15U
-
-#define GPIOB_PIN0 0U
-#define GPIOB_PIN1 1U
-#define GPIOB_PIN2 2U
-#define GPIOB_PIN3 3U
-#define GPIOB_PIN4 4U
-#define GPIOB_PIN5 5U
-#define GPIOB_PIN6 6U
-#define GPIOB_PIN7 7U
-#define GPIOB_PIN8 8U
-#define GPIOB_PIN9 9U
-#define GPIOB_PIN10 10U
-#define GPIOB_PIN11 11U
-#define GPIOB_PIN12 12U
-#define GPIOB_PIN13 13U
-#define GPIOB_PIN14 14U
-#define GPIOB_PIN15 15U
-
-#define GPIOC_PIN0 0U
-#define GPIOC_PIN1 1U
-#define GPIOC_PIN2 2U
-#define GPIOC_PIN3 3U
-#define GPIOC_PIN4 4U
-#define GPIOC_PIN5 5U
-#define GPIOC_PIN6 6U
-#define GPIOC_PIN7 7U
-#define GPIOC_PIN8 8U
-#define GPIOC_PIN9 9U
-#define GPIOC_PIN10 10U
-#define GPIOC_PIN11 11U
-#define GPIOC_PIN12 12U
-#define GPIOC_PIN13 13U
-#define GPIOC_PIN14 14U
-#define GPIOC_PIN15 15U
-
-#define GPIOD_PIN0 0U
-#define GPIOD_PIN1 1U
-#define GPIOD_PIN2 2U
-#define GPIOD_PIN3 3U
-#define GPIOD_PIN4 4U
-#define GPIOD_PIN5 5U
-#define GPIOD_PIN6 6U
-#define GPIOD_PIN7 7U
-#define GPIOD_PIN8 8U
-#define GPIOD_PIN9 9U
-#define GPIOD_PIN10 10U
-#define GPIOD_PIN11 11U
-#define GPIOD_PIN12 12U
-#define GPIOD_PIN13 13U
-#define GPIOD_PIN14 14U
-#define GPIOD_PIN15 15U
-
-#define GPIOE_PIN0 0U
-#define GPIOE_PIN1 1U
-#define GPIOE_PIN2 2U
-#define GPIOE_PIN3 3U
-#define GPIOE_PIN4 4U
-#define GPIOE_PIN5 5U
-#define GPIOE_PIN6 6U
-#define GPIOE_PIN7 7U
-#define GPIOE_PIN8 8U
-#define GPIOE_PIN9 9U
-#define GPIOE_PIN10 10U
-#define GPIOE_PIN11 11U
-#define GPIOE_PIN12 12U
-#define GPIOE_PIN13 13U
-#define GPIOE_PIN14 14U
-#define GPIOE_PIN15 15U
-
-#define GPIOF_I2C2_SDA 0U
-#define GPIOF_I2C2_SCL 1U
-#define GPIOF_PIN2 2U
-#define GPIOF_PIN3 3U
-#define GPIOF_PIN4 4U
-#define GPIOF_PIN5 5U
-#define GPIOF_PIN6 6U
-#define GPIOF_PIN7 7U
-#define GPIOF_PIN8 8U
-#define GPIOF_PIN9 9U
-#define GPIOF_PIN10 10U
-#define GPIOF_PIN11 11U
-#define GPIOF_PIN12 12U
-#define GPIOF_PIN13 13U
-#define GPIOF_PIN14 14U
-#define GPIOF_PIN15 15U
-
-#define GPIOG_PIN0 0U
-#define GPIOG_PIN1 1U
-#define GPIOG_PIN2 2U
-#define GPIOG_PIN3 3U
-#define GPIOG_PIN4 4U
-#define GPIOG_PIN5 5U
-#define GPIOG_PIN6 6U
-#define GPIOG_PIN7 7U
-#define GPIOG_PIN8 8U
-#define GPIOG_PIN9 9U
-#define GPIOG_PIN10 10U
-#define GPIOG_PIN11 11U
-#define GPIOG_PIN12 12U
-#define GPIOG_PIN13 13U
-#define GPIOG_PIN14 14U
-#define GPIOG_PIN15 15U
-
-#define GPIOH_PIN0 0U
-#define GPIOH_PIN1 1U
-#define GPIOH_PIN2 2U
-#define GPIOH_PIN3 3U
-#define GPIOH_PIN4 4U
-#define GPIOH_PIN5 5U
-#define GPIOH_PIN6 6U
-#define GPIOH_PIN7 7U
-#define GPIOH_PIN8 8U
-#define GPIOH_PIN9 9U
-#define GPIOH_PIN10 10U
-#define GPIOH_PIN11 11U
-#define GPIOH_PIN12 12U
-#define GPIOH_PIN13 13U
-#define GPIOH_PIN14 14U
-#define GPIOH_PIN15 15U
-
-/*
- * IO lines assignments.
- */
-#define LINE_L3GD20_SDI PAL_LINE(GPIOA, 7U)
-#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
-#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
-#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
-#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
-
-#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
-#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
-
-#define LINE_CAPS_LOCK PAL_LINE(GPIOB, 7U)
-
-
-/*
- * I/O ports initial setup, this configuration is established soon after reset
- * in the initialization code.
- * Please refer to the STM32 Reference Manual for details.
- */
-#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
-#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
-#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
-#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
-#define PIN_ODR_LOW(n) (0U << (n))
-#define PIN_ODR_HIGH(n) (1U << (n))
-#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
-#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
-#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
-#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
-#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
-#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
-#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
-#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
-#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
-#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
-
-/*
- * GPIOA setup:
- *
- * PA0 - NC
- * PA1 - NC
- * PA2 - COL1
- * PA3 - COL2
- * PA4 - SPEAKER1
- * PA5 - SPEAKER2
- * PA6 - COL3
- * PA7 - COL8
- * PA8 - COL6
- * PA9 - COL7
- * PA10 - ROW5
- * PA11 - USB_DM (alternate 14).
- * PA12 - USB_DP (alternate 14).
- * PA13 - SWDIO (alternate 0).
- * PA14 - SWCLK (alternate 0).
- * PA15 - ROW4
- */
-#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
- PIN_MODE_INPUT(GPIOA_PIN1) | \
- PIN_MODE_INPUT(GPIOA_PIN2) | \
- PIN_MODE_INPUT(GPIOA_PIN3) | \
- PIN_MODE_INPUT(GPIOA_PIN4) | \
- PIN_MODE_INPUT(GPIOA_PIN5) | \
- PIN_MODE_INPUT(GPIOA_PIN6) | \
- PIN_MODE_INPUT(GPIOA_PIN7) | \
- PIN_MODE_INPUT(GPIOA_PIN8) | \
- PIN_MODE_INPUT(GPIOA_PIN9) | \
- PIN_MODE_INPUT(GPIOA_PIN10) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
- PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
- PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
- PIN_MODE_INPUT(GPIOA_PIN15))
-#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
- PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
- PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
-#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
- PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
- PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
- PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
- PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN15))
-#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
- PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
- PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN15))
-#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
- PIN_ODR_HIGH(GPIOA_PIN1) | \
- PIN_ODR_HIGH(GPIOA_PIN2) | \
- PIN_ODR_HIGH(GPIOA_PIN3) | \
- PIN_ODR_HIGH(GPIOA_PIN4) | \
- PIN_ODR_HIGH(GPIOA_PIN5) | \
- PIN_ODR_HIGH(GPIOA_PIN6) | \
- PIN_ODR_HIGH(GPIOA_PIN7) | \
- PIN_ODR_HIGH(GPIOA_PIN8) | \
- PIN_ODR_HIGH(GPIOA_PIN9) | \
- PIN_ODR_HIGH(GPIOA_PIN10) | \
- PIN_ODR_HIGH(GPIOA_USB_DM) | \
- PIN_ODR_HIGH(GPIOA_USB_DP) | \
- PIN_ODR_HIGH(GPIOA_SWDIO) | \
- PIN_ODR_HIGH(GPIOA_SWCLK) | \
- PIN_ODR_HIGH(GPIOA_PIN15))
-#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0) | \
- PIN_AFIO_AF(GPIOA_PIN1, 0) | \
- PIN_AFIO_AF(GPIOA_PIN2, 0) | \
- PIN_AFIO_AF(GPIOA_PIN3, 0) | \
- PIN_AFIO_AF(GPIOA_PIN4, 0) | \
- PIN_AFIO_AF(GPIOA_PIN5, 5) | \
- PIN_AFIO_AF(GPIOA_PIN6, 5) | \
- PIN_AFIO_AF(GPIOA_PIN7, 5))
-#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
- PIN_AFIO_AF(GPIOA_PIN9, 0) | \
- PIN_AFIO_AF(GPIOA_PIN10, 0) | \
- PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
- PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
- PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
- PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
- PIN_AFIO_AF(GPIOA_PIN15, 0))
-
-/*
- * GPIOB setup:
- *
- * PB0 - PIN0 (input pullup).
- * PB1 - PIN1 (input pullup).
- * PB2 - PIN2 (input pullup).
- * PB3 - PIN3 (alternate 0).
- * PB4 - PIN4 (input pullup).
- * PB5 - PIN5 (input pullup).
- * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
- * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
- * PB8 - PIN8 (input pullup).
- * PB9 - PIN9 (input pullup).
- * PB10 - PIN10 (input pullup).
- * PB11 - PIN11 (input pullup).
- * PB12 - PIN12 (input pullup).
- * PB13 - PIN13 (input pullup).
- * PB14 - PIN14 (input pullup).
- * PB15 - PIN15 (input pullup).
- */
-#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
- PIN_MODE_INPUT(GPIOB_PIN1) | \
- PIN_MODE_INPUT(GPIOB_PIN2) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
- PIN_MODE_INPUT(GPIOB_PIN4) | \
- PIN_MODE_INPUT(GPIOB_PIN5) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
- PIN_MODE_OUTPUT(GPIOB_PIN7) | \
- PIN_MODE_INPUT(GPIOB_PIN8) | \
- PIN_MODE_INPUT(GPIOB_PIN9) | \
- PIN_MODE_INPUT(GPIOB_PIN10) | \
- PIN_MODE_INPUT(GPIOB_PIN11) | \
- PIN_MODE_INPUT(GPIOB_PIN12) | \
- PIN_MODE_INPUT(GPIOB_PIN13) | \
- PIN_MODE_INPUT(GPIOB_PIN14) | \
- PIN_MODE_INPUT(GPIOB_PIN15))
-#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
- PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
-#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN2) | \
- PIN_OSPEED_HIGH(GPIOB_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
- PIN_OSPEED_HIGH(GPIOB_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN15))
-#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
- PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN15))
-#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
- PIN_ODR_HIGH(GPIOB_PIN1) | \
- PIN_ODR_HIGH(GPIOB_PIN2) | \
- PIN_ODR_HIGH(GPIOB_PIN3) | \
- PIN_ODR_HIGH(GPIOB_PIN4) | \
- PIN_ODR_HIGH(GPIOB_PIN5) | \
- PIN_ODR_HIGH(GPIOB_PIN6) | \
- PIN_ODR_LOW(GPIOB_PIN7) | \
- PIN_ODR_HIGH(GPIOB_PIN8) | \
- PIN_ODR_HIGH(GPIOB_PIN9) | \
- PIN_ODR_HIGH(GPIOB_PIN10) | \
- PIN_ODR_HIGH(GPIOB_PIN11) | \
- PIN_ODR_HIGH(GPIOB_PIN12) | \
- PIN_ODR_HIGH(GPIOB_PIN13) | \
- PIN_ODR_HIGH(GPIOB_PIN14) | \
- PIN_ODR_HIGH(GPIOB_PIN15))
-#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0) | \
- PIN_AFIO_AF(GPIOB_PIN1, 0) | \
- PIN_AFIO_AF(GPIOB_PIN2, 0) | \
- PIN_AFIO_AF(GPIOB_PIN3, 0) | \
- PIN_AFIO_AF(GPIOB_PIN4, 0) | \
- PIN_AFIO_AF(GPIOB_PIN5, 0) | \
- PIN_AFIO_AF(GPIOB_PIN6, 4) | \
- PIN_AFIO_AF(GPIOB_PIN7, 0))
-#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
- PIN_AFIO_AF(GPIOB_PIN9, 0) | \
- PIN_AFIO_AF(GPIOB_PIN10, 0) | \
- PIN_AFIO_AF(GPIOB_PIN11, 0) | \
- PIN_AFIO_AF(GPIOB_PIN12, 0) | \
- PIN_AFIO_AF(GPIOB_PIN13, 0) | \
- PIN_AFIO_AF(GPIOB_PIN14, 0) | \
- PIN_AFIO_AF(GPIOB_PIN15, 0))
-
-/*
- * GPIOC setup:
- *
- * PC0 - PIN0 (input pullup).
- * PC1 - PIN1 (input pullup).
- * PC2 - PIN2 (input pullup).
- * PC3 - PIN3 (input pullup).
- * PC4 - PIN4 (input pullup).
- * PC5 - PIN5 (input pullup).
- * PC6 - PIN6 (input pullup).
- * PC7 - PIN7 (input pullup).
- * PC8 - PIN8 (input pullup).
- * PC9 - PIN9 (input pullup).
- * PC10 - PIN10 (input pullup).
- * PC11 - PIN11 (input pullup).
- * PC12 - PIN12 (input pullup).
- * PC13 - PIN13 (input pullup).
- * PC14 - PIN14 (input floating).
- * PC15 - PIN15 (input floating).
- */
-#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
- PIN_MODE_INPUT(GPIOC_PIN1) | \
- PIN_MODE_INPUT(GPIOC_PIN2) | \
- PIN_MODE_INPUT(GPIOC_PIN3) | \
- PIN_MODE_INPUT(GPIOC_PIN4) | \
- PIN_MODE_INPUT(GPIOC_PIN5) | \
- PIN_MODE_INPUT(GPIOC_PIN6) | \
- PIN_MODE_INPUT(GPIOC_PIN7) | \
- PIN_MODE_INPUT(GPIOC_PIN8) | \
- PIN_MODE_INPUT(GPIOC_PIN9) | \
- PIN_MODE_INPUT(GPIOC_PIN10) | \
- PIN_MODE_INPUT(GPIOC_PIN11) | \
- PIN_MODE_INPUT(GPIOC_PIN12) | \
- PIN_MODE_INPUT(GPIOC_PIN13) | \
- PIN_MODE_INPUT(GPIOC_PIN14) | \
- PIN_MODE_INPUT(GPIOC_PIN15))
-#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
-#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
- PIN_OSPEED_HIGH(GPIOC_PIN14) | \
- PIN_OSPEED_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN15))
-#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
- PIN_ODR_HIGH(GPIOC_PIN1) | \
- PIN_ODR_HIGH(GPIOC_PIN2) | \
- PIN_ODR_HIGH(GPIOC_PIN3) | \
- PIN_ODR_HIGH(GPIOC_PIN4) | \
- PIN_ODR_HIGH(GPIOC_PIN5) | \
- PIN_ODR_HIGH(GPIOC_PIN6) | \
- PIN_ODR_HIGH(GPIOC_PIN7) | \
- PIN_ODR_HIGH(GPIOC_PIN8) | \
- PIN_ODR_HIGH(GPIOC_PIN9) | \
- PIN_ODR_HIGH(GPIOC_PIN10) | \
- PIN_ODR_HIGH(GPIOC_PIN11) | \
- PIN_ODR_HIGH(GPIOC_PIN12) | \
- PIN_ODR_HIGH(GPIOC_PIN13) | \
- PIN_ODR_HIGH(GPIOC_PIN14) | \
- PIN_ODR_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
- PIN_AFIO_AF(GPIOC_PIN1, 0) | \
- PIN_AFIO_AF(GPIOC_PIN2, 0) | \
- PIN_AFIO_AF(GPIOC_PIN3, 0) | \
- PIN_AFIO_AF(GPIOC_PIN4, 0) | \
- PIN_AFIO_AF(GPIOC_PIN5, 0) | \
- PIN_AFIO_AF(GPIOC_PIN6, 0) | \
- PIN_AFIO_AF(GPIOC_PIN7, 0))
-#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
- PIN_AFIO_AF(GPIOC_PIN9, 0) | \
- PIN_AFIO_AF(GPIOC_PIN10, 0) | \
- PIN_AFIO_AF(GPIOC_PIN11, 0) | \
- PIN_AFIO_AF(GPIOC_PIN12, 0) | \
- PIN_AFIO_AF(GPIOC_PIN13, 0) | \
- PIN_AFIO_AF(GPIOC_PIN14, 0) | \
- PIN_AFIO_AF(GPIOC_PIN15, 0))
-
-/*
- * GPIOD setup:
- *
- * PD0 - PIN0 (input pullup).
- * PD1 - PIN1 (input pullup).
- * PD2 - PIN2 (input pullup).
- * PD3 - PIN3 (input pullup).
- * PD4 - PIN4 (input pullup).
- * PD5 - PIN5 (input pullup).
- * PD6 - PIN6 (input pullup).
- * PD7 - PIN7 (input pullup).
- * PD8 - PIN8 (input pullup).
- * PD9 - PIN9 (input pullup).
- * PD11 - PIN10 (input pullup).
- * PD11 - PIN11 (input pullup).
- * PD12 - PIN12 (input pullup).
- * PD13 - PIN13 (input pullup).
- * PD14 - PIN14 (input pullup).
- * PD15 - PIN15 (input pullup).
- */
-#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
- PIN_MODE_INPUT(GPIOD_PIN1) | \
- PIN_MODE_INPUT(GPIOD_PIN2) | \
- PIN_MODE_INPUT(GPIOD_PIN3) | \
- PIN_MODE_INPUT(GPIOD_PIN4) | \
- PIN_MODE_INPUT(GPIOD_PIN5) | \
- PIN_MODE_INPUT(GPIOD_PIN6) | \
- PIN_MODE_INPUT(GPIOD_PIN7) | \
- PIN_MODE_INPUT(GPIOD_PIN8) | \
- PIN_MODE_INPUT(GPIOD_PIN9) | \
- PIN_MODE_INPUT(GPIOD_PIN10) | \
- PIN_MODE_INPUT(GPIOD_PIN11) | \
- PIN_MODE_INPUT(GPIOD_PIN12) | \
- PIN_MODE_INPUT(GPIOD_PIN13) | \
- PIN_MODE_INPUT(GPIOD_PIN14) | \
- PIN_MODE_INPUT(GPIOD_PIN15))
-#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
-#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN15))
-#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN15))
-#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
- PIN_ODR_HIGH(GPIOD_PIN1) | \
- PIN_ODR_HIGH(GPIOD_PIN2) | \
- PIN_ODR_HIGH(GPIOD_PIN3) | \
- PIN_ODR_HIGH(GPIOD_PIN4) | \
- PIN_ODR_HIGH(GPIOD_PIN5) | \
- PIN_ODR_HIGH(GPIOD_PIN6) | \
- PIN_ODR_HIGH(GPIOD_PIN7) | \
- PIN_ODR_HIGH(GPIOD_PIN8) | \
- PIN_ODR_HIGH(GPIOD_PIN9) | \
- PIN_ODR_HIGH(GPIOD_PIN10) | \
- PIN_ODR_HIGH(GPIOD_PIN11) | \
- PIN_ODR_HIGH(GPIOD_PIN12) | \
- PIN_ODR_HIGH(GPIOD_PIN13) | \
- PIN_ODR_HIGH(GPIOD_PIN14) | \
- PIN_ODR_HIGH(GPIOD_PIN15))
-#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
- PIN_AFIO_AF(GPIOD_PIN1, 0) | \
- PIN_AFIO_AF(GPIOD_PIN2, 0) | \
- PIN_AFIO_AF(GPIOD_PIN3, 0) | \
- PIN_AFIO_AF(GPIOD_PIN4, 0) | \
- PIN_AFIO_AF(GPIOD_PIN5, 0) | \
- PIN_AFIO_AF(GPIOD_PIN6, 0) | \
- PIN_AFIO_AF(GPIOD_PIN7, 0))
-#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
- PIN_AFIO_AF(GPIOD_PIN9, 0) | \
- PIN_AFIO_AF(GPIOD_PIN10, 0) | \
- PIN_AFIO_AF(GPIOD_PIN11, 0) | \
- PIN_AFIO_AF(GPIOD_PIN12, 0) | \
- PIN_AFIO_AF(GPIOD_PIN13, 0) | \
- PIN_AFIO_AF(GPIOD_PIN14, 0) | \
- PIN_AFIO_AF(GPIOD_PIN15, 0))
-
-/*
- * GPIOE setup:
- *
- * PE0 - PIN0 (input pullup).
- * PE1 - PIN1 (input pullup).
- * PE2 - PIN2 (input pullup).
- * PE3 - PIN3 L3GD20_CS (output pushpull maximum).
- * PE4 - PIN4 (input pullup).
- * PE5 - PIN5 (input pullup).
- * PE6 - PIN6 (input pullup).
- * PE7 - PIN7 (input pullup).
- * PE8 - PIN8 (output pushpull maximum).
- * PE9 - PIN9 (output pushpull maximum).
- * PE10 - PIN10 (output pushpull maximum).
- * PE11 - PIN11 (output pushpull maximum).
- * PE12 - PIN12 (output pushpull maximum).
- * PE13 - PIN13 (output pushpull maximum).
- * PE14 - PIN14 (output pushpull maximum).
- * PE15 - PIN15 (output pushpull maximum).
- */
-#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
- PIN_MODE_INPUT(GPIOE_PIN1) | \
- PIN_MODE_INPUT(GPIOE_PIN2) |\
- PIN_MODE_OUTPUT(GPIOE_PIN3) | \
- PIN_MODE_INPUT(GPIOE_PIN4) |\
- PIN_MODE_INPUT(GPIOE_PIN5) |\
- PIN_MODE_INPUT(GPIOE_PIN6) | \
- PIN_MODE_INPUT(GPIOE_PIN7) | \
- PIN_MODE_OUTPUT(GPIOE_PIN8) | \
- PIN_MODE_OUTPUT(GPIOE_PIN9) | \
- PIN_MODE_OUTPUT(GPIOE_PIN10) | \
- PIN_MODE_OUTPUT(GPIOE_PIN11) | \
- PIN_MODE_OUTPUT(GPIOE_PIN12) | \
- PIN_MODE_OUTPUT(GPIOE_PIN13) | \
- PIN_MODE_OUTPUT(GPIOE_PIN14) | \
- PIN_MODE_OUTPUT(GPIOE_PIN15))
-#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
-#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
- PIN_OSPEED_HIGH(GPIOE_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
- PIN_OSPEED_HIGH(GPIOE_PIN8) | \
- PIN_OSPEED_HIGH(GPIOE_PIN9) | \
- PIN_OSPEED_HIGH(GPIOE_PIN10) | \
- PIN_OSPEED_HIGH(GPIOE_PIN11) | \
- PIN_OSPEED_HIGH(GPIOE_PIN12) | \
- PIN_OSPEED_HIGH(GPIOE_PIN13) | \
- PIN_OSPEED_HIGH(GPIOE_PIN14) | \
- PIN_OSPEED_HIGH(GPIOE_PIN15))
-#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN2) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN15))
-#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
- PIN_ODR_HIGH(GPIOE_PIN1) | \
- PIN_ODR_HIGH(GPIOE_PIN2) | \
- PIN_ODR_HIGH(GPIOE_PIN3) | \
- PIN_ODR_HIGH(GPIOE_PIN4) | \
- PIN_ODR_HIGH(GPIOE_PIN5) | \
- PIN_ODR_HIGH(GPIOE_PIN6) | \
- PIN_ODR_HIGH(GPIOE_PIN7) | \
- PIN_ODR_LOW(GPIOE_PIN8) | \
- PIN_ODR_LOW(GPIOE_PIN9) | \
- PIN_ODR_LOW(GPIOE_PIN10) | \
- PIN_ODR_LOW(GPIOE_PIN11) | \
- PIN_ODR_LOW(GPIOE_PIN12) | \
- PIN_ODR_LOW(GPIOE_PIN13) | \
- PIN_ODR_LOW(GPIOE_PIN14) | \
- PIN_ODR_LOW(GPIOE_PIN15))
-#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
- PIN_AFIO_AF(GPIOE_PIN1, 0) | \
- PIN_AFIO_AF(GPIOE_PIN2, 0) |\
- PIN_AFIO_AF(GPIOE_PIN3, 0) | \
- PIN_AFIO_AF(GPIOE_PIN4, 0) |\
- PIN_AFIO_AF(GPIOE_PIN5, 0) |\
- PIN_AFIO_AF(GPIOE_PIN6, 0) | \
- PIN_AFIO_AF(GPIOE_PIN7, 0))
-#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
- PIN_AFIO_AF(GPIOE_PIN9, 0) | \
- PIN_AFIO_AF(GPIOE_PIN10, 0) | \
- PIN_AFIO_AF(GPIOE_PIN11, 0) | \
- PIN_AFIO_AF(GPIOE_PIN12, 0) | \
- PIN_AFIO_AF(GPIOE_PIN13, 0) | \
- PIN_AFIO_AF(GPIOE_PIN14, 0) | \
- PIN_AFIO_AF(GPIOE_PIN15, 0))
-
-/*
- * GPIOF setup:
- *
- * PF0 - I2C2_SDA (input floating).
- * PF1 - I2C2_SCL (input floating).
- * PF2 - PIN2 (input pullup).
- * PF3 - PIN3 (input pullup).
- * PF4 - PIN4 (input pullup).
- * PF5 - PIN5 (input pullup).
- * PF6 - PIN6 (input pullup).
- * PF7 - PIN7 (input pullup).
- * PF8 - PIN8 (input pullup).
- * PF9 - PIN9 (input pullup).
- * PF10 - PIN10 (input pullup).
- * PF11 - PIN11 (input pullup).
- * PF12 - PIN12 (input pullup).
- * PF13 - PIN13 (input pullup).
- * PF14 - PIN14 (input pullup).
- * PF15 - PIN15 (input pullup).
- */
-#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
- PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
- PIN_MODE_INPUT(GPIOF_PIN2) | \
- PIN_MODE_INPUT(GPIOF_PIN3) | \
- PIN_MODE_INPUT(GPIOF_PIN4) | \
- PIN_MODE_INPUT(GPIOF_PIN5) | \
- PIN_MODE_INPUT(GPIOF_PIN6) | \
- PIN_MODE_INPUT(GPIOF_PIN7) | \
- PIN_MODE_INPUT(GPIOF_PIN8) | \
- PIN_MODE_INPUT(GPIOF_PIN9) | \
- PIN_MODE_INPUT(GPIOF_PIN10) | \
- PIN_MODE_INPUT(GPIOF_PIN11) | \
- PIN_MODE_INPUT(GPIOF_PIN12) | \
- PIN_MODE_INPUT(GPIOF_PIN13) | \
- PIN_MODE_INPUT(GPIOF_PIN14) | \
- PIN_MODE_INPUT(GPIOF_PIN15))
-#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
- PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
-#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
- PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN15))
-#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
- PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN15))
-#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
- PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
- PIN_ODR_HIGH(GPIOF_PIN2) | \
- PIN_ODR_HIGH(GPIOF_PIN3) | \
- PIN_ODR_HIGH(GPIOF_PIN4) | \
- PIN_ODR_HIGH(GPIOF_PIN5) | \
- PIN_ODR_HIGH(GPIOF_PIN6) | \
- PIN_ODR_HIGH(GPIOF_PIN7) | \
- PIN_ODR_HIGH(GPIOF_PIN8) | \
- PIN_ODR_HIGH(GPIOF_PIN9) | \
- PIN_ODR_HIGH(GPIOF_PIN10) | \
- PIN_ODR_HIGH(GPIOF_PIN11) | \
- PIN_ODR_HIGH(GPIOF_PIN12) | \
- PIN_ODR_HIGH(GPIOF_PIN13) | \
- PIN_ODR_HIGH(GPIOF_PIN14) | \
- PIN_ODR_HIGH(GPIOF_PIN15))
-#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
- PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
- PIN_AFIO_AF(GPIOF_PIN2, 0) | \
- PIN_AFIO_AF(GPIOF_PIN3, 0) | \
- PIN_AFIO_AF(GPIOF_PIN4, 0) | \
- PIN_AFIO_AF(GPIOF_PIN5, 0) | \
- PIN_AFIO_AF(GPIOF_PIN6, 0) | \
- PIN_AFIO_AF(GPIOF_PIN7, 0))
-#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
- PIN_AFIO_AF(GPIOF_PIN9, 0) | \
- PIN_AFIO_AF(GPIOF_PIN10, 0) | \
- PIN_AFIO_AF(GPIOF_PIN11, 0) | \
- PIN_AFIO_AF(GPIOF_PIN12, 0) | \
- PIN_AFIO_AF(GPIOF_PIN13, 0) | \
- PIN_AFIO_AF(GPIOF_PIN14, 0) | \
- PIN_AFIO_AF(GPIOF_PIN15, 0))
-
-/*
- * GPIOG setup:
- *
- * PG0 - PIN0 (input pullup).
- * PG1 - PIN1 (input pullup).
- * PG2 - PIN2 (input pullup).
- * PG3 - PIN3 (input pullup).
- * PG4 - PIN4 (input pullup).
- * PG5 - PIN5 (input pullup).
- * PG6 - PIN6 (input pullup).
- * PG7 - PIN7 (input pullup).
- * PG8 - PIN8 (input pullup).
- * PG9 - PIN9 (input pullup).
- * PG10 - PIN10 (input pullup).
- * PG11 - PIN11 (input pullup).
- * PG12 - PIN12 (input pullup).
- * PG13 - PIN13 (input pullup).
- * PG14 - PIN14 (input pullup).
- * PG15 - PIN15 (input pullup).
- */
-#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \
- PIN_MODE_INPUT(GPIOG_PIN1) | \
- PIN_MODE_INPUT(GPIOG_PIN2) | \
- PIN_MODE_INPUT(GPIOG_PIN3) | \
- PIN_MODE_INPUT(GPIOG_PIN4) | \
- PIN_MODE_INPUT(GPIOG_PIN5) | \
- PIN_MODE_INPUT(GPIOG_PIN6) | \
- PIN_MODE_INPUT(GPIOG_PIN7) | \
- PIN_MODE_INPUT(GPIOG_PIN8) | \
- PIN_MODE_INPUT(GPIOG_PIN9) | \
- PIN_MODE_INPUT(GPIOG_PIN10) | \
- PIN_MODE_INPUT(GPIOG_PIN11) | \
- PIN_MODE_INPUT(GPIOG_PIN12) | \
- PIN_MODE_INPUT(GPIOG_PIN13) | \
- PIN_MODE_INPUT(GPIOG_PIN14) | \
- PIN_MODE_INPUT(GPIOG_PIN15))
-#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
-#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN15))
-#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLUP(GPIOG_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN15))
-#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \
- PIN_ODR_HIGH(GPIOG_PIN1) | \
- PIN_ODR_HIGH(GPIOG_PIN2) | \
- PIN_ODR_HIGH(GPIOG_PIN3) | \
- PIN_ODR_HIGH(GPIOG_PIN4) | \
- PIN_ODR_HIGH(GPIOG_PIN5) | \
- PIN_ODR_HIGH(GPIOG_PIN6) | \
- PIN_ODR_HIGH(GPIOG_PIN7) | \
- PIN_ODR_HIGH(GPIOG_PIN8) | \
- PIN_ODR_HIGH(GPIOG_PIN9) | \
- PIN_ODR_HIGH(GPIOG_PIN10) | \
- PIN_ODR_HIGH(GPIOG_PIN11) | \
- PIN_ODR_HIGH(GPIOG_PIN12) | \
- PIN_ODR_HIGH(GPIOG_PIN13) | \
- PIN_ODR_HIGH(GPIOG_PIN14) | \
- PIN_ODR_HIGH(GPIOG_PIN15))
-#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
- PIN_AFIO_AF(GPIOG_PIN1, 0) | \
- PIN_AFIO_AF(GPIOG_PIN2, 0) | \
- PIN_AFIO_AF(GPIOG_PIN3, 0) | \
- PIN_AFIO_AF(GPIOG_PIN4, 0) | \
- PIN_AFIO_AF(GPIOG_PIN5, 0) | \
- PIN_AFIO_AF(GPIOG_PIN6, 0) | \
- PIN_AFIO_AF(GPIOG_PIN7, 0))
-#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
- PIN_AFIO_AF(GPIOG_PIN9, 0) | \
- PIN_AFIO_AF(GPIOG_PIN10, 0) | \
- PIN_AFIO_AF(GPIOG_PIN11, 0) | \
- PIN_AFIO_AF(GPIOG_PIN12, 0) | \
- PIN_AFIO_AF(GPIOG_PIN13, 0) | \
- PIN_AFIO_AF(GPIOG_PIN14, 0) | \
- PIN_AFIO_AF(GPIOG_PIN15, 0))
-
-/*
- * GPIOH setup:
- *
- * PH0 - PIN0 (input pullup).
- * PH1 - PIN1 (input pullup).
- * PH2 - PIN2 (input pullup).
- * PH3 - PIN3 (input pullup).
- * PH4 - PIN4 (input pullup).
- * PH5 - PIN5 (input pullup).
- * PH6 - PIN6 (input pullup).
- * PH7 - PIN7 (input pullup).
- * PH8 - PIN8 (input pullup).
- * PH9 - PIN9 (input pullup).
- * PH10 - PIN10 (input pullup).
- * PH11 - PIN11 (input pullup).
- * PH12 - PIN12 (input pullup).
- * PH13 - PIN13 (input pullup).
- * PH14 - PIN14 (input pullup).
- * PH15 - PIN15 (input pullup).
- */
-#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
- PIN_MODE_INPUT(GPIOH_PIN1) | \
- PIN_MODE_INPUT(GPIOH_PIN2) | \
- PIN_MODE_INPUT(GPIOH_PIN3) | \
- PIN_MODE_INPUT(GPIOH_PIN4) | \
- PIN_MODE_INPUT(GPIOH_PIN5) | \
- PIN_MODE_INPUT(GPIOH_PIN6) | \
- PIN_MODE_INPUT(GPIOH_PIN7) | \
- PIN_MODE_INPUT(GPIOH_PIN8) | \
- PIN_MODE_INPUT(GPIOH_PIN9) | \
- PIN_MODE_INPUT(GPIOH_PIN10) | \
- PIN_MODE_INPUT(GPIOH_PIN11) | \
- PIN_MODE_INPUT(GPIOH_PIN12) | \
- PIN_MODE_INPUT(GPIOH_PIN13) | \
- PIN_MODE_INPUT(GPIOH_PIN14) | \
- PIN_MODE_INPUT(GPIOH_PIN15))
-#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
-#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN15))
-#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN15))
-#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
- PIN_ODR_HIGH(GPIOH_PIN1) | \
- PIN_ODR_HIGH(GPIOH_PIN2) | \
- PIN_ODR_HIGH(GPIOH_PIN3) | \
- PIN_ODR_HIGH(GPIOH_PIN4) | \
- PIN_ODR_HIGH(GPIOH_PIN5) | \
- PIN_ODR_HIGH(GPIOH_PIN6) | \
- PIN_ODR_HIGH(GPIOH_PIN7) | \
- PIN_ODR_HIGH(GPIOH_PIN8) | \
- PIN_ODR_HIGH(GPIOH_PIN9) | \
- PIN_ODR_HIGH(GPIOH_PIN10) | \
- PIN_ODR_HIGH(GPIOH_PIN11) | \
- PIN_ODR_HIGH(GPIOH_PIN12) | \
- PIN_ODR_HIGH(GPIOH_PIN13) | \
- PIN_ODR_HIGH(GPIOH_PIN14) | \
- PIN_ODR_HIGH(GPIOH_PIN15))
-#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
- PIN_AFIO_AF(GPIOH_PIN1, 0) | \
- PIN_AFIO_AF(GPIOH_PIN2, 0) | \
- PIN_AFIO_AF(GPIOH_PIN3, 0) | \
- PIN_AFIO_AF(GPIOH_PIN4, 0) | \
- PIN_AFIO_AF(GPIOH_PIN5, 0) | \
- PIN_AFIO_AF(GPIOH_PIN6, 0) | \
- PIN_AFIO_AF(GPIOH_PIN7, 0))
-#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
- PIN_AFIO_AF(GPIOH_PIN9, 0) | \
- PIN_AFIO_AF(GPIOH_PIN10, 0) | \
- PIN_AFIO_AF(GPIOH_PIN11, 0) | \
- PIN_AFIO_AF(GPIOH_PIN12, 0) | \
- PIN_AFIO_AF(GPIOH_PIN13, 0) | \
- PIN_AFIO_AF(GPIOH_PIN14, 0) | \
- PIN_AFIO_AF(GPIOH_PIN15, 0))
-
-
-/*
- * USB bus activation macro, required by the USB driver.
- */
-// #define usb_lld_connect_bus(usbp)
-#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
-// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
-/*
- * USB bus de-activation macro, required by the USB driver.
- */
-// #define usb_lld_disconnect_bus(usbp)
-#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL)); palClearPad(GPIOA, GPIOA_USB_DP)
-// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
-
-#if !defined(_FROM_ASM_)
-#ifdef __cplusplus
-extern "C" {
-#endif
- void boardInit(void);
-#ifdef __cplusplus
-}
-#endif
-#endif /* _FROM_ASM_ */
-
-#endif /* _BOARD_H_ */
diff --git a/keyboards/clueboard/60/config.h b/keyboards/clueboard/60/config.h
index a862d2cda3..c7dbf8ad00 100644
--- a/keyboards/clueboard/60/config.h
+++ b/keyboards/clueboard/60/config.h
@@ -15,8 +15,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
+
+#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
@@ -26,6 +27,12 @@
#define PRODUCT Clueboard 60%
#define DESCRIPTION Clueboard 60%
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
+
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
@@ -33,18 +40,16 @@
/*
* Keyboard Matrix Assignments
*
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
+ * COLS: Pins used for columns, left to right
+ * ROWS: Pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
-/* Note: These are not used for arm boards. They're here purely as documentation.
- * #define MATRIX_ROW_PINS { PB0, PB1, PB2, PA15, PA10 }
- * #define MATRIX_COL_PINS { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC14, PC15, PC13, PB5, PB6 }
- * #define UNUSED_PINS
- */
+#define MATRIX_ROW_PINS { B0, B1, B2, A15, A10 }
+#define MATRIX_COL_PINS { A2, A3, A6, B14, B15, A8, A9, A7, B3, B4, C14, C15, C13, B5, B6 }
+#define UNUSED_PINS { A0, A1, A9, B7, B8, B9, B10, B11, B12, B13 }
+#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 6
@@ -121,8 +126,6 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
-#endif
-
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1
diff --git a/keyboards/clueboard/60/info.json b/keyboards/clueboard/60/info.json
index abafb69f99..aed18b6f05 100644
--- a/keyboards/clueboard/60/info.json
+++ b/keyboards/clueboard/60/info.json
@@ -8,1642 +8,51 @@
"LAYOUT_60_ansi": {
"key_count": 61,
"layout": [
- {
- "label": "~",
- "x": 0,
- "y": 0
- },
- {
- "label": "!",
- "x": 1,
- "y": 0
- },
- {
- "label": "@",
- "x": 2,
- "y": 0
- },
- {
- "label": "#",
- "x": 3,
- "y": 0
- },
- {
- "label": "$",
- "x": 4,
- "y": 0
- },
- {
- "label": "%",
- "x": 5,
- "y": 0
- },
- {
- "label": "^",
- "x": 6,
- "y": 0
- },
- {
- "label": "&",
- "x": 7,
- "y": 0
- },
- {
- "label": "*",
- "x": 8,
- "y": 0
- },
- {
- "label": "(",
- "x": 9,
- "y": 0
- },
- {
- "label": ")",
- "x": 10,
- "y": 0
- },
- {
- "label": "_",
- "x": 11,
- "y": 0
- },
- {
- "label": "+",
- "x": 12,
- "y": 0
- },
- {
- "label": "Backspace",
- "x": 13,
- "y": 0,
- "w": 2
- },
- {
- "label": "Tab",
- "x": 0,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Q",
- "x": 1.5,
- "y": 1
- },
- {
- "label": "W",
- "x": 2.5,
- "y": 1
- },
- {
- "label": "E",
- "x": 3.5,
- "y": 1
- },
- {
- "label": "R",
- "x": 4.5,
- "y": 1
- },
- {
- "label": "T",
- "x": 5.5,
- "y": 1
- },
- {
- "label": "Y",
- "x": 6.5,
- "y": 1
- },
- {
- "label": "U",
- "x": 7.5,
- "y": 1
- },
- {
- "label": "I",
- "x": 8.5,
- "y": 1
- },
- {
- "label": "O",
- "x": 9.5,
- "y": 1
- },
- {
- "label": "P",
- "x": 10.5,
- "y": 1
- },
- {
- "label": "{",
- "x": 11.5,
- "y": 1
- },
- {
- "label": "}",
- "x": 12.5,
- "y": 1
- },
- {
- "label": "|",
- "x": 13.5,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Caps Lock",
- "x": 0,
- "y": 2,
- "w": 1.75
- },
- {
- "label": "A",
- "x": 1.75,
- "y": 2
- },
- {
- "label": "S",
- "x": 2.75,
- "y": 2
- },
- {
- "label": "D",
- "x": 3.75,
- "y": 2
- },
- {
- "label": "F",
- "x": 4.75,
- "y": 2
- },
- {
- "label": "G",
- "x": 5.75,
- "y": 2
- },
- {
- "label": "H",
- "x": 6.75,
- "y": 2
- },
- {
- "label": "J",
- "x": 7.75,
- "y": 2
- },
- {
- "label": "K",
- "x": 8.75,
- "y": 2
- },
- {
- "label": "L",
- "x": 9.75,
- "y": 2
- },
- {
- "label": ":",
- "x": 10.75,
- "y": 2
- },
- {
- "label": "\"",
- "x": 11.75,
- "y": 2
- },
- {
- "label": "Enter",
- "x": 12.75,
- "y": 2,
- "w": 2.25
- },
- {
- "label": "Shift",
- "x": 0,
- "y": 3,
- "w": 2.25
- },
- {
- "label": "Z",
- "x": 2.25,
- "y": 3
- },
- {
- "label": "X",
- "x": 3.25,
- "y": 3
- },
- {
- "label": "C",
- "x": 4.25,
- "y": 3
- },
- {
- "label": "V",
- "x": 5.25,
- "y": 3
- },
- {
- "label": "B",
- "x": 6.25,
- "y": 3
- },
- {
- "label": "N",
- "x": 7.25,
- "y": 3
- },
- {
- "label": "M",
- "x": 8.25,
- "y": 3
- },
- {
- "label": "<",
- "x": 9.25,
- "y": 3
- },
- {
- "label": ">",
- "x": 10.25,
- "y": 3
- },
- {
- "label": "?",
- "x": 11.25,
- "y": 3
- },
- {
- "label": "Shift",
- "x": 12.25,
- "y": 3,
- "w": 2.75
- },
- {
- "label": "Ctrl",
- "x": 0,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 1.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Alt",
- "x": 2.5,
- "y": 4,
- "w": 1.25
- },
- {
- "x": 3.75,
- "y": 4,
- "w": 6.25
- },
- {
- "label": "Alt",
- "x": 10,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 11.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Menu",
- "x": 12.5,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Ctrl",
- "x": 13.75,
- "y": 4,
- "w": 1.25
- }
+ {"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"label": "Backspace", "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "\"", "x": 11.75, "y": 2}, {"label": "Enter", "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "x": 0, "y": 3, "w": 2.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "x": 0, "y": 4, "w": 1.25}, {"label": "Win", "x": 1.25, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.5, "y": 4, "w": 1.25}, {"x": 3.75, "y": 4, "w": 6.25}, {"label": "Alt", "x": 10, "y": 4, "w": 1.25}, {"label": "Win", "x": 11.25, "y": 4, "w": 1.25}, {"label": "Menu", "x": 12.5, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.75, "y": 4, "w": 1.25 }
]
- },
+ },
"LAYOUT_60_iso": {
"key_count": 62,
"layout": [
- {
- "label": "\\u00ac",
- "x": 0,
- "y": 0
- },
- {
- "label": "!",
- "x": 1,
- "y": 0
- },
- {
- "label": "\"",
- "x": 2,
- "y": 0
- },
- {
- "label": "\\u00a3",
- "x": 3,
- "y": 0
- },
- {
- "label": "$",
- "x": 4,
- "y": 0
- },
- {
- "label": "%",
- "x": 5,
- "y": 0
- },
- {
- "label": "^",
- "x": 6,
- "y": 0
- },
- {
- "label": "&",
- "x": 7,
- "y": 0
- },
- {
- "label": "*",
- "x": 8,
- "y": 0
- },
- {
- "label": "(",
- "x": 9,
- "y": 0
- },
- {
- "label": ")",
- "x": 10,
- "y": 0
- },
- {
- "label": "_",
- "x": 11,
- "y": 0
- },
- {
- "label": "+",
- "x": 12,
- "y": 0
- },
- {
- "label": "Backspace",
- "x": 13,
- "y": 0,
- "w": 2
- },
- {
- "label": "Tab",
- "x": 0,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Q",
- "x": 1.5,
- "y": 1
- },
- {
- "label": "W",
- "x": 2.5,
- "y": 1
- },
- {
- "label": "E",
- "x": 3.5,
- "y": 1
- },
- {
- "label": "R",
- "x": 4.5,
- "y": 1
- },
- {
- "label": "T",
- "x": 5.5,
- "y": 1
- },
- {
- "label": "Y",
- "x": 6.5,
- "y": 1
- },
- {
- "label": "U",
- "x": 7.5,
- "y": 1
- },
- {
- "label": "I",
- "x": 8.5,
- "y": 1
- },
- {
- "label": "O",
- "x": 9.5,
- "y": 1
- },
- {
- "label": "P",
- "x": 10.5,
- "y": 1
- },
- {
- "label": "{",
- "x": 11.5,
- "y": 1
- },
- {
- "label": "}",
- "x": 12.5,
- "y": 1
- },
- {
- "label": "Enter",
- "x": 13.75,
- "y": 1,
- "w": 1.25,
- "h": 2
- },
- {
- "label": "Caps Lock",
- "x": 0,
- "y": 2,
- "w": 1.75
- },
- {
- "label": "A",
- "x": 1.75,
- "y": 2
- },
- {
- "label": "S",
- "x": 2.75,
- "y": 2
- },
- {
- "label": "D",
- "x": 3.75,
- "y": 2
- },
- {
- "label": "F",
- "x": 4.75,
- "y": 2
- },
- {
- "label": "G",
- "x": 5.75,
- "y": 2
- },
- {
- "label": "H",
- "x": 6.75,
- "y": 2
- },
- {
- "label": "J",
- "x": 7.75,
- "y": 2
- },
- {
- "label": "K",
- "x": 8.75,
- "y": 2
- },
- {
- "label": "L",
- "x": 9.75,
- "y": 2
- },
- {
- "label": ":",
- "x": 10.75,
- "y": 2
- },
- {
- "label": "@",
- "x": 11.75,
- "y": 2
- },
- {
- "label": "~",
- "x": 12.75,
- "y": 2
- },
- {
- "label": "Shift",
- "x": 0,
- "y": 3,
- "w": 1.25
- },
- {
- "label": "|",
- "x": 1.25,
- "y": 3
- },
- {
- "label": "Z",
- "x": 2.25,
- "y": 3
- },
- {
- "label": "X",
- "x": 3.25,
- "y": 3
- },
- {
- "label": "C",
- "x": 4.25,
- "y": 3
- },
- {
- "label": "V",
- "x": 5.25,
- "y": 3
- },
- {
- "label": "B",
- "x": 6.25,
- "y": 3
- },
- {
- "label": "N",
- "x": 7.25,
- "y": 3
- },
- {
- "label": "M",
- "x": 8.25,
- "y": 3
- },
- {
- "label": "<",
- "x": 9.25,
- "y": 3
- },
- {
- "label": ">",
- "x": 10.25,
- "y": 3
- },
- {
- "label": "?",
- "x": 11.25,
- "y": 3
- },
- {
- "label": "Shift",
- "x": 12.25,
- "y": 3,
- "w": 2.75
- },
- {
- "label": "Ctrl",
- "x": 0,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 1.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Alt",
- "x": 2.5,
- "y": 4,
- "w": 1.25
- },
- {
- "x": 3.75,
- "y": 4,
- "w": 6.25
- },
- {
- "label": "AltGr",
- "x": 10,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 11.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Menu",
- "x": 12.5,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Ctrl",
- "x": 13.75,
- "y": 4,
- "w": 1.25
- }
+ {"label": "\\u00ac", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "\"", "x": 2, "y": 0}, {"label": "\\u00a3", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"label": "Backspace", "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "Enter", "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "@", "x": 11.75, "y": 2}, {"label": "~", "x": 12.75, "y": 2},
+ {"label": "Shift", "x": 0, "y": 3, "w": 1.25}, {"label": "|", "x": 1.25, "y": 3}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "x": 0, "y": 4, "w": 1.25}, {"label": "Win", "x": 1.25, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.5, "y": 4, "w": 1.25}, {"x": 3.75, "y": 4, "w": 6.25}, {"label": "AltGr", "x": 10, "y": 4, "w": 1.25}, {"label": "Win", "x": 11.25, "y": 4, "w": 1.25}, {"label": "Menu", "x": 12.5, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.75, "y": 4, "w": 1.25 }
]
- },
- "KEYMAP_AEK": {
+ },
+ "LAYOUT_aek": {
"key_count": 60,
"layout": [
- {
- "label": "~",
- "x": 0,
- "y": 0
- },
- {
- "label": "!",
- "x": 1,
- "y": 0
- },
- {
- "label": "@",
- "x": 2,
- "y": 0
- },
- {
- "label": "#",
- "x": 3,
- "y": 0
- },
- {
- "label": "$",
- "x": 4,
- "y": 0
- },
- {
- "label": "%",
- "x": 5,
- "y": 0
- },
- {
- "label": "^",
- "x": 6,
- "y": 0
- },
- {
- "label": "&",
- "x": 7,
- "y": 0
- },
- {
- "label": "*",
- "x": 8,
- "y": 0
- },
- {
- "label": "(",
- "x": 9,
- "y": 0
- },
- {
- "label": ")",
- "x": 10,
- "y": 0
- },
- {
- "label": "_",
- "x": 11,
- "y": 0
- },
- {
- "label": "+",
- "x": 12,
- "y": 0
- },
- {
- "label": "Backspace",
- "x": 13,
- "y": 0,
- "w": 2
- },
- {
- "label": "Tab",
- "x": 0,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Q",
- "x": 1.5,
- "y": 1
- },
- {
- "label": "W",
- "x": 2.5,
- "y": 1
- },
- {
- "label": "E",
- "x": 3.5,
- "y": 1
- },
- {
- "label": "R",
- "x": 4.5,
- "y": 1
- },
- {
- "label": "T",
- "x": 5.5,
- "y": 1
- },
- {
- "label": "Y",
- "x": 6.5,
- "y": 1
- },
- {
- "label": "U",
- "x": 7.5,
- "y": 1
- },
- {
- "label": "I",
- "x": 8.5,
- "y": 1
- },
- {
- "label": "O",
- "x": 9.5,
- "y": 1
- },
- {
- "label": "P",
- "x": 10.5,
- "y": 1
- },
- {
- "label": "{",
- "x": 11.5,
- "y": 1
- },
- {
- "label": "}",
- "x": 12.5,
- "y": 1
- },
- {
- "label": "|",
- "x": 13.5,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Caps Lock",
- "x": 0,
- "y": 2,
- "w": 1.75
- },
- {
- "label": "A",
- "x": 1.75,
- "y": 2
- },
- {
- "label": "S",
- "x": 2.75,
- "y": 2
- },
- {
- "label": "D",
- "x": 3.75,
- "y": 2
- },
- {
- "label": "F",
- "x": 4.75,
- "y": 2
- },
- {
- "label": "G",
- "x": 5.75,
- "y": 2
- },
- {
- "label": "H",
- "x": 6.75,
- "y": 2
- },
- {
- "label": "J",
- "x": 7.75,
- "y": 2
- },
- {
- "label": "K",
- "x": 8.75,
- "y": 2
- },
- {
- "label": "L",
- "x": 9.75,
- "y": 2
- },
- {
- "label": ":",
- "x": 10.75,
- "y": 2
- },
- {
- "label": "\"",
- "x": 11.75,
- "y": 2
- },
- {
- "label": "Enter",
- "x": 12.75,
- "y": 2,
- "w": 2.25
- },
- {
- "label": "Shift",
- "x": 0,
- "y": 3,
- "w": 2.25
- },
- {
- "label": "Z",
- "x": 2.25,
- "y": 3
- },
- {
- "label": "X",
- "x": 3.25,
- "y": 3
- },
- {
- "label": "C",
- "x": 4.25,
- "y": 3
- },
- {
- "label": "V",
- "x": 5.25,
- "y": 3
- },
- {
- "label": "B",
- "x": 6.25,
- "y": 3
- },
- {
- "label": "N",
- "x": 7.25,
- "y": 3
- },
- {
- "label": "M",
- "x": 8.25,
- "y": 3
- },
- {
- "label": "<",
- "x": 9.25,
- "y": 3
- },
- {
- "label": ">",
- "x": 10.25,
- "y": 3
- },
- {
- "label": "?",
- "x": 11.25,
- "y": 3
- },
- {
- "label": "Shift",
- "x": 12.25,
- "y": 3,
- "w": 2.75
- },
- {
- "label": "Ctrl",
- "x": 0,
- "y": 4,
- "w": 1.5
- },
- {
- "label": "Win",
- "x": 1.5,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Alt",
- "x": 2.75,
- "y": 4,
- "w": 1.5
- },
- {
- "x": 4.25,
- "y": 4,
- "w": 6.5
- },
- {
- "label": "AltGr",
- "x": 10.75,
- "y": 4,
- "w": 1.5
- },
- {
- "label": "Win",
- "x": 12.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Ctrl",
- "x": 13.5,
- "y": 4,
- "w": 1.5
- }
+ {"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"label": "Backspace", "x": 13, "y": 0, "w": 2},
+ {"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "\"", "x": 11.75, "y": 2}, {"label": "Enter", "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "x": 0, "y": 3, "w": 2.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 2.75},
+ {"label": "Ctrl", "x": 0, "y": 4, "w": 1.5}, {"label": "Win", "x": 1.5, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.75, "y": 4, "w": 1.5}, {"x": 4.25, "y": 4, "w": 6.5}, {"label": "AltGr", "x": 10.75, "y": 4, "w": 1.5}, {"label": "Win", "x": 12.25, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.5, "y": 4, "w": 1.5 }
]
- },
- "KEYMAP": {
+ },
+ "LAYOUT_all": {
"key_count": 65,
"layout": [
- {
- "label": "~",
- "x": 0,
- "y": 0
- },
- {
- "label": "!",
- "x": 1,
- "y": 0
- },
- {
- "label": "@",
- "x": 2,
- "y": 0
- },
- {
- "label": "#",
- "x": 3,
- "y": 0
- },
- {
- "label": "$",
- "x": 4,
- "y": 0
- },
- {
- "label": "%",
- "x": 5,
- "y": 0
- },
- {
- "label": "^",
- "x": 6,
- "y": 0
- },
- {
- "label": "&",
- "x": 7,
- "y": 0
- },
- {
- "label": "*",
- "x": 8,
- "y": 0
- },
- {
- "label": "(",
- "x": 9,
- "y": 0
- },
- {
- "label": ")",
- "x": 10,
- "y": 0
- },
- {
- "label": "_",
- "x": 11,
- "y": 0
- },
- {
- "label": "+",
- "x": 12,
- "y": 0
- },
- {
- "x": 13,
- "y": 0
- },
- {
- "label": "Back",
- "x": 14,
- "y": 0
- },
- {
- "label": "Tab",
- "x": 0,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Q",
- "x": 1.5,
- "y": 1
- },
- {
- "label": "W",
- "x": 2.5,
- "y": 1
- },
- {
- "label": "E",
- "x": 3.5,
- "y": 1
- },
- {
- "label": "R",
- "x": 4.5,
- "y": 1
- },
- {
- "label": "T",
- "x": 5.5,
- "y": 1
- },
- {
- "label": "Y",
- "x": 6.5,
- "y": 1
- },
- {
- "label": "U",
- "x": 7.5,
- "y": 1
- },
- {
- "label": "I",
- "x": 8.5,
- "y": 1
- },
- {
- "label": "O",
- "x": 9.5,
- "y": 1
- },
- {
- "label": "P",
- "x": 10.5,
- "y": 1
- },
- {
- "label": "{",
- "x": 11.5,
- "y": 1
- },
- {
- "label": "}",
- "x": 12.5,
- "y": 1
- },
- {
- "label": "|",
- "x": 13.5,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Caps Lock",
- "x": 0,
- "y": 2,
- "w": 1.75
- },
- {
- "label": "A",
- "x": 1.75,
- "y": 2
- },
- {
- "label": "S",
- "x": 2.75,
- "y": 2
- },
- {
- "label": "D",
- "x": 3.75,
- "y": 2
- },
- {
- "label": "F",
- "x": 4.75,
- "y": 2
- },
- {
- "label": "G",
- "x": 5.75,
- "y": 2
- },
- {
- "label": "H",
- "x": 6.75,
- "y": 2
- },
- {
- "label": "J",
- "x": 7.75,
- "y": 2
- },
- {
- "label": "K",
- "x": 8.75,
- "y": 2
- },
- {
- "label": "L",
- "x": 9.75,
- "y": 2
- },
- {
- "label": ":",
- "x": 10.75,
- "y": 2
- },
- {
- "label": "\"",
- "x": 11.75,
- "y": 2
- },
- {
- "x": 12.75,
- "y": 2
- },
- {
- "label": "Enter",
- "x": 13.75,
- "y": 2,
- "w": 1.25
- },
- {
- "x": 0,
- "y": 3
- },
- {
- "label": "Shift",
- "x": 1,
- "y": 3,
- "w": 1.25
- },
- {
- "label": "Z",
- "x": 2.25,
- "y": 3
- },
- {
- "label": "X",
- "x": 3.25,
- "y": 3
- },
- {
- "label": "C",
- "x": 4.25,
- "y": 3
- },
- {
- "label": "V",
- "x": 5.25,
- "y": 3
- },
- {
- "label": "B",
- "x": 6.25,
- "y": 3
- },
- {
- "label": "N",
- "x": 7.25,
- "y": 3
- },
- {
- "label": "M",
- "x": 8.25,
- "y": 3
- },
- {
- "label": "<",
- "x": 9.25,
- "y": 3
- },
- {
- "label": ">",
- "x": 10.25,
- "y": 3
- },
- {
- "label": "?",
- "x": 11.25,
- "y": 3
- },
- {
- "label": "Shift",
- "x": 12.25,
- "y": 3,
- "w": 1.75
- },
- {
- "x": 14,
- "y": 3
- },
- {
- "label": "Ctrl",
- "x": 0,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 1.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Alt",
- "x": 2.5,
- "y": 4,
- "w": 1.25
- },
- {
- "x": 3.75,
- "y": 4,
- "w": 6.25
- },
- {
- "label": "Alt",
- "x": 10,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 11.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Menu",
- "x": 12.5,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Ctrl",
- "x": 13.75,
- "y": 4,
- "w": 1.25
- }
+ {"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"x": 13, "y": 0}, {"label": "Back", "x": 14, "y": 0},
+ {"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "\"", "x": 11.75, "y": 2}, {"x": 12.75, "y": 2}, {"label": "Enter", "x": 13.75, "y": 2, "w": 1.25},
+ {"x": 0, "y": 3}, {"label": "Shift", "x": 1, "y": 3, "w": 1.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 1.75}, {"x": 14, "y": 3},
+ {"label": "Ctrl", "x": 0, "y": 4, "w": 1.25}, {"label": "Win", "x": 1.25, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.5, "y": 4, "w": 1.25}, {"x": 3.75, "y": 4, "w": 6.25}, {"label": "Alt", "x": 10, "y": 4, "w": 1.25}, {"label": "Win", "x": 11.25, "y": 4, "w": 1.25}, {"label": "Menu", "x": 12.5, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.75, "y": 4, "w": 1.25 }
]
- },
+ },
"LAYOUT_60_ansi_split_bs_rshift": {
"key_count": 63,
"layout": [
- {
- "label": "~",
- "x": 0,
- "y": 0
- },
- {
- "label": "!",
- "x": 1,
- "y": 0
- },
- {
- "label": "@",
- "x": 2,
- "y": 0
- },
- {
- "label": "#",
- "x": 3,
- "y": 0
- },
- {
- "label": "$",
- "x": 4,
- "y": 0
- },
- {
- "label": "%",
- "x": 5,
- "y": 0
- },
- {
- "label": "^",
- "x": 6,
- "y": 0
- },
- {
- "label": "&",
- "x": 7,
- "y": 0
- },
- {
- "label": "*",
- "x": 8,
- "y": 0
- },
- {
- "label": "(",
- "x": 9,
- "y": 0
- },
- {
- "label": ")",
- "x": 10,
- "y": 0
- },
- {
- "label": "_",
- "x": 11,
- "y": 0
- },
- {
- "label": "+",
- "x": 12,
- "y": 0
- },
- {
- "x": 13,
- "y": 0
- },
- {
- "label": "Back",
- "x": 14,
- "y": 0
- },
- {
- "label": "Tab",
- "x": 0,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Q",
- "x": 1.5,
- "y": 1
- },
- {
- "label": "W",
- "x": 2.5,
- "y": 1
- },
- {
- "label": "E",
- "x": 3.5,
- "y": 1
- },
- {
- "label": "R",
- "x": 4.5,
- "y": 1
- },
- {
- "label": "T",
- "x": 5.5,
- "y": 1
- },
- {
- "label": "Y",
- "x": 6.5,
- "y": 1
- },
- {
- "label": "U",
- "x": 7.5,
- "y": 1
- },
- {
- "label": "I",
- "x": 8.5,
- "y": 1
- },
- {
- "label": "O",
- "x": 9.5,
- "y": 1
- },
- {
- "label": "P",
- "x": 10.5,
- "y": 1
- },
- {
- "label": "{",
- "x": 11.5,
- "y": 1
- },
- {
- "label": "}",
- "x": 12.5,
- "y": 1
- },
- {
- "label": "|",
- "x": 13.5,
- "y": 1,
- "w": 1.5
- },
- {
- "label": "Caps Lock",
- "x": 0,
- "y": 2,
- "w": 1.75
- },
- {
- "label": "A",
- "x": 1.75,
- "y": 2
- },
- {
- "label": "S",
- "x": 2.75,
- "y": 2
- },
- {
- "label": "D",
- "x": 3.75,
- "y": 2
- },
- {
- "label": "F",
- "x": 4.75,
- "y": 2
- },
- {
- "label": "G",
- "x": 5.75,
- "y": 2
- },
- {
- "label": "H",
- "x": 6.75,
- "y": 2
- },
- {
- "label": "J",
- "x": 7.75,
- "y": 2
- },
- {
- "label": "K",
- "x": 8.75,
- "y": 2
- },
- {
- "label": "L",
- "x": 9.75,
- "y": 2
- },
- {
- "label": ":",
- "x": 10.75,
- "y": 2
- },
- {
- "label": "\"",
- "x": 11.75,
- "y": 2
- },
- {
- "label": "Enter",
- "x": 12.75,
- "y": 2,
- "w": 2.25
- },
- {
- "label": "Shift",
- "x": 0,
- "y": 3,
- "w": 2.25
- },
- {
- "label": "Z",
- "x": 2.25,
- "y": 3
- },
- {
- "label": "X",
- "x": 3.25,
- "y": 3
- },
- {
- "label": "C",
- "x": 4.25,
- "y": 3
- },
- {
- "label": "V",
- "x": 5.25,
- "y": 3
- },
- {
- "label": "B",
- "x": 6.25,
- "y": 3
- },
- {
- "label": "N",
- "x": 7.25,
- "y": 3
- },
- {
- "label": "M",
- "x": 8.25,
- "y": 3
- },
- {
- "label": "<",
- "x": 9.25,
- "y": 3
- },
- {
- "label": ">",
- "x": 10.25,
- "y": 3
- },
- {
- "label": "?",
- "x": 11.25,
- "y": 3
- },
- {
- "label": "Shift",
- "x": 12.25,
- "y": 3,
- "w": 1.75
- },
- {
- "x": 14,
- "y": 3
- },
- {
- "label": "Ctrl",
- "x": 0,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 1.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Alt",
- "x": 2.5,
- "y": 4,
- "w": 1.25
- },
- {
- "x": 3.75,
- "y": 4,
- "w": 6.25
- },
- {
- "label": "Alt",
- "x": 10,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 11.25,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Menu",
- "x": 12.5,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "Ctrl",
- "x": 13.75,
- "y": 4,
- "w": 1.25
- }
+ {"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"x": 13, "y": 0}, {"label": "Back", "x": 14, "y": 0},
+ {"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": ":", "x": 10.75, "y": 2}, {"label": "\"", "x": 11.75, "y": 2}, {"label": "Enter", "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "Shift", "x": 0, "y": 3, "w": 2.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "<", "x": 9.25, "y": 3}, {"label": ">", "x": 10.25, "y": 3}, {"label": "?", "x": 11.25, "y": 3}, {"label": "Shift", "x": 12.25, "y": 3, "w": 1.75}, {"x": 14, "y": 3},
+ {"label": "Ctrl", "x": 0, "y": 4, "w": 1.25}, {"label": "Win", "x": 1.25, "y": 4, "w": 1.25}, {"label": "Alt", "x": 2.5, "y": 4, "w": 1.25}, {"x": 3.75, "y": 4, "w": 6.25}, {"label": "Alt", "x": 10, "y": 4, "w": 1.25}, {"label": "Win", "x": 11.25, "y": 4, "w": 1.25}, {"label": "Menu", "x": 12.5, "y": 4, "w": 1.25}, {"label": "Ctrl", "x": 13.75, "y": 4, "w": 1.25}
]
}
}
diff --git a/keyboards/clueboard/60/keymaps/default/keymap.c b/keyboards/clueboard/60/keymaps/default/keymap.c
index 3e906737b6..89d2180ca6 100644
--- a/keyboards/clueboard/60/keymaps/default/keymap.c
+++ b/keyboards/clueboard/60/keymaps/default/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define _______ KC_TRNS
-
enum keyboard_layers {
_BL,
_FL,
@@ -46,19 +44,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl |Gui|Alt | Space |Alt |Gui|Fn |Ctrl |
* `-----------------------------------------------------------'
*/
- [_BL] = KEYMAP(
+ [_BL] = LAYOUT_all(
KC_GESC,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_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_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, \
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_BSLS, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
- [_FL] = KEYMAP(
+ [_FL] = LAYOUT_all(
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, _______,_______,\
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \
_______,_______,_______, _______, _______, _______, MO(_FL), _______),
- [_CL] = KEYMAP(
+ [_CL] = LAYOUT_all(
BL_STEP,S_BSKTC,S_ODEJY,S_RCKBY,S_DOEDR,S_SCALE,S_ONEUP,S_COIN, S_SONIC,S_ZELDA,_______,_______,_______,_______,_______,\
_______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
diff --git a/keyboards/clueboard/60/keymaps/default_aek/keymap.c b/keyboards/clueboard/60/keymaps/default_aek/keymap.c
index ea5333e3c9..ed4132f415 100644
--- a/keyboards/clueboard/60/keymaps/default_aek/keymap.c
+++ b/keyboards/clueboard/60/keymaps/default_aek/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define _______ KC_TRNS
-
enum keyboard_layers {
_BL,
_FL,
@@ -22,19 +20,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl |Gui|Alt | Space |Alt|Fn |Ctrl |
* `-----------------------------------------------------------'
*/
- [_BL] = KEYMAP_AEK(
+ [_BL] = LAYOUT_aek(
KC_GESC,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_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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL),
- [_FL] = KEYMAP_AEK(
+ [_FL] = LAYOUT_aek(
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, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______, _______, _______, _______, MO(_FL), _______),
- [_CL] = KEYMAP_AEK(
+ [_CL] = LAYOUT_aek(
BL_STEP,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______,\
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
diff --git a/keyboards/clueboard/60/keymaps/yanfali/keymap.c b/keyboards/clueboard/60/keymaps/yanfali/keymap.c
index b810bdcf8e..7c81ea028b 100644
--- a/keyboards/clueboard/60/keymaps/yanfali/keymap.c
+++ b/keyboards/clueboard/60/keymaps/yanfali/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define _______ KC_TRNS
-
enum keyboard_layers {
_BL,
_FL,
@@ -47,25 +45,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl |Alt|Gui | Space |Alt |Gui|Fn |Ctrl |
* `-----------------------------------------------------------------'
*/
- [_BL] = KEYMAP(
+ [_BL] = LAYOUT_all(
KC_GESC,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_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, \
MT(MOD_LCTL, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT, \
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, MO(_YF), \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
- [_FL] = KEYMAP(
+ [_FL] = LAYOUT_all(
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, _______,_______,\
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, MO(_YF), \
_______,_______,_______, _______, _______, _______, MO(_FL), _______),
- [_CL] = KEYMAP(
+ [_CL] = LAYOUT_all(
BL_STEP,S_BSKTC,S_ODEJY,S_RCKBY,S_DOEDR,S_SCALE,S_ONEUP,S_COIN, S_SONIC,S_ZELDA,_______,_______,_______,_______,_______,\
_______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, MO(_YF), \
_______, _______, _______, _______, _______, _______, MO(_FL), _______),
- [_YF] = KEYMAP(
+ [_YF] = LAYOUT_all(
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
_______,_______,KC_UP ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
diff --git a/keyboards/clueboard/60/matrix.c b/keyboards/clueboard/60/matrix.c
deleted file mode 100644
index 7c38a3bd45..0000000000
--- a/keyboards/clueboard/60/matrix.c
+++ /dev/null
@@ -1,175 +0,0 @@
-#include <stdint.h>
-#include <stdbool.h>
-#include <string.h>
-#include "hal.h"
-#include "timer.h"
-#include "wait.h"
-#include "printf.h"
-#include "backlight.h"
-#include "matrix.h"
-
-
-/* Clueboard 60%
- *
- * Column pins are input with internal pull-down.
- * Row pins are output and strobe with high.
- * Key is high or 1 when it turns on.
- *
- * col: { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC15, PC14, PC13, PB5, PB6 }
- * row: { PB0, PB1, PB2, PA15, PA10 }
- */
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_COLS];
-static bool debouncing = false;
-static uint16_t debouncing_time = 0;
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-void matrix_init(void) {
- printf("matrix init\n");
- //debug_matrix = true;
-
- /* Column(sense) */
- palSetPadMode(GPIOA, 2, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOA, 3, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOA, 6, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 14, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 15, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOA, 8, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOA, 9, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOA, 7, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 4, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOC, 15, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOC, 14, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOC, 13, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL);
- palSetPadMode(GPIOB, 6, PAL_MODE_OUTPUT_PUSHPULL);
-
- /* Row(strobe) */
- palSetPadMode(GPIOB, 0, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOB, 1, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOB, 2, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOA, 15, PAL_MODE_INPUT_PULLDOWN);
- palSetPadMode(GPIOA, 10, PAL_MODE_INPUT_PULLDOWN);
-
- memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
- memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t));
-
- palClearPad(GPIOB, 7); // Turn off capslock
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (int col = 0; col < MATRIX_COLS; col++) {
- matrix_row_t data = 0;
-
- // strobe col { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC14, PC15, PC13, PB5, PB6 }
- switch (col) {
- case 0: palSetPad(GPIOA, 2); break;
- case 1: palSetPad(GPIOA, 3); break;
- case 2: palSetPad(GPIOA, 6); break;
- case 3: palSetPad(GPIOB, 14); break;
- case 4: palSetPad(GPIOB, 15); break;
- case 5: palSetPad(GPIOA, 8); break;
- case 6: palSetPad(GPIOA, 9); break;
- case 7: palSetPad(GPIOA, 7); break;
- case 8: palSetPad(GPIOB, 3); break;
- case 9: palSetPad(GPIOB, 4); break;
- case 10: palSetPad(GPIOC, 15); break;
- case 11: palSetPad(GPIOC, 14); break;
- case 12: palSetPad(GPIOC, 13); break;
- case 13: palSetPad(GPIOB, 5); break;
- case 14: palSetPad(GPIOB, 6); break;
- }
-
- // need wait to settle pin state
- wait_us(20);
-
- // read row data { PB0, PB1, PB2, PA15, PA10 }
- data = (
- (palReadPad(GPIOB, 0) << 0 ) |
- (palReadPad(GPIOB, 1) << 1 ) |
- (palReadPad(GPIOB, 2) << 2 ) |
- (palReadPad(GPIOA, 15) << 3 ) |
- (palReadPad(GPIOA, 10) << 4 )
- );
-
- // unstrobe col { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC15, PC14, PC13, PB5, PB6 }
- switch (col) {
- case 0: palClearPad(GPIOA, 2); break;
- case 1: palClearPad(GPIOA, 3); break;
- case 2: palClearPad(GPIOA, 6); break;
- case 3: palClearPad(GPIOB, 14); break;
- case 4: palClearPad(GPIOB, 15); break;
- case 5: palClearPad(GPIOA, 8); break;
- case 6: palClearPad(GPIOA, 9); break;
- case 7: palClearPad(GPIOA, 7); break;
- case 8: palClearPad(GPIOB, 3); break;
- case 9: palClearPad(GPIOB, 4); break;
- case 10: palClearPad(GPIOC, 15); break;
- case 11: palClearPad(GPIOC, 14); break;
- case 12: palClearPad(GPIOC, 13); break;
- case 13: palClearPad(GPIOB, 5); break;
- case 14: palClearPad(GPIOB, 6); break;
- }
-
- if (matrix_debouncing[col] != data) {
- matrix_debouncing[col] = data;
- debouncing = true;
- debouncing_time = timer_read();
- }
- }
-
- if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
- for (int row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0;
- for (int col = 0; col < MATRIX_COLS; col++) {
- matrix[row] |= ((matrix_debouncing[col] & (1 << row) ? 1 : 0) << col);
- }
- }
- debouncing = false;
- }
-
- matrix_scan_quantum();
-
- return 1;
-}
-
-bool matrix_is_on(uint8_t row, uint8_t col) {
- return (matrix[row] & (1<<col));
-}
-
-matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
- printf("\nr/c 01234567\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- printf("%X0: ", row);
- matrix_row_t data = matrix_get_row(row);
- for (int col = 0; col < MATRIX_COLS; col++) {
- if (data & (1<<col))
- printf("1");
- else
- printf("0");
- }
- printf("\n");
- }
-}
diff --git a/keyboards/clueboard/60/readme.md b/keyboards/clueboard/60/readme.md
index b81d70d0c3..e3255f5075 100644
--- a/keyboards/clueboard/60/readme.md
+++ b/keyboards/clueboard/60/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make clueboard/60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/clueboard/60/rules.mk b/keyboards/clueboard/60/rules.mk
index 3664b6d2c1..aada073525 100644
--- a/keyboards/clueboard/60/rules.mk
+++ b/keyboards/clueboard/60/rules.mk
@@ -1,6 +1,5 @@
# project specific files
-SRC = matrix.c \
- led.c
+SRC = led.c
LAYOUTS += 60_ansi 60_ansi_split_bs_rshift 60_iso
## chip/board settings
@@ -32,8 +31,6 @@ USE_FPU = yes
# Vector table for application
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
OPT_DEFS =
# Options to pass to dfu-util when flashing
@@ -43,14 +40,10 @@ DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
# comment out to disable the options.
#
BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
-## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-CUSTOM_MATRIX = yes # Custom matrix file
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover
AUDIO_ENABLE = yes
-# SERIAL_LINK_ENABLE = yes
diff --git a/keyboards/clueboard/66/66.c b/keyboards/clueboard/66/66.c
deleted file mode 100644
index 15d7422f18..0000000000
--- a/keyboards/clueboard/66/66.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "66.h"
diff --git a/keyboards/clueboard/66/66.h b/keyboards/clueboard/66/66.h
deleted file mode 100644
index c8989983d0..0000000000
--- a/keyboards/clueboard/66/66.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef CLUEBOARD_H
-#define CLUEBOARD_H
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_clueboard_66_rev1
- #include "rev1.h"
-#endif
-#ifdef KEYBOARD_clueboard_66_rev2
- #include "rev2.h"
-#endif
-#ifdef KEYBOARD_clueboard_66_rev3
- #include "rev3.h"
-#endif
-
-#endif
diff --git a/keyboards/clueboard/66/info.json b/keyboards/clueboard/66/info.json
index 1675ae7617..514ba456da 100644
--- a/keyboards/clueboard/66/info.json
+++ b/keyboards/clueboard/66/info.json
@@ -3,12 +3,34 @@
"width": 16.5,
"height": 5,
"layouts": {
- "KEYMAP": {
- "layout": [{"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"}, {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"}, {"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 1, "label": "ISOHASH"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"}, {"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 1, "label": "JPBACKSLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"}, {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}]
+ "LAYOUT_all": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"},
+ {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"},
+ {"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 1, "label": "ISOHASH"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"},
+ {"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 1, "label": "JPBACKSLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"},
+ {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}
+ ]
},
"LAYOUT_66_ansi": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"x":14.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}]
+ "layout": [
+ {"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"x":14.5, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6}, {"label":"Alt", "x":9.75, "y":4, "w":1.25}, {"label":"Win", "x":11, "y":4, "w":1.25}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}
+ ]
+ },
+
+ "LAYOUT_66_iso": {
+ "layout": [
+ {"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Insert", "x":15.5, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":15.5, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"\\", "x":1.25, "y":3, "w":1}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"label":"\u2191", "x":14.5, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6}, {"label":"Alt", "x":9.75, "y":4, "w":1.25}, {"label":"Ctrl", "x":11, "y":4, "w":1.25}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"label":"\u2190", "x":13.5, "y":4}, {"label":"\u2193", "x":14.5, "y":4}, {"label":"\u2192", "x":15.5, "y":4}
+ ]
}
}
}
diff --git a/keyboards/clueboard/66/keymaps/66_ansi/keymap.c b/keyboards/clueboard/66/keymaps/66_ansi/keymap.c
index cfa641dcc6..73c809ded6 100644
--- a/keyboards/clueboard/66/keymaps/66_ansi/keymap.c
+++ b/keyboards/clueboard/66/keymaps/66_ansi/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/66_ansi/readme.md b/keyboards/clueboard/66/keymaps/66_ansi/readme.md
index 25b5d7eb18..eee81c0c2d 100644
--- a/keyboards/clueboard/66/keymaps/66_ansi/readme.md
+++ b/keyboards/clueboard/66/keymaps/66_ansi/readme.md
@@ -1,6 +1,4 @@
-![Clueboard Layout Image](http://i.imgur.com/7Capi8W.png)
-
-# Basic Clueboard 66% Hotswap Layout
+# Basic Clueboard 66% Hotswap ANSI Layout
This is the default layout that comes flashed on every Clueboard. For the most
part it's a straightforward and easy to follow layout. The only unusual key is
diff --git a/keyboards/clueboard/66/keymaps/66_iso/keymap.c b/keyboards/clueboard/66/keymaps/66_iso/keymap.c
index 577cf045b5..ff27acf5cd 100644
--- a/keyboards/clueboard/66/keymaps/66_iso/keymap.c
+++ b/keyboards/clueboard/66/keymaps/66_iso/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/66_iso/readme.md b/keyboards/clueboard/66/keymaps/66_iso/readme.md
index 019131aeb1..6d895b0eba 100644
--- a/keyboards/clueboard/66/keymaps/66_iso/readme.md
+++ b/keyboards/clueboard/66/keymaps/66_iso/readme.md
@@ -1,6 +1,4 @@
-![Clueboard Layout Image](http://i.imgur.com/7Capi8W.png)
-
-# Default Clueboard Layout
+# Default Clueboard 66% ISO Layout
This is the default layout that comes flashed on every Clueboard. For the most
part it's a straightforward and easy to follow layout. The only unusual key is
diff --git a/keyboards/clueboard/66/keymaps/bloodlvst/config.h b/keyboards/clueboard/66/keymaps/bloodlvst/config.h
index 456936cf93..60c6ad4a12 100644
--- a/keyboards/clueboard/66/keymaps/bloodlvst/config.h
+++ b/keyboards/clueboard/66/keymaps/bloodlvst/config.h
@@ -1,7 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
#define DISABLE_SPACE_CADET_ROLLOVER
-#endif
diff --git a/keyboards/clueboard/66/keymaps/bloodlvst/keymap.c b/keyboards/clueboard/66/keymaps/bloodlvst/keymap.c
index 73543cbfad..7c7faba9ce 100644
--- a/keyboards/clueboard/66/keymaps/bloodlvst/keymap.c
+++ b/keyboards/clueboard/66/keymaps/bloodlvst/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/caps_fn/keymap.c b/keyboards/clueboard/66/keymaps/caps_fn/keymap.c
index c48c507387..fc0c56d9a7 100644
--- a/keyboards/clueboard/66/keymaps/caps_fn/keymap.c
+++ b/keyboards/clueboard/66/keymaps/caps_fn/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/caps_fn/readme.md b/keyboards/clueboard/66/keymaps/caps_fn/readme.md
index 47a530a80b..71d1246c07 100644
--- a/keyboards/clueboard/66/keymaps/caps_fn/readme.md
+++ b/keyboards/clueboard/66/keymaps/caps_fn/readme.md
@@ -1,5 +1,3 @@
-![Clueboard Layout Image](http://i.imgur.com/kGADucy.png)
-
# Caps Fn Layout
This is the default layout except that Caps Lock acts like Caps Lock when
diff --git a/keyboards/clueboard/66/keymaps/colemak/keymap.c b/keyboards/clueboard/66/keymaps/colemak/keymap.c
index 3666bd0e64..4479556b65 100644
--- a/keyboards/clueboard/66/keymaps/colemak/keymap.c
+++ b/keyboards/clueboard/66/keymaps/colemak/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/default/keymap.c b/keyboards/clueboard/66/keymaps/default/keymap.c
index 555ff97f0c..95283db886 100644
--- a/keyboards/clueboard/66/keymaps/default/keymap.c
+++ b/keyboards/clueboard/66/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/default/readme.md b/keyboards/clueboard/66/keymaps/default/readme.md
index 019131aeb1..b1cdcbe4e2 100644
--- a/keyboards/clueboard/66/keymaps/default/readme.md
+++ b/keyboards/clueboard/66/keymaps/default/readme.md
@@ -1,6 +1,4 @@
-![Clueboard Layout Image](http://i.imgur.com/7Capi8W.png)
-
-# Default Clueboard Layout
+# Default Clueboard 66% Universal Layout
This is the default layout that comes flashed on every Clueboard. For the most
part it's a straightforward and easy to follow layout. The only unusual key is
diff --git a/keyboards/clueboard/66/keymaps/jokrik/keymap.c b/keyboards/clueboard/66/keymaps/jokrik/keymap.c
index 118efe0a97..9c6997c34e 100644
--- a/keyboards/clueboard/66/keymaps/jokrik/keymap.c
+++ b/keyboards/clueboard/66/keymaps/jokrik/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/mac_optimized/keymap.c b/keyboards/clueboard/66/keymaps/mac_optimized/keymap.c
index 29d9684296..30e772900e 100644
--- a/keyboards/clueboard/66/keymaps/mac_optimized/keymap.c
+++ b/keyboards/clueboard/66/keymaps/mac_optimized/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/mac_optimized/readme.md b/keyboards/clueboard/66/keymaps/mac_optimized/readme.md
index 282da369dc..db7a87d443 100644
--- a/keyboards/clueboard/66/keymaps/mac_optimized/readme.md
+++ b/keyboards/clueboard/66/keymaps/mac_optimized/readme.md
@@ -1,5 +1,3 @@
-![Clueboard Layout Image](http://i.imgur.com/7oZCsHF.png)
-
# Default Clueboard Layout for Mac
This is the default Clueboard layout with Alt and GUI switched to match Mac
diff --git a/keyboards/clueboard/66/keymaps/magicmonty/config.h b/keyboards/clueboard/66/keymaps/magicmonty/config.h
index d933fa9979..65853f6b0c 100644
--- a/keyboards/clueboard/66/keymaps/magicmonty/config.h
+++ b/keyboards/clueboard/66/keymaps/magicmonty/config.h
@@ -1,7 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/*
* MIDI options
@@ -36,5 +33,3 @@
#define LSPO_KEY KC_8
#define RSPC_KEY KC_9
#define PERMISSIVE_HOLD
-
-#endif
diff --git a/keyboards/clueboard/66/keymaps/magicmonty/keymap.c b/keyboards/clueboard/66/keymaps/magicmonty/keymap.c
index 7f91224cfb..8d93715676 100644
--- a/keyboards/clueboard/66/keymaps/magicmonty/keymap.c
+++ b/keyboards/clueboard/66/keymaps/magicmonty/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Helpful defines
#define xxxxxxx KC_NO
diff --git a/keyboards/clueboard/66/keymaps/magicmonty/rules.mk b/keyboards/clueboard/66/keymaps/magicmonty/rules.mk
index 7ee1ff1690..46222e2d34 100644
--- a/keyboards/clueboard/66/keymaps/magicmonty/rules.mk
+++ b/keyboards/clueboard/66/keymaps/magicmonty/rules.mk
@@ -1,6 +1,7 @@
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
+RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
MIDI_ENABLE = yes
diff --git a/keyboards/clueboard/66/keymaps/manofinterests/keymap.c b/keyboards/clueboard/66/keymaps/manofinterests/keymap.c
index 08815dc5a9..e71419980d 100644
--- a/keyboards/clueboard/66/keymaps/manofinterests/keymap.c
+++ b/keyboards/clueboard/66/keymaps/manofinterests/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/maximised/keymap.c b/keyboards/clueboard/66/keymaps/maximised/keymap.c
index 1b117dc605..c2e05a5a27 100644
--- a/keyboards/clueboard/66/keymaps/maximised/keymap.c
+++ b/keyboards/clueboard/66/keymaps/maximised/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/maximised/readme.md b/keyboards/clueboard/66/keymaps/maximised/readme.md
index fc82e68793..b8d54a3093 100644
--- a/keyboards/clueboard/66/keymaps/maximised/readme.md
+++ b/keyboards/clueboard/66/keymaps/maximised/readme.md
@@ -1,5 +1,3 @@
-![Clueboard Layout Image](http://i.imgur.com/7oZCsHF.png)
-
# Maximised Clueboard Layout
This 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/66/keymaps/mouse_keys/keymap.c b/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c
index 2169312d46..be5634f103 100644
--- a/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c
+++ b/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/mouse_keys/readme.md b/keyboards/clueboard/66/keymaps/mouse_keys/readme.md
index 7fb038205a..de883e8940 100644
--- a/keyboards/clueboard/66/keymaps/mouse_keys/readme.md
+++ b/keyboards/clueboard/66/keymaps/mouse_keys/readme.md
@@ -1,5 +1,3 @@
-![Clueboard Layout Image](layout.png)
-
# MouseKeys Layout
This layout adds a mouse layer. When you hold down the spacebar the arrow keys
diff --git a/keyboards/clueboard/66/keymaps/mrscooty/keymap.c b/keyboards/clueboard/66/keymaps/mrscooty/keymap.c
index abf98615ea..302649c923 100644
--- a/keyboards/clueboard/66/keymaps/mrscooty/keymap.c
+++ b/keyboards/clueboard/66/keymaps/mrscooty/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/muzfuz/keymap.c b/keyboards/clueboard/66/keymaps/muzfuz/keymap.c
new file mode 100644
index 0000000000..d4af354831
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/muzfuz/keymap.c
@@ -0,0 +1,74 @@
+#include QMK_KEYBOARD_H
+
+// Helpful defines
+#define ESC_CTL CTL_T(KC_ESCAPE) // Tap for Esc, hold for Ctrl
+#define _FL_KCF LT(1,KC_F)
+#define _FL_KCJ LT(1,KC_J)
+#define _AL_KCA LT(2,KC_A)
+#define CMD_ENT LGUI(LSFT(KC_ENT))
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+#define _BL 0
+#define _FL 1
+#define _AL 2
+#define _CL 3
+
+enum custom_keycodes {
+ HASHRKT = SAFE_RANGE,
+ CLNEQLS,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+ [_BL] = LAYOUT(
+ 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_BSLS, HASHRKT, LGUI(KC_C),
+ 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, LGUI(KC_V),
+ ESC_CTL, _AL_KCA, KC_S, KC_D, _FL_KCF, KC_G, KC_H, _FL_KCJ, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_LGUI,
+ KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SLSH, KC_RSFT, KC_UP,
+ CMD_ENT, KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, MO(_CL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+ [_FL] = LAYOUT(
+ 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_DEL, KC_VOLU,
+ _______, HASHRKT, _______, KC_LCBR, KC_RCBR, _______, _______, KC_UNDS, KC_PLUS, KC_PIPE, _______, _______, _______, KC_MUTE, KC_VOLD,
+ _______, CLNEQLS, _______, KC_LBRC, KC_RBRC, _______, _______, KC_MINS, KC_EQL, KC_BSLS, KC_TILD, KC_GRV, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _FL: Function Layer
+ */
+ [_AL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ /* Keymap _CL: Control layer
+ */
+ [_CL] = LAYOUT(
+ BL_STEP, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, RGB_VAD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI,
+ _______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case HASHRKT:
+ if (record->event.pressed) {
+ SEND_STRING("=>");
+ }
+ break;
+ case CLNEQLS:
+ if (record->event.pressed) {
+ SEND_STRING(":=");
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/clueboard/66/keymaps/muzfuz/readme.md b/keyboards/clueboard/66/keymaps/muzfuz/readme.md
new file mode 100644
index 0000000000..ce23a8a99c
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/muzfuz/readme.md
@@ -0,0 +1,8 @@
+# muzfuz Clueboard layout
+
+```shell
+make clueboard/66/rev3:muzfuz
+dfu-programmer atmega32u4 erase --force && \
+dfu-programmer atmega32u4 flash .build/clueboard_66_rev3_muzfuz.hex && \
+dfu-programmer atmega32u4 reset
+```
diff --git a/keyboards/clueboard/66/keymaps/serubin/keymap.c b/keyboards/clueboard/66/keymaps/serubin/keymap.c
index 32507e9184..e77417c3c2 100644
--- a/keyboards/clueboard/66/keymaps/serubin/keymap.c
+++ b/keyboards/clueboard/66/keymaps/serubin/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/shift_fn/keymap.c b/keyboards/clueboard/66/keymaps/shift_fn/keymap.c
index 3736db8992..8556f90803 100644
--- a/keyboards/clueboard/66/keymaps/shift_fn/keymap.c
+++ b/keyboards/clueboard/66/keymaps/shift_fn/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/shift_fn/readme.md b/keyboards/clueboard/66/keymaps/shift_fn/readme.md
index 4bd920ad4e..d68c5b0532 100644
--- a/keyboards/clueboard/66/keymaps/shift_fn/readme.md
+++ b/keyboards/clueboard/66/keymaps/shift_fn/readme.md
@@ -1,4 +1,4 @@
-# Shift Fn Clueboard Layout
+# Shift Fn Clueboard 66% Layout
This is an experimental layout. It makes the left shift key a dual roll key.
For most keys it acts as a shift key, but for some keys it activates an
diff --git a/keyboards/clueboard/66/keymaps/smt/keymap.c b/keyboards/clueboard/66/keymaps/smt/keymap.c
index 42dcfecac0..c1e3756909 100644
--- a/keyboards/clueboard/66/keymaps/smt/keymap.c
+++ b/keyboards/clueboard/66/keymaps/smt/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/tetris/keymap.c b/keyboards/clueboard/66/keymaps/tetris/keymap.c
index f7c6d4c139..ef3abd6672 100644
--- a/keyboards/clueboard/66/keymaps/tetris/keymap.c
+++ b/keyboards/clueboard/66/keymaps/tetris/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
#include "tetris_text.h"
// Helpful defines
diff --git a/keyboards/clueboard/66/keymaps/unix_optimized/keymap.c b/keyboards/clueboard/66/keymaps/unix_optimized/keymap.c
index 927e848539..823959ee0d 100644
--- a/keyboards/clueboard/66/keymaps/unix_optimized/keymap.c
+++ b/keyboards/clueboard/66/keymaps/unix_optimized/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/unix_optimized/readme.md b/keyboards/clueboard/66/keymaps/unix_optimized/readme.md
index 9e6d0e902a..79c7daef84 100644
--- a/keyboards/clueboard/66/keymaps/unix_optimized/readme.md
+++ b/keyboards/clueboard/66/keymaps/unix_optimized/readme.md
@@ -1,6 +1,4 @@
-![Clueboard Layout Image](http://i.imgur.com/BnWlOht.png)
-
-# Default Clueboard Layout
+# Default Clueboard 66% Layout
This is the default layout except that Caps Lock has been changed to Control
and Insert and Delete have been put into the Fn layer.
diff --git a/keyboards/clueboard/66/keymaps/win_optimized/keymap.c b/keyboards/clueboard/66/keymaps/win_optimized/keymap.c
index 2432350164..2c5cb86398 100644
--- a/keyboards/clueboard/66/keymaps/win_optimized/keymap.c
+++ b/keyboards/clueboard/66/keymaps/win_optimized/keymap.c
@@ -1,4 +1,4 @@
-#include "66.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66/keymaps/win_optimized/readme.md b/keyboards/clueboard/66/keymaps/win_optimized/readme.md
index 703a37be0c..d79603268d 100644
--- a/keyboards/clueboard/66/keymaps/win_optimized/readme.md
+++ b/keyboards/clueboard/66/keymaps/win_optimized/readme.md
@@ -1,6 +1,4 @@
-![Clueboard Layout Image](http://i.imgur.com/fsqOqZo.png)
-
-# Default Clueboard Layout
+# Default Clueboard 66% Layout
This is the default layout that comes flashed on every Clueboard. For the most
part it's a straightforward and easy to follow layout. The only unusual key is
diff --git a/keyboards/clueboard/66/keymaps/xyverz/config.h b/keyboards/clueboard/66/keymaps/xyverz/config.h
index 4999e4ff6c..979cbf5768 100644
--- a/keyboards/clueboard/66/keymaps/xyverz/config.h
+++ b/keyboards/clueboard/66/keymaps/xyverz/config.h
@@ -1,3 +1,3 @@
-#include "../config.h"
+#pragma once
-#define TAPPING_TERM 600 // ms
+#define TAPPING_TERM 600 // ms
diff --git a/keyboards/clueboard/66/keymaps/xyverz/keymap.c b/keyboards/clueboard/66/keymaps/xyverz/keymap.c
index e3f413b490..916a448e26 100644
--- a/keyboards/clueboard/66/keymaps/xyverz/keymap.c
+++ b/keyboards/clueboard/66/keymaps/xyverz/keymap.c
@@ -1,7 +1,7 @@
// Xyverz' keymap.
// It's based on the default keymap, but Dvorak!
-#include "66.h"
+#include QMK_KEYBOARD_H
#include "action_layer.h"
#include "eeconfig.h"
diff --git a/keyboards/clueboard/66/keymaps/xyverz/rules.mk b/keyboards/clueboard/66/keymaps/xyverz/rules.mk
index fc02ecb7ef..6fa110a7b6 100644
--- a/keyboards/clueboard/66/keymaps/xyverz/rules.mk
+++ b/keyboards/clueboard/66/keymaps/xyverz/rules.mk
@@ -44,6 +44,3 @@
#
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/clueboard/66/readme.md b/keyboards/clueboard/66/readme.md
index 42a261e2ab..094cc219e9 100644
--- a/keyboards/clueboard/66/readme.md
+++ b/keyboards/clueboard/66/readme.md
@@ -1,6 +1,6 @@
# Clueboard 66%
-![Clueboard](https://static1.squarespace.com/static/55c13bdee4b099be5dcb82eb/t/5867eeaad2b857fd0d196f4b/1494021396651/IMGP4201.jpg?format=1500w)
+![Clueboard](https://i.imgur.com/hLePwJu.jpg)
A fully customizable 66% keyboard.
@@ -8,11 +8,11 @@ A fully customizable 66% keyboard.
* Hardware Supported: Clueboard 66% PCB
* rev1 (PCB Version 1.0)
* rev2 (PCB Versions 2.0, 2.0.1, 2.1, 2.5, 2.5.1, 2.6)
- * rev3 (PCB Versions 2.7, 2.8)
+ * rev3 (PCB Versions 2.7, 2.8, 2.9)
* Hardware Availability: [clueboard.co](https://clueboard.co/)
Make example for this keyboard (after setting up your build environment):
make clueboard/66/rev3:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/clueboard/66/rev1/config.h b/keyboards/clueboard/66/rev1/config.h
index 210718d560..a35c0d0f65 100644
--- a/keyboards/clueboard/66/rev1/config.h
+++ b/keyboards/clueboard/66/rev1/config.h
@@ -1,28 +1,60 @@
-#ifndef CLUEBOARD_66_REV1_CONFIG_H
-#define CLUEBOARD_66_REV1_CONFIG_H
+#pragma once
#include "config_common.h"
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2301
#define DEVICE_VER 0x0003
+#define MANUFACTURER Clueboard
+#define PRODUCT Clueboard
+#define DESCRIPTION QMK keyboard firmware for Clueboard
-/* key matrix size */
+/* key matrix size
+ */
#define MATRIX_ROWS 5
#define MATRIX_COLS 16
-// ROWS: Top to bottom, COLS: Left to right
-/* Column pin configuration
-* col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-* pin: B3 F1 F4 F5 F6 C7 C6 B6 B5 B4 D7 D6 D4 F7 B0 B1
-*/
+/* ROWS: Top to bottom, COLS: Left to right
+ */
#define MATRIX_COL_PINS { B3, F1, F4, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, F7, B0, B1 }
-/* Row pin configuration
-* row: 0 1 2 3 4
-* pin: D1 D0 D2 D5 D3
-*/
#define MATRIX_ROW_PINS { D1, D0, D2, D5, D3 }
#define UNUSED_PINS
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
/* Underlight configuration
*/
#define RGB_DI_PIN B2
@@ -31,6 +63,3 @@
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
-
-
-#endif
diff --git a/keyboards/clueboard/66/rev1/rev1.h b/keyboards/clueboard/66/rev1/rev1.h
index 58694fcb97..e071f4c796 100644
--- a/keyboards/clueboard/66/rev1/rev1.h
+++ b/keyboards/clueboard/66/rev1/rev1.h
@@ -1,7 +1,6 @@
-#ifndef REV1_H
-#define REV1_H
+#pragma once
-#include "../66.h"
+#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
@@ -30,7 +29,7 @@
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
+#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \
@@ -43,7 +42,6 @@
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E }, \
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \
}
-#define KEYMAP LAYOUT
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0E, k0F, \
@@ -73,4 +71,5 @@
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4A, k4B, k4C, k4D, k4E, k4F } \
}
-#endif
+#define KEYMAP LAYOUT_all
+#define LAYOUT LAYOUT_all
diff --git a/keyboards/clueboard/66/rev1/rules.mk b/keyboards/clueboard/66/rev1/rules.mk
index f845616741..96d4125ac4 100644
--- a/keyboards/clueboard/66/rev1/rules.mk
+++ b/keyboards/clueboard/66/rev1/rules.mk
@@ -1 +1,23 @@
-BACKLIGHT_ENABLE = no \ No newline at end of file
+LAYOUTS = 66_ansi 66_iso
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/clueboard/66/rev2/config.h b/keyboards/clueboard/66/rev2/config.h
index 6ab2b1127d..0216b5e1fe 100644
--- a/keyboards/clueboard/66/rev2/config.h
+++ b/keyboards/clueboard/66/rev2/config.h
@@ -1,28 +1,59 @@
-#ifndef CLUEBOARD_66_REV2_CONFIG_H
-#define CLUEBOARD_66_REV2_CONFIG_H
+#pragma once
#include "config_common.h"
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2320
#define DEVICE_VER 0x0001
+#define MANUFACTURER Clueboard
+#define PRODUCT Clueboard
+#define DESCRIPTION QMK keyboard firmware for Clueboard
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
-// ROWS: Top to bottom, COLS: Left to right
-/* Row pin configuration
-* row: 0 1 2 3 4 5 6 7 8 9
-* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2
+/* ROWS: Top to bottom, COLS: Left to right
*/
#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
-/* Column pin configuration
- * col: 0 1 2 3 4 5 6 7
- * pin: F0 F1 F4 F5 F6 F7 E6 B1
- */
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
#define UNUSED_PINS
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1
@@ -44,5 +75,3 @@
#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 1 // The led to start at
#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 5 // How many LEDs to travel
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4 // How many LEDs wide to light up
-
-#endif
diff --git a/keyboards/clueboard/66/rev2/rev2.h b/keyboards/clueboard/66/rev2/rev2.h
index bac608df97..86688c7a15 100644
--- a/keyboards/clueboard/66/rev2/rev2.h
+++ b/keyboards/clueboard/66/rev2/rev2.h
@@ -1,7 +1,6 @@
-#ifndef REV2_H
-#define REV2_H
+#pragma once
-#include "66.h"
+#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
@@ -30,7 +29,7 @@
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
+#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
@@ -48,7 +47,6 @@
{ k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
-#define KEYMAP LAYOUT
/* LAYOUT_66_ansi, standard 66 key ANSI layout
*/
@@ -92,4 +90,5 @@
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
-#endif
+#define KEYMAP LAYOUT_all
+#define LAYOUT LAYOUT_all
diff --git a/keyboards/clueboard/66/rev2/rules.mk b/keyboards/clueboard/66/rev2/rules.mk
index 54a2685bf6..4987ac1378 100644
--- a/keyboards/clueboard/66/rev2/rules.mk
+++ b/keyboards/clueboard/66/rev2/rules.mk
@@ -1 +1,22 @@
-BACKLIGHT_ENABLE = yes \ No newline at end of file
+LAYOUTS = 66_ansi 66_iso
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+BACKLIGHT_ENABLE = yes
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/clueboard/66/rev3/config.h b/keyboards/clueboard/66/rev3/config.h
index 218736a889..e7cda4ccf0 100644
--- a/keyboards/clueboard/66/rev3/config.h
+++ b/keyboards/clueboard/66/rev3/config.h
@@ -1,28 +1,59 @@
-#ifndef CLUEBOARD_66_REV3_CONFIG_H
-#define CLUEBOARD_66_REV3_CONFIG_H
+#pragma once
#include "config_common.h"
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2370
#define DEVICE_VER 0x0001
+#define MANUFACTURER Clueboard
+#define PRODUCT Clueboard
+#define DESCRIPTION QMK keyboard firmware for Clueboard
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
-// ROWS: Top to bottom, COLS: Left to right
-/* Row pin configuration
-* row: 0 1 2 3 4 5 6 7 8 9
-* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2
+/* ROWS: Top to bottom, COLS: Left to right
*/
#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
-/* Column pin configuration
- * col: 0 1 2 3 4 5 6 7
- * pin: F0 F1 F4 F5 F6 F7 E6 B1
- */
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
#define UNUSED_PINS
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1
@@ -44,5 +75,3 @@
#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2 // The led to start at
#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 5 // How many LEDs to travel
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4 // How many LEDs wide to light up
-
-#endif
diff --git a/keyboards/clueboard/66/rev3/rev3.c b/keyboards/clueboard/66/rev3/rev3.c
index 713d998e6d..195a21a9e8 100644
--- a/keyboards/clueboard/66/rev3/rev3.c
+++ b/keyboards/clueboard/66/rev3/rev3.c
@@ -8,10 +8,6 @@ void matrix_init_kb(void) {
// runs once when the firmware starts up
matrix_init_user();
led_init_ports();
-
- // JTAG disable for PORT F. write JTD bit twice within four cycles.
- MCUCR |= (1<<JTD);
- MCUCR |= (1<<JTD);
}
diff --git a/keyboards/clueboard/66/rev3/rev3.h b/keyboards/clueboard/66/rev3/rev3.h
index 0f322a5c00..86688c7a15 100644
--- a/keyboards/clueboard/66/rev3/rev3.h
+++ b/keyboards/clueboard/66/rev3/rev3.h
@@ -1,7 +1,6 @@
-#ifndef REV3_H
-#define REV3_H
+#pragma once
-#include "66.h"
+#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
@@ -30,7 +29,7 @@
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
+#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
@@ -48,7 +47,6 @@
{ k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
-#define KEYMAP LAYOUT
/* LAYOUT_66_ansi, standard 66 key ANSI layout
*/
@@ -92,4 +90,5 @@
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
-#endif
+#define KEYMAP LAYOUT_all
+#define LAYOUT LAYOUT_all
diff --git a/keyboards/clueboard/66/rev3/rules.mk b/keyboards/clueboard/66/rev3/rules.mk
index 54a2685bf6..8c1836351f 100644
--- a/keyboards/clueboard/66/rev3/rules.mk
+++ b/keyboards/clueboard/66/rev3/rules.mk
@@ -1 +1,23 @@
-BACKLIGHT_ENABLE = yes \ No newline at end of file
+LAYOUTS = 66_ansi 66_iso
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# comment out to disable the options.
+#
+BACKLIGHT_ENABLE = yes
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/planck/rev6/chconf.h b/keyboards/clueboard/66/rev4/chconf.h
index 1d9f12ff1f..1d9f12ff1f 100644
--- a/keyboards/planck/rev6/chconf.h
+++ b/keyboards/clueboard/66/rev4/chconf.h
diff --git a/keyboards/clueboard/66/rev4/config.h b/keyboards/clueboard/66/rev4/config.h
new file mode 100644
index 0000000000..19a9837a32
--- /dev/null
+++ b/keyboards/clueboard/66/rev4/config.h
@@ -0,0 +1,83 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC1ED
+#define PRODUCT_ID 0x2390
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Clueboard
+#define PRODUCT Clueboard 66% rev4
+#define DESCRIPTION QMK keyboard firmware for Clueboard
+
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+/* ROWS: Top to bottom, COLS: Left to right
+*/
+#define MATRIX_ROW_PINS { B11, A6, A3, A2, A1, B7, B6, C15, C14, C13 }
+#define MATRIX_COL_PINS { B10, B2, B1, B0, A7, B4, B3, B5 }
+#define UNUSED_PINS { B15, B14, B13, B12, B9, B8, A15, A10, A9, A8 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+ /* Backlight configuration
+ */
+#define BACKLIGHT_LEVELS 1
+
+/* Underlight configuration
+ */
+#define RGB_DI_PIN D7
+#define RGBLED_NUM 18 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 32
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
+#define RGBLIGHT_EFFECT_BREATHE_MAX 200
+#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2
+#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3 // How many LEDs wide to light up
+#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2 // The led to start at
+#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 5 // How many LEDs to travel
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4 // How many LEDs wide to light up
diff --git a/keyboards/proton_c/halconf.h b/keyboards/clueboard/66/rev4/halconf.h
index 8fe8e0c6f5..e617fdffc7 100644
--- a/keyboards/proton_c/halconf.h
+++ b/keyboards/clueboard/66/rev4/halconf.h
@@ -146,7 +146,7 @@
* @brief Enables the SERIAL over USB subsystem.
*/
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
-#define HAL_USE_SERIAL_USB TRUE
+#define HAL_USE_SERIAL_USB FALSE
#endif
/**
diff --git a/keyboards/proton_c/mcuconf.h b/keyboards/clueboard/66/rev4/mcuconf.h
index 7c3c6e570c..94cb540ec9 100644
--- a/keyboards/proton_c/mcuconf.h
+++ b/keyboards/clueboard/66/rev4/mcuconf.h
@@ -183,8 +183,8 @@
*/
#define STM32_PWM_USE_ADVANCED FALSE
#define STM32_PWM_USE_TIM1 FALSE
-#define STM32_PWM_USE_TIM2 TRUE
-#define STM32_PWM_USE_TIM3 TRUE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
#define STM32_PWM_USE_TIM4 FALSE
#define STM32_PWM_USE_TIM8 FALSE
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
@@ -197,7 +197,7 @@
* SERIAL driver system settings.
*/
#define STM32_SERIAL_USE_USART1 FALSE
-#define STM32_SERIAL_USE_USART2 TRUE
+#define STM32_SERIAL_USE_USART2 FALSE
#define STM32_SERIAL_USE_USART3 FALSE
#define STM32_SERIAL_USE_UART4 FALSE
#define STM32_SERIAL_USE_UART5 FALSE
diff --git a/keyboards/clueboard/66/rev4/readme.md b/keyboards/clueboard/66/rev4/readme.md
new file mode 100644
index 0000000000..ba0afff781
--- /dev/null
+++ b/keyboards/clueboard/66/rev4/readme.md
@@ -0,0 +1,15 @@
+# Clueboard 66%
+
+![Clueboard](https://i.imgur.com/hLePwJu.jpg)
+
+A fully customizable 66% keyboard.
+
+* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
+* Hardware Supported: Clueboard 66% PCB rev4 (stm32f303cc, PCB Version 3.0)
+* Hardware Availability: [clueboard.co](https://clueboard.co/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make clueboard/66/rev4:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/clueboard/66/rev4/rev4.c b/keyboards/clueboard/66/rev4/rev4.c
new file mode 100644
index 0000000000..041c31cd32
--- /dev/null
+++ b/keyboards/clueboard/66/rev4/rev4.c
@@ -0,0 +1,76 @@
+#include "rev4.h"
+//#include "backlight.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ led_init_ports();
+}
+
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+void backlight_init_ports(void) {
+ print("init_backlight_pin()\n");
+ // Set our LED pins as output
+ //DDRD |= (1<<6); // Esc
+ //DDRB |= (1<<7); // Page Up
+ //DDRD |= (1<<4); // Arrows
+
+ // Set our LED pins low
+ //PORTD &= ~(1<<6); // Esc
+ //PORTB &= ~(1<<7); // Page Up
+ //PORTD &= ~(1<<4); // Arrows
+}
+
+void backlight_set(uint8_t level) {
+/*
+ if ( level == 0 ) {
+ // Turn off light
+ PORTD |= (1<<6); // Esc
+ PORTB |= (1<<7); // Page Up
+ PORTD |= (1<<4); // Arrows
+ } else {
+ // Turn on light
+ PORTD &= ~(1<<6); // Esc
+ PORTB &= ~(1<<7); // Page Up
+ PORTD &= ~(1<<4); // Arrows
+ }
+*/
+}
+
+void led_init_ports() {
+ // Set our LED pins as output
+ palSetPadMode(GPIOB, 13, PAL_MODE_OUTPUT_PUSHPULL); // LED1
+ palClearPad(GPIOB, 13);
+ palSetPadMode(GPIOB, 14, PAL_MODE_OUTPUT_PUSHPULL); // LED2
+ palClearPad(GPIOB, 14);
+ palSetPadMode(GPIOA, 8, PAL_MODE_OUTPUT_PUSHPULL); // LED3
+ palClearPad(GPIOA, 8);
+ palSetPadMode(GPIOA, 0, PAL_MODE_OUTPUT_PUSHPULL); // Capslock LED
+ palClearPad(GPIOA, 0);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ palSetPad(GPIOB, 13); // LED1
+ } else {
+ palClearPad(GPIOB, 13); // LED1
+ }
+
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ palSetPad(GPIOA, 0); // Capslock LED
+ palSetPad(GPIOB, 14); // LED2
+ } else {
+ palClearPad(GPIOA, 0); // Capslock LED
+ palClearPad(GPIOB, 14); // LED2
+ }
+
+ if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ palSetPad(GPIOA, 8); // LED3
+ } else {
+ palClearPad(GPIOA, 8); // LED3
+ }
+}
diff --git a/keyboards/clueboard/66/rev4/rev4.h b/keyboards/clueboard/66/rev4/rev4.h
new file mode 100644
index 0000000000..86688c7a15
--- /dev/null
+++ b/keyboards/clueboard/66/rev4/rev4.h
@@ -0,0 +1,94 @@
+#pragma once
+
+#include "quantum.h"
+
+/* Clueboard matrix layout
+ * ,-----------------------------------------------------------. ,---.
+ * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 55| 56| | 57|
+ * |-----------------------------------------------------------| |---|
+ * | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
+ * |-----------------------------------------------------------| `---'
+ * | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
+ * |------------------------------------------------------------.
+ * | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
+ * |------------------------------------------------------------------.
+ * | 40| 41| 42| 43| 45| 46| 90| 92| 93| 94| 95| 96| 97|
+ * `------------------------------------------------------------------'
+ * ,-----------------------------------------------------------. ,---.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
+ * |-----------------------------------------------------------| |---|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
+ * |-----------------------------------------------------------| `---'
+ * |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
+ * |--------------------------------------------------------------.
+ * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
+ * |------------------------------------------------------------------.
+ * |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
+ * `------------------------------------------------------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
+ k40, k41, k42, k43, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, k43, KC_NO, k45, k46, KC_NO }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
+ { k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
+ { k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
+ { k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
+}
+
+/* LAYOUT_66_ansi, standard 66 key ANSI layout
+ */
+#define LAYOUT_66_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
+ k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
+ k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27 }, \
+ { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
+ { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
+ { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
+ { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
+ { KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
+}
+
+/* LAYOUT_66_iso, standard 67 key ISO layout
+ */
+#define LAYOUT_66_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k67, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
+ k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
+ { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
+ { k60, k61, k62, k63, k64, KC_NO, KC_NO, k67 }, \
+ { k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
+ { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
+ { KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
+}
+
+#define KEYMAP LAYOUT_all
+#define LAYOUT LAYOUT_all
diff --git a/keyboards/clueboard/66/rev4/rules.mk b/keyboards/clueboard/66/rev4/rules.mk
new file mode 100644
index 0000000000..846b1eee0b
--- /dev/null
+++ b/keyboards/clueboard/66/rev4/rules.mk
@@ -0,0 +1,32 @@
+LAYOUTS = 66_ansi 66_iso
+
+## chip/board settings
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F3xx
+MCU_LDSCRIPT = STM32F303xC
+MCU_STARTUP = stm32f3xx
+BOARD = GENERIC_STM32_F303XC
+MCU = cortex-m4
+ARMV = 7
+USE_FPU = yes
+OPT_DEFS =
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+# comment out to disable the options.
+#
+BACKLIGHT_ENABLE = yes
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = yes
diff --git a/keyboards/clueboard/66/rules.mk b/keyboards/clueboard/66/rules.mk
deleted file mode 100644
index c5f8b5c112..0000000000
--- a/keyboards/clueboard/66/rules.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-DEFAULT_FOLDER = clueboard/66/rev2
-LAYOUTS = 66_ansi 66_iso
-MCU = atmega32u4
-F_CPU = 16000000
-ARCH = AVR8
-F_USB = $(F_CPU)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
-MIDI_ENABLE = no # MIDI controls
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-LAYOUTS = 66_ansi
diff --git a/keyboards/clueboard/66_hotswap/config.h b/keyboards/clueboard/66_hotswap/config.h
index 97da92cfd4..d676af0ca8 100644
--- a/keyboards/clueboard/66_hotswap/config.h
+++ b/keyboards/clueboard/66_hotswap/config.h
@@ -16,6 +16,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
+
#include "config_common.h"
/* USB Device descriptor parameter */
diff --git a/keyboards/clueboard/66_hotswap/gen1/config.h b/keyboards/clueboard/66_hotswap/gen1/config.h
index 14188634b3..d5d36d4a1c 100644
--- a/keyboards/clueboard/66_hotswap/gen1/config.h
+++ b/keyboards/clueboard/66_hotswap/gen1/config.h
@@ -1,4 +1,5 @@
#pragma once
+
#include "config_common.h"
#define PRODUCT_ID 0x2390
@@ -8,17 +9,9 @@
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
-// ROWS: Top to bottom, COLS: Left to right
-/* Row pin configuration
-* row: 0 1 2 3 4 5 6 7 8 9
-* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2
+/* ROWS: Top to bottom, COLS: Left to right
*/
-
#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
-/* Column pin configuration
- * col: 0 1 2 3 4 5 6 7
- * pin: F0 F1 F4 F5 F6 F7 E6 B1
- */
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
#define UNUSED_PINS
diff --git a/keyboards/clueboard/66_hotswap/gen1/gen1.h b/keyboards/clueboard/66_hotswap/gen1/gen1.h
index 2d0a9d3977..e71994f9c0 100644
--- a/keyboards/clueboard/66_hotswap/gen1/gen1.h
+++ b/keyboards/clueboard/66_hotswap/gen1/gen1.h
@@ -3,65 +3,65 @@
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
- * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 56 | | 57|
+ * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 56| | 57|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
* |-----------------------------------------------------------| `---'
- * | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
- * |------------------------------------------------------------.
- * | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
- * |------------------------------------------------------------------.
- * | 40| 41| 42| 43| 45| 46| 90| 92| 93| 94| 95| 96| 97|
- * `------------------------------------------------------------------'
+ * | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 75|
+ * |-------------------------------------------------------------.
+ * | 30| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 85| 86|
+ * |-----------------------------------------------------------------.
+ * | 40| 41| 42| 45| 46| 90| 92| 93| 94| 95| 96| 97|
+ * `-----------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '|Enter |
- * |--------------------------------------------------------------.
- * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
- * |------------------------------------------------------------------.
- * |Ctrl|Alt|Gui | Space| Space|Gui |Alt |Fn |Ctrl|Left|Down|Rgt|
- * `------------------------------------------------------------------'
+ * |-------------------------------------------------------------.
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |
+ * |-----------------------------------------------------------------.
+ * |Ctrl|Alt |Gui | Space| Space|Gui |Alt |Fn |Ctrl|Lft|Dwn|Rgt|
+ * `-----------------------------------------------------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
- k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
- k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
- k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
- k40, k41, k42, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
+ k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
+ k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
+ k40, k41, k42, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
) { \
- { k00, k01, k02, k03, k04, k05, k06, k07 }, \
- { k10, k11, k12, k13, k14, k15, k16, k17 }, \
- { k20, k21, k22, k23, k24, k25, k26, k27 }, \
- { k30, k31, k32, k33, k34, k35, k36, k37 }, \
- { k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
- { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
- { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
- { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
- { k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
- { k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
+ { k00, k01, k02, k03, k04, k05, k06, k07 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27 }, \
+ { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
+ { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
+ { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
+ { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
+ { k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
#define LAYOUT_66_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
- k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
- k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
- k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
- k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
+ k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
+ k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
+ k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
) { \
- { k00, k01, k02, k03, k04, k05, k06, k07 }, \
- { k10, k11, k12, k13, k14, k15, k16, k17 }, \
- { k20, k21, k22, k23, k24, k25, k26, k27 }, \
- { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
- { k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
- { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
- { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
- { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
- { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
- { KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
+ { k00, k01, k02, k03, k04, k05, k06, k07 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27 }, \
+ { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
+ { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
+ { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
+ { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
+ { KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
diff --git a/keyboards/clueboard/66_hotswap/info.json b/keyboards/clueboard/66_hotswap/info.json
index 42fbeceddd..04a748764c 100644
--- a/keyboards/clueboard/66_hotswap/info.json
+++ b/keyboards/clueboard/66_hotswap/info.json
@@ -4,11 +4,22 @@
"height": 5,
"layouts": {
"LAYOUT": {
- "layout": [{"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"}, {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"}, {"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 1, "label": "ISOHASH"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"}, {"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 1, "label": "JPBACKSLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"}, {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}]
+ "layout": [
+ {"x": 0, "y": 0, "label": "GRAVE"}, {"x": 1, "y": 0, "label": "1"}, {"x": 2, "y": 0, "label": "2"}, {"x": 3, "y": 0, "label": "3"}, {"x": 4, "y": 0, "label": "4"}, {"x": 5, "y": 0, "label": "5"}, {"x": 6, "y": 0, "label": "6"}, {"x": 7, "y": 0, "label": "7"}, {"x": 8, "y": 0, "label": "8"}, {"x": 9, "y": 0, "label": "9"}, {"x": 10, "y": 0, "label": "0"}, {"x": 11, "y": 0, "label": "DASH"}, {"x": 12, "y": 0, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 2, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "label": "PAGEUP"},
+ {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "label": "Q"}, {"x": 2.5, "y": 1, "label": "W"}, {"x": 3.5, "y": 1, "label": "E"}, {"x": 4.5, "y": 1, "label": "R"}, {"x": 5.5, "y": 1, "label": "T"}, {"x": 6.5, "y": 1, "label": "Y"}, {"x": 7.5, "y": 1, "label": "U"}, {"x": 8.5, "y": 1, "label": "I"}, {"x": 9.5, "y": 1, "label": "O"}, {"x": 10.5, "y": 1, "label": "P"}, {"x": 11.5, "y": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "label": "PAGEDOWN"},
+ {"x": 0, "y": 2, "w": 1.75, "label": "CAPS LOCK"}, {"x": 1.75, "y": 2, "label": "A"}, {"x": 2.75, "y": 2, "label": "S"}, {"x": 3.75, "y": 2, "label": "D"}, {"x": 4.75, "y": 2, "label": "F"}, {"x": 5.75, "y": 2, "label": "G"}, {"x": 6.75, "y": 2, "label": "H"}, {"x": 7.75, "y": 2, "label": "J"}, {"x": 8.75, "y": 2, "label": "K"}, {"x": 9.75, "y": 2, "label": "L"}, {"x": 10.75, "y": 2, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 2.25, "label": "ENTER"},
+ {"x": 0, "y": 3, "w": 2.25, "label": "LSHIFT"}, {"x": 2.25, "y": 3, "label": "Z"}, {"x": 3.25, "y": 3, "label": "X"}, {"x": 4.25, "y": 3, "label": "C"}, {"x": 5.25, "y": 3, "label": "V"}, {"x": 6.25, "y": 3, "label": "B"}, {"x": 7.25, "y": 3, "label": "N"}, {"x": 8.25, "y": 3, "label": "M"}, {"x": 9.25, "y": 3, "label": "COMMA"}, {"x": 10.25, "y": 3, "label": "PERIOD"}, {"x": 11.25, "y": 3, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 2.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "label": "UP"},
+ {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1.25, "label": "LGUI"}, {"x": 2.5, "y": 4, "w": 1.25, "label": "LALT"}, {"x": 3.75, "y": 4, "w": 2.75, "label": "SPACE1"}, {"x": 6.5, "y": 4, "w": 2.25, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "RGUI"}, {"x": 10, "y": 4, "w": 1.25, "label": "RALT"}, {"x": 11.25, "y": 4, "label": "FN"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "RCTRL"}, {"x": 13.5, "y": 4, "label": "LEFT"}, {"x": 14.5, "y": 4, "label": "DOWN"}, {"x": 15.5, "y": 4, "label": "RIGHT"}
+ ]
},
-
"LAYOUT_66_ansi": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"x":14.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}]
+ "layout": [
+ {"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"label": "BACKSPACE", "x": 13, "y": 0, "w": 2}, {"label": "PAGEUP", "x": 15.5, "y": 0},
+ {"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5}, {"label": "PAGEDOWN", "x": 15.5, "y": 1},
+ {"label": "CAPS LOCK", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": "SEMICOLON", "x": 10.75, "y": 2}, {"label": "QUOTE", "x": 11.75, "y": 2}, {"label": "ENTER", "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "LSHIFT", "x": 0, "y": 3, "w": 2.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "COMMA", "x": 9.25, "y": 3}, {"label": "PERIOD", "x": 10.25, "y": 3}, {"label": "SLASH", "x": 11.25, "y": 3}, {"label": "RSHIFT", "x": 12.25, "y": 3, "w": 2.25}, {"label": "UP", "x": 14.5, "y": 3},
+ {"label": "LCTRL", "x": 0, "y": 4, "w": 1.25}, {"label": "LGUI", "x": 1.25, "y": 4, "w": 1.25}, {"label": "LALT", "x": 2.5, "y": 4, "w": 1.25}, {"label": "SPACE", "x": 3.75, "y": 4, "w": 6.25}, {"label": "RALT", "x": 10, "y": 4, "w": 1.25}, {"label": "RGUI", "x": 11.25, "y": 4}, {"label": "FN", "x": 12.25, "y": 4, "w": 1.25}, {"label": "LEFT", "x": 13.5, "y": 4}, {"label": "DOWN", "x": 14.5, "y": 4}, {"label": "RIGHT", "x": 15.5, "y": 4}
+ ]
}
}
}
diff --git a/keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c b/keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c
index 977a3501b1..224362fe54 100644
--- a/keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c
+++ b/keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c
@@ -1,4 +1,4 @@
-#include "66_hotswap.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/66_hotswap/keymaps/default/keymap.c b/keyboards/clueboard/66_hotswap/keymaps/default/keymap.c
index 240eb0e970..94f2ec0c40 100644
--- a/keyboards/clueboard/66_hotswap/keymaps/default/keymap.c
+++ b/keyboards/clueboard/66_hotswap/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-#include "66_hotswap.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -13,7 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_GESC,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_PGUP, \
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, \
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_LSFT,MO(_FL),KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,MO(_FL), KC_RSFT, KC_UP, \
+ 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_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_SPC, KC_RGUI,KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
/* Keymap _FL: Function Layer
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_VOLU, \
_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD, \
_______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
- _______,MO(_FL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,MO(_FL),_______, KC_PGUP, \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_PGUP, \
_______,_______,_______, _______,_______, _______,_______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
/* Keymap _CL: Control layer
@@ -31,6 +31,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______, RGB_TOG, RGB_VAI, \
_______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD, \
_______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
- _______,MO(_FL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,MO(_FL),_______, RGB_SAI, \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, RGB_SAI, \
_______,_______,_______, RGB_MOD,RGB_MOD, _______,_______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
};
diff --git a/keyboards/clueboard/66_hotswap/readme.md b/keyboards/clueboard/66_hotswap/readme.md
index 014c761b02..036df01c64 100644
--- a/keyboards/clueboard/66_hotswap/readme.md
+++ b/keyboards/clueboard/66_hotswap/readme.md
@@ -1,16 +1,16 @@
# Clueboard 66% HotSwap
-![Clueboard](https://static1.squarespace.com/static/55c13bdee4b099be5dcb82eb/t/5867eeaad2b857fd0d196f4b/1494021396651/IMGP4201.jpg?format=1500w)
+![Clueboard](https://i.imgur.com/8UmBoNx.jpg)
A fully customizable 66% keyboard with Hot Swap sockets.
* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
* Hardware Supported: Clueboard 66% HotSwap PCB
- * 2.9
+ * 2.9 (gen1)
* Hardware Availability: [clueboard.co](https://clueboard.co/)
Make example for this keyboard (after setting up your build environment):
- make clueboard/66_hotswap:default
+ make clueboard/66_hotswap/gen1:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/clueboard/card/card.h b/keyboards/clueboard/card/card.h
index 3342a08233..a09285eb04 100644
--- a/keyboards/clueboard/card/card.h
+++ b/keyboards/clueboard/card/card.h
@@ -1,22 +1,19 @@
-#ifndef CLUECARD_H
-#define CLUECARD_H
+#pragma once
#include "quantum.h"
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
-#define KEYMAP( \
- k00, k01, k02, \
- k10, k12, \
- k20, k21, k22, \
- k11, \
- k30, k31, k32 \
+#define LAYOUT( \
+ k00, k01, k02, \
+ k10, k12, \
+ k20, k21, k22, \
+ k11, \
+ k30, k31, k32 \
) { \
{ k00, k01, k02, }, \
{ k10, k11, k12, }, \
{ k20, k21, k22, }, \
{ k30, k31, k32, } \
}
-
-#endif
diff --git a/keyboards/clueboard/card/config.h b/keyboards/clueboard/card/config.h
index 6520eb5574..8059821213 100644
--- a/keyboards/clueboard/card/config.h
+++ b/keyboards/clueboard/card/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -32,15 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROWS 4
#define MATRIX_COLS 3
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
+/* Keyboard Matrix Assignments
*/
#define MATRIX_ROW_PINS { F0, F5, F4, B4 }
#define MATRIX_COL_PINS { F1, F7, F6 }
@@ -163,5 +154,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/clueboard/card/info.json b/keyboards/clueboard/card/info.json
new file mode 100644
index 0000000000..86dbb4faa7
--- /dev/null
+++ b/keyboards/clueboard/card/info.json
@@ -0,0 +1,20 @@
+{
+ "keyboard_name": "Cluecard",
+ "keyboard_folder": "clueboard/card",
+ "url": "",
+ "maintainer": "skullydazed",
+ "width": 10,
+ "height": 7,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"ON/OFF", "x":0, "y":0}, {"label":"SAT+", "x":4, "y":0}, {"label":"BRIGHT+", "x":8, "y":0},
+ {"label":"HUE-", "x":2, "y":1}, {"label":"HUE+", "x":6, "y":1},
+ {"label":"MODE", "x":0, "y":2}, {"label":"SAT-", "x":4, "y":2}, {"label":"BRIGHT-", "x":8, "y":2},
+ {"label":"LAYER", "x":2, "y":4},
+
+ {"label":"MX1", "x":4, "y":6, "w":2, "h":2}, {"label":"MX2", "x":6, "y":6, "w":2, "h":2}, {"label":"MX3", "x":8, "y":6, "w":2, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/clueboard/card/keymaps/default/config.h b/keyboards/clueboard/card/keymaps/default/config.h
index 8893d122e0..271f48d001 100644
--- a/keyboards/clueboard/card/keymaps/default/config.h
+++ b/keyboards/clueboard/card/keymaps/default/config.h
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
// place overrides here
-
-#endif
diff --git a/keyboards/clueboard/card/keymaps/default/keymap.c b/keyboards/clueboard/card/keymaps/default/keymap.c
index 5fa6ae20a9..687343e1b7 100644
--- a/keyboards/clueboard/card/keymaps/default/keymap.c
+++ b/keyboards/clueboard/card/keymaps/default/keymap.c
@@ -1,10 +1,7 @@
-#include "card.h"
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = KEYMAP(
+ [0] = LAYOUT(
RGB_TOG, RGB_SAI, RGB_VAI, \
RGB_HUD, RGB_HUI, \
RGB_MOD, RGB_SAD, RGB_VAD, \
diff --git a/keyboards/clueboard/card/keymaps/default/rules.mk b/keyboards/clueboard/card/keymaps/default/rules.mk
index 8ee841da02..3b11f550f9 100644
--- a/keyboards/clueboard/card/keymaps/default/rules.mk
+++ b/keyboards/clueboard/card/keymaps/default/rules.mk
@@ -3,19 +3,15 @@
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = yes # Audio output on port C6
+AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/clueboard/card/keymaps/rgb_effects/config.h b/keyboards/clueboard/card/keymaps/rgb_effects/config.h
index c6c9342c81..0b2a68f544 100644
--- a/keyboards/clueboard/card/keymaps/rgb_effects/config.h
+++ b/keyboards/clueboard/card/keymaps/rgb_effects/config.h
@@ -1,12 +1,7 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
// place overrides here
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2
-
-#endif
diff --git a/keyboards/clueboard/card/keymaps/rgb_effects/keymap.c b/keyboards/clueboard/card/keymaps/rgb_effects/keymap.c
index 15cf5325d0..92d39aef5b 100644
--- a/keyboards/clueboard/card/keymaps/rgb_effects/keymap.c
+++ b/keyboards/clueboard/card/keymaps/rgb_effects/keymap.c
@@ -1,12 +1,12 @@
-#include "card.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = KEYMAP(
+ [0] = LAYOUT(
RGB_TOG, RGB_SAI, RGB_VAI, \
RGB_HUD, RGB_HUI, \
RGB_MOD, RGB_SAD, RGB_VAD, \
BL_STEP, \
- KC_NO, KC_NO, KC_NO \
+ KC_NO, KC_NO, KC_NO \
)
};
diff --git a/keyboards/clueboard/card/keymaps/rgb_effects/rules.mk b/keyboards/clueboard/card/keymaps/rgb_effects/rules.mk
index 00670c0cf4..54d74abbe5 100644
--- a/keyboards/clueboard/card/keymaps/rgb_effects/rules.mk
+++ b/keyboards/clueboard/card/keymaps/rgb_effects/rules.mk
@@ -3,19 +3,15 @@
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/clueboard/card/readme.md b/keyboards/clueboard/card/readme.md
index 27089d465b..20272d236c 100644
--- a/keyboards/clueboard/card/readme.md
+++ b/keyboards/clueboard/card/readme.md
@@ -1,5 +1,7 @@
# Cluecard
+![Cluecard](https://i.imgur.com/dTu0Pzx.jpg)
+
A simple QMK dev kit.
* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
@@ -10,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make clueboard/card:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/clueboard/card/rules.mk b/keyboards/clueboard/card/rules.mk
index 2117c81272..37b439e75a 100644
--- a/keyboards/clueboard/card/rules.mk
+++ b/keyboards/clueboard/card/rules.mk
@@ -1,70 +1,21 @@
-
-
-# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
-# change yes to no to disable
-#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no # USB Nkey Rollover
-RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality by default
-MIDI_ENABLE = no # MIDI controls
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = yes # Audio output on port C6
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # USB Nkey Rollover
+RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality by default
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = yes # Audio output on port C6
diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md
index 226bc079c6..451db3307b 100644
--- a/keyboards/clueboard/readme.md
+++ b/keyboards/clueboard/readme.md
@@ -1,12 +1,13 @@
-![Clueboard Logo](https://static1.squarespace.com/static/55c13bdee4b099be5dcb82eb/t/59c9703318b27d1ab34f40df/1508257572555/)
+![Clueboard Logo](https://i.imgur.com/220uMry.png)
-Clueboard makes fully customizable custom keyboards in a variety of formfactors. Inside this directory you'll find support for the entire line of Clueboard products.
+Clueboard makes fully customizable custom keyboards in a variety of form-factors. Inside this directory you'll find support for the entire line of Clueboard products.
* Maintainer: [Zach White](https://github.com/skullydazed)
* Hardware Supported:
* [`17`](17/): Clueboard "Cluepad" PCB
+ * [`2x1800`](2x1800/): Clueboard 2x1800 PCB
* [`60`](60/): Clueboard 60% PCB
* [`66`](66/): Clueboard 66% PCB
- * [`2x1800`](2x1800/): Clueboard 2x1800 PCB
+ * [`66_hotswap`](66/): Clueboard 66% USB-C Hotswappable PCB
* [`card`](card/): Special Cluecard PCB
* Hardware Availability: [clueboard.co](https://clueboard.co/)
diff --git a/keyboards/cod67/keymaps/default/keymap.c b/keyboards/cod67/keymaps/default/keymap.c
index a85dc2c288..9e1273a189 100644
--- a/keyboards/cod67/keymaps/default/keymap.c
+++ b/keyboards/cod67/keymaps/default/keymap.c
@@ -26,10 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/cod67/readme.md b/keyboards/cod67/readme.md
index 9471a2034e..5e64ff7588 100644
--- a/keyboards/cod67/readme.md
+++ b/keyboards/cod67/readme.md
@@ -20,7 +20,7 @@ Make example for this keyboard (after setting up your build environment):
make cod67:default:bin
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Rename the resulting `.bin` file to `cod67.bin`.
diff --git a/keyboards/comet46/keymaps/satt/rules.mk b/keyboards/comet46/keymaps/satt/rules.mk
index 5839b778b8..91609dd4fd 100644
--- a/keyboards/comet46/keymaps/satt/rules.mk
+++ b/keyboards/comet46/keymaps/satt/rules.mk
@@ -5,3 +5,4 @@ SRC += ./lib/glcdfont.c \
./lib/keylogger.c \
./lib/modifier_state_reader.c \
./lib/host_led_state_reader.c
+
diff --git a/keyboards/contra/keymaps/dana/rules.mk b/keyboards/contra/keymaps/dana/rules.mk
index 1198f378a8..cf891fad35 100644
--- a/keyboards/contra/keymaps/dana/rules.mk
+++ b/keyboards/contra/keymaps/dana/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/contra/keymaps/losinggeneration/rules.mk b/keyboards/contra/keymaps/losinggeneration/rules.mk
index ea2b7165d9..17ef684830 100644
--- a/keyboards/contra/keymaps/losinggeneration/rules.mk
+++ b/keyboards/contra/keymaps/losinggeneration/rules.mk
@@ -12,6 +12,3 @@ MIDI_ENABLE = no # MIDI controls
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/contra/keymaps/maxr1998/rules.mk b/keyboards/contra/keymaps/maxr1998/rules.mk
index 75a476114f..e1ba074290 100644
--- a/keyboards/contra/keymaps/maxr1998/rules.mk
+++ b/keyboards/contra/keymaps/maxr1998/rules.mk
@@ -9,6 +9,3 @@ MOUSEKEY_ENABLE = no
CONSOLE_ENABLE = no # yes
COMMAND_ENABLE = no
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/contra/readme.md b/keyboards/contra/readme.md
index c1915a811d..f16598581e 100644
--- a/keyboards/contra/readme.md
+++ b/keyboards/contra/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make contra:dana
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/converter/sun_usb/readme.md b/keyboards/converter/sun_usb/readme.md
index 3470e6091c..69bc6ef04c 100644
--- a/keyboards/converter/sun_usb/readme.md
+++ b/keyboards/converter/sun_usb/readme.md
@@ -12,7 +12,7 @@ Make example for this keyboard (after setting up your build environment):
make converter/sun_usb/type5:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Hardware
diff --git a/keyboards/converter/usb_usb/README.md b/keyboards/converter/usb_usb/README.md
index faee7a5fd8..64334a85fb 100644
--- a/keyboards/converter/usb_usb/README.md
+++ b/keyboards/converter/usb_usb/README.md
@@ -11,7 +11,7 @@ Make example for this keyboard (after setting up your build environment):
make converter/usb_usb:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Note that you have to choose the right hardware variant as your subproject, otherwise you will probably have issues.
diff --git a/keyboards/cospad/keymaps/default/keymap.c b/keyboards/cospad/keymaps/default/keymap.c
index 3cea2f8e63..f066ad677d 100644
--- a/keyboards/cospad/keymaps/default/keymap.c
+++ b/keyboards/cospad/keymaps/default/keymap.c
@@ -63,11 +63,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_P0, RESET, KC_PENT),
};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = MO(_FL),
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case BL_TOGG:
diff --git a/keyboards/crawlpad/config.h b/keyboards/crawlpad/config.h
index c72be83f28..a6d7ac2147 100755
--- a/keyboards/crawlpad/config.h
+++ b/keyboards/crawlpad/config.h
@@ -1,5 +1,4 @@
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -46,4 +45,3 @@
#define RGBLED_NUM 3
#endif
-#endif
diff --git a/keyboards/crawlpad/crawlpad.h b/keyboards/crawlpad/crawlpad.h
index 74416c6b1a..572907c256 100755
--- a/keyboards/crawlpad/crawlpad.h
+++ b/keyboards/crawlpad/crawlpad.h
@@ -1,9 +1,8 @@
-#ifndef KB_H
-#define KB_H
+#pragma once
#include "quantum.h"
-#define KEYMAP( \
+#define LAYOUT_ortho_4x4( \
K00, K01, K02, K03, \
K10, K11, K12, K13, \
K20, K21, K22, K23, \
@@ -15,4 +14,3 @@
{ K30, K31, K32, K33 } \
}
-#endif \ No newline at end of file
diff --git a/keyboards/crawlpad/crawlpad.json b/keyboards/crawlpad/crawlpad.json
deleted file mode 100644
index 3a6eb553d2..0000000000
--- a/keyboards/crawlpad/crawlpad.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":1,"keyboard":{"keys":[{"id":0,"legend":"7\nHome\n\n\n\n\n\nNLCK","state":{"x":0,"y":1,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000\n\n\n\n\n\n\n#0015d4","fa":[0,1,0,0,0,0,0,1]},"row":0,"col":0,"keycodes":[{"id":"KC_P7","fields":[]},{"id":"KC_NLCK","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":1,"legend":"8\n↑\n\n\n\n\n\nBL1","state":{"x":1,"y":1,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000\n\n\n\n\n\n\n#0015d4","fa":[0,0,0,0,0,0,0,1]},"row":0,"col":1,"keycodes":[{"id":"KC_P8","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":2,"legend":"9\nPgUp","state":{"x":2,"y":1,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1]},"row":0,"col":2,"keycodes":[{"id":"KC_P9","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":3,"legend":"+\n\n\n\n\n\n\n/","state":{"x":3,"y":1,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000\n\n\n#020ad1\n\n\n\n#0015d4","fa":[0,0,0,0,0,0,0,1],"f":3},"row":0,"col":3,"keycodes":[{"id":"KC_PPLS","fields":[]},{"id":"KC_PSLS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":4,"legend":"4\n←","state":{"x":0,"y":2,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":1,"col":0,"keycodes":[{"id":"KC_P4","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":5,"legend":"5\n\n\n\n\n\n\nBL2","state":{"x":1,"y":2,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000\n\n\n\n\n\n\n#0015d4","fa":[0,0,0,0,0,0,0,1],"f":3},"row":1,"col":1,"keycodes":[{"id":"KC_P5","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":6,"legend":"6\n→","state":{"x":2,"y":2,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":1,"col":2,"keycodes":[{"id":"KC_P6","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":7,"legend":"-","state":{"x":3,"y":2,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":1,"col":3,"keycodes":[{"id":"KC_PMNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":8,"legend":"1\nEnd","state":{"x":0,"y":3,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":2,"col":0,"keycodes":[{"id":"KC_P1","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":9,"legend":"2\n↓\n\n\n\n\n\nBL3","state":{"x":1,"y":3,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000\n\n\n\n\n\n\n#0015d4","fa":[0,0,0,0,0,0,0,1],"f":3},"row":2,"col":1,"keycodes":[{"id":"KC_P2","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":10,"legend":"3\nPgDn","state":{"x":2,"y":3,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":2,"col":2,"keycodes":[{"id":"KC_P3","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":11,"legend":"*","state":{"x":3,"y":3,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":2,"col":3,"keycodes":[{"id":"KC_PAST","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":12,"legend":"Fn","state":{"x":0,"y":4,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":3,"col":0,"keycodes":[{"id":"MO()","fields":[1]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":13,"legend":"0\nIns\n\n\n\n\n\nBL4","state":{"x":1,"y":4,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000\n\n\n\n\n\n\n#0015d4","fa":[0,0,0,0,0,0,0,1],"f":3},"row":3,"col":1,"keycodes":[{"id":"KC_P0","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":14,"legend":".\nDel","state":{"x":2,"y":4,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":3,"col":2,"keycodes":[{"id":"KC_PDOT","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]},{"id":15,"legend":"Enter","state":{"x":3,"y":4,"r":0,"rx":0,"ry":0,"w":1,"h":1,"x2":0,"y2":0,"w2":0,"h2":0,"t":"#000000","fa":[0,0,0,0,0,0,0,1],"f":3},"row":3,"col":3,"keycodes":[{"id":"KC_PENT","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]},{"id":"KC_TRNS","fields":[]}]}],"controller":1,"bounds":{"min":{"x":0,"y":0},"max":{"x":4,"y":4}},"rows":4,"cols":4,"pins":{"row":["F0","F1","F4","F5"],"col":["D4","D5","D6","D7"],"num":null,"caps":null,"scroll":null,"compose":null,"kana":null,"led":null,"rgb":null},"macros":{},"quantum":"void matrix_init_user(void) {\n}\n\nvoid matrix_scan_user(void) {\n}\n\nbool process_record_user(uint16_t keycode, keyrecord_t *record) {\n\treturn true;\n}","settings":{"diodeDirection":1,"name":"Crawlpad","bootloaderSize":2,"rgbNum":0,"backlightLevels":3}}} \ No newline at end of file
diff --git a/keyboards/crawlpad/info.json b/keyboards/crawlpad/info.json
new file mode 100644
index 0000000000..b243ead304
--- /dev/null
+++ b/keyboards/crawlpad/info.json
@@ -0,0 +1,29 @@
+{
+ "keyboard_name": "Crawlpad",
+ "url": "",
+ "maintainer": "colemarkham",
+ "width": 4,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x4": {
+ "layout": [
+ {"label":"7", "x":0, "y":0},
+ {"label":"8", "x":1, "y":0},
+ {"label":"9", "x":2, "y":0},
+ {"label":"+", "x":3, "y":0},
+ {"label":"4", "x":0, "y":1},
+ {"label":"5", "x":1, "y":1},
+ {"label":"6", "x":2, "y":1},
+ {"label":"-", "x":3, "y":1},
+ {"label":"1", "x":0, "y":2},
+ {"label":"2", "x":1, "y":2},
+ {"label":"3", "x":2, "y":2},
+ {"label":"*", "x":3, "y":2},
+ {"label":"Fn", "x":0, "y":3},
+ {"label":"0", "x":1, "y":3},
+ {"label":".", "x":2, "y":3},
+ {"label":"Enter", "x":3, "y":3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/crawlpad/keymaps/default/keymap.c b/keyboards/crawlpad/keymaps/default/keymap.c
index 49d8bfb1c9..ec985739f1 100755
--- a/keyboards/crawlpad/keymaps/default/keymap.c
+++ b/keyboards/crawlpad/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-#include "../../crawlpad.h"
+#include QMK_KEYBOARD_H
enum custom_keycodes {
BL1 = SAFE_RANGE,
@@ -11,17 +11,19 @@ const uint8_t LED_PINS[] = LED_ROW_PINS;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-KEYMAP(
- KC_P7, KC_P8, KC_P9, KC_PPLS,
- KC_P4, KC_P5, KC_P6, KC_PMNS,
- KC_P1, KC_P2, KC_P3, KC_PAST,
- MO(1), KC_P0, KC_PDOT, KC_ENT),
+ [0] = LAYOUT_ortho_4x4(
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PMNS,
+ KC_P1, KC_P2, KC_P3, KC_PAST,
+ MO(1), KC_P0, KC_PDOT, KC_ENT
+ ),
-KEYMAP(
- KC_NLCK, BL1, KC_TRNS, KC_PSLS,
- RESET, BL2, KC_TRNS, KC_TRNS,
- KC_TRNS, BL3, KC_TRNS, KC_TRNS,
- KC_TRNS, BL4, KC_TRNS, KC_TRNS),
+ [1] = LAYOUT_ortho_4x4(
+ KC_NLCK, BL1, KC_TRNS, KC_PSLS,
+ RESET, BL2, KC_TRNS, KC_TRNS,
+ KC_TRNS, BL3, KC_TRNS, KC_TRNS,
+ KC_TRNS, BL4, KC_TRNS, KC_TRNS
+ ),
};
@@ -35,19 +37,6 @@ void set_led(int idx, bool enable) {
}
}
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
-void matrix_init_user(void) {
- /* set LED row pins to output and low */
- DDRB |= (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
- PORTB &= ~(1 << 4) & ~(1 << 5) & ~(1 << 6) & ~(1 << 7);
-}
-
-void matrix_scan_user(void) {
-}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case BL1:
@@ -82,6 +71,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
+void matrix_init_user(void) {
+ /* set LED row pins to output and low */
+ DDRB |= (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
+ PORTB &= ~(1 << 4) & ~(1 << 5) & ~(1 << 6) & ~(1 << 7);
+}
+
+void matrix_scan_user(void) {
+}
+
void led_set_user(uint8_t usb_led) {
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
diff --git a/keyboards/crawlpad/readme.md b/keyboards/crawlpad/readme.md
index 0bdc0f1722..9eb01b7b61 100644
--- a/keyboards/crawlpad/readme.md
+++ b/keyboards/crawlpad/readme.md
@@ -1,6 +1,6 @@
# Crawlpad
-![Crawlpad](https://imgur.com/8BnztWo)
+![Crawlpad](https://i.imgur.com/8BnztWo.jpg)
A 4x4 macropad/numpad, exclusively availabe at Keycrawl events.
@@ -12,6 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make crawlpad:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
-For those that prefer a GUI tool, the crawlpad.json file in this repo can be used on [kbfirmware.com](http://kbfirmware.com). \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/crawlpad/rules.mk b/keyboards/crawlpad/rules.mk
index 63a6d616ae..2dda38e201 100755
--- a/keyboards/crawlpad/rules.mk
+++ b/keyboards/crawlpad/rules.mk
@@ -44,13 +44,15 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= no # Commands for debug and configuration
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= no # [Crawlpad] Custom backlighting code is used, so this should not be enabled
-AUDIO_ENABLE ?= no # [Crawlpad] This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
-RGBLIGHT_ENABLE ?= no # [Crawlpad] This can be enabled if a ws2812 strip is connected to the expansion port. \ No newline at end of file
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # [Crawlpad] Custom backlighting code is used, so this should not be enabled
+AUDIO_ENABLE = no # [Crawlpad] This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
+RGBLIGHT_ENABLE = no # [Crawlpad] This can be enabled if a ws2812 strip is connected to the expansion port.
+
+LAYOUTS = ortho_4x4
diff --git a/keyboards/crkbd/keymaps/omgvee/config.h b/keyboards/crkbd/keymaps/omgvee/config.h
new file mode 100644
index 0000000000..bed797e921
--- /dev/null
+++ b/keyboards/crkbd/keymaps/omgvee/config.h
@@ -0,0 +1,45 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+#define BACKLIGHT_LEVELS 10
diff --git a/keyboards/crkbd/keymaps/omgvee/keymap.c b/keyboards/crkbd/keymaps/omgvee/keymap.c
new file mode 100644
index 0000000000..fbd29e774f
--- /dev/null
+++ b/keyboards/crkbd/keymaps/omgvee/keymap.c
@@ -0,0 +1,239 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ BACKLIT,
+ RGBRST
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+#define KC______ KC_TRNS
+#define KC_XXXXX KC_NO
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+#define KC_RST RESET
+#define KC_LRST RGBRST
+#define KC_LTOG RGB_TOG
+#define KC_LHUI RGB_HUI
+#define KC_LHUD RGB_HUD
+#define KC_LSAI RGB_SAI
+#define KC_LSAD RGB_SAD
+#define KC_LVAI RGB_VAI
+#define KC_LVAD RGB_VAD
+#define KC_LMOD RGB_MOD
+#define KC_SFCPS SFT_T(KC_CAPS)
+#define KC_CTLTB CTL_T(KC_TAB)
+#define KC_GUIEI GUI_T(KC_LANG2)
+#define KC_ALTKN ALT_T(KC_LANG1)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ SFCPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ CTLTB, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ GUIEI, LOWER, ENT, SPC, RAISE, ALTKN \
+ //`--------------------' `--------------------'
+ ),
+
+ [_LOWER] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ SFCPS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, ENT,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ CTLTB, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, RSFT,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ GUIEI, LOWER, ENT, SPC, RAISE, ALTKN \
+ //`--------------------' `--------------------'
+ ),
+
+ [_RAISE] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ TAB, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ SFCPS, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, MINS, EQL, LCBR, RCBR, PIPE, BSLS,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ CTLTB, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, UNDS, PLUS, LBRC, RBRC, SLSH, RSFT,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ GUIEI, LOWER, ENT, SPC, RAISE, ALTKN \
+ //`--------------------' `--------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, LEFT, DOWN, UP, RIGHT, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, BRID, BRIU, VOLD, VOLU, MUTE, XXXXX,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ GUIEI, LOWER, ENT, SPC, RAISE, ALTKN \
+ //`--------------------' `--------------------'
+ )
+};
+
+int RGB_current_mode;
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+// const char *read_mode_icon(bool swap);
+// const char *read_host_led_state(void);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (is_master) {
+ // If you want to change the display of OLED, you need to change here
+ matrix_write_ln(matrix, read_layer_state());
+ matrix_write_ln(matrix, read_keylog());
+ matrix_write_ln(matrix, read_keylogs());
+ //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
+ //matrix_write_ln(matrix, read_host_led_state());
+ //matrix_write_ln(matrix, read_timelog());
+ } else {
+ matrix_write(matrix, read_logo());
+ }
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ matrix_render_user(&matrix);
+ matrix_update(&display, &matrix);
+}
+#endif//SSD1306OLED
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+#ifdef SSD1306OLED
+ set_keylog(keycode, record);
+#endif
+ // set_timelog();
+ }
+
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ return false;
+ break;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
diff --git a/keyboards/crkbd/keymaps/omgvee/readme.md b/keyboards/crkbd/keymaps/omgvee/readme.md
new file mode 100644
index 0000000000..707f44a9ca
--- /dev/null
+++ b/keyboards/crkbd/keymaps/omgvee/readme.md
@@ -0,0 +1,15 @@
+# Reade.md for what I want from my HeliDox(CRKBD) layout
+======================================================
+
+
+![My beloved HeliDox keeb](https://imgur.com/a/t5m6rmW)
+
+- media keys and media controls
+- in-switch LED intensity controls (+/-)
+- underglow RGB hue/color controls
+- underglow RGB intensity controls
+- familiar key arrangement with Enter and symbols on the usual keys (to the right hand side)
+- navigation keys should be the vim ones really;
+- arrow keys on one layer(most likely on the ADJUST one)
+
+See keymap.c for layouts
diff --git a/keyboards/crkbd/keymaps/omgvee/rules.mk b/keyboards/crkbd/keymaps/omgvee/rules.mk
new file mode 100644
index 0000000000..21ec12ada1
--- /dev/null
+++ b/keyboards/crkbd/keymaps/omgvee/rules.mk
@@ -0,0 +1,31 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/timelogger.c \
diff --git a/keyboards/cu24/readme.md b/keyboards/cu24/readme.md
index 4624c1aa96..ca3f3f5a04 100644
--- a/keyboards/cu24/readme.md
+++ b/keyboards/cu24/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make CU24:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/cu75/keymaps/default/keymap.c b/keyboards/cu75/keymaps/default/keymap.c
index 9fbd41089b..e8abbb6f1f 100644
--- a/keyboards/cu75/keymaps/default/keymap.c
+++ b/keyboards/cu75/keymaps/default/keymap.c
@@ -61,12 +61,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
- };
-
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/cu75/keymaps/default/rules.mk b/keyboards/cu75/keymaps/default/rules.mk
index 39f6eca8b0..fd26d69fb6 100644
--- a/keyboards/cu75/keymaps/default/rules.mk
+++ b/keyboards/cu75/keymaps/default/rules.mk
@@ -23,10 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install thi
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
diff --git a/keyboards/cu75/keymaps/iso/keymap.c b/keyboards/cu75/keymaps/iso/keymap.c
index 7f5952c1c2..0400290846 100644
--- a/keyboards/cu75/keymaps/iso/keymap.c
+++ b/keyboards/cu75/keymaps/iso/keymap.c
@@ -60,12 +60,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
- };
-
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/cu75/keymaps/iso/rules.mk b/keyboards/cu75/keymaps/iso/rules.mk
index f8b4d55689..9407f11034 100644
--- a/keyboards/cu75/keymaps/iso/rules.mk
+++ b/keyboards/cu75/keymaps/iso/rules.mk
@@ -23,10 +23,6 @@ ISSI_ENABLE = no # If the I2C pullup resistors aren't install this
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
diff --git a/keyboards/cu75/readme.md b/keyboards/cu75/readme.md
index a5193bd707..43603440fd 100644
--- a/keyboards/cu75/readme.md
+++ b/keyboards/cu75/readme.md
@@ -14,4 +14,4 @@ Make example for this keyboard (after setting up your build environment):
make CU75:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/daisy/keymaps/default/keymap.c b/keyboards/daisy/keymaps/default/keymap.c
index f1a5e353fa..9a520ba55d 100644
--- a/keyboards/daisy/keymaps/default/keymap.c
+++ b/keyboards/daisy/keymaps/default/keymap.c
@@ -70,10 +70,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LOWER:
diff --git a/keyboards/daisy/readme.md b/keyboards/daisy/readme.md
index 427891d96e..c8175c2830 100644
--- a/keyboards/daisy/readme.md
+++ b/keyboards/daisy/readme.md
@@ -10,7 +10,7 @@ Make example for this keyboard (after setting up your build environment):
make daisy:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
# Other Keymaps
diff --git a/keyboards/dc01/arrow/matrix.c b/keyboards/dc01/arrow/matrix.c
index 68abb6791a..85591f6026 100644
--- a/keyboards/dc01/arrow/matrix.c
+++ b/keyboards/dc01/arrow/matrix.c
@@ -195,14 +195,14 @@ uint8_t matrix_scan(void)
debouncing = false;
}
# endif
-
+
if (USB_DeviceState != DEVICE_STATE_Configured){
- txbuffer[1] = 0x55;
+ i2c_slave_reg[1] = 0x55;
for (uint8_t i = 0; i < MATRIX_ROWS; i++){
- txbuffer[i+2] = matrix[i]; //send matrix over i2c
+ i2c_slave_reg[i+2] = matrix[i]; //send matrix over i2c
}
}
-
+
matrix_scan_quantum();
return 1;
}
@@ -396,9 +396,9 @@ static void unselect_cols(void)
//this replases tmk code
void matrix_setup(void){
-
+
if (USB_DeviceState != DEVICE_STATE_Configured){
- i2c_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
+ i2c_slave_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
sei(); //enable interupts
}
} \ No newline at end of file
diff --git a/keyboards/dc01/arrow/readme.md b/keyboards/dc01/arrow/readme.md
index ae643114ad..4c7178d785 100644
--- a/keyboards/dc01/arrow/readme.md
+++ b/keyboards/dc01/arrow/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make dc01/arrow:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/dc01/left/readme.md b/keyboards/dc01/left/readme.md
index 1613297d09..60b90a8007 100644
--- a/keyboards/dc01/left/readme.md
+++ b/keyboards/dc01/left/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make dc01/left:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/dc01/numpad/matrix.c b/keyboards/dc01/numpad/matrix.c
index f9a9a7f63d..39637241d7 100644
--- a/keyboards/dc01/numpad/matrix.c
+++ b/keyboards/dc01/numpad/matrix.c
@@ -195,14 +195,14 @@ uint8_t matrix_scan(void)
debouncing = false;
}
# endif
-
+
if (USB_DeviceState != DEVICE_STATE_Configured){
- txbuffer[1] = 0x55;
+ i2c_slave_reg[1] = 0x55;
for (uint8_t i = 0; i < MATRIX_ROWS; i++){
- txbuffer[i+2] = matrix[i]; //send matrix over i2c
+ i2c_slave_reg[i+2] = matrix[i]; //send matrix over i2c
}
}
-
+
matrix_scan_quantum();
return 1;
}
@@ -396,9 +396,9 @@ static void unselect_cols(void)
//this replases tmk code
void matrix_setup(void){
-
+
if (USB_DeviceState != DEVICE_STATE_Configured){
- i2c_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
+ i2c_slave_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
sei(); //enable interupts
}
} \ No newline at end of file
diff --git a/keyboards/dc01/numpad/readme.md b/keyboards/dc01/numpad/readme.md
index c50fe6b992..3345b5f368 100644
--- a/keyboards/dc01/numpad/readme.md
+++ b/keyboards/dc01/numpad/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make dc01/numpad:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/dc01/right/matrix.c b/keyboards/dc01/right/matrix.c
index aa2e880d01..50fe19b8d1 100644
--- a/keyboards/dc01/right/matrix.c
+++ b/keyboards/dc01/right/matrix.c
@@ -195,14 +195,14 @@ uint8_t matrix_scan(void)
debouncing = false;
}
# endif
-
+
if (USB_DeviceState != DEVICE_STATE_Configured){
- txbuffer[1] = 0x55;
+ i2c_slave_reg[1] = 0x55;
for (uint8_t i = 0; i < MATRIX_ROWS; i++){
- txbuffer[i+2] = matrix[i]; //send matrix over i2c
+ i2c_slave_reg[i+2] = matrix[i]; //send matrix over i2c
}
}
-
+
matrix_scan_quantum();
return 1;
}
@@ -396,9 +396,9 @@ static void unselect_cols(void)
//this replases tmk code
void matrix_setup(void){
-
+
if (USB_DeviceState != DEVICE_STATE_Configured){
- i2c_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
+ i2c_slave_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
sei(); //enable interupts
}
} \ No newline at end of file
diff --git a/keyboards/dc01/right/readme.md b/keyboards/dc01/right/readme.md
index 32664ebb7e..a934593053 100644
--- a/keyboards/dc01/right/readme.md
+++ b/keyboards/dc01/right/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make dc01/right:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk b/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk
index 75db99ebec..92f24224c7 100644
--- a/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk
+++ b/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk
@@ -2,6 +2,3 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
AUDIO_ENABLE = no # Audio disabled while using RGB underlight.
EXTRAKEY_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/deltasplit75/readme.md b/keyboards/deltasplit75/readme.md
index 990f8902d0..096fced97f 100644
--- a/keyboards/deltasplit75/readme.md
+++ b/keyboards/deltasplit75/readme.md
@@ -11,7 +11,7 @@ Make example for this keyboard (after setting up your build environment):
make deltasplit75/v2:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Files are available here: [DeltaSplit75 Case Files](https://github.com/xyxjj/DeltaSplit75-Case-files)
diff --git a/keyboards/dichotomy/info.json b/keyboards/dichotomy/info.json
index aeb00edce7..4008ce18b7 100644
--- a/keyboards/dichotomy/info.json
+++ b/keyboards/dichotomy/info.json
@@ -6,7 +6,7 @@
"height": 6,
"layouts": {
"LAYOUT": {
- "layout": [{"label":"k00", "x":0, "y":0.5}, {"label":"k01", "x":1, "y":0.5}, {"label":"k02", "x":2, "y":0.25}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0.5}, {"label":"k05", "x":5, "y":0.5}, {"label":"k06", "x":7, "y":0.5}, {"label":"k07", "x":8, "y":0.5}, {"label":"k08", "x":9, "y":0}, {"label":"k09", "x":10, "y":0.25}, {"label":"k0A", "x":11, "y":0.5}, {"label":"k0B", "x":12, "y":0.5}, {"label":"k10", "x":0, "y":1.5}, {"label":"k11", "x":1, "y":1.5}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1}, {"label":"k14", "x":4, "y":1.5}, {"label":"k15", "x":5, "y":1.5}, {"label":"k16", "x":7, "y":1.5}, {"label":"k17", "x":8, "y":1.5}, {"label":"k18", "x":9, "y":1}, {"label":"k19", "x":10, "y":1.25}, {"label":"k1A", "x":11, "y":1.5}, {"label":"k1B", "x":12, "y":1.5}, {"label":"k20", "x":0, "y":2.5}, {"label":"k21", "x":1, "y":2.5}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2}, {"label":"k24", "x":4, "y":2.5}, {"label":"k25", "x":5, "y":2.5}, {"label":"k26", "x":7, "y":2.5}, {"label":"k27", "x":8, "y":2.5}, {"label":"k28", "x":9, "y":2}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2A", "x":11, "y":2.5}, {"label":"k2B", "x":12, "y":2.5}, {"label":"k33", "x":3, "y":4}, {"label":"k34", "x":4, "y":4}, {"label":"k35", "x":5, "y":4}, {"label":"k36", "x":7, "y":4}, {"label":"k37", "x":8, "y":4}, {"label":"k38", "x":9, "y":4}, {"label":"k43", "x":3, "y":5}, {"label":"k44", "x":4, "y":5}, {"label":"k45", "x":5, "y":5}, {"label":"k46", "x":7, "y":5}, {"label":"k47", "x":8, "y":5}, {"label":"k48", "x":9, "y":5}]
+ "layout": [{"label":"k00", "x":0, "y":0.5}, {"label":"k01", "x":1, "y":0.5}, {"label":"k02", "x":2, "y":0.25}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0.5}, {"label":"k05", "x":5, "y":0.5}, {"label":"k06", "x":7, "y":0.5}, {"label":"k07", "x":8, "y":0.5}, {"label":"k08", "x":9, "y":0}, {"label":"k09", "x":10, "y":0.25}, {"label":"k0A", "x":11, "y":0.5}, {"label":"k0B", "x":12, "y":0.5}, {"label":"k10", "x":0, "y":1.5}, {"label":"k11", "x":1, "y":1.5}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1}, {"label":"k14", "x":4, "y":1.5}, {"label":"k15", "x":5, "y":1.5}, {"label":"k16", "x":7, "y":1.5}, {"label":"k17", "x":8, "y":1.5}, {"label":"k18", "x":9, "y":1}, {"label":"k19", "x":10, "y":1.25}, {"label":"k1A", "x":11, "y":1.5}, {"label":"k1B", "x":12, "y":1.5}, {"label":"k20", "x":0, "y":2.5}, {"label":"k21", "x":1, "y":2.5}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2}, {"label":"k24", "x":4, "y":2.5}, {"label":"k25", "x":5, "y":2.5}, {"label":"k26", "x":7, "y":2.5}, {"label":"k27", "x":8, "y":2.5}, {"label":"k28", "x":9, "y":2}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2A", "x":11, "y":2.5}, {"label":"k2B", "x":12, "y":2.5}, {"label":"k33", "x":3, "y":4}, {"label":"k34", "x":4, "y":4}, {"label":"k35", "x":5, "y":4}, {"label":"k36", "x":7, "y":4}, {"label":"k37", "x":8, "y":4}, {"label":"k38", "x":9, "y":4}, {"label":"k42", "x":2, "y":5}, {"label":"k43", "x":3, "y":5}, {"label":"k44", "x":4, "y":5}, {"label":"k45", "x":5, "y":5}, {"label":"k46", "x":7, "y":5}, {"label":"k47", "x":8, "y":5}, {"label":"k48", "x":9, "y":5}, {"label":"k49", "x":10, "y":5}]
}
}
}
diff --git a/keyboards/dichotomy/keymaps/default/keymap.c b/keyboards/dichotomy/keymaps/default/keymap.c
index e44bd21d9e..f3417a3fcd 100755
--- a/keyboards/dichotomy/keymaps/default/keymap.c
+++ b/keyboards/dichotomy/keymaps/default/keymap.c
@@ -87,11 +87,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
static uint16_t special_timers[LONGPRESS_COUNT] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
static bool special_key_states[LONGPRESS_COUNT] = {0,0,0,0};
static bool special_key_pressed[LONGPRESS_COUNT] = {0,0,0,0};
diff --git a/keyboards/dilly/README.md b/keyboards/dilly/README.md
index 866d07ccbb..a676313f3e 100644
--- a/keyboards/dilly/README.md
+++ b/keyboards/dilly/README.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make dilly:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/diverge3/readme.md b/keyboards/diverge3/readme.md
index 43add9d990..45ddaa64cf 100644
--- a/keyboards/diverge3/readme.md
+++ b/keyboards/diverge3/readme.md
@@ -14,7 +14,7 @@ Or for the [Workman](https://github.com/ojbucao/workman) layout:
make diverge3:workman
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
# Reflashing Animus
Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST pins) during the upload step. Then reapply your keymap through Arbites. \ No newline at end of file
diff --git a/keyboards/dk60/readme.md b/keyboards/dk60/readme.md
index 3e6f680615..b9d9b67113 100644
--- a/keyboards/dk60/readme.md
+++ b/keyboards/dk60/readme.md
@@ -12,6 +12,6 @@ Make example for this keyboard (after setting up your build environment):
make dk60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Open Hardware project!
diff --git a/keyboards/do60/keymaps/crd/keymap.c b/keyboards/do60/keymaps/crd/keymap.c
new file mode 100644
index 0000000000..2c83df867f
--- /dev/null
+++ b/keyboards/do60/keymaps/crd/keymap.c
@@ -0,0 +1,33 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL, // Function Layer
+ _CL // Control Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTES CTL_T(KC_ESC)
+#define KC_RSUP RSFT_T(KC_UP)
+#define KC_RGLT RCMD_T(KC_LEFT)
+#define KC_RADN RALT_T(KC_DOWN)
+#define KC_RCRT RCTL_T(KC_RIGHT)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_ansi_split_bs_rshift(
+ 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, XXXXXXX, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CTES, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP, MO(_FL),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, XXXXXXX, KC_RGLT, KC_RADN, KC_RCRT
+ ),
+ [_FL] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_DEL,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
+
diff --git a/keyboards/duck/eagle_viper/readme.md b/keyboards/duck/eagle_viper/readme.md
index ded0fa72e9..14fb166698 100644
--- a/keyboards/duck/eagle_viper/readme.md
+++ b/keyboards/duck/eagle_viper/readme.md
@@ -2,7 +2,7 @@
Non official firmware for custom Korean keyboard with 60% key layout made by Duck.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Newest version is the [Eagle/Viper V2](http://duck0113.tistory.com/127)
diff --git a/keyboards/duck/eagle_viper/v2/config.h b/keyboards/duck/eagle_viper/v2/config.h
index f04b4a0fd3..9c49344ff9 100644
--- a/keyboards/duck/eagle_viper/v2/config.h
+++ b/keyboards/duck/eagle_viper/v2/config.h
@@ -21,9 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6050
-#define DEVICE_VER 0x0104
+#define VENDOR_ID 0x444B // Duck ("DK")
+#define PRODUCT_ID 0x4556 // Eagle/Viper ("EV")
+#define DEVICE_VER 0x0002
#define MANUFACTURER Duck
#define PRODUCT Eagle/Viper V2
#define DESCRIPTION 60% Korean custom keyboard
diff --git a/keyboards/duck/eagle_viper/v2/readme.md b/keyboards/duck/eagle_viper/v2/readme.md
index b613b63b90..32ad8453ca 100644
--- a/keyboards/duck/eagle_viper/v2/readme.md
+++ b/keyboards/duck/eagle_viper/v2/readme.md
@@ -11,7 +11,7 @@ Make example for this keyboard (after setting up your build environment):
make eagle_viper/v2:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Hardware Notes
diff --git a/keyboards/duck/jetfire/config.h b/keyboards/duck/jetfire/config.h
index 80b531fd52..54c5321c6b 100644
--- a/keyboards/duck/jetfire/config.h
+++ b/keyboards/duck/jetfire/config.h
@@ -20,9 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6050
-#define DEVICE_VER 0x0104
+#define VENDOR_ID 0x444B // Duck ("DK")
+#define PRODUCT_ID 0x4A46 // Jetfire ("JF")
+#define DEVICE_VER 0x0001
#define MANUFACTURER Duck
#define PRODUCT Jetfire
#define DESCRIPTION A custom keyboard
diff --git a/keyboards/duck/jetfire/readme.md b/keyboards/duck/jetfire/readme.md
index fe641e622f..34b351a726 100644
--- a/keyboards/duck/jetfire/readme.md
+++ b/keyboards/duck/jetfire/readme.md
@@ -15,4 +15,4 @@ Make example for this keyboard (after setting up your build environment):
make duck/jetfire:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/duck/lightsaver/config.h b/keyboards/duck/lightsaver/config.h
index bc984c7e56..745af4330d 100644
--- a/keyboards/duck/lightsaver/config.h
+++ b/keyboards/duck/lightsaver/config.h
@@ -21,8 +21,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x1337
+#define VENDOR_ID 0x444B // Duck ("DK")
+#define PRODUCT_ID 0x4C53 // Lightsaver ("LS")
#define DEVICE_VER 0x0003
#define MANUFACTURER Duck
#define PRODUCT Lightsaver V3
diff --git a/keyboards/duck/lightsaver/keymaps/rasmus/keymap.c b/keyboards/duck/lightsaver/keymaps/rasmus/keymap.c
index 518ba2d21a..70dc17bb13 100644
--- a/keyboards/duck/lightsaver/keymaps/rasmus/keymap.c
+++ b/keyboards/duck/lightsaver/keymaps/rasmus/keymap.c
@@ -91,9 +91,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {
case SHRG:
diff --git a/keyboards/duck/lightsaver/readme.md b/keyboards/duck/lightsaver/readme.md
index 9d4b453c0d..a77a90111d 100644
--- a/keyboards/duck/lightsaver/readme.md
+++ b/keyboards/duck/lightsaver/readme.md
@@ -13,7 +13,7 @@ Make example for this keyboard (after setting up your build environment):
make lightsaver:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Notes
Thanks to Ralf Schmitt for previous implementations in his [TMK fork](https://github.com/xauser/tmk_keyboard/tree/xauser/) and few helping words.
diff --git a/keyboards/duck/octagon/readme.md b/keyboards/duck/octagon/readme.md
index 7f5b2f7e60..b91a76c706 100644
--- a/keyboards/duck/octagon/readme.md
+++ b/keyboards/duck/octagon/readme.md
@@ -2,7 +2,7 @@
Non official firmware for custom Korean keyboard with 75% key layout made by Duck.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Newest version is the [Octagon V2](http://duck0113.tistory.com/127)
diff --git a/keyboards/duck/octagon/v1/config.h b/keyboards/duck/octagon/v1/config.h
index fbbc8999bb..a2b3d64130 100644
--- a/keyboards/duck/octagon/v1/config.h
+++ b/keyboards/duck/octagon/v1/config.h
@@ -21,9 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6050
-#define DEVICE_VER 0x0104
+#define VENDOR_ID 0x444B // Duck ("DK")
+#define PRODUCT_ID 0x4F31 // Octagon V1 ("O1")
+#define DEVICE_VER 0x0001
#define MANUFACTURER Duck
#define PRODUCT Octagon V1
#define DESCRIPTION Duck Octagon V1
diff --git a/keyboards/duck/octagon/v1/readme.md b/keyboards/duck/octagon/v1/readme.md
index f5cb2d7892..f614b35778 100644
--- a/keyboards/duck/octagon/v1/readme.md
+++ b/keyboards/duck/octagon/v1/readme.md
@@ -11,7 +11,7 @@ Make example for this keyboard (after setting up your build environment):
make duck/octagon/v1:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Hardware Notes
diff --git a/keyboards/duck/octagon/v2/config.h b/keyboards/duck/octagon/v2/config.h
index c916a30a1e..7adcb2760a 100644
--- a/keyboards/duck/octagon/v2/config.h
+++ b/keyboards/duck/octagon/v2/config.h
@@ -21,9 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6050
-#define DEVICE_VER 0x0104
+#define VENDOR_ID 0x444B // Duck ("DK")
+#define PRODUCT_ID 0x4F32 // Octagon V2 ("O2")
+#define DEVICE_VER 0x0002
#define MANUFACTURER Duck
#define PRODUCT Octagon V2
#define DESCRIPTION Duck Octagon V2
diff --git a/keyboards/duck/octagon/v2/readme.md b/keyboards/duck/octagon/v2/readme.md
index 125f09f9cd..b409454fc6 100644
--- a/keyboards/duck/octagon/v2/readme.md
+++ b/keyboards/duck/octagon/v2/readme.md
@@ -11,7 +11,7 @@ Make example for this keyboard (after setting up your build environment):
make octagon/v2:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Hardware Notes
diff --git a/keyboards/dz60/keymaps/muzfuz/README.md b/keyboards/dz60/keymaps/muzfuz/README.md
new file mode 100644
index 0000000000..711d6d5f56
--- /dev/null
+++ b/keyboards/dz60/keymaps/muzfuz/README.md
@@ -0,0 +1,8 @@
+# muzfuz DZ60 layout
+
+```shell
+make dz60:muzfuz
+dfu-programmer atmega32u4 erase --force && \
+dfu-programmer atmega32u4 flash .build/dz60_muzfuz_v2.hex && \
+dfu-programmer atmega32u4 reset
+```
diff --git a/keyboards/dz60/keymaps/muzfuz/keymap.c b/keyboards/dz60/keymaps/muzfuz/keymap.c
new file mode 100644
index 0000000000..848569f61e
--- /dev/null
+++ b/keyboards/dz60/keymaps/muzfuz/keymap.c
@@ -0,0 +1,80 @@
+#include QMK_KEYBOARD_H
+
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+#define ESC_CTL CTL_T(KC_ESCAPE) // Tap for Esc, hold for Ctrl
+
+enum custom_keycodes {
+ HASHRKT = SAFE_RANGE,
+ CLNEQLS,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ 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_BSLS, HASHRKT,
+ 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,
+ ESC_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_RGUI,
+ 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_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_RGHT, KC_DOWN),
+
+ LAYOUT(
+ _______, 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,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 2); PORTB &= ~(1 << 2);
+ } else {
+ DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ switch (keycode)
+ {
+ case HASHRKT:
+ if (record->event.pressed)
+ {
+ SEND_STRING("=>");
+ }
+ break;
+ case CLNEQLS:
+ if (record->event.pressed)
+ {
+ SEND_STRING(":=");
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/dz60/readme.md b/keyboards/dz60/readme.md
index 78b290fbad..a06db93b5f 100644
--- a/keyboards/dz60/readme.md
+++ b/keyboards/dz60/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make dz60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/e6v2/le/readme.md b/keyboards/e6v2/le/readme.md
index 20848a2bc0..844b315681 100644
--- a/keyboards/e6v2/le/readme.md
+++ b/keyboards/e6v2/le/readme.md
@@ -16,4 +16,4 @@ Or to make and flash:
make e6v2/le:default:dfu
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/e6v2/oe/readme.md b/keyboards/e6v2/oe/readme.md
index 3e1c575308..9d5dd62615 100644
--- a/keyboards/e6v2/oe/readme.md
+++ b/keyboards/e6v2/oe/readme.md
@@ -16,4 +16,4 @@ Or to make and flash:
make e6v2/oe:default:dfu
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/eco/keymaps/default/rules.mk b/keyboards/eco/keymaps/default/rules.mk
index 0996602325..83d1175db9 100644
--- a/keyboards/eco/keymaps/default/rules.mk
+++ b/keyboards/eco/keymaps/default/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/eco/keymaps/hexwire/rules.mk b/keyboards/eco/keymaps/hexwire/rules.mk
index 0996602325..83d1175db9 100644
--- a/keyboards/eco/keymaps/hexwire/rules.mk
+++ b/keyboards/eco/keymaps/hexwire/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/eco/keymaps/that_canadian/rules.mk b/keyboards/eco/keymaps/that_canadian/rules.mk
index 0996602325..83d1175db9 100644
--- a/keyboards/eco/keymaps/that_canadian/rules.mk
+++ b/keyboards/eco/keymaps/that_canadian/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/eco/readme.md b/keyboards/eco/readme.md
index 0826337e75..fac80e0a1b 100644
--- a/keyboards/eco/readme.md
+++ b/keyboards/eco/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make eco/rev2:that_canadian
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/ergo42/readme.md b/keyboards/ergo42/readme.md
index 9534bc7131..112e62b551 100644
--- a/keyboards/ergo42/readme.md
+++ b/keyboards/ergo42/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make ergo42/rev1:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/ergodox_ez/keymaps/bdk/config.h b/keyboards/ergodox_ez/keymaps/bdk/config.h
new file mode 100644
index 0000000000..e824b73109
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bdk/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 167
+#define FORCE_NKRO
diff --git a/keyboards/ergodox_ez/keymaps/bdk/keymap.c b/keyboards/ergodox_ez/keymaps/bdk/keymap.c
new file mode 100644
index 0000000000..20af6c18ed
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bdk/keymap.c
@@ -0,0 +1,176 @@
+#include QMK_KEYBOARD_H
+
+#define SHIFT_DOWN() (get_mods() & (MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT)))
+#define KC_FKEYS MO(FKEYS)
+
+// Layers
+enum {
+ BASE=0,
+ SYMNUM, // Symbols and numbers (activated by holding enter)
+ FKEYS, // Function keys (activated by a thumb button)
+};
+
+// counter that increments on all key press events. This is needed for our LT
+// handling
+uint16_t press_counter = 0;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Keymap 0: Base layer
+
+[BASE] = LAYOUT_ergodox(
+ // left hand ---------------------------------------------------------------------------------------------------
+ KC_NO, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO,
+ KC_GRV, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_LGUI,
+ KC_SLSH, KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_HOME,
+ KC_LCTL, KC_LALT, KC_PGUP, KC_PGDN, KC_NO,
+ // left thumb --------------------------------------------------------------------------------------------------
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_SPC, KC_TAB, KC_FKEYS,
+ // right hand --------------------------------------------------------------------------------------------------
+ KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_NO,
+ KC_RGUI, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
+ KC_END, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT, KC_RCTL,
+ // right thumb -------------------------------------------------------------------------------------------------
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_DEL, KC_BSPC, KC_ENT
+),
+// SYMNUM -- numpad and function keys
+[SYMNUM] = LAYOUT_ergodox(
+ // left hand ---------------------------------------------------------------------------------------------------
+ KC_TRNS, LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AMPR, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LCBR, KC_LBRC, KC_LPRN, KC_0, KC_MINS,
+ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_SLSH, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ // left thumb --------------------------------------------------------------------------------------------------
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand --------------------------------------------------------------------------------------------------
+ KC_TRNS, LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), KC_TRNS,
+ KC_TRNS, KC_PERC, KC_EQL, KC_LT, KC_GT, KC_EXLM, KC_TRNS,
+ KC_PLUS, KC_1, KC_RPRN, KC_RBRC, KC_RCBR, KC_TRNS,
+ KC_TRNS, KC_ASTR, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ // right thumb -------------------------------------------------------------------------------------------------
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+// FKEYS -- function keys
+[FKEYS] = LAYOUT_ergodox(
+ // left hand ---------------------------------------------------------------------------------------------------
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ // left thumb --------------------------------------------------------------------------------------------------
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand --------------------------------------------------------------------------------------------------
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ // right thumb -------------------------------------------------------------------------------------------------
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+// Code to handle layer tap.
+//
+// The default code doesn't work for me, so I rolled my own code. The main
+// difference is that it always tries to send modifier+key combination, rather
+// than two keys. One place where this is noticable is if you tap the key,
+// then try hold it.
+
+struct tap_start_info {
+ uint16_t timer;
+ uint16_t initial_press_counter;
+};
+
+static struct tap_start_info tap_start_infos[5];
+
+// Quick check to see if a key is down. Note that this requires NKRO enabled
+static bool key_down(uint8_t code) {
+ return (keyboard_report->nkro.bits[code>>3] & 1<<(code&7)) != 0;
+}
+
+static bool handle_lt(uint16_t keycode, keyrecord_t *record, uint8_t layer, uint8_t index) {
+ struct tap_start_info* tap_start = tap_start_infos + index;
+
+ if(record->event.pressed) {
+ layer_on(layer);
+ tap_start->timer = timer_read();
+ tap_start->initial_press_counter = press_counter;
+ } else {
+ layer_off(layer);
+ // Only click the key if:
+ // - No other keys are pressed between the press and release events
+ // - The release happens before the ONESHOT_TIMEOUT
+ if(press_counter == tap_start->initial_press_counter && timer_elapsed(tap_start->timer) < ONESHOT_TIMEOUT) {
+ register_code16(keycode);
+ unregister_code16(keycode);
+ }
+ }
+ return false;
+}
+
+static bool handle_mt(uint16_t keycode, keyrecord_t *record, uint8_t mods, uint8_t index) {
+ struct tap_start_info* tap_start = tap_start_infos + index;
+
+ if(record->event.pressed) {
+ register_mods(mods);
+ tap_start->timer = timer_read();
+ tap_start->initial_press_counter = press_counter;
+ } else {
+ unregister_mods(mods);
+ // Only click the key if:
+ // - No other keys are pressed between the press and release events
+ // - The release happens before the ONESHOT_TIMEOUT
+ if(press_counter == tap_start->initial_press_counter && timer_elapsed(tap_start->timer) < ONESHOT_TIMEOUT) {
+ register_code16(keycode);
+ unregister_code16(keycode);
+ }
+ }
+ return false;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if(record->event.pressed) {
+ press_counter++;
+ // The symbol layer allows sequences repeat the same "physical" key.
+ // For example "0)", which is like pressing the "0" key twice in a
+ // row. It's very easy to make a sequence of these where the ")"
+ // press comes before the "0" release. If that happens, force a
+ // release of the "0" key, otherwise nothing will happen.
+ uint8_t shortcode = keycode & 0xFF;
+ if(key_down(shortcode)) {
+ unregister_code(shortcode);
+ }
+ }
+
+ switch(keycode) {
+ case KC_ENTER:
+ return handle_lt(keycode, record, SYMNUM, 0);
+
+ case KC_TAB:
+ return handle_mt(keycode, record, MOD_BIT(KC_LCTL), 1);
+
+ case KC_LSFT:
+ case KC_RSFT:
+ return handle_mt(KC_ESC, record, MOD_BIT(keycode), 2);
+ }
+ return true;
+}
diff --git a/keyboards/ergodox_ez/keymaps/bdk/readme.md b/keyboards/ergodox_ez/keymaps/bdk/readme.md
new file mode 100644
index 0000000000..36a211d321
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bdk/readme.md
@@ -0,0 +1,36 @@
+# The BDK Ergodox Keyboard Layout
+
+## Dvorak-based
+
+This was the first alternative layout I switched to and I don't want to change
+again.
+
+## Mod-tap / Layer-tap is great for thumb keys
+
+This means a key that activates a layer/modifier when you hold it down, but
+results in a keyclick when you tap it. Thumb keys are great for this since
+they are good for both high-usage keys as well as modifiers.
+
+The one thing to avoid is when you mean to tap a key, but hit the next key
+before you release, which results in the modifier/layer instead of a tap. To
+avoid this, I chose Enter/Tab as the tap keys, since they aren't chorded
+together with other keys often.
+
+The other issue is I found several problems with using the standard MT,LT code,
+so I rolled my own to handle it.
+
+## Don't have too many layers
+
+My first layouts had multiple layers that I could switch to, but that
+overloaded my brain. This layout basically only uses 1 extra layer.
+Technically there's also a function key layer, but I only use those keys for
+a handlful of things: boot order, rename, reload page, that's basically it.
+
+## Brackets should be easy to use
+
+There's a lot of ways to lay out a symbol layer. I organized mine around
+making the {[()]} chars easy to use since they're so frequent in programming.
+I put them all on the symbol layer home row.
+
+I also arranged the numbers so 0/1 were also on the symbol layer home row.
+This makes for fairly easy chording of "[0]" and "[1]".
diff --git a/keyboards/ergodox_ez/keymaps/bdk/rules.mk b/keyboards/ergodox_ez/keymaps/bdk/rules.mk
new file mode 100644
index 0000000000..6c51636239
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bdk/rules.mk
@@ -0,0 +1,3 @@
+# CONSOLE_ENABLE = yes
+# DEBUG_ENABLE = yes
+COMMAND_ENABLE = no
diff --git a/keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk b/keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk
index db5e5d1558..6f40259b61 100644
--- a/keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk
@@ -30,6 +30,3 @@ KEYMAP_BRANCH = $(shell \
OPT_DEFS += -DKEYMAP_VERSION=\"$(KEYMAP_VERSION)\\\#$(KEYMAP_BRANCH)\"
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/ergodox_ez/keymaps/matrixman/keymap.c b/keyboards/ergodox_ez/keymaps/matrixman/keymap.c
index d40f6475bc..f5d0a0cf79 100644
--- a/keyboards/ergodox_ez/keymaps/matrixman/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/matrixman/keymap.c
@@ -162,11 +162,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-// [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Tap/Toggle Layer 1 (Symbols)
-// [2] = ACTION_LAYER_TAP_TOGGLE(NAV) // FN2 - Tap/Toggle Layer 2 (Nav)
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/ergodox_ez/keymaps/testing/keymap.c b/keyboards/ergodox_ez/keymaps/testing/keymap.c
index df0ed073f2..2fdd122363 100644
--- a/keyboards/ergodox_ez/keymaps/testing/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/testing/keymap.c
@@ -28,10 +28,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TAP_TOGGLE(1)
-};
-
// leaving this in place for compatibilty with old keymaps cloned and re-compiled.
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
diff --git a/keyboards/ergodox_ez/util/compile_keymap.py b/keyboards/ergodox_ez/util/compile_keymap.py
index 7076a6ecb2..f427d6fd80 100644
--- a/keyboards/ergodox_ez/util/compile_keymap.py
+++ b/keyboards/ergodox_ez/util/compile_keymap.py
@@ -668,9 +668,6 @@ def iter_keymap_parts(config, keymaps):
yield "};\n\n"
- # no idea what this is for
- yield "const uint16_t PROGMEM fn_actions[] = {};\n"
-
# macros
yield MACROCODE.format(
macro_cases="",
diff --git a/keyboards/ergoinu/readme.md b/keyboards/ergoinu/readme.md
index a0d1c18a24..06e0cf352e 100644
--- a/keyboards/ergoinu/readme.md
+++ b/keyboards/ergoinu/readme.md
@@ -18,4 +18,4 @@ Make example for this keyboard (after setting up your build environment):
make ergoinu:default_jis
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/ergotravel/keymaps/rs/config.h b/keyboards/ergotravel/keymaps/rs/config.h
new file mode 100644
index 0000000000..eeca26ce1d
--- /dev/null
+++ b/keyboards/ergotravel/keymaps/rs/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2017 Pierre Constantineau <jpconstantineau@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+
diff --git a/keyboards/ergotravel/keymaps/rs/keymap.c b/keyboards/ergotravel/keymaps/rs/keymap.c
new file mode 100644
index 0000000000..634e97c49c
--- /dev/null
+++ b/keyboards/ergotravel/keymaps/rs/keymap.c
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _HYPER,
+ _SIGN
+};
+
+
+#define KC_ KC_TRNS
+
+#define KC_ESCC MT(MOD_LCTL, KC_ESC)
+#define KC_ENTS MT(MOD_LSFT, KC_ENT)
+#define KC_HYPE MO(_HYPER)
+#define KC_SIGN MO(_SIGN)
+#define KC_RST RESET
+// Brightness
+#define KC_BRUP KC_PAUS
+#define KC_BRDN KC_SLCK
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
+ TAB , Q , W , E , R , T , GRV, BSLS, Y , U , I , O , P ,EQL ,
+ //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
+ ESCC, A , S , D , F , G ,PIPE, MINS, H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B , SPC, BSPC, N , M ,COMM,DOT ,SLSH,ENTS,
+ //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
+ SIGN, ,LCTL,LALT,LGUI, SPC, BSPC, HYPE,LEFT, UP ,DOWN,RIGHT
+ //`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
+ ),
+
+
+ [_HYPER] = LAYOUT_kc(
+ //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
+ GRV , 1 , 2 , 3 , 4 , 5 , , , 6 , 7 , 8 , 9 , 0 , ,
+ //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
+ , , ,PGUP, , , , , , , UP ,LBRC,RBRC,BSLS,
+ //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
+ , ,HOME,PGDN,END , , , VOLU, ,LEFT,DOWN,RGHT, ,PIPE,
+ //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
+ , , , , , , VOLD, ,MUTE, , ,
+ //`----+----+----+----+----/----/ \----\----+----+----+----+----'
+ ),
+
+ [_SIGN] = LAYOUT_kc(
+ //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
+ TILD,EXLM, AT ,HASH,DLR ,PERC, , ,CIRC,AMPR,ASTR,LBRC,RBRC, ,
+ //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
+ RST , F1 , F2 , F3 , F4 , F5 , F6 , , , , ,LCBR,RCBR,PIPE,
+ //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
+ , 1 , 2 , 3 , 4 , 5 , , BRUP, 6 , 7 , 8 , 9 , 0 , ,
+ //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
+ , , , , , , BRDN, , , , ,
+ //`----+----+----+----+----/----/ \----\----+----+----+----+----'
+ ),
+}; \ No newline at end of file
diff --git a/keyboards/ergotravel/keymaps/rs/readme.md b/keyboards/ergotravel/keymaps/rs/readme.md
new file mode 100644
index 0000000000..93b87cc23a
--- /dev/null
+++ b/keyboards/ergotravel/keymaps/rs/readme.md
@@ -0,0 +1,13 @@
+# Code friendly 60% keymap
+
+I developped this keymap to make a better use of 60% ortho keyboards I use like the preonic of the iris. Instead of trying to mimic the Planck layout like the default preonic keymap, this keymap removes the raise and lower layers and offers a simpler hyper layer concept for a few missing sign keys and cursors / media keys.
+
+The important part for coders is that most important signs needed to code are available at their usual position on a full keyboard, without complex layer gymnastic. Access to [] and {} are available on the hyper layer at their usual emplacement.
+
+The right thumb is used for both backspace and hyper layer switching. On the hyper layer, in addition to some coding signs, you get the cursor keys arranged in cross, just under your right fingers, so you don't have to move your hand when navigating in code or command line. Other hand gets the home/end page up/down in a similar layout.
+
+Because you sometime have to use your internal keyboard when you use a macbook, a karabiner configuration is also provided to get most of the features of this keyboard, including the hyper layer / backspace on right command key etc.
+
+This keymap is also available for other keyboards:
+- [ortho_5x12/rs](../../../../layouts/community/ortho_5x12/rs/keymap.c)
+- [Iris/rs](../../../iris/keymaps/rs/keymap.c)
diff --git a/keyboards/ergotravel/keymaps/rs/rules.mk b/keyboards/ergotravel/keymaps/rs/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/ergotravel/keymaps/rs/rules.mk
diff --git a/keyboards/ergotravel/readme.md b/keyboards/ergotravel/readme.md
index ad37bc1acc..7c76d5fc0b 100644
--- a/keyboards/ergotravel/readme.md
+++ b/keyboards/ergotravel/readme.md
@@ -23,6 +23,6 @@ Example of flashing this keyboard:
make ergotravel/rev1:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Build Guide](https://github.com/jpconstantineau)
diff --git a/keyboards/espectro/keymaps/mikethetiger/keymap.c b/keyboards/espectro/keymaps/mikethetiger/keymap.c
new file mode 100644
index 0000000000..e594184ca5
--- /dev/null
+++ b/keyboards/espectro/keymaps/mikethetiger/keymap.c
@@ -0,0 +1,88 @@
+/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include QMK_KEYBOARD_H
+
+#define _BL 0 //Base layer
+#define _FN1 1 //Function layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BL
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | | | | | |
+| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | PRT SC | SCR LK | PAUSE | P UP | P DOWN |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | BACK | NUM | | | |
+| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________|
+| | | | | | | | | | | | [ | ] | | | | | |
+| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + |
+| | | | | | | | | | | ; | ' | | | | | |
+| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | , | . | / | | | | | | |
+| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER |
+| | | | | | | MO | | | | | | |
+| CTRL | LGUI | L ALT | SPACE | VOL Dn | VOL Up | _FN | LEFT | DOWN | RIGHT | 0 | . | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+ [_BL] = LAYOUT_default(
+ 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_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_PGUP, KC_PGDN, \
+ 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ 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_P7, KC_P8, KC_P9, KC_PPLS, \
+ 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, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_VOLD, KC_VOLU, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ ),
+
+/* FN_1
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | VOL | VOL | NEXT | | |
+| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | TRACK | HOME | END |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | |
+| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | SAT | | | | | DELETE | | | | |
+|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________|
+| | BACK | BACK | | | | | | | | | | | | | | | |
+| | LIGHT | LIGHT | | | | | | | | | | | | | | | |
+|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|_____________|________|________|________| |
+| | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| |
+| | | | | | | | | | | | | |
+| | | | | | | | | | | | | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+ [_FN1] = LAYOUT_default(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_HOME, KC_END, \
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, \
+ _______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+};
+
diff --git a/keyboards/facew/readme.md b/keyboards/facew/readme.md
index 6d7186704b..578dcf8888 100644
--- a/keyboards/facew/readme.md
+++ b/keyboards/facew/readme.md
@@ -50,4 +50,4 @@ macOS:
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/fc660c/README.md b/keyboards/fc660c/README.md
index 5cb9bcea48..638c559577 100644
--- a/keyboards/fc660c/README.md
+++ b/keyboards/fc660c/README.md
@@ -13,7 +13,7 @@ Make example for this keyboard (after setting up your build environment):
make fc660c:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
To flash the firmware, press the reset button on the controller and run:
diff --git a/keyboards/fc660c/keymaps/dbroqua/keymap.c b/keyboards/fc660c/keymaps/dbroqua/keymap.c
index 62ef234c75..0c6931a3f2 100644
--- a/keyboards/fc660c/keymaps/dbroqua/keymap.c
+++ b/keyboards/fc660c/keymaps/dbroqua/keymap.c
@@ -42,6 +42,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______, _______, _______,_______,MO(1), _______,_______,_______
)
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/fc660c/keymaps/default/keymap.c b/keyboards/fc660c/keymaps/default/keymap.c
index eae07c08b1..bf890c2c1d 100644
--- a/keyboards/fc660c/keymaps/default/keymap.c
+++ b/keyboards/fc660c/keymaps/default/keymap.c
@@ -32,6 +32,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______, _______, _______,_______,MO(1), _______,_______,_______
)
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/fc980c/README.md b/keyboards/fc980c/README.md
index 16ad9021cd..768d7d3a3c 100644
--- a/keyboards/fc980c/README.md
+++ b/keyboards/fc980c/README.md
@@ -15,7 +15,7 @@ Make example for this keyboard (after setting up your build environment):
make fc980c:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
To flash the firmware, press the reset button on the controller and run:
diff --git a/keyboards/fc980c/keymaps/actuation-point-example/keymap.c b/keyboards/fc980c/keymaps/actuation-point-example/keymap.c
index ac993ae6ba..96393a4d76 100644
--- a/keyboards/fc980c/keymaps/actuation-point-example/keymap.c
+++ b/keyboards/fc980c/keymaps/actuation-point-example/keymap.c
@@ -80,5 +80,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record)
return true;
}
};
-
-const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/fc980c/keymaps/coloneljesus/keymap.c b/keyboards/fc980c/keymaps/coloneljesus/keymap.c
index 26d476ab61..664d146fa7 100644
--- a/keyboards/fc980c/keymaps/coloneljesus/keymap.c
+++ b/keyboards/fc980c/keymaps/coloneljesus/keymap.c
@@ -32,5 +32,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, LCTL(KC_BSPC), LCTL(KC_DEL), _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______,
_______, _______, _______, _______, _______, KC_APP, _______, KC_HOME, KC_PGDN, KC_END, _______, _______),
};
-
-const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/fc980c/keymaps/default/keymap.c b/keyboards/fc980c/keymaps/default/keymap.c
index b3f7bb7b11..b3d86192d3 100644
--- a/keyboards/fc980c/keymaps/default/keymap.c
+++ b/keyboards/fc980c/keymaps/default/keymap.c
@@ -32,5 +32,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______,
_______, _______, _______, _______, _______, KC_APP, _______, KC_HOME, KC_PGDN, KC_END, _______, _______),
};
-
-const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/felix/readme.md b/keyboards/felix/readme.md
index e41782c3cc..d671b0c01c 100644
--- a/keyboards/felix/readme.md
+++ b/keyboards/felix/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make felix:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/fleuron/readme.md b/keyboards/fleuron/readme.md
index 077753a287..286ceb7cf8 100644
--- a/keyboards/fleuron/readme.md
+++ b/keyboards/fleuron/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make fleuron:default to build firmware
make fleuron:default:dfu to make and flash with dfu
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/fortitude60/readme.md b/keyboards/fortitude60/readme.md
index 58453ccc47..369f5e24b0 100644
--- a/keyboards/fortitude60/readme.md
+++ b/keyboards/fortitude60/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make fortitude60/rev1:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/four_banger/readme.md b/keyboards/four_banger/readme.md
index ffb6091f95..913ca6ee85 100644
--- a/keyboards/four_banger/readme.md
+++ b/keyboards/four_banger/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make four_banger:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/fourier/keymaps/valgrahf/rules.mk b/keyboards/fourier/keymaps/valgrahf/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/fourier/keymaps/valgrahf/rules.mk
+++ b/keyboards/fourier/keymaps/valgrahf/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/fourier/readme.md b/keyboards/fourier/readme.md
index 9420fb30e5..ca29c7aba6 100644
--- a/keyboards/fourier/readme.md
+++ b/keyboards/fourier/readme.md
@@ -15,6 +15,6 @@ Example of flashing this keyboard:
make fourier/rev1:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io)
diff --git a/keyboards/fractal/fractal.h b/keyboards/fractal/fractal.h
index 1eefcecd75..0af7c22390 100755
--- a/keyboards/fractal/fractal.h
+++ b/keyboards/fractal/fractal.h
@@ -1,5 +1,4 @@
-#ifndef FRACTAL_H
-#define FRACTAL_H
+#pragma once
#include "quantum.h"
@@ -30,7 +29,3 @@
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 }, \
{ K400, K401, K402, K403, K404, KC_NO, K406, K407, K408, K409, K410, K411 } \
}
-
-#define KEYMAP LAYOUT_preonic_mit
-
-#endif
diff --git a/keyboards/fractal/readme.md b/keyboards/fractal/readme.md
index 1bb41cf7ff..3b9e59d217 100644
--- a/keyboards/fractal/readme.md
+++ b/keyboards/fractal/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make fractal:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/fractal/rules.mk b/keyboards/fractal/rules.mk
index b5808c15ea..0de2a7d39f 100755
--- a/keyboards/fractal/rules.mk
+++ b/keyboards/fractal/rules.mk
@@ -57,5 +57,5 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
-LAYOUTS = preonic_mit ortho_5x12
+LAYOUTS = ortho_5x12 # preonic_mit
LAYOUTS_HAS_RGB = no
diff --git a/keyboards/gergo/config.h b/keyboards/gergo/config.h
new file mode 100644
index 0000000000..a795f8dba1
--- /dev/null
+++ b/keyboards/gergo/config.h
@@ -0,0 +1,73 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Copy and worked on with love from the EZ team
+
+#pragma once
+#include "config_common.h"
+
+/* Defaults */
+#ifndef BALLSTEP
+#define BALLSTEP 20
+#endif
+
+#ifndef SCROLLSTEP
+#define SCROLLSTEP 1
+#endif
+
+#define VERBOSE
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1307
+#define DEVICE_VER 0x0001
+#define MANUFACTURER g Heavy Industries
+#define PRODUCT Gergo
+#define DESCRIPTION QMK keyboard firmware for Gergo
+
+/* key matrix size */
+#define MATRIX_ROWS 14
+#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2)
+#define MATRIX_COLS 4
+
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+#define TAPPING_TOGGLE 1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM 200
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+#define DEBOUNCE 5
+#define USB_MAX_POWER_CONSUMPTION 500
diff --git a/keyboards/gergo/gergo.c b/keyboards/gergo/gergo.c
new file mode 100644
index 0000000000..c6ba91bb28
--- /dev/null
+++ b/keyboards/gergo/gergo.c
@@ -0,0 +1,66 @@
+#include QMK_KEYBOARD_H
+
+bool i2c_initialized = 0;
+i2c_status_t mcp23018_status = 0x20;
+
+void matrix_init_kb(void) {
+ // (tied to Vcc for hardware convenience)
+ //DDRB &= ~(1<<4); // set B(4) as input
+ //PORTB &= ~(1<<4); // set B(4) internal pull-up disabled
+
+ // unused pins - C7, D4, D5, D7, E6
+ // set as input with internal pull-up enabled
+ DDRC &= ~(1<<7);
+ DDRD &= ~(1<<5 | 1<<4 | 1<<6 | 1<<7);
+ DDRE &= ~(1<<6);
+ PORTC |= (1<<7);
+ PORTD |= (1<<5 | 1<<4 | 1<<6 | 1<<7);
+ PORTE |= (1<<6);
+
+ matrix_init_user();
+}
+
+
+uint8_t init_mcp23018(void) {
+ print("starting init");
+ mcp23018_status = 0x20;
+
+ // I2C subsystem
+
+ // uint8_t sreg_prev;
+ // sreg_prev=SREG;
+ // cli();
+
+ if (i2c_initialized == 0) {
+ i2c_init(); // on pins D(1,0)
+ i2c_initialized = true;
+ _delay_ms(1000);
+ }
+ // i2c_init(); // on pins D(1,0)
+ // _delay_ms(1000);
+
+ // set pin direction
+ // - unused : input : 1
+ // - input : input : 1
+ // - driving : output : 0
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+
+ // set pull-up
+ // - unused : on : 1
+ // - input : on : 1
+ // - driving : off : 0
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPPUA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+
+out:
+ i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ // SREG=sreg_prev;
+ //uprintf("Init %x\n", mcp23018_status);
+ return mcp23018_status;
+}
diff --git a/keyboards/gergo/gergo.h b/keyboards/gergo/gergo.h
new file mode 100644
index 0000000000..c0d885029b
--- /dev/null
+++ b/keyboards/gergo/gergo.h
@@ -0,0 +1,58 @@
+#pragma once
+#include <util/delay.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "quantum.h"
+#include "i2c_master.h"
+#include "matrix.h"
+
+
+extern i2c_status_t mcp23018_status;
+#define ERGODOX_EZ_I2C_TIMEOUT 1000
+#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
+#define CPU_16MHz 0x00
+
+// I2C aliases and register addresses (see "mcp23018.md")
+//#define I2C_ADDR 0b0100000
+#define I2C_ADDR 0x20
+#define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE )
+#define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ )
+#define IODIRA 0x00 // i/o direction register
+#define IODIRB 0x01
+#define GPPUA 0x0C // GPIO pull-up resistor register
+#define GPPUB 0x0D
+#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT)
+#define GPIOB 0x13
+#define OLATA 0x14 // output latch register
+#define OLATB 0x15
+
+void init_ergodox(void);
+uint8_t init_mcp23018(void);
+
+/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
+#define LAYOUT_GERGO( \
+ L00,L01,L02,L03,L04,L05, R00,R01,R02,R03,R04,R05, \
+ L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
+ L20,L21,L22,L23,L24,L25,L26, R20,R21,R22,R23,R24,R25,R26, \
+ L31,L32, R33,R34, \
+ L30, R30, \
+ L33,L34, R31,R32) \
+ \
+ /* matrix positions */ \
+ { \
+ { KC_NO, L16, L26, L30}, \
+ { L05, L15, L25, L34}, \
+ { L04, L14, L24, L33}, \
+ { L03, L13, L23, L32}, \
+ { L02, L12, L22, L31}, \
+ { L01, L11, L21, KC_NO}, \
+ { L00, L10, L20, KC_NO}, \
+ \
+ { R10, KC_NO, R20, R30}, \
+ { R00, R11, R21, R31}, \
+ { R01, R12, R22, R32}, \
+ { R02, R13, R23, R33}, \
+ { R03, R14, R24, R34}, \
+ { R04, R15, R25, KC_NO}, \
+ { R05, R16, R26, KC_NO}, \
+}
diff --git a/keyboards/gergo/i2cmaster.h b/keyboards/gergo/i2cmaster.h
new file mode 100644
index 0000000000..72e0508494
--- /dev/null
+++ b/keyboards/gergo/i2cmaster.h
@@ -0,0 +1,178 @@
+#ifndef _I2CMASTER_H
+#define _I2CMASTER_H 1
+/*************************************************************************
+* Title: C include file for the I2C master interface
+* (i2cmaster.S or twimaster.c)
+* Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
+* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $
+* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
+* Target: any AVR device
+* Usage: see Doxygen manual
+**************************************************************************/
+
+#ifdef DOXYGEN
+/**
+ @defgroup pfleury_ic2master I2C Master library
+ @code #include <i2cmaster.h> @endcode
+
+ @brief I2C (TWI) Master Software Library
+
+ Basic routines for communicating with I2C slave devices. This single master
+ implementation is limited to one bus master on the I2C bus.
+
+ This I2c library is implemented as a compact assembler software implementation of the I2C protocol
+ which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c).
+ Since the API for these two implementations is exactly the same, an application can be linked either against the
+ software I2C implementation or the hardware I2C implementation.
+
+ Use 4.7k pull-up resistor on the SDA and SCL pin.
+
+ Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module
+ i2cmaster.S to your target when using the software I2C implementation !
+
+ Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.
+
+ @note
+ The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted
+ to GNU assembler and AVR-GCC C call interface.
+ Replaced the incorrect quarter period delays found in AVR300 with
+ half period delays.
+
+ @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury
+
+ @par API Usage Example
+ The following code shows typical usage of this library, see example test_i2cmaster.c
+
+ @code
+
+ #include <i2cmaster.h>
+
+
+ #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet
+
+ int main(void)
+ {
+ unsigned char ret;
+
+ i2c_init(); // initialize I2C library
+
+ // write 0x75 to EEPROM address 5 (Byte Write)
+ i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
+ i2c_write(0x05); // write address = 5
+ i2c_write(0x75); // write value 0x75 to EEPROM
+ i2c_stop(); // set stop conditon = release bus
+
+
+ // read previously written value back from EEPROM address 5
+ i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
+
+ i2c_write(0x05); // write address = 5
+ i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode
+
+ ret = i2c_readNak(); // read one byte from EEPROM
+ i2c_stop();
+
+ for(;;);
+ }
+ @endcode
+
+*/
+#endif /* DOXYGEN */
+
+/**@{*/
+
+#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
+#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
+#endif
+
+#include <avr/io.h>
+
+/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
+#define I2C_READ 1
+
+/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
+#define I2C_WRITE 0
+
+
+/**
+ @brief initialize the I2C master interace. Need to be called only once
+ @param void
+ @return none
+ */
+void i2c_init(void);
+
+
+/**
+ @brief Terminates the data transfer and releases the I2C bus
+ @param void
+ @return none
+ */
+void i2c_stop(void);
+
+
+/**
+ @brief Issues a start condition and sends address and transfer direction
+
+ @param addr address and transfer direction of I2C device
+ @retval 0 device accessible
+ @retval 1 failed to access device
+ */
+unsigned char i2c_start(unsigned char addr);
+
+
+/**
+ @brief Issues a repeated start condition and sends address and transfer direction
+
+ @param addr address and transfer direction of I2C device
+ @retval 0 device accessible
+ @retval 1 failed to access device
+ */
+unsigned char i2c_rep_start(unsigned char addr);
+
+
+/**
+ @brief Issues a start condition and sends address and transfer direction
+
+ If device is busy, use ack polling to wait until device ready
+ @param addr address and transfer direction of I2C device
+ @return none
+ */
+void i2c_start_wait(unsigned char addr);
+
+
+/**
+ @brief Send one byte to I2C device
+ @param data byte to be transfered
+ @retval 0 write successful
+ @retval 1 write failed
+ */
+unsigned char i2c_write(unsigned char data);
+
+
+/**
+ @brief read one byte from the I2C device, request more data from device
+ @return byte read from I2C device
+ */
+unsigned char i2c_readAck(void);
+
+/**
+ @brief read one byte from the I2C device, read is followed by a stop condition
+ @return byte read from I2C device
+ */
+unsigned char i2c_readNak(void);
+
+/**
+ @brief read one byte from the I2C device
+
+ Implemented as a macro, which calls either i2c_readAck or i2c_readNak
+
+ @param ack 1 send ack, request more data from device<br>
+ 0 send nak, read is followed by a stop condition
+ @return byte read from I2C device
+ */
+unsigned char i2c_read(unsigned char ack);
+#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
+
+
+/**@}*/
+#endif
diff --git a/keyboards/gergo/info.json b/keyboards/gergo/info.json
new file mode 100644
index 0000000000..71dcca40fc
--- /dev/null
+++ b/keyboards/gergo/info.json
@@ -0,0 +1,277 @@
+{
+ "maintainer": "germ",
+ "height": 4.75,
+ "width": 19.5,
+ "keyboard_name": "Gergo",
+ "url": "http://gboards.ca",
+ "layouts": {
+ "LAYOUT_GERGO": {
+ "layout": [
+ {
+ "label": "L00",
+ "w": 1.5,
+ "x": 0,
+ "y": 0.38
+ },
+ {
+ "label": "L01",
+ "x": 1.5,
+ "y": 0.38
+ },
+ {
+ "label": "L02",
+ "x": 2.5,
+ "y": 0.13
+ },
+ {
+ "label": "L03",
+ "x": 3.5,
+ "y": 0
+ },
+ {
+ "label": "L04",
+ "x": 4.5,
+ "y": 0.13
+ },
+ {
+ "label": "L05",
+ "x": 5.5,
+ "y": 0.25
+ },
+ {
+ "label": "R00",
+ "x": 13,
+ "y": 0.25
+ },
+ {
+ "label": "R01",
+ "x": 14,
+ "y": 0.13
+ },
+ {
+ "label": "R02",
+ "x": 15,
+ "y": 0
+ },
+ {
+ "label": "R03",
+ "x": 16,
+ "y": 0.13
+ },
+ {
+ "label": "R04",
+ "x": 17,
+ "y": 0.38
+ },
+ {
+ "label": "R05",
+ "w": 1.5,
+ "x": 18,
+ "y": 0.38
+ },
+ {
+ "label": "L10",
+ "w": 1.5,
+ "x": 0,
+ "y": 1.3800000000000001
+ },
+ {
+ "label": "L11",
+ "x": 1.5,
+ "y": 1.3800000000000001
+ },
+ {
+ "label": "L12",
+ "x": 2.5,
+ "y": 1.1300000000000001
+ },
+ {
+ "label": "L13",
+ "x": 3.5,
+ "y": 1.0
+ },
+ {
+ "label": "L14",
+ "x": 4.5,
+ "y": 1.1300000000000001
+ },
+ {
+ "label": "L15",
+ "x": 5.5,
+ "y": 1.25
+ },
+ {
+ "h": 1.5,
+ "label": "L16",
+ "x": 6.5,
+ "y": 0.25
+ },
+ {
+ "h": 1.5,
+ "label": "R10",
+ "x": 12,
+ "y": 0.25
+ },
+ {
+ "label": "R11",
+ "x": 13,
+ "y": 1.25
+ },
+ {
+ "label": "R12",
+ "x": 14,
+ "y": 1.1300000000000001
+ },
+ {
+ "label": "R13",
+ "x": 15,
+ "y": 1.0
+ },
+ {
+ "label": "R14",
+ "x": 16,
+ "y": 1.1300000000000001
+ },
+ {
+ "label": "R15",
+ "x": 17,
+ "y": 1.3800000000000001
+ },
+ {
+ "label": "R16",
+ "w": 1.5,
+ "x": 18,
+ "y": 1.3800000000000001
+ },
+ {
+ "label": "L20",
+ "w": 1.5,
+ "x": 0,
+ "y": 2.38
+ },
+ {
+ "label": "L21",
+ "x": 1.5,
+ "y": 2.38
+ },
+ {
+ "label": "L22",
+ "x": 2.5,
+ "y": 2.13
+ },
+ {
+ "label": "L23",
+ "x": 3.5,
+ "y": 2
+ },
+ {
+ "label": "L24",
+ "x": 4.5,
+ "y": 2.13
+ },
+ {
+ "label": "L25",
+ "x": 5.5,
+ "y": 2.25
+ },
+ {
+ "h": 1.5,
+ "label": "L26",
+ "x": 6.5,
+ "y": 1.75
+ },
+ {
+ "h": 1.5,
+ "label": "R20",
+ "x": 12,
+ "y": 1.75
+ },
+ {
+ "label": "R21",
+ "x": 13,
+ "y": 2.25
+ },
+ {
+ "label": "R22",
+ "x": 14,
+ "y": 2.13
+ },
+ {
+ "label": "R23",
+ "x": 15,
+ "y": 2
+ },
+ {
+ "label": "R24",
+ "x": 16,
+ "y": 2.13
+ },
+ {
+ "label": "R25",
+ "x": 17,
+ "y": 2.38
+ },
+ {
+ "label": "R26",
+ "w": 1.5,
+ "x": 18,
+ "y": 2.38
+ },
+ {
+ "label": "L31",
+ "x": 4.75,
+ "y": 3.25
+ },
+ {
+ "label": "L32",
+ "x": 6,
+ "y": 3.63
+ },
+ {
+ "label": "R33",
+ "x": 12.5,
+ "y": 3.63
+ },
+ {
+ "label": "R34",
+ "x": 13.75,
+ "y": 3.25
+ },
+ {
+ "label": "L30",
+ "x": 8.25,
+ "y": 2.75
+ },
+ {
+ "label": "R30",
+ "x": 10.25,
+ "y": 2.75
+ },
+ {
+ "h": 2,
+ "label": "L33",
+ "x": 7.25,
+ "y": 3.75
+ },
+ {
+ "h": 2,
+ "label": "L34",
+ "x": 8.25,
+ "y": 3.75
+ },
+ {
+ "h": 2,
+ "label": "R31",
+ "x": 10.25,
+ "y": 3.75
+ },
+ {
+ "h": 2,
+ "label": "R32",
+ "x": 11.25,
+ "y": 3.75
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/gergo/keymaps/default/keymap.c b/keyboards/gergo/keymaps/default/keymap.c
new file mode 100644
index 0000000000..fabd945fef
--- /dev/null
+++ b/keyboards/gergo/keymaps/default/keymap.c
@@ -0,0 +1,151 @@
+/* Good on you for modifying your layout! if you don't have
+ * time to read the QMK docs, a list of keycodes can be found at
+ *
+ * https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md
+ *
+ * There's also a template for adding new layers at the bottom of this file!
+ */
+
+#include QMK_KEYBOARD_H
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define NUMB 2 // numbers/motion
+
+// Blank template at the bottom
+
+enum customKeycodes {
+ URL = 1
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | L1/ESC | Q | W | E | R | T | | Y | U | I | O | P | | \ |
+ * |--------+------+------+------+------+------|------. .------|------+------+------+------+------+--------|
+ * |Ctrl/BS | A | S | D | F | G | RMB | | | H | J | K | L | ; : | ' " |
+ * |--------+------+------+------+------+------|------| |------|------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | LMB | | | N | M | , < | . > | / ? | - _ |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * .----------. .-------. .------. .-----.
+ * | Super/Del| |Ent/ALT| | Tab | |BKSP |
+ * '----------' '-------' `------. '-----'
+ * ,-------. ,-------.
+ * | MMB | | PgDn |
+ * ,------|-------| |-------|------.
+ * | SYMB | NUMB | | SYMB | NUMB |
+ * | Space| Escape| | Mod |Space |
+ * | | | | | |
+ * `--------------' `--------------'
+ */
+[BASE] = LAYOUT_GERGO(
+LT(NUMB, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PIPE,
+MT(MOD_LCTL, KC_BSPC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_BTN2, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BTN1, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
+
+ MT(MOD_LGUI, KC_DEL), MT(MOD_LALT, KC_ENT), KC_TAB, KC_BSPC,
+
+ KC_BTN3, KC_PGDN,
+ LT(SYMB, KC_SPC), LT(NUMB, KC_ESC), LT(SYMB, KC_ENT), LT(NUMB, KC_SPC)),
+/* Keymap 1: Symbols layer
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | ! | @ | { | } | | | | | | | | | \ | |
+ * |--------+------+------+------+------+------|------. .------|------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` | | | | + | - | / | * | % | ' " |
+ * |--------+------+------+------+------+------|------| |------|------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | = | , | . | / ? | - _ |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * .------. .------. .------. .-----.
+ * | | | | | | | DEL |
+ * '------' '------' `------. '-----'
+ * ,-------. ,-------.
+ * | | | PgUp |
+ * ,------|-------| |-------|------.
+ * | | | | | |
+ * | ; | = | | = | ; |
+ * | | | | | |
+ * `--------------' `--------------'
+ */
+[SYMB] = LAYOUT_GERGO(
+KC_TRNS, KC_EXLM, KC_AT, KC_LCBR,KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
+KC_TRNS, KC_HASH, KC_DLR, KC_LPRN,KC_RPRN, KC_GRV, KC_TRNS, KC_TRNS, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
+KC_TRNS, KC_PERC, KC_CIRC,KC_LBRC,KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
+
+ KC_TRNS, KC_TRNS, KC_PGUP, KC_DEL,
+ KC_TRNS, KC_TRNS,
+ KC_SCLN, KC_EQL, KC_EQL, KC_SCLN),
+/* Keymap 2: Pad/Function layer
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+------|------. .------|------+------+------+------+------+--------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | BTN1 | | | LEFT | DOWN | UP | RIGHT|VolDn | VolUp |
+ * |--------+------+------+------+------+------|------| |------|------+------+------+------+------+--------|
+ * | F7 | F8 | F9 | F10 | F11 | F12 | BTN2 | | | MLFT | MDWN | MUP | MRGHT|Ply/Pa| Skip |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * .------. .------. .------. .-----.
+ * | | | | | | | |
+ * '------' '------' `------. '-----'
+ * ,-------. ,-------.
+ * | | | PgUp |
+ * ,------|-------| |-------|------.
+ * | | | | | |
+ * | | | | | |
+ * | | | | | |
+ * `--------------' `--------------'
+ */
+[NUMB] = LAYOUT_GERGO(
+KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLD, KC_VOLU,
+KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_MPLY, KC_MNXT,
+
+ KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+
+/* Keymap template
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------|------. .------|------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------|------| |------|------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * .------. .------. .------. .-----.
+ * | | | | | | | |
+ * '------' '------' `------. '-----'
+ * ,-------. ,-------.
+ * | | | |
+ * ,------|-------| |-------|------.
+ * | | | | | |
+ * | | | | | |
+ * | | | | | |
+ * `--------------' `--------------'
+[SYMB] = LAYOUT_GERGO(
+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, 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, 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, KC_TRNS, KC_TRNS),
+ */
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ //uint8_t layer = biton32(layer_state);
+ biton32(layer_state);
+};
+
+
diff --git a/keyboards/gergo/keymaps/default/readme.md b/keyboards/gergo/keymaps/default/readme.md
new file mode 100644
index 0000000000..471a20fbdf
--- /dev/null
+++ b/keyboards/gergo/keymaps/default/readme.md
@@ -0,0 +1,10 @@
+# [Gergo! By g Heavy Industries](http://gboards.ca)
+
+![Gergo image](https://4.bp.blogspot.com/-889nMXxgSM0/XCNxwnO5kUI/AAAAAAAA6mI/tZbWgZVCBW0dyZOCGJDkjN06DVax7j8XwCLcBGAs/s1600/48422820_967732713413298_485744639215665152_n.jpg)
+
+This is the default keymap for Gergo, it's based heavily off of the naps62 ErgoDox layout and is aimed at a programmer friendly keymap.
+
+## Settings
+To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gergo/keymaps/default/rules.mk
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gergo/keymaps/default/rules.mk b/keyboards/gergo/keymaps/default/rules.mk
new file mode 100644
index 0000000000..2f825a7663
--- /dev/null
+++ b/keyboards/gergo/keymaps/default/rules.mk
@@ -0,0 +1,36 @@
+#----------------------------------------------------------------------------
+# make gergo:germ:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+# Firmware options
+BALLER = yes # Enable to ball out
+BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
+SCROLLSTEP = 1 # Lines to scroll with ball
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700), needed for baller
+
+#Debug options
+VERBOSE = yes
+DEBUG_MATRIX_SCAN_RATE = no
+DEBUG_BALLER = no
+DEBUG_MATRIX = no
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+SRC += matrix.c i2c_master.c
+ifneq ($(strip $(BALLSTEP)),)
+ OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
+endif
+ifneq ($(strip $(SCROLLSTEP)),)
+ OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
+endif
+ifeq ($(strip $(BALLER)), yes)
+ OPT_DEFS += -DBALLER
+endif
+ifeq ($(strip $(DEBUG_BALLER)), yes)
+ OPT_DEFS += -DDEBUG_BALLER
+endif
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+ OPT_DEFS += -DDEBUG_MATRIX
+endif
diff --git a/keyboards/gergo/matrix.c b/keyboards/gergo/matrix.c
new file mode 100644
index 0000000000..29fe48ccb3
--- /dev/null
+++ b/keyboards/gergo/matrix.c
@@ -0,0 +1,517 @@
+/*
+Note for ErgoDox EZ customizers: Here be dragons!
+This is not a file you want to be messing with.
+All of the interesting stuff for you is under keymaps/ :)
+Love, Erez
+
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "matrix.h"
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "pointing_device.h"
+#include QMK_KEYBOARD_H
+#ifdef DEBUG_MATRIX_SCAN_RATE
+#include "timer.h"
+#endif
+
+#ifdef BALLER
+#include <avr/interrupt.h>
+#endif
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+// MCP Pin Defs
+#define RROW1 (1<<3)
+#define RROW2 (1<<2)
+#define RROW3 (1<<1)
+#define RROW4 (1<<0)
+#define COL0 (1<<0)
+#define COL1 (1<<1)
+#define COL2 (1<<2)
+#define COL3 (1<<3)
+#define COL4 (1<<4)
+#define COL5 (1<<5)
+#define COL6 (1<<6)
+
+// ATmega pin defs
+#define ROW1 (1<<6)
+#define ROW2 (1<<5)
+#define ROW3 (1<<4)
+#define ROW4 (1<<1)
+#define COL7 (1<<0)
+#define COL8 (1<<1)
+#define COL9 (1<<2)
+#define COL10 (1<<3)
+#define COL11 (1<<2)
+#define COL12 (1<<3)
+#define COL13 (1<<6)
+
+//Trackball pin defs
+#define TRKUP (1<<4)
+#define TRKDN (1<<5)
+#define TRKLT (1<<6)
+#define TRKRT (1<<7)
+#define TRKBTN (1<<6)
+
+
+// Multiple for mouse moves
+#ifndef TRKSTEP
+#define TRKSTEP 20
+#endif
+
+// multiple for mouse scroll
+#ifndef SCROLLSTEP
+#define SCROLLSTEP 5
+#endif
+
+// bit masks
+#define BMASK (COL7 | COL8 | COL9 | COL10)
+#define CMASK (COL13)
+#define DMASK (COL11 | COL12)
+#define FMASK (ROW1 | ROW2 | ROW3 | ROW4)
+#define RROWMASK (RROW1 | RROW2 | RROW3 | RROW4)
+#define MCPMASK (COL0 | COL1 | COL2 | COL3 | COL4 | COL5 | COL6)
+#define TRKMASK (TRKUP | TRKDN | TRKRT | TRKLT)
+
+// Trackball interrupts accumulate over here. Processed on scan
+// Stores prev state of mouse, high bits store direction
+uint8_t trkState = 0;
+uint8_t trkBtnState = 0;
+
+volatile uint8_t tbUpCnt = 0;
+volatile uint8_t tbDnCnt = 0;
+volatile uint8_t tbLtCnt = 0;
+volatile uint8_t tbRtCnt = 0;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+/*
+ * matrix state(1:on, 0:off)
+ * contains the raw values without debounce filtering of the last read cycle.
+ */
+static matrix_row_t raw_matrix[MATRIX_ROWS];
+
+// Debouncing: store for each key the number of scans until it's eligible to
+// change. When scanning the matrix, ignore any changes in keys that have
+// already changed in the last DEBOUNCE scans.
+static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS];
+
+static matrix_row_t read_cols(uint8_t row);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+static void enableInterrupts(void);
+
+static uint8_t mcp23018_reset_loop;
+// static uint16_t mcp23018_reset_loop;
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+uint32_t matrix_timer;
+uint32_t matrix_scan_count;
+#endif
+
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+
+void matrix_init(void)
+{
+ // initialize row and col
+ mcp23018_status = init_mcp23018();
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ raw_matrix[i] = 0;
+ for (uint8_t j=0; j < MATRIX_COLS; ++j) {
+ debounce_matrix[i * MATRIX_COLS + j] = 0;
+ }
+ }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+ matrix_timer = timer_read32();
+ matrix_scan_count = 0;
+#endif
+ matrix_init_quantum();
+}
+
+void matrix_power_up(void) {
+ mcp23018_status = init_mcp23018();
+
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+ matrix_timer = timer_read32();
+ matrix_scan_count = 0;
+#endif
+
+}
+
+// Returns a matrix_row_t whose bits are set if the corresponding key should be
+// eligible to change in this scan.
+matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) {
+ matrix_row_t result = 0;
+ matrix_row_t change = rawcols ^ raw_matrix[row];
+ raw_matrix[row] = rawcols;
+ for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
+ if (debounce_matrix[row * MATRIX_COLS + i]) {
+ --debounce_matrix[row * MATRIX_COLS + i];
+ } else {
+ result |= (1 << i);
+ }
+ if (change & (1 << i)) {
+ debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
+ }
+ }
+ return result;
+}
+
+matrix_row_t debounce_read_cols(uint8_t row) {
+ // Read the row without debouncing filtering and store it for later usage.
+ matrix_row_t cols = read_cols(row);
+ // Get the Debounce mask.
+ matrix_row_t mask = debounce_mask(cols, row);
+ // debounce the row and return the result.
+ return (cols & mask) | (matrix[row] & ~mask);;
+}
+
+uint8_t matrix_scan(void)
+{
+ // TODO: Find what is trashing interrupts
+ enableInterrupts();
+
+ // First we handle the mouse inputs
+ #ifdef BALLER
+ uint8_t pBtn = PINE & TRKBTN;
+
+ #ifdef DEBUG_BALLER
+ // Compare to previous, mod report
+ if (tbUpCnt + tbDnCnt + tbLtCnt + tbRtCnt != 0)
+ xprintf("U: %d D: %d L: %d R: %d B: %d\n", tbUpCnt, tbDnCnt, tbLtCnt, tbRtCnt, (trkBtnState >> 6));
+ #endif
+
+ // Modify the report
+ report_mouse_t pRprt = pointing_device_get_report();
+
+ // Scroll by default, move on layer
+ if (layer_state == 0) {
+ pRprt.h += tbLtCnt * SCROLLSTEP; tbLtCnt = 0;
+ pRprt.h -= tbRtCnt * SCROLLSTEP; tbRtCnt = 0;
+ pRprt.v -= tbUpCnt * SCROLLSTEP; tbUpCnt = 0;
+ pRprt.v += tbDnCnt * SCROLLSTEP; tbDnCnt = 0;
+ } else {
+ pRprt.x -= tbLtCnt * TRKSTEP * (layer_state - 1); tbLtCnt = 0;
+ pRprt.x += tbRtCnt * TRKSTEP * (layer_state - 1); tbRtCnt = 0;
+ pRprt.y -= tbUpCnt * TRKSTEP * (layer_state - 1); tbUpCnt = 0;
+ pRprt.y += tbDnCnt * TRKSTEP * (layer_state - 1); tbDnCnt = 0;
+ }
+
+ #ifdef DEBUG_BALLER
+ if (pRprt.x != 0 || pRprt.y != 0)
+ xprintf("X: %d Y: %d\n", pRprt.x, pRprt.y);
+ #endif
+
+ if ((pBtn != trkBtnState) && ((pBtn >> 6) == 0)) pRprt.buttons |= MOUSE_BTN1;
+ if ((pBtn != trkBtnState) && ((pBtn >> 6) == 1)) pRprt.buttons &= ~MOUSE_BTN1;
+
+ // Save state, push update
+ if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn))
+ pointing_device_set_report(pRprt);
+
+ trkBtnState = pBtn;
+ #endif
+
+ // Then the keyboard
+ if (mcp23018_status) { // if there was an error
+ if (++mcp23018_reset_loop == 0) {
+ // if (++mcp23018_reset_loop >= 1300) {
+ // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
+ // this will be approx bit more frequent than once per second
+ print("trying to reset mcp23018\n");
+ mcp23018_status = init_mcp23018();
+ if (mcp23018_status) {
+ print("left side not responding\n");
+ } else {
+ print("left side attached\n");
+ }
+ }
+ }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+ matrix_scan_count++;
+ uint32_t timer_now = timer_read32();
+ if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) {
+ print("matrix scan frequency: ");
+ pdec(matrix_scan_count);
+ print("\n");
+
+ matrix_timer = timer_now;
+ matrix_scan_count = 0;
+ }
+#endif
+ for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
+ select_row(i);
+ // and select on left hand
+ select_row(i + MATRIX_ROWS_PER_SIDE);
+ // we don't need a 30us delay anymore, because selecting a
+ // left-hand row requires more than 30us for i2c.
+
+ // grab cols from left hand
+ matrix[i] = debounce_read_cols(i);
+ // grab cols from right hand
+ matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE);
+
+ unselect_rows();
+ }
+
+ matrix_scan_quantum();
+ enableInterrupts();
+
+#ifdef DEBUG_MATRIX
+ for (uint8_t c = 0; c < MATRIX_COLS; c++)
+ for (uint8_t r = 0; r < MATRIX_ROWS; r++)
+ if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
+#endif
+
+ return 1;
+}
+
+bool matrix_is_modified(void) // deprecated and evidently not called.
+{
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ pbin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+// Remember this means ROWS
+static void init_cols(void)
+{
+ // init on mcp23018
+ // not needed, already done as part of init_mcp23018()
+
+ // Input with pull-up(DDR:0, PORT:1)
+ DDRF &= ~FMASK;
+ PORTF |= FMASK;
+}
+
+static matrix_row_t read_cols(uint8_t row)
+{
+ if (row < 7) {
+ if (mcp23018_status) { // if there was an error
+ return 0;
+ } else {
+ uint8_t data = 0;
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPIOB, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_start(I2C_ADDR_READ, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_read_nack(ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status < 0) goto out;
+ data = ~((uint8_t)mcp23018_status);
+ mcp23018_status = I2C_STATUS_SUCCESS;
+ out:
+ i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+
+#ifdef DEBUG_MATRIX
+ if (data != 0x00) xprintf("I2C: %d\n", data);
+#endif
+ return data;
+ }
+ } else {
+ /* read from teensy
+ * bitmask is 0b0111001, but we want the lower four
+ * we'll return 1s for the top two, but that's harmless.
+ */
+ // So I need to confuckulate all this
+ //return ~(((PIND & DMASK) >> 1 | ((PINC & CMASK) >> 6) | (PIN)));
+ //return ~((PINF & 0x03) | ((PINF & 0xF0) >> 2));
+ return ~(
+ (((PINF & ROW4) >> 1)
+ | ((PINF & (ROW1 | ROW2 | ROW3)) >> 3))
+ & 0xF);
+ }
+}
+
+// Row pin configuration
+static void unselect_rows(void)
+{
+ // no need to unselect on mcp23018, because the select step sets all
+ // the other row bits high, and it's not changing to a different
+ // direction
+ // Hi-Z(DDR:0, PORT:0) to unselect
+ DDRB &= ~(BMASK | TRKMASK);
+ PORTB &= ~(BMASK);
+ DDRC &= ~CMASK;
+ PORTC &= ~CMASK;
+ DDRD &= ~DMASK;
+ PORTD &= ~DMASK;
+
+ // Fix trashing of DDRB for TB
+ PORTB |= TRKMASK;
+}
+
+static void select_row(uint8_t row)
+{
+ if (row < 7) {
+ // select on mcp23018
+ if (mcp23018_status) { // do nothing on error
+ } else { // set active row low : 0 // set other rows hi-Z : 1
+ mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
+ out:
+ i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ }
+ } else {
+ // Output low(DDR:1, PORT:0) to select
+ switch (row) {
+ case 7:
+ DDRB |= COL7;
+ PORTB &= ~COL7;
+ break;
+ case 8:
+ DDRB |= COL8;
+ PORTB &= ~COL8;
+ break;
+ case 9:
+ DDRB |= COL9;
+ PORTB &= ~COL9;
+ break;
+ case 10:
+ DDRB |= COL10;
+ PORTB &= ~COL10;
+ break;
+ case 11:
+ DDRD |= COL11;
+ PORTD &= ~COL11;
+ break;
+ case 12:
+ DDRD |= COL12;
+ PORTD &= ~COL12;
+ break;
+ case 13:
+ DDRC |= COL13;
+ PORTC &= ~COL13;
+ break;
+ }
+ }
+}
+
+
+// Trackball Interrupts
+static void enableInterrupts(void) {
+ #ifdef BALLER
+ // Set interrupt mask
+ // Set port defs
+ DDRB &= ~TRKMASK;
+ PORTB |= TRKMASK;
+ DDRE &= ~TRKBTN;
+ PORTE |= TRKBTN;
+
+ // Interrupt shenanigans
+ //EIMSK |= (1 << PCIE0);
+ PCMSK0 |= TRKMASK;
+ PCICR |= (1 << PCIE0);
+ sei();
+ #endif
+
+ return;
+}
+#ifdef BALLER
+ISR (PCINT0_vect) {
+ // Don't get fancy, we're in a interrupt here
+ // PCINT reports a interrupt for a change on the bus
+ // We hand the button at scantime for debounce
+ volatile uint8_t pState = PINB & TRKMASK;
+ if ((pState & TRKUP) != (trkState & TRKUP)) tbUpCnt++;
+ if ((pState & TRKDN) != (trkState & TRKDN)) tbDnCnt++;
+ if ((pState & TRKLT) != (trkState & TRKLT)) tbLtCnt++;
+ if ((pState & TRKRT) != (trkState & TRKRT)) tbRtCnt++;
+ trkState = pState;
+
+}
+#endif
diff --git a/keyboards/gergo/readme.md b/keyboards/gergo/readme.md
new file mode 100644
index 0000000000..8fefcfe8d3
--- /dev/null
+++ b/keyboards/gergo/readme.md
@@ -0,0 +1,26 @@
+# Gergo
+
+![Gergo](https://cdn.pbrd.co/images/HVglSWD.jpg)
+
+A compact 50% (14x4) Split Keyboard compatible with i2c modules and a trackball.
+
+[More info on qmk.fm](http://qmk.fm/gergo/)
+
+Keyboard Maintainer: [Jeremy Bernhardt](https://github.com/germ)
+Hardware Supported: Gergo (Kit, Partial, Ready)
+Hardware Availability: [gboards.ca](http://gboards.ca)
+
+## Firmware building
+After cloning the QMK repo and installing dfu-programmer build and flash with. Be sure to reset your keyboard!
+
+ make gergo:germ:dfu
+
+To just test your build with the default keymap
+
+ make gergo:germ
+
+Gadgets and options can be enabled/disabled in keyboards/gergo/keymaps/default/rules.mk . Copy the default directory and make any changes to your layout, if you think they're worth sharing submit a PR!
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Have an idea for a gadget? [Reach out to me!](mailto:bernhardtjeremy@gmail.com)
diff --git a/keyboards/gergo/rules.mk b/keyboards/gergo/rules.mk
new file mode 100644
index 0000000000..aadc1c2cee
--- /dev/null
+++ b/keyboards/gergo/rules.mk
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------------
+# make gergo:germ:dfu
+# Make sure you have dfu-programmer installed!
+# Do not edit this file! Make a copy of keymaps/default and modify that!
+#----------------------------------------------------------------------------
+# Source includes
+SRC += matrix.c i2c_master.c
+
+# Hardware info
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+BOOTLOADER = atmel-dfu
+F_USB = $(F_CPU)
+
+CUSTOM_MATRIX = yes
+POINTING_DEVICE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = yes
diff --git a/keyboards/gh60/keymaps/bluezio/keymap.c b/keyboards/gh60/keymaps/bluezio/keymap.c
index 7b2f16fada..c0f650ecc5 100644
--- a/keyboards/gh60/keymaps/bluezio/keymap.c
+++ b/keyboards/gh60/keymaps/bluezio/keymap.c
@@ -36,6 +36,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_HOME, KC_SPC, KC_END, KC_PSCREEN, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/gh60/keymaps/dbroqua/rules.mk b/keyboards/gh60/keymaps/dbroqua/rules.mk
index 31c63ffd84..5c6afa226f 100644
--- a/keyboards/gh60/keymaps/dbroqua/rules.mk
+++ b/keyboards/gh60/keymaps/dbroqua/rules.mk
@@ -106,7 +106,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: htt
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable RGB Underglow
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
diff --git a/keyboards/gh60/keymaps/dbroqua_7U/rules.mk b/keyboards/gh60/keymaps/dbroqua_7U/rules.mk
index e546019692..e4269566d2 100644
--- a/keyboards/gh60/keymaps/dbroqua_7U/rules.mk
+++ b/keyboards/gh60/keymaps/dbroqua_7U/rules.mk
@@ -106,6 +106,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: htt
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable RGB Underglow
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/gh60/keymaps/robotmaxtron/rules.mk b/keyboards/gh60/keymaps/robotmaxtron/rules.mk
index 2b80ea00e3..6e5d6e1ec2 100644
--- a/keyboards/gh60/keymaps/robotmaxtron/rules.mk
+++ b/keyboards/gh60/keymaps/robotmaxtron/rules.mk
@@ -106,7 +106,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https:/
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable RGB Underglow
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
diff --git a/keyboards/gh60/keymaps/sethbc/rules.mk b/keyboards/gh60/keymaps/sethbc/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/gh60/keymaps/sethbc/rules.mk
+++ b/keyboards/gh60/keymaps/sethbc/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/gh60/keymaps/xyverz/keymap.c b/keyboards/gh60/keymaps/xyverz/keymap.c
index 3709a0c052..6179ce386b 100644
--- a/keyboards/gh60/keymaps/xyverz/keymap.c
+++ b/keyboards/gh60/keymaps/xyverz/keymap.c
@@ -118,10 +118,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/gh60/readme.md b/keyboards/gh60/readme.md
index 01a23aca75..a1469accfd 100644
--- a/keyboards/gh60/readme.md
+++ b/keyboards/gh60/readme.md
@@ -13,7 +13,7 @@ Make example for this keyboard (after setting up your build environment):
make gh60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## GH60 Hardware Information
diff --git a/keyboards/gh80_3000/readme.md b/keyboards/gh80_3000/readme.md
index d6beebf907..ca26947046 100644
--- a/keyboards/gh80_3000/readme.md
+++ b/keyboards/gh80_3000/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make gh80_3000:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/gonnerd/keymaps/default/keymap.c b/keyboards/gonnerd/keymaps/default/keymap.c
index 1055ddc53f..19b7960161 100644
--- a/keyboards/gonnerd/keymaps/default/keymap.c
+++ b/keyboards/gonnerd/keymaps/default/keymap.c
@@ -20,7 +20,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
__x__, __x__, __x__, __x__, __x__, __x__, KC_TRNS, __x__ \
),
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
diff --git a/keyboards/gonnerd/keymaps/default/rules.mk b/keyboards/gonnerd/keymaps/default/rules.mk
index e34aba6927..6de64fcf89 100644
--- a/keyboards/gonnerd/keymaps/default/rules.mk
+++ b/keyboards/gonnerd/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/gonnerd/keymaps/gam3cat/rules.mk b/keyboards/gonnerd/keymaps/gam3cat/rules.mk
index 6eab033cc0..55e681efb8 100644
--- a/keyboards/gonnerd/keymaps/gam3cat/rules.mk
+++ b/keyboards/gonnerd/keymaps/gam3cat/rules.mk
@@ -22,3 +22,4 @@ FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By defaul
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
KEY_LOCK_ENABLE = no # This enables key lock(+260)
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
+
diff --git a/keyboards/gonnerd/keymaps/mauin/rules.mk b/keyboards/gonnerd/keymaps/mauin/rules.mk
index e34aba6927..6de64fcf89 100644
--- a/keyboards/gonnerd/keymaps/mauin/rules.mk
+++ b/keyboards/gonnerd/keymaps/mauin/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/gonnerd/keymaps/tkl/keymap.c b/keyboards/gonnerd/keymaps/tkl/keymap.c
index 1b7e7031a0..404f3825f6 100644
--- a/keyboards/gonnerd/keymaps/tkl/keymap.c
+++ b/keyboards/gonnerd/keymaps/tkl/keymap.c
@@ -25,7 +25,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
diff --git a/keyboards/gonnerd/keymaps/tkl/rules.mk b/keyboards/gonnerd/keymaps/tkl/rules.mk
index b96663efe6..09b51e5a09 100644
--- a/keyboards/gonnerd/keymaps/tkl/rules.mk
+++ b/keyboards/gonnerd/keymaps/tkl/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/gonnerd/readme.md b/keyboards/gonnerd/readme.md
index 9bc879e3d5..223fdf3d3f 100644
--- a/keyboards/gonnerd/readme.md
+++ b/keyboards/gonnerd/readme.md
@@ -11,7 +11,7 @@ Make example for this keyboard (after setting up your build environment):
make gonnerd:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Changing Bootloader
diff --git a/keyboards/h87a/keymaps/default/keymap.c b/keyboards/h87a/keymaps/default/keymap.c
index 20418604ce..89178453d5 100644
--- a/keyboards/h87a/keymaps/default/keymap.c
+++ b/keyboards/h87a/keymaps/default/keymap.c
@@ -35,10 +35,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/hadron/readme.md b/keyboards/hadron/readme.md
index 13ef6c66ab..a6119c4a11 100644
--- a/keyboards/hadron/readme.md
+++ b/keyboards/hadron/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make hadron:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/hadron/ver0/rules.mk b/keyboards/hadron/ver0/rules.mk
deleted file mode 100644
index a3952a5d33..0000000000
--- a/keyboards/hadron/ver0/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-#AUDIO_ENABLE ?= yes # Audio output on port C6 \ No newline at end of file
diff --git a/keyboards/hadron/ver0/ver0.c b/keyboards/hadron/ver0/ver0.c
deleted file mode 100644
index acb3a9105f..0000000000
--- a/keyboards/hadron/ver0/ver0.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "ver0.h" \ No newline at end of file
diff --git a/keyboards/hadron/ver0/ver0.h b/keyboards/hadron/ver0/ver0.h
deleted file mode 100644
index 5710af322e..0000000000
--- a/keyboards/hadron/ver0/ver0.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef VER0_H
-#define VER0_H
-
-#include "../hadron.h"
-
-#endif \ No newline at end of file
diff --git a/keyboards/hadron/ver2/keymaps/side_numpad/rules.mk b/keyboards/hadron/ver2/keymaps/side_numpad/rules.mk
index 687c285bdb..79be3bb87e 100644
--- a/keyboards/hadron/ver2/keymaps/side_numpad/rules.mk
+++ b/keyboards/hadron/ver2/keymaps/side_numpad/rules.mk
@@ -21,6 +21,3 @@ SWAP_HANDS_ENABLE = no # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/hadron/ver3/keymaps/sebaslayout/config.h b/keyboards/hadron/ver3/keymaps/sebaslayout/config.h
new file mode 100644
index 0000000000..6f70f09bee
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/sebaslayout/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c b/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c
new file mode 100644
index 0000000000..01fe45bd05
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c
@@ -0,0 +1,57 @@
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR,
+ KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_P7, KC_P8, KC_P9,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_SCLN, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, MO(1), KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+/* Primary
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | PRTSN|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | ˜ | Q | W | E | R | T | Y | U | I | O | P | BKSP | 7 | 8 | 9 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ' | ; | 4 | 5 | 6 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | Up | /? | 1 | 2 | 3 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI | Raise| Space | Raise| Ctrl | Left | Down |Right | 0 | . | Enter|
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+ LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_HOME, KC_INS, KC_PGUP,
+ 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_END, KC_DEL, KC_PGDN,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, 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_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+/* Secondary
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | | | | | | | | | | F11 | F12 | | Home | Ins | PgUP |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | End | Del | PgDN |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Vol+ | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Vol- | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+};
+
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md b/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md
new file mode 100644
index 0000000000..ce6974ce09
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md
@@ -0,0 +1,7 @@
+![Hadron v3 Layout Image](https://i.imgur.com/Mi5L57j.png)
+
+# My Custome Hadron Layout
+
++ Moved numpad to the right
++ changed F row to standard numbers
++ Bottom row subject to change
diff --git a/keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk b/keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk
index f2a91de897..fc5d9ba1aa 100644
--- a/keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk
+++ b/keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk
@@ -1,7 +1,3 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
AUDIO_ENABLE = no
MOUSEKEY_ENABLE = yes
diff --git a/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/rules.mk b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/rules.mk b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/handwired/datahand/config.h b/keyboards/handwired/datahand/config.h
new file mode 100644
index 0000000000..1ba8479f0a
--- /dev/null
+++ b/keyboards/handwired/datahand/config.h
@@ -0,0 +1,87 @@
+/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+/* Taken from the DataHand PS/2-USB adaptor. */
+#define VENDOR_ID 0x13BA
+#define PRODUCT_ID 0x0017
+#define DEVICE_VER 0x0001
+#define MANUFACTURER DataHand
+#define PRODUCT DataHand
+#define DESCRIPTION DataHand Teensy++ 2.0 conversion
+
+/* key matrix size */
+#define MATRIX_ROWS 13
+#define MATRIX_COLS 4
+
+#define DIODE_DIRECTION CUSTOM_MATRIX
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 0
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ */
+#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Command/Windows key option
+ *
+ * If you define this, the thumb enter key becomes the Command/Windows key. There's still an enter key on the right
+ * ring finger, so this key is much better utilized as the otherwise nonexistent Command key. I think some newer
+ * DataHands let you remap right ring east as Command, but having it on the thumb is nicer. Comment out this define
+ * to use the original layout.
+ */
+#define DATAHAND_THUMB_RETURN_COMMAND
diff --git a/keyboards/handwired/datahand/datahand.h b/keyboards/handwired/datahand/datahand.h
new file mode 100644
index 0000000000..cb9a4d3e3b
--- /dev/null
+++ b/keyboards/handwired/datahand/datahand.h
@@ -0,0 +1,133 @@
+/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ * The first section contains all of the arguements; the second converts the arguments into a two-dimensional array.
+ */
+
+/* Each code is three letters
+ * l or r - left or right hand
+ * p, r, m, i, t - pinky, ring finger, middle finger, index finger, thumb
+ * fingers: n, s, e, w, c - north, south, east, west, and center (manual calls this "well" but we already have "west")
+ * thumb: p, n, c, l, u, k - pad, nail, center, lock (harder center), up, knuckle
+ */
+#define LAYOUT( \
+ lpn, lrn, lmn, lin, rin, rmn, rrn, rpn, \
+lpw, lpc, lpe, lrw, lrc, lre, lmw, lmc, lme, liw, lic, lie, riw, ric, rie, rmw, rmc, rme, rrw, rrc, rre, rpw, rpc, rpe, \
+ lps, lrs, lms, lis, ris, rms, rrs, rps, \
+ ltp, ltn, rtn, rtp, \
+ ltc, rtc, \
+ ltl, rtl, \
+ ltu, ltk, rtk, rtu) \
+{ \
+ {riw, rin, lpw, lpn},\
+ {ric, rie, lpc, lpe},\
+ {ris, rms, lps, lrs},\
+ {rmw, rmn, lrw, lrn},\
+ {rmc, rme, lrc, lre},\
+ {rrw, rrn, lmw, lmn},\
+ {rrc, rre, lmc, lme},\
+ {rrs, rps, lms, lis},\
+ {rpw, rpn, liw, lin},\
+ {rpc, rpe, lic, lie},\
+ {rtk, rtn, ltk, ltn},\
+ {rtc, rtl, ltc, ltl},\
+ {rtp, rtu, ltp, ltu},\
+}
+
+/* Mode LEDs are active-low on Port B on the Teensy. */
+#define LED_MODE_PORT PORTB
+#define LED_TENKEY (1<<3)
+#define LED_FN (1<<4)
+#define LED_NORMAL (1<<5)
+#define LED_NAS (1<<6)
+
+/* Lock LEDs are active-low on Port F on the Teensy. */
+#define LED_LOCK_PORT PORTF
+#define LED_CAPS_LOCK (1<<4)
+#define LED_MOUSE_LOCK (1<<5)
+#define LED_NUM_LOCK (1<<6)
+#define LED_SCROLL_LOCK (1<<7)
+
+
+/* Appendix:
+ * Table based on https://geekhack.org/index.php?topic=12212.msg2059319#msg2059319
+ * Some pin assignments (e.g. for PS/2 I/O) have been fixed.
+ *
+ * Teensy Datahand 8051 pin pin 8051 Datahand Teensy
+ * ------ -------- ---- --- --- ---- -------- ------
+ * GND Mtrx send A P1.0 1 40 VCC VCC VCC
+ * PB7 Mtrx send B P1.1 2 39 P0.0 LED RH NAS PB6
+ * PD0 Mtrx send C P1.2 3 38 P0.1 LED RH NORM PB5
+ * PD1 Mtrx send D P1.3 4 37 P0.2 LED RH FCTN PB4
+ * PD2 RH rcv 0 P1.4 5 36 P0.3 LED RH 10K PB3
+ * PD3 RH rcv 1 P1.5 6 35 P0.4 LED RH unused PB2
+ * PD4 LH rcv 0 P1.6 7 34 P0.5 LED RH unused PE1
+ * PD5 LH rcv 1 P1.7 8 33 P0.6 LED RH unused PE0
+ * PD6 Reset button RST 9 32 P0.7 ? PE7
+ * PD7 ? P3.0 10 31 VPP - PE6
+ * PE0 ? P3.1 11 30 ALE - GND
+ * PE1 kbd data P3.2 12 29 PSEN - AREF
+ * PC0 ? P3.3 13 28 P2.7 ? PF0
+ * PC1 kbd clk P3.4 14 27 P2.6 ? PF1
+ * PC2 ? P3.5 15 26 P2.5 ? PF2
+ * PC3 RAM P3.6 16 25 P2.4 ? PF3
+ * PC4 RAM P3.7 17 24 P2.3 LED D15 LH (CAPLK) PF4
+ * PC5 XTAL2 XTAL2 18 23 P2.2 LED D13 LH (MSELK) PF5
+ * PC6 XTAL1 XTAL1 19 22 P2.1 LED D6 LH (NUMLK) PF6
+ * PC7 GND GND 20 21 P2.0 LED D14 LH (SCRLK) PF7
+ *
+ * JP3 Pinout
+ * 2 - keyboard data
+ * 3 - keyboard clock
+ *
+ * In order to get the Teensy to work, we need to move pin 1 to a different pin. This is
+ * because on the Teensy pin 1 is ground, but we need to write to pin 1 in order to read
+ * the keyboard matrix. An ideal pin to move it to is VPP (pin 31), because this pin tells
+ * the 8051 whether it should read from external or internal memory. The Teensy doesn't
+ * care about that.
+ *
+ * The easiest way to reassign the pin is to use standoffs. You can check out this thread:
+ * https://geekhack.org/index.php?topic=12212.msg235382#msg235382 for a picture of what
+ * this looks like. Note that in the picture the pin has been reassigned to pin 12. We
+ * don't want to do that because we're going to use that pin to send data over PS/2.
+ *
+ * We could if we wanted also reassign the PS/2 pins to Teensy hardware UART pins, but
+ * that's more work. Instead we'll just bit-bang PS/2 because it's an old, slow protocol
+ * (and because there's already a bit-banged PS/2 host implementation in QMK - we just
+ * need to add the device side).
+ *
+ * So overall, we want the following inputs and outputs:
+ * Outputs:
+ * Matrix:
+ * PB7
+ * PD0
+ * PD1
+ * PE6 (moved from pin1, GND)
+ * LEDs:
+ * PB3-6
+ * PF4-7
+ * Inputs:
+ * Matrix:
+ * PD2-5
+ * I/Os (start up as inputs):
+ * PS/2:
+ * PC1
+ * PE1
+ */
diff --git a/keyboards/handwired/datahand/keymaps/default/keymap.c b/keyboards/handwired/datahand/keymaps/default/keymap.c
new file mode 100644
index 0000000000..8f44535594
--- /dev/null
+++ b/keyboards/handwired/datahand/keymaps/default/keymap.c
@@ -0,0 +1,313 @@
+/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include QMK_KEYBOARD_H
+
+#include <stdbool.h>
+
+/* Datahand features not supported:
+ * * All online reprogramming (user settings using the reset button).
+ * * Program Selection features.
+ * * Macros.
+ * * Direct substitutions.
+ * * L/R Modf.
+ * * Mouse Click Lock (Function Direct Access + Mouse Button key).
+ * * Different mouse movement speeds with the two pointer fingers, and using both pointer fingers to move even faster.
+ *
+ * As far as I know, everything else works.
+ */
+
+enum layer {
+ NORMAL,
+#ifdef DATAHAND_THUMB_RETURN_COMMAND
+ NORMAL_THUMB_RETURN_COMMAND,
+#endif
+ FUNCTION_MOUSE,
+ FUNCTION_ARROWS,
+ NAS,
+ NAS_NUMLOCK,
+ NAS_TENKEY,
+ NAS_TENKEY_NUMLOCK,
+
+ NUM_LAYERS
+};
+
+enum custom_keycodes {
+ N = SAFE_RANGE, /* Normal */
+ NS, /* NAS */
+ NSL, /* NAS Lock */
+ NLK, /* Numlock */
+ FN, /* Function mode - needs to be able to switch to mouse or arrow layer */
+ TK0, /* Ten-key off button */
+ TK1, /* Ten-key on button */
+ AR, /* FN arrow mode */
+ MS, /* FN mouse mode */
+ DZ, /* Double zero button */
+};
+
+static bool mouse_enabled = true;
+static bool tenkey_enabled = false;
+static bool numlock_enabled = false;
+static bool nas_locked = false;
+
+/* Declared weak so that it can easily be overridden. */
+__attribute__((weak)) const uint16_t PROGMEM keymaps[NUM_LAYERS][MATRIX_ROWS][MATRIX_COLS] = {
+[NORMAL] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_U, KC_I, KC_O, KC_P,
+KC_DEL, KC_A, KC_LBRC, KC_ESC, KC_S, KC_B, KC_GRV, KC_D, KC_T, KC_DQT, KC_F, KC_G, KC_H, KC_J, KC_QUOT, KC_Y, KC_K, KC_COLN, KC_N, KC_L, KC_ENT, KC_RBRC, KC_SCLN, KC_BSLS,
+ KC_Z, KC_X, KC_C, KC_V, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+ KC_ENT, KC_TAB, KC_BSPC, KC_SPC,
+ KC_LSFT, NS,
+ KC_CAPS, NSL,
+ N, KC_LCTL, KC_LALT, FN),
+
+#ifdef DATAHAND_THUMB_RETURN_COMMAND
+[NORMAL_THUMB_RETURN_COMMAND] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_LCMD, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+#endif
+
+[FUNCTION_MOUSE] = LAYOUT(
+ KC_F2, KC_F4, KC_F6, KC_MS_U, KC_MS_U, KC_F8, KC_F10, KC_PGUP,
+_______, KC_NO, KC_SLCK, _______, KC_BTN3, NLK, KC_BTN1, MS, KC_BTN2, KC_MS_L, KC_BTN1, KC_MS_R, KC_MS_L, KC_BTN2, KC_MS_R, KC_END, AR, KC_LSFT, KC_INS, KC_9, KC_ENT, KC_F11, KC_0, KC_F12,
+ KC_F1, KC_F3, KC_F5, KC_MS_D, KC_MS_D, KC_F7, KC_F9, KC_PGDN,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[FUNCTION_ARROWS] = LAYOUT(
+ _______, _______, _______, KC_UP, KC_UP, _______, _______, _______,
+_______, _______, _______, _______, KC_LCTL, _______, _______, _______, _______, KC_LEFT, KC_HOME, KC_RGHT, KC_LEFT, KC_HOME, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_DOWN, KC_DOWN, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[NAS] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
+_______, KC_1, KC_TILD, _______, KC_2, NLK, KC_LABK, KC_3, KC_RABK, KC_SLSH, KC_4, KC_5, KC_6, KC_7, KC_UNDS, KC_CIRC, KC_8, KC_ENT, KC_SCLN, KC_9, KC_BSLS, TK0, KC_0, TK1,
+ KC_EQL, KC_X, KC_PERC, KC_MINS, KC_PLUS, KC_DOT, KC_SLSH, KC_QUES,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[NAS_NUMLOCK] = LAYOUT(
+ _______, _______, _______, _______, _______, KC_PAST, _______, _______,
+_______, KC_KP_1, _______, _______, KC_KP_2, _______, _______, KC_KP_3, _______, KC_PSLS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_7, _______, _______, KC_KP_8, _______, _______, KC_KP_9, KC_PENT, _______, KC_KP_0, _______,
+ KC_PEQL, _______, _______, KC_PMNS, KC_PPLS, _______, KC_PDOT, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[NAS_TENKEY] = LAYOUT(
+ _______, _______, _______, KC_UP, KC_7, KC_8, KC_9, KC_ASTR,
+_______, KC_QUOT, _______, _______, KC_DLR, _______, _______, KC_AMPR, _______, KC_LEFT, KC_HOME, KC_RGHT, KC_0, KC_4, DZ, KC_PLUS, KC_5, KC_MINS, KC_EQL, KC_6, KC_ENT, _______, KC_DOT, _______,
+ KC_LPRN, KC_RPRN, _______, KC_DOWN, KC_1, KC_2, KC_3, KC_SLSH,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[NAS_TENKEY_NUMLOCK] = LAYOUT(
+ _______, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_KP_4, _______, KC_PPLS, KC_KP_5, KC_PMNS, KC_PEQL, KC_KP_6, KC_PENT, _______, KC_PDOT, _______,
+ _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PSLS,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+};
+
+static void lock_led_set(bool on, uint8_t led) {
+ if (on) {
+ LED_LOCK_PORT &= ~led;
+ } else {
+ LED_LOCK_PORT |= led;
+ }
+}
+
+static void mode_led_set(uint8_t led) {
+ static const uint8_t ALL_MODE_LEDS = LED_FN | LED_NORMAL | LED_NAS | LED_TENKEY;
+ LED_MODE_PORT |= ALL_MODE_LEDS;
+ LED_MODE_PORT &= ~led;
+}
+
+static void layer_set(bool on, uint8_t layer) {
+ if (on) {
+ layer_on(layer);
+ } else {
+ layer_off(layer);
+ }
+
+ if (layer_state_is(NAS) || layer_state_is(NAS_NUMLOCK) || layer_state_is(NAS_TENKEY) || layer_state_is(NAS_TENKEY_NUMLOCK)) {
+ if (tenkey_enabled) {
+ mode_led_set(LED_NAS | LED_TENKEY);
+ } else {
+ mode_led_set(LED_NAS);
+ }
+ } else if (layer_state_is(FUNCTION_MOUSE) || layer_state_is(FUNCTION_ARROWS)) {
+ mode_led_set(LED_FN);
+ } else if (layer_state_is(NORMAL)) {
+ mode_led_set(LED_NORMAL);
+ }
+}
+
+static void set_normal(void) {
+ layer_move(NORMAL);
+
+#ifdef DATAHAND_THUMB_RETURN_COMMAND
+ layer_set(true, NORMAL_THUMB_RETURN_COMMAND);
+#endif
+
+ /* Then call layer_set to update LEDs. */
+ layer_set(true, NORMAL);
+}
+
+static void set_nas(bool on) {
+ /* Always turn on the base NAS layer so other layers can fall through. */
+ layer_set(on, NAS);
+
+ layer_set(on && numlock_enabled, NAS_NUMLOCK);
+ layer_set(on && tenkey_enabled, NAS_TENKEY);
+ layer_set(on && tenkey_enabled && numlock_enabled, NAS_TENKEY_NUMLOCK);
+}
+
+static void set_tenkey(bool on) {
+ tenkey_enabled = on;
+
+ /* We have to be on the NAS layer in order to be able to toggle TK.
+ * Re-toggle it on so that we move to the right layer (and set the right LED).
+ */
+ set_nas(true);
+}
+
+static void toggle_numlock(void) {
+ numlock_enabled = !numlock_enabled;
+ lock_led_set(numlock_enabled, LED_NUM_LOCK);
+
+ if (layer_state_is(NAS)) {
+ /* If we're already in NAS, re-set it so that we activate the numlock layer. */
+ set_nas(true);
+ }
+}
+
+static void set_function(void) {
+ /* Make sure to turn off NAS if we're entering function */
+ set_nas(false);
+
+ /* Always turn on the mouse layer so the arrow layer can fall through. */
+ layer_set(true, FUNCTION_MOUSE);
+ layer_set(!mouse_enabled, FUNCTION_ARROWS);
+}
+
+static void set_mouse_enabled(bool on) {
+ mouse_enabled = on;
+
+ /* Re-run set_function to set our layers correctly. */
+ set_function();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ bool pressed = record->event.pressed;
+
+ switch(keycode) {
+ case N:
+ if (pressed) {
+ set_normal();
+ }
+ break;
+
+ case NS:
+ if (pressed) {
+ nas_locked = false;
+ }
+ set_nas(pressed);
+ break;
+
+ case NSL:
+ if (pressed) {
+ nas_locked = true;
+ set_nas(true);
+ }
+ break;
+
+ case NLK:
+ if (pressed) {
+ toggle_numlock();
+ SEND_STRING(SS_DOWN(X_NUMLOCK));
+ } else {
+ SEND_STRING(SS_UP(X_NUMLOCK));
+ }
+ break;
+
+ case FN:
+ if (pressed) {
+ set_function();
+ }
+ break;
+
+ case TK0:
+ if (pressed) {
+ set_tenkey(false);
+ }
+ break;
+
+ case TK1:
+ if (pressed) {
+ set_tenkey(true);
+ }
+ break;
+
+ case MS:
+ if (pressed) {
+ set_mouse_enabled(true);
+ }
+ break;
+
+ case AR:
+ if (pressed) {
+ set_mouse_enabled(false);
+ }
+ break;
+
+ case DZ:
+ if (pressed) {
+ SEND_STRING(SS_TAP(X_KP_0) SS_TAP(X_KP_0));
+ }
+ break;
+ }
+
+ return true;
+};
+
+void matrix_init_user(void) {
+#ifdef DATAHAND_THUMB_RETURN_COMMAND
+ set_normal();
+#endif
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+ lock_led_set(usb_led & (1<<USB_LED_NUM_LOCK), LED_NUM_LOCK);
+ lock_led_set(usb_led & (1<<USB_LED_CAPS_LOCK), LED_CAPS_LOCK);
+ lock_led_set(usb_led & (1<<USB_LED_SCROLL_LOCK), LED_SCROLL_LOCK);
+}
diff --git a/keyboards/handwired/datahand/matrix.c b/keyboards/handwired/datahand/matrix.c
new file mode 100644
index 0000000000..a08450d779
--- /dev/null
+++ b/keyboards/handwired/datahand/matrix.c
@@ -0,0 +1,125 @@
+/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "datahand.h"
+
+#include "matrix.h"
+#include "action.h"
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+
+static matrix_row_t matrix[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void select_row(uint8_t row);
+
+void matrix_init(void) {
+ /* See datahand.h for more detail on pins. */
+
+ /* 7 - matrix scan; 6-3 - mode LEDs */
+ DDRB = 0b11111000;
+
+ /* 1-0 - matrix scan */
+ DDRD = 0b00000011;
+
+ /* 6 - matrix scan */
+ DDRE = 0b01000000;
+
+ /* 7-4 - lock LEDs */
+ DDRF = 0b11110000;
+
+ /* Turn off the non-Normal LEDs (they're active low). */
+ PORTB |= LED_TENKEY | LED_FN | LED_NAS;
+
+ /* Turn off the lock LEDs. */
+ PORTF |= LED_CAPS_LOCK | LED_NUM_LOCK | LED_SCROLL_LOCK | LED_MOUSE_LOCK;
+
+ matrix_init_user();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ select_row(row);
+ /* The default hardware works down to at least 100us, but I have a replacement
+ * photodiode that responds a little more slowly. Cranking it up to 1000us fixes
+ * shadowing issues.
+ */
+ _delay_us(1000);
+ matrix[row] = read_cols();
+ }
+
+ matrix_scan_user();
+
+ return 1;
+}
+
+matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+ print("\nr/c 01234567\n");
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row);
+ print(": ");
+ print_bin_reverse8(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ return process_record_user(keycode, record);
+}
+
+static void select_row(uint8_t row) {
+ /* Original 8051: P1 bits 0-3 (pins 1-4)
+ * Teensy++: PE0, PB7, PD0, PD1
+ */
+
+ if (row & (1<<0)) {
+ PORTE |= (1<<6);
+ } else {
+ PORTE &= ~(1<<6);
+ }
+
+ if (row & (1<<1)) {
+ PORTB |= (1<<7);
+ } else {
+ PORTB &= ~(1<<7);
+ }
+
+ if (row & (1<<2)) {
+ PORTD |= (1<<0);
+ } else {
+ PORTD &= ~(1<<0);
+ }
+
+ if (row & (1<<3)) {
+ PORTD |= (1<<1);
+ } else {
+ PORTD &= ~(1<<1);
+ }
+}
+
+static matrix_row_t read_cols(void) {
+ /* Original 8051: P1 bits 4-7 (pins 5-8)
+ * Teensy++: PD bits 2-5
+ */
+
+ return (PIND & 0b00111100) >> 2;
+}
diff --git a/keyboards/handwired/datahand/readme.md b/keyboards/handwired/datahand/readme.md
new file mode 100644
index 0000000000..923cebb00e
--- /dev/null
+++ b/keyboards/handwired/datahand/readme.md
@@ -0,0 +1,15 @@
+# DataHand
+
+A keyboard designed to prevent RSI. See [Wikipedia](https://en.wikipedia.org/wiki/DataHand) and [this website](http://octopup.org/computer/datahand) for more info.
+
+To use this firmware, you have to replace the stock microcontroller with a Teensy++ 2.0. This is relatively easy and also reversible. See the notes at the bottom of datahand.h for more info.
+
+Keyboard Maintainer: [Nikolaus Wittenstein](https://github.com/adzenith)
+Hardware Supported: DataHand Personal or Pro II
+Hardware Availability: No longer in production
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/datahand:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/datahand/rules.mk b/keyboards/handwired/datahand/rules.mk
new file mode 100644
index 0000000000..59f14e17a4
--- /dev/null
+++ b/keyboards/handwired/datahand/rules.mk
@@ -0,0 +1,59 @@
+# Project-specific includes
+SRC = matrix.c
+
+# MCU name
+MCU = at90usb1286
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = halfkay
+
+# Build Options
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+CUSTOM_MATRIX = yes # We definitely have a nonstandard matrix
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/downbubble/config.h b/keyboards/handwired/downbubble/config.h
new file mode 100644
index 0000000000..0da13a4b15
--- /dev/null
+++ b/keyboards/handwired/downbubble/config.h
@@ -0,0 +1,245 @@
+/*
+Copyright 2018 Don Chiou
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Flehrad
+#define PRODUCT downbubble
+#define DESCRIPTION An Ergonomic Centered Numpad Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 20
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F1, F2, F3, F4, F5, F6 }
+#define MATRIX_COL_PINS { F7, C7, C6, C5, C4, C3, C2, C1, C0, E1, E0, D7, D6, D5, D4, D3, D2, D1, D0, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/handwired/downbubble/downbubble.c b/keyboards/handwired/downbubble/downbubble.c
new file mode 100644
index 0000000000..48be8e4998
--- /dev/null
+++ b/keyboards/handwired/downbubble/downbubble.c
@@ -0,0 +1,16 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "downbubble.h"
diff --git a/keyboards/handwired/downbubble/downbubble.h b/keyboards/handwired/downbubble/downbubble.h
new file mode 100644
index 0000000000..0df39dd9ee
--- /dev/null
+++ b/keyboards/handwired/downbubble/downbubble.h
@@ -0,0 +1,111 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_standard( \
+ K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K418, \
+ K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
+ { K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
+ }
+
+#define LAYOUT_split_bs( \
+ K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119,\
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K418, \
+ K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
+ { K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
+ }
+
+#define LAYOUT_split_rshift( \
+ K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K417, K418, \
+ K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, K417, K418, KC_NO }, \
+ { K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
+ }
+
+#define LAYOUT_split_numpad( \
+ K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, K317, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, K416, K418, \
+ K50, K51, K52, K53, K54, K56, K57, K58, K59, K510, K512, K513, K514, K516, K517, K518, K519 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
+ { K50, K51, K52, K53, K54, KC_NO, K56, K57, K58, K59, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
+ }
+
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119,\
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, K317, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, K416, K417, K418, \
+ K50, K51, K52, K53, K54, K56, K57, K58, K59, K510, K512, K513, K514, K516, K517, K518, K519 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, K417, K418, KC_NO }, \
+ { K50, K51, K52, K53, K54, KC_NO, K56, K57, K58, K59, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
+ }
diff --git a/keyboards/handwired/downbubble/info.json b/keyboards/handwired/downbubble/info.json
new file mode 100644
index 0000000000..c5cd97de54
--- /dev/null
+++ b/keyboards/handwired/downbubble/info.json
@@ -0,0 +1,559 @@
+{
+ "keyboard_name": "downbubble",
+ "url": "",
+ "maintainer": "flehrad",
+ "width": 22.75,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_standard": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1, "w":2},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K17", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K29", "x":10.75, "y":2, "h":2},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":2.75},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5, "w":2},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K49", "x":10.75, "y":4, "h":2},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ },
+ "LAYOUT_split_bs": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1},
+ {"label":"K117", "x":19.75, "y":1},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K17", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K29", "x":10.75, "y":2, "h":2},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":2.75},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5, "w":2},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K49", "x":10.75, "y":4, "h":2},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ },
+ "LAYOUT_split_rshift": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1, "w":2},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K17", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K29", "x":10.75, "y":2, "h":2},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":1.75},
+ {"label":"K417", "x":19.75, "y":4},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5, "w":2},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K49", "x":10.75, "y":4, "h":2},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ },
+ "LAYOUT_split_numpad": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1, "w":2},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K17", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K29", "x":10.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K39", "x":10.75, "y":3},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K49", "x":10.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":2.75},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5},
+ {"Label":"K57", "x":8.75, "y":5},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K59", "x":10.75, "y":5},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1},
+ {"label":"K117", "x":19.75, "y":1},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K27", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K29", "x":10.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K39", "x":10.75, "y":3},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K49", "x":10.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":1.75},
+ {"label":"K417", "x":19.75, "y":4},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5},
+ {"label":"K57", "x":8.75, "y":5},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K59", "x":10.75, "y":5},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/downbubble/keymaps/default/config.h b/keyboards/handwired/downbubble/keymaps/default/config.h
new file mode 100644
index 0000000000..4496c59100
--- /dev/null
+++ b/keyboards/handwired/downbubble/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/handwired/downbubble/keymaps/default/keymap.c b/keyboards/handwired/downbubble/keymaps/default/keymap.c
new file mode 100644
index 0000000000..48303900fb
--- /dev/null
+++ b/keyboards/handwired/downbubble/keymaps/default/keymap.c
@@ -0,0 +1,103 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_standard(\
+ 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_NLCK, KC_HOME, KC_TRNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ LAYOUT_split_bs(\
+ 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_NLCK, KC_HOME, KC_TRNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_END, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ LAYOUT_split_rshift(\
+ 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_NLCK, KC_HOME, KC_TRNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ LAYOUT_split_numpad(\
+ 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_NLCK, KC_HOME, KC_TRNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_PENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_TRNS, KC_PDOT, KC_TRNS, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ LAYOUT_all(\
+ 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_NLCK, KC_HOME, KC_TRNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_END, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_PENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_TRNS, KC_PDOT, KC_TRNS, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/downbubble/keymaps/default/readme.md b/keyboards/handwired/downbubble/keymaps/default/readme.md
new file mode 100644
index 0000000000..757d990625
--- /dev/null
+++ b/keyboards/handwired/downbubble/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymaps for downbubble
diff --git a/keyboards/handwired/downbubble/license b/keyboards/handwired/downbubble/license
new file mode 100644
index 0000000000..e6e77b0890
--- /dev/null
+++ b/keyboards/handwired/downbubble/license
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/keyboards/handwired/downbubble/readme.md b/keyboards/handwired/downbubble/readme.md
new file mode 100644
index 0000000000..e662345127
--- /dev/null
+++ b/keyboards/handwired/downbubble/readme.md
@@ -0,0 +1,15 @@
+# downbubble
+
+Prototype hand-wired version of this keyboard - https://imgur.com/a/0KbX1JH
+
+This is an ergonomic keyboard with a 5 degree rotation on keyboard halves, and a rotated numpad in the center for RH users.
+
+Keyboard Maintainer: [Flehrad](https://github.com/flehrad)
+Hardware Supported: downbubble PCB, AT90USB1286 MCU, MX switches and MiniUSB connector
+Hardware Availability: The Board Podcast Slack
+
+Make example for this keyboard (after setting up your build environment):
+
+ make downbubble:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/downbubble/rules.mk b/keyboards/handwired/downbubble/rules.mk
new file mode 100644
index 0000000000..87d0d4a1e2
--- /dev/null
+++ b/keyboards/handwired/downbubble/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+MCU = at90usb1286
+#MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/handwired/frenchdev/keymaps/default/keymap.c b/keyboards/handwired/frenchdev/keymaps/default/keymap.c
index 635383b55b..3d0f1fbfb8 100644
--- a/keyboards/handwired/frenchdev/keymaps/default/keymap.c
+++ b/keyboards/handwired/frenchdev/keymaps/default/keymap.c
@@ -176,11 +176,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void hold_shift(void) {
shift_count = shift_count + 1;
register_code(KC_LSHIFT);
@@ -359,10 +354,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
return MACRO_NONE;
};
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/handwired/frenchdev/rules.mk b/keyboards/handwired/frenchdev/rules.mk
index 2b70ae564e..c82bf4a389 100644
--- a/keyboards/handwired/frenchdev/rules.mk
+++ b/keyboards/handwired/frenchdev/rules.mk
@@ -87,6 +87,3 @@ AUDIO_ENABLE = no # Audio output on port C6
RGBLIGHT_ENABLE = no
API_SYSEX_ENABLE = no
-#ifndef QUANTUM_DIR
-# include ../../../Makefile
-#endif
diff --git a/keyboards/handwired/hexon38/config.h b/keyboards/handwired/hexon38/config.h
new file mode 100644
index 0000000000..23eb51e014
--- /dev/null
+++ b/keyboards/handwired/hexon38/config.h
@@ -0,0 +1,60 @@
+// see https://github.com/pepaslabs/hexon38
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER pepaslabs
+#define PRODUCT hexon38
+#define DESCRIPTION "A handmade non-split ergonomic 38-key keyboard, inspired by the lil38. See https://github.com/pepaslabs/hexon38."
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, F0, B2, F4 }
+#define MATRIX_COL_PINS { C6, D3, D2, D1, D0, B7, F6, F7, B6, B5, B4, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 0
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+
+// Disabled features:
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* prevent stuck modifiers */
+//#define PREVENT_STUCK_MODIFIERS
diff --git a/keyboards/handwired/hexon38/hexon38.c b/keyboards/handwired/hexon38/hexon38.c
new file mode 100644
index 0000000000..d830adef3c
--- /dev/null
+++ b/keyboards/handwired/hexon38/hexon38.c
@@ -0,0 +1,3 @@
+// see https://github.com/pepaslabs/hexon38
+
+#include "hexon38.h"
diff --git a/keyboards/handwired/hexon38/hexon38.h b/keyboards/handwired/hexon38/hexon38.h
new file mode 100644
index 0000000000..f98f460faf
--- /dev/null
+++ b/keyboards/handwired/hexon38/hexon38.h
@@ -0,0 +1,17 @@
+// see https://github.com/pepaslabs/hexon38
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K002, K003, K004, K005, K006, K007, K008, K009, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
+ K200, K201, K202, K203, K204, K207, K208, K209, K210, K211, \
+ K302, K303, K304, K305, K306, K307, K308, K309 \
+) { \
+ { KC_NO, KC_NO, K002, K003, K004, K005, K006, K007, K008, K009, KC_NO, KC_NO }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
+ { K200, K201, K202, K203, K204, KC_NO, KC_NO, K207, K208, K209, K210, K211 }, \
+ { KC_NO, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, KC_NO, KC_NO } \
+}
diff --git a/keyboards/handwired/hexon38/keymaps/default/keymap.c b/keyboards/handwired/hexon38/keymaps/default/keymap.c
new file mode 100644
index 0000000000..c3805991f0
--- /dev/null
+++ b/keyboards/handwired/hexon38/keymaps/default/keymap.c
@@ -0,0 +1,407 @@
+// see https://github.com/pepaslabs/hexon38
+
+#include "hexon38.h"
+
+#define A_ KC_A
+#define B_ KC_B
+#define C_ KC_C
+#define D_ KC_D
+#define E_ KC_E
+#define F_ KC_F
+#define G_ KC_G
+#define H_ KC_H
+#define I_ KC_I
+#define J_ KC_J
+#define K_ KC_K
+#define L_ KC_L
+#define M_ KC_M
+#define N_ KC_N
+#define O_ KC_O
+#define P_ KC_P
+#define Q_ KC_Q
+#define R_ KC_R
+#define S_ KC_S
+#define T_ KC_T
+#define U_ KC_U
+#define V_ KC_V
+#define W_ KC_W
+#define X_ KC_X
+#define Y_ KC_Y
+#define Z_ KC_Z
+
+// Dual-role keys: modifier when held, alpha when tapped.
+#define A_CTL CTL_T(KC_A)
+#define S_ALT ALT_T(KC_S)
+#define D_GUI GUI_T(KC_D)
+#define F_SFT SFT_T(KC_F)
+#define J_SFT SFT_T(KC_J)
+#define K_GUI GUI_T(KC_K)
+#define L_ALT ALT_T(KC_L)
+#define COLN_CTL CTL_T(KC_SCLN)
+
+#define ______ KC_TRNS
+#define LSHIFT KC_LSHIFT
+#define RSHIFT KC_RSHIFT
+#define COMMA KC_COMM
+#define SLASH KC_SLSH
+#define SPACE KC_SPC
+#define TAB KC_TAB
+#define BKSPC KC_BSPC
+#define ENTER KC_ENT
+#define PERIOD KC_DOT
+
+#define BASE_LAYER LAYOUT
+#define BLANK_LAYER LAYOUT
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ BASE_LAYER(
+// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
+ W_ , E_ , R_ , T_ , Y_ , U_ , I_ , O_ ,
+//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------.
+ Q_ , A_CTL , S_ALT , D_GUI , F_SFT , G_ , H_ , J_SFT , K_GUI , L_ALT ,COLN_CTL, P_ ,
+//|--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------|
+ B_ , Z_ , X_ , C_ , V_ , M_ , COMMA , PERIOD , SLASH , N_ ,
+//`--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------'
+
+// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
+ LSHIFT , SPACE , TAB , DEBUG , SPACE , BKSPC , ENTER , RSHIFT
+// `--------+--------+--------+--------' `--------+--------+--------+--------'
+),
+
+ BLANK_LAYER(
+// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
+ ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
+//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------.
+ ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
+//|--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------|
+ ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
+//`--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------'
+
+// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
+ ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______
+// `--------+--------+--------+--------' `--------+--------+--------+--------'
+)
+
+};
+
+// a linked list of pending key events (press or release) which we haven't processed yet.
+struct _pending_key_t {
+ uint16_t keycode;
+ keyrecord_t record;
+ struct _pending_key_t *next;
+};
+typedef struct _pending_key_t pending_key_t;
+
+// worst case is 10 down strokes and 1 up stroke before we can start disambiguating.
+#define RINGSIZE 11
+
+// a ring buffer and linked list to store pending key events (presses and releases).
+// (basically, this is a fixed-allocation linked list.)
+struct _kring_t {
+ // the actual key events.
+ pending_key_t items[RINGSIZE];
+ // the index of the oldest item, or -1 if no items.
+ int8_t ifirst;
+ // the index of the most recently added item, or -1 if no items.
+ int8_t ilast;
+ // the number of items in the ring.
+ uint8_t count;
+ // the head of the linked list.
+ pending_key_t *head;
+};
+typedef struct _kring_t kring_t;
+
+// safe accessor to the i-th item of the linked list (returns pointer or NULL).
+pending_key_t* kring_get(kring_t *ring, uint8_t i) {
+ if (i >= ring->count) {
+ return NULL;
+ }
+ uint8_t j = (ring->ifirst + i) % RINGSIZE;
+ return &(ring->items[j]);
+}
+
+// return the last key in the list of buffered keys.
+pending_key_t* kring_last(kring_t *ring) {
+ if (ring->count == 0) {
+ return NULL;
+ }
+ return kring_get(ring, ring->count - 1);
+}
+
+// remove the oldest item from the ring (the head of the list).
+void kring_pop(kring_t *ring) {
+ if (ring->count > 0) {
+ ring->ifirst += 1;
+ ring->ifirst %= RINGSIZE;
+ ring->head = ring->head->next;
+ ring->count -= 1;
+ }
+}
+
+// add an item to the ring (append to the list).
+void kring_append(kring_t *ring, uint16_t keycode, keyrecord_t *record) {
+ if (ring->count >= RINGSIZE) {
+ // uh oh, we overflowed the capacity of our buffer :(
+ return;
+ }
+
+ // if the ring is empty, insert at index 0.
+ if (ring->count == 0) {
+ ring->count += 1;
+ ring->ifirst = 0;
+ ring->ilast = 0;
+ ring->head = &(ring->items[0]);
+ }
+ // else, append it onto the end.
+ else {
+ ring->count += 1;
+ ring->ilast += 1;
+ ring->ilast %= RINGSIZE;
+ }
+
+ // the index at which we should insert this item.
+ int8_t i = ring->ilast;
+
+ // insert the item.
+ ring->items[i].keycode = keycode;
+ ring->items[i].record.event = record->event;
+#ifndef NO_ACTION_TAPPING
+ ring->items[i].record.tap = record->tap;
+#endif
+ ring->items[i].next = NULL;
+
+ // update the previous item to point to this item.
+ if (ring->count > 1) {
+ kring_get(ring, ring->count - 2)->next = &(ring->items[i]);
+ }
+}
+
+kring_t g_pending;
+
+void matrix_init_user(void) {
+ g_pending.ifirst = -1;
+ g_pending.ilast = -1;
+ g_pending.count = 0;
+ g_pending.head = NULL;
+}
+
+void matrix_scan_user(void) {}
+
+/*
+a_ a-: emit a
+a_ b_ b- a-: emit SHIFT+b
+a_ b_ a- b-: emit a, b
+dual1down, dual1up -> norm1down, norm1up
+dual1down, norm2down, norm2up -> mod1down, norm2down, norm2up
+dual1down, norm2down, dual1up -> norm1down, norm2down, norm1up
+dual1down, dual2down, norm3down, norm3up -> mod1down, mod2down, norm3down, norm3up
+so, a dual key can't be disambiguated until the next keyup of a keydown (not including keyups from keys before it).
+*/
+
+bool is_ambiguous_kc(uint16_t kc) {
+ // See the MT() define: https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum_keycodes.h#L642
+ // See the QK_MOD_TAP case: https://github.com/qmk/qmk_firmware/blob/master/quantum/keymap_common.c#L134
+ uint8_t mod = mod_config((kc >> 0x8) & 0x1F);
+ return mod != 0;
+}
+
+bool is_down(pending_key_t *k) {
+ return k->record.event.pressed;
+}
+
+bool is_up(pending_key_t *k) {
+ return !is_down(k);
+}
+
+bool keys_match(pending_key_t *a, pending_key_t *b) {
+ return a->record.event.key.col == b->record.event.key.col
+ && a->record.event.key.row == b->record.event.key.row;
+}
+
+// both the down and corresponding upstroke of a keypress.
+struct _pending_pair_t {
+ pending_key_t *down;
+ pending_key_t *up;
+};
+typedef struct _pending_pair_t pending_pair_t;
+
+// returns true if this keydown event has a corresponding keyup event in the
+// list of buffered keys. also fills out 'p'.
+bool is_downup_pair(pending_key_t *k, pending_pair_t *p) {
+ // first, make sure this event is keydown.
+ if (!is_down(k)) {
+ return false;
+ }
+ // now find its matching keyup.
+ pending_key_t *next = k->next;
+ while (next != NULL) {
+ if (keys_match(k, next) && is_up(next)) {
+ // found it.
+ if (p != NULL) {
+ p->down = k;
+ p->up = next;
+ }
+ return true;
+ }
+ next = next->next;
+ }
+ // didn't find it.
+ return false;
+}
+
+// given a QK_MOD_TAP keycode, return the KC_* version of the modifier keycode.
+uint16_t get_mod_kc(uint16_t keycode) {
+ uint8_t mod = mod_config((keycode >> 0x8) & 0x1F);
+ switch (mod) {
+ case MOD_LCTL:
+ return KC_LCTL;
+ case MOD_RCTL:
+ return KC_RCTL;
+ case MOD_LSFT:
+ return KC_LSFT;
+ case MOD_RSFT:
+ return KC_RSFT;
+ case MOD_LALT:
+ return KC_LALT;
+ case MOD_RALT:
+ return KC_RALT;
+ case MOD_LGUI:
+ return KC_LGUI;
+ case MOD_RGUI:
+ return KC_RGUI;
+ default:
+ // shrug? this shouldn't happen.
+ return keycode;
+ }
+}
+
+bool is_mod_kc(uint16_t keycode) {
+ switch (keycode) {
+ case QK_MODS ... QK_MODS_MAX:
+ return true;
+ default:
+ return false;
+ }
+}
+
+void interpret_as_mod(pending_pair_t *p) {
+ // see https://github.com/qmk/qmk_firmware/issues/1503
+ pending_key_t *k;
+ k = p->down;
+ if (k != NULL) {
+ k->keycode = get_mod_kc(k->keycode);
+ }
+ k = p->up;
+ if (k != NULL) {
+ k->keycode = get_mod_kc(k->keycode);
+ }
+}
+
+void interpret_as_normal(pending_pair_t *p) {
+ pending_key_t *k;
+ k = p->down;
+ if (k != NULL) {
+ k->keycode = k->keycode & 0xFF;
+ }
+ k = p->up;
+ if (k != NULL) {
+ k->keycode = k->keycode & 0xFF;
+ }
+}
+
+void execute_head_and_pop(kring_t *ring) {
+ pending_key_t *head = kring_get(ring, 0);
+ uint16_t kc = head->keycode;
+ if (is_mod_kc(kc)) {
+ if (is_down(head)) {
+ dprintf(" %s: mod down 0x%04X\n", __func__, kc);
+ set_mods(get_mods() | MOD_BIT(kc));
+ } else {
+ dprintf(" %s: mod up 0x%04X\n", __func__, kc);
+ set_mods(get_mods() & ~MOD_BIT(kc));
+ }
+ } else {
+ if (is_down(head)) {
+ dprintf(" %s: key down 0x%04X\n", __func__, kc);
+ register_code16(kc);
+ } else {
+ dprintf(" %s: key up 0x%04X\n", __func__, kc);
+ unregister_code16(kc);
+ }
+ }
+ kring_pop(ring);
+}
+
+// try to figure out what the next pending keypress means.
+bool parse_next(kring_t *pending) {
+ pending_pair_t p;
+ pending_key_t *first = kring_get(pending, 0);
+ if (!is_ambiguous_kc(first->keycode)) {
+ // this pending key isn't ambiguous, so execute it.
+ dprintf(" %s: found unambiguous key\n", __func__);
+ execute_head_and_pop(pending);
+ return true;
+ } else if (is_ambiguous_kc(first->keycode) && is_up(first)) {
+ dprintf(" %s: interpreting keyup as mod\n", __func__);
+ p.down = NULL;
+ p.up = first;
+ interpret_as_mod(&p);
+ execute_head_and_pop(pending);
+ return true;
+ } else if (is_downup_pair(first, &p)) {
+ // 'first' was released before any other pressed key, so treat this as
+ // a rolling series of normal key taps.
+ dprintf(" %s: found down-up pair, interpreting as normal key\n", __func__);
+ interpret_as_normal(&p);
+ execute_head_and_pop(pending);
+ return true;
+ } else {
+ // if another key was pressed and released while 'first' was held, then we
+ // should treat it like a modifier.
+ pending_key_t *next = first->next;
+ while (next != NULL) {
+ if (is_downup_pair(next, NULL)) {
+ dprintf(" %s: found subsequent downup pair, interpreting head as mod\n", __func__);
+ p.down = first;
+ p.up = NULL;
+ interpret_as_mod(&p);
+ execute_head_and_pop(pending);
+ return true;
+ }
+ next = next->next;
+ }
+
+ // we can't disambiguate 'first' yet. wait for another keypress.
+ dprintf(" %s: can't disambiguate (yet)\n", __func__);
+ return false;
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (keycode == DEBUG) {
+ return true;
+ }
+
+ if (g_pending.count == 0 && !is_ambiguous_kc(keycode)) {
+ // we have no pending keys and this key isn't ambiguous, so we should
+ // just let QMK take care of it.
+ dprintf("%s: handled by qmk\n", __func__);
+ return true;
+ } else {
+ dprintf("%s: got dual-role key\n", __func__);
+ // append the keypress and then try parsing all pending keypresses.
+ kring_append(&g_pending, keycode, record);
+ while (g_pending.count > 0) {
+ dprintf("%s: looping through %d keys...\n", __func__, g_pending.count);
+ if (!parse_next(&g_pending)) {
+ // one of our keypresses is ambiguous and we can't proceed until
+ // we get further keypresses to disambiguate it.
+ dprintf("%s: %d pending keys are ambiguous\n", __func__, g_pending.count);
+ break;
+ }
+ }
+ return false;
+ }
+}
diff --git a/keyboards/handwired/hexon38/readme.md b/keyboards/handwired/hexon38/readme.md
new file mode 100644
index 0000000000..c8ada8e2b2
--- /dev/null
+++ b/keyboards/handwired/hexon38/readme.md
@@ -0,0 +1,11 @@
+# hexon38
+
+QMK support for the [hexon38](https://github.com/pepaslabs/hexon38).
+
+## Building
+
+```
+$ cd qmk_firmware
+$ make handwired/hexon38
+```
+
diff --git a/keyboards/handwired/hexon38/rules.mk b/keyboards/handwired/hexon38/rules.mk
new file mode 100644
index 0000000000..2b6f17afc2
--- /dev/null
+++ b/keyboards/handwired/hexon38/rules.mk
@@ -0,0 +1,64 @@
+# see https://github.com/pepaslabs/hexon38
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = halfkay
+
+
+# Enabled build options:
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+
+# Disabled build options:
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c b/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
index 9cd58c0ec9..130465e8d8 100644
--- a/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
+++ b/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
@@ -137,10 +137,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),*/
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/handwired/ibm122m/readme.md b/keyboards/handwired/ibm122m/readme.md
index 09dac49c0d..de89d7596e 100644
--- a/keyboards/handwired/ibm122m/readme.md
+++ b/keyboards/handwired/ibm122m/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/ibm122m:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/handwired/not_so_minidox/readme.md b/keyboards/handwired/not_so_minidox/readme.md
index bd40607357..c791e6e3f9 100644
--- a/keyboards/handwired/not_so_minidox/readme.md
+++ b/keyboards/handwired/not_so_minidox/readme.md
@@ -12,7 +12,7 @@ Make example for this keyboard (after setting up your build environment):
make not_so_minidox/rev1:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Flashing
-------
diff --git a/keyboards/handwired/numbrero/config.h b/keyboards/handwired/numbrero/config.h
new file mode 100644
index 0000000000..cbcb1d8261
--- /dev/null
+++ b/keyboards/handwired/numbrero/config.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Flehrad
+#define PRODUCT Numbrero
+#define DESCRIPTION Pro Micro-powered Reversible L/H Numpad with Extra Macro Keys
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 5
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F6, B5, B4, E6, F7 }
+#define MATRIX_COL_PINS { D1, D0, D4, F5, F4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 5
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/handwired/numbrero/info.json b/keyboards/handwired/numbrero/info.json
new file mode 100644
index 0000000000..d2f7ebd031
--- /dev/null
+++ b/keyboards/handwired/numbrero/info.json
@@ -0,0 +1,62 @@
+{
+ "keyboard_name": "Numbrero",
+ "url": "",
+ "maintainer": "Flehrad",
+ "width": 5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_numbrero_numpad": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K10", "x":0, "y":1, "h":1.5},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K20", "x":0, "y":2.5},
+ {"label":"K21", "x":1, "y":2},
+ {"label":"K22", "x":2, "y":2},
+ {"label":"K23", "x":3, "y":2},
+ {"label":"K14", "x":4, "y":1, "h":2},
+ {"label":"K30", "x":0, "y":3.5, "h":1.5},
+ {"label":"K31", "x":1, "y":3},
+ {"label":"K32", "x":2, "y":3},
+ {"label":"K33", "x":3, "y":3},
+ {"label":"K41", "x":1, "y":4, "w":2},
+ {"label":"K43", "x":3, "y":4},
+ {"label":"K34", "x":4, "y":3, "h":2}
+ ]
+ },
+ "LAYOUT_numbrero_ortho": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K10", "x":0, "y":1, "h":1.5},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K20", "x":0, "y":2.5},
+ {"label":"K21", "x":1, "y":2},
+ {"label":"K22", "x":2, "y":2},
+ {"label":"K23", "x":3, "y":2},
+ {"label":"K24", "x":4, "y":2},
+ {"label":"K30", "x":0, "y":3.5, "h":1.5},
+ {"label":"K31", "x":1, "y":3},
+ {"label":"K32", "x":2, "y":3},
+ {"label":"K33", "x":3, "y":3},
+ {"label":"K34", "x":4, "y":3},
+ {"label":"K41", "x":1, "y":4},
+ {"label":"K42", "x":2, "y":4},
+ {"label":"K43", "x":3, "y":4},
+ {"label":"K44", "x":4, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/numbrero/keymaps/default/keymap.c b/keyboards/handwired/numbrero/keymaps/default/keymap.c
new file mode 100644
index 0000000000..903ed8d88c
--- /dev/null
+++ b/keyboards/handwired/numbrero/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_numbrero_numpad(
+ KC_TRNS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TRNS, KC_P7, KC_P8, KC_P9,
+ KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_TRNS, KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT),
+
+ LAYOUT_numbrero_ortho(
+ 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
diff --git a/keyboards/handwired/numbrero/license b/keyboards/handwired/numbrero/license
new file mode 100644
index 0000000000..b09cd7856d
--- /dev/null
+++ b/keyboards/handwired/numbrero/license
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/keyboards/handwired/numbrero/numbrero.c b/keyboards/handwired/numbrero/numbrero.c
new file mode 100644
index 0000000000..d3ec36904a
--- /dev/null
+++ b/keyboards/handwired/numbrero/numbrero.c
@@ -0,0 +1 @@
+#include "numbrero.h"
diff --git a/keyboards/handwired/numbrero/numbrero.h b/keyboards/handwired/numbrero/numbrero.h
new file mode 100644
index 0000000000..c72e654078
--- /dev/null
+++ b/keyboards/handwired/numbrero/numbrero.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_numbrero_numpad( \
+ K00, K01, K02, K03, K04, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23, K14, \
+ K30, K31, K32, K33, \
+ K41, K43, K34 \
+) { \
+ { K00, K01, K02, K03, K04 }, \
+ { K10, K11, K12, K13, K14 }, \
+ { K20, K21, K22, K23, KC_NO }, \
+ { K30, K31, K32, K33, K34 }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO } \
+}
+#define LAYOUT_numbrero_ortho(\
+ K00, K01, K02, K03, K04, \
+ K10, K11, K12, K13, K14, \
+ K20, K21, K22, K23, K24, \
+ K30, K31, K32, K33, K34, \
+ K41, K42, K43, K44 \
+){ \
+ { K00, K01, K02, K03, K04 }, \
+ { K10, K11, K12, K13, K14 }, \
+ { K20, K21, K22, K23, K24 }, \
+ { K30, K31, K32, K33, K34 }, \
+ { KC_NO, K41, K42, K43, K44 } \
+}
diff --git a/keyboards/handwired/numbrero/readme.md b/keyboards/handwired/numbrero/readme.md
new file mode 100644
index 0000000000..42f005dbe2
--- /dev/null
+++ b/keyboards/handwired/numbrero/readme.md
@@ -0,0 +1,13 @@
+# Numbrero
+
+A reversible numpad (left/right-handed) with extra macro keys.
+
+Keyboard Maintainer: [Flehrad](https://github.com/flehrad)
+Hardware Supported: Numbrero PCB, Pro Micro
+Hardware Availability: The Board Podcast Slack
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/numbrero/numbrero:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/numbrero/rules.mk b/keyboards/handwired/numbrero/rules.mk
new file mode 100644
index 0000000000..bda6c866e2
--- /dev/null
+++ b/keyboards/handwired/numbrero/rules.mk
@@ -0,0 +1,59 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+#Bootloder
+#Pro Micro = caterina
+BOOTLOADER = caterina
+
+# Boot Section Size in *bytes*
+#OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/handwired/numpad20/readme.md b/keyboards/handwired/numpad20/readme.md
index 29c832daf0..4e14fbb005 100644
--- a/keyboards/handwired/numpad20/readme.md
+++ b/keyboards/handwired/numpad20/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/numpad20:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/handwired/ortho5x13/ortho5x13.h b/keyboards/handwired/ortho5x13/ortho5x13.h
index 93551bd70b..a43fc76ae6 100644
--- a/keyboards/handwired/ortho5x13/ortho5x13.h
+++ b/keyboards/handwired/ortho5x13/ortho5x13.h
@@ -1,5 +1,4 @@
-#ifndef ORTHO5X13_H
-#define ORTHO5X13_H
+#pragma once
#include "quantum.h"
@@ -18,7 +17,7 @@
{ k40, k41, k42, k43, k44, k45, KC_NO, k47, k48, k49, k4a, k4b, k4c } \
}
-#define LAYOUT_compact( \
+#define LAYOUT_kc( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
@@ -32,5 +31,3 @@
{ 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 }, \
{ 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 } \
}
-
-#endif \ No newline at end of file
diff --git a/keyboards/handwired/ortho60/info.json b/keyboards/handwired/ortho60/info.json
index b6e4854410..b94bfc7b53 100644
--- a/keyboards/handwired/ortho60/info.json
+++ b/keyboards/handwired/ortho60/info.json
@@ -65,8 +65,71 @@
{"label":"Raise", "x":7, "y":4},
{"label":"Left", "x":8, "y":4},
{"label":"Down", "x":9, "y":4},
- {"label":"Right", "x":10, "y":4},
- {"label":"up", "x":11, "y":4}
+ {"label":"Up", "x":10, "y":4},
+ {"label":"Right", "x":11, "y":4}
+ ]
+ },
+ "LAYOUT_1x2uC": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"Backspace", "x":11, "y":0},
+ {"label":"Tab", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":6, "y":1},
+ {"label":"U", "x":7, "y":1},
+ {"label":"I", "x":8, "y":1},
+ {"label":"O", "x":9, "y":1},
+ {"label":"P", "x":10, "y":1},
+ {"label":"Delete", "x":11, "y":1},
+ {"label":"Esc", "x":0, "y":2},
+ {"label":"A", "x":1, "y":2},
+ {"label":"S", "x":2, "y":2},
+ {"label":"D", "x":3, "y":2},
+ {"label":"F", "x":4, "y":2},
+ {"label":"G", "x":5, "y":2},
+ {"label":"H", "x":6, "y":2},
+ {"label":"J", "x":7, "y":2},
+ {"label":"K", "x":8, "y":2},
+ {"label":"L", "x":9, "y":2},
+ {"label":";", "x":10, "y":2},
+ {"label":"'", "x":11, "y":2},
+ {"label":"Shift", "x":0, "y":3},
+ {"label":"Z", "x":1, "y":3},
+ {"label":"X", "x":2, "y":3},
+ {"label":"C", "x":3, "y":3},
+ {"label":"V", "x":4, "y":3},
+ {"label":"B", "x":5, "y":3},
+ {"label":"N", "x":6, "y":3},
+ {"label":"M", "x":7, "y":3},
+ {"label":",", "x":8, "y":3},
+ {"label":".", "x":9, "y":3},
+ {"label":"/", "x":10, "y":3},
+ {"label":"Enter", "x":11, "y":3},
+ {"label":"Fn", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4},
+ {"label":"Alt", "x":2, "y":4},
+ {"label":"Meta", "x":3, "y":4},
+ {"label":"Lower", "x":4, "y":4},
+ {"label":"Space", "x":5, "y":4, "w":2},
+ {"label":"Raise", "x":7, "y":4},
+ {"label":"Left", "x":8, "y":4},
+ {"label":"Down", "x":9, "y":4},
+ {"label":"Up", "x":10, "y":4},
+ {"label":"Right", "x":11, "y":4}
]
}
}
diff --git a/keyboards/handwired/ortho60/readme.md b/keyboards/handwired/ortho60/readme.md
index 8db1b7df7d..be2a027c4f 100644
--- a/keyboards/handwired/ortho60/readme.md
+++ b/keyboards/handwired/ortho60/readme.md
@@ -1,3 +1,12 @@
# Ortho 60
-Blue Pill STM32F103C8T6 based 12x5 Ortholinear Board
+A Blue Pill STM32F103C8T6-based 12x5 ortholinear keyboard.
+
+Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan1)
+Hardware Supported: Blue Pill STM32F103C8T6
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/ortho60:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/ortho60/rules.mk b/keyboards/handwired/ortho60/rules.mk
index 3f4574473c..91acb3c5c6 100644
--- a/keyboards/handwired/ortho60/rules.mk
+++ b/keyboards/handwired/ortho60/rules.mk
@@ -52,5 +52,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = yes
LAYOUTS = ortho_5x12
-
-DEFAULT_FOLDER = handwired/ortho60
diff --git a/keyboards/handwired/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
index a1ca79f9a9..faae89f935 100644
--- a/keyboards/handwired/promethium/keymaps/default/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
@@ -60,7 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Fillers to make layering clearer
#define _______ KC_TRNS
#define XXXXXXX KC_NO
-#define G(x) LGUI(x)
#define KC_WWWB KC_WWW_BACK
#define KC_WWWF KC_WWW_FORWARD
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index a1ca79f9a9..faae89f935 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -60,7 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Fillers to make layering clearer
#define _______ KC_TRNS
#define XXXXXXX KC_NO
-#define G(x) LGUI(x)
#define KC_WWWB KC_WWW_BACK
#define KC_WWWF KC_WWW_FORWARD
diff --git a/keyboards/handwired/pteron/keymaps/FSund/keymap.c b/keyboards/handwired/pteron/keymaps/FSund/keymap.c
index f34beae063..a52e842977 100644
--- a/keyboards/handwired/pteron/keymaps/FSund/keymap.c
+++ b/keyboards/handwired/pteron/keymaps/FSund/keymap.c
@@ -10,10 +10,8 @@ enum pteron_layers {
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
-// use S() to produce shifted versions of keys
-// #define S(kc) LSFT(kc) // defined by default
-
// alt gr
+#undef G
#define G(kc) RALT(kc)
// custom keycodes
diff --git a/keyboards/handwired/qc60/README.md b/keyboards/handwired/qc60/README.md
index 85570a8a76..4fdd9ba6ef 100644
--- a/keyboards/handwired/qc60/README.md
+++ b/keyboards/handwired/qc60/README.md
@@ -1,5 +1,4 @@
-QC60
-========
+# QC60
![qc60 layout](https://i.imgur.com/BAW1VGc.png)
@@ -19,4 +18,4 @@ Example of flashing this keyboard:
make handwired/qc60/proto:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/qc60/info.json b/keyboards/handwired/qc60/info.json
index b39ec587bc..c047d50307 100644
--- a/keyboards/handwired/qc60/info.json
+++ b/keyboards/handwired/qc60/info.json
@@ -1,11 +1,93 @@
{
- "keyboard_name": "QC60",
- "url": "",
- "maintainer": "coarse",
- "width": 15,
- "height": 5,
+ "keyboard_name": "QC60",
+ "url": "",
+ "maintainer": "coarse",
+ "width": 16,
+ "height": 5,
"layouts": {
- "LAYOUT_ANSI_DEFAULT": {
+ "LAYOUT": {
+ "key_count": 67,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R06", "x":14, "y":0},
+ {"label":"R07", "x":15, "y":0},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L30", "x":0, "y":3, "w":1.25},
+ {"label":"L31", "x":1.25, "y":3},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":1.75},
+ {"label":"R37", "x":15, "y":3},
+
+ {"label":"L40", "x":0, "y":4, "w":1.25},
+ {"label":"L41", "x":1.25, "y":4, "w":1.25},
+ {"label":"L42", "x":2.5, "y":4, "w":1.25},
+ {"label":"L43", "x":3.75, "y":4, "w":2.75},
+ {"label":"L44", "x":6.5, "y":4, "w":1.25},
+
+ {"label":"R43", "x":8.75, "y":4, "w":1.25},
+ {"label":"R44", "x":10, "y":4, "w":2},
+ {"label":"R42", "x":12, "y":4},
+ {"label":"R45", "x":13, "y":4},
+ {"label":"R46", "x":14, "y":4},
+ {"label":"R47", "x":15, "y":4}
+ ]
+ },
+
+ "LAYOUT_ansi_default": {
"key_count": 64,
"layout": [
{"label":"Esc", "x":0, "y":0},
@@ -16,13 +98,13 @@
{"label":"5", "x":5, "y":0},
{"label":"6", "x":6, "y":0},
- {"label":"7", "x":7, "y":0},
- {"label":"8", "x":8, "y":0},
- {"label":"9", "x":9, "y":0},
- {"label":"0", "x":10, "y":0},
- {"label":"-", "x":11, "y":0},
- {"label":"=", "x":12, "y":0},
- {"label":"Backspace", "x":13, "y":0, "w":2.0},
+ {"label":"7", "x":8, "y":0},
+ {"label":"8", "x":9, "y":0},
+ {"label":"9", "x":10, "y":0},
+ {"label":"0", "x":11, "y":0},
+ {"label":"-", "x":12, "y":0},
+ {"label":"=", "x":13, "y":0},
+ {"label":"Backspace", "x":14, "y":0, "w":2.0},
{"label":"Tab", "x":0, "y":1, "w":1.5},
{"label":"Q", "x":1.5, "y":1},
@@ -31,14 +113,14 @@
{"label":"R", "x":4.5, "y":1},
{"label":"T", "x":5.5, "y":1},
- {"label":"Y", "x":6.5, "y":1},
- {"label":"U", "x":7.5, "y":1},
- {"label":"I", "x":8.5, "y":1},
- {"label":"O", "x":9.5, "y":1},
- {"label":"P", "x":10.5, "y":1},
- {"label":"[", "x":11.5, "y":1},
- {"label":"]", "x":12.5, "y":1},
- {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"Y", "x":7.5, "y":1},
+ {"label":"U", "x":8.5, "y":1},
+ {"label":"I", "x":9.5, "y":1},
+ {"label":"O", "x":10.5, "y":1},
+ {"label":"P", "x":11.5, "y":1},
+ {"label":"[", "x":12.5, "y":1},
+ {"label":"]", "x":13.5, "y":1},
+ {"label":"\\", "x":14.5, "y":1, "w":1.5},
{"label":"CapsLock", "x":0, "y":2, "w":1.75},
{"label":"A", "x":1.75, "y":2},
@@ -47,13 +129,13 @@
{"label":"F", "x":4.75, "y":2},
{"label":"G", "x":5.75, "y":2},
- {"label":"H", "x":6.75, "y":2},
- {"label":"J", "x":7.75, "y":2},
- {"label":"K", "x":8.75, "y":2},
- {"label":"L", "x":9.75, "y":2},
- {"label":";", "x":10.75, "y":2},
- {"label":"'", "x":11.75, "y":2},
- {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"H", "x":7.75, "y":2},
+ {"label":"J", "x":8.75, "y":2},
+ {"label":"K", "x":9.75, "y":2},
+ {"label":"L", "x":10.75, "y":2},
+ {"label":";", "x":11.75, "y":2},
+ {"label":"'", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":2, "w":2.25},
{"label":"Shift", "x":0, "y":3, "w":2.25},
{"label":"Z", "x":2.25, "y":3},
@@ -62,12 +144,12 @@
{"label":"V", "x":5.25, "y":3},
{"label":"B", "x":6.25, "y":3},
- {"label":"N", "x":7.25, "y":3},
- {"label":"M", "x":8.25, "y":3},
- {"label":",", "x":9.25, "y":3},
- {"label":".", "x":10.25, "y":3},
- {"label":"/", "x":11.25, "y":3},
- {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"N", "x":8.25, "y":3},
+ {"label":"M", "x":9.25, "y":3},
+ {"label":",", "x":10.25, "y":3},
+ {"label":".", "x":11.25, "y":3},
+ {"label":"/", "x":12.25, "y":3},
+ {"label":"Shift", "x":13.25, "y":3, "w":2.75},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
@@ -75,13 +157,483 @@
{"x":3.75, "y":4, "w":2.75},
{"x":6.5, "y":4, "w":1.25},
- {"x":7.75, "y":4, "w":1.25},
- {"x":9, "y":4, "w":2.0},
- {"label":"Alt", "x":11, "y":4},
- {"label":"Win", "x":12, "y":4},
- {"label":"Menu", "x":13, "y":4},
- {"label":"Ctrl", "x":14, "y":4}
+ {"x":8.75, "y":4, "w":1.25},
+ {"x":10, "y":4, "w":2.0},
+ {"label":"Alt", "x":12, "y":4},
+ {"label":"Win", "x":13, "y":4},
+ {"label":"Menu", "x":14, "y":4},
+ {"label":"Ctrl", "x":15, "y":4}
+ ]
+ },
+
+ "LAYOUT_ansi_alt": {
+ "key_count": 63,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R07", "x":14, "y":0, "w":2},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L31", "x":0, "y":3, "w":2.25},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":2.75},
+
+ {"label":"L40", "x":0, "y":4, "w":1.5},
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R46", "x":13.5, "y":4},
+ {"label":"R47", "x":14.5, "y":4, "w":1.5}
+ ]
+ },
+
+ "LAYOUT_iso_default": {
+ "key_count": 65,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R07", "x":14, "y":0, "w":2},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R17", "x":13.75, "y":2},
+ {"label":"R27", "x":14.75, "y":1, "w":1.25, "h":2},
+
+ {"label":"L30", "x":0, "y":3, "w":1.25},
+ {"label":"L31", "x":1.25, "y":3},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":2.75},
+
+ {"label":"L40", "x":0, "y":4, "w":1.25},
+ {"label":"L41", "x":1.25, "y":4, "w":1.25},
+ {"label":"L42", "x":2.5, "y":4, "w":1.25},
+ {"label":"L43", "x":3.75, "y":4, "w":2.75},
+ {"label":"L44", "x":6.5, "y":4, "w":1.25},
+
+ {"label":"R43", "x":8.75, "y":4, "w":1.25},
+ {"label":"R44", "x":10, "y":4, "w":2},
+ {"label":"R42", "x":12, "y":4},
+ {"label":"R45", "x":13, "y":4},
+ {"label":"R46", "x":14, "y":4},
+ {"label":"R47", "x":15, "y":4}
+ ]
+ },
+
+ "LAYOUT_iso_alt": {
+ "key_count": 64,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R07", "x":14, "y":0, "w":2},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R17", "x":13.75, "y":2},
+ {"label":"R27", "x":14.75, "y":1, "w":1.25, "h":2},
+
+ {"label":"L30", "x":0, "y":3, "w":1.25},
+ {"label":"L31", "x":1.25, "y":3},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":2.75},
+
+ {"label":"L40", "x":0, "y":4, "w":1.5},
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R46", "x":13.5, "y":4},
+ {"label":"R47", "x":14.5, "y":4, "w":1.5}
+ ]
+ },
+
+ "LAYOUT_hhkb_default": {
+ "key_count": 63,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R06", "x":14, "y":0},
+ {"label":"R07", "x":15, "y":0},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L31", "x":0, "y":3, "w":2.25},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":1.75},
+ {"label":"R37", "x":15, "y":3},
+
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R46", "x":13.5, "y":4}
+ ]
+ },
+
+ "LAYOUT_hhkb_split_lshift": {
+ "key_count": 64,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R06", "x":14, "y":0},
+ {"label":"R07", "x":15, "y":0},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L30", "x":0, "y":3, "w":1.25},
+ {"label":"L31", "x":1.25, "y":3},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":1.75},
+ {"label":"R37", "x":15, "y":3},
+
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R46", "x":13.5, "y":4}
+ ]
+ },
+
+ "LAYOUT_wkl_default": {
+ "key_count": 61,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R07", "x":14, "y":0, "w":2},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L31", "x":0, "y":3, "w":2.25},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":2.75},
+
+ {"label":"L40", "x":0, "y":4, "w":1.5},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R47", "x":14.5, "y":4, "w":1.5}
]
}
}
-} \ No newline at end of file
+}
diff --git a/keyboards/handwired/qc60/keymaps/default/keymap.c b/keyboards/handwired/qc60/keymaps/default/keymap.c
index bafaf5058e..88062d4ed4 100644
--- a/keyboards/handwired/qc60/keymaps/default/keymap.c
+++ b/keyboards/handwired/qc60/keymaps/default/keymap.c
@@ -24,9 +24,6 @@ extern keymap_config_t keymap_config;
// entirely and just use numbers.
#define _BASE 0
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_ansi_default(
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, \
diff --git a/keyboards/handwired/qc60/keymaps/wntrmln/keymap.c b/keyboards/handwired/qc60/keymaps/wntrmln/keymap.c
index f99635d531..f024ddb4b9 100644
--- a/keyboards/handwired/qc60/keymaps/wntrmln/keymap.c
+++ b/keyboards/handwired/qc60/keymaps/wntrmln/keymap.c
@@ -25,9 +25,6 @@ extern keymap_config_t keymap_config;
#define _BASE 0
#define _FN 1
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
#define FN MO(_FN)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/handwired/qc60/proto/proto.h b/keyboards/handwired/qc60/proto/proto.h
index 191e8150a7..7e7755d0e2 100644
--- a/keyboards/handwired/qc60/proto/proto.h
+++ b/keyboards/handwired/qc60/proto/proto.h
@@ -14,8 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef PROTO_H
-#define PROTO_H
+#pragma once
#include "qc60.h"
@@ -26,10 +25,10 @@
/* Split Backspace
* {R07, XXX, R05, R04, R03, R02, R01, R00}
- *
+ *
* Split Right Shift
* {R37, R36, R35, R34, R33, R32, R31, XXX}
- *
+ *
* Split Left Shift
* {L30, L31, L32, L33, L34, L35, L36, XXX}
*
@@ -101,14 +100,14 @@
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R17, R27, \
- L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
+ L30, L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
L40, L41, L42, L43, L44, R43, R44, R42, R45, R46, R47 \
) \
{ \
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
- {XXX, L31, L32, L33, L34, L35, L36, XXX}, \
+ {L30, L31, L32, L33, L34, L35, L36, XXX}, \
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
{R17, R16, R15, R14, R13, R12, R11, R10}, \
@@ -118,17 +117,17 @@
}
#define LAYOUT_iso_alt( \
- L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
- L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
- L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
- L40, L41, L42, L43, L44, R43, R44, R45, R46, R47 \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R17, R27, \
+ L30, L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, R43, R44, R45, R46, R47 \
) \
{ \
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
- {XXX, L31, L32, L33, L34, L35, L36, XXX}, \
+ {L30, L31, L32, L33, L34, L35, L36, XXX}, \
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
{R17, R16, R15, R14, R13, R12, R11, R10}, \
@@ -196,6 +195,3 @@
{XXX, R36, R35, R34, R33, R32, R31, XXX}, \
{R47, XXX, R45, R44, R43, XXX, XXX, XXX}, \
}
-
-
-#endif
diff --git a/keyboards/handwired/reddot/info.json b/keyboards/handwired/reddot/info.json
new file mode 100644
index 0000000000..1fcc8677e8
--- /dev/null
+++ b/keyboards/handwired/reddot/info.json
@@ -0,0 +1,108 @@
+{
+ "keyboard_name": "handwired/reddot",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 20.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"k00 (Esc)", "x":0, "y":0},
+ {"label":"k01 (F1)", "x":1, "y":0},
+ {"label":"k02 (F2)", "x":2, "y":0},
+ {"label":"k03 (F3)", "x":3, "y":0},
+ {"label":"k04 (F4)", "x":4, "y":0},
+ {"label":"k05 (F5)", "x":5, "y":0},
+ {"label":"k06 (Tab)", "x":6, "y":0, "w":2},
+ {"label":"k07 (Caps Lock)", "x":8, "y":0},
+ {"label":"k08 (F6)", "x":9, "y":0},
+ {"label":"k09 (F7)", "x":10, "y":0},
+ {"label":"k0A (F8)", "x":11, "y":0},
+ {"label":"k0B (F9)", "x":12, "y":0},
+ {"label":"k0C (F10)", "x":13, "y":0},
+ {"label":"k0D (F11)", "x":14, "y":0},
+ {"label":"k0E (F12)", "x":15, "y":0},
+ {"label":"k10 (Function)", "x":16.5, "y":0},
+ {"label":"k11 (Keypad /)", "x":17.5, "y":0},
+ {"label":"k12 (Keypad *)", "x":18.5, "y":0},
+ {"label":"k13 (Keypad -)", "x":19.5, "y":0},
+
+ {"label":"k20 (Left Alt)", "x":0, "y":1},
+ {"label":"k21 (1 / FR Ampersand)", "x":1, "y":1},
+ {"label":"k22 (2 / FR É)", "x":2, "y":1},
+ {"label":"k23 (3 / FR Quote)", "x":3, "y":1},
+ {"label":"k24 (4 / FR Apostrophe)", "x":4, "y":1},
+ {"label":"k25 (5 / FR Left Parenthesis)", "x":5, "y":1},
+ {"label":"k26 (Backspace)", "x":6, "y":1, "w":2},
+ {"label":"k27 (Delete)", "x":8, "y":1},
+ {"label":"k28 (6 / FR Minus)", "x":9, "y":1},
+ {"label":"k29 (7 / FR È)", "x":10, "y":1},
+ {"label":"k2A (8 / FR Underscore)", "x":11, "y":1},
+ {"label":"k2B (9 / FR Ç)", "x":12, "y":1},
+ {"label":"k2C (0 / FR À)", "x":13, "y":1},
+ {"label":"k2D (Minus / FR Right Parenthesis)", "x":14, "y":1},
+ {"label":"k2E (Equals / FR Equals)", "x":15, "y":1},
+ {"label":"k30 (Insert)", "x":16.5, "y":1},
+ {"label":"k31 (Home)", "x":17.5, "y":1},
+ {"label":"k32 (Page Up)", "x":18.5, "y":1},
+
+ {"label":"k40 (GUI)", "x":0, "y":2},
+ {"label":"k41 (Q / FR A)", "x":1, "y":2},
+ {"label":"k42 (W / FR Z)", "x":2, "y":2},
+ {"label":"k43 (E)", "x":3, "y":2},
+ {"label":"k44 (R)", "x":4, "y":2},
+ {"label":"k45 (T)", "x":5, "y":2},
+ {"label":"k46 (Shift)", "x":6, "y":2, "h":2},
+ {"label":"k66 (Enter)", "x":7, "y":2, "h":2},
+ {"label":"k47 (Enter)", "x":8, "y":2, "h":2},
+ {"label":"k48 (Y)", "x":9, "y":2},
+ {"label":"k49 (U)", "x":10, "y":2},
+ {"label":"k4A (I)", "x":11, "y":2},
+ {"label":"k4B (O)", "x":12, "y":2},
+ {"label":"k4C (P)", "x":13, "y":2},
+ {"label":"k4D (Left Bracket / FR Circumflex)", "x":14, "y":2},
+ {"label":"k4E (Right Bracket / FR Dollar)", "x":15, "y":2},
+ {"label":"k50 (Delete)", "x":16.5, "y":2},
+ {"label":"k51 (End)", "x":17.5, "y":2},
+ {"label":"k52 (Page Down)", "x":18.5, "y":2},
+ {"label":"k53 (Keypad +)", "x":19.5, "y":1, "h":2},
+
+ {"label":"k60 (Ctrl)", "x":0, "y":3},
+ {"label":"k61 (A / FR Q)", "x":1, "y":3},
+ {"label":"k62 (S)", "x":2, "y":3},
+ {"label":"k63 (D)", "x":3, "y":3},
+ {"label":"k64 (F)", "x":4, "y":3},
+ {"label":"k65 (G)", "x":5, "y":3},
+ {"label":"k68 (H)", "x":9, "y":3},
+ {"label":"k69 (J)", "x":10, "y":3},
+ {"label":"k6A (K)", "x":11, "y":3},
+ {"label":"k6B (L)", "x":12, "y":3},
+ {"label":"k6C (Semicolon / FR M)", "x":13, "y":3},
+ {"label":"k6D (Quote / FR Ù)", "x":14, "y":3},
+ {"label":"k6E (ISO Hash / FR Asterisk)", "x":15, "y":3},
+ {"label":"k70 (Keypad 1)", "x":16.5, "y":3},
+ {"label":"k71 (Up)", "x":17.5, "y":3},
+ {"label":"k72 (Keypad 3)", "x":18.5, "y":3},
+
+ {"label":"k80 (ISO Backslash / FR Less Than)", "x":0, "y":4},
+ {"label":"k81 (Z / FR W)", "x":1, "y":4},
+ {"label":"k82 (X)", "x":2, "y":4},
+ {"label":"k83 (C)", "x":3, "y":4},
+ {"label":"k84 (V)", "x":4, "y":4},
+ {"label":"k85 (B)", "x":5, "y":4},
+ {"label":"k86 (Space)", "x":6, "y":4, "w":2},
+ {"label":"k88 (Space)", "x":8, "y":4, "w":2},
+ {"label":"k89 (N)", "x":10, "y":4},
+ {"label":"k8A (M / FR Comma)", "x":11, "y":4},
+ {"label":"k8B (Comma / FR Semicolon)", "x":12, "y":4},
+ {"label":"k8C (Period / Colon)", "x":13, "y":4},
+ {"label":"k8D (Slash / FR Exclaim)", "x":14, "y":4},
+ {"label":"k8E (Right Alt / FR AltGr)", "x":15, "y":4},
+ {"label":"k90 (Left)", "x":16.5, "y":4},
+ {"label":"k91 (Down)", "x":17.5, "y":4},
+ {"label":"k92 (Right)", "x":18.5, "y":4},
+ {"label":"k93 (Keypad Enter)", "x":19.5, "y":3, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/reddot/keymaps/default/keymap.c b/keyboards/handwired/reddot/keymaps/default/keymap.c
index 73aeff2252..246a03b4d7 100755..100644
--- a/keyboards/handwired/reddot/keymaps/default/keymap.c
+++ b/keyboards/handwired/reddot/keymaps/default/keymap.c
@@ -1,29 +1,22 @@
-#include "reddot.h"
-#include "../../../../../quantum/keymap_extras/keymap_french.h"
+#include QMK_KEYBOARD_H
+#include "keymap_french.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
- KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INSERT, KC_HOME, KC_PGUP,\
- KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DELETE, KC_END, KC_PGDOWN, KC_KP_PLUS,\
- KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_KP_1, KC_UP, KC_KP_3,\
- FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
-
- [1] = KEYMAP(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
- KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9,\
- KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_KP_PLUS,\
- KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3,\
- FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
-};
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TG(1), KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPC, KC_DEL, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INS, KC_HOME, KC_PGUP, \
+ KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DEL, KC_END, KC_PGDN, KC_PPLS, \
+ KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_P1, KC_UP, KC_P3, \
+ FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_SPC, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT \
+ ),
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPC, KC_DEL, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9, \
+ KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_PPLS, \
+ KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3, \
+ FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_SPC, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT \
+ ),
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_LAYER_TOGGLE(1),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
-
diff --git a/keyboards/handwired/reddot/readme.md b/keyboards/handwired/reddot/readme.md
index 8cdbb47d66..27c8b54d60 100755
--- a/keyboards/handwired/reddot/readme.md
+++ b/keyboards/handwired/reddot/readme.md
@@ -1,24 +1,14 @@
-## RedDot Specific Info ##
+# RedDot
+An ortholinear compact fullsize keyboard configured for French AZERTY layout.
-## Quantum MK Firmware
+- [Layout](http://www.keyboard-layout-editor.com/##@_plate:true%3B&@_sm=cherry&sb=cherry&st=MX1A-L1xx%3B&=Esc&=F1&=F2&=F3&=F4&=F5&_w:2%3B&=Tab&=Caps%20Lock&=F6&=F7&=F8&=F9&=F10&=F11&=F12&_x:0.5%3B&=Fn&=%2F%2F&=*&=-%3B&@=Alt&=1%0A%2F&&=2%0A%C3%A9%0A%0A~&=3%0A%22%0A%0A%23&=4%0A'%0A%0A%7B&=5%0A(%0A%0A%5B&_w:2%3B&=Back&=Del&=6%0A-%0A%0A%7C&=7%0A%C3%A8%0A%0A%60&=8%0A%2F_%0A%0A%5C&=9%0A%C3%A7%0A%0A%5E&=0%0A%C3%A0%0A%0A%2F@&=%C2%B0%0A)%0A%0A%5D&=+%0A%2F=%0A%0A%7D&_x:0.5%3B&=Insert&=Home&=Page%20Up&_h:2%3B&=+%3B&@=Win&=A&=Z&=E&=R&=T&_h:2%3B&=Shift&_h:2%3B&=Enter&_h:2%3B&=Enter&=Y&=U&=I&=O&=P&=%C2%A8%0A%5E&=%C2%A3%0A$&_x:0.5%3B&=Delete&=End&=Page%20Down%3B&@=Ctrl&=Q&=S&=D&=F&=G&_x:3%3B&=H&=J&=K&=L&=M&=%25%0A%C3%B9&=%C2%B5%0A*&_x:0.5%3B&=1%0AEnd&=Up&=3%0APgDn&_h:2%3B&=Enter%3B&@=%3E%0A%3C&=W&=X&=C&=V&=B&_w:2%3B&=Space&_w:2%3B&=Space&=N&=%3F%0A,&=.%0A%2F%3B&=%2F%2F%0A%2F:&=%C2%A7%0A!&=Alt%20Gr&_x:0.5%3B&=Left&=Down&=Right)
-For the full Quantum feature list, see [the parent README.md](/readme.md).
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: RedDot handwired
-## Building
+Make example for this keyboard (after setting up your build environment):
-Download or clone the whole firmware and navigate to the keyboard/reddot 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.
+ make handwired/reddot:default
-Depending on which keymap you would like to use, you will have to compile slightly differently.
-
-### Default
-To build with the default keymap, simply run `make`.
-
-### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
-```
-$ make KEYMAP=[default|jack|<name>]
-```
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/reddot/reddot.h b/keyboards/handwired/reddot/reddot.h
index f0c4be5571..a763f2ddc3 100755
--- a/keyboards/handwired/reddot/reddot.h
+++ b/keyboards/handwired/reddot/reddot.h
@@ -1,20 +1,17 @@
-#ifndef REDDOT_H
-#define REDDOT_H
+#pragma once
#include "quantum.h"
-#define KEYMAP( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, \
- k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53, \
- k60, k61, k62, k63, k64, k65, k66, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, \
- k80, k81, k82, k83, k84, k85, k86, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93\
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, \
+ k40, k41, k42, k43, k44, k45, k46, k66, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53, \
+ k60, k61, k62, k63, k64, k65, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, \
+ k80, k81, k82, k83, k84, k85, k86, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 \
) { \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13 }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, KC_NO }, \
- { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53 }, \
- { k60, k61, k62, k63, k64, k65, k66, KC_NO, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, KC_NO }, \
- { k80, k81, k82, k83, k84, k85, k86, KC_NO, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 } \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, KC_NO }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53 }, \
+ { k60, k61, k62, k63, k64, k65, k66, KC_NO, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, KC_NO }, \
+ { k80, k81, k82, k83, k84, k85, k86, KC_NO, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 } \
}
-
-#endif
diff --git a/keyboards/handwired/retro_refit/info.json b/keyboards/handwired/retro_refit/info.json
new file mode 100644
index 0000000000..44ae97cd12
--- /dev/null
+++ b/keyboards/handwired/retro_refit/info.json
@@ -0,0 +1,95 @@
+{
+ "keyboard_name": "handwired/retro_refit",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 81,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"Num Lock", "x":11.5, "y":0},
+ {"label":"Scroll Lock", "x":12.5, "y":0},
+ {"label":"Print Screen", "x":13.5, "y":0},
+ {"label":"Pause", "x":14.5, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":1.5},
+ {"label":"Home", "x":14.5, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"[", "x":11.5, "y":2.5},
+ {"label":"]", "x":12.5, "y":2.5},
+ {"label":"Page Up", "x":14.5, "y":2.5},
+ {"label":"Ctrl", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":";", "x":10.75, "y":3.5},
+ {"label":"'", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":1.75},
+ {"label":"Page Down", "x":14.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":1.25},
+ {"label":"Up", "x":13.5, "y":4.5},
+ {"label":"End", "x":14.5, "y":4.5},
+ {"label":"Alt", "x":0, "y":5.5, "w":1.25},
+ {"label":"Caps Lock", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"\\", "x":2.5, "y":5.5},
+ {"label":"Space", "x":3.5, "y":5.5, "w":7},
+ {"label":"Insert", "x":10.5, "y":5.5},
+ {"label":"Delete", "x":11.5, "y":5.5},
+ {"label":"Left", "x":12.5, "y":5.5},
+ {"label":"Down", "x":13.5, "y":5.5},
+ {"label":"Right", "x":14.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/retro_refit/keymaps/default/keymap.c b/keyboards/handwired/retro_refit/keymaps/default/keymap.c
index 598541a05b..2f9f28478e 100644
--- a/keyboards/handwired/retro_refit/keymaps/default/keymap.c
+++ b/keyboards/handwired/retro_refit/keymaps/default/keymap.c
@@ -1,31 +1,12 @@
-
-#include "retro_refit.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] =
- KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, NLCK, SLCK, PSCR, PAUS, \
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, HOME, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, PGUP, \
- BSLS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, PGDN, \
- LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, END, \
- LCTL, LGUI, LALT, SPC, INS, DEL, LEFT, DOWN, RGHT),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
+ [0] = LAYOUT( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_SLCK, KC_PSCR, KC_PAUS, \
+ 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_HOME, \
+ 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_PGUP, \
+ KC_BSLS, 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_PGDN, \
+ 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_END, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_INS, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
};
diff --git a/keyboards/handwired/retro_refit/readme.md b/keyboards/handwired/retro_refit/readme.md
index 9f10edf9fc..8dfca7b10b 100644
--- a/keyboards/handwired/retro_refit/readme.md
+++ b/keyboards/handwired/retro_refit/readme.md
@@ -1,60 +1,42 @@
-retro_refit keyboard firmware
-======================
-
-## Keyboard Info
+# retro_refit
The retro refit keyboard used a Teensy to replace the original controller on a 386 "laptop".
-http://imgur.com/a/08Fyj
+[Image Gallery](https://imgur.com/a/08Fyj)
-This keyboard uses a KEYMAP macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow".
+This keyboard uses a LAYOUT macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow".
-The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corrisponds to a key in row x column y.
+The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corresponds to a key in row x column y.
```
-#define KEYMAP( \
- K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
- K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
- K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
- K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
- K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
- K10, K06, K25, K07, K86, K85, K95, K90, K93 \
+#define LAYOUT( \
+ K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
+ K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
+ K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
+ K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
+ K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
+ K10, K06, K25, K07, K86, K85, K95, K90, K93 \
) { \
-{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \
-{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \
-{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \
-{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \
-{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \
-{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \
-{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \
-{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \
-{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \
-{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \
-{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K85, K86, K87 }, \
+ { K90, K91, KC_NO, K93, K94, K95, KC_NO, K97 }, \
+ { KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7 } \
}
```
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme.md](/readme.md).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/retro_refit 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.
-
-Depending on which keymap you would like to use, you will have to compile slightly differently.
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: Leading Edge D3 386 keyboard, Teensy
-### Default
-To build with the default keymap, simply run `make default`.
+Make example for this keyboard (after setting up your build environment):
-### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
-
-```
-$ make [default|jack|<name>]
-```
+ make handwired/retro_refit:default
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/retro_refit/retro_refit.h b/keyboards/handwired/retro_refit/retro_refit.h
index 109acdc399..ad1c567a84 100644
--- a/keyboards/handwired/retro_refit/retro_refit.h
+++ b/keyboards/handwired/retro_refit/retro_refit.h
@@ -1,38 +1,35 @@
-#ifndef RETRO_REFIT_H
-#define RETRO_REFIT_H
+#pragma once
#include "quantum.h"
-// This macro is an example of using a non-standard row-column matrix. The
-// keyboard in question had 11 rows and 8 columns, but the rows were not all
-// horizontal, and the columns were not all vertical. For example, row 2
+// This macro is an example of using a non-standard row-column matrix. The
+// keyboard in question had 11 rows and 8 columns, but the rows were not all
+// horizontal, and the columns were not all vertical. For example, row 2
// contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and
-// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B",
+// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B",
// "Left Alt", "Up Arrow", and "Down Arrow".
//
// The macro makes programming the keys easier and in a more straight-forward
-// manner because it realigns the keys into a 6x15 sensible keyboard layout
+// manner because it realigns the keys into a 6x15 sensible keyboard layout
// instead of the obtuse 11x8 matrix.
-#define KEYMAP( \
- K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
- K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
- K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
- K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
- K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
- K10, K06, K25, K07, K86, K85, K95, K90, K93 \
+#define LAYOUT( \
+ K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
+ K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
+ K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
+ K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
+ K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
+ K10, K06, K25, K07, K86, K85, K95, K90, K93 \
) { \
-{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \
-{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \
-{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \
-{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \
-{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \
-{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \
-{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \
-{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \
-{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \
-{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \
-{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K85, K86, K87 }, \
+ { K90, K91, KC_NO, K93, K94, K95, KC_NO, K97 }, \
+ { KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7 } \
}
-
-#endif \ No newline at end of file
diff --git a/keyboards/handwired/rs60/README.md b/keyboards/handwired/rs60/README.md
new file mode 100644
index 0000000000..07c967e276
--- /dev/null
+++ b/keyboards/handwired/rs60/README.md
@@ -0,0 +1,27 @@
+# rs60: Handwired Slim Preonic Clone
+
+I wanted a preonic layout but with a very low profile. As Jack is still working on the Preonic PCB for Kailh Choc switches, I figured I could try to handwire one myself. It's my first custom keyboard, so I had a lot to learn.
+
+First I designed the case in fusion 360. I wanted to build it using acrylic, constrained myself to standard acrylic sheet thickness.
+
+![](https://imgur.com/NscS7Rd.jpg)
+
+You can download the model [here](https://a360.co/2OqiKLm).
+
+To test my design I 3D printed the parts.
+
+![](https://imgur.com/MSF7zLS.jpg)
+
+The result was encouraging, so I decided to build a prototype out of the printed plates using Kailh Choc brown switches. I tried to make the handwiring job as flat as possible so it can fit in my design.
+
+![](https://i.imgur.com/67yZx0V.jpg)
+![](https://i.imgur.com/ft72Cgj.jpg)
+
+I designed switch plate and the middle plates so that they would be glued together. The middle plate has inserts to attach the bottom plate using m8 screws.
+
+![](https://i.imgur.com/GstTohI.jpg)
+
+The end result is not too bad, but there is a few things I would do differently. Gluing 3D printed plates wasn't a good idea. The switch layer is so thin, that it bends when all the switches are slotted. As a result, the keyboard is not entirely flat. I will replace the bottom plate by a metal one so I get more weight and rigidity.
+
+Even with acrylic, I think I will have the same issue. I might switch to screws + bolts that go all the way through.
+
diff --git a/keyboards/handwired/rs60/config.h b/keyboards/handwired/rs60/config.h
new file mode 100644
index 0000000000..371150a79a
--- /dev/null
+++ b/keyboards/handwired/rs60/config.h
@@ -0,0 +1,47 @@
+/*
+Copyright 2018 QMK Contributors
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4260
+#define DEVICE_VER 0x0001
+#define MANUFACTURER rs
+#define PRODUCT rs60
+#define DESCRIPTION Preonic clone based on pro micro
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B5, B6, B4, B2, E6 }
+#define MATRIX_COL_PINS { C6, D4, D0, D1, D2, D3, F4, F5, F6, F7, B1, B3}
+#define UNUSED_PINS { }
+
+#define QMK_ESC_OUTPUT C6
+#define QMK_ESC_INPUT B4
+#define QMK_LED B0
+// #define QMK_SPEAKER C6
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ false \
+)
diff --git a/keyboards/handwired/rs60/keymaps/default/keymap.c b/keyboards/handwired/rs60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9fea769d05
--- /dev/null
+++ b/keyboards/handwired/rs60/keymaps/default/keymap.c
@@ -0,0 +1,207 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, \
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL, \
+ _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+};
diff --git a/keyboards/handwired/rs60/keymaps/default/readme.md b/keyboards/handwired/rs60/keymaps/default/readme.md
new file mode 100644
index 0000000000..e911968dd9
--- /dev/null
+++ b/keyboards/handwired/rs60/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default Preonic layout - largely based on the Planck's \ No newline at end of file
diff --git a/keyboards/handwired/rs60/rs60.c b/keyboards/handwired/rs60/rs60.c
new file mode 100644
index 0000000000..f748740cbe
--- /dev/null
+++ b/keyboards/handwired/rs60/rs60.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2018 QMK Community
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "rs60.h"
diff --git a/keyboards/handwired/rs60/rs60.h b/keyboards/handwired/rs60/rs60.h
new file mode 100644
index 0000000000..f2113f05c3
--- /dev/null
+++ b/keyboards/handwired/rs60/rs60.h
@@ -0,0 +1,36 @@
+/*
+Copyright 2018 QMK Community
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
+}
+
+#define LAYOUT_ortho_5x12 LAYOUT
diff --git a/keyboards/handwired/rs60/rules.mk b/keyboards/handwired/rs60/rules.mk
new file mode 100644
index 0000000000..7b4ec69d0d
--- /dev/null
+++ b/keyboards/handwired/rs60/rules.mk
@@ -0,0 +1,61 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Bootloader
+BOOTLOADER = qmk-dfu
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+LAYOUTS = ortho_5x12
+
+# Boot Section Size in *bytes*
+#OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Custom backlighting code is used, so this should not be enabled
+AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
+RGBLIGHT_ENABLE = no # This can be enabled if a ws2812 strip is connected to the expansion port.
+
diff --git a/keyboards/handwired/terminus_mini/readme.md b/keyboards/handwired/terminus_mini/readme.md
index 94249d6a96..5f0271bb40 100644
--- a/keyboards/handwired/terminus_mini/readme.md
+++ b/keyboards/handwired/terminus_mini/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/terminus_mini:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/handwired/tradestation/info.json b/keyboards/handwired/tradestation/info.json
index f26d4ec371..e59c217cb7 100644
--- a/keyboards/handwired/tradestation/info.json
+++ b/keyboards/handwired/tradestation/info.json
@@ -2,14 +2,14 @@
"keyboard_name": "Tradestation",
"url": "",
"maintainer": "Flehrad",
- "bootloader": "",
- "width": 4.3,
- "height": 4.5,
+ "width": 4.375,
+ "height": 4.375,
"layouts": {
"LAYOUT_tradestation": {
- "layout": [{"x":0, "y":0}, {"x":1.1, "y":0}, {"x":2.2, "y":0}, {"x":3.3, "y":0}, {"x":0, "y":1.1}, {"x":1.1, "y":1.1}, {"x":2.2, "y":1.1}, {"x":3.3, "y":1.1}, {"x":0, "y":2.25, "w":2}, {"x":2.25, "y":2.25, "w":2}, {"x":0, "y":3.5, "w":2}, {"x":2.25, "y":3.5, "w":2}]
+ "layout": [{"x":0, "y":0},{"x":1.125, "y":0},{"x":2.25, "y":0},{"x":3.375, "y":0},{"x":0, "y":1.1},{"x":1.125, "y":1.1},{"x":2.25, "y":1.1},{"x":3.375, "y":1.1},{"x":0, "y":2.25, "w":2},{"x":2.25, "y":2.25, "w":2},{"x":0, "y":3.5, "w":2},{"x":2.25, "y":3.5, "w":2}]
},
- "LAYOUT_ortho_4x4": {
- "layout": [{"x":0, "y":0}, {"x":1.1, "y":0}, {"x":2.2, "y":0}, {"x":3.3, "y":0}, {"x":0, "y":1.1}, {"x":1.1, "y":1.1}, {"x":2.2, "y":1.1}, {"x":3.3, "y":1.1}, {"x":0, "y":2.25}, {"x":1, "y":2.25}, {"x":2.25, "y":2.25}, {"x":3.25, "y":2.25}, {"x":0, "y":3.5}, {"x":1, "y":3.5}, {"x":2.25, "y":3.5}, {"x":3.25, "y":3.5}]
+ "LAYOUT_ortho_4x4": {
+ "layout": [{"x":0, "y":0},{"x":1.125, "y":0},{"x":2.25, "y":0},{"x":3.375, "y":0},{"x":0, "y":1.1},{"x":1.125, "y":1.1},{"x":2.25, "y":1.1},{"x":3.375, "y":1.1},{"x":0, "y":2.25},{"x":1.125, "y":2.25},{"x":2.25, "y":2.25},{"x":3.375, "y":2.25},{"x":0, "y":3.5},{"x":1.125, "y":3.5},{"x":2.25, "y":3.5},{"x":3.375, "y":3.5}]
+ }
}
}
diff --git a/keyboards/handwired/tradestation/readme.md b/keyboards/handwired/tradestation/readme.md
index 69c0331a92..3a8c39e263 100644
--- a/keyboards/handwired/tradestation/readme.md
+++ b/keyboards/handwired/tradestation/readme.md
@@ -1,25 +1,27 @@
# Tradestation
-QMK for Tradestation Macropad
-This macropad was layout designed by Didier Luximon
+[Image Gallery](https://imgur.com/a/yxQJXMT)
+
+A 4x4 ortholinear macropad, with options for 2U keys on the bottom half. Can be built as single PCB with custom case, or as two-PCB style with standoffs. Requires a Pro Micro.
This PCB supports an overall 4x4 matrix with unique spacing.
+
* Top two rows are 1U keys with 1/8U spacing
* Bottom two rows are available with 4x2 1U as clusters of 2x1U or as 2x2 2U, spaced with 1/4U
-For QMK Configurator, the info.json is utilised.
-- For 2U keys , the first 1u row/column key assignment is the same as the 2u position.
-
-Build requires a pro micro.
+If you like this simple PCB and want to make a donation, you can do so at [paypal.me/theboardpodcast](https://paypal.me/theboardpodcast).
-Can be built as single PCB with custom case, or as two PCB style with standoffs.
+- [The Board Podcast on YouTube](https://www.youtube.com/channel/UCg98oJZNffR9nDLJNkorjqw)
+- [The Board Podcast on Libsyn](http://theboard.libsyn.com/)
+- [The Board Podcast on Patreon](https://www.patreon.com/theboardpodcast)
-If you like this simple PCB and want to make a donation, you can at https://paypal.me/theboardpodcast
+Designed by Didier Luximon.
-Check out our:
+Keyboard Maintainer: [flehrad](https://github.com/flehrad)
+Hardware Supported: Tradestation PCB, Pro Micro
-YouTube (https://www.youtube.com/channel/UCg98oJZNffR9nDLJNkorjqw)
+Make example for this keyboard (after setting up your build environment):
-Podcast (www.libsyn.com/theboardpodcast)
+ make tradestation:default
-Patreon (www.patreon.com/theboardpodcast)
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/tradestation/rules.mk b/keyboards/handwired/tradestation/rules.mk
index 9d49888b5f..649b63babf 100644
--- a/keyboards/handwired/tradestation/rules.mk
+++ b/keyboards/handwired/tradestation/rules.mk
@@ -62,4 +62,5 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https:/
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = no
- LAYOUTS = ortho_4x4
+
+LAYOUTS = ortho_4x4
diff --git a/keyboards/handwired/tradestation/tradestation.h b/keyboards/handwired/tradestation/tradestation.h
index 15e40e3b51..60b53b7ddf 100644
--- a/keyboards/handwired/tradestation/tradestation.h
+++ b/keyboards/handwired/tradestation/tradestation.h
@@ -3,25 +3,25 @@
#include "quantum.h"
#define LAYOUT_ortho_4x4( \
- K00, K01, K02, K03, \
- K10, K11, K12, K13, \
- K20, K21, K22, K23, \
- K30, K31, K32, K33 \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23, \
+ K30, K31, K32, K33 \
) { \
- { K00, K01, K02, K03 }, \
- { K10, K11, K12, K13 }, \
- { K20, K21, K22, K23 }, \
- { K30, K31, K32, K33 } \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 }, \
+ { K30, K31, K32, K33 } \
}
#define LAYOUT_tradestation( \
- K00, K01, K02, K03, \
- K10, K11, K12, K13, \
- K20, K22, \
- K30, K32 \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K22, \
+ K30, K32 \
) { \
- { K00, K01, K02, K03 }, \
- { K10, K11, K12, K13 }, \
- { K20, KC_NO, K22, KC_NO }, \
- { K30, KC_NO, K32, KC_NO } \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, KC_NO, K22, KC_NO }, \
+ { K30, KC_NO, K32, KC_NO } \
}
diff --git a/keyboards/handwired/traveller/keymaps/default/keymap.c b/keyboards/handwired/traveller/keymaps/default/keymap.c
index 13d889ab8b..f7f08268f0 100644
--- a/keyboards/handwired/traveller/keymaps/default/keymap.c
+++ b/keyboards/handwired/traveller/keymaps/default/keymap.c
@@ -157,11 +157,8 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
const uint16_t PROGMEM fn_actions[] = {
[_QW] = ACTION_LAYER_ON(_QW,ON_RELEASE), // return to QWERTY layer
[_LW] = ACTION_LAYER_TAP_TOGGLE(_LW), // Turn on LW when holding, or tap 3 times to switch
- [_HI] = ACTION_LAYER_TAP_TOGGLE(_HI), // Turn on LW when holding, or tap 3 times to switch
[_NAV] = ACTION_LAYER_TOGGLE(_NAV),
[_FKEYS] = ACTION_LAYER_TOGGLE(_FKEYS),
- [_LWOUT] = ACTION_LAYER_OFF(_LW,ON_RELEASE),
- [_HIOUT] = ACTION_LAYER_OFF(_HI,ON_RELEASE),
// Functions
[RGBLED_TOGGLE] = ACTION_FUNCTION(RGBLED_TOGGLE),
diff --git a/keyboards/handwired/woodpad/keymaps/default/keymap.c b/keyboards/handwired/woodpad/keymaps/default/keymap.c
index 1fa90ba919..70c05fc271 100644
--- a/keyboards/handwired/woodpad/keymaps/default/keymap.c
+++ b/keyboards/handwired/woodpad/keymaps/default/keymap.c
@@ -59,10 +59,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void numlock_led_on(void) {
PORTF |= (1<<7);
}
diff --git a/keyboards/handwired/woodpad/keymaps/default/rules.mk b/keyboards/handwired/woodpad/keymaps/default/rules.mk
index f060db79c0..fce19bfaa8 100644
--- a/keyboards/handwired/woodpad/keymaps/default/rules.mk
+++ b/keyboards/handwired/woodpad/keymaps/default/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/rules.mk b/keyboards/handwired/woodpad/keymaps/drashna/rules.mk
index ed7d2e7c6d..7f7f30e2ad 100644
--- a/keyboards/handwired/woodpad/keymaps/drashna/rules.mk
+++ b/keyboards/handwired/woodpad/keymaps/drashna/rules.mk
@@ -8,6 +8,3 @@ MOUSEKEY_ENABLE = no
EXTRAFLAGS = -flto
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/handwired/xealous/debounce.c b/keyboards/handwired/xealous/debounce.c
new file mode 100644
index 0000000000..65a99f27f2
--- /dev/null
+++ b/keyboards/handwired/xealous/debounce.c
@@ -0,0 +1,63 @@
+#include <string.h>
+#include "config.h"
+#include "matrix.h"
+#include "timer.h"
+#include "quantum.h"
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+//Debouncing counters
+typedef uint8_t debounce_counter_t;
+#define DEBOUNCE_COUNTER_MODULO 250
+#define DEBOUNCE_COUNTER_INACTIVE 251
+
+static debounce_counter_t *debounce_counters;
+
+void debounce_init(uint8_t num_rows)
+{
+ debounce_counters = malloc(num_rows*MATRIX_COLS);
+ memset(debounce_counters, DEBOUNCE_COUNTER_INACTIVE, num_rows*MATRIX_COLS);
+}
+
+void update_debounce_counters(uint8_t num_rows, uint8_t current_time)
+{
+ for (uint8_t row = 0; row < num_rows; row++)
+ {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++)
+ {
+ if (debounce_counters[row*MATRIX_COLS + col] != DEBOUNCE_COUNTER_INACTIVE)
+ {
+ if (TIMER_DIFF(current_time, debounce_counters[row*MATRIX_COLS + col], DEBOUNCE_COUNTER_MODULO) >= DEBOUNCING_DELAY) {
+ debounce_counters[row*MATRIX_COLS + col] = DEBOUNCE_COUNTER_INACTIVE;
+ }
+ }
+ }
+ }
+}
+
+void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time)
+{
+ for (uint8_t row = 0; row < num_rows; row++)
+ {
+ matrix_row_t delta = raw[row] ^ cooked[row];
+
+ for (uint8_t col = 0; col < MATRIX_COLS; col++)
+ {
+ if (debounce_counters[row*MATRIX_COLS + col] == DEBOUNCE_COUNTER_INACTIVE && (delta & (1<<col)))
+ {
+ debounce_counters[row*MATRIX_COLS + col] = current_time;
+ cooked[row] ^= (1 << col);
+ }
+ }
+ }
+}
+
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
+{
+ uint8_t current_time = timer_read() % DEBOUNCE_COUNTER_MODULO;
+
+ update_debounce_counters(num_rows, current_time);
+ transfer_matrix_values(raw, cooked, num_rows, current_time);
+} \ No newline at end of file
diff --git a/keyboards/handwired/xealous/rules.mk b/keyboards/handwired/xealous/rules.mk
index eebd11d86e..07e1c875e6 100644
--- a/keyboards/handwired/xealous/rules.mk
+++ b/keyboards/handwired/xealous/rules.mk
@@ -1,4 +1,5 @@
-SRC += matrix_scanrate.c matrix.c
+#SRC += matrix_scanrate.c matrix.c
+SRC += debounce.c
# MCU name
MCU = atmega32u4
@@ -37,7 +38,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -59,14 +60,15 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SPLIT_KEYBOARD = yes # Use shared split_common code
SUBPROJECT_rev1 = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-CUSTOM_MATRIX = yes
+CUSTOM_MATRIX = no
+CUSTOM_DEBOUNCE = yes
LAYOUTS = split60
diff --git a/keyboards/helix/pico/keymaps/default/rules.mk b/keyboards/helix/pico/keymaps/default/rules.mk
index c5ee8acb2a..3b518ff881 100644
--- a/keyboards/helix/pico/keymaps/default/rules.mk
+++ b/keyboards/helix/pico/keymaps/default/rules.mk
@@ -119,10 +119,6 @@ endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
diff --git a/keyboards/helix/pico/keymaps/mtei/rules.mk b/keyboards/helix/pico/keymaps/mtei/rules.mk
index c5ee8acb2a..3b518ff881 100644
--- a/keyboards/helix/pico/keymaps/mtei/rules.mk
+++ b/keyboards/helix/pico/keymaps/mtei/rules.mk
@@ -119,10 +119,6 @@ endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
diff --git a/keyboards/helix/readme.md b/keyboards/helix/readme.md
index 5ee233e812..a535df0527 100644
--- a/keyboards/helix/readme.md
+++ b/keyboards/helix/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make helix:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk b/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk
new file mode 100644
index 0000000000..1347d3a7da
--- /dev/null
+++ b/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk
@@ -0,0 +1,20 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/helix/rev1/keymaps/default/rules.mk b/keyboards/helix/rev1/keymaps/default/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/helix/rev1/keymaps/default/rules.mk
+++ b/keyboards/helix/rev1/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/helix/rev2/keymaps/default/rules.mk b/keyboards/helix/rev2/keymaps/default/rules.mk
index 3f84b895aa..37ef8632de 100644
--- a/keyboards/helix/rev2/keymaps/default/rules.mk
+++ b/keyboards/helix/rev2/keymaps/default/rules.mk
@@ -118,10 +118,6 @@ endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
index 4257d004da..9d3743995a 100644
--- a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
+++ b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
@@ -121,10 +121,6 @@ endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
diff --git a/keyboards/helix/rev2/keymaps/five_rows/rules.mk b/keyboards/helix/rev2/keymaps/five_rows/rules.mk
index bd7130cfc6..a0bf21917b 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/rules.mk
+++ b/keyboards/helix/rev2/keymaps/five_rows/rules.mk
@@ -125,10 +125,6 @@ endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
index 3f84b895aa..37ef8632de 100644
--- a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
+++ b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
@@ -118,10 +118,6 @@ endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
diff --git a/keyboards/helix/rev2/keymaps/froggy/rules.mk b/keyboards/helix/rev2/keymaps/froggy/rules.mk
index f460170711..8cd0efdd4d 100644
--- a/keyboards/helix/rev2/keymaps/froggy/rules.mk
+++ b/keyboards/helix/rev2/keymaps/froggy/rules.mk
@@ -118,10 +118,6 @@ endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
diff --git a/keyboards/helix/rev2/keymaps/led_test/rules.mk b/keyboards/helix/rev2/keymaps/led_test/rules.mk
index a9cd251bc5..2062d348d1 100644
--- a/keyboards/helix/rev2/keymaps/led_test/rules.mk
+++ b/keyboards/helix/rev2/keymaps/led_test/rules.mk
@@ -120,10 +120,6 @@ SRC += led_test_init.c
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
diff --git a/keyboards/hhkb/keymaps/cinaeco/keymap.c b/keyboards/hhkb/keymaps/cinaeco/keymap.c
index f50f90a843..c27e37d8a0 100644
--- a/keyboards/hhkb/keymaps/cinaeco/keymap.c
+++ b/keyboards/hhkb/keymaps/cinaeco/keymap.c
@@ -162,10 +162,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
return MACRO_NONE;
diff --git a/keyboards/hhkb/keymaps/cinaeco/rules.mk b/keyboards/hhkb/keymaps/cinaeco/rules.mk
index efed95492f..a85669aa2f 100644
--- a/keyboards/hhkb/keymaps/cinaeco/rules.mk
+++ b/keyboards/hhkb/keymaps/cinaeco/rules.mk
@@ -18,6 +18,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c
index 666471a03b..4da9b1d4ab 100644
--- a/keyboards/hhkb/keymaps/dbroqua/keymap.c
+++ b/keyboards/hhkb/keymaps/dbroqua/keymap.c
@@ -97,10 +97,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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,
DEF, ALT, KC_TRNS, KC_TRNS, KC_TRNS)};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/hhkb/keymaps/default/keymap.c b/keyboards/hhkb/keymaps/default/keymap.c
index 3a01fd8020..af6102f108 100644
--- a/keyboards/hhkb/keymaps/default/keymap.c
+++ b/keyboards/hhkb/keymaps/default/keymap.c
@@ -55,10 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/hhkb/keymaps/enoch_jp/keymap.c b/keyboards/hhkb/keymaps/enoch_jp/keymap.c
index 60bf832a74..b685300a76 100644
--- a/keyboards/hhkb/keymaps/enoch_jp/keymap.c
+++ b/keyboards/hhkb/keymaps/enoch_jp/keymap.c
@@ -44,10 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
return MACRO_NONE;
diff --git a/keyboards/hhkb/keymaps/eric/keymap.c b/keyboards/hhkb/keymaps/eric/keymap.c
index 0f3b4c7f36..bf788b2ffd 100644
--- a/keyboards/hhkb/keymaps/eric/keymap.c
+++ b/keyboards/hhkb/keymaps/eric/keymap.c
@@ -53,10 +53,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TRNS, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/hhkb/keymaps/jp/keymap.c b/keyboards/hhkb/keymaps/jp/keymap.c
index 24e4a04a53..fefe61452e 100644
--- a/keyboards/hhkb/keymaps/jp/keymap.c
+++ b/keyboards/hhkb/keymaps/jp/keymap.c
@@ -49,7 +49,3 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t o
{
return MACRO_NONE;
}
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
diff --git a/keyboards/hhkb/keymaps/jp_mac/keymap.c b/keyboards/hhkb/keymaps/jp_mac/keymap.c
index 326f22cd12..80fa14e7a8 100644
--- a/keyboards/hhkb/keymaps/jp_mac/keymap.c
+++ b/keyboards/hhkb/keymaps/jp_mac/keymap.c
@@ -49,7 +49,3 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t o
{
return MACRO_NONE;
}
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
diff --git a/keyboards/hhkb/keymaps/krusli/keymap.c b/keyboards/hhkb/keymaps/krusli/keymap.c
index 3a01fd8020..af6102f108 100644
--- a/keyboards/hhkb/keymaps/krusli/keymap.c
+++ b/keyboards/hhkb/keymaps/krusli/keymap.c
@@ -55,10 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/hhkb/keymaps/mjt/keymap.c b/keyboards/hhkb/keymaps/mjt/keymap.c
index d1725f5c75..e51eb8bf92 100644
--- a/keyboards/hhkb/keymaps/mjt/keymap.c
+++ b/keyboards/hhkb/keymaps/mjt/keymap.c
@@ -82,10 +82,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, DYN_REC_STOP, KC_TRNS, KC_TRNS)};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/hhkb/keymaps/rdg_jp/keymap.c b/keyboards/hhkb/keymaps/rdg_jp/keymap.c
index 2afac7a0b0..f7df543abe 100644
--- a/keyboards/hhkb/keymaps/rdg_jp/keymap.c
+++ b/keyboards/hhkb/keymaps/rdg_jp/keymap.c
@@ -55,7 +55,3 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t o
{
return MACRO_NONE;
}
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
diff --git a/keyboards/hhkb/keymaps/schaeferdev/README.md b/keyboards/hhkb/keymaps/schaeferdev/README.md
new file mode 100644
index 0000000000..15b87c498d
--- /dev/null
+++ b/keyboards/hhkb/keymaps/schaeferdev/README.md
@@ -0,0 +1,36 @@
+ # QMK HHKB Keymap: schaeferdev
+
+This is my QMK keymap for the Happy Hacking Keyboard Pro 2 alternate controller made by Hasu.
+
+
+## Movement Layer
+
+The main difference from the Default layer is the introduction of a Movement layer than can be used by holding the right command button. This layer enables to move the mouse and scroll using Page up and Page down. Additionally it allows to use Arrow-keys in VIM-like fashion on hjkl.
+
+I prefer this movement to the default HHKB FN layer as it allows all my fingers to remain on the home row.
+
+## Minor Changes
+
+- swapped Y and Z (as I am German and used to the different order).
+- changed position of Delete Key
+- both ` and ~
+
+
+## Setup (for macOS)
+```bash
+brew tap osx-cross/avr
+brew install avr-gcc
+brew install dfu-programmer
+```
+
+
+## Flashing
+
+```bash
+make clean
+make hhkb:schaeferdev:dfu
+```
+
+
+## Troubleshooting
+For some reason I ran into the issue that my CMD key no longer recognized. I am not entirely sure what caused this but the problem occured regardless of the layout I flashed (was also broken for the default hhkb layout). I was able to fix this issue by resetting EEPROM of the keyboard. The easiest way to do this is probably to use the QMK Toolbox.
diff --git a/keyboards/hhkb/keymaps/schaeferdev/config.h b/keyboards/hhkb/keymaps/schaeferdev/config.h
new file mode 100644
index 0000000000..b3c799bb82
--- /dev/null
+++ b/keyboards/hhkb/keymaps/schaeferdev/config.h
@@ -0,0 +1,9 @@
+// Based off of this section:
+// https://github.com/qmk/qmk_firmware/blob/master/doc/BUILD_GUIDE.md#the-configh-file
+#pragma once
+
+// Define mousekey settings
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 4
+#define MOUSEKEY_MAX_SPEED 1
+#define MOUSEKEY_TIME_TO_MAX 70 \ No newline at end of file
diff --git a/keyboards/hhkb/keymaps/schaeferdev/keymap.c b/keyboards/hhkb/keymaps/schaeferdev/keymap.c
new file mode 100644
index 0000000000..ea6da450cf
--- /dev/null
+++ b/keyboards/hhkb/keymaps/schaeferdev/keymap.c
@@ -0,0 +1,76 @@
+/* -*- eval: (turn-on-orgtbl); -*-
+ * default HHKB Layout
+ */
+#include QMK_KEYBOARD_H
+
+#define BASE 0
+#define HHKB 1
+#define MOVEMENT 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* BASE Level: Default Layer
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
+ | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backs |Backs|
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
+ |Ctrl/ESC| A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
+ |------+------+-----------------------+------+------|
+ | LAlt | LGUI | ******* Space ******* | MOUSE| RAlt |
+ |------+------+-----------------------+------+------|
+ */
+
+ [BASE] = LAYOUT( // default layer
+ 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,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
+ KC_LALT, KC_LCMD, /* */ KC_SPC, /* */ MO(MOVEMENT), KC_RALT),
+
+ /* Layer HHKB: HHKB mode (HHKB Fn)
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | DEL |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | | | | | | + | - | End | PgD | Dow | | | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ |------+------+----------------------+------+------+
+ | **** | **** | ******************** | **** | **** |
+ |------+------+----------------------+------+------+
+ */
+
+ [HHKB] = LAYOUT(
+ KC_PWR, 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,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ /* Layer MOUSE: MOUSE mode (MOUSE Fn)
+ |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
+ | `~ |ACC1 |ACC2 |ACC3 | | | | | | | | | | DEL | DEL |
+ |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
+ | |MBTN2| | up | | PgU| | | | | | | | | |
+ |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
+ | |MBTN1|right|down |left| PgD| <- | down arrow | up arrow | -> | | | | | |
+ |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
+ | |MBTN3| | | | | | ~ (N) | | | | | | | |
+ |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
+ |------+------+----------------------+------+------+
+ | **** | **** | ******************** | **** | **** |
+ |------+------+----------------------+------+------+
+ */
+
+ [MOVEMENT] = LAYOUT(
+ KC_GRV, KC_ACL0, KC_ACL1, KC_ACL2, 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_BTN2, KC_TRNS, KC_MS_U, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, KC_PGDN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_BTN3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)}; \ No newline at end of file
diff --git a/keyboards/hhkb/keymaps/schaeferdev/rules.mk b/keyboards/hhkb/keymaps/schaeferdev/rules.mk
new file mode 100644
index 0000000000..35591533cc
--- /dev/null
+++ b/keyboards/hhkb/keymaps/schaeferdev/rules.mk
@@ -0,0 +1 @@
+MOUSEKEY_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/hhkb/keymaps/sh_jp/keymap.c b/keyboards/hhkb/keymaps/sh_jp/keymap.c
index 39710a6542..5dbbea8c8c 100644
--- a/keyboards/hhkb/keymaps/sh_jp/keymap.c
+++ b/keyboards/hhkb/keymaps/sh_jp/keymap.c
@@ -50,7 +50,3 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t o
{
return MACRO_NONE;
}
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
diff --git a/keyboards/hhkb/keymaps/smt/keymap.c b/keyboards/hhkb/keymaps/smt/keymap.c
index 428861640f..d6cbaac4b7 100644
--- a/keyboards/hhkb/keymaps/smt/keymap.c
+++ b/keyboards/hhkb/keymaps/smt/keymap.c
@@ -121,10 +121,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
_______, _______, _______, _______, _______)};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/hhkb/readme.md b/keyboards/hhkb/readme.md
index 8774a73f77..57eb814391 100644
--- a/keyboards/hhkb/readme.md
+++ b/keyboards/hhkb/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make hhkb:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/hid_liber/readme.md b/keyboards/hid_liber/readme.md
index 77ea1babb1..bc16c165be 100755
--- a/keyboards/hid_liber/readme.md
+++ b/keyboards/hid_liber/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make hid_liber:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/hs60/v1/readme.md b/keyboards/hs60/v1/readme.md
index 9034e9b881..cbf5f4faab 100644
--- a/keyboards/hs60/v1/readme.md
+++ b/keyboards/hs60/v1/readme.md
@@ -19,4 +19,4 @@ Make example for this keyboard (after setting up your build environment):
make hs60/v1:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/hs60/v2/config.h b/keyboards/hs60/v2/config.h
index 192f7d6f25..bc1681ffd1 100644
--- a/keyboards/hs60/v2/config.h
+++ b/keyboards/hs60/v2/config.h
@@ -20,9 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0258
-#define DEVICE_VER 0x0001
+#define VENDOR_ID 0x8968
+#define PRODUCT_ID 0x4853
+#define DEVICE_VER 0x0002
#define MANUFACTURER Yiancar-Designs
#define PRODUCT HS60 V2
#define DESCRIPTION GH60 compatible, tool free RGB keyboard
@@ -39,7 +39,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 0
+#define DEBOUNCING_DELAY 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
@@ -70,48 +70,63 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//#define FORCE_NKRO
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
+/* Backlight options */
-/* disable debug print */
-//#define NO_DEBUG
+#define RGB_BACKLIGHT_ENABLED 1
-/* disable print */
-//#define NO_PRINT
+#define RGB_BACKLIGHT_HS60
-/* Backlight options */
+// they aren't really used if RGB_BACKLIGHT_HS60 defined
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
-#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
-#define RGB_MATRIX_SKIP_FRAMES 3
+// disable backlight when USB suspended (PC sleep/hibernate/shutdown)
+#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 0
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+// disable backlight after timeout in minutes, 0 = no timeout
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0
-#define DRIVER_COUNT 2
-#ifdef HS60_ANSI
-#define DRIVER_1_LED_TOTAL 61
-#else
-#define DRIVER_1_LED_TOTAL 62
-#endif
+// the default effect (RGB test)
+#define RGB_BACKLIGHT_EFFECT 255
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL 64
+
+// These define which keys in the matrix are alphas/mods
+// Used for backlight effects so colors are different for
+// alphas vs. mods
+// Each value is for a row, bit 0 is column 0
+// Alpha=0 Mod=1
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0011110000000111
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Backlight config starts after EEPROM version
+#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35
+// Dynamic keymap starts after backlight config (35+31)
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 66
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+// Dynamic macro starts after dynamic keymaps (66+(4*5*14*2)) = (66+560)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 626
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 398
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/hs60/v2/keymaps/ansi/config.h b/keyboards/hs60/v2/keymaps/ansi/config.h
index f51cc16d85..96adaf5688 100644
--- a/keyboards/hs60/v2/keymaps/ansi/config.h
+++ b/keyboards/hs60/v2/keymaps/ansi/config.h
@@ -19,3 +19,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Include overwrites for specific keymap */
#define HS60_ANSI
+#undef PRODUCT_ID
+#define PRODUCT_ID 0x4854
diff --git a/keyboards/hs60/v2/keymaps/ansi/keymap.c b/keyboards/hs60/v2/keymaps/ansi/keymap.c
index 923af9e2ce..ba649470b4 100644
--- a/keyboards/hs60/v2/keymaps/ansi/keymap.c
+++ b/keyboards/hs60/v2/keymaps/ansi/keymap.c
@@ -26,11 +26,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
[1] = LAYOUT_60_ansi( /* FN */
- KC_TRNS, 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_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET , KC_TRNS,\
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
- KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_TRNS,\
+ 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_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS,\
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, BR_DEC, BR_INC, ES_DEC, ES_INC, KC_TRNS,\
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[2] = LAYOUT_60_ansi( /* Empty for dynamic keymaps */
+ 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, 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, 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, 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),
+
+[3] = LAYOUT_60_ansi( /* Empty for dynamic keymaps */
+ 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, 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, 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, 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),
};
void matrix_init_user(void) {
diff --git a/keyboards/hs60/v2/keymaps/ansi/readme.md b/keyboards/hs60/v2/keymaps/ansi/readme.md
index fa811319d3..650871a5e6 100644
--- a/keyboards/hs60/v2/keymaps/ansi/readme.md
+++ b/keyboards/hs60/v2/keymaps/ansi/readme.md
@@ -1,6 +1,6 @@
-The default keymap for ANSI HS60
-================================
+The default keymap for ANSI HS60 V2
+===================================
-![Layout image](https://imgur.com/CSyPw0J.png)
+![Layout image](https://i.imgur.com/m8t5CfE.png)
Default layer is normal ANSI and Fn layer is used for RGB functions, Volume control and arrow cluster \ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/default/keymap.c b/keyboards/hs60/v2/keymaps/default/keymap.c
index 2a5e823618..c1e575769f 100644
--- a/keyboards/hs60/v2/keymaps/default/keymap.c
+++ b/keyboards/hs60/v2/keymaps/default/keymap.c
@@ -26,11 +26,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
[1] = LAYOUT_60_iso( /* FN */
- KC_TRNS, 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_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_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET , \
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS,\
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
+ KC_TRNS, KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, BR_DEC, BR_INC, ES_DEC, ES_INC, KC_TRNS,\
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[2] = LAYOUT_60_iso( /* Empty for dynamic keymaps */
+ 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, 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, 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, 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),
+
+[3] = LAYOUT_60_iso( /* Empty for dynamic keymaps */
+ 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, 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, 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, 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),
};
void matrix_init_user(void) {
diff --git a/keyboards/hs60/v2/keymaps/default/readme.md b/keyboards/hs60/v2/keymaps/default/readme.md
index 9125cb349e..f0b29900e6 100644
--- a/keyboards/hs60/v2/keymaps/default/readme.md
+++ b/keyboards/hs60/v2/keymaps/default/readme.md
@@ -1,6 +1,6 @@
-The default keymap for ISO HS60
-===============================
+The default keymap for ISO HS60 V2
+==================================
-![Layout image](https://imgur.com/HXj4tYL.png)
+![Layout image](https://imgur.com/6go4vQV.png)
Default layer is normal ISO and Fn layer is used for RGB functions, Volume control and arrow cluster \ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/hhkb/config.h b/keyboards/hs60/v2/keymaps/hhkb/config.h
index 3db403ecc5..fc1b6d8f47 100644
--- a/keyboards/hs60/v2/keymaps/hhkb/config.h
+++ b/keyboards/hs60/v2/keymaps/hhkb/config.h
@@ -19,3 +19,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Include overwrites for specific keymap */
#define HS60_HHKB
+#undef PRODUCT_ID
+#define PRODUCT_ID 0x4855
+
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_0
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_1
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_2
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_3
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_4
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0011100000000111
diff --git a/keyboards/hs60/v2/keymaps/hhkb/keymap.c b/keyboards/hs60/v2/keymaps/hhkb/keymap.c
index d52fc4bac9..9641eedb49 100644
--- a/keyboards/hs60/v2/keymaps/hhkb/keymap.c
+++ b/keyboards/hs60/v2/keymaps/hhkb/keymap.c
@@ -19,18 +19,32 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_hhkb( /* Base */
- 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_BSLS, \
- 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, \
- 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, \
- 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(1), \
- KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL ),
+ 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_BSLS,\
+ 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,\
+ 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, \
+ 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(1),\
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL ),
[1] = LAYOUT_60_hhkb( /* FN */
- 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_TRNS, KC_TRNS,\
- KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_UP, KC_TRNS, KC_DEL, \
- KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS )
+ 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_TRNS, KC_TRNS,\
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, BR_DEC, BR_INC, ES_DEC, ES_INC, KC_UP, KC_TRNS, KC_DEL, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \
+ KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,\
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
+
+[2] = LAYOUT_60_hhkb( /* Empty for dynamic keymaps */
+ 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, 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, 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, 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 ),
+
+[3] = LAYOUT_60_hhkb( /* Empty for dynamic keymaps */
+ 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, 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, 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, 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 ),
};
void matrix_init_user(void) {
diff --git a/keyboards/hs60/v2/keymaps/hhkb/readme.md b/keyboards/hs60/v2/keymaps/hhkb/readme.md
new file mode 100644
index 0000000000..69b812c607
--- /dev/null
+++ b/keyboards/hs60/v2/keymaps/hhkb/readme.md
@@ -0,0 +1,6 @@
+The default keymap for HHKB HS60 V2
+===================================
+
+![Layout image](https://imgur.com/usbrQWL.png)
+
+Default layer is normal HHKB with 7U space. Fn layer is used for RGB functions, Volume control and arrow cluster \ No newline at end of file
diff --git a/keyboards/hs60/v2/mcuconf.h b/keyboards/hs60/v2/mcuconf.h
index 226da48d59..ce608f904e 100644
--- a/keyboards/hs60/v2/mcuconf.h
+++ b/keyboards/hs60/v2/mcuconf.h
@@ -139,7 +139,7 @@
#define STM32_GPT_USE_TIM1 FALSE
#define STM32_GPT_USE_TIM2 FALSE
#define STM32_GPT_USE_TIM3 FALSE
-#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM4 TRUE
#define STM32_GPT_USE_TIM6 TRUE
#define STM32_GPT_USE_TIM7 TRUE
#define STM32_GPT_USE_TIM8 TRUE
diff --git a/keyboards/hs60/v2/readme.md b/keyboards/hs60/v2/readme.md
index 50c91698da..e6658ced9a 100644
--- a/keyboards/hs60/v2/readme.md
+++ b/keyboards/hs60/v2/readme.md
@@ -15,4 +15,4 @@ Make example for this keyboard (after setting up your build environment):
make hs60/v2:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/hs60/v2/rules.mk b/keyboards/hs60/v2/rules.mk
index 51e3cf0a3e..a2850a8305 100644
--- a/keyboards/hs60/v2/rules.mk
+++ b/keyboards/hs60/v2/rules.mk
@@ -1,4 +1,9 @@
# project specific files
+SRC = keyboards/zeal60/zeal60.c \
+ keyboards/zeal60/rgb_backlight.c \
+ drivers/issi/is31fl3733.c \
+ quantum/color.c \
+ drivers/arm/i2c_master.c
## chip/board settings
# the next two should match the directories in
@@ -44,15 +49,18 @@ DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
# Build Options
# comment out to disable the options.
#
-BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
-#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover
-AUDIO_ENABLE = no
-RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
+AUDIO_ENABLE = no # Audio output on port C6
NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
#SERIAL_LINK_ENABLE = yes
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
diff --git a/keyboards/hs60/v2/v2.c b/keyboards/hs60/v2/v2.c
index 4289c1fed5..2e12538e9b 100644
--- a/keyboards/hs60/v2/v2.c
+++ b/keyboards/hs60/v2/v2.c
@@ -13,623 +13,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "v2.h"
-
-//#include "is31fl3733.h"
-
-// Please ignore this is for upcoming features
-/*#ifdef RAW_ENABLE
-
-void raw_hid_receive( uint8_t *data, uint8_t length )
-{
- uint8_t command = data[0];
- switch ( command )
- {
- case id_protocol_version:
- {
- msg_protocol_version *msg = (msg_protocol_version*)&data[1];
- msg->version = PROTOCOL_VERSION;
- break;
- }
-#if USE_KEYMAPS_IN_EEPROM
- case id_keymap_keycode_load:
- {
- msg_keymap_keycode_load *msg = (msg_keymap_keycode_load*)&data[1];
- msg->keycode = keymap_keycode_load( msg->layer, msg->row, msg->column );
- break;
- }
- case id_keymap_keycode_save:
- {
- msg_keymap_keycode_save *msg = (msg_keymap_keycode_save*)&data[1];
- keymap_keycode_save( msg->layer, msg->row, msg->column, msg->keycode);
- break;
- }
- case id_keymap_default_save:
- {
- keymap_default_save();
- break;
- }
-#endif // USE_KEYMAPS_IN_EEPROM
- case id_backlight_config_set_values:
- {
- msg_backlight_config_set_values *msg = (msg_backlight_config_set_values*)&data[1];
- backlight_config_set_values(msg);
- backlight_config_save();
- break;
- }
- case id_backlight_config_set_alphas_mods:
- {
- msg_backlight_config_set_alphas_mods *msg = (msg_backlight_config_set_alphas_mods*)&data[1];
- backlight_config_set_alphas_mods( msg->alphas_mods );
- backlight_config_save();
- break;
- }
- case id_backlight_set_key_color:
- {
- msg_backlight_set_key_color *msg = (msg_backlight_set_key_color*)&data[1];
- backlight_set_key_color(msg->row, msg->column, msg->hsv);
- break;
- }
- case id_system_get_state:
- {
- msg_system_state *msg = (msg_system_state*)&data[1];
- msg->value = backlight_get_tick();
- break;
- }
- default:
- {
- // Unhandled message.
- data[0] = id_unhandled;
- break;
- }
- }
-
- // Return same buffer with values changed
- raw_hid_send( data, length );
-
-}
-
-#endif*/
-
-#ifdef HS60_ANSI
-
-const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
-/* Refer to IS31 manual for these locations
- * driver
- * | R location
- * | | G location
- * | | | B location
- * | | | | */
- {0, B_1, A_1, C_1}, //MX1
- {0, E_1, D_1, F_1}, //MX2
- {0, H_1, G_1, I_1}, //MX3
- {0, K_1, J_1, L_1}, //MX4
- {0, B_2, A_2, C_2}, //MX6
- {0, E_2, D_2, F_2}, //MX7
- {0, H_2, G_2, I_2}, //MX8
- {0, K_2, J_2, L_2}, //MX14
- {0, B_3, A_3, C_3}, //MX11
- {0, E_3, D_3, F_3}, //MX12
- {0, H_3, G_3, I_3}, //MX13
- {0, K_3, J_3, L_3}, //MX19
- {0, B_4, A_4, C_4}, //MX16
- {0, E_4, D_4, F_4}, //MX17
- {0, H_4, G_4, I_4}, //MX18
- {0, K_4, J_4, L_4}, //MX23
- {0, B_5, A_5, C_5}, //MX20
- {0, E_5, D_5, F_5}, //MX21
- {0, H_5, G_5, I_5}, //MX22
- {0, K_5, J_5, L_5}, //MX27
- {0, B_6, A_6, C_6}, //MX24
- {0, E_6, D_6, F_6}, //MX25
- {0, H_6, G_6, I_6}, //MX26
- {0, K_6, J_6, L_6}, //MX31
- {0, B_7, A_7, C_7}, //MX28
- {0, E_7, D_7, F_7}, //MX29
- {0, H_7, G_7, I_7}, //MX30
- {0, K_7, J_7, L_7}, //MX36
- {0, B_8, A_8, C_8}, //MX33
- {0, E_8, D_8, F_8}, //MX34
- {0, H_8, G_8, I_8}, //MX35
- {0, K_8, J_8, L_8}, //MX40
- {0, B_9, A_9, C_9}, //MX37
- {0, E_9, D_9, F_9}, //MX38
- {0, H_9, G_9, I_9}, //MX39
- {0, K_9, J_9, L_9}, //MX44
- {0, B_10, A_10, C_10}, //MX41
- {0, E_10, D_10, F_10}, //MX42
- {0, H_10, G_10, I_10}, //MX43
- {0, K_10, J_10, L_10}, //MX48
- {0, B_11, A_11, C_11}, //MX45
- {0, E_11, D_11, F_11}, //MX46
- {0, H_11, G_11, I_11}, //MX47
- {0, K_11, J_11, L_11}, //MX53
- {0, B_12, A_12, C_12}, //MX50
- {0, E_12, D_12, F_12}, //MX51
- {0, H_12, G_12, I_12}, //MX52
-
- {0, B_13, A_13, C_13}, //MX55
- {0, E_13, D_13, F_13}, //MX56
-
- {0, K_13, J_13, L_13}, //MX61
- {0, B_14, A_14, C_14}, //MX59
- {0, E_14, D_14, F_14}, //MX57
- {0, H_14, G_14, I_14}, //MX60
- {0, K_14, J_14, L_14}, //MX62
- {0, B_15, A_15, C_15}, //MX5
- {0, E_15, D_15, F_15}, //MX10
- {0, H_15, G_15, I_15}, //MX15
- {0, K_15, J_15, L_15}, //MX32
-
- {0, E_16, D_16, F_16}, //MX49
- {0, H_16, G_16, I_16}, //MX54
- {0, K_16, J_16, L_16}, //MX58
-};
-
-const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
-//
-// MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
-// MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, ---,
-// MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
-// MX4, ---, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, ---, MX61,
-// MX5, MX10, MX15, ---, ---, ---, MX32, ---, ---, ---, MX49, MX54, MX58, MX62
-/* {row | col << 4}
- * | {x=0..224, y=0..64}
- * | | modifier
- * | | | */
- {{0|(0<<4)}, { 0, 0}, 1}, //MX1
- {{1|(0<<4)}, { 0, 16}, 1}, //MX2
- {{2|(0<<4)}, { 0, 32}, 1}, //MX3
- {{3|(0<<4)}, { 0, 48}, 1}, //MX4
- {{0|(1<<4)}, { 17, 0}, 0}, //MX6
- {{1|(1<<4)}, { 17, 16}, 0}, //MX7
- {{2|(1<<4)}, { 17, 32}, 0}, //MX8
- {{3|(2<<4)}, { 34, 48}, 0}, //MX14
- {{0|(2<<4)}, { 34, 0}, 0}, //MX11
- {{1|(2<<4)}, { 34, 16}, 0}, //MX12
- {{2|(2<<4)}, { 34, 32}, 0}, //MX13
- {{3|(3<<4)}, { 51, 48}, 0}, //MX19
- {{0|(3<<4)}, { 51, 0}, 0}, //MX16
- {{1|(3<<4)}, { 51, 16}, 0}, //MX17
- {{2|(3<<4)}, { 51, 32}, 0}, //MX18
- {{3|(4<<4)}, { 68, 48}, 0}, //MX23
- {{0|(4<<4)}, { 68, 0}, 0}, //MX20
- {{1|(4<<4)}, { 68, 16}, 0}, //MX21
- {{2|(4<<4)}, { 68, 32}, 0}, //MX22
- {{3|(5<<4)}, { 85, 48}, 0}, //MX27
- {{0|(5<<4)}, { 85, 0}, 0}, //MX24
- {{1|(5<<4)}, { 85, 16}, 0}, //MX25
- {{2|(5<<4)}, { 85, 32}, 0}, //MX26
- {{3|(6<<4)}, {102, 48}, 0}, //MX31
- {{0|(6<<4)}, {102, 0}, 0}, //MX28
- {{1|(6<<4)}, {102, 16}, 0}, //MX29
- {{2|(6<<4)}, {102, 32}, 0}, //MX30
- {{3|(7<<4)}, {119, 48}, 0}, //MX36
- {{0|(7<<4)}, {119, 0}, 0}, //MX33
- {{1|(7<<4)}, {119, 16}, 0}, //MX34
- {{2|(7<<4)}, {119, 32}, 0}, //MX35
- {{3|(8<<4)}, {136, 48}, 0}, //MX40
- {{0|(8<<4)}, {136, 0}, 0}, //MX37
- {{1|(8<<4)}, {136, 16}, 0}, //MX38
- {{2|(8<<4)}, {136, 32}, 0}, //MX39
- {{3|(9<<4)}, {153, 48}, 0}, //MX44
- {{0|(9<<4)}, {153, 0}, 0}, //MX41
- {{1|(9<<4)}, {153, 16}, 0}, //MX42
- {{2|(9<<4)}, {153, 32}, 0}, //MX43
- {{3|(10<<4)}, {170, 48}, 0}, //MX48
- {{0|(10<<4)}, {170, 0}, 0}, //MX45
- {{1|(10<<4)}, {170, 16}, 0}, //MX46
- {{2|(10<<4)}, {170, 32}, 0}, //MX47
- {{3|(11<<4)}, {187, 48}, 0}, //MX53
- {{0|(11<<4)}, {187, 0}, 0}, //MX50
- {{1|(11<<4)}, {187, 16}, 0}, //MX51
- {{2|(11<<4)}, {187, 32}, 0}, //MX52
-
- {{0|(12<<4)}, {204, 0}, 0}, //MX55
- {{1|(12<<4)}, {204, 16}, 0}, //MX56
-
- {{3|(13<<4)}, {221, 48}, 1}, //MX61
- {{0|(13<<4)}, {221, 0}, 1}, //MX59
- {{2|(12<<4)}, {221, 16}, 0}, //MX57
- {{2|(13<<4)}, {221, 32}, 1}, //MX60
- {{4|(13<<4)}, {221, 64}, 1}, //MX62
- {{4|(0<<4)}, { 0, 64}, 1}, //MX5
- {{4|(1<<4)}, { 17, 64}, 1}, //MX10
- {{4|(2<<4)}, { 34, 64}, 1}, //MX15
- {{4|(5<<4)}, {102, 64}, 0}, //MX32
-
- {{4|(10<<4)}, {170, 64}, 1}, //MX49
- {{4|(11<<4)}, {187, 64}, 1}, //MX54
- {{4|(12<<4)}, {204, 64}, 1} //MX58
-};
-
-#elif defined(HS60_HHKB)
-
-const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
-/* Refer to IS31 manual for these locations
- * driver
- * | R location
- * | | G location
- * | | | B location
- * | | | | */
- {0, B_1, A_1, C_1}, //MX1
- {0, E_1, D_1, F_1}, //MX2
- {0, H_1, G_1, I_1}, //MX3
- {0, K_1, J_1, L_1}, //MX4
- {0, B_2, A_2, C_2}, //MX6
- {0, E_2, D_2, F_2}, //MX7
- {0, H_2, G_2, I_2}, //MX8
- {0, K_2, J_2, L_2}, //MX14
- {0, B_3, A_3, C_3}, //MX11
- {0, E_3, D_3, F_3}, //MX12
- {0, H_3, G_3, I_3}, //MX13
- {0, K_3, J_3, L_3}, //MX19
- {0, B_4, A_4, C_4}, //MX16
- {0, E_4, D_4, F_4}, //MX17
- {0, H_4, G_4, I_4}, //MX18
- {0, K_4, J_4, L_4}, //MX23
- {0, B_5, A_5, C_5}, //MX20
- {0, E_5, D_5, F_5}, //MX21
- {0, H_5, G_5, I_5}, //MX22
- {0, K_5, J_5, L_5}, //MX27
- {0, B_6, A_6, C_6}, //MX24
- {0, E_6, D_6, F_6}, //MX25
- {0, H_6, G_6, I_6}, //MX26
- {0, K_6, J_6, L_6}, //MX31
- {0, B_7, A_7, C_7}, //MX28
- {0, E_7, D_7, F_7}, //MX29
- {0, H_7, G_7, I_7}, //MX30
- {0, K_7, J_7, L_7}, //MX36
- {0, B_8, A_8, C_8}, //MX33
- {0, E_8, D_8, F_8}, //MX34
- {0, H_8, G_8, I_8}, //MX35
- {0, K_8, J_8, L_8}, //MX40
- {0, B_9, A_9, C_9}, //MX37
- {0, E_9, D_9, F_9}, //MX38
- {0, H_9, G_9, I_9}, //MX39
- {0, K_9, J_9, L_9}, //MX44
- {0, B_10, A_10, C_10}, //MX41
- {0, E_10, D_10, F_10}, //MX42
- {0, H_10, G_10, I_10}, //MX43
- {0, K_10, J_10, L_10}, //MX48
- {0, B_11, A_11, C_11}, //MX45
- {0, E_11, D_11, F_11}, //MX46
- {0, H_11, G_11, I_11}, //MX47
- {0, K_11, J_11, L_11}, //MX53
- {0, B_12, A_12, C_12}, //MX50
- {0, E_12, D_12, F_12}, //MX51
- {0, H_12, G_12, I_12}, //MX52
- {0, K_12, J_12, L_12}, //MX64
- {0, B_13, A_13, C_13}, //MX55
- {0, E_13, D_13, F_13}, //MX56
- {0, H_13, G_13, I_13}, //MX63
- {0, K_13, J_13, L_13}, //MX61
- {0, B_14, A_14, C_14}, //MX59
- {0, E_14, D_14, F_14}, //MX57
- {0, H_14, G_14, I_14}, //MX60
- {0, K_14, J_14, L_14}, //MX62
- {0, B_15, A_15, C_15}, //MX5
- {0, E_15, D_15, F_15}, //MX10
- {0, H_15, G_15, I_15}, //MX15
- {0, K_15, J_15, L_15}, //MX32
-
-
- {0, H_16, G_16, I_16}, //MX54
- {0, K_16, J_16, L_16}, //MX58
-};
-
-const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
-//
-// MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
-// MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, MX64,
-// MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
-// MX4, ----, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, MX63, MX61,
-// MX5, MX10, MX15, ----, ----, ----, MX32, ----, ---, ----, ----, MX54, MX58, MX62
-/* {row | col << 4}
- * | {x=0..224, y=0..64}
- * | | modifier
- * | | | */
- {{0|(0<<4)}, { 0, 0}, 1}, //MX1
- {{1|(0<<4)}, { 0, 16}, 1}, //MX2
- {{2|(0<<4)}, { 0, 32}, 1}, //MX3
- {{3|(0<<4)}, { 0, 48}, 1}, //MX4
- {{0|(1<<4)}, { 17, 0}, 0}, //MX6
- {{1|(1<<4)}, { 17, 16}, 0}, //MX7
- {{2|(1<<4)}, { 17, 32}, 0}, //MX8
- {{3|(2<<4)}, { 34, 48}, 0}, //MX14
- {{0|(2<<4)}, { 34, 0}, 0}, //MX11
- {{1|(2<<4)}, { 34, 16}, 0}, //MX12
- {{2|(2<<4)}, { 34, 32}, 0}, //MX13
- {{3|(3<<4)}, { 51, 48}, 0}, //MX19
- {{0|(3<<4)}, { 51, 0}, 0}, //MX16
- {{1|(3<<4)}, { 51, 16}, 0}, //MX17
- {{2|(3<<4)}, { 51, 32}, 0}, //MX18
- {{3|(4<<4)}, { 68, 48}, 0}, //MX23
- {{0|(4<<4)}, { 68, 0}, 0}, //MX20
- {{1|(4<<4)}, { 68, 16}, 0}, //MX21
- {{2|(4<<4)}, { 68, 32}, 0}, //MX22
- {{3|(5<<4)}, { 85, 48}, 0}, //MX27
- {{0|(5<<4)}, { 85, 0}, 0}, //MX24
- {{1|(5<<4)}, { 85, 16}, 0}, //MX25
- {{2|(5<<4)}, { 85, 32}, 0}, //MX26
- {{3|(6<<4)}, {102, 48}, 0}, //MX31
- {{0|(6<<4)}, {102, 0}, 0}, //MX28
- {{1|(6<<4)}, {102, 16}, 0}, //MX29
- {{2|(6<<4)}, {102, 32}, 0}, //MX30
- {{3|(7<<4)}, {119, 48}, 0}, //MX36
- {{0|(7<<4)}, {119, 0}, 0}, //MX33
- {{1|(7<<4)}, {119, 16}, 0}, //MX34
- {{2|(7<<4)}, {119, 32}, 0}, //MX35
- {{3|(8<<4)}, {136, 48}, 0}, //MX40
- {{0|(8<<4)}, {136, 0}, 0}, //MX37
- {{1|(8<<4)}, {136, 16}, 0}, //MX38
- {{2|(8<<4)}, {136, 32}, 0}, //MX39
- {{3|(9<<4)}, {153, 48}, 0}, //MX44
- {{0|(9<<4)}, {153, 0}, 0}, //MX41
- {{1|(9<<4)}, {153, 16}, 0}, //MX42
- {{2|(9<<4)}, {153, 32}, 0}, //MX43
- {{3|(10<<4)}, {170, 48}, 0}, //MX48
- {{0|(10<<4)}, {170, 0}, 0}, //MX45
- {{1|(10<<4)}, {170, 16}, 0}, //MX46
- {{2|(10<<4)}, {170, 32}, 0}, //MX47
- {{3|(11<<4)}, {187, 48}, 0}, //MX53
- {{0|(11<<4)}, {187, 0}, 0}, //MX50
- {{1|(11<<4)}, {187, 16}, 0}, //MX51
- {{2|(11<<4)}, {187, 32}, 0}, //MX52
- {{1|(13<<4)}, {221, 0}, 1}, //MX64
- {{0|(12<<4)}, {204, 0}, 0}, //MX55
- {{1|(12<<4)}, {204, 16}, 0}, //MX56
- {{3|(12<<4)}, {204, 48}, 0}, //MX63
- {{3|(13<<4)}, {212, 48}, 1}, //MX61
- {{0|(13<<4)}, {221, 0}, 0}, //MX59
- {{2|(12<<4)}, {221, 16}, 0}, //MX57
- {{2|(13<<4)}, {221, 32}, 1}, //MX60
- {{4|(13<<4)}, {221, 64}, 1}, //MX62
- {{4|(0<<4)}, { 0, 64}, 1}, //MX5
- {{4|(1<<4)}, { 17, 64}, 1}, //MX10
- {{4|(2<<4)}, { 34, 64}, 1}, //MX15
- {{4|(5<<4)}, {102, 64}, 0}, //MX32
-
-
- {{4|(11<<4)}, {187, 64}, 1}, //MX54
- {{4|(12<<4)}, {204, 64}, 1} //MX58
-};
-
-#else //ISO layout
-
-const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
-/* Refer to IS31 manual for these locations
- * driver
- * | R location
- * | | G location
- * | | | B location
- * | | | | */
- {0, B_1, A_1, C_1}, //MX1
- {0, E_1, D_1, F_1}, //MX2
- {0, H_1, G_1, I_1}, //MX3
- {0, K_1, J_1, L_1}, //MX4
- {0, B_2, A_2, C_2}, //MX6
- {0, E_2, D_2, F_2}, //MX7
- {0, H_2, G_2, I_2}, //MX8
- {0, K_2, J_2, L_2}, //MX14
- {0, B_3, A_3, C_3}, //MX11
- {0, E_3, D_3, F_3}, //MX12
- {0, H_3, G_3, I_3}, //MX13
- {0, K_3, J_3, L_3}, //MX19
- {0, B_4, A_4, C_4}, //MX16
- {0, E_4, D_4, F_4}, //MX17
- {0, H_4, G_4, I_4}, //MX18
- {0, K_4, J_4, L_4}, //MX23
- {0, B_5, A_5, C_5}, //MX20
- {0, E_5, D_5, F_5}, //MX21
- {0, H_5, G_5, I_5}, //MX22
- {0, K_5, J_5, L_5}, //MX27
- {0, B_6, A_6, C_6}, //MX24
- {0, E_6, D_6, F_6}, //MX25
- {0, H_6, G_6, I_6}, //MX26
- {0, K_6, J_6, L_6}, //MX31
- {0, B_7, A_7, C_7}, //MX28
- {0, E_7, D_7, F_7}, //MX29
- {0, H_7, G_7, I_7}, //MX30
- {0, K_7, J_7, L_7}, //MX36
- {0, B_8, A_8, C_8}, //MX33
- {0, E_8, D_8, F_8}, //MX34
- {0, H_8, G_8, I_8}, //MX35
- {0, K_8, J_8, L_8}, //MX40
- {0, B_9, A_9, C_9}, //MX37
- {0, E_9, D_9, F_9}, //MX38
- {0, H_9, G_9, I_9}, //MX39
- {0, K_9, J_9, L_9}, //MX44
- {0, B_10, A_10, C_10}, //MX41
- {0, E_10, D_10, F_10}, //MX42
- {0, H_10, G_10, I_10}, //MX43
- {0, K_10, J_10, L_10}, //MX48
- {0, B_11, A_11, C_11}, //MX45
- {0, E_11, D_11, F_11}, //MX46
- {0, H_11, G_11, I_11}, //MX47
- {0, K_11, J_11, L_11}, //MX53
- {0, B_12, A_12, C_12}, //MX50
- {0, E_12, D_12, F_12}, //MX51
- {0, H_12, G_12, I_12}, //MX52
- {0, K_12, J_12, L_12}, //MX9
- {0, B_13, A_13, C_13}, //MX55
- {0, E_13, D_13, F_13}, //MX56
-
- {0, K_13, J_13, L_13}, //MX61
- {0, B_14, A_14, C_14}, //MX59
- {0, E_14, D_14, F_14}, //MX57
- {0, H_14, G_14, I_14}, //MX60
- {0, K_14, J_14, L_14}, //MX62
- {0, B_15, A_15, C_15}, //MX5
- {0, E_15, D_15, F_15}, //MX10
- {0, H_15, G_15, I_15}, //MX15
- {0, K_15, J_15, L_15}, //MX32
-
- {0, E_16, D_16, F_16}, //MX49
- {0, H_16, G_16, I_16}, //MX54
- {0, K_16, J_16, L_16}, //MX58
-};
-
-const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
-//
-// MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
-// MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, ---,
-// MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
-// MX4, ---, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, ---, MX61,
-// MX5, MX10, MX15, ---, ---, ---, MX32, ---, ---, ---, MX49, MX54, MX58, MX62
-/* {row | col << 4}
- * | {x=0..224, y=0..64}
- * | | modifier
- * | | | */
- {{0|(0<<4)}, { 0, 0}, 1}, //MX1
- {{1|(0<<4)}, { 0, 16}, 1}, //MX2
- {{2|(0<<4)}, { 0, 32}, 1}, //MX3
- {{3|(0<<4)}, { 0, 48}, 1}, //MX4
- {{0|(1<<4)}, { 17, 0}, 0}, //MX6
- {{1|(1<<4)}, { 17, 16}, 0}, //MX7
- {{2|(1<<4)}, { 17, 32}, 0}, //MX8
- {{3|(2<<4)}, { 34, 48}, 0}, //MX14
- {{0|(2<<4)}, { 34, 0}, 0}, //MX11
- {{1|(2<<4)}, { 34, 16}, 0}, //MX12
- {{2|(2<<4)}, { 34, 32}, 0}, //MX13
- {{3|(3<<4)}, { 51, 48}, 0}, //MX19
- {{0|(3<<4)}, { 51, 0}, 0}, //MX16
- {{1|(3<<4)}, { 51, 16}, 0}, //MX17
- {{2|(3<<4)}, { 51, 32}, 0}, //MX18
- {{3|(4<<4)}, { 68, 48}, 0}, //MX23
- {{0|(4<<4)}, { 68, 0}, 0}, //MX20
- {{1|(4<<4)}, { 68, 16}, 0}, //MX21
- {{2|(4<<4)}, { 68, 32}, 0}, //MX22
- {{3|(5<<4)}, { 85, 48}, 0}, //MX27
- {{0|(5<<4)}, { 85, 0}, 0}, //MX24
- {{1|(5<<4)}, { 85, 16}, 0}, //MX25
- {{2|(5<<4)}, { 85, 32}, 0}, //MX26
- {{3|(6<<4)}, {102, 48}, 0}, //MX31
- {{0|(6<<4)}, {102, 0}, 0}, //MX28
- {{1|(6<<4)}, {102, 16}, 0}, //MX29
- {{2|(6<<4)}, {102, 32}, 0}, //MX30
- {{3|(7<<4)}, {119, 48}, 0}, //MX36
- {{0|(7<<4)}, {119, 0}, 0}, //MX33
- {{1|(7<<4)}, {119, 16}, 0}, //MX34
- {{2|(7<<4)}, {119, 32}, 0}, //MX35
- {{3|(8<<4)}, {136, 48}, 0}, //MX40
- {{0|(8<<4)}, {136, 0}, 0}, //MX37
- {{1|(8<<4)}, {136, 16}, 0}, //MX38
- {{2|(8<<4)}, {136, 32}, 0}, //MX39
- {{3|(9<<4)}, {153, 48}, 0}, //MX44
- {{0|(9<<4)}, {153, 0}, 0}, //MX41
- {{1|(9<<4)}, {153, 16}, 0}, //MX42
- {{2|(9<<4)}, {153, 32}, 0}, //MX43
- {{3|(10<<4)}, {170, 48}, 0}, //MX48
- {{0|(10<<4)}, {170, 0}, 0}, //MX45
- {{1|(10<<4)}, {170, 16}, 0}, //MX46
- {{2|(10<<4)}, {170, 32}, 0}, //MX47
- {{3|(11<<4)}, {187, 48}, 0}, //MX53
- {{0|(11<<4)}, {187, 0}, 0}, //MX50
- {{1|(11<<4)}, {187, 16}, 0}, //MX51
- {{2|(11<<4)}, {187, 32}, 0}, //MX52
- {{3|(2<<4)}, { 17, 32}, 1}, //MX9
- {{0|(12<<4)}, {204, 0}, 0}, //MX55
- {{1|(12<<4)}, {204, 16}, 0}, //MX56
-
- {{3|(13<<4)}, {221, 48}, 1}, //MX61
- {{0|(13<<4)}, {221, 0}, 1}, //MX59
- {{2|(12<<4)}, {204, 32}, 0}, //MX57
- {{2|(13<<4)}, {221, 24}, 1}, //MX60
- {{4|(13<<4)}, {221, 64}, 1}, //MX62
- {{4|(0<<4)}, { 0, 64}, 1}, //MX5
- {{4|(1<<4)}, { 17, 64}, 1}, //MX10
- {{4|(2<<4)}, { 34, 64}, 1}, //MX15
- {{4|(5<<4)}, {102, 64}, 0}, //MX32
-
- {{4|(10<<4)}, {170, 64}, 1}, //MX49
- {{4|(11<<4)}, {187, 64}, 1}, //MX54
- {{4|(12<<4)}, {204, 64}, 1} //MX58
-};
-
+#ifndef RGB_BACKLIGHT_HS60
+#error RGB_BACKLIGHT_M60_A not defined, recheck config.h
#endif
-
-void bootmagic_lite(void)
-{
- // The lite version of TMK's bootmagic made by Wilba.
- // 100% less potential for accidentally making the
- // keyboard do stupid things.
-
- // We need multiple scans because debouncing can't be turned off.
- matrix_scan();
- wait_ms(10);
- matrix_scan();
-
- // If the Esc and space bar are held down on power up,
- // reset the EEPROM valid state and jump to bootloader.
- // Assumes Esc is at [0,0] and spacebar is at [4,6].
- // This isn't very generalized, but we need something that doesn't
- // rely on user's keymaps in firmware or EEPROM.
- if ( ( matrix_get_row(0) & (1<<0) ) &&
- ( matrix_get_row(4) & (1<<6) ) )
- {
- // Set the TMK/QMK EEPROM state as invalid.
- eeconfig_disable();
- //eeprom_set_valid(false);
- // Jump to bootloader.
- bootloader_jump();
- }
-}
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- bootmagic_lite();
-
- // Please ignore this is for upcoming features
- // If the EEPROM has the magic, the data is good.
- // OK to load from EEPROM.
- /*if (eeprom_is_valid())
- {
- backlight_config_load();
-
- // TODO: do something to "turn on" keymaps in EEPROM?
- }
- else
- {
- // If the EEPROM has not been saved before, or is out of date,
- // save the default values to the EEPROM. Default values
- // come from construction of the zeal_backlight_config instance.
- backlight_config_save();
-
- // Clear the LED colors stored in EEPROM
- for ( int row=0; row < MATRIX_ROWS; row++ )
- {
- HSV hsv;
- for ( int column=0; column < MATRIX_COLS; column++ )
- {
- hsv.h = rand() & 0xFF;
- hsv.s = rand() & 0x7F;
- hsv.v = 255;
- backlight_set_key_color( row, column, hsv );
- }
- }
- #ifdef USE_KEYMAPS_IN_EEPROM
- keymap_default_save();
- #endif
- // Save the magic number last, in case saving was interrupted
- eeprom_set_valid(true);
- }*/
-
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
-
- return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
- //backlight_set_indicator_state(usb_led);
-} \ No newline at end of file
diff --git a/keyboards/hs60/v2/v2.h b/keyboards/hs60/v2/v2.h
index 86aeb68a74..0a35acdea7 100644
--- a/keyboards/hs60/v2/v2.h
+++ b/keyboards/hs60/v2/v2.h
@@ -13,12 +13,13 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef HS60_H
-#define HS60_H
+#pragma once
#define XXX KC_NO
#include "quantum.h"
+#include "../../zeal60/rgb_backlight_keycodes.h"
+#include "../../zeal60/zeal60_keycodes.h"
// This a shortcut to help you visually see your layout.
@@ -63,5 +64,3 @@
{ K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
{ K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, XXX, K4B, K4C, K4D } \
}
-
-#endif \ No newline at end of file
diff --git a/keyboards/idobo/rules.mk b/keyboards/idobo/rules.mk
index 246d152c97..721a2ef9bf 100644
--- a/keyboards/idobo/rules.mk
+++ b/keyboards/idobo/rules.mk
@@ -66,18 +66,19 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+EXTRAFLAGS += -flto # Use link time optimization
-LAYOUTS = ortho_5x15
+LAYOUTS = ortho_5x15
diff --git a/keyboards/infinity60/keymaps/default/keymap.c b/keyboards/infinity60/keymaps/default/keymap.c
index 5d310e3b29..4882469c00 100644
--- a/keyboards/infinity60/keymaps/default/keymap.c
+++ b/keyboards/infinity60/keymaps/default/keymap.c
@@ -42,10 +42,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
};
-const uint16_t fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/keyboards/infinity60/keymaps/depariel/keymap.c b/keyboards/infinity60/keymaps/depariel/keymap.c
index d1a1a04a45..22d74b866b 100755
--- a/keyboards/infinity60/keymaps/depariel/keymap.c
+++ b/keyboards/infinity60/keymaps/depariel/keymap.c
@@ -76,10 +76,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/keyboards/infinity60/keymaps/hasu/keymap.c b/keyboards/infinity60/keymaps/hasu/keymap.c
index ec0d321833..51def26569 100644
--- a/keyboards/infinity60/keymaps/hasu/keymap.c
+++ b/keyboards/infinity60/keymaps/hasu/keymap.c
@@ -105,13 +105,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-/*
- * Fn action definition
- */
-const uint16_t fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/keyboards/iris/iris.h b/keyboards/iris/iris.h
index afad9a0d6d..4212462c15 100644
--- a/keyboards/iris/iris.h
+++ b/keyboards/iris/iris.h
@@ -11,6 +11,7 @@
#endif
#include "quantum.h"
+#include "../../zeal60/zeal60_keycodes.h"
// Used to create a keymap using only KC_ prefixed keys
#define LAYOUT_kc( \
diff --git a/keyboards/iris/keymaps/ave-63/config.h b/keyboards/iris/keymaps/ave-63/config.h
new file mode 100644
index 0000000000..381a494b75
--- /dev/null
+++ b/keyboards/iris/keymaps/ave-63/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+#define PREVENT_STUCK_MODIFIERS
+#define TAPPING_TERM 150
+
+/* Select hand configuration */
+//#define MASTER_LEFT
+#define MASTER_RIGHT
+// #define EE_HANDS
+
+/*#undef RGBLED_NUMvbvbvbvbvbvbvtesting
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 1
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8*/
diff --git a/keyboards/iris/keymaps/ave-63/keymap.c b/keyboards/iris/keymaps/ave-63/keymap.c
new file mode 100644
index 0000000000..3d393a71c7
--- /dev/null
+++ b/keyboards/iris/keymaps/ave-63/keymap.c
@@ -0,0 +1,120 @@
+/* Features of this keymap:
+
+--Lots of functionality on left hand for conjunction with mouse or pen in right hand
+--_COMMAND layer ESDF arrow keys
+--_MEH layer ESDF is super handy for switching tabs (SF) and apps (ED)
+--_MEH layer other keys are linked with my AutoHotKey script
+--macro for handling parentheses is very nice (credit: u/drashna)
+
+Some things are very non-standard, like position of number keys, etc.
+Will require heavy modification for most people.
+*/
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+enum my_layers {
+ _QWERTY,
+ _SYMBOL,
+ _COMMAND,
+ _MEH
+};
+
+enum custom_keycodes {
+ KC_MPRN = SAFE_RANGE,
+ KC_MBRC,
+ KC_MCBR,
+ KC_MABK
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT(
+ KC_ESC, KC_GRV, KC_AT, KC_BSLS, KC_NO, TG(_SYMBOL), KC_NO, KC_LGUI, KC_MBRC, KC_RBRC, KC_NO, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_SYMBOL),
+ KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MEH), KC_QUOT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_NO, KC_LSFT, MO(_COMMAND), KC_ENT, KC_SPC, KC_NO
+),
+[_SYMBOL] = LAYOUT(
+ 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_EQL, KC_9, KC_8, KC_7, KC_PLUS, KC_HASH, KC_UNDS, KC_MCBR, KC_RCBR, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_0, KC_6, KC_5, KC_4, KC_MINS, KC_CIRC, KC_AMPR, KC_MPRN, KC_RPRN, KC_RBRC, KC_TRNS,
+ KC_TRNS, KC_SLSH, KC_3, KC_2, KC_1, KC_ASTR, KC_TRNS, KC_TRNS, KC_EXLM, KC_DLR, KC_MABK, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+[_COMMAND] = LAYOUT(
+ KC_APP, 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, KC_HOME, KC_UP, KC_END, KC_VOLU, KC_SLCK, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+[_MEH] = LAYOUT(
+ LALT(KC_F4), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,
+ KC_TRNS, MEH(KC_Q), LCTL(KC_W), LSFT(KC_TAB), KC_DEL, MEH(KC_T), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, MEH(KC_A),LSFT(LCTL(KC_TAB)),KC_TAB,LCTL(KC_TAB),MEH(KC_G), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,MEH(KC_Z),MEH(KC_X),MEH(KC_C),MEH(KC_V),MEH(KC_B),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
+)
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint16_t code_timer;
+ switch (keycode) {
+ case KC_MCBR:
+ if(record->event.pressed){
+ code_timer= timer_read();
+ SEND_STRING("{");
+ } else {
+ if (timer_elapsed(code_timer) > TAPPING_TERM) {
+ SEND_STRING("}" SS_TAP(X_LEFT));
+ }
+ }
+ return false;
+ break;
+ case KC_MBRC:
+ if(record->event.pressed){
+ code_timer= timer_read();
+ SEND_STRING("[");
+ } else {
+ if (timer_elapsed(code_timer) > TAPPING_TERM) {
+ SEND_STRING("]" SS_TAP(X_LEFT));
+ }
+ }
+ return false;
+ break;
+ case KC_MPRN:
+ if(record->event.pressed){
+ code_timer= timer_read();
+ SEND_STRING("(");
+ } else {
+ if (timer_elapsed(code_timer) > TAPPING_TERM) {
+ SEND_STRING(")" SS_TAP(X_LEFT));
+ }
+ }
+ return false;
+ break;
+ case KC_MABK:
+ if(record->event.pressed){
+ code_timer= timer_read();
+ if (get_mods() & MODS_SHIFT_MASK){
+ SEND_STRING("<");
+ } else {
+ SEND_STRING(",");
+ }
+ } else {
+ if (timer_elapsed(code_timer) > TAPPING_TERM) {
+ if (get_mods() & MODS_SHIFT_MASK){
+ SEND_STRING(">" SS_TAP(X_LEFT));
+ }
+ }
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/iris/keymaps/davidrambo/rules.mk b/keyboards/iris/keymaps/davidrambo/rules.mk
index 0b7e7b9057..1e3473a1af 100644
--- a/keyboards/iris/keymaps/davidrambo/rules.mk
+++ b/keyboards/iris/keymaps/davidrambo/rules.mk
@@ -2,6 +2,3 @@ RGBLIGHT_ENABLE = no
BACKLIGHT_ENABLE = no
TAP_DANCE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/default/keymap.c b/keyboards/iris/keymaps/default/keymap.c
index 4644c3d9b5..f67b71fc1a 100644
--- a/keyboards/iris/keymaps/default/keymap.c
+++ b/keyboards/iris/keymaps/default/keymap.c
@@ -2,21 +2,14 @@
extern keymap_config_t keymap_config;
-#define _QWERTY 0
-#define _LOWER 1
-#define _RAISE 2
-#define _ADJUST 16
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
- RAISE,
- ADJUST,
-};
+#define _MAIN 0
+#define _FN1 1
+#define _FN2 2
+#define _FN3 3
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT(
+ [_MAIN] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
@@ -26,11 +19,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_HOME, KC_END, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
- KC_LGUI, LOWER, KC_ENT, KC_SPC, RAISE, KC_LALT
+ KC_LGUI, FN_MO13, KC_ENT, KC_SPC, FN_MO23, KC_LALT
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
- [_LOWER] = LAYOUT(
+ [_FN1] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
@@ -44,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
- [_RAISE] = LAYOUT(
+ [_FN2] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
@@ -58,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
- [_ADJUST] = LAYOUT(
+ [_FN3] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
@@ -73,42 +66,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
- }
- return true;
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
}
diff --git a/keyboards/iris/keymaps/dvp-zjpxshade/rules.mk b/keyboards/iris/keymaps/dvp-zjpxshade/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/iris/keymaps/dvp-zjpxshade/rules.mk
+++ b/keyboards/iris/keymaps/dvp-zjpxshade/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/hag/rules.mk b/keyboards/iris/keymaps/hag/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/iris/keymaps/hag/rules.mk
+++ b/keyboards/iris/keymaps/hag/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/hexwire/rules.mk b/keyboards/iris/keymaps/hexwire/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/iris/keymaps/hexwire/rules.mk
+++ b/keyboards/iris/keymaps/hexwire/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/impstyle/rules.mk b/keyboards/iris/keymaps/impstyle/rules.mk
index 4db5ef00d2..ef4a383d31 100644
--- a/keyboards/iris/keymaps/impstyle/rules.mk
+++ b/keyboards/iris/keymaps/impstyle/rules.mk
@@ -3,6 +3,3 @@ BACKLIGHT_ENABLE = no
TAP_DANCE_ENABLE = no
MOUSEKEY_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/krusli/rules.mk b/keyboards/iris/keymaps/krusli/rules.mk
index c5e16f1369..b0e37ec2f4 100644
--- a/keyboards/iris/keymaps/krusli/rules.mk
+++ b/keyboards/iris/keymaps/krusli/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = no
BACKLIGHT_ENABLE = no
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/lewisridden/rules.mk b/keyboards/iris/keymaps/lewisridden/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/iris/keymaps/lewisridden/rules.mk
+++ b/keyboards/iris/keymaps/lewisridden/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/mtdjr/rules.mk b/keyboards/iris/keymaps/mtdjr/rules.mk
index a1b884e4de..7f8c630d8b 100644
--- a/keyboards/iris/keymaps/mtdjr/rules.mk
+++ b/keyboards/iris/keymaps/mtdjr/rules.mk
@@ -1,6 +1,4 @@
RGBLIGHT_ENABLE = no
BACKLIGHT_ENABLE = no
#AUDIO_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+
diff --git a/keyboards/iris/keymaps/omgvee/readme.md b/keyboards/iris/keymaps/omgvee/readme.md
index bf9a5acb1f..82a6cd2cf5 100644
--- a/keyboards/iris/keymaps/omgvee/readme.md
+++ b/keyboards/iris/keymaps/omgvee/readme.md
@@ -4,6 +4,10 @@
![My beloved IRIS keeb](https://i.imgur.com/wgsb37e.jpg)
+![My beloved choc IRIS keeb](https://imgur.com/a/NDXqLGb)
+=======
+
+
- mouse keys
- media keys and media controls
- in-switch LED intensity controls (+/-)
@@ -14,4 +18,6 @@
- also have alternates on the same layer, in the form of AWSD, as well as HJKL (keep in mind the order is Left, Up, Down, Right)
- arrow keys on one layer, however with another modifier key, they become left=home, right=end, up=page up, down=page Down
-See keymap.c for layouts \ No newline at end of file
+
+See keymap.c for layouts
+
diff --git a/keyboards/iris/keymaps/rdhaene/rules.mk b/keyboards/iris/keymaps/rdhaene/rules.mk
index d87ba79133..4bfbfb2ae2 100644
--- a/keyboards/iris/keymaps/rdhaene/rules.mk
+++ b/keyboards/iris/keymaps/rdhaene/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = no
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/rs/config.h b/keyboards/iris/keymaps/rs/config.h
new file mode 100644
index 0000000000..7c5b5ca433
--- /dev/null
+++ b/keyboards/iris/keymaps/rs/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define TAPPING_TERM 150
+
+#undef RGBLED_NUM
+#define RGBLED_NUM 6
+#define RGBLIGHT_SLEEP
+#define RGBLIGHT_HUE_STEP 1
+#define RGBLIGHT_SAT_STEP 1
+#define RGBLIGHT_VAL_STEP 1 \ No newline at end of file
diff --git a/keyboards/iris/keymaps/rs/karabiner.json b/keyboards/iris/keymaps/rs/karabiner.json
new file mode 100644
index 0000000000..f5214650ad
--- /dev/null
+++ b/keyboards/iris/keymaps/rs/karabiner.json
@@ -0,0 +1,154 @@
+{
+ "title": "RS",
+ "rules": [{
+ "description": "CapsLock to Escape / Control Mod-Tap",
+ "manipulators": [{
+ "type": "basic",
+ "from": {
+ "key_code": "caps_lock",
+ "modifiers": {
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "left_control"}],
+ "to_if_alone": [{"key_code": "escape"}]
+ }]
+ },
+ {
+ "description": "Right-Shift / Enter Mod-Tap",
+ "manipulators": [{
+ "type": "basic",
+ "from": {
+ "key_code": "right_shift",
+ "modifiers": {
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "right_shift"}],
+ "to_if_alone": [{"key_code": "return_or_enter"}]
+ }]
+ },
+ {
+ "description": "Right-Command / Backspace Mod-Tap",
+ "manipulators": [{
+ "type": "basic",
+ "from": {
+ "key_code": "right_command",
+ "modifiers": {
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "right_command"}],
+ "to_if_alone": [{"key_code": "delete_or_backspace"}]
+ }]
+ },
+ {
+ "description": "Right-Command Accents",
+ "manipulators": [
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "a",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["left_shift", "right_shift"]
+ }
+ },
+ "to": [
+ {"key_code": "grave_accent_and_tilde", "modifiers": ["left_option"]},
+ {"key_code": "a"}
+ ]
+ }]
+ },
+ {
+ "description": "Right Command Navigation",
+ "manipulators": [{
+ "type": "basic",
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "left_arrow"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "down_arrow"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "i",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "up_arrow"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "right_arrow"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "e",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "page_up"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "d",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "page_down"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "s",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "home"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "f",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "end"}]
+ }]
+ }]
+}
diff --git a/keyboards/iris/keymaps/rs/keymap.c b/keyboards/iris/keymaps/rs/keymap.c
new file mode 100644
index 0000000000..43374e59f3
--- /dev/null
+++ b/keyboards/iris/keymaps/rs/keymap.c
@@ -0,0 +1,48 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _HYPER,
+};
+
+#define KC_ KC_TRNS
+
+#define KC_ESCC MT(MOD_LCTL, KC_ESC)
+#define KC_ENTS MT(MOD_LSFT, KC_ENT)
+#define KC_HYPE MO(_HYPER)
+#define KC_RST RESET
+// Brightness
+#define KC_BRUP KC_PAUS
+#define KC_BRDN KC_SLCK
+#define KC_BLTG BL_TOGG
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,EQL,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ESCC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B ,SPC, BSPC, N , M ,COMM,DOT ,SLSH,ENTS,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ LALT,LGUI,SPC, BSPC,HYPE,ENT
+ // `----+----+----' `+---+----+----'
+ ), // |
+ // |
+ [_HYPER] = LAYOUT_kc( // V
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ RST , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 ,LBRC,RBRC, ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , ,PGUP, ,BRUP, , , UP ,LCBR,RCBR,BSLS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , ,HOME,PGDN,END ,BRDN, MINS,LEFT,DOWN,RGHT, ,PIPE,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ , , , , , ,BLTG, VOLU, , , , , , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , VOLD, ,MUTE
+ // `----+----+----' `----+----+----'
+ ),
+};
diff --git a/keyboards/iris/keymaps/rs/readme.md b/keyboards/iris/keymaps/rs/readme.md
new file mode 100644
index 0000000000..bdf44121e4
--- /dev/null
+++ b/keyboards/iris/keymaps/rs/readme.md
@@ -0,0 +1,13 @@
+# Code friendly 60% keymap
+
+I developped this keymap to make a better use of 60% ortho keyboards I use like the preonic of the iris. Instead of trying to mimic the Planck layout like the default preonic keymap, this keymap removes the raise and lower layers and offers a simpler hyper layer concept for a few missing sign keys and cursors / media keys.
+
+The important part for coders is that most important signs needed to code are available at their usual position on a full keyboard, without complex layer gymnastic. Access to [] and {} are available on the hyper layer at their usual emplacement.
+
+The right thumb is used for both backspace and hyper layer switching. On the hyper layer, in addition to some coding signs, you get the cursor keys arranged in cross, just under your right fingers, so you don't have to move your hand when navigating in code or command line. Other hand gets the home/end page up/down in a similar layout.
+
+Because you sometime have to use your internal keyboard when you use a macbook, a karabiner configuration is also provided to get most of the features of this keyboard, including the hyper layer / backspace on right command key etc.
+
+This keymap is also available for other keyboards:
+- [ortho_5x12/rs](../../../../layouts/community/ortho_5x12/rs/keymap.c)
+- [ErgoTravel/rs](../../../ergotravel/keymaps/rs/keymap.c)
diff --git a/keyboards/iris/keymaps/rs/rules.mk b/keyboards/iris/keymaps/rs/rules.mk
new file mode 100644
index 0000000000..bd518d8f27
--- /dev/null
+++ b/keyboards/iris/keymaps/rs/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/iris/keymaps/s1carii/readme.md b/keyboards/iris/keymaps/s1carii/readme.md
index 9b46e86702..6d94b6c877 100644
--- a/keyboards/iris/keymaps/s1carii/readme.md
+++ b/keyboards/iris/keymaps/s1carii/readme.md
@@ -6,4 +6,4 @@ Make example for this keymap (after setting up your build environment):
make iris/rev2:s1carii:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/iris/keymaps/swedish/rules.mk b/keyboards/iris/keymaps/swedish/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/iris/keymaps/swedish/rules.mk
+++ b/keyboards/iris/keymaps/swedish/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/transmogrified/rules.mk b/keyboards/iris/keymaps/transmogrified/rules.mk
index c248822b23..444fa38a93 100644
--- a/keyboards/iris/keymaps/transmogrified/rules.mk
+++ b/keyboards/iris/keymaps/transmogrified/rules.mk
@@ -1,6 +1,3 @@
BACKLIGHT_ENABLE = yes
TAP_DANCE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/keymaps/yanfali/rules.mk b/keyboards/iris/keymaps/yanfali/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/iris/keymaps/yanfali/rules.mk
+++ b/keyboards/iris/keymaps/yanfali/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/iris/rev1/config.h b/keyboards/iris/rev1/config.h
index 3b31ca0d7e..1eddb54b4f 100644
--- a/keyboards/iris/rev1/config.h
+++ b/keyboards/iris/rev1/config.h
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_CONFIG_H
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCEEB
+#define VENDOR_ID 0xCB10
#define PRODUCT_ID 0x1256
#define DEVICE_VER 0x0100
#define MANUFACTURER Keebio
@@ -68,20 +68,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_DI_PIN D3
#define RGBLED_NUM 12 // Number of LEDs
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-// #define NO_DEBUG
-
-/* disable print */
-// #define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*10*6*2)) = (35+480)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 515
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 509 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/iris/rev1/rev1.c b/keyboards/iris/rev1/rev1.c
index fe91fa3ead..9694d122df 100644
--- a/keyboards/iris/rev1/rev1.c
+++ b/keyboards/iris/rev1/rev1.c
@@ -7,20 +7,6 @@ void led_set_kb(uint8_t usb_led) {
}
#endif
-void matrix_init_kb(void) {
-
- // // green led on
- // DDRD |= (1<<5);
- // PORTD &= ~(1<<5);
-
- // // orange led on
- // DDRB |= (1<<0);
- // PORTB &= ~(1<<0);
-
- matrix_init_user();
-};
-
-
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
// swap-hands action needs a matrix to define the swap
diff --git a/keyboards/iris/rev1_led/config.h b/keyboards/iris/rev1_led/config.h
index e9739c0031..4505c22299 100644
--- a/keyboards/iris/rev1_led/config.h
+++ b/keyboards/iris/rev1_led/config.h
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_CONFIG_H
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCEEB
+#define VENDOR_ID 0xCB10
#define PRODUCT_ID 0x1256
#define DEVICE_VER 0x0100
#define MANUFACTURER Keebio
@@ -68,20 +68,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_DI_PIN D3
#define RGBLED_NUM 12 // Number of LEDs
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-// #define NO_DEBUG
-
-/* disable print */
-// #define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*10*6*2)) = (35+480)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 515
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 509 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/iris/rev1_led/rev1_led.c b/keyboards/iris/rev1_led/rev1_led.c
index d08eaea662..af5fc9440b 100644
--- a/keyboards/iris/rev1_led/rev1_led.c
+++ b/keyboards/iris/rev1_led/rev1_led.c
@@ -7,20 +7,6 @@ void led_set_kb(uint8_t usb_led) {
}
#endif
-void matrix_init_kb(void) {
-
- // // green led on
- // DDRD |= (1<<5);
- // PORTD &= ~(1<<5);
-
- // // orange led on
- // DDRB |= (1<<0);
- // PORTB &= ~(1<<0);
-
- matrix_init_user();
-};
-
-
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
// swap-hands action needs a matrix to define the swap
diff --git a/keyboards/iris/rev2/config.h b/keyboards/iris/rev2/config.h
index d43d4b1c64..e0465ca8a4 100644
--- a/keyboards/iris/rev2/config.h
+++ b/keyboards/iris/rev2/config.h
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_CONFIG_H
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCEEB
+#define VENDOR_ID 0xCB10
#define PRODUCT_ID 0x1256
#define DEVICE_VER 0x0200
#define MANUFACTURER Keebio
@@ -68,20 +68,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_DI_PIN D3
#define RGBLED_NUM 12 // Number of LEDs
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-// #define NO_DEBUG
-
-/* disable print */
-// #define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*10*6*2)) = (35+480)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 515
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 509 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/iris/rev2/rev2.c b/keyboards/iris/rev2/rev2.c
index 133fce66ad..8575243f0d 100644
--- a/keyboards/iris/rev2/rev2.c
+++ b/keyboards/iris/rev2/rev2.c
@@ -7,20 +7,6 @@ void led_set_kb(uint8_t usb_led) {
}
#endif
-void matrix_init_kb(void) {
-
- // // green led on
- // DDRD |= (1<<5);
- // PORTD &= ~(1<<5);
-
- // // orange led on
- // DDRB |= (1<<0);
- // PORTB &= ~(1<<0);
-
- matrix_init_user();
-};
-
-
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
// swap-hands action needs a matrix to define the swap
diff --git a/keyboards/iris/rev3/config.h b/keyboards/iris/rev3/config.h
index 5642512f39..ad5937dc15 100644
--- a/keyboards/iris/rev3/config.h
+++ b/keyboards/iris/rev3/config.h
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_CONFIG_H
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCEEB
+#define VENDOR_ID 0xCB10
#define PRODUCT_ID 0x1256
#define DEVICE_VER 0x0300
#define MANUFACTURER Keebio
@@ -35,6 +35,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// wiring of each half
#define MATRIX_ROW_PINS { D2, D3, D5, D7, D6 }
#define MATRIX_COL_PINS { F1, F4, F5, F6, D4, B4 }
+#define SPLIT_HAND_PIN F0
+#define QMK_ESC_OUTPUT D2
+#define QMK_ESC_INPUT F1
+#define QMK_LED B0
+#define QMK_SPEAKER C6
+
+#define NUMBER_OF_ENCODERS 1
+#define ENCODERS_PAD_A { B5 }
+#define ENCODERS_PAD_B { B7 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
@@ -68,20 +77,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_DI_PIN F7
#define RGBLED_NUM 12 // Number of LEDs
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-// #define NO_DEBUG
-
-/* disable print */
-// #define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*10*6*2)) = (35+480)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 515
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 509 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/iris/rev3/rev3.c b/keyboards/iris/rev3/rev3.c
index d8272db0f5..7e49330c1d 100644
--- a/keyboards/iris/rev3/rev3.c
+++ b/keyboards/iris/rev3/rev3.c
@@ -7,20 +7,6 @@ void led_set_kb(uint8_t usb_led) {
}
#endif
-void matrix_init_kb(void) {
-
- // // green led on
- // DDRD |= (1<<5);
- // PORTD &= ~(1<<5);
-
- // // orange led on
- // DDRB |= (1<<0);
- // PORTB &= ~(1<<0);
-
- matrix_init_user();
-};
-
-
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
// swap-hands action needs a matrix to define the swap
@@ -39,4 +25,3 @@ const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
};
#endif
-
diff --git a/keyboards/iris/rev3/rev3.h b/keyboards/iris/rev3/rev3.h
index d44cef9a6b..da9da84403 100644
--- a/keyboards/iris/rev3/rev3.h
+++ b/keyboards/iris/rev3/rev3.h
@@ -12,8 +12,6 @@
#endif
#endif
-//void promicro_bootloader_jmp(bool program);
-
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
diff --git a/keyboards/iris/rev3/rules.mk b/keyboards/iris/rev3/rules.mk
index d7463419b4..d7e0da9367 100644
--- a/keyboards/iris/rev3/rules.mk
+++ b/keyboards/iris/rev3/rules.mk
@@ -1,2 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
+ENCODER_ENABLE = yes
diff --git a/keyboards/iris/rules.mk b/keyboards/iris/rules.mk
index e93d7dae80..69bc62f876 100644
--- a/keyboards/iris/rules.mk
+++ b/keyboards/iris/rules.mk
@@ -1,36 +1,6 @@
-# MCU name
MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Bootloader
@@ -50,8 +20,9 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
+
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
@@ -61,10 +32,15 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
SPLIT_KEYBOARD = yes
DEFAULT_FOLDER = iris/rev2
+
+# VIA Support - Comment these 3 lines out to disable
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+SRC += keyboards/wilba_tech/wt_main.c
diff --git a/keyboards/jc65/v32a/readme.md b/keyboards/jc65/v32a/readme.md
index b4d4f7e504..5027f83613 100644
--- a/keyboards/jc65/v32a/readme.md
+++ b/keyboards/jc65/v32a/readme.md
@@ -29,4 +29,4 @@ Flashing on Windows can be accomplished by downloading [HIDBootFlash](http://vus
To put the PS2AVRGB board into reset, hold down the left control key while plugging in the keyboard.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk b/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
index 85b2b41a6b..4086c15d4f 100644
--- a/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
+++ b/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
@@ -22,3 +22,4 @@ FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By defaul
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
KEY_LOCK_ENABLE = no # This enables key lock(+260)
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
+
diff --git a/keyboards/jc65/v32u4/readme.md b/keyboards/jc65/v32u4/readme.md
index 396c19e8db..61ac70e28e 100644
--- a/keyboards/jc65/v32u4/readme.md
+++ b/keyboards/jc65/v32u4/readme.md
@@ -19,4 +19,4 @@ Or to make and flash:
make jc65/v32u4:default:dfu
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/jd40/keymaps/vanagon/rules.mk b/keyboards/jd40/keymaps/vanagon/rules.mk
index 63aac4e597..e69de29bb2 100644
--- a/keyboards/jd40/keymaps/vanagon/rules.mk
+++ b/keyboards/jd40/keymaps/vanagon/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/jd45/keymaps/mjt6u/rules.mk b/keyboards/jd45/keymaps/mjt6u/rules.mk
index 1df8b9754b..2cf0221ed7 100644
--- a/keyboards/jd45/keymaps/mjt6u/rules.mk
+++ b/keyboards/jd45/keymaps/mjt6u/rules.mk
@@ -18,6 +18,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
DEBUG_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/jj40/README.md b/keyboards/jj40/README.md
index 39e871d873..26d551cf72 100644
--- a/keyboards/jj40/README.md
+++ b/keyboards/jj40/README.md
@@ -12,7 +12,7 @@ Make example for this keyboard (after setting up your build environment):
make jj40:default:program
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Note that this is a complete replacement for the firmware, so you won't be
using Bootmapper Client to change any keyboard settings, since not all the
diff --git a/keyboards/jj40/keymaps/ajp10304/rules.mk b/keyboards/jj40/keymaps/ajp10304/rules.mk
index dc6ab13e89..4dee01cd5b 100644
--- a/keyboards/jj40/keymaps/ajp10304/rules.mk
+++ b/keyboards/jj40/keymaps/ajp10304/rules.mk
@@ -1,6 +1,3 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
AUDIO_ENABLE = no
MOUSEKEY_ENABLE = yes
+
diff --git a/keyboards/jj40/keymaps/fun40/rules.mk b/keyboards/jj40/keymaps/fun40/rules.mk
index 6fe3b05154..92f168a16d 100644
--- a/keyboards/jj40/keymaps/fun40/rules.mk
+++ b/keyboards/jj40/keymaps/fun40/rules.mk
@@ -19,6 +19,3 @@ DISABLE_WS2812 = yes
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/jj50/README.md b/keyboards/jj50/README.md
index 2f04f036be..397889535e 100644
--- a/keyboards/jj50/README.md
+++ b/keyboards/jj50/README.md
@@ -25,7 +25,7 @@ $ make jj50:default:program
```
It should detect the keyboard and set it to bootloader mode automatically, prior to flashing firmware.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Note that this is a complete replacement for the firmware, so you won't be
using Bootmapper Client to change any keyboard settings, since not all the
diff --git a/keyboards/jj50/rules.mk b/keyboards/jj50/rules.mk
index 4cc9018593..1a18ec4fe4 100644
--- a/keyboards/jj50/rules.mk
+++ b/keyboards/jj50/rules.mk
@@ -57,10 +57,6 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
CUSTOM_MATRIX = yes
SRC = matrix.c i2c.c backlight.c
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# programming options
PROGRAM_CMD = ./keyboards/ps2avrGB/program $(TARGET).hex
diff --git a/keyboards/jm60/readme.md b/keyboards/jm60/readme.md
index b513a2c4c0..51473fc090 100644
--- a/keyboards/jm60/readme.md
+++ b/keyboards/jm60/readme.md
@@ -11,7 +11,7 @@ Make example for this keyboard (after setting up your build environment):
make jm60:default:bin
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Flashing Instructions
diff --git a/keyboards/k_type/keymaps/belak/keymap.c b/keyboards/k_type/keymaps/belak/keymap.c
index 6bddeb13e1..1f59630b1e 100644
--- a/keyboards/k_type/keymaps/belak/keymap.c
+++ b/keyboards/k_type/keymaps/belak/keymap.c
@@ -22,10 +22,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
};
-const uint16_t fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/keyboards/k_type/keymaps/default/keymap.c b/keyboards/k_type/keymaps/default/keymap.c
index 90b3ac7686..29d93c1072 100644
--- a/keyboards/k_type/keymaps/default/keymap.c
+++ b/keyboards/k_type/keymaps/default/keymap.c
@@ -10,10 +10,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
};
-const uint16_t fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/keyboards/k_type/readme.md b/keyboards/k_type/readme.md
index ad4dd8ad84..1118f8655e 100644
--- a/keyboards/k_type/readme.md
+++ b/keyboards/k_type/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make k_type:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/katana60/keymaps/colemak/keymap.c b/keyboards/katana60/keymaps/colemak/keymap.c
index 9a1af8d68e..63768f9372 100644
--- a/keyboards/katana60/keymaps/colemak/keymap.c
+++ b/keyboards/katana60/keymaps/colemak/keymap.c
@@ -67,12 +67,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(CURS, KC_BSPC),
- [1] = ACTION_LAYER_TAP_KEY(SYMB, KC_SPACE),
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/katana60/keymaps/default/keymap.c b/keyboards/katana60/keymaps/default/keymap.c
index abc018952a..d4e77e26da 100644
--- a/keyboards/katana60/keymaps/default/keymap.c
+++ b/keyboards/katana60/keymaps/default/keymap.c
@@ -67,12 +67,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(CURS, KC_BSPC),
- [1] = ACTION_LAYER_TAP_KEY(SYMB, KC_SPACE),
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/katana60/readme.md b/keyboards/katana60/readme.md
index 918c9b9972..5e1c7d3906 100644
--- a/keyboards/katana60/readme.md
+++ b/keyboards/katana60/readme.md
@@ -12,6 +12,6 @@ Make example for this keyboard (after setting up your build environment):
make katana60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
There is also ongoing discussion for the extend layer, at the [Colemak Forum](https://forum.colemak.com/topic/2327-developing-an-extend-layer-for-the-katana60/) \ No newline at end of file
diff --git a/keyboards/kbd66/keymaps/ansi/keymap.c b/keyboards/kbd66/keymaps/ansi/keymap.c
index f2275d9f63..d73e5aec8a 100644
--- a/keyboards/kbd66/keymaps/ansi/keymap.c
+++ b/keyboards/kbd66/keymaps/ansi/keymap.c
@@ -66,10 +66,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kbd66/keymaps/default/keymap.c b/keyboards/kbd66/keymaps/default/keymap.c
index 6a4c0b57f6..a969d65101 100644
--- a/keyboards/kbd66/keymaps/default/keymap.c
+++ b/keyboards/kbd66/keymaps/default/keymap.c
@@ -66,10 +66,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kbd66/keymaps/iso/keymap.c b/keyboards/kbd66/keymaps/iso/keymap.c
index 4e30409849..5ee64e3522 100644
--- a/keyboards/kbd66/keymaps/iso/keymap.c
+++ b/keyboards/kbd66/keymaps/iso/keymap.c
@@ -66,10 +66,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kbd66/readme.md b/keyboards/kbd66/readme.md
index 71fe1f2e30..2ac5555711 100644
--- a/keyboards/kbd66/readme.md
+++ b/keyboards/kbd66/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make kbd66:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/kbd67/hotswap/config.h b/keyboards/kbd67/hotswap/config.h
new file mode 100644
index 0000000000..f952235adc
--- /dev/null
+++ b/keyboards/kbd67/hotswap/config.h
@@ -0,0 +1,245 @@
+/*
+Copyright 2019 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KBDFans
+#define PRODUCT KBD67 Hotswap
+#define DESCRIPTION A custom 65% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B3, B2, B1, B0, D4 }
+#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, E6, D1, D0, D2, D3, D5, D6, D7, C6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN B4
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 8
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+ // #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/kbd67/hotswap/hotswap.c b/keyboards/kbd67/hotswap/hotswap.c
new file mode 100644
index 0000000000..e6999f6af2
--- /dev/null
+++ b/keyboards/kbd67/hotswap/hotswap.c
@@ -0,0 +1,43 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "hotswap.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/kbd67/hotswap/hotswap.h b/keyboards/kbd67/hotswap/hotswap.h
new file mode 100644
index 0000000000..57220050b6
--- /dev/null
+++ b/keyboards/kbd67/hotswap/hotswap.h
@@ -0,0 +1,43 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2C, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3D, K3E, \
+ K40, K41, K42, K45, K49, K4A, K4B, K4D, K4E \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E}, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E}, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E}, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, KC_NO, K3C, K3D, K3E}, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, KC_NO, K4D, K4E}, \
+}
+
diff --git a/keyboards/kbd67/hotswap/info.json b/keyboards/kbd67/hotswap/info.json
new file mode 100644
index 0000000000..9f23a5f348
--- /dev/null
+++ b/keyboards/kbd67/hotswap/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "kbd67 hotswap",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/kbd67/hotswap/keymaps/default/config.h b/keyboards/kbd67/hotswap/keymaps/default/config.h
new file mode 100644
index 0000000000..26c6d6ade1
--- /dev/null
+++ b/keyboards/kbd67/hotswap/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/kbd67/hotswap/keymaps/default/keymap.c b/keyboards/kbd67/hotswap/keymaps/default/keymap.c
new file mode 100644
index 0000000000..5369630116
--- /dev/null
+++ b/keyboards/kbd67/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,72 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT(
+ 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_DEL, KC_HOME, \
+ 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, KC_PGUP, \
+ 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, KC_PGDN, \
+ 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_END, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT(
+ 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, \
+ 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, \
+ 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kbd67/hotswap/keymaps/default/readme.md b/keyboards/kbd67/hotswap/keymaps/default/readme.md
new file mode 100644
index 0000000000..7e681294f2
--- /dev/null
+++ b/keyboards/kbd67/hotswap/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for hotswap
diff --git a/keyboards/kbd67/hotswap/keymaps/zunger/config.h b/keyboards/kbd67/hotswap/keymaps/zunger/config.h
new file mode 100644
index 0000000000..cc06440e0d
--- /dev/null
+++ b/keyboards/kbd67/hotswap/keymaps/zunger/config.h
@@ -0,0 +1,22 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// Enable cmd-option-escape on mac.
+#define GRAVE_ESC_ALT_OVERRIDE
+
+// place overrides here
diff --git a/keyboards/kbd67/hotswap/keymaps/zunger/keymap.c b/keyboards/kbd67/hotswap/keymaps/zunger/keymap.c
new file mode 100644
index 0000000000..0d542bf843
--- /dev/null
+++ b/keyboards/kbd67/hotswap/keymaps/zunger/keymap.c
@@ -0,0 +1,176 @@
+/* Copyright 2019 Yonatan Zunger
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ // Use this instead of RALT, so we can use it to switch layers but not trigger other alt-related
+ // behavior (like GRAVE_ESC_ALT_OVERRIDE).
+ MAGIC = SAFE_RANGE,
+};
+
+enum layers_keymap {
+ _QWERTY = 0,
+ _FUNCTION,
+
+ _MAGIC,
+ _SHIFTMAGIC,
+};
+
+// This is so that H(xxxx) has the same width as _______, which makes the grids more legible.
+#define H(x) UC(0x##x)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Del|Brk|Home|
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |End |
+ * |----------------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Alt |Win | Space |Alt| FN |||||Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT(
+ KC_GESC, 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_BRK, KC_HOME, \
+ 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_END, \
+ 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, KC_PGUP, \
+ 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, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MAGIC, MO(_FUNCTION), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap Fn Layer. Blank keys are deliberately NO, not TRNS.
+ * ,----------------------------------------------------------------.
+ * |Rst |F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|F13|PSc|PAUS|
+ * |----------------------------------------------------------------|
+ * |Debug| | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * |Ctrl | |Vo+| | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * |Shift |REV|Vo-|FWD| | | | | | | | McL|MsU|McR |
+ * |----------------------------------------------------------------|
+ * |Ctrl|Alt |Win | |Alt| |||||MsL|MsD|MsR |
+ * `----------------------------------------------------------------'
+ */
+[_FUNCTION] = LAYOUT(
+ 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_PSCR, KC_MPLY, \
+ DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, \
+ _______, KC_NO, KC__VOLUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ _______, KC_MRWD, KC__VOLDOWN, KC_MFFD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, \
+ _______, _______, _______, KC_NO, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R),
+
+ /* Mathematical lower layer. Blank keys are TRNS.
+ * Note that escape turns into grave here. This doesn't just generalize GRAVE_ESC; it means that
+ * magic+esc is a way to create backticks without a dedicated key.
+ * ,----------------------------------------------------------------.
+ * | ` | ¹| ² | ³ | ⁴ | ⁵ | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | ⁻ | ⁺ | ⊕ | ≠ | √ |
+ * |----------------------------------------------------------------|
+ * | | ± | ω | ε | ρ | τ | θ | υ | ι | ο | π | ∃ | ∀ | ℚ | ℝ |
+ * |----------------------------------------------------------------|
+ * | | α | σ | δ | φ | γ | η | ∅ | κ | λ | ∨ | ∧ | | ℕ |
+ * |----------------------------------------------------------------|
+ * | | ζ | ξ | χ | ψ | β | ν | μ | ≲ | ≳ | ∈ | | ↑ | ↔ |
+ * |----------------------------------------------------------------|
+ * | | | | | | ||||| ← | ↓ | → |
+ * `----------------------------------------------------------------'
+ */
+[_MAGIC] = LAYOUT(
+ KC_GRV, H(00b9), H(00b2), H(00b3), H(2074), H(2075), H(2076), H(2077), H(2078), H(2079), H(2070), H(207b), H(207a), H(2295), H(2260), H(221a), \
+ _______, H(00b1), H(03c9), H(03b5), H(03c1), H(03c4), H(03b8), H(03c5), H(03b9), H(03bf), H(03c0), H(2203), H(2200), H(211a), H(211d), \
+ _______, H(03b1), H(03c3), H(03b4), H(03c6), H(03b3), H(03b7), H(2205), H(03ba), H(03bb), H(2228), H(2227), _______, H(2115), \
+ _______, H(03b6), H(03be), H(03c7), H(03c8), H(03b2), H(03bd), H(03bc), H(2272), H(2273), H(2208), _______, H(2191), H(2194), \
+ _______, _______, _______, _______, _______, _______, H(2190), H(2193), H(2192)),
+
+ /* Mathematical upper layer. Blank keys are TRNS.
+ * ,----------------------------------------------------------------.
+ * | ` | ₁| ₂ | ₃ | ₄ | ₅ | ₆ | ₇ | ₈ | ₉ | ₀ | ₋ | ₊ | ⊗ | ≈ | ∂ |
+ * |----------------------------------------------------------------|
+ * | | ∓ | Ω | Ε | Ρ | Τ | Θ | Υ | Ι | Ο | Π | ∄ | ∞ | ⊙ | ℂ |
+ * |----------------------------------------------------------------|
+ * | | Α | Σ | Δ | Φ | Γ | Η | ¬ | Κ | Λ | ∪ | ∩ | | ℤ |
+ * |----------------------------------------------------------------|
+ * | | Ζ | Ξ | Χ | Ψ | Β | Ν | Μ | ⊆ | ⊇ | ∉ | | ⇑ | ⇔ |
+ * |----------------------------------------------------------------|
+ * | | | | | | ||||| ⇐ | ⇓ | ⇒ |
+ * `----------------------------------------------------------------'
+ */
+[_SHIFTMAGIC] = LAYOUT(
+ KC_GRV, H(2081), H(2082), H(2083), H(2084), H(2085), H(2086), H(2087), H(2088), H(2089), H(2080), H(208b), H(208a), H(2297), H(2248), H(2202), \
+ _______, H(2213), H(03a9), H(0395), H(03a1), H(03a4), H(0398), H(03a5), H(0399), H(039f), H(03a0), H(2204), H(221e), H(2299), H(2102), \
+ _______, H(0391), H(03a3), H(0394), H(03a6), H(0393), H(0397), H(00ac), H(039a), H(039b), H(222a), H(2229), _______, H(2124), \
+ _______, H(0396), H(039e), H(03a7), H(03a8), H(0392), H(039d), H(039c), H(2286), H(2287), H(2209), _______, H(21d1), H(21d4), \
+ _______, _______, _______, _______, _______, _______, H(21d0), H(21d3), H(21d2)),
+};
+
+// Layer bitfields.
+#define MAGIC_LAYER (1UL << _MAGIC)
+#define SHIFTMAGIC_LAYER (1UL << _SHIFTMAGIC)
+// The layers we don't touch.
+#define LAYER_MASK ~(MAGIC_LAYER|SHIFTMAGIC_LAYER)
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // Activate the appropriate magic layer:
+ // User is holding AltGr+Shift => _SHIFTMAGIC
+ // User is holding AltGr => _MAGIC
+ // Not holding AltGr => None
+ // We do this the efficient way, by grabbing the non-magic bits from the current layer bitmap,
+ // setting the appropriate magic or shiftmagic bit, and doing an absolute layer set. (Layer
+ // sets are nontrivial, so we don't want to do extras!)
+
+ // We track shift and AltGr state on our own, because this function is called before get_mods is
+ // updated!
+ static bool shifted = false;
+ static bool magic = false;
+
+ if (keycode == KC_LSHIFT || keycode == KC_RSHIFT) {
+ shifted = record->event.pressed;
+ } else if (keycode == MAGIC) {
+ magic = record->event.pressed;
+ } else if (keycode == RESET) {
+ // Safe reset: Only actually let this keycode through if shift is held as well. Since there's no
+ // right-shift in the function layer, this means that reset is Fn+LShift+Esc, something you're
+ // not likely to hit by accident. (Especially since AltGr+Esc is backtick!)
+ return (record->event.pressed && shifted);
+ }
+
+ // Update the layer.
+ uint32_t new_layer_state = layer_state & LAYER_MASK;
+ if (magic) {
+ new_layer_state |= (shifted ? SHIFTMAGIC_LAYER : MAGIC_LAYER);
+ }
+ if (layer_state != new_layer_state) {
+ layer_state_set(new_layer_state);
+ }
+
+ return true;
+}
+
+void eeconfig_init_user(void) {
+ set_unicode_input_mode(UC_OSX);
+}
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kbd67/hotswap/keymaps/zunger/readme.md b/keyboards/kbd67/hotswap/keymaps/zunger/readme.md
new file mode 100644
index 0000000000..923a4824a5
--- /dev/null
+++ b/keyboards/kbd67/hotswap/keymaps/zunger/readme.md
@@ -0,0 +1,27 @@
+* Custom keymap for kbd67, for those who need to both code and type math.
+* Author: Yonatan Zunger (zunger@gmail.com)
+
+This keymap is presently rather Mac-centric, as it uses Mac media keys in its function layer and the
+OS X Unicode input mode for the "magic" layers.
+
+*Layer 0 (Base QWERTY):* The layout has a few minor quirks: grave escape, Home/End/PgUp/PgDn in the
+right-hand column (rather than the more common Home/PgUp/PgDn/End), and a pause key between
+backspace and home -- this being something I use for screen lock, a necessity when one works with
+and sits next to security engineers. (Using a heavier switch on the pause key greatly reduces the
+risk of accidental triggering) In OS X style, alt and win are swapped on the left-hand side.
+
+The right-hand alt and gui keys take on a different meaning: right-alt lives up to its old name of
+AltGr by invoking Greek (the "magic" layers, 2 and 3), and right-gui invokes the function layer.
+
+*Layer 1 (Functions):* This layer deliberately sets KC_NO for the keys it doesn't use. I realize
+this isn't common, but I like to keep my functions quite distinct from all other layers.
+
+RESET can be accessed at Fn+Left Shift+Escape.
+
+*Layers 2 and 3*: These are invoked by the "magic" key (AltGr) and by magic+shift. The
+letters mostly produce Greek; the numbers, superscripts (magic) and subscripts (magic+shift); and
+the various other keys, mathematical symbols. There unfortunately aren't nearly enough keys for all
+the symbols I'd like, so magic+alt and magic+alt+shift may end up existing as well, giving this a
+proper Space Cadet effect; but that said, it's going to be hard to remember where all these symbols
+are without some extremely custom keycaps. In the limit of arbitrarily complex layers, the keyboard
+will probably start running LISP and turn into EMACS.
diff --git a/keyboards/kbd67/hotswap/keymaps/zunger/rules.mk b/keyboards/kbd67/hotswap/keymaps/zunger/rules.mk
new file mode 100644
index 0000000000..a61cfa33fa
--- /dev/null
+++ b/keyboards/kbd67/hotswap/keymaps/zunger/rules.mk
@@ -0,0 +1,2 @@
+# You need Unicode for this map.
+UNICODE_ENABLE = yes # Unicode
diff --git a/keyboards/kbd67/hotswap/readme.md b/keyboards/kbd67/hotswap/readme.md
new file mode 100644
index 0000000000..6b40705932
--- /dev/null
+++ b/keyboards/kbd67/hotswap/readme.md
@@ -0,0 +1,13 @@
+# hotswap
+
+A 65% hot swap board with blocker and USB Type C port.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: KBD67 Hotswap
+Hardware Availability: [KBDFans](https://kbdfans.cn/products/coming-soon-kbd67-mechanical-keyboard-diy-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbd67/hotswap:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/kbd67/rules.mk b/keyboards/kbd67/hotswap/rules.mk
index 9d25d7b21a..f8667d280f 100644
--- a/keyboards/kbd67/rules.mk
+++ b/keyboards/kbd67/hotswap/rules.mk
@@ -61,7 +61,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
diff --git a/keyboards/kbd67/readme.md b/keyboards/kbd67/readme.md
index 734b1a63ae..cdaf7e922d 100644
--- a/keyboards/kbd67/readme.md
+++ b/keyboards/kbd67/readme.md
@@ -1,15 +1,15 @@
-# kbd67
+# KBD67
-![kbd67](imgur.com image replace me!)
-
-65% keyboard with blocker.
+A 65% keyboard sold in two variants. Rev1 was a typical keyboard that had to be soldered together, supporting multiple layouts.
+Months later, a new version with hotswap was sold. **Firmware files from one, will not work on the other.** Please use the `.hex` appropriate for your board.
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: KBD67 PCB
-Hardware Availability: [KBDFans](https://kbdfans.cn/products/coming-soon-kbd67-mechanical-keyboard-diy-kit)
+Hardware Supported: KBD67
+Hardware Availability: KBDFans
Make example for this keyboard (after setting up your build environment):
- make kbd67:default
+ make kbd67/rev1:default
+ make kbd67/hotswap:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/kbd67/config.h b/keyboards/kbd67/rev1/config.h
index 2e3cf85c38..2e3cf85c38 100644
--- a/keyboards/kbd67/config.h
+++ b/keyboards/kbd67/rev1/config.h
diff --git a/keyboards/kbd67/info.json b/keyboards/kbd67/rev1/info.json
index 70a926a7f1..70a926a7f1 100644
--- a/keyboards/kbd67/info.json
+++ b/keyboards/kbd67/rev1/info.json
diff --git a/keyboards/kbd67/keymaps/default/config.h b/keyboards/kbd67/rev1/keymaps/default/config.h
index a3ed4f762a..a3ed4f762a 100644
--- a/keyboards/kbd67/keymaps/default/config.h
+++ b/keyboards/kbd67/rev1/keymaps/default/config.h
diff --git a/keyboards/kbd67/keymaps/default/keymap.c b/keyboards/kbd67/rev1/keymaps/default/keymap.c
index 89fa9a534d..89fa9a534d 100644
--- a/keyboards/kbd67/keymaps/default/keymap.c
+++ b/keyboards/kbd67/rev1/keymaps/default/keymap.c
diff --git a/keyboards/kbd67/keymaps/default/readme.md b/keyboards/kbd67/rev1/keymaps/default/readme.md
index 2cb43c5e1a..2cb43c5e1a 100644
--- a/keyboards/kbd67/keymaps/default/readme.md
+++ b/keyboards/kbd67/rev1/keymaps/default/readme.md
diff --git a/keyboards/kbd67/rev1/readme.md b/keyboards/kbd67/rev1/readme.md
new file mode 100644
index 0000000000..ab5209646f
--- /dev/null
+++ b/keyboards/kbd67/rev1/readme.md
@@ -0,0 +1,13 @@
+# kbd67
+
+65% keyboard with blocker.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: KBD67 PCB
+Hardware Availability: [KBDFans](https://kbdfans.cn/products/coming-soon-kbd67-mechanical-keyboard-diy-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbd67/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/kbd67/kbd67.c b/keyboards/kbd67/rev1/rev1.c
index 5e0369673b..94cb9e553b 100644
--- a/keyboards/kbd67/kbd67.c
+++ b/keyboards/kbd67/rev1/rev1.c
@@ -13,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "kbd67.h"
+#include "rev1.h"
void matrix_init_kb(void) {
// put your keyboard start-up code here
diff --git a/keyboards/kbd67/kbd67.h b/keyboards/kbd67/rev1/rev1.h
index 4a98c66f7a..4ee136393a 100644
--- a/keyboards/kbd67/kbd67.h
+++ b/keyboards/kbd67/rev1/rev1.h
@@ -13,8 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KBD67_H
-#define KBD67_H
+#ifndef REV1_H
+#define REV1_H
#include "quantum.h"
diff --git a/keyboards/kbd67/rev1/rules.mk b/keyboards/kbd67/rev1/rules.mk
new file mode 100644
index 0000000000..0d7c14ad45
--- /dev/null
+++ b/keyboards/kbd67/rev1/rules.mk
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/kbd6x/keymaps/konstantin/config.h b/keyboards/kbd6x/keymaps/konstantin/config.h
new file mode 100644
index 0000000000..4b511eb848
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/konstantin/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define LAYER_FN
diff --git a/keyboards/kbd6x/keymaps/konstantin/keymap.c b/keyboards/kbd6x/keymaps/konstantin/keymap.c
new file mode 100644
index 0000000000..b400b06810
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/konstantin/keymap.c
@@ -0,0 +1,92 @@
+#include QMK_KEYBOARD_H
+#include "konstantin.h"
+
+enum keycodes_keymap {
+ RCTRL = RANGE_KEYMAP,
+};
+
+enum layers_keymap {
+ L_RCTRL = L_RANGE_KEYMAP,
+};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RCTRL:
+ if (record->event.pressed) {
+ layer_on(L_RCTRL);
+ register_code(KC_RCTRL);
+ } else {
+ layer_off(L_RCTRL);
+ unregister_code(KC_RCTRL);
+ }
+ return false;
+
+ default:
+ return true;
+ }
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │LCtCps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │LShiftFn│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│FnL│
+ * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘
+ * │LGu│LAlt │ Space │RAlGu│RCt│
+ * └───┴─────┴───────────────────────────┴─────┴───┘
+ */
+ [L_BASE] = LAYOUT(
+ 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,
+ 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,
+ LCT_CPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ LSFT_FN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_FNLK,
+ XXXXXXX, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, RCTRL, XXXXXXX
+ ),
+
+ /* Function layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Ins│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ │Hom│ ↑ │End│PgU│ │ │ │ │M1 │M↑ │M2 │M3 │ Del │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ ← │ ↓ │ → │PgD│ │ │ │MW↑│M← │M↓ │M→ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │ │Mut│VoD│VoU│Ply│Prv│Nxt│MW←│MW→│M4 │M5 │ │ │
+ * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘
+ * │ │ │ MW↓ │ │ │
+ * └───┴─────┴───────────────────────────┴─────┴───┘
+ */
+ [L_FN] = LAYOUT(
+ _______, 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_INS,
+ _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_DEL,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, _______,
+ _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_WH_L, KC_WH_R, KC_BTN4, KC_BTN5, _______, _______,
+ XXXXXXX, _______, _______, KC_WH_D, _______, _______, XXXXXXX
+ ),
+
+ /* RCtrl layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ │Top│Mv↑│Btm│PrT│ │ │ │ │ │ │ │ │Clear│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │Mv←│Mv↓│Mv→│NxT│ │ │ │ │ │ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘
+ * │Dst│Dstp←│ │Dstp→│ │
+ * └───┴─────┴───────────────────────────┴─────┴───┘
+ */
+ [L_RCTRL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, TOP, MV_UP, BOTTOM, PRV_TAB, _______, _______, _______, _______, _______, _______, _______, _______, CLEAR,
+ _______, MV_LEFT, MV_DOWN, MV_RGHT, NXT_TAB, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ XXXXXXX, DESKTOP, DSKTP_L, _______, DSKTP_R, _______, XXXXXXX
+ ),
+};
diff --git a/keyboards/kbd6x/keymaps/konstantin/rules.mk b/keyboards/kbd6x/keymaps/konstantin/rules.mk
new file mode 100644
index 0000000000..a45a631dc0
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/konstantin/rules.mk
@@ -0,0 +1,2 @@
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/kbd6x/readme.md b/keyboards/kbd6x/readme.md
index b50646ace1..0e8e865621 100644
--- a/keyboards/kbd6x/readme.md
+++ b/keyboards/kbd6x/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make kbd6x:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/kbd75/keymaps/edulpn/README.md b/keyboards/kbd75/keymaps/edulpn/README.md
new file mode 100644
index 0000000000..57989ff9b6
--- /dev/null
+++ b/keyboards/kbd75/keymaps/edulpn/README.md
@@ -0,0 +1,13 @@
+# Edulpn Keymap for the KBD75 PCB
+
+## Additional Notes
+75% Keymap for KBD75 with default ANSI layout + default layer switching for Windows and Mac "modes" + custom Fn layers for each mode.
+
+### Windows Mode
+![Edulpn Keymap for the KBD75 PCB Windows Mode](https://imgur.com/doI46vP.png)
+
+### Mac Mode
+![Edulpn Keymap for the KBD75 PCB Mac Mode](https://i.imgur.com/t7oTjjc.png)
+
+## Build
+To build the default keymap, simply run `make kbd75/rev2:edulpn`.
diff --git a/keyboards/kbd75/keymaps/edulpn/keymap.c b/keyboards/kbd75/keymaps/edulpn/keymap.c
new file mode 100644
index 0000000000..78a501ec4e
--- /dev/null
+++ b/keyboards/kbd75/keymaps/edulpn/keymap.c
@@ -0,0 +1,67 @@
+#include QMK_KEYBOARD_H
+
+#define WINDOWS_LAYER 0
+#define WINDOWS_FN_LAYER 1
+#define MAC_LAYER 2
+#define MAC_FN_LAYER 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [WINDOWS_LAYER] = LAYOUT(
+ 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, TG(MAC_LAYER), KC_DEL,
+ 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_BSPC, KC_HOME,
+ 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_END,
+ 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,
+ KC_LSFT, KC_TRNS, 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,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(WINDOWS_FN_LAYER), KC_TRNS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [WINDOWS_FN_LAYER] = LAYOUT(
+ 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, 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, 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, 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,
+ 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [MAC_LAYER] = LAYOUT(
+ 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, TG(MAC_LAYER), KC_DEL,
+ 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_BSPC, KC_HOME,
+ 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_END,
+ 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,
+ KC_LSFT, KC_TRNS, 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,
+ KC_LCTL, KC_LALT, KC_LCMD, KC_SPC, KC_SPC, KC_SPC, MO(MAC_FN_LAYER), KC_TRNS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [MAC_FN_LAYER] = LAYOUT(
+ RESET, KC_BRID, KC_BRIU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MRWD, KC_MPLY, KC_MFFD, KC__MUTE, KC__VOLDOWN, KC__VOLUP, 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, 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, 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,
+ 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case WINDOWS_LAYER:
+ rgblight_setrgb_blue();
+ break;
+ case WINDOWS_FN_LAYER:
+ rgblight_setrgb_blue();
+ break;
+ case MAC_LAYER:
+ rgblight_setrgb_white();
+ break;
+ case MAC_FN_LAYER:
+ rgblight_setrgb_white();
+ break;
+ default:
+ rgblight_setrgb (0x00, 0xFF, 0xFF);
+ break;
+ }
+ return state;
+}
+
diff --git a/keyboards/kbd75/readme.md b/keyboards/kbd75/readme.md
index 0545eb66d8..4c93a8fbef 100644
--- a/keyboards/kbd75/readme.md
+++ b/keyboards/kbd75/readme.md
@@ -15,4 +15,4 @@ Make example for this keyboard (after setting up your build environment):
make kbd75/rev1:default
make kbd75/rev2:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/kbd8x/keymaps/default/keymap.c b/keyboards/kbd8x/keymaps/default/keymap.c
index bfbc841d58..3d315035be 100644
--- a/keyboards/kbd8x/keymaps/default/keymap.c
+++ b/keyboards/kbd8x/keymaps/default/keymap.c
@@ -27,10 +27,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kbd8x/keymaps/default_backlighting/keymap.c b/keyboards/kbd8x/keymaps/default_backlighting/keymap.c
index 6e3950e500..e664575d5f 100644
--- a/keyboards/kbd8x/keymaps/default_backlighting/keymap.c
+++ b/keyboards/kbd8x/keymaps/default_backlighting/keymap.c
@@ -34,10 +34,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kbd8x/readme.md b/keyboards/kbd8x/readme.md
index fe49819753..8c50af68f6 100644
--- a/keyboards/kbd8x/readme.md
+++ b/keyboards/kbd8x/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make kbd8x:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/kc60/keymaps/default/keymap.c b/keyboards/kc60/keymaps/default/keymap.c
index 045ab810f9..073ae9c4a5 100644
--- a/keyboards/kc60/keymaps/default/keymap.c
+++ b/keyboards/kc60/keymaps/default/keymap.c
@@ -11,10 +11,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kc60/keymaps/sgoodwin/keymap.c b/keyboards/kc60/keymaps/sgoodwin/keymap.c
index 25870d0a78..c78e3108f7 100644
--- a/keyboards/kc60/keymaps/sgoodwin/keymap.c
+++ b/keyboards/kc60/keymaps/sgoodwin/keymap.c
@@ -29,10 +29,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kc60/keymaps/stanleylai/rules.mk b/keyboards/kc60/keymaps/stanleylai/rules.mk
index 9a381d2e78..a826c2bf26 100644
--- a/keyboards/kc60/keymaps/stanleylai/rules.mk
+++ b/keyboards/kc60/keymaps/stanleylai/rules.mk
@@ -20,6 +20,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes # USB Nkey Rollover
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kc60/keymaps/wigguno/keymap.c b/keyboards/kc60/keymaps/wigguno/keymap.c
index a4a946f0df..aa730c22f9 100644
--- a/keyboards/kc60/keymaps/wigguno/keymap.c
+++ b/keyboards/kc60/keymaps/wigguno/keymap.c
@@ -51,10 +51,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kc60/keymaps/wigguno/rules.mk b/keyboards/kc60/keymaps/wigguno/rules.mk
index 1f8d1506f8..db084a76a3 100644
--- a/keyboards/kc60/keymaps/wigguno/rules.mk
+++ b/keyboards/kc60/keymaps/wigguno/rules.mk
@@ -19,6 +19,3 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kc60/keymaps/ws2812/rules.mk b/keyboards/kc60/keymaps/ws2812/rules.mk
index a8c93bcf59..5d5a6f8abe 100644
--- a/keyboards/kc60/keymaps/ws2812/rules.mk
+++ b/keyboards/kc60/keymaps/ws2812/rules.mk
@@ -20,6 +20,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kc60se/readme.md b/keyboards/kc60se/readme.md
index da004c40d2..d6edbdb351 100644
--- a/keyboards/kc60se/readme.md
+++ b/keyboards/kc60se/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make kc60se:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/kinesis/keymaps/carpalx/keymap.c b/keyboards/kinesis/keymaps/carpalx/keymap.c
index c00c5327b3..922e8e7615 100644
--- a/keyboards/kinesis/keymaps/carpalx/keymap.c
+++ b/keyboards/kinesis/keymaps/carpalx/keymap.c
@@ -168,11 +168,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/kinesis/keymaps/carpalx/rules.mk b/keyboards/kinesis/keymaps/carpalx/rules.mk
index c7753fae05..63f52ac18e 100644
--- a/keyboards/kinesis/keymaps/carpalx/rules.mk
+++ b/keyboards/kinesis/keymaps/carpalx/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kinesis/keymaps/default/keymap.c b/keyboards/kinesis/keymaps/default/keymap.c
index f36d6dd1dd..98de455e58 100644
--- a/keyboards/kinesis/keymaps/default/keymap.c
+++ b/keyboards/kinesis/keymaps/default/keymap.c
@@ -52,11 +52,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kinesis/keymaps/default/rules.mk b/keyboards/kinesis/keymaps/default/rules.mk
index 93f927c7d0..7a331cd530 100644
--- a/keyboards/kinesis/keymaps/default/rules.mk
+++ b/keyboards/kinesis/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kinesis/keymaps/default_pretty/keymap.c b/keyboards/kinesis/keymaps/default_pretty/keymap.c
index 58d749074d..cb4cb6f26a 100644
--- a/keyboards/kinesis/keymaps/default_pretty/keymap.c
+++ b/keyboards/kinesis/keymaps/default_pretty/keymap.c
@@ -45,11 +45,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kinesis/keymaps/default_pretty/rules.mk b/keyboards/kinesis/keymaps/default_pretty/rules.mk
index 93f927c7d0..7a331cd530 100644
--- a/keyboards/kinesis/keymaps/default_pretty/rules.mk
+++ b/keyboards/kinesis/keymaps/default_pretty/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kinesis/keymaps/dvorak/keymap.c b/keyboards/kinesis/keymaps/dvorak/keymap.c
index 5d9739866c..9e44c10ce5 100644
--- a/keyboards/kinesis/keymaps/dvorak/keymap.c
+++ b/keyboards/kinesis/keymaps/dvorak/keymap.c
@@ -55,11 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kinesis/keymaps/dvorak/rules.mk b/keyboards/kinesis/keymaps/dvorak/rules.mk
index 93f927c7d0..7a331cd530 100644
--- a/keyboards/kinesis/keymaps/dvorak/rules.mk
+++ b/keyboards/kinesis/keymaps/dvorak/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk b/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk
index 24b16ba9b7..d2e362886a 100644
--- a/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk
+++ b/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk
@@ -19,6 +19,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # Enable Tap Dancing function
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kinesis/keymaps/milestogo/rules.mk b/keyboards/kinesis/keymaps/milestogo/rules.mk
index 93f927c7d0..7a331cd530 100644
--- a/keyboards/kinesis/keymaps/milestogo/rules.mk
+++ b/keyboards/kinesis/keymaps/milestogo/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kinesis/keymaps/xyverz/keymap.c b/keyboards/kinesis/keymaps/xyverz/keymap.c
index 2eab62a2bc..3c697f8f07 100644
--- a/keyboards/kinesis/keymaps/xyverz/keymap.c
+++ b/keyboards/kinesis/keymaps/xyverz/keymap.c
@@ -270,11 +270,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/kinesis/keymaps/xyverz/rules.mk b/keyboards/kinesis/keymaps/xyverz/rules.mk
index 94dc4cdfea..f21a27feac 100644
--- a/keyboards/kinesis/keymaps/xyverz/rules.mk
+++ b/keyboards/kinesis/keymaps/xyverz/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kira75/keymaps/default/keymap.c b/keyboards/kira75/keymaps/default/keymap.c
index cba4ca9927..7a08c4e50a 100644
--- a/keyboards/kira75/keymaps/default/keymap.c
+++ b/keyboards/kira75/keymaps/default/keymap.c
@@ -26,10 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kira75/readme.md b/keyboards/kira75/readme.md
index f2c0f3228b..5ab0b3f2cc 100644
--- a/keyboards/kira75/readme.md
+++ b/keyboards/kira75/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make kira75:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/kmac/keymaps/default/keymap.c b/keyboards/kmac/keymaps/default/keymap.c
index 8ae8627a06..ca59757539 100644
--- a/keyboards/kmac/keymaps/default/keymap.c
+++ b/keyboards/kmac/keymaps/default/keymap.c
@@ -42,10 +42,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kmac/keymaps/default/rules.mk b/keyboards/kmac/keymaps/default/rules.mk
index 8e2d011b34..128487947e 100644
--- a/keyboards/kmac/keymaps/default/rules.mk
+++ b/keyboards/kmac/keymaps/default/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kmac/keymaps/winkeyless/keymap.c b/keyboards/kmac/keymaps/winkeyless/keymap.c
index 985d5a89fb..d714e46d32 100644
--- a/keyboards/kmac/keymaps/winkeyless/keymap.c
+++ b/keyboards/kmac/keymaps/winkeyless/keymap.c
@@ -42,10 +42,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/kmac/keymaps/winkeyless/rules.mk b/keyboards/kmac/keymaps/winkeyless/rules.mk
index 8e2d011b34..128487947e 100644
--- a/keyboards/kmac/keymaps/winkeyless/rules.mk
+++ b/keyboards/kmac/keymaps/winkeyless/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/knops/mini/readme.md b/keyboards/knops/mini/readme.md
index 86cff4a61f..4df6c207a4 100644
--- a/keyboards/knops/mini/readme.md
+++ b/keyboards/knops/mini/readme.md
@@ -18,4 +18,4 @@ Make example for this keyboard (after setting up your build environment):
make knops/mini:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/kona_classic/README.md b/keyboards/kona_classic/README.md
index bd818ed92c..0ea5b00ea3 100644
--- a/keyboards/kona_classic/README.md
+++ b/keyboards/kona_classic/README.md
@@ -44,4 +44,4 @@ Make example for this keyboard (after setting up your build environment):
make kona_classic:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/kona_classic/keymaps/ansi/rules.mk b/keyboards/kona_classic/keymaps/ansi/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/ansi/rules.mk
+++ b/keyboards/kona_classic/keymaps/ansi/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/ansi_arrows/rules.mk b/keyboards/kona_classic/keymaps/ansi_arrows/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/ansi_arrows/rules.mk
+++ b/keyboards/kona_classic/keymaps/ansi_arrows/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/ansi_arrows_lcap/rules.mk b/keyboards/kona_classic/keymaps/ansi_arrows_lcap/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/ansi_arrows_lcap/rules.mk
+++ b/keyboards/kona_classic/keymaps/ansi_arrows_lcap/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/ansi_split/rules.mk b/keyboards/kona_classic/keymaps/ansi_split/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/ansi_split/rules.mk
+++ b/keyboards/kona_classic/keymaps/ansi_split/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/ansi_split_arrows/rules.mk b/keyboards/kona_classic/keymaps/ansi_split_arrows/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/ansi_split_arrows/rules.mk
+++ b/keyboards/kona_classic/keymaps/ansi_split_arrows/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/default/rules.mk b/keyboards/kona_classic/keymaps/default/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/default/rules.mk
+++ b/keyboards/kona_classic/keymaps/default/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/iso/rules.mk b/keyboards/kona_classic/keymaps/iso/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/iso/rules.mk
+++ b/keyboards/kona_classic/keymaps/iso/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/iso_arrows/rules.mk b/keyboards/kona_classic/keymaps/iso_arrows/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/iso_arrows/rules.mk
+++ b/keyboards/kona_classic/keymaps/iso_arrows/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/iso_split/rules.mk b/keyboards/kona_classic/keymaps/iso_split/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/iso_split/rules.mk
+++ b/keyboards/kona_classic/keymaps/iso_split/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/kona_classic/keymaps/iso_split_arrows/rules.mk b/keyboards/kona_classic/keymaps/iso_split_arrows/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/kona_classic/keymaps/iso_split_arrows/rules.mk
+++ b/keyboards/kona_classic/keymaps/iso_split_arrows/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/laplace/keymaps/bakingpy/rules.mk b/keyboards/laplace/keymaps/bakingpy/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/laplace/keymaps/bakingpy/rules.mk
+++ b/keyboards/laplace/keymaps/bakingpy/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/laplace/keymaps/default/rules.mk b/keyboards/laplace/keymaps/default/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/laplace/keymaps/default/rules.mk
+++ b/keyboards/laplace/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/laplace/readme.md b/keyboards/laplace/readme.md
index 71b3280082..7871992f76 100644
--- a/keyboards/laplace/readme.md
+++ b/keyboards/laplace/readme.md
@@ -15,6 +15,6 @@ Example of flashing this keyboard:
make laplace:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io)
diff --git a/keyboards/launchpad/keymaps/default/rules.mk b/keyboards/launchpad/keymaps/default/rules.mk
index 9bf35a59d0..d1fa27f41e 100644
--- a/keyboards/launchpad/keymaps/default/rules.mk
+++ b/keyboards/launchpad/keymaps/default/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/launchpad/readme.md b/keyboards/launchpad/readme.md
index 80b5de3219..8128121946 100644
--- a/keyboards/launchpad/readme.md
+++ b/keyboards/launchpad/readme.md
@@ -23,7 +23,7 @@ Make example for this keyboard (after setting up your build environment):
make launchpad/rev1:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
diff --git a/keyboards/lazydesigners/the50/config.h b/keyboards/lazydesigners/the50/config.h
new file mode 100644
index 0000000000..e4f91f5eef
--- /dev/null
+++ b/keyboards/lazydesigners/the50/config.h
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0050
+#define DEVICE_VER 0x0001
+#define MANUFACTURER LazyDesigners
+#define PRODUCT THE50
+#define DESCRIPTION A 50% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 15
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, B1, B2, B3 }
+#define MATRIX_COL_PINS { B5, D0, D1, D2, D3, D4, D5, D6, D7, C6, C7, F4, F5, F6, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 6
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN E6
+#ifdef RGB_DI_PIN
+#define RGBLED_NUM 1
+#define RGBLIGHT_SLEEP
+#endif
diff --git a/keyboards/lazydesigners/the50/info.json b/keyboards/lazydesigners/the50/info.json
new file mode 100644
index 0000000000..16e751dac3
--- /dev/null
+++ b/keyboards/lazydesigners/the50/info.json
@@ -0,0 +1,67 @@
+{
+ "keyboard_name": "THE50",
+ "url": "http://lazydesigners.cn",
+ "maintainer": "qmk",
+ "width": 15.25,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 54,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"Q", "x":1, "y":0},
+ {"label":"W", "x":2, "y":0},
+ {"label":"E", "x":3, "y":0},
+ {"label":"R", "x":4, "y":0},
+ {"label":"T", "x":5, "y":0},
+ {"label":"Y", "x":6, "y":0},
+ {"label":"U", "x":7, "y":0},
+ {"label":"I", "x":8, "y":0},
+ {"label":"O", "x":9, "y":0},
+ {"label":"P", "x":10, "y":0},
+ {"label":"Back<br>Space", "x":11, "y":0},
+ {"label":"7", "x":12.25, "y":0},
+ {"label":"8", "x":13.25, "y":0},
+ {"label":"9", "x":14.25, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.25},
+ {"label":"A", "x":1.25, "y":1},
+ {"label":"S", "x":2.25, "y":1},
+ {"label":"D", "x":3.25, "y":1},
+ {"label":"F", "x":4.25, "y":1},
+ {"label":"G", "x":5.25, "y":1},
+ {"label":"H", "x":6.25, "y":1},
+ {"label":"J", "x":7.25, "y":1},
+ {"label":"K", "x":8.25, "y":1},
+ {"label":"L", "x":9.25, "y":1},
+ {"label":"Enter", "x":10.25, "y":1, "w":1.75},
+ {"label":"4", "x":12.25, "y":1},
+ {"label":"5", "x":13.25, "y":1},
+ {"label":"6", "x":14.25, "y":1},
+ {"label":"Shift", "x":0, "y":2, "w":1.75},
+ {"label":"Z", "x":1.75, "y":2},
+ {"label":"X", "x":2.75, "y":2},
+ {"label":"C", "x":3.75, "y":2},
+ {"label":"V", "x":4.75, "y":2},
+ {"label":"B", "x":5.75, "y":2},
+ {"label":"N", "x":6.75, "y":2},
+ {"label":"M", "x":7.75, "y":2},
+ {"label":"<", "x":8.75, "y":2},
+ {"label":">", "x":9.75, "y":2},
+ {"label":"Fn", "x":10.75, "y":2, "w":1.25},
+ {"label":"1", "x":12.25, "y":2},
+ {"label":"2", "x":13.25, "y":2},
+ {"label":"3", "x":14.25, "y":2},
+ {"label":"Hyper", "x":0, "y":3, "w":1.25},
+ {"label":"Super", "x":1.25, "y":3},
+ {"label":"Meta", "x":2.25, "y":3, "w":1.25},
+ {"label":"Space", "x":3.5, "y":3, "w":2.25},
+ {"label":"Space", "x":5.75, "y":3, "w":2.75},
+ {"label":"Meta", "x":8.5, "y":3, "w":1.25},
+ {"label":"Super", "x":9.75, "y":3},
+ {"label":"Hyper", "x":10.75, "y":3, "w":1.25},
+ {"label":"0", "x":12.25, "y":3},
+ {"label":".", "x":13.25, "y":3},
+ {"label":"Enter", "x":14.25, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/lazydesigners/the50/keymaps/default/keymap.c b/keyboards/lazydesigners/the50/keymaps/default/keymap.c
new file mode 100644
index 0000000000..cba582cab2
--- /dev/null
+++ b/keyboards/lazydesigners/the50/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+ _QWERTY,
+ _FN
+};
+
+// Act as Shift on hold and as CapsLock on tap
+#define SFT_CPS LSFT_T(KC_CAPS)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------. ,--------------.
+ * |Esc | Q | W | E | R | T | Y | U | I | O | P |Bspc| | 7 | 8 | 9 |
+ * |-----------------------------------------------------------| |--------------|
+ * | Tab | A | S | D | F | G | H | J | K | L | Enter | | 4 | 5 | 6 |
+ * |-----------------------------------------------------------| |--------------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | FN | | 1 | 2 | 3 |
+ * |-----------------------------------------------------------| |--------------|
+ * | Ctrl |Gui | Alt | Space | Space | RAlt |RGui|RCtrl| | 0 | . |Entr|
+ * `-----------------------------------------------------------' `--------------'
+ */
+
+[_QWERTY] = LAYOUT(
+KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_7, KC_8, KC_9,
+KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_4, KC_5, KC_6,
+SFT_CPS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, MO(_FN), KC_1, KC_2, KC_3,
+KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_0, KC_DOT, KC_ENT
+),
+
+/* FN
+ * ,-----------------------------------------------------------. ,--------------.
+ * |RST | | | | | | | | | |Ins |Del | |Home|PgUp| |
+ * |-----------------------------------------------------------| |--------------|
+ * | |Prev|Play|Next| | | |VolD|Mute|VolU| | |End |PgDn| |
+ * |-----------------------------------------------------------| |--------------|
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------| |--------------|
+ * |EEPRST| | | | | | | | | | | |
+ * `-----------------------------------------------------------' `--------------'
+ */
+
+[_FN] = LAYOUT(
+RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, KC_HOME, KC_PGUP, _______,
+_______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_END, KC_PGDN, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+EEP_RST, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+};
+
+void led_set_user(uint8_t usb_led) {
+ // Turn LED On/Off for Caps Lock
+ if (host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK)) {
+ the50_led_on();
+ } else {
+ the50_led_off();
+ }
+}
diff --git a/keyboards/lazydesigners/the50/keymaps/default/readme.md b/keyboards/lazydesigners/the50/keymaps/default/readme.md
new file mode 100644
index 0000000000..09b9351f99
--- /dev/null
+++ b/keyboards/lazydesigners/the50/keymaps/default/readme.md
@@ -0,0 +1,31 @@
+# Default keymap for THE50
+
+**Features**
+
+* Shift acts as CapsLock when tapped
+
+## QWERTY (Normal) Layer
+```
+ ,-----------------------------------------------------------. ,--------------.
+ |Esc | Q | W | E | R | T | Y | U | I | O | P |Bspc| | 7 | 8 | 9 |
+ |-----------------------------------------------------------| |--------------|
+ | Tab | A | S | D | F | G | H | J | K | L | Enter | | 4 | 5 | 6 |
+ |-----------------------------------------------------------| |--------------|
+ | Shift | Z | X | C | V | B | N | M | , | . | FN | | 1 | 2 | 3 |
+ |-----------------------------------------------------------| |--------------|
+ | Ctrl |Gui | Alt | Space | Space | RAlt |RGui|RCtrl| | 0 | . |Entr|
+ `-----------------------------------------------------------' `--------------'
+```
+
+## FN Layer
+```
+ ,-----------------------------------------------------------. ,--------------.
+ |RST | | | | | | | | | |Ins |Del | |Home|PgUp| |
+ |-----------------------------------------------------------| |--------------|
+ | |Prev|Play|Next| | | |VolD|Mute|VolU| | |End |PgDn| |
+ |-----------------------------------------------------------| |--------------|
+ | | | | | | | | | | | | | | | |
+ |-----------------------------------------------------------| |--------------|
+ |EEPRST| | | | | | | | | | | |
+ `-----------------------------------------------------------' `--------------'
+```
diff --git a/keyboards/lazydesigners/the50/readme.md b/keyboards/lazydesigners/the50/readme.md
new file mode 100644
index 0000000000..d90dc59de6
--- /dev/null
+++ b/keyboards/lazydesigners/the50/readme.md
@@ -0,0 +1,17 @@
+# THE50
+
+![THE50](https://i.loli.net/2018/11/13/5beac9464d402.jpg)
+
+A 50% custom keyboard designed and produced by [LazyDesigners](http://lazydesigners.cn).
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: THE50
+Hardware Availability: Check for GBs on [Geekhack](https://geekhack.org) and on [LazyDesigner's homepage.](http://lazydesigners.cn)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lazydesigners/the50:default:dfu
+
+To enter the bootloader, either short the pins on the PCB or the RESET button on the FN layer.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/the50/rules.mk b/keyboards/lazydesigners/the50/rules.mk
new file mode 100644
index 0000000000..ae211ec66e
--- /dev/null
+++ b/keyboards/lazydesigners/the50/rules.mk
@@ -0,0 +1,52 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
diff --git a/keyboards/lazydesigners/the50/the50.c b/keyboards/lazydesigners/the50/the50.c
new file mode 100644
index 0000000000..4ceb3da6ab
--- /dev/null
+++ b/keyboards/lazydesigners/the50/the50.c
@@ -0,0 +1,9 @@
+#include "the50.h"
+
+void the50_led_on() {
+ DDRB |= (1 << 7); PORTB &= ~(1 << 7);
+}
+
+void the50_led_off() {
+ DDRB &= ~(1 << 7); PORTB &= ~(1 << 7);
+}
diff --git a/keyboards/lazydesigners/the50/the50.h b/keyboards/lazydesigners/the50/the50.h
new file mode 100644
index 0000000000..1cf613aada
--- /dev/null
+++ b/keyboards/lazydesigners/the50/the50.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include "quantum.h"
+
+#define XXXX KC_NO
+
+/*
+ * ,-----------------------------------------------------------. ,--------------.
+ * | | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------| |--------------|
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------| |--------------|
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------| |--------------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------' `--------------'
+ */
+
+#define LAYOUT( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K111, K112, K113, K114, \
+K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
+K300, K301, K302, K304, K307, K309, K310, K311, K312, K313, K314 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, XXXX, K111, K112, K113, K114 }, \
+{ K200, XXXX, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
+{ K300, K301, K302, XXXX, K304, XXXX, XXXX, K307, XXXX, K309, K310, K311, K312, K313, K314 } \
+}
+
+void the50_led_on(void);
+void the50_led_off(void);
diff --git a/keyboards/lets_split/keymaps/bbaserdem/rules.mk b/keyboards/lets_split/keymaps/bbaserdem/rules.mk
index 4159db3fee..7a37e989d8 100755
--- a/keyboards/lets_split/keymaps/bbaserdem/rules.mk
+++ b/keyboards/lets_split/keymaps/bbaserdem/rules.mk
@@ -6,6 +6,3 @@ RGBLIGHT_ENABLE = yes # LED strips
TAP_DANCE_ENABLE = no # Use multi-tap features
AUDIO_ENABLE = no # Audio stuff
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/bbaserdem_right/rules.mk b/keyboards/lets_split/keymaps/bbaserdem_right/rules.mk
index 36b4b8fc25..d0b6920610 100755
--- a/keyboards/lets_split/keymaps/bbaserdem_right/rules.mk
+++ b/keyboards/lets_split/keymaps/bbaserdem_right/rules.mk
@@ -21,6 +21,3 @@ KEY_LOCK_ENABLE = no # Allows locking any key. Not used
UNICODE_ENABLE = no # Used for unicode character emulation
EXTRAKEY_ENABLE = no # OS signals like volume control
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/cpeters1982/rules.mk b/keyboards/lets_split/keymaps/cpeters1982/rules.mk
index f2fde785d4..87136eef03 100644
--- a/keyboards/lets_split/keymaps/cpeters1982/rules.mk
+++ b/keyboards/lets_split/keymaps/cpeters1982/rules.mk
@@ -1,8 +1,3 @@
+AUTO_SHIFT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
-
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
- AUTO_SHIFT_ENABLE = yes
- RGBLIGHT_ENABLE = yes
-endif
diff --git a/keyboards/lets_split/keymaps/fabian/rules.mk b/keyboards/lets_split/keymaps/fabian/rules.mk
index b8c82cb99d..316a4b9cbf 100644
--- a/keyboards/lets_split/keymaps/fabian/rules.mk
+++ b/keyboards/lets_split/keymaps/fabian/rules.mk
@@ -4,6 +4,3 @@
#
# UNICODE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/heartrobotninja/rules.mk b/keyboards/lets_split/keymaps/heartrobotninja/rules.mk
index 36f5e5b6d5..21aae31dba 100644
--- a/keyboards/lets_split/keymaps/heartrobotninja/rules.mk
+++ b/keyboards/lets_split/keymaps/heartrobotninja/rules.mk
@@ -20,6 +20,3 @@ SWAP_HANDS_ENABLE = no # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/khord/rules.mk b/keyboards/lets_split/keymaps/khord/rules.mk
index c90523e5d6..32b6edc121 100644
--- a/keyboards/lets_split/keymaps/khord/rules.mk
+++ b/keyboards/lets_split/keymaps/khord/rules.mk
@@ -2,6 +2,3 @@ TAP_DANCE_ENABLE = yes
RGBLIGHT_ENABLE = yes
USE_I2C = no
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/mbsurfer/rules.mk b/keyboards/lets_split/keymaps/mbsurfer/rules.mk
index c90523e5d6..32b6edc121 100644
--- a/keyboards/lets_split/keymaps/mbsurfer/rules.mk
+++ b/keyboards/lets_split/keymaps/mbsurfer/rules.mk
@@ -2,6 +2,3 @@ TAP_DANCE_ENABLE = yes
RGBLIGHT_ENABLE = yes
USE_I2C = no
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/mjt/rules.mk b/keyboards/lets_split/keymaps/mjt/rules.mk
index a14e84d4e5..a43a9a1daa 100644
--- a/keyboards/lets_split/keymaps/mjt/rules.mk
+++ b/keyboards/lets_split/keymaps/mjt/rules.mk
@@ -20,6 +20,3 @@ SWAP_HANDS_ENABLE = no # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/mtdjr/rules.mk b/keyboards/lets_split/keymaps/mtdjr/rules.mk
index 75e9c6503e..a81250cdf6 100644
--- a/keyboards/lets_split/keymaps/mtdjr/rules.mk
+++ b/keyboards/lets_split/keymaps/mtdjr/rules.mk
@@ -1,5 +1,2 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
RGBLIGHT_ENABLE = yes
+
diff --git a/keyboards/lets_split/keymaps/pitty/rules.mk b/keyboards/lets_split/keymaps/pitty/rules.mk
index 8ebc85a44b..53a426157e 100644
--- a/keyboards/lets_split/keymaps/pitty/rules.mk
+++ b/keyboards/lets_split/keymaps/pitty/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
NKRO_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/poker/rules.mk b/keyboards/lets_split/keymaps/poker/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/lets_split/keymaps/poker/rules.mk
+++ b/keyboards/lets_split/keymaps/poker/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/waples/rules.mk b/keyboards/lets_split/keymaps/waples/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/lets_split/keymaps/waples/rules.mk
+++ b/keyboards/lets_split/keymaps/waples/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/xk/rules.mk b/keyboards/lets_split/keymaps/xk/rules.mk
index 195f015778..8aafefa64f 100644
--- a/keyboards/lets_split/keymaps/xk/rules.mk
+++ b/keyboards/lets_split/keymaps/xk/rules.mk
@@ -14,6 +14,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/zer09/rules.mk b/keyboards/lets_split/keymaps/zer09/rules.mk
index d8adc70882..d2259fe9d5 100644
--- a/keyboards/lets_split/keymaps/zer09/rules.mk
+++ b/keyboards/lets_split/keymaps/zer09/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
TAP_DANCE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/sockets/config.h b/keyboards/lets_split/sockets/config.h
index 6939d37dc5..e73c45722d 100644
--- a/keyboards/lets_split/sockets/config.h
+++ b/keyboards/lets_split/sockets/config.h
@@ -85,3 +85,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
+
+#ifdef USE_Link_Time_Optimization
+ // LTO has issues with macros (action_get_macro) and "functions" (fn_actions),
+ // so just disable them
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+
+ #define DISABLE_LEADER
+#endif // USE_Link_Time_Optimization \ No newline at end of file
diff --git a/keyboards/lets_split/sockets/rules.mk b/keyboards/lets_split/sockets/rules.mk
index e14d18d8de..da04decf40 100644
--- a/keyboards/lets_split/sockets/rules.mk
+++ b/keyboards/lets_split/sockets/rules.mk
@@ -1,3 +1,5 @@
BACKLIGHT_ENABLE = no
AUDIO_ENABLE = yes
RGBLIGHT_ENABLE = yes #Don't enable this along with I2C
+
+EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
diff --git a/keyboards/lets_split_eh/README.md b/keyboards/lets_split_eh/README.md
index 185e74dab0..180cb33d73 100644
--- a/keyboards/lets_split_eh/README.md
+++ b/keyboards/lets_split_eh/README.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make lets_split_eh/eh:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/lets_split_eh/keymaps/bbaserdem/rules.mk b/keyboards/lets_split_eh/keymaps/bbaserdem/rules.mk
index 4159db3fee..7a37e989d8 100755
--- a/keyboards/lets_split_eh/keymaps/bbaserdem/rules.mk
+++ b/keyboards/lets_split_eh/keymaps/bbaserdem/rules.mk
@@ -6,6 +6,3 @@ RGBLIGHT_ENABLE = yes # LED strips
TAP_DANCE_ENABLE = no # Use multi-tap features
AUDIO_ENABLE = no # Audio stuff
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/hadron/ver0/config.h b/keyboards/lets_split_eh/keymaps/resfury/config.h
index 2157a52cee..0055bbf459 100644
--- a/keyboards/hadron/ver0/config.h
+++ b/keyboards/lets_split_eh/keymaps/resfury/config.h
@@ -1,5 +1,8 @@
/*
+This is the c configuration file for the keymap
+
Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -14,19 +17,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#pragma once
-
-/* USB Device descriptor parameter */
-#define DEVICE_VER 0x0001
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 15
-
-/* Hadron Ver0 PCB default pin-out */
-#define MATRIX_ROW_PINS { D7, E6, B4, B5, B6 }
-#define MATRIX_COL_PINS { F6, F7, C6, C7, F5, F4, F1, F0, D2, D3, D5, B3, B2, B1, B0 }
-#define UNUSED_PINS
-
+#pragma once
+#define EE_HANDS \ No newline at end of file
diff --git a/keyboards/lets_split_eh/keymaps/resfury/keymap.c b/keyboards/lets_split_eh/keymaps/resfury/keymap.c
new file mode 100644
index 0000000000..17f790675b
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/resfury/keymap.c
@@ -0,0 +1,189 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum resfury_layers {
+ _COLEMAK,
+ _DVORAK,
+ _QWERTY
+};
+
+enum resfury_keycodes {
+ COLEMAK = SAFE_RANGE,
+ DVORAK,
+ QWERTY,
+};
+
+#define _LOWER 3
+#define _RAISE 4
+#define _FUNCTION 15
+#define _ADJUST 16
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define FUNCTION MO(_FUNCTION)
+#define ADJUST MO(_ADJUST)
+
+
+// Defines for task manager and such
+#define CALTDEL LCTL(LALT(KC_DEL))
+#define TSKMGR LCTL(LSFT(KC_ESC))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | F | P | G | J | L | U | Y | ; | \ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |F/TAB | A | R | S | T | D | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Ent |Lower | Bksp | Spc | Raise| Left | Up | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT( \
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, \
+ LT(_FUNCTION,KC_TAB), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM(MOD_RSFT), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_ENT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT \
+),
+
+ /* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | ' | , | . | P | Y | F | G | C | R | L | / |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |F/TAB | A | O | E | U | I | D | H | T | R | L | - |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Ent |Lower | Bksp | Spc | Raise| Left | Up | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT( \
+ KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, \
+ LT(_FUNCTION,KC_TAB), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
+ OSM(MOD_LSFT), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, OSM(MOD_RSFT), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_ENT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT \
+),
+
+
+ /* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |F/TAB | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Ent |Lower | Bksp | Spc | Raise| Left | Up | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT( \
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, \
+ LT(_FUNCTION,KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM(MOD_RSFT), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_ENT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | ~ | ` | Mute | Ctl/ | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | |Lower | Bksp | Spc |Adjust| Play | Vol+ | Vol- | Next |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_GRV), KC_GRV, KC_MUTE, RCTL(KC_BSLS), KC_PIPE, \
+ _______, _______, _______, _______, _______, KC_BSPC, KC_SPC, ADJUST, KC_MPLY, KC_VOLU, KC_VOLD, KC_MNXT \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | 4 | 5 | 6 | + | - | + | - | = | [ | ] |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | 7 | 8 | 9 | * | / | * | / | . | Mute | Ctl/ | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | , | 0 | . |Adjust| Bksp | Spc |Raise | Play | Vol+ | Vol- | Next |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______, \
+ _______, KC_7, KC_8, KC_9, KC_ASTR, KC_SLSH, KC_ASTR, KC_SLSH, KC_DOT, KC_MUTE, RCTL(KC_BSLS), KC_BSLS, \
+ _______, KC_COMM, KC_0, KC_DOT, ADJUST, KC_BSPC, KC_SPC, _______, KC_MPLY, KC_VOLU, KC_VOLD, KC_MNXT \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |Taskmg| | | | | | | |RGBVAI|RGBSAI|RGBHUI|caltde|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |_COLEMAK| | | | | | | |RGBVAD|RGBSAD|RGBHUD|RGBTOG|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |_DVORAK| | | | | | | | | |RGBMOD|BLSTEP|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |_QWERTY| | | | | | | | | | | RESET|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ TSKMGR, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, RGB_SAI, RGB_HUI, CALTDEL, \
+ DF(_COLEMAK), _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_SAD, RGB_HUD, RGB_TOG, \
+ DF(_DVORAK), _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, BL_STEP, \
+ DF(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET \
+),
+
+/* Function
+ * ,-----------------------------------------------------------------------------------.
+ * | Caps | | | | | | S(Hm)| Home | Up | End |S(End)| |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Ctrl | Shift| Alt | | | | Left | Down |Right | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNCTION] = LAYOUT( \
+ KC_CAPS, _______, _______, _______, _______, _______, S(KC_HOME), KC_HOME, KC_UP, KC_END, S(KC_END), _______, \
+ _______, KC_LCTL, KC_LSFT, KC_LALT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/lets_split_eh/keymaps/resfury/readme.md b/keyboards/lets_split_eh/keymaps/resfury/readme.md
new file mode 100644
index 0000000000..6a882307b7
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/resfury/readme.md
@@ -0,0 +1,7 @@
+![Let's Split Eh?](https://imgur.com/a/riUxwpl)
+
+# ResFury Let's Split, Eh Layout
+
+This layout specializes the Let's Split, Eh for Colevrak users that occasionally let others play with their toys. Adjust layer allows swapping to Colemak/Dvorak/Qwerty alphas. Heavily influenced by the default planck layout, but with up/down switched, a left hand 10-key, remapped backspace, and a few convenience keys.
+
+Master set by EE_HANDS method. \ No newline at end of file
diff --git a/keyboards/lets_split_eh/keymaps/resfury/rules.mk b/keyboards/lets_split_eh/keymaps/resfury/rules.mk
new file mode 100644
index 0000000000..7ad666d1a3
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/resfury/rules.mk
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/lets_split_eh/keymaps/that_canadian/rules.mk b/keyboards/lets_split_eh/keymaps/that_canadian/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/lets_split_eh/keymaps/that_canadian/rules.mk
+++ b/keyboards/lets_split_eh/keymaps/that_canadian/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/levinson/keymaps/drogglbecher/rules.mk b/keyboards/levinson/keymaps/drogglbecher/rules.mk
index b223b71aba..b2a5451c82 100644
--- a/keyboards/levinson/keymaps/drogglbecher/rules.mk
+++ b/keyboards/levinson/keymaps/drogglbecher/rules.mk
@@ -5,6 +5,3 @@ BACKLIGHT_ENABLE = no
UNICODE_ENABLE = yes
DEFAULT_FOLDER = levinson/rev2
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/levinson/keymaps/losinggeneration/rules.mk b/keyboards/levinson/keymaps/losinggeneration/rules.mk
index c8eef2cb3f..ee3ea67f7d 100644
--- a/keyboards/levinson/keymaps/losinggeneration/rules.mk
+++ b/keyboards/levinson/keymaps/losinggeneration/rules.mk
@@ -12,6 +12,3 @@ MIDI_ENABLE = no # MIDI controls
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lfkeyboards/lfk65_hs/readme.md b/keyboards/lfkeyboards/lfk65_hs/readme.md
index 382538c68b..8824804d77 100644
--- a/keyboards/lfkeyboards/lfk65_hs/readme.md
+++ b/keyboards/lfkeyboards/lfk65_hs/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make lfkeyboards/lfk65_hs:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/lfkeyboards/lfk78/readme.md b/keyboards/lfkeyboards/lfk78/readme.md
index 3ca0b2e04a..7cef9735dc 100644
--- a/keyboards/lfkeyboards/lfk78/readme.md
+++ b/keyboards/lfkeyboards/lfk78/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make lfkeyboards/lfk78:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
index e215033a2d..18d5d8cadc 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
@@ -89,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_FN0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX, \
KC_FN0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, \
MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_FN2, RGB_MOD, RGB_VAD, XXXXXXX, \
- AU_TOG, KC_F1, KC_FN3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, \
+ AU_TOG, KC_FN1, KC_FN3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, \
KC_FN5, KC_FN2, KC_FN4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, \
XXXXXXX, XXXXXXX, XXXXXXX, KC_FN12, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI \
),
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
index ec8bedbb0c..a916f80f1a 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
@@ -96,16 +96,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
- ACTION_FUNCTION(LFK_LED_TEST), // FN2 - cycle through LEDs for testing
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN3 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN4 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN5 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN6 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN7 - Toggle audio click
- ACTION_FUNCTION(LFK_LED_TEST), // FN8 - cycle through LEDs for testing
- ACTION_FUNCTION(LFK_DEBUG_SETTINGS), // FN9 - prints LED and click settings to HID
+ [0] = ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
+ [3] = ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN3 - Increase Freq of audio click
+ [4] = ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN4 - Decrease Freq of audio click
+ [5] = ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN5 - Increase length of audio click
+ [6] = ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN6 - Decrease length of audio click
+ [7] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN7 - Toggle audio click
};
diff --git a/keyboards/lfkeyboards/lfk87/readme.md b/keyboards/lfkeyboards/lfk87/readme.md
index 15e5517103..44a36c479f 100644
--- a/keyboards/lfkeyboards/lfk87/readme.md
+++ b/keyboards/lfkeyboards/lfk87/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make lfkeyboards/lfk87:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c b/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
index 443064748d..dc064ebf2d 100644
--- a/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
@@ -85,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[SETTINGS] = LAYOUT(
KC_FN0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, XXXXXXX, \
MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_FN2, RGB_MOD, RGB_VAD, XXXXXXX, XXXXXXX, \
- AU_TOG, KC_F1, KC_FN3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ AU_TOG, KC_FN1, KC_FN3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
KC_FN5, KC_FN2, KC_FN4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, KC_FN12, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI, XXXXXXX, XXXXXXX \
),
diff --git a/keyboards/lfkeyboards/mini1800/readme.md b/keyboards/lfkeyboards/mini1800/readme.md
index 96de85df1d..e2839275cc 100644
--- a/keyboards/lfkeyboards/mini1800/readme.md
+++ b/keyboards/lfkeyboards/mini1800/readme.md
@@ -9,4 +9,4 @@ Make example for this keyboard (after setting up your build environment):
make lfkeyboards/mini1800:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/lfkeyboards/mini1800/rules.mk b/keyboards/lfkeyboards/mini1800/rules.mk
index 022b21924f..a1e52aae94 100644
--- a/keyboards/lfkeyboards/mini1800/rules.mk
+++ b/keyboards/lfkeyboards/mini1800/rules.mk
@@ -52,10 +52,8 @@ F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-# ifndef QUANTUM_DIR
-# include ../../Makefile
-# endif
-
+# Extra source files for IS3731 lighting
+SRC = TWIlib.c issi.c lighting.c
ifeq ($(strip $(ISSI_ENABLE)), yes)
# TMK_COMMON_DEFS += -DISSI_ENABLE
diff --git a/keyboards/lfkeyboards/readme.md b/keyboards/lfkeyboards/readme.md
index 0fd05adefd..0c262f30b0 100644
--- a/keyboards/lfkeyboards/readme.md
+++ b/keyboards/lfkeyboards/readme.md
@@ -5,4 +5,4 @@ This is the parent directory for all LFKeyboard keyboards.
Keyboard Maintainer: [LFKeyboards](https://github.com/lfkeyboards)
Hardware Availability: [LFKeyboards.com](https://www.lfkeyboards.com/)
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/lfkeyboards/rules.mk b/keyboards/lfkeyboards/rules.mk
deleted file mode 100644
index 5cf759a2fc..0000000000
--- a/keyboards/lfkeyboards/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-SRC = TWIlib.c issi.c lighting.c
diff --git a/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c b/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
index 26430a81b9..757217ddb2 100644
--- a/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
@@ -56,15 +56,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
+ [1] = ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
+ [2] = ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
+ [3] = ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
+ [4] = ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
+ [5] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/lfkeyboards/smk65/keymaps/default/rules.mk b/keyboards/lfkeyboards/smk65/keymaps/default/rules.mk
index 14ceebb77c..b5310da58d 100644
--- a/keyboards/lfkeyboards/smk65/keymaps/default/rules.mk
+++ b/keyboards/lfkeyboards/smk65/keymaps/default/rules.mk
@@ -23,10 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install thi
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
@@ -34,3 +30,4 @@ endif
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
endif
+
diff --git a/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c b/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
index 9adf722fd9..40a7ee03f9 100644
--- a/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
@@ -56,12 +56,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const uint16_t PROGMEM fn_actions[] = {
- ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
- ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
- ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
- ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
+ [1] = ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
+ [2] = ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
+ [3] = ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
+ [4] = ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
+ [5] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
diff --git a/keyboards/lfkeyboards/smk65/keymaps/iso/rules.mk b/keyboards/lfkeyboards/smk65/keymaps/iso/rules.mk
index f8b4d55689..f1814cf485 100644
--- a/keyboards/lfkeyboards/smk65/keymaps/iso/rules.mk
+++ b/keyboards/lfkeyboards/smk65/keymaps/iso/rules.mk
@@ -23,10 +23,6 @@ ISSI_ENABLE = no # If the I2C pullup resistors aren't install this
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
@@ -51,3 +47,4 @@ endif
# endif
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
+
diff --git a/keyboards/lfkeyboards/smk65/readme.md b/keyboards/lfkeyboards/smk65/readme.md
index 8265e36e68..0d04ac5f77 100644
--- a/keyboards/lfkeyboards/smk65/readme.md
+++ b/keyboards/lfkeyboards/smk65/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make lfkeyboards/smk65:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/lily58/config.h b/keyboards/lily58/config.h
index db4844c910..b88ec06bf4 100644
--- a/keyboards/lily58/config.h
+++ b/keyboards/lily58/config.h
@@ -18,4 +18,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-#include "serial_config.h" \ No newline at end of file
+#include "config_common.h"
+#include <serial_config.h>
+
+#define USE_I2C
+#define USE_SERIAL
+
+#ifdef USE_Link_Time_Optimization
+ // LTO has issues with macros (action_get_macro) and "functions" (fn_actions),
+ // so just disable them
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+
+ #define DISABLE_LEADER
+#endif // USE_Link_Time_Optimization \ No newline at end of file
diff --git a/keyboards/lily58/i2c.c b/keyboards/lily58/i2c.c
index 084c890c40..4bee5c6398 100644..100755
--- a/keyboards/lily58/i2c.c
+++ b/keyboards/lily58/i2c.c
@@ -34,7 +34,7 @@ void i2c_delay(void) {
// _delay_us(100);
}
-// Setup twi to run at 100kHz
+// Setup twi to run at 100kHz or 400kHz (see ./i2c.h SCL_CLOCK)
void i2c_master_init(void) {
// no prescaler
TWSR = 0;
diff --git a/keyboards/lily58/i2c.h b/keyboards/lily58/i2c.h
index c15b6bc506..710662c7ab 100644..100755
--- a/keyboards/lily58/i2c.h
+++ b/keyboards/lily58/i2c.h
@@ -1,5 +1,4 @@
-#ifndef I2C_H
-#define I2C_H
+#pragma once
#include <stdint.h>
@@ -15,7 +14,7 @@
#define SLAVE_BUFFER_SIZE 0x10
-// i2c SCL clock frequency
+// i2c SCL clock frequency 400kHz
#define SCL_CLOCK 400000L
extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
@@ -45,5 +44,3 @@ extern unsigned char i2c_readNak(void);
extern unsigned char i2c_read(unsigned char ack);
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/keyboards/lily58/keymaps/default/config.h b/keyboards/lily58/keymaps/default/config.h
index fd09785593..58bbdc5e9d 100644
--- a/keyboards/lily58/keymaps/default/config.h
+++ b/keyboards/lily58/keymaps/default/config.h
@@ -17,12 +17,10 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#pragma once
-/* Use I2C or Serial, not both */
+#pragma once
-#define USE_SERIAL
-// #define USE_I2C
+//#define USE_MATRIX_I2C
/* Select hand configuration */
@@ -30,6 +28,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
// Underglow
/*
#undef RGBLED_NUM
diff --git a/keyboards/lily58/keymaps/default/keymap.c b/keyboards/lily58/keymaps/default/keymap.c
index 8d77058129..5ff5dc3182 100644
--- a/keyboards/lily58/keymaps/default/keymap.c
+++ b/keyboards/lily58/keymaps/default/keymap.c
@@ -1,7 +1,23 @@
#include QMK_KEYBOARD_H
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+
extern keymap_config_t keymap_config;
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
@@ -88,9 +104,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | |-------. ,-------| | | | | | |
+ * | | | | | | |-------. ,-------| | |RGB ON| HUE+ | SAT+ | VAL+ |
* |------+------+------+------+------+------| | | |------+------+------+------+------+------|
- * | | | | | | |-------| |-------| | | | | | |
+ * | | | | | | |-------| |-------| | | MODE | HUE- | SAT- | VAL- |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI |
* | | | |/ / \ \ | | | |
@@ -99,17 +115,92 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = LAYOUT( \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD,\
_______, _______, _______, _______, _______, _______, _______, _______ \
)
};
+int RGB_current_mode;
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+// const char *read_mode_icon(bool swap);
+// const char *read_host_led_state(void);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (is_master) {
+ // If you want to change the display of OLED, you need to change here
+ matrix_write_ln(matrix, read_layer_state());
+ matrix_write_ln(matrix, read_keylog());
+ matrix_write_ln(matrix, read_keylogs());
+ //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
+ //matrix_write_ln(matrix, read_host_led_state());
+ //matrix_write_ln(matrix, read_timelog());
+ } else {
+ matrix_write(matrix, read_logo());
+ }
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ matrix_render_user(&matrix);
+ matrix_update(&display, &matrix);
+}
+#endif//SSD1306OLED
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+#ifdef SSD1306OLED
+ set_keylog(keycode, record);
+#endif
+ // set_timelog();
+ }
+
switch (keycode) {
case QWERTY:
- if (record->event.pressed) {
+ if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
@@ -117,31 +208,31 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
}
return true;
} \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/default/rules.mk b/keyboards/lily58/keymaps/default/rules.mk
index 3d2d3c9e0f..922fac6b69 100644
--- a/keyboards/lily58/keymaps/default/rules.mk
+++ b/keyboards/lily58/keymaps/default/rules.mk
@@ -1,21 +1,30 @@
-
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
-
-RGBLIGHT_ENABLE = no
-
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-ONEHAND_ENABLE = no # Enable one-hand typing
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/timelogger.c \
diff --git a/keyboards/lily58/keymaps/yuchi/config.h b/keyboards/lily58/keymaps/yuchi/config.h
index fd09785593..58bbdc5e9d 100644
--- a/keyboards/lily58/keymaps/yuchi/config.h
+++ b/keyboards/lily58/keymaps/yuchi/config.h
@@ -17,12 +17,10 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#pragma once
-/* Use I2C or Serial, not both */
+#pragma once
-#define USE_SERIAL
-// #define USE_I2C
+//#define USE_MATRIX_I2C
/* Select hand configuration */
@@ -30,6 +28,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
// Underglow
/*
#undef RGBLED_NUM
diff --git a/keyboards/lily58/keymaps/yuchi/keymap.c b/keyboards/lily58/keymaps/yuchi/keymap.c
index d708dbec76..13b6cb1687 100644
--- a/keyboards/lily58/keymaps/yuchi/keymap.c
+++ b/keyboards/lily58/keymaps/yuchi/keymap.c
@@ -1,7 +1,23 @@
#include QMK_KEYBOARD_H
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+
extern keymap_config_t keymap_config;
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
@@ -89,28 +105,103 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | |-------. ,-------| | | | | | |
+ * | | | | | | |-------. ,-------| | |RGB ON| HUE+ | SAT+ | VAL+ |
* |------+------+------+------+------+------| | | |------+------+------+------+------+------|
- * | | | | | | |-------| |-------| | | | | | |
+ * | | | | | | |-------| |-------| | | MODE | HUE- | SAT- | VAL- |
* `-----------------------------------------/ / \ \-----------------------------------------'
* |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
* | | | |/ / \ \ | | | |
- * `-------------------''-------' '------''--------------------'
+ * `----------------------------' '------''--------------------'
*/
[_ADJUST] = LAYOUT( \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD,\
_______, _______, _______, _______, _______, _______, _______, _______ \
)
};
+int RGB_current_mode;
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+// const char *read_mode_icon(bool swap);
+// const char *read_host_led_state(void);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (is_master) {
+ // If you want to change the display of OLED, you need to change here
+ matrix_write_ln(matrix, read_layer_state());
+ matrix_write_ln(matrix, read_keylog());
+ matrix_write_ln(matrix, read_keylogs());
+ //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
+ //matrix_write_ln(matrix, read_host_led_state());
+ //matrix_write_ln(matrix, read_timelog());
+ } else {
+ matrix_write(matrix, read_logo());
+ }
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ matrix_render_user(&matrix);
+ matrix_update(&display, &matrix);
+}
+#endif//SSD1306OLED
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+#ifdef SSD1306OLED
+ set_keylog(keycode, record);
+#endif
+ // set_timelog();
+ }
+
switch (keycode) {
case QWERTY:
- if (record->event.pressed) {
+ if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
@@ -118,31 +209,31 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
}
return true;
} \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/yuchi/rules.mk b/keyboards/lily58/keymaps/yuchi/rules.mk
index 73777a1b78..922fac6b69 100644
--- a/keyboards/lily58/keymaps/yuchi/rules.mk
+++ b/keyboards/lily58/keymaps/yuchi/rules.mk
@@ -1,22 +1,30 @@
-
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
-
-OLED_ENABLE = no
-RGBLIGHT_ENABLE = no
-
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-ONEHAND_ENABLE = no # Enable one-hand typing
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/timelogger.c \
diff --git a/keyboards/lily58/lib/glcdfont.c b/keyboards/lily58/lib/glcdfont.c
new file mode 100644
index 0000000000..c691ea9d0b
--- /dev/null
+++ b/keyboards/lily58/lib/glcdfont.c
@@ -0,0 +1,243 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#ifndef FONT5X7_H
+#define FONT5X7_H
+
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/pgmspace.h>
+#elif defined(ESP8266)
+ #include <pgmspace.h>
+#else
+ #define PROGMEM
+#endif
+
+// Standard ASCII 5x7 font
+const unsigned char font[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+ 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+ 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+ 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+ 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+ 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+ 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+ 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+ 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+ 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+ 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+ 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+ 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+ 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+ 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+ 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+ 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+ 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
+ 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+ 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
+ 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
+ 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+ 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+ 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+ 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
+ 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
+ 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
+ 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
+ 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+ 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+ 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+ 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+ 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
+ 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+ 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
+ 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
+ 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
+ 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
+ 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
+ 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
+ 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+ 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+ 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
+ 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
+ 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+ 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
+ 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+ 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
+ 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
+ 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
+ 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
+ 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
+ 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
+ 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+ 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
+ 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
+ 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
+ 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
+ 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+ 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
+ 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
+ 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+ 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
+ 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
+ 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
+ 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
+ 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
+ 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
+ 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
+ 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
+ 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
+ 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
+ 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
+ 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
+ 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
+ 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+ 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
+ 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
+ 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
+ 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+ 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+ 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+ 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xE0, 0x70, 0x18,
+ 0x0C, 0x18, 0x30, 0xE0, 0x80, 0x00,
+ 0x00, 0x10, 0xF8, 0x90, 0x10, 0x30,
+ 0x78, 0x30, 0x10, 0xB8, 0xFC, 0x38,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xF8, 0xFC, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
+ 0x9C, 0x1C, 0x00, 0x00, 0x00, 0x00,
+ 0xF8, 0xFC, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1C, 0xFC, 0xF8,
+ 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0xE0, 0xF8, 0x7C, 0x1C,
+ 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFC,
+ 0xFC, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8,
+ 0x38, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x3C, 0xF8, 0xF0, 0xE0, 0x00,
+ 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+ 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
+ 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
+ 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
+ 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
+ 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
+ 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
+ 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F,
+ 0xBC, 0xE0, 0x81, 0x81, 0x81, 0x83,
+ 0x83, 0x82, 0x87, 0x0C, 0x18, 0x30,
+ 0x60, 0xC0, 0x00, 0x00, 0x1F, 0xFE,
+ 0x90, 0xB9, 0xFF, 0xBB, 0x91, 0x98,
+ 0x3C, 0x18, 0x11, 0x13, 0x3F, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0F, 0x7F, 0xF8, 0xE0, 0x80, 0xF0,
+ 0xFC, 0x3F, 0x0F, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x3C,
+ 0x78, 0xF8, 0xF0, 0xE0, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0xC3, 0xE7, 0xFF,
+ 0x7E, 0x3C, 0x38, 0x78, 0x78, 0x70,
+ 0x70, 0xF8, 0xFF, 0xDF, 0x87, 0x00,
+ 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
+ 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
+ 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
+ 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
+ 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
+ 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
+ 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x3C, 0x24, 0x66, 0x63, 0x41,
+ 0xC1, 0x81, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x81, 0xC1, 0x41, 0x62,
+ 0x38, 0x6C, 0x4C, 0xC6, 0x81, 0x81,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x81,
+ 0xC1, 0x43, 0x62, 0x36, 0x1C, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0x80, 0x00, 0x00, 0x00, 0x7F,
+ 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xC0, 0x80, 0x00,
+ 0x00, 0x00, 0xE0, 0xE0, 0xC0, 0xC0,
+ 0xC0, 0xE0, 0xF9, 0x7F, 0x1F, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x70, 0xF0, 0xE0,
+ 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0,
+ 0xF0, 0xF8, 0x7F, 0x3F, 0x0F, 0x00,
+ 0x00, 0x00, 0x0F, 0x3F, 0x7F, 0xF9,
+ 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0xE0, 0xF9, 0x7F, 0x3F, 0x1F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+#endif // FONT5X7_H
diff --git a/keyboards/lily58/lib/host_led_state_reader.c b/keyboards/lily58/lib/host_led_state_reader.c
new file mode 100644
index 0000000000..0e22173b1d
--- /dev/null
+++ b/keyboards/lily58/lib/host_led_state_reader.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include "lily58.h"
+
+char host_led_state_str[24];
+
+const char *read_host_led_state(void)
+{
+ uint8_t leds = host_keyboard_leds();
+ snprintf(host_led_state_str, sizeof(host_led_state_str), "NL:%s CL:%s SL:%s",
+ (leds & (1 << USB_LED_NUM_LOCK)) ? "on" : "- ",
+ (leds & (1 << USB_LED_CAPS_LOCK)) ? "on" : "- ",
+ (leds & (1 << USB_LED_SCROLL_LOCK)) ? "on" : "- ");
+
+ return host_led_state_str;
+}
diff --git a/keyboards/lily58/lib/keylogger.c b/keyboards/lily58/lib/keylogger.c
new file mode 100644
index 0000000000..a1bd476d20
--- /dev/null
+++ b/keyboards/lily58/lib/keylogger.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+#include "lily58.h"
+
+char keylog_str[24] = {};
+char keylogs_str[21] = {};
+int keylogs_str_idx = 0;
+
+const char code_to_name[60] = {
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+ 'R', 'E', 'B', 'T', ' ', ' ', ' ', ' ', ' ', ' ',
+ ' ', ';', '\'', ' ', ',', '.', '/', ' ', ' ', ' '};
+
+void set_keylog(uint16_t keycode, keyrecord_t *record) {
+ char name = ' ';
+ if (keycode < 60) {
+ name = code_to_name[keycode];
+ }
+
+ // update keylog
+ snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
+ record->event.key.row, record->event.key.col,
+ keycode, name);
+
+ // update keylogs
+ if (keylogs_str_idx == sizeof(keylogs_str) - 1) {
+ keylogs_str_idx = 0;
+ for (int i = 0; i < sizeof(keylogs_str) - 1; i++) {
+ keylogs_str[i] = ' ';
+ }
+ }
+
+ keylogs_str[keylogs_str_idx] = name;
+ keylogs_str_idx++;
+}
+
+const char *read_keylog(void) {
+ return keylog_str;
+}
+
+const char *read_keylogs(void) {
+ return keylogs_str;
+}
diff --git a/keyboards/lily58/lib/layer_state_reader.c b/keyboards/lily58/lib/layer_state_reader.c
new file mode 100644
index 0000000000..58f406bbc9
--- /dev/null
+++ b/keyboards/lily58/lib/layer_state_reader.c
@@ -0,0 +1,35 @@
+
+#include QMK_KEYBOARD_H
+#include <stdio.h>
+#include "lily58.h"
+
+#define L_BASE 0
+#define L_LOWER 2
+#define L_RAISE 4
+#define L_ADJUST 65536
+#define L_ADJUST_TRI 65542
+
+char layer_state_str[24];
+
+const char *read_layer_state(void) {
+ switch (layer_state)
+ {
+ case L_BASE:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Default");
+ break;
+ case L_RAISE:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Raise");
+ break;
+ case L_LOWER:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Lower");
+ break;
+ case L_ADJUST:
+ case L_ADJUST_TRI:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Adjust");
+ break;
+ default:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Undef-%ld", layer_state);
+ }
+
+ return layer_state_str;
+}
diff --git a/keyboards/lily58/lib/logo_reader.c b/keyboards/lily58/lib/logo_reader.c
new file mode 100644
index 0000000000..9f8adb8466
--- /dev/null
+++ b/keyboards/lily58/lib/logo_reader.c
@@ -0,0 +1,11 @@
+#include "lily58.h"
+
+const char *read_logo(void) {
+ static char logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
+ 0};
+
+ return logo;
+}
diff --git a/keyboards/lily58/lib/mode_icon_reader.c b/keyboards/lily58/lib/mode_icon_reader.c
new file mode 100644
index 0000000000..2bce4a71b0
--- /dev/null
+++ b/keyboards/lily58/lib/mode_icon_reader.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include "lily58.h"
+
+char mode_icon[24];
+
+const char *read_mode_icon(bool swap) {
+ static char logo[][2][3] = {{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}};
+ if (swap == false) {
+ snprintf(mode_icon, sizeof(mode_icon), "%s\n%s", logo[0][0], logo[0][1]);
+ } else {
+ snprintf(mode_icon, sizeof(mode_icon), "%s\n%s", logo[1][0], logo[1][1]);
+ }
+
+ return mode_icon;
+}
diff --git a/keyboards/lily58/lib/rgb_state_reader.c b/keyboards/lily58/lib/rgb_state_reader.c
new file mode 100644
index 0000000000..e0efe2e528
--- /dev/null
+++ b/keyboards/lily58/lib/rgb_state_reader.c
@@ -0,0 +1,15 @@
+#ifdef RGBLIGHT_ENABLE
+
+#include QMK_KEYBOARD_H
+#include <stdio.h>
+
+extern rgblight_config_t rgblight_config;
+char rbf_info_str[24];
+const char *read_rgb_info(void) {
+
+ snprintf(rbf_info_str, sizeof(rbf_info_str), "%s %2d h%3d s%3d v%3d",
+ rgblight_config.enable ? "on" : "- ", rgblight_config.mode,
+ rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
+ return rbf_info_str;
+}
+#endif
diff --git a/keyboards/lily58/lib/timelogger.c b/keyboards/lily58/lib/timelogger.c
new file mode 100644
index 0000000000..bfbfbe8a21
--- /dev/null
+++ b/keyboards/lily58/lib/timelogger.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include "lily58.h"
+
+char timelog_str[24] = {};
+int last_time = 0;
+int elapsed_time = 0;
+
+void set_timelog(void) {
+ elapsed_time = timer_elapsed(last_time);
+ last_time = timer_read();
+ snprintf(timelog_str, sizeof(timelog_str), "lt:%5d, et:%5d", last_time, elapsed_time);
+}
+
+const char *read_timelog(void) {
+ return timelog_str;
+}
diff --git a/keyboards/lily58/lily58.c b/keyboards/lily58/lily58.c
index 697e3820c6..eacd90a82d 100644
--- a/keyboards/lily58/lily58.c
+++ b/keyboards/lily58/lily58.c
@@ -1 +1,10 @@
- #include "lily58.h"
+#include "lily58.h"
+#include "ssd1306.h"
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+#ifdef SSD1306OLED
+ return process_record_gfx(keycode,record) && process_record_user(keycode, record);
+#else
+ return process_record_user(keycode, record);
+#endif
+} \ No newline at end of file
diff --git a/keyboards/lily58/lily58.h b/keyboards/lily58/lily58.h
index 1d64dd7b2a..064f847dd2 100644
--- a/keyboards/lily58/lily58.h
+++ b/keyboards/lily58/lily58.h
@@ -1,28 +1,5 @@
-#ifndef LILY58_H
-#define LILY58_H
-
-#include "quantum.h"
+#pragma once
#ifdef KEYBOARD_lily58_rev1
#include "rev1.h"
#endif
-
-
-
-// Used to create a keymap using only KC_ prefixed keys
-#define LAYOUT_kc( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, L45, R40, R30, R31, R32, R33, R34, R35, \
- L41, L42, L43, L44, R41, R42, R43, R44 \
- ) \
- LAYOUT( \
- KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
- KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
- KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
- KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L45, KC_##R40, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, \
- KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##R41, KC_##R42, KC_##R43, KC_##R44 \
- )
-
-#endif
diff --git a/keyboards/lily58/readme.md b/keyboards/lily58/readme.md
index c71365e46b..cbf0c1eeb0 100644
--- a/keyboards/lily58/readme.md
+++ b/keyboards/lily58/readme.md
@@ -2,16 +2,14 @@
Lily58 is 6×4+5keys column-staggered split keyboard.
-![Lily58_01](https://user-images.githubusercontent.com/6285554/45210815-92744a00-b2cb-11e8-977a-8c1a93584f17.jpg)
-
-![Lily58_02](https://user-images.githubusercontent.com/6285554/45337733-7b33a600-b5c4-11e8-85b0-35f1cc9bf946.png)
-
+![Lily58_01](https://user-images.githubusercontent.com/6285554/50394214-72479880-079f-11e9-9d91-33fdbf1d7715.jpg)
+![2018-12-24 17 39 58](https://user-images.githubusercontent.com/6285554/50394779-05360200-07a3-11e9-82b5-066fd8907ecf.png)
Keyboard Maintainer: [Naoki Katahira](https://github.com/kata0510/) [Twitter:@F_YUUCHI](https://twitter.com/F_YUUCHI)
Hardware Supported: Lily58 PCB, ProMicro
Hardware Availability: [PCB & Case Data](https://github.com/kata0510/Lily58)
Make example for this keyboard (after setting up your build environment):
- make lily58:default
+ sudo make lily58:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/lily58/rev1/config.h b/keyboards/lily58/rev1/config.h
index a991e88322..0dee6a6946 100644
--- a/keyboards/lily58/rev1/config.h
+++ b/keyboards/lily58/rev1/config.h
@@ -19,12 +19,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-//#include QMK_KEYBOARD_CONFIG_H
-#include "config_common.h"
-
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFC51
-#define PRODUCT_ID 0x0058
+#define PRODUCT_ID 0x0058
#define DEVICE_VER 0x0100
#define MANUFACTURER F_YUUCHI
#define PRODUCT Lily58
@@ -51,9 +48,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCING_DELAY 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
+//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
+//#define LOCKING_RESYNC_ENABLE
/* key combination for command */
#define IS_COMMAND() ( \
@@ -62,8 +59,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-
-#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLED_NUM 12 // Number of LEDs
/*
* Feature disable options
@@ -81,4 +77,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
+//#define NO_ACTION_FUNCTION \ No newline at end of file
diff --git a/keyboards/lily58/rev1/matrix.c b/keyboards/lily58/rev1/matrix.c
new file mode 100755
index 0000000000..718cc57448
--- /dev/null
+++ b/keyboards/lily58/rev1/matrix.c
@@ -0,0 +1,357 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include <avr/io.h>
+#include <avr/wdt.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "split_util.h"
+#include "pro_micro.h"
+
+#ifdef USE_MATRIX_I2C
+# include "i2c.h"
+#else // USE_SERIAL
+# include "split_scomm.h"
+#endif
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+#define ERROR_DISCONNECT_COUNT 5
+
+static uint8_t debouncing = DEBOUNCE;
+static const int ROWS_PER_HAND = MATRIX_ROWS/2;
+static uint8_t error_count = 0;
+uint8_t is_master = 0 ;
+
+static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+static uint8_t matrix_master_scan(void);
+
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ debug_enable = true;
+ debug_matrix = true;
+ debug_mouse = true;
+ // initialize row and col
+ unselect_rows();
+ init_cols();
+
+ TX_RX_LED_INIT;
+ TXLED0;
+ RXLED0;
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ is_master = has_usb();
+
+ matrix_init_quantum();
+}
+
+uint8_t _matrix_scan(void)
+{
+ // Right hand is stored after the left in the matirx so, we need to offset it
+ int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
+
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
+ select_row(i);
+ _delay_us(30); // without this wait read unstable value.
+ matrix_row_t cols = read_cols();
+ if (matrix_debouncing[i+offset] != cols) {
+ matrix_debouncing[i+offset] = cols;
+ debouncing = DEBOUNCE;
+ }
+ unselect_rows();
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
+ matrix[i+offset] = matrix_debouncing[i+offset];
+ }
+ }
+ }
+
+ return 1;
+}
+
+#ifdef USE_MATRIX_I2C
+
+// Get rows from other half over i2c
+int i2c_transaction(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+
+ int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) goto i2c_error;
+
+ // start of matrix stored at 0x00
+ err = i2c_master_write(0x00);
+ if (err) goto i2c_error;
+
+ // Start read
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
+ if (err) goto i2c_error;
+
+ if (!err) {
+ int i;
+ for (i = 0; i < ROWS_PER_HAND-1; ++i) {
+ matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
+ }
+ matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
+ i2c_master_stop();
+ } else {
+i2c_error: // the cable is disconnceted, or something else went wrong
+ i2c_reset_state();
+ return err;
+ }
+
+ return 0;
+}
+
+#else // USE_SERIAL
+
+int serial_transaction(int master_changed) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+ int ret=serial_update_buffers(master_changed);
+#else
+ int ret=serial_update_buffers();
+#endif
+ if (ret ) {
+ if(ret==2) RXLED1;
+ return 1;
+ }
+ RXLED0;
+ memcpy(&matrix[slaveOffset],
+ (void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
+ return 0;
+}
+#endif
+
+uint8_t matrix_scan(void)
+{
+ if (is_master) {
+ matrix_master_scan();
+ }else{
+ matrix_slave_scan();
+ int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
+ memcpy(&matrix[offset],
+ (void *)serial_master_buffer, SERIAL_MASTER_BUFFER_LENGTH);
+ matrix_scan_quantum();
+ }
+ return 1;
+}
+
+
+uint8_t matrix_master_scan(void) {
+
+ int ret = _matrix_scan();
+ int mchanged = 1;
+
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+#ifdef USE_MATRIX_I2C
+// for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ /* i2c_slave_buffer[i] = matrix[offset+i]; */
+// i2c_slave_buffer[i] = matrix[offset+i];
+// }
+#else // USE_SERIAL
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ mchanged = memcmp((void *)serial_master_buffer,
+ &matrix[offset], SERIAL_MASTER_BUFFER_LENGTH);
+ #endif
+ memcpy((void *)serial_master_buffer,
+ &matrix[offset], SERIAL_MASTER_BUFFER_LENGTH);
+#endif
+
+#ifdef USE_MATRIX_I2C
+ if( i2c_transaction() ) {
+#else // USE_SERIAL
+ if( serial_transaction(mchanged) ) {
+#endif
+ // turn on the indicator led when halves are disconnected
+ TXLED1;
+
+ error_count++;
+
+ if (error_count > ERROR_DISCONNECT_COUNT) {
+ // reset other half if disconnected
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = 0;
+ }
+ }
+ } else {
+ // turn off the indicator led on no error
+ TXLED0;
+ error_count = 0;
+ }
+ matrix_scan_quantum();
+ return ret;
+}
+
+void matrix_slave_scan(void) {
+ _matrix_scan();
+
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+#ifdef USE_MATRIX_I2C
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ /* i2c_slave_buffer[i] = matrix[offset+i]; */
+ i2c_slave_buffer[i] = matrix[offset+i];
+ }
+#else // USE_SERIAL
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ int change = 0;
+ #endif
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ if( serial_slave_buffer[i] != matrix[offset+i] )
+ change = 1;
+ #endif
+ serial_slave_buffer[i] = matrix[offset+i];
+ }
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ slave_buffer_change_count += change;
+ #endif
+#endif
+}
+
+bool matrix_is_modified(void)
+{
+ if (debouncing) return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ pbin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+static void init_cols(void)
+{
+ for(int x = 0; x < MATRIX_COLS; x++) {
+ _SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF);
+ _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
+ }
+}
+
+static matrix_row_t read_cols(void)
+{
+ matrix_row_t result = 0;
+ for(int x = 0; x < MATRIX_COLS; x++) {
+ result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
+ }
+ return result;
+}
+
+static void unselect_rows(void)
+{
+ for(int x = 0; x < ROWS_PER_HAND; x++) {
+ _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
+ _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
+ }
+}
+
+static void select_row(uint8_t row)
+{
+ _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
+ _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
+}
diff --git a/keyboards/lily58/rev1/rev1.c b/keyboards/lily58/rev1/rev1.c
index 4c54d7717c..e78f2ccfa5 100644
--- a/keyboards/lily58/rev1/rev1.c
+++ b/keyboards/lily58/rev1/rev1.c
@@ -1,14 +1,8 @@
#include "lily58.h"
-void matrix_init_kb(void) {
-
- // // green led on
- // DDRD |= (1<<5);
- // PORTD &= ~(1<<5);
-
- // // orange led on
- // DDRB |= (1<<0);
- // PORTB &= ~(1<<0);
-
- matrix_init_user();
-}; \ No newline at end of file
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ //led_set_user(usb_led);
+}
+#endif \ No newline at end of file
diff --git a/keyboards/lily58/rev1/rev1.h b/keyboards/lily58/rev1/rev1.h
index a830463582..4949bf5372 100644
--- a/keyboards/lily58/rev1/rev1.h
+++ b/keyboards/lily58/rev1/rev1.h
@@ -5,6 +5,10 @@
//void promicro_bootloader_jmp(bool program);
#include "quantum.h"
+#ifdef RGBLIGHT_ENABLE
+//rgb led driver
+#include "ws2812.h"
+#endif
#ifdef USE_I2C
#include <stddef.h>
diff --git a/keyboards/lily58/rev1/rules.mk b/keyboards/lily58/rev1/rules.mk
index f845616741..7fc101bf2b 100644
--- a/keyboards/lily58/rev1/rules.mk
+++ b/keyboards/lily58/rev1/rules.mk
@@ -1 +1,3 @@
-BACKLIGHT_ENABLE = no \ No newline at end of file
+SRC += rev1/matrix.c
+SRC += rev1/split_util.c
+SRC += rev1/split_scomm.c \ No newline at end of file
diff --git a/keyboards/lily58/rev1/serial_config.h b/keyboards/lily58/rev1/serial_config.h
new file mode 100755
index 0000000000..4fab8e8ddf
--- /dev/null
+++ b/keyboards/lily58/rev1/serial_config.h
@@ -0,0 +1,4 @@
+#ifndef SOFT_SERIAL_PIN
+#define SOFT_SERIAL_PIN D2
+#define SERIAL_USE_MULTI_TRANSACTION
+#endif
diff --git a/keyboards/lily58/rev1/split_scomm.c b/keyboards/lily58/rev1/split_scomm.c
new file mode 100755
index 0000000000..a1fe6ba5b8
--- /dev/null
+++ b/keyboards/lily58/rev1/split_scomm.c
@@ -0,0 +1,91 @@
+#ifdef USE_SERIAL
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE flexible API (using multi-type transaction function) --- */
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <split_scomm.h>
+#include "serial.h"
+#ifdef CONSOLE_ENABLE
+ #include <print.h>
+#endif
+
+uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
+uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+uint8_t volatile status_com = 0;
+uint8_t volatile status1 = 0;
+uint8_t slave_buffer_change_count = 0;
+uint8_t s_change_old = 0xff;
+uint8_t s_change_new = 0xff;
+
+SSTD_t transactions[] = {
+#define GET_SLAVE_STATUS 0
+ /* master buffer not changed, only recive slave_buffer_change_count */
+ { (uint8_t *)&status_com,
+ 0, NULL,
+ sizeof(slave_buffer_change_count), &slave_buffer_change_count,
+ },
+#define PUT_MASTER_GET_SLAVE_STATUS 1
+ /* master buffer changed need send, and recive slave_buffer_change_count */
+ { (uint8_t *)&status_com,
+ sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
+ sizeof(slave_buffer_change_count), &slave_buffer_change_count,
+ },
+#define GET_SLAVE_BUFFER 2
+ /* recive serial_slave_buffer */
+ { (uint8_t *)&status1,
+ 0, NULL,
+ sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
+ }
+};
+
+void serial_master_init(void)
+{
+ soft_serial_initiator_init(transactions, TID_LIMIT(transactions));
+}
+
+void serial_slave_init(void)
+{
+ soft_serial_target_init(transactions, TID_LIMIT(transactions));
+}
+
+// 0 => no error
+// 1 => slave did not respond
+// 2 => checksum error
+int serial_update_buffers(int master_update)
+{
+ int status, smatstatus;
+ static int need_retry = 0;
+
+ if( s_change_old != s_change_new ) {
+ smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER);
+ if( smatstatus == TRANSACTION_END ) {
+ s_change_old = s_change_new;
+#ifdef CONSOLE_ENABLE
+ uprintf("slave matrix = %b %b %b %b\n",
+ serial_slave_buffer[0], serial_slave_buffer[1],
+ serial_slave_buffer[2], serial_slave_buffer[3]);
+#endif
+ }
+ } else {
+ // serial_slave_buffer dosen't change
+ smatstatus = TRANSACTION_END; // dummy status
+ }
+
+ if( !master_update && !need_retry) {
+ status = soft_serial_transaction(GET_SLAVE_STATUS);
+ } else {
+ status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS);
+ }
+ if( status == TRANSACTION_END ) {
+ s_change_new = slave_buffer_change_count;
+ need_retry = 0;
+ } else {
+ need_retry = 1;
+ }
+ return smatstatus;
+}
+
+#endif // SERIAL_USE_MULTI_TRANSACTION
+#endif /* USE_SERIAL */
diff --git a/keyboards/lily58/rev1/split_scomm.h b/keyboards/lily58/rev1/split_scomm.h
new file mode 100755
index 0000000000..873d8939d8
--- /dev/null
+++ b/keyboards/lily58/rev1/split_scomm.h
@@ -0,0 +1,24 @@
+#ifndef SPLIT_COMM_H
+#define SPLIT_COMM_H
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
+#include "serial.h"
+
+#else
+/* --- USE flexible API (using multi-type transaction function) --- */
+// Buffers for master - slave communication
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+extern uint8_t slave_buffer_change_count;
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(int master_changed);
+
+#endif
+
+#endif /* SPLIT_COMM_H */
diff --git a/keyboards/lily58/rev1/split_util.c b/keyboards/lily58/rev1/split_util.c
new file mode 100755
index 0000000000..e1ff8b4379
--- /dev/null
+++ b/keyboards/lily58/rev1/split_util.c
@@ -0,0 +1,70 @@
+#include <avr/io.h>
+#include <avr/wdt.h>
+#include <avr/power.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/eeprom.h>
+#include "split_util.h"
+#include "matrix.h"
+#include "keyboard.h"
+
+#ifdef USE_MATRIX_I2C
+# include "i2c.h"
+#else
+# include "split_scomm.h"
+#endif
+
+volatile bool isLeftHand = true;
+
+static void setup_handedness(void) {
+ #ifdef EE_HANDS
+ isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
+ #else
+ // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c
+ #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
+ isLeftHand = !has_usb();
+ #else
+ isLeftHand = has_usb();
+ #endif
+ #endif
+}
+
+static void keyboard_master_setup(void) {
+
+#ifdef USE_MATRIX_I2C
+ i2c_master_init();
+#else
+ serial_master_init();
+#endif
+}
+
+static void keyboard_slave_setup(void) {
+
+#ifdef USE_MATRIX_I2C
+ i2c_slave_init(SLAVE_I2C_ADDRESS);
+#else
+ serial_slave_init();
+#endif
+}
+
+bool has_usb(void) {
+ USBCON |= (1 << OTGPADE); //enables VBUS pad
+ _delay_us(5);
+ return (USBSTA & (1<<VBUS)); //checks state of VBUS
+}
+
+void split_keyboard_setup(void) {
+ setup_handedness();
+
+ if (has_usb()) {
+ keyboard_master_setup();
+ } else {
+ keyboard_slave_setup();
+ }
+ sei();
+}
+
+// this code runs before the usb and keyboard is initialized
+void matrix_setup(void) {
+ split_keyboard_setup();
+}
diff --git a/keyboards/lily58/rev1/split_util.h b/keyboards/lily58/rev1/split_util.h
new file mode 100755
index 0000000000..687ca19bd3
--- /dev/null
+++ b/keyboards/lily58/rev1/split_util.h
@@ -0,0 +1,19 @@
+#ifndef SPLIT_KEYBOARD_UTIL_H
+#define SPLIT_KEYBOARD_UTIL_H
+
+#include <stdbool.h>
+#include "eeconfig.h"
+
+#define SLAVE_I2C_ADDRESS 0x32
+
+extern volatile bool isLeftHand;
+
+// slave version of matix scan, defined in matrix.c
+void matrix_slave_scan(void);
+
+void split_keyboard_setup(void);
+bool has_usb(void);
+
+void matrix_master_OLED_init (void);
+
+#endif
diff --git a/keyboards/lily58/rules.mk b/keyboards/lily58/rules.mk
index ad8ad585e9..f6b922eeac 100644
--- a/keyboards/lily58/rules.mk
+++ b/keyboards/lily58/rules.mk
@@ -1,7 +1,10 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c
+SRC += i2c.c
+SRC += serial.c
+SRC += ssd1306.c
+
+# if firmware size over limit, try this option
+# CFLAGS += -flto
+
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
@@ -38,16 +41,15 @@ ARCH = AVR8
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
@@ -65,7 +67,7 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = no
-USE_I2C = no
+USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/lily58/serial.c b/keyboards/lily58/serial.c
index f85dc28dc3..325c29a3f7 100644..100755
--- a/keyboards/lily58/serial.c
+++ b/keyboards/lily58/serial.c
@@ -1,5 +1,10 @@
/*
* WARNING: be careful changing this code, it is very timing dependent
+ *
+ * 2018-10-28 checked
+ * avr-gcc 4.9.2
+ * avr-gcc 5.4.0
+ * avr-gcc 7.3.0
*/
#ifndef F_CPU
@@ -14,9 +19,58 @@
#include "serial.h"
//#include <pro_micro.h>
-#ifdef USE_SERIAL
-//#ifndef USE_SERIAL_PD2
+#ifdef SOFT_SERIAL_PIN
+#ifdef __AVR_ATmega32U4__
+ // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial.
+ #ifdef USE_I2C
+ #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1
+ #error Using ATmega32U4 I2C, so can not use PD0, PD1
+ #endif
+ #endif
+
+ #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3
+ #define SERIAL_PIN_DDR DDRD
+ #define SERIAL_PIN_PORT PORTD
+ #define SERIAL_PIN_INPUT PIND
+ #if SOFT_SERIAL_PIN == D0
+ #define SERIAL_PIN_MASK _BV(PD0)
+ #define EIMSK_BIT _BV(INT0)
+ #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01)))
+ #define SERIAL_PIN_INTERRUPT INT0_vect
+ #elif SOFT_SERIAL_PIN == D1
+ #define SERIAL_PIN_MASK _BV(PD1)
+ #define EIMSK_BIT _BV(INT1)
+ #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11)))
+ #define SERIAL_PIN_INTERRUPT INT1_vect
+ #elif SOFT_SERIAL_PIN == D2
+ #define SERIAL_PIN_MASK _BV(PD2)
+ #define EIMSK_BIT _BV(INT2)
+ #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21)))
+ #define SERIAL_PIN_INTERRUPT INT2_vect
+ #elif SOFT_SERIAL_PIN == D3
+ #define SERIAL_PIN_MASK _BV(PD3)
+ #define EIMSK_BIT _BV(INT3)
+ #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31)))
+ #define SERIAL_PIN_INTERRUPT INT3_vect
+ #endif
+ #elif SOFT_SERIAL_PIN == E6
+ #define SERIAL_PIN_DDR DDRE
+ #define SERIAL_PIN_PORT PORTE
+ #define SERIAL_PIN_INPUT PINE
+ #define SERIAL_PIN_MASK _BV(PE6)
+ #define EIMSK_BIT _BV(INT6)
+ #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61)))
+ #define SERIAL_PIN_INTERRUPT INT6_vect
+ #else
+ #error invalid SOFT_SERIAL_PIN value
+ #endif
+
+#else
+ #error serial.c now support ATmega32U4 only
+#endif
+
+//////////////// for backward compatibility ////////////////////////////////
#ifndef SERIAL_USE_MULTI_TRANSACTION
/* --- USE Simple API (OLD API, compatible with let's split serial.c) */
#if SERIAL_SLAVE_BUFFER_LENGTH > 0
@@ -43,56 +97,118 @@ SSTD_t transactions[] = {
};
void serial_master_init(void)
-{ soft_serial_initiator_init(transactions); }
+{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
void serial_slave_init(void)
-{ soft_serial_target_init(transactions); }
+{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
// 0 => no error
// 1 => slave did not respond
// 2 => checksum error
int serial_update_buffers()
-{ return soft_serial_transaction(); }
+{
+ int result;
+ result = soft_serial_transaction();
+ return result;
+}
-#endif // Simple API (OLD API, compatible with let's split serial.c)
+#endif // end of Simple API (OLD API, compatible with let's split serial.c)
+////////////////////////////////////////////////////////////////////////////
#define ALWAYS_INLINE __attribute__((always_inline))
#define NO_INLINE __attribute__((noinline))
#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
-// Serial pulse period in microseconds.
-#define TID_SEND_ADJUST 14
+// parity check
+#define ODD_PARITY 1
+#define EVEN_PARITY 0
+#define PARITY EVEN_PARITY
+
+#ifdef SERIAL_DELAY
+ // custom setup in config.h
+ // #define TID_SEND_ADJUST 2
+ // #define SERIAL_DELAY 6 // micro sec
+ // #define READ_WRITE_START_ADJUST 30 // cycles
+ // #define READ_WRITE_WIDTH_ADJUST 8 // cycles
+#else
+// ============ Standard setups ============
+
+#ifndef SELECT_SOFT_SERIAL_SPEED
+#define SELECT_SOFT_SERIAL_SPEED 1
+// 0: about 189kbps
+// 1: about 137kbps (default)
+// 2: about 75kbps
+// 3: about 39kbps
+// 4: about 26kbps
+// 5: about 20kbps
+#endif
-#define SELECT_SERIAL_SPEED 1
-#if SELECT_SERIAL_SPEED == 0
+#if __GNUC__ < 6
+ #define TID_SEND_ADJUST 14
+#else
+ #define TID_SEND_ADJUST 2
+#endif
+
+#if SELECT_SOFT_SERIAL_SPEED == 0
// Very High speed
#define SERIAL_DELAY 4 // micro sec
- #define READ_WRITE_START_ADJUST 33 // cycles
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
-#elif SELECT_SERIAL_SPEED == 1
+ #if __GNUC__ < 6
+ #define READ_WRITE_START_ADJUST 33 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_START_ADJUST 34 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 1
// High speed
#define SERIAL_DELAY 6 // micro sec
- #define READ_WRITE_START_ADJUST 30 // cycles
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
-#elif SELECT_SERIAL_SPEED == 2
+ #if __GNUC__ < 6
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_START_ADJUST 33 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 2
// Middle speed
#define SERIAL_DELAY 12 // micro sec
#define READ_WRITE_START_ADJUST 30 // cycles
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
-#elif SELECT_SERIAL_SPEED == 3
+ #if __GNUC__ < 6
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 3
// Low speed
#define SERIAL_DELAY 24 // micro sec
#define READ_WRITE_START_ADJUST 30 // cycles
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
-#elif SELECT_SERIAL_SPEED == 4
+ #if __GNUC__ < 6
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 4
// Very Low speed
- #define SERIAL_DELAY 50 // micro sec
+ #define SERIAL_DELAY 36 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #if __GNUC__ < 6
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 5
+ // Ultra Low speed
+ #define SERIAL_DELAY 48 // micro sec
#define READ_WRITE_START_ADJUST 30 // cycles
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #if __GNUC__ < 6
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
#else
-#error Illegal Serial Speed
-#endif
-
+#error invalid SELECT_SOFT_SERIAL_SPEED value
+#endif /* SELECT_SOFT_SERIAL_SPEED */
+#endif /* SERIAL_DELAY */
#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
@@ -106,17 +222,21 @@ int serial_update_buffers()
#endif
static SSTD_t *Transaction_table = NULL;
+static uint8_t Transaction_table_size = 0;
+inline static void serial_delay(void) ALWAYS_INLINE;
inline static
void serial_delay(void) {
_delay_us(SERIAL_DELAY);
}
+inline static void serial_delay_half1(void) ALWAYS_INLINE;
inline static
void serial_delay_half1(void) {
_delay_us(SERIAL_DELAY_HALF1);
}
+inline static void serial_delay_half2(void) ALWAYS_INLINE;
inline static
void serial_delay_half2(void) {
_delay_us(SERIAL_DELAY_HALF2);
@@ -136,6 +256,7 @@ void serial_input_with_pullup(void) {
SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
}
+inline static uint8_t serial_read_pin(void) ALWAYS_INLINE;
inline static
uint8_t serial_read_pin(void) {
return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
@@ -153,30 +274,28 @@ void serial_high(void) {
SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
}
-void soft_serial_initiator_init(SSTD_t *sstd_table)
+void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size)
{
Transaction_table = sstd_table;
+ Transaction_table_size = (uint8_t)sstd_table_size;
serial_output();
serial_high();
}
-void soft_serial_target_init(SSTD_t *sstd_table)
+void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size)
{
Transaction_table = sstd_table;
+ Transaction_table_size = (uint8_t)sstd_table_size;
serial_input_with_pullup();
-#if SERIAL_PIN_MASK == _BV(PD0)
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-#elif SERIAL_PIN_MASK == _BV(PD2)
- // Enable INT2
- EIMSK |= _BV(INT2);
- // Trigger on falling edge of INT2
- EICRA &= ~(_BV(ISC20) | _BV(ISC21));
+ // Enable INT0-INT3,INT6
+ EIMSK |= EIMSK_BIT;
+#if SERIAL_PIN_MASK == _BV(PE6)
+ // Trigger on falling edge of INT6
+ EICRB &= EICRx_BIT;
#else
- #error unknown SERIAL_PIN_MASK value
+ // Trigger on falling edge of INT0-INT3
+ EICRA &= EICRx_BIT;
#endif
}
@@ -192,7 +311,7 @@ void sync_recv(void) {
}
// Used by the reciver to send a synchronization signal to the sender.
-static void sync_send(void)NO_INLINE;
+static void sync_send(void) NO_INLINE;
static
void sync_send(void) {
serial_low();
@@ -206,12 +325,12 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
uint8_t byte, i, p, pb;
_delay_sub_us(READ_WRITE_START_ADJUST);
- for( i = 0, byte = 0, p = 0; i < bit; i++ ) {
+ for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) {
serial_delay_half1(); // read the middle of pulses
if( serial_read_pin() ) {
- byte = (byte << 1) | 1; p ^= 1;
+ byte = (byte << 1) | 1; p ^= 1;
} else {
- byte = (byte << 1) | 0; p ^= 0;
+ byte = (byte << 1) | 0; p ^= 0;
}
_delay_sub_us(READ_WRITE_WIDTH_ADJUST);
serial_delay_half2();
@@ -231,13 +350,13 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE;
void serial_write_chunk(uint8_t data, uint8_t bit) {
uint8_t b, p;
- for( p = 0, b = 1<<(bit-1); b ; b >>= 1) {
- if(data & b) {
- serial_high(); p ^= 1;
- } else {
- serial_low(); p ^= 0;
- }
- serial_delay();
+ for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) {
+ if(data & b) {
+ serial_high(); p ^= 1;
+ } else {
+ serial_low(); p ^= 0;
+ }
+ serial_delay();
}
/* send parity bit */
if(p & 1) { serial_high(); }
@@ -289,6 +408,13 @@ void change_reciver2sender(void) {
serial_delay_half1(); //4
}
+static inline uint8_t nibble_bits_count(uint8_t bits)
+{
+ bits = (bits & 0x5) + (bits >> 1 & 0x5);
+ bits = (bits & 0x3) + (bits >> 2 & 0x3);
+ return bits;
+}
+
// interrupt handle to be used by the target device
ISR(SERIAL_PIN_INTERRUPT) {
@@ -298,12 +424,15 @@ ISR(SERIAL_PIN_INTERRUPT) {
SSTD_t *trans = Transaction_table;
#else
// recive transaction table index
- uint8_t tid;
+ uint8_t tid, bits;
uint8_t pecount = 0;
sync_recv();
- tid = serial_read_chunk(&pecount,4);
- if(pecount> 0)
+ bits = serial_read_chunk(&pecount,7);
+ tid = bits>>3;
+ bits = (bits&7) != nibble_bits_count(tid);
+ if( bits || pecount> 0 || tid > Transaction_table_size ) {
return;
+ }
serial_delay_half1();
serial_high(); // response step1 low->high
@@ -316,17 +445,17 @@ ISR(SERIAL_PIN_INTERRUPT) {
// target send phase
if( trans->target2initiator_buffer_size > 0 )
serial_send_packet((uint8_t *)trans->target2initiator_buffer,
- trans->target2initiator_buffer_size);
+ trans->target2initiator_buffer_size);
// target switch to input
change_sender2reciver();
// target recive phase
if( trans->initiator2target_buffer_size > 0 ) {
if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer,
- trans->initiator2target_buffer_size) ) {
- *trans->status = TRANSACTION_ACCEPTED;
+ trans->initiator2target_buffer_size) ) {
+ *trans->status = TRANSACTION_ACCEPTED;
} else {
- *trans->status = TRANSACTION_DATA_ERROR;
+ *trans->status = TRANSACTION_DATA_ERROR;
}
} else {
*trans->status = TRANSACTION_ACCEPTED;
@@ -350,6 +479,8 @@ int soft_serial_transaction(void) {
SSTD_t *trans = Transaction_table;
#else
int soft_serial_transaction(int sstd_index) {
+ if( sstd_index > Transaction_table_size )
+ return TRANSACTION_TYPE_ERROR;
SSTD_t *trans = &Transaction_table[sstd_index];
#endif
cli();
@@ -376,9 +507,10 @@ int soft_serial_transaction(int sstd_index) {
#else
// send transaction table index
+ int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index));
sync_send();
_delay_sub_us(TID_SEND_ADJUST);
- serial_write_chunk(sstd_index, 4);
+ serial_write_chunk(tid, 7);
serial_delay_half1();
// wait for the target response (step1 low->high)
@@ -390,12 +522,12 @@ int soft_serial_transaction(int sstd_index) {
// check if the target is present (step2 high->low)
for( int i = 0; serial_read_pin(); i++ ) {
if (i > SLAVE_INT_ACK_WIDTH + 1) {
- // slave failed to pull the line low, assume not present
- serial_output();
- serial_high();
- *trans->status = TRANSACTION_NO_RESPONSE;
- sei();
- return TRANSACTION_NO_RESPONSE;
+ // slave failed to pull the line low, assume not present
+ serial_output();
+ serial_high();
+ *trans->status = TRANSACTION_NO_RESPONSE;
+ sei();
+ return TRANSACTION_NO_RESPONSE;
}
_delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT);
}
@@ -405,12 +537,12 @@ int soft_serial_transaction(int sstd_index) {
// if the target is present syncronize with it
if( trans->target2initiator_buffer_size > 0 ) {
if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer,
- trans->target2initiator_buffer_size) ) {
- serial_output();
- serial_high();
- *trans->status = TRANSACTION_DATA_ERROR;
- sei();
- return TRANSACTION_DATA_ERROR;
+ trans->target2initiator_buffer_size) ) {
+ serial_output();
+ serial_high();
+ *trans->status = TRANSACTION_DATA_ERROR;
+ sei();
+ return TRANSACTION_DATA_ERROR;
}
}
@@ -420,7 +552,7 @@ int soft_serial_transaction(int sstd_index) {
// initiator send phase
if( trans->initiator2target_buffer_size > 0 ) {
serial_send_packet((uint8_t *)trans->initiator2target_buffer,
- trans->initiator2target_buffer_size);
+ trans->initiator2target_buffer_size);
}
// always, release the line when not in use
@@ -443,3 +575,16 @@ int soft_serial_get_and_clean_status(int sstd_index) {
#endif
#endif
+
+// Helix serial.c history
+// 2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc)
+// 2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4)
+// (adjusted with avr-gcc 4.9.2)
+// 2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78)
+// (adjusted with avr-gcc 4.9.2)
+// 2018-8-11 add support multi-type transaction (#3608, feb5e4aae)
+// (adjusted with avr-gcc 4.9.2)
+// 2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff)
+// (adjusted with avr-gcc 7.3.0)
+// 2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66)
+// (adjusted with avr-gcc 5.4.0, 7.3.0)
diff --git a/keyboards/lily58/serial.h b/keyboards/lily58/serial.h
index d2b7fd8e60..7e0c0847a4 100644..100755
--- a/keyboards/lily58/serial.h
+++ b/keyboards/lily58/serial.h
@@ -4,14 +4,16 @@
#include <stdbool.h>
// /////////////////////////////////////////////////////////////////
-// Need Soft Serial defines in serial_config.h
+// Need Soft Serial defines in config.h
// /////////////////////////////////////////////////////////////////
// ex.
-// #define SERIAL_PIN_DDR DDRD
-// #define SERIAL_PIN_PORT PORTD
-// #define SERIAL_PIN_INPUT PIND
-// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2
-// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2
+// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6
+// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5
+// // 1: about 137kbps (default)
+// // 2: about 75kbps
+// // 3: about 39kbps
+// // 4: about 26kbps
+// // 5: about 20kbps
//
// //// USE Simple API (OLD API, compatible with let's split serial.c)
// ex.
@@ -47,16 +49,18 @@ typedef struct _SSTD_t {
uint8_t target2initiator_buffer_size;
uint8_t *target2initiator_buffer;
} SSTD_t;
+#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t))
// initiator is transaction start side
-void soft_serial_initiator_init(SSTD_t *sstd_table);
+void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size);
// target is interrupt accept side
-void soft_serial_target_init(SSTD_t *sstd_table);
+void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size);
// initiator resullt
#define TRANSACTION_END 0
#define TRANSACTION_NO_RESPONSE 0x1
#define TRANSACTION_DATA_ERROR 0x2
+#define TRANSACTION_TYPE_ERROR 0x4
#ifndef SERIAL_USE_MULTI_TRANSACTION
int soft_serial_transaction(void);
#else
@@ -72,7 +76,7 @@ int soft_serial_transaction(int sstd_index);
// target:
// TRANSACTION_DATA_ERROR
// or TRANSACTION_ACCEPTED
-#define TRANSACTION_ACCEPTED 0x4
+#define TRANSACTION_ACCEPTED 0x8
#ifdef SERIAL_USE_MULTI_TRANSACTION
int soft_serial_get_and_clean_status(int sstd_index);
#endif
diff --git a/keyboards/lily58/serial_config.h b/keyboards/lily58/serial_config.h
index fef689038e..4fab8e8ddf 100644
--- a/keyboards/lily58/serial_config.h
+++ b/keyboards/lily58/serial_config.h
@@ -1,8 +1,4 @@
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD2)
-#define SERIAL_PIN_INTERRUPT INT2_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1 \ No newline at end of file
+#ifndef SOFT_SERIAL_PIN
+#define SOFT_SERIAL_PIN D2
+#define SERIAL_USE_MULTI_TRANSACTION
+#endif
diff --git a/keyboards/lily58/ssd1306.c b/keyboards/lily58/ssd1306.c
new file mode 100755
index 0000000000..4330c8497d
--- /dev/null
+++ b/keyboards/lily58/ssd1306.c
@@ -0,0 +1,344 @@
+#ifdef SSD1306OLED
+
+#include "ssd1306.h"
+#include "i2c.h"
+#include <string.h>
+#include "print.h"
+#ifdef ADAFRUIT_BLE_ENABLE
+#include "adafruit_ble.h"
+#endif
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#endif
+#include "sendchar.h"
+#include "timer.h"
+
+static const unsigned char font[] PROGMEM;
+
+// Set this to 1 to help diagnose early startup problems
+// when testing power-on with ble. Turn it off otherwise,
+// as the latency of printing most of the debug info messes
+// with the matrix scan, causing keys to drop.
+#define DEBUG_TO_SCREEN 0
+
+//static uint16_t last_battery_update;
+//static uint32_t vbat;
+//#define BatteryUpdateInterval 10000 /* milliseconds */
+
+// 'last_flush' is declared as uint16_t,
+// so this must be less than 65535
+#define ScreenOffInterval 60000 /* milliseconds */
+#if DEBUG_TO_SCREEN
+static uint8_t displaying;
+#endif
+static uint16_t last_flush;
+
+static bool force_dirty = true;
+
+// Write command sequence.
+// Returns true on success.
+static inline bool _send_cmd1(uint8_t cmd) {
+ bool res = false;
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
+ goto done;
+ }
+
+ if (i2c_master_write(0x0 /* command byte follows */)) {
+ print("failed to write control byte\n");
+
+ goto done;
+ }
+
+ if (i2c_master_write(cmd)) {
+ xprintf("failed to write command %d\n", cmd);
+ goto done;
+ }
+ res = true;
+done:
+ i2c_master_stop();
+ return res;
+}
+
+// Write 2-byte command sequence.
+// Returns true on success
+static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) {
+ if (!_send_cmd1(cmd)) {
+ return false;
+ }
+ return _send_cmd1(opr);
+}
+
+// Write 3-byte command sequence.
+// Returns true on success
+static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
+ if (!_send_cmd1(cmd)) {
+ return false;
+ }
+ if (!_send_cmd1(opr1)) {
+ return false;
+ }
+ return _send_cmd1(opr2);
+}
+
+#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;}
+#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
+#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
+
+static void clear_display(void) {
+ matrix_clear(&display);
+
+ // Clear all of the display bits (there can be random noise
+ // in the RAM on startup)
+ send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
+ send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ goto done;
+ }
+ if (i2c_master_write(0x40)) {
+ // Data mode
+ goto done;
+ }
+ for (uint8_t row = 0; row < MatrixRows; ++row) {
+ for (uint8_t col = 0; col < DisplayWidth; ++col) {
+ i2c_master_write(0);
+ }
+ }
+
+ display.dirty = false;
+
+done:
+ i2c_master_stop();
+}
+
+#if DEBUG_TO_SCREEN
+#undef sendchar
+static int8_t capture_sendchar(uint8_t c) {
+ sendchar(c);
+ iota_gfx_write_char(c);
+
+ if (!displaying) {
+ iota_gfx_flush();
+ }
+ return 0;
+}
+#endif
+
+bool iota_gfx_init(bool rotate) {
+ bool success = false;
+
+ i2c_master_init();
+ send_cmd1(DisplayOff);
+ send_cmd2(SetDisplayClockDiv, 0x80);
+ send_cmd2(SetMultiPlex, DisplayHeight - 1);
+
+ send_cmd2(SetDisplayOffset, 0);
+
+
+ send_cmd1(SetStartLine | 0x0);
+ send_cmd2(SetChargePump, 0x14 /* Enable */);
+ send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
+
+ if(rotate){
+ // the following Flip the display orientation 180 degrees
+ send_cmd1(SegRemap);
+ send_cmd1(ComScanInc);
+ }else{
+ // Flips the display orientation 0 degrees
+ send_cmd1(SegRemap | 0x1);
+ send_cmd1(ComScanDec);
+ }
+
+ send_cmd2(SetComPins, 0x2);
+ send_cmd2(SetContrast, 0x8f);
+ send_cmd2(SetPreCharge, 0xf1);
+ send_cmd2(SetVComDetect, 0x40);
+ send_cmd1(DisplayAllOnResume);
+ send_cmd1(NormalDisplay);
+ send_cmd1(DeActivateScroll);
+ send_cmd1(DisplayOn);
+
+ send_cmd2(SetContrast, 0); // Dim
+
+ clear_display();
+
+ success = true;
+
+ iota_gfx_flush();
+
+#if DEBUG_TO_SCREEN
+ print_set_sendchar(capture_sendchar);
+#endif
+
+done:
+ return success;
+}
+
+bool iota_gfx_off(void) {
+ bool success = false;
+
+ send_cmd1(DisplayOff);
+ success = true;
+
+done:
+ return success;
+}
+
+bool iota_gfx_on(void) {
+ bool success = false;
+
+ send_cmd1(DisplayOn);
+ success = true;
+
+done:
+ return success;
+}
+
+void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
+ *matrix->cursor = c;
+ ++matrix->cursor;
+
+ if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) {
+ // We went off the end; scroll the display upwards by one line
+ memmove(&matrix->display[0], &matrix->display[1],
+ MatrixCols * (MatrixRows - 1));
+ matrix->cursor = &matrix->display[MatrixRows - 1][0];
+ memset(matrix->cursor, ' ', MatrixCols);
+ }
+}
+
+void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
+ matrix->dirty = true;
+
+ if (c == '\n') {
+ // Clear to end of line from the cursor and then move to the
+ // start of the next line
+ uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols;
+
+ while (cursor_col++ < MatrixCols) {
+ matrix_write_char_inner(matrix, ' ');
+ }
+ return;
+ }
+
+ matrix_write_char_inner(matrix, c);
+}
+
+void iota_gfx_write_char(uint8_t c) {
+ matrix_write_char(&display, c);
+}
+
+void matrix_write(struct CharacterMatrix *matrix, const char *data) {
+ const char *end = data + strlen(data);
+ while (data < end) {
+ matrix_write_char(matrix, *data);
+ ++data;
+ }
+}
+
+void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) {
+ char data_ln[strlen(data)+2];
+ snprintf(data_ln, sizeof(data_ln), "%s\n", data);
+ matrix_write(matrix, data_ln);
+}
+
+void iota_gfx_write(const char *data) {
+ matrix_write(&display, data);
+}
+
+void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
+ while (true) {
+ uint8_t c = pgm_read_byte(data);
+ if (c == 0) {
+ return;
+ }
+ matrix_write_char(matrix, c);
+ ++data;
+ }
+}
+
+void iota_gfx_write_P(const char *data) {
+ matrix_write_P(&display, data);
+}
+
+void matrix_clear(struct CharacterMatrix *matrix) {
+ memset(matrix->display, ' ', sizeof(matrix->display));
+ matrix->cursor = &matrix->display[0][0];
+ matrix->dirty = true;
+}
+
+void iota_gfx_clear_screen(void) {
+ matrix_clear(&display);
+}
+
+void matrix_render(struct CharacterMatrix *matrix) {
+ last_flush = timer_read();
+ iota_gfx_on();
+#if DEBUG_TO_SCREEN
+ ++displaying;
+#endif
+
+ // Move to the home position
+ send_cmd3(PageAddr, 0, MatrixRows - 1);
+ send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ goto done;
+ }
+ if (i2c_master_write(0x40)) {
+ // Data mode
+ goto done;
+ }
+
+ for (uint8_t row = 0; row < MatrixRows; ++row) {
+ for (uint8_t col = 0; col < MatrixCols; ++col) {
+ const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth);
+
+ for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) {
+ uint8_t colBits = pgm_read_byte(glyph + glyphCol);
+ i2c_master_write(colBits);
+ }
+
+ // 1 column of space between chars (it's not included in the glyph)
+ //i2c_master_write(0);
+ }
+ }
+
+ matrix->dirty = false;
+
+done:
+ i2c_master_stop();
+#if DEBUG_TO_SCREEN
+ --displaying;
+#endif
+}
+
+void iota_gfx_flush(void) {
+ matrix_render(&display);
+}
+
+__attribute__ ((weak))
+void iota_gfx_task_user(void) {
+}
+
+void iota_gfx_task(void) {
+ iota_gfx_task_user();
+
+ if (display.dirty|| force_dirty) {
+ iota_gfx_flush();
+ force_dirty = false;
+ }
+
+ if (timer_elapsed(last_flush) > ScreenOffInterval) {
+ iota_gfx_off();
+ }
+}
+
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
+ force_dirty = true;
+ return true;
+}
+
+#endif
diff --git a/keyboards/lily58/ssd1306.h b/keyboards/lily58/ssd1306.h
new file mode 100755
index 0000000000..ea8c923280
--- /dev/null
+++ b/keyboards/lily58/ssd1306.h
@@ -0,0 +1,91 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stdio.h>
+#include "pincontrol.h"
+#include "action.h"
+
+enum ssd1306_cmds {
+ DisplayOff = 0xAE,
+ DisplayOn = 0xAF,
+
+ SetContrast = 0x81,
+ DisplayAllOnResume = 0xA4,
+
+ DisplayAllOn = 0xA5,
+ NormalDisplay = 0xA6,
+ InvertDisplay = 0xA7,
+ SetDisplayOffset = 0xD3,
+ SetComPins = 0xda,
+ SetVComDetect = 0xdb,
+ SetDisplayClockDiv = 0xD5,
+ SetPreCharge = 0xd9,
+ SetMultiPlex = 0xa8,
+ SetLowColumn = 0x00,
+ SetHighColumn = 0x10,
+ SetStartLine = 0x40,
+
+ SetMemoryMode = 0x20,
+ ColumnAddr = 0x21,
+ PageAddr = 0x22,
+
+ ComScanInc = 0xc0,
+ ComScanDec = 0xc8,
+ SegRemap = 0xa0,
+ SetChargePump = 0x8d,
+ ExternalVcc = 0x01,
+ SwitchCapVcc = 0x02,
+
+ ActivateScroll = 0x2f,
+ DeActivateScroll = 0x2e,
+ SetVerticalScrollArea = 0xa3,
+ RightHorizontalScroll = 0x26,
+ LeftHorizontalScroll = 0x27,
+ VerticalAndRightHorizontalScroll = 0x29,
+ VerticalAndLeftHorizontalScroll = 0x2a,
+};
+
+// Controls the SSD1306 128x32 OLED display via i2c
+
+#ifndef SSD1306_ADDRESS
+#define SSD1306_ADDRESS 0x3C
+#endif
+
+#define DisplayHeight 32
+#define DisplayWidth 128
+
+#define FontHeight 8
+#define FontWidth 6
+
+#define MatrixRows (DisplayHeight / FontHeight)
+#define MatrixCols (DisplayWidth / FontWidth)
+
+struct CharacterMatrix {
+ uint8_t display[MatrixRows][MatrixCols];
+ uint8_t *cursor;
+ bool dirty;
+};
+
+struct CharacterMatrix display;
+
+bool iota_gfx_init(bool rotate);
+void iota_gfx_task(void);
+bool iota_gfx_off(void);
+bool iota_gfx_on(void);
+void iota_gfx_flush(void);
+void iota_gfx_write_char(uint8_t c);
+void iota_gfx_write(const char *data);
+void iota_gfx_write_P(const char *data);
+void iota_gfx_clear_screen(void);
+
+void iota_gfx_task_user(void);
+
+void matrix_clear(struct CharacterMatrix *matrix);
+void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c);
+void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c);
+void matrix_write(struct CharacterMatrix *matrix, const char *data);
+void matrix_write_ln(struct CharacterMatrix *matrix, const char *data);
+void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
+void matrix_render(struct CharacterMatrix *matrix);
+
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record); \ No newline at end of file
diff --git a/keyboards/m10a/keymaps/default/rules.mk b/keyboards/m10a/keymaps/default/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/m10a/keymaps/default/rules.mk
+++ b/keyboards/m10a/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/m10a/keymaps/gam3cat/rules.mk b/keyboards/m10a/keymaps/gam3cat/rules.mk
index 00515a31e9..b09c2904f0 100644
--- a/keyboards/m10a/keymaps/gam3cat/rules.mk
+++ b/keyboards/m10a/keymaps/gam3cat/rules.mk
@@ -22,3 +22,4 @@ FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By defaul
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
KEY_LOCK_ENABLE = no # This enables key lock(+260)
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
+
diff --git a/keyboards/m10a/readme.md b/keyboards/m10a/readme.md
index 6e48b22857..7123e6462e 100644
--- a/keyboards/m10a/readme.md
+++ b/keyboards/m10a/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make m10a:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/massdrop/alt/keymaps/default/keymap.c b/keyboards/massdrop/alt/keymaps/default/keymap.c
index a5c443ffcd..7ffa53dcaa 100644
--- a/keyboards/massdrop/alt/keymaps/default/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/default/keymap.c
@@ -52,10 +52,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
diff --git a/keyboards/massdrop/alt/keymaps/mac/keymap.c b/keyboards/massdrop/alt/keymaps/mac/keymap.c
index d6978fd801..9fd4816ccf 100644
--- a/keyboards/massdrop/alt/keymaps/mac/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/mac/keymap.c
@@ -52,10 +52,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
diff --git a/keyboards/massdrop/alt/keymaps/reywood/keymap.c b/keyboards/massdrop/alt/keymaps/reywood/keymap.c
index 8b69f0e8eb..48b804efea 100644
--- a/keyboards/massdrop/alt/keymaps/reywood/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/reywood/keymap.c
@@ -52,10 +52,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
diff --git a/keyboards/massdrop/alt/matrix.c b/keyboards/massdrop/alt/matrix.c
index 892d38791c..472479d303 100644
--- a/keyboards/massdrop/alt/matrix.c
+++ b/keyboards/massdrop/alt/matrix.c
@@ -79,8 +79,6 @@ void matrix_init(void)
matrix_init_quantum();
}
-#define MATRIX_SCAN_DELAY 10 //Delay after setting a col to output (in us)
-
uint64_t mdebouncing = 0;
uint8_t matrix_scan(void)
{
@@ -89,9 +87,7 @@ uint8_t matrix_scan(void)
uint8_t col;
uint32_t scans[2]; //PA PB
- if (CLK_get_ms() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
-
- //DBG_1_OFF; //Profiling scans
+ if (timer_read64() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t)); //Zero the result buffer
@@ -99,7 +95,7 @@ uint8_t matrix_scan(void)
{
PORT->Group[col_ports[col]].OUTSET.reg = 1 << col_pins[col]; //Set col output
- CLK_delay_us(MATRIX_SCAN_DELAY); //Delay for output
+ wait_us(1); //Delay for output
scans[PA] = PORT->Group[PA].IN.reg & row_masks[PA]; //Read PA row pins data
scans[PB] = PORT->Group[PB].IN.reg & row_masks[PB]; //Read PB row pins data
@@ -132,11 +128,9 @@ uint8_t matrix_scan(void)
else
{
//Begin or extend debounce on change
- mdebouncing = CLK_get_ms() + DEBOUNCING_DELAY;
+ mdebouncing = timer_read64() + DEBOUNCING_DELAY;
}
- //DBG_1_ON; //Profiling scans
-
matrix_scan_quantum();
return 1;
diff --git a/keyboards/massdrop/ctrl/keymaps/default/keymap.c b/keyboards/massdrop/ctrl/keymaps/default/keymap.c
index 88c1ac3123..11597f9879 100644
--- a/keyboards/massdrop/ctrl/keymaps/default/keymap.c
+++ b/keyboards/massdrop/ctrl/keymaps/default/keymap.c
@@ -55,10 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
diff --git a/keyboards/massdrop/ctrl/keymaps/mac/keymap.c b/keyboards/massdrop/ctrl/keymaps/mac/keymap.c
index 6c5dfe19c0..badb566b37 100644
--- a/keyboards/massdrop/ctrl/keymaps/mac/keymap.c
+++ b/keyboards/massdrop/ctrl/keymaps/mac/keymap.c
@@ -55,10 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
diff --git a/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c b/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c
new file mode 100644
index 0000000000..eabd8d23a9
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c
@@ -0,0 +1,939 @@
+#include QMK_KEYBOARD_H
+
+// uint8_t keyboard_leds(void)
+#include <tmk_core/protocol/arm_atsam/main_arm_atsam.h>
+
+
+#if ISSI3733_LED_COUNT == 119
+# define KEY_LED_COUNT 87
+#elif ISSI3733_LED_COUNT == 105
+# define KEY_LED_COUNT 67
+#endif
+
+#define min(x, y) (x < y ? x : y)
+
+
+extern issi3733_led_t *lede;
+extern issi3733_led_t led_map[];
+extern led_disp_t disp;
+
+enum ctrl_keycodes {
+ L_BRI = SAFE_RANGE, //LED Brightness Increase
+ L_BRD, //LED Brightness Decrease
+ L_PTN, //LED Pattern Select Next
+ L_PTP, //LED Pattern Select Previous
+ L_PSI, //LED Pattern Speed Increase
+ L_PSD, //LED Pattern Speed Decrease
+ L_T_MD, //LED Toggle Mode
+ L_T_ONF, //LED Toggle On / Off
+ L_ON, //LED On
+ L_OFF, //LED Off
+ L_T_BR, //LED Toggle Breath Effect
+ L_T_PTD, //LED Toggle Scrolling Pattern Direction
+ U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
+ U_T_AGCR, //USB Toggle Automatic GCR control
+ DBG_TOG, //DEBUG Toggle On / Off
+ DBG_MTRX, //DEBUG Toggle Matrix Prints
+ DBG_KBD, //DEBUG Toggle Keyboard Prints
+ DBG_MOU, //DEBUG Toggle Mouse Prints
+ MD_BOOT, //Restart into bootloader after hold timeout
+
+ L_SP_PR, //LED Splash Pattern Select Previous
+ L_SP_NE, //LED Splash Pattern Select Next
+
+ L_SP_WD, //LED Splash Widen Wavefront width
+ L_SP_NW, //LED Splash Narrow Wavefront width
+
+ L_SP_FA, //LED Splash wave travel speed faster (shorter period)
+ L_SP_SL, //LED Splash wave travel speed slower (longer period)
+
+ L_CP_PR, //LED Color Pattern Select Previous
+ L_CP_NX, //LEB Color Pattern Select Next
+};
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+#define ______ KC_TRNS
+
+keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ 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, \
+ 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_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_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
+ L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, U_T_AUTO,U_T_AGCR,_______, MO(2), _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
+ L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ L_CP_NX, L_SP_SL, L_SP_WD, L_SP_FA, _______, _______, L_CP_NX, L_SP_SL, L_SP_WD, L_SP_FA, _______, _______, _______, _______, _______, _______, _______, \
+ L_CP_PR, L_SP_PR, L_SP_NW, L_SP_NE, _______, _______, L_CP_PR, L_SP_PR, L_SP_NW, L_SP_NE, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ /*
+ [X] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ */
+};
+
+// see: /tmk_core/common/keycode.h
+uint8_t KEYCODE_TO_LED_ID[256];
+uint8_t DISTANCE_MAP[KEY_LED_COUNT+1][KEY_LED_COUNT+1];
+struct user_led_t {
+ uint8_t state;
+ uint8_t r;
+ uint8_t g;
+ uint8_t b;
+} USER_LED[KEY_LED_COUNT] = {
+
+};
+
+struct {
+ uint8_t PATTERN_INDEX;
+ uint8_t WAVE_FRONT_WIDTH;
+ uint16_t WAVE_PERIOD;
+ uint8_t COLOR_PATTERN_INDEX;
+ uint8_t TRAVEL_DISTANCE;
+} USER_CONFIG = {
+ .PATTERN_INDEX = 1,
+ .WAVE_FRONT_WIDTH = 3,
+ .WAVE_PERIOD = 50,
+ .COLOR_PATTERN_INDEX = 0,
+ .TRAVEL_DISTANCE = 25,
+};
+
+uint8_t ktli(uint16_t keycode){
+ if(keycode < 256){
+ // the array is initialized in `matrix_init_user()`
+ return KEYCODE_TO_LED_ID[keycode];
+ }
+ switch(keycode){
+ // definition of MO(layer): quantum/quantum_keycodes.h: line 614
+ case MO(1): return 82;
+ }
+ return 0;
+};
+
+// Runs just one time when the keyboard initializes.
+static void init_keycode_to_led_map(void){
+ uint16_t LED_MAP[MATRIX_ROWS][MATRIX_COLS] = LAYOUT(
+ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
+ 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,
+ 36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,
+ 52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,
+#if KEY_LED_COUNT >= 87
+ 68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87
+#endif
+ );
+
+ uint16_t key = 0;
+ for(uint8_t y = 0; y < MATRIX_ROWS; ++y){
+ for(uint8_t x = 0; x < MATRIX_COLS; ++x){
+ key = keymaps[0][y][x];
+ if(key < 256){
+ KEYCODE_TO_LED_ID[key] = LED_MAP[y][x];
+ }
+ }
+ }
+}
+// https://docs.qmk.fm/#/feature_terminal
+#define KEY_POSITION_MAP_ROWS 6
+#define KEY_POSITION_MAP_COLUMNS 20
+static void init_distance_map(void){
+ uint16_t KEY_POSITION_MAP[KEY_POSITION_MAP_ROWS][KEY_POSITION_MAP_COLUMNS] = {
+ { KC_NO, KC_ESC, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, },
+ // { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, },
+ { KC_NO, 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_BSPC, KC_NO, KC_INS, KC_HOME, KC_PGUP, },
+ { KC_NO, 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_BSLS, KC_NO, KC_DEL, KC_END, KC_PGDN, },
+ { KC_NO, 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_ENT, KC_ENT, KC_NO, KC_NO, KC_NO, KC_NO, },
+ { KC_NO, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT, KC_RSFT, KC_NO, KC_NO, KC_UP, KC_NO, },
+ { KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_NO, MO(1), KC_APP, KC_RCTL, KC_RCTL, KC_RCTL, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, },
+ };
+ uint8_t columns = KEY_POSITION_MAP_COLUMNS;
+ uint8_t rows = KEY_POSITION_MAP_ROWS;
+
+ for(uint8_t y = 0; y < rows; ++y){
+ for(uint8_t x = 0; x < columns; ++x){
+ uint8_t id1 = ktli(KEY_POSITION_MAP[y][x]);
+
+ for(uint8_t j = y; j < rows; ++j){
+ for(uint8_t i = 0; i < columns; ++i){
+ uint8_t id2 = ktli(KEY_POSITION_MAP[j][i]);
+
+ if(id1 == id2) continue;
+
+ uint8_t dx = abs(i - x);
+ uint8_t dy = abs(j - y);
+ uint8_t dis = dx + dy;
+ if(i < x && j > y){
+ dis -= min(dx, dy);
+ }
+
+ uint8_t _dis = DISTANCE_MAP[id1][id2];
+ if(_dis && _dis <= dis) continue;
+ DISTANCE_MAP[id1][id2] = dis;
+ DISTANCE_MAP[id2][id1] = dis;
+ }
+ }
+ }
+ }
+}
+void matrix_init_user(void) {
+ init_keycode_to_led_map();
+ init_distance_map();
+};
+
+// /tmk_core/protocol/arm_atsam/led_matrix.c: line 244
+uint8_t led_enabled;
+float led_animation_speed;
+uint8_t led_animation_direction;
+uint8_t led_animation_orientation;
+uint8_t led_animation_breathing;
+uint8_t led_animation_breathe_cur;
+uint8_t breathe_step;
+uint8_t breathe_dir;
+uint64_t led_next_run;
+
+uint8_t led_animation_id;
+uint8_t led_lighting_mode;
+
+issi3733_led_t *led_cur;
+uint8_t led_per_run;
+float breathe_mult;
+
+// overrided /tmk_core/protocol/arm_atsam/led_matrix.c: line 484
+void rgb_matrix_init_user(void){
+ led_animation_speed = ANIMATION_SPEED_STEP * 15;
+ led_per_run = 15;
+}
+
+// overrided /tmk_core/protocol/arm_atsam/led_matrix.c: line 262
+void led_matrix_run(void)
+{
+ float ro;
+ float go;
+ float bo;
+ float po;
+ uint8_t led_this_run = 0;
+ led_setup_t *f = (led_setup_t*)led_setups[led_animation_id];
+
+ if (led_cur == 0) //Denotes start of new processing cycle in the case of chunked processing
+ {
+ led_cur = led_map;
+
+ disp.frame += 1;
+
+ breathe_mult = 1;
+
+ if (led_animation_breathing)
+ {
+ led_animation_breathe_cur += breathe_step * breathe_dir;
+
+ if (led_animation_breathe_cur >= BREATHE_MAX_STEP)
+ breathe_dir = -1;
+ else if (led_animation_breathe_cur <= BREATHE_MIN_STEP)
+ breathe_dir = 1;
+
+ //Brightness curve created for 256 steps, 0 - ~98%
+ breathe_mult = 0.000015 * led_animation_breathe_cur * led_animation_breathe_cur;
+ if (breathe_mult > 1) breathe_mult = 1;
+ else if (breathe_mult < 0) breathe_mult = 0;
+ }
+ }
+
+ uint8_t fcur = 0;
+ uint8_t fmax = 0;
+
+ //Frames setup
+ while (f[fcur].end != 1)
+ {
+ fcur++; //Count frames
+ }
+
+ fmax = fcur; //Store total frames count
+
+ struct user_led_t user_led_cur;
+ while (led_cur < lede && led_this_run < led_per_run)
+ {
+ ro = 0;
+ go = 0;
+ bo = 0;
+
+ uint8_t led_index = led_cur - led_map; // only this part differs from the original function.
+ if(led_index < KEY_LED_COUNT){ //
+ user_led_cur = USER_LED[led_index]; // `struct user_led_t USER_LED[]` is stored globally.
+ } //
+ //
+ if(led_index < KEY_LED_COUNT && user_led_cur.state){ // `user_led_cur` is just for convenience
+ ro = user_led_cur.r; //
+ go = user_led_cur.g; //
+ bo = user_led_cur.b; //
+ } //
+ else if (led_lighting_mode == LED_MODE_KEYS_ONLY && led_cur->scan == 255)
+ {
+ //Do not act on this LED
+ }
+ else if (led_lighting_mode == LED_MODE_NON_KEYS_ONLY && led_cur->scan != 255)
+ {
+ //Do not act on this LED
+ }
+ else if (led_lighting_mode == LED_MODE_INDICATORS_ONLY)
+ {
+ //Do not act on this LED (Only show indicators)
+ }
+ else
+ {
+ //Act on LED
+ for (fcur = 0; fcur < fmax; fcur++)
+ {
+
+ if (led_animation_orientation)
+ {
+ po = led_cur->py;
+ }
+ else
+ {
+ po = led_cur->px;
+ }
+
+ float pomod;
+ pomod = (float)(disp.frame % (uint32_t)(1000.0f / led_animation_speed)) / 10.0f * led_animation_speed;
+
+ //Add in any moving effects
+ if ((!led_animation_direction && f[fcur].ef & EF_SCR_R) || (led_animation_direction && (f[fcur].ef & EF_SCR_L)))
+ {
+ pomod *= 100.0f;
+ pomod = (uint32_t)pomod % 10000;
+ pomod /= 100.0f;
+
+ po -= pomod;
+
+ if (po > 100) po -= 100;
+ else if (po < 0) po += 100;
+ }
+ else if ((!led_animation_direction && f[fcur].ef & EF_SCR_L) || (led_animation_direction && (f[fcur].ef & EF_SCR_R)))
+ {
+ pomod *= 100.0f;
+ pomod = (uint32_t)pomod % 10000;
+ pomod /= 100.0f;
+ po += pomod;
+
+ if (po > 100) po -= 100;
+ else if (po < 0) po += 100;
+ }
+
+ //Check if LED's po is in current frame
+ if (po < f[fcur].hs) continue;
+ if (po > f[fcur].he) continue;
+ //note: < 0 or > 100 continue
+
+ //Calculate the po within the start-stop percentage for color blending
+ po = (po - f[fcur].hs) / (f[fcur].he - f[fcur].hs);
+
+ //Add in any color effects
+ if (f[fcur].ef & EF_OVER)
+ {
+ ro = (po * (f[fcur].re - f[fcur].rs)) + f[fcur].rs;// + 0.5;
+ go = (po * (f[fcur].ge - f[fcur].gs)) + f[fcur].gs;// + 0.5;
+ bo = (po * (f[fcur].be - f[fcur].bs)) + f[fcur].bs;// + 0.5;
+ }
+ else if (f[fcur].ef & EF_SUBTRACT)
+ {
+ ro -= (po * (f[fcur].re - f[fcur].rs)) + f[fcur].rs;// + 0.5;
+ go -= (po * (f[fcur].ge - f[fcur].gs)) + f[fcur].gs;// + 0.5;
+ bo -= (po * (f[fcur].be - f[fcur].bs)) + f[fcur].bs;// + 0.5;
+ }
+ else
+ {
+ ro += (po * (f[fcur].re - f[fcur].rs)) + f[fcur].rs;// + 0.5;
+ go += (po * (f[fcur].ge - f[fcur].gs)) + f[fcur].gs;// + 0.5;
+ bo += (po * (f[fcur].be - f[fcur].bs)) + f[fcur].bs;// + 0.5;
+ }
+ }
+ }
+
+ //Clamp values 0-255
+ if (ro > 255) ro = 255; else if (ro < 0) ro = 0;
+ if (go > 255) go = 255; else if (go < 0) go = 0;
+ if (bo > 255) bo = 255; else if (bo < 0) bo = 0;
+
+ if (led_animation_breathing)
+ {
+ ro *= breathe_mult;
+ go *= breathe_mult;
+ bo *= breathe_mult;
+ }
+
+ *led_cur->rgb.r = (uint8_t)ro;
+ *led_cur->rgb.g = (uint8_t)go;
+ *led_cur->rgb.b = (uint8_t)bo;
+
+#ifdef USB_LED_INDICATOR_ENABLE
+ if (keyboard_leds())
+ {
+ uint8_t kbled = keyboard_leds();
+ if (
+ #if USB_LED_NUM_LOCK_SCANCODE != 255
+ (led_cur->scan == USB_LED_NUM_LOCK_SCANCODE && kbled & (1<<USB_LED_NUM_LOCK)) ||
+ #endif //NUM LOCK
+ #if USB_LED_CAPS_LOCK_SCANCODE != 255
+ (led_cur->scan == USB_LED_CAPS_LOCK_SCANCODE && kbled & (1<<USB_LED_CAPS_LOCK)) ||
+ #endif //CAPS LOCK
+ #if USB_LED_SCROLL_LOCK_SCANCODE != 255
+ (led_cur->scan == USB_LED_SCROLL_LOCK_SCANCODE && kbled & (1<<USB_LED_SCROLL_LOCK)) ||
+ #endif //SCROLL LOCK
+ #if USB_LED_COMPOSE_SCANCODE != 255
+ (led_cur->scan == USB_LED_COMPOSE_SCANCODE && kbled & (1<<USB_LED_COMPOSE)) ||
+ #endif //COMPOSE
+ #if USB_LED_KANA_SCANCODE != 255
+ (led_cur->scan == USB_LED_KANA_SCANCODE && kbled & (1<<USB_LED_KANA)) ||
+ #endif //KANA
+ (0))
+ {
+ if (*led_cur->rgb.r > 127) *led_cur->rgb.r = 0;
+ else *led_cur->rgb.r = 255;
+ if (*led_cur->rgb.g > 127) *led_cur->rgb.g = 0;
+ else *led_cur->rgb.g = 255;
+ if (*led_cur->rgb.b > 127) *led_cur->rgb.b = 0;
+ else *led_cur->rgb.b = 255;
+ }
+ }
+#endif //USB_LED_INDICATOR_ENABLE
+
+ led_cur++;
+ led_this_run++;
+ }
+}
+
+#define KEY_STROKES_LENGTH 20
+struct {
+ bool alive;
+ uint8_t led_id;
+ uint32_t time;
+} KEY_STROKES[KEY_STROKES_LENGTH] = {{}};
+
+
+
+
+void set_led_rgb(uint8_t led_id, uint8_t r, uint8_t g, uint8_t b){
+ issi3733_led_t *target_led = (led_map + led_id);
+ *target_led->rgb.r = r;
+ *target_led->rgb.g = g;
+ *target_led->rgb.b = b;
+}
+
+
+uint8_t DISTANCE_FROM_LAST_KEYSTROKE[KEY_LED_COUNT+1];
+void calculate_keystroke_distance(void){
+ bool alive;
+ uint8_t led_id, period_passed;
+ uint32_t t;
+
+
+ for(uint8_t i = 0; i <= KEY_LED_COUNT; ++i){
+ DISTANCE_FROM_LAST_KEYSTROKE[i] = 0;
+ }
+
+ for(uint8_t i = 0; i < KEY_STROKES_LENGTH; ++i){
+ if(KEY_STROKES[i].alive){
+ t = timer_elapsed32(KEY_STROKES[i].time);
+ alive = 0;
+ led_id = KEY_STROKES[i].led_id;
+ period_passed = t / USER_CONFIG.WAVE_PERIOD;
+
+ uint8_t delta_period;
+ for(uint8_t j = 1; j <= KEY_LED_COUNT; ++j){
+ delta_period = period_passed - DISTANCE_MAP[led_id][j];
+ if(( delta_period < USER_CONFIG.WAVE_FRONT_WIDTH) && (
+ DISTANCE_MAP[led_id][j] <= USER_CONFIG.TRAVEL_DISTANCE
+ )){
+ switch(USER_CONFIG.PATTERN_INDEX){
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ DISTANCE_FROM_LAST_KEYSTROKE[j] += delta_period;
+ break;
+ default:
+ DISTANCE_FROM_LAST_KEYSTROKE[j] = 1;
+ break;
+ }
+ alive = 1;
+ }
+ }
+ KEY_STROKES[i].alive = alive;
+ }
+ }
+}
+
+#define COLOR_PATTERN_RGB_COUNT 18
+static uint8_t COLOR_PATTERNS[][COLOR_PATTERN_RGB_COUNT][3] = {
+ { // default rainbow color
+ {255, 0, 0}, {255, 0, 0}, {255, 127, 0},
+ {255, 127, 0}, {255, 255, 0}, {255, 255, 0},
+ {120, 255, 0}, {120, 255, 0}, { 0, 255, 0},
+ { 0, 255, 0}, { 0, 255, 120}, { 0, 255, 120},
+ { 0, 0, 255}, { 0, 0, 255}, { 75, 0, 130},
+ { 75, 0, 130}, { 43, 0, 130}, { 43, 0, 130},
+ }, { // light rainbow color
+ {248, 12, 18}, {238, 17, 0}, {255, 51, 17},
+ {255, 68, 32}, {255, 102, 68}, {255, 153, 51},
+ {254, 174, 45}, {204, 187, 51}, {208, 195, 16},
+ {170, 204, 34}, {105, 208, 37}, { 34, 204, 170},
+ { 18, 189, 185}, { 17, 170, 187}, { 68, 68, 221},
+ { 51, 17, 187}, { 59, 12, 189}, { 68, 34, 153},
+ }, { // white flat
+ {255, 255, 255}, {255, 255, 255}, {255, 255, 255},
+ {255, 255, 255}, {255, 255, 255}, {255, 255, 255},
+ {255, 255, 255}, {255, 255, 255}, {255, 255, 255},
+ {255, 255, 255}, {255, 255, 255}, {255, 255, 255},
+ {255, 255, 255}, {255, 255, 255}, {255, 255, 255},
+ {255, 255, 255}, {255, 255, 255}, {255, 255, 255},
+ }, { // white fade, cos curve
+ {255, 255, 255}, {255, 255, 255}, {252, 252, 252},
+ {247, 247, 247}, {240, 240, 240}, {232, 232, 232},
+ {221, 221, 221}, {209, 209, 209}, {196, 196, 196},
+ {181, 181, 181}, {164, 164, 164}, {147, 147, 147},
+ {128, 128, 128}, {108, 108, 108}, { 88, 88, 88},
+ { 66, 66, 66}, { 45, 45, 45}, { 23, 23, 23},
+ },
+};
+static const uint8_t COLOR_PATTERNS_COUNT = (
+ sizeof(COLOR_PATTERNS) / sizeof(COLOR_PATTERNS[0]));
+
+void set_user_led_rgb(uint8_t i, uint8_t r, uint8_t g, uint8_t b){
+ USER_LED[i-1].state = 1;
+ USER_LED[i-1].r = r;
+ USER_LED[i-1].g = g;
+ USER_LED[i-1].b = b;
+}
+void unset_user_led_rgb(uint8_t i){
+ USER_LED[i-1].state = 0;
+}
+void set_indicator_led_rgb(uint8_t i,
+ uint8_t layer, uint8_t r, uint8_t g, uint8_t b){
+ USER_LED[i-1].state |= 1 << layer;
+ USER_LED[i-1].r = r;
+ USER_LED[i-1].g = g;
+ USER_LED[i-1].b = b;
+}
+void unset_indicator_led_rgb(uint8_t i, uint8_t layer){
+ USER_LED[i-1].state &= ~(1 << layer);
+}
+
+void refresh_pattern_indicators(void){
+ static uint8_t GRV_123456[] = {
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ };
+
+ if(layer_state >= 0x04){
+ for(uint8_t i = 0; i < 7; ++i){
+ if(i == USER_CONFIG.PATTERN_INDEX){
+ set_indicator_led_rgb(ktli(GRV_123456[i]), 2, 0, 0, 255);
+ } else{
+ set_indicator_led_rgb(ktli(GRV_123456[i]), 2, 0, 255, 0);
+ }
+ }
+ } else{
+ for(uint8_t i = 0; i < 7; ++i){
+ unset_indicator_led_rgb(ktli(GRV_123456[i]), 2);
+ }
+ }
+}
+void refresh_color_pattern_indicators(void){
+ static uint8_t ZXCVBNM_COMM_DOT[] = {
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,
+ };
+
+ if(layer_state >= 0x04){
+ uint8_t (*c)[3] = &COLOR_PATTERNS[USER_CONFIG.COLOR_PATTERN_INDEX][0];
+ for(uint8_t i = 0; i < 9; ++i){
+ set_indicator_led_rgb(ktli(ZXCVBNM_COMM_DOT[i]),
+ 2, c[i][0], c[i][1], c[i][2]);
+ }
+ } else{
+ for(uint8_t i = 0; i < 9; ++i){
+ unset_indicator_led_rgb(ktli(ZXCVBNM_COMM_DOT[i]), 2);
+ }
+ }
+}
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ static uint32_t scan_timer = 0;
+ static uint8_t last_layer = 0;
+
+ uint8_t layer = 0;
+ if(layer_state >= 0x04){
+ layer = 2;
+ } else if(layer_state >= 0x02){
+ layer = 1;
+ }
+
+ calculate_keystroke_distance();
+
+
+ #define USE_PATTERN 0
+ #define BLACK_RGB 1
+ #define COLOR_RGB 2
+ uint8_t ci; // color index
+ uint8_t *rgb;
+ uint8_t handle_type;
+ uint8_t distance;
+ for(uint8_t i = 1; i <= KEY_LED_COUNT; ++i){
+ if(USER_LED[i-1].state >= 2) continue;
+
+ handle_type = USE_PATTERN;
+ distance = DISTANCE_FROM_LAST_KEYSTROKE[i];
+
+ switch(USER_CONFIG.PATTERN_INDEX){
+ case 0: handle_type = USE_PATTERN; break;
+ case 1: handle_type = distance ? USE_PATTERN : BLACK_RGB; break;
+ case 2: handle_type = distance ? BLACK_RGB : USE_PATTERN; break;
+ case 3: handle_type = distance ? COLOR_RGB : BLACK_RGB; break;
+ case 4: handle_type = distance ? COLOR_RGB : USE_PATTERN; break;
+ case 5:
+ case 6: handle_type = distance ? COLOR_RGB : USE_PATTERN; break;
+ }
+ switch(handle_type){
+ case USE_PATTERN: unset_user_led_rgb(i); break;
+ case BLACK_RGB: set_user_led_rgb(i, 0, 0, 0); break;
+ case COLOR_RGB:
+ ci = (DISTANCE_FROM_LAST_KEYSTROKE[i] * COLOR_PATTERN_RGB_COUNT /
+ USER_CONFIG.WAVE_FRONT_WIDTH) % COLOR_PATTERN_RGB_COUNT;
+ rgb = &COLOR_PATTERNS[USER_CONFIG.COLOR_PATTERN_INDEX][ci][0];
+
+ set_user_led_rgb(i, rgb[0], rgb[1], rgb[2]);
+ break;
+ }
+ }
+
+
+ // could be moved to process_record_user()
+ if(layer != last_layer){
+
+ static uint8_t QWEASDP[] = {
+ KC_Q, KC_W, KC_E, KC_A, KC_S, KC_D, KC_P,
+ };
+ static uint8_t YUIOHJKL[] = {
+ KC_Y, KC_U, KC_I, KC_O, KC_H, KC_J, KC_K, KC_L,
+ };
+
+ switch(last_layer){
+ case 1:
+ for(uint8_t i = 0; i < 7; ++i){
+ unset_indicator_led_rgb(ktli(QWEASDP[i]), 1);
+ }
+ break;
+ case 2:
+ for(uint8_t i = 0; i < 6; ++i){
+ unset_indicator_led_rgb(ktli(QWEASDP[i]), 2);
+ }
+ for(uint8_t i = 0; i < 8; ++i){
+ unset_indicator_led_rgb(ktli(YUIOHJKL[i]), 2);
+ }
+ unset_indicator_led_rgb(ktli(KC_TAB), 2);
+ unset_indicator_led_rgb(ktli(KC_CAPS), 2);
+ break;
+ }
+
+
+ switch(layer){
+ case 1:
+ for(uint8_t i = 0; i < 7; ++i){
+ set_indicator_led_rgb(ktli(QWEASDP[i]), 1, 255, 0, 0);
+ }
+ break;
+ case 2:
+ for(uint8_t i = 0; i < 6; ++i){
+ set_indicator_led_rgb(ktli(QWEASDP[i]), 2, 0, 255, 0);
+ }
+ for(uint8_t i = 0; i < 8; ++i){
+ set_indicator_led_rgb(ktli(YUIOHJKL[i]), 2, 0, 255, 0);
+ }
+ set_indicator_led_rgb(ktli(KC_TAB), 2, 0, 255, 0);
+ set_indicator_led_rgb(ktli(KC_CAPS), 2, 0, 255, 0);
+ break;
+ }
+
+ refresh_pattern_indicators();
+ refresh_color_pattern_indicators();
+ last_layer = layer;
+ }
+
+
+ switch(layer){
+ case 0:
+ if(timer_elapsed32(scan_timer) > 2000){
+ scan_timer = timer_read32();
+ } else if(timer_elapsed32(scan_timer) > 1000){
+ // set_user_led_rgb(ktli(KC_F5), 255, 255, 255);
+ }
+ break;
+ case 1:
+ break;
+ case 2:
+ break;
+ }
+
+};
+
+#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
+#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint32_t key_timer;
+
+
+ switch (keycode) {
+ case L_BRI:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
+ else gcr_desired += LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_BRD:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
+ else gcr_desired -= LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_PTN:
+ if (record->event.pressed) {
+ if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
+ else led_animation_id++;
+ }
+ return false;
+ case L_PTP:
+ if (record->event.pressed) {
+ if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
+ else led_animation_id--;
+ }
+ return false;
+ case L_PSI:
+ if (record->event.pressed) {
+ led_animation_speed += ANIMATION_SPEED_STEP;
+ }
+ return false;
+ case L_PSD:
+ if (record->event.pressed) {
+ led_animation_speed -= ANIMATION_SPEED_STEP;
+ if (led_animation_speed < 0) led_animation_speed = 0;
+ }
+ return false;
+ case L_T_MD:
+ if (record->event.pressed) {
+ led_lighting_mode++;
+ if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
+ }
+ return false;
+ case L_T_ONF:
+ if (record->event.pressed) {
+ led_enabled = !led_enabled;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_ON:
+ if (record->event.pressed) {
+ led_enabled = 1;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_OFF:
+ if (record->event.pressed) {
+ led_enabled = 0;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_T_BR:
+ if (record->event.pressed) {
+ led_animation_breathing = !led_animation_breathing;
+ if (led_animation_breathing) {
+ gcr_breathe = gcr_desired;
+ led_animation_breathe_cur = BREATHE_MIN_STEP;
+ breathe_dir = 1;
+ }
+ }
+ return false;
+ case L_T_PTD:
+ if (record->event.pressed) {
+ led_animation_direction = !led_animation_direction;
+ }
+ return false;
+ case U_T_AUTO:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
+ }
+ return false;
+ case U_T_AGCR:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
+ }
+ return false;
+ case DBG_TOG:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ }
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ }
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ }
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ }
+ return false;
+ case MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ case L_SP_PR: // previous dripple pattern
+ case L_SP_NE: // next dripple pattern
+ if (record->event.pressed) {
+#define PATTERN_COUNT 7
+ uint8_t incre = keycode == L_SP_PR ? PATTERN_COUNT-1 : 1;
+ USER_CONFIG.PATTERN_INDEX += incre;
+ USER_CONFIG.PATTERN_INDEX %= PATTERN_COUNT;
+
+ if(USER_CONFIG.PATTERN_INDEX <= 4){
+ USER_CONFIG.TRAVEL_DISTANCE = 25;
+ USER_CONFIG.COLOR_PATTERN_INDEX = 0;
+ USER_CONFIG.WAVE_PERIOD = 50;
+ }
+
+ switch(USER_CONFIG.PATTERN_INDEX){
+ case 0: // None
+ break;
+ case 1: // background off, wave on
+ USER_CONFIG.WAVE_FRONT_WIDTH = 2;
+ break;
+ case 2: // background on, wave off
+ USER_CONFIG.WAVE_FRONT_WIDTH = 5;
+ break;
+ case 3: // background off, rainbow wave
+ USER_CONFIG.WAVE_FRONT_WIDTH = 10;
+ break;
+ case 4: // background on, rainbow wave
+ USER_CONFIG.WAVE_FRONT_WIDTH = 10;
+ break;
+ case 5:
+ USER_CONFIG.WAVE_FRONT_WIDTH = 10;
+
+ USER_CONFIG.COLOR_PATTERN_INDEX = 2;
+ USER_CONFIG.TRAVEL_DISTANCE = 0;
+ USER_CONFIG.WAVE_PERIOD = 100;
+ break;
+ case 6:
+ USER_CONFIG.WAVE_FRONT_WIDTH = 25;
+
+ USER_CONFIG.COLOR_PATTERN_INDEX = 3;
+ USER_CONFIG.TRAVEL_DISTANCE = 2;
+ USER_CONFIG.WAVE_PERIOD = 10;
+ break;
+ }
+
+ // remove effect after changing pattern
+ for(int i = 0; i < KEY_STROKES_LENGTH; ++i){
+ KEY_STROKES[i].alive = 0;
+ }
+ refresh_pattern_indicators();
+ refresh_color_pattern_indicators();
+ }
+ return false;
+ case L_SP_WD:
+ case L_SP_NW:
+ if(record->event.pressed){
+ short incre = keycode == L_SP_WD ? 1 : -1;
+ USER_CONFIG.WAVE_FRONT_WIDTH += incre;
+ if(USER_CONFIG.WAVE_FRONT_WIDTH < 1){
+ USER_CONFIG.WAVE_FRONT_WIDTH = 1;
+ }
+ }
+ return false;
+ case L_SP_FA:
+ case L_SP_SL:
+ if(record->event.pressed){
+ short incre = keycode == L_SP_FA ? -1 : 1;
+
+ USER_CONFIG.WAVE_PERIOD += 10 * incre;
+ if(USER_CONFIG.WAVE_PERIOD < 10){
+ USER_CONFIG.WAVE_PERIOD = 10;
+ }
+ }
+ return false;
+ // these are the keys not in range 0x04 - 0x52
+ case L_CP_PR:
+ case L_CP_NX:
+ if(record->event.pressed){
+ uint8_t incre = keycode == L_CP_PR ? COLOR_PATTERNS_COUNT - 1 : 1;
+ USER_CONFIG.COLOR_PATTERN_INDEX += incre;
+ USER_CONFIG.COLOR_PATTERN_INDEX %= COLOR_PATTERNS_COUNT;
+ refresh_color_pattern_indicators();
+ }
+ return false;
+ default:
+ if (record->event.pressed){
+ uint8_t led_id = ktli(keycode);
+ if(led_id){
+ for(int i = 0; i < KEY_STROKES_LENGTH; ++i){
+ if(!KEY_STROKES[i].alive){
+ KEY_STROKES[i].alive = 1;
+ KEY_STROKES[i].led_id = led_id;
+ KEY_STROKES[i].time = timer_read32();
+ break;
+ }
+ }
+ }
+ }
+ return true; //Process all other keycodes normally
+ }
+}
diff --git a/keyboards/massdrop/ctrl/matrix.c b/keyboards/massdrop/ctrl/matrix.c
index 3580577dc1..5f1741e58a 100644
--- a/keyboards/massdrop/ctrl/matrix.c
+++ b/keyboards/massdrop/ctrl/matrix.c
@@ -79,8 +79,6 @@ void matrix_init(void)
matrix_init_quantum();
}
-#define MATRIX_SCAN_DELAY 10 //Delay after setting a col to output (in us)
-
uint64_t mdebouncing = 0;
uint8_t matrix_scan(void)
{
@@ -89,9 +87,7 @@ uint8_t matrix_scan(void)
uint8_t col;
uint32_t scans[2]; //PA PB
- if (CLK_get_ms() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
-
- //DBG_1_OFF; //Profiling scans
+ if (timer_read64() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t)); //Zero the result buffer
@@ -99,7 +95,7 @@ uint8_t matrix_scan(void)
{
PORT->Group[col_ports[col]].OUTSET.reg = 1 << col_pins[col]; //Set col output
- CLK_delay_us(MATRIX_SCAN_DELAY); //Delay for output
+ wait_us(1); //Delay for output
scans[PA] = PORT->Group[PA].IN.reg & row_masks[PA]; //Read PA row pins data
scans[PB] = PORT->Group[PB].IN.reg & row_masks[PB]; //Read PB row pins data
@@ -132,11 +128,9 @@ uint8_t matrix_scan(void)
else
{
//Begin or extend debounce on change
- mdebouncing = CLK_get_ms() + DEBOUNCING_DELAY;
+ mdebouncing = timer_read64() + DEBOUNCING_DELAY;
}
- //DBG_1_ON; //Profiling scans
-
matrix_scan_quantum();
return 1;
diff --git a/keyboards/maxipad/keymaps/default/keymap.c b/keyboards/maxipad/keymaps/default/keymap.c
index e730200a20..5cec84c545 100644
--- a/keyboards/maxipad/keymaps/default/keymap.c
+++ b/keyboards/maxipad/keymaps/default/keymap.c
@@ -17,9 +17,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
{
return MACRO_NONE;
diff --git a/keyboards/mechmini/readme.md b/keyboards/mechmini/readme.md
index 427cbbd03b..fc43eb1248 100644
--- a/keyboards/mechmini/readme.md
+++ b/keyboards/mechmini/readme.md
@@ -19,7 +19,7 @@ Make example for this keyboard (after setting up your build environment), this w
make mechmini:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Mechmini Notes
diff --git a/keyboards/mechmini/v1/README.md b/keyboards/mechmini/v1/README.md
index 9f44a9c2cd..b4a1924c4f 100644
--- a/keyboards/mechmini/v1/README.md
+++ b/keyboards/mechmini/v1/README.md
@@ -11,7 +11,7 @@ Make example for this keyboard (after setting up your build environment):
make mechmini/v1:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Mechmini Notes
diff --git a/keyboards/mechmini/v2/README.md b/keyboards/mechmini/v2/README.md
index a43afc6740..fdc9fef9bf 100644
--- a/keyboards/mechmini/v2/README.md
+++ b/keyboards/mechmini/v2/README.md
@@ -15,7 +15,7 @@ Make example for this keyboard (after setting up your build environment), this w
make mechmini/v2:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Mechmini Notes
diff --git a/keyboards/mehkee96/readme.md b/keyboards/mehkee96/readme.md
index 9dfad2a79e..a06f2e33e6 100644
--- a/keyboards/mehkee96/readme.md
+++ b/keyboards/mehkee96/readme.md
@@ -12,5 +12,35 @@ Make example for this keyboard (after setting up your build environment):
make mehkee96:default
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+ ```
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/meira/keymaps/cole/keymap.c b/keyboards/meira/keymaps/cole/keymap.c
index b1c230d926..71c8d9711d 100644
--- a/keyboards/meira/keymaps/cole/keymap.c
+++ b/keyboards/meira/keymaps/cole/keymap.c
@@ -118,10 +118,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Setting ADJUST layer RGB back to default
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
diff --git a/keyboards/meira/keymaps/default/keymap.c b/keyboards/meira/keymaps/default/keymap.c
index 4bbd014cb7..b25d789192 100644
--- a/keyboards/meira/keymaps/default/keymap.c
+++ b/keyboards/meira/keymaps/default/keymap.c
@@ -162,10 +162,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Setting ADJUST layer RGB back to default
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
diff --git a/keyboards/meira/keymaps/grahampheath/keymap.c b/keyboards/meira/keymaps/grahampheath/keymap.c
index 69815ef975..cd02137877 100644
--- a/keyboards/meira/keymaps/grahampheath/keymap.c
+++ b/keyboards/meira/keymaps/grahampheath/keymap.c
@@ -204,10 +204,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/meira/keymaps/takmiya/keymap.c b/keyboards/meira/keymaps/takmiya/keymap.c
index 48602dfaf4..12dad6d690 100644
--- a/keyboards/meira/keymaps/takmiya/keymap.c
+++ b/keyboards/meira/keymaps/takmiya/keymap.c
@@ -112,10 +112,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// Setting ADJUST layer RGB back to default
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
diff --git a/keyboards/meira/meira.c b/keyboards/meira/meira.c
index 3ff62a080b..1d0db5e997 100644
--- a/keyboards/meira/meira.c
+++ b/keyboards/meira/meira.c
@@ -89,32 +89,6 @@ void led_set_kb(uint8_t usb_led) {
led_set_user(usb_led);
}
-//void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
-//{
-//#ifdef AUDIO_ENABLE
-// int8_t sign = 1;
-//#endif
-// if(id == LFK_ESC_TILDE){
-// // Send ~ on shift-esc
-// void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
-// uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
-// method(shifted ? KC_GRAVE : KC_ESCAPE);
-// send_keyboard_report();
-// }else if(event->event.pressed){
-// switch(id){
-// case LFK_CLEAR:
-// // Go back to default layer
-// layer_clear();
-// break;
-//#ifdef ISSI_ENABLE
-// case LFK_LED_TEST:
-// led_test();
-// break;
-//#endif
-// }
-// }
-//}
-
void reset_keyboard_kb(){
#ifdef WATCHDOG_ENABLE
MCUSR = 0;
diff --git a/keyboards/meira/readme.md b/keyboards/meira/readme.md
index 6d5d9b5535..10c27ee94e 100644
--- a/keyboards/meira/readme.md
+++ b/keyboards/meira/readme.md
@@ -18,7 +18,7 @@ or
make meira/featherble:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information on generic QMK configuration and setup.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information on generic QMK configuration and setup.
Both the Pro Micro and the Feather BLE use the Catalina bootloader, which is typically programmed using avrdude.
diff --git a/keyboards/melody96/readme.md b/keyboards/melody96/readme.md
index b43398dd35..3df1e48b46 100644
--- a/keyboards/melody96/readme.md
+++ b/keyboards/melody96/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make melody96:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/meme/readme.md b/keyboards/meme/readme.md
index 9d3bce9485..94b55d746e 100644
--- a/keyboards/meme/readme.md
+++ b/keyboards/meme/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make meme:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/miniaxe/config.h b/keyboards/miniaxe/config.h
index 2b732ca16f..7a68476a54 100644
--- a/keyboards/miniaxe/config.h
+++ b/keyboards/miniaxe/config.h
@@ -44,8 +44,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// #define MATRIX_ROW_PINS { D0, D5 }
// #define MATRIX_COL_PINS { F1, F0, B0 }
-#define NO_PIN 0xFF
-#define MATRIX_ROW_COL_PINS { \
+#define DIRECT_PINS { \
{ F1, E6, B0, B2, B3 }, \
{ F5, F0, B1, B7, D2 }, \
{ F6, F7, C7, D5, D3 }, \
@@ -54,7 +53,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define UNUSED_PINS
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
-#define DIODE_DIRECTION CUSTOM_MATRIX
+//#define DIODE_DIRECTION CUSTOM_MATRIX
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
diff --git a/keyboards/miniaxe/matrix.c b/keyboards/miniaxe/matrix.c
deleted file mode 100644
index 5fec1281df..0000000000
--- a/keyboards/miniaxe/matrix.c
+++ /dev/null
@@ -1,641 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "pro_micro.h"
-#include "config.h"
-#include "timer.h"
-#include "split_flags.h"
-
-#ifdef BACKLIGHT_ENABLE
-# include "backlight.h"
- extern backlight_config_t backlight_config;
-#endif
-
-#if defined(USE_I2C) || defined(EH)
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if defined(USE_I2C) || defined(EH)
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-
-#else // USE_SERIAL
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
-#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#define ERROR_DISCONNECT_COUNT 5
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 0;
-
-#if ((DIODE_DIRECTION == COL2ROW) || (DIODE_DIRECTION == ROW2COL))
-static uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
-static uint8_t row_col_pins[MATRIX_ROWS][MATRIX_COLS] = MATRIX_ROW_COL_PINS;
-#endif
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
- static void init_cols_rows(void);
- static bool read_cols(matrix_row_t current_matrix[], uint8_t current_row);
-#endif
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_slave_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
-#ifdef DISABLE_JTAG
- // JTAG disable for PORT F. write JTD bit twice within four cycles.
- MCUCR |= (1<<JTD);
- MCUCR |= (1<<JTD);
-#endif
-
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
-
- // Set pinout for right half if pinout for that half is defined
- if (!isLeftHand) {
-#ifdef MATRIX_ROW_PINS_RIGHT
- const uint8_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++)
- row_pins[i] = row_pins_right[i];
-#endif
-#ifdef MATRIX_COL_PINS_RIGHT
- const uint8_t col_pins_right[MATRIX_COLS] = MATRIX_COL_PINS_RIGHT;
- for (uint8_t i = 0; i < MATRIX_COLS; i++)
- col_pins[i] = col_pins_right[i];
-#endif
- }
-
- // initialize row and col
-#if (DIODE_DIRECTION == COL2ROW)
- unselect_rows();
- init_cols();
-#elif (DIODE_DIRECTION == ROW2COL)
- unselect_cols();
- init_rows();
-#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
- init_cols_rows();
-#endif
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols(matrix_debouncing+offset, current_row);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_cols(matrix+offset, current_row);
-# endif
- }
-#endif
-
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-#if defined(USE_I2C) || defined(EH)
-
-// Get rows from other half over i2c
-int i2c_transaction(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
- int err = 0;
-
- // write backlight info
- #ifdef BACKLIGHT_ENABLE
- if (BACKLIT_DIRTY) {
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) goto i2c_error;
-
- // Backlight location
- err = i2c_master_write(I2C_BACKLIT_START);
- if (err) goto i2c_error;
-
- // Write backlight
- i2c_master_write(get_backlight_level());
-
- BACKLIT_DIRTY = false;
- }
- #endif
-
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) goto i2c_error;
-
- // start of matrix stored at I2C_KEYMAP_START
- err = i2c_master_write(I2C_KEYMAP_START);
- if (err) goto i2c_error;
-
- // Start read
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
- if (err) goto i2c_error;
-
- if (!err) {
- int i;
- for (i = 0; i < ROWS_PER_HAND-1; ++i) {
- matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
- }
- matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
- i2c_master_stop();
- } else {
-i2c_error: // the cable is disconnceted, or something else went wrong
- i2c_reset_state();
- return err;
- }
-
- #ifdef RGBLIGHT_ENABLE
- if (RGB_DIRTY) {
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) goto i2c_error;
-
- // RGB Location
- err = i2c_master_write(I2C_RGB_START);
- if (err) goto i2c_error;
-
- uint32_t dword = eeconfig_read_rgblight();
-
- // Write RGB
- err = i2c_master_write_data(&dword, 4);
- if (err) goto i2c_error;
-
- RGB_DIRTY = false;
- i2c_master_stop();
- }
- #endif
-
- return 0;
-}
-
-#else // USE_SERIAL
-
-
-typedef struct _Serial_s2m_buffer_t {
- // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
- matrix_row_t smatrix[ROWS_PER_HAND];
-} Serial_s2m_buffer_t;
-
-volatile Serial_s2m_buffer_t serial_s2m_buffer = {};
-volatile Serial_m2s_buffer_t serial_m2s_buffer = {};
-uint8_t volatile status0 = 0;
-
-SSTD_t transactions[] = {
- { (uint8_t *)&status0,
- sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer,
- sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer
- }
-};
-
-void serial_master_init(void)
-{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
-
-void serial_slave_init(void)
-{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
-
-int serial_transaction(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (soft_serial_transaction()) {
- return 1;
- }
-
- // TODO: if MATRIX_COLS > 8 change to unpack()
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_s2m_buffer.smatrix[i];
- }
-
- #ifdef RGBLIGHT_ENABLE
- // Code to send RGB over serial goes here (not implemented yet)
- #endif
-
- #ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
- #endif
-
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
-
-#if defined(USE_I2C) || defined(EH)
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#endif
-
- error_count++;
-
- if (error_count > ERROR_DISCONNECT_COUNT) {
- // reset other half if disconnected
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = 0;
- }
- }
- } else {
- error_count = 0;
- }
- matrix_scan_quantum();
- return ret;
-}
-
-void matrix_slave_scan(void) {
- _matrix_scan();
-
- int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
-
-#if defined(USE_I2C) || defined(EH)
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[I2C_KEYMAP_START+i] = matrix[offset+i];
- }
-#else // USE_SERIAL
- // TODO: if MATRIX_COLS > 8 change to pack()
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_s2m_buffer.smatrix[i] = matrix[offset+i];
- }
-#endif
- matrix_slave_scan_user();
-}
-
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- pbin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-#if (DIODE_DIRECTION == COL2ROW)
-
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin = col_pins[col_index];
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static void select_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
-
-static void init_cols_rows(void)
-{
- for(int row = 0; row < MATRIX_ROWS; row++) {
- for(int col = 0; col < MATRIX_COLS; col++) {
- uint8_t pin = row_col_pins[row][col];
- if(pin == NO_PIN) {
- continue;
- }
- // DDxn set 0 for input
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF);
- // PORTxn set 1 for input/pullup
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);
- }
- }
-}
-
-static bool read_cols(matrix_row_t current_matrix[], uint8_t current_row)
-{
- matrix_row_t last_row_value = current_matrix[current_row];
- current_matrix[current_row] = 0;
-
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
- uint8_t pin = row_col_pins[current_row][col_index];
- if(pin == NO_PIN) {
- current_matrix[current_row] |= 0;
- }
- else {
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
- }
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-#endif
diff --git a/keyboards/miniaxe/rules.mk b/keyboards/miniaxe/rules.mk
index 96e27686b8..2f56a907ba 100644
--- a/keyboards/miniaxe/rules.mk
+++ b/keyboards/miniaxe/rules.mk
@@ -1,4 +1,3 @@
-SRC += matrix.c
# MCU name
#MCU = at90usb1286
@@ -83,6 +82,6 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
DEBUG_ENABLE = no
-CUSTOM_MATRIX = yes # Use custom matrix code
+CUSTOM_MATRIX = no # Use custom matrix code
SPLIT_KEYBOARD = yes # Use shared split_common code
diff --git a/keyboards/minidox/keymaps/that_canadian/rules.mk b/keyboards/minidox/keymaps/that_canadian/rules.mk
index 7637dfc09a..f1ef68387f 100644
--- a/keyboards/minidox/keymaps/that_canadian/rules.mk
+++ b/keyboards/minidox/keymaps/that_canadian/rules.mk
@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/minidox/keymaps/tw1t611/keymap.c b/keyboards/minidox/keymaps/tw1t611/keymap.c
new file mode 100644
index 0000000000..e94625516e
--- /dev/null
+++ b/keyboards/minidox/keymaps/tw1t611/keymap.c
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+#include "keymap_german.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTZ 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 3
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+// macro keys
+#define CALTDEL LCTL(LALT(KC_DEL)) // ctrl-alt-del
+#define CALTESC LCTL(LSFT(KC_ESC)) // ctrl-alt-esc
+#define CALT LCTL(KC_LALT) // ctrl-alt
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTZ] = LAYOUT( \
+ DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, \
+ DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, KC_SPC, \
+ DE_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM, DE_DOT, DE_MINS, \
+ KC_LCTRL, MO(_LOWER), MO(_RAISE), KC_LGUI, KC_LSFT, KC_LALT \
+),
+
+[_RAISE] = LAYOUT( \
+ DE_EXLM, DE_QST, DE_PARA, DE_DLR, DE_HASH, DE_PLUS, DE_7, DE_8, DE_9, DE_0, \
+ DE_CIRC, DE_QUOT, DE_DQOT, DE_GRV, DE_AMPR, DE_ASTR, DE_4, DE_5, DE_6, DE_EQL, \
+ DE_SLSH, DE_PIPE, DE_BSLS, DE_AT, DE_EURO, DE_PERC, DE_1, DE_2, DE_3, KC_TAB, \
+ _______, _______, _______, _______, _______, _______ \
+),
+
+[_LOWER] = LAYOUT( \
+ KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, DE_LBRC, DE_RBRC, KC_AUDIO_VOL_UP, KC_HOME, KC_PGDOWN, KC_PGUP, KC_END, DE_TILD, \
+ KC_ESC, DE_LESS, DE_LPRN, DE_RPRN, DE_MORE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_ENT, \
+ KC_BSPC, KC_DEL, DE_LCBR, DE_RCBR, KC_PSCR, _______, DE_AE, DE_OE, DE_UE, DE_SS, \
+ _______, _______, _______, _______, MO(_ADJUST), _______ \
+),
+
+[_ADJUST] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, \
+ CALTESC, CALTDEL, _______, CALT, _______, _______, KC_F4, KC_F5, KC_F6, KC_F11, \
+ RESET, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12, \
+ _______, _______, _______, _______, _______, _______ \
+)};
+
+void matrix_init_user(void) {
+ set_single_persistent_default_layer(_QWERTZ);
+};
diff --git a/keyboards/minidox/keymaps/tw1t611/readme.md b/keyboards/minidox/keymaps/tw1t611/readme.md
new file mode 100644
index 0000000000..7ab4526fbc
--- /dev/null
+++ b/keyboards/minidox/keymaps/tw1t611/readme.md
@@ -0,0 +1,23 @@
+# Minidox Layout by tw1t611
+![](https://imgur.com/M95KSke.png)
+
+This is a german layout with support for umlauts and the euro sign.
+You need to set your system layout to german.
+
+[keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/d58a82d8017d0c0cca044ef385def165)
+
+## Layers
+| Layer | Legend |
+| ----- | ------ |
+| Base | Top left (white) |
+| Lower | Top right (organge) |
+| Raise | Bottom right (blue) |
+| Adjust | Front print (orange + shift) |
+
+## Features
+* German layout with support for umlauts and the euro sign
+* Raise/lower layers focus first on one-handed use
+* Numpad on right hand with raise layer
+* Vim optimized
+ * Easy reachable Esc
+ * arrow keys on h, j, k, l
diff --git a/keyboards/minidox/keymaps/tw1t611/rules.mk b/keyboards/minidox/keymaps/tw1t611/rules.mk
new file mode 100644
index 0000000000..fcfd2225bc
--- /dev/null
+++ b/keyboards/minidox/keymaps/tw1t611/rules.mk
@@ -0,0 +1 @@
+EXTRAKEY_ENABLE = yes
diff --git a/keyboards/minidox/readme.md b/keyboards/minidox/readme.md
index 9ec306421d..74afedc18b 100644
--- a/keyboards/minidox/readme.md
+++ b/keyboards/minidox/readme.md
@@ -12,7 +12,7 @@ Make example for this keyboard (after setting up your build environment):
make minidox/rev1:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Build Guide
diff --git a/keyboards/mint60/keymaps/default/keymap.c b/keyboards/mint60/keymaps/default/keymap.c
index 36895cb474..e07d199ea9 100644
--- a/keyboards/mint60/keymaps/default/keymap.c
+++ b/keyboards/mint60/keymaps/default/keymap.c
@@ -52,10 +52,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// define variables for reactive RGB
bool TOG_STATUS = false;
int RGB_current_mode;
diff --git a/keyboards/mint60/keymaps/eucalyn/keymap.c b/keyboards/mint60/keymaps/eucalyn/keymap.c
index 566d734a52..c26dd38d31 100644
--- a/keyboards/mint60/keymaps/eucalyn/keymap.c
+++ b/keyboards/mint60/keymaps/eucalyn/keymap.c
@@ -52,10 +52,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
// define variables for reactive RGB
bool TOG_STATUS = false;
int RGB_current_mode;
diff --git a/keyboards/mitosis/keymaps/default/keymap.c b/keyboards/mitosis/keymaps/default/keymap.c
index 99f57c55fd..60ebdac60a 100644
--- a/keyboards/mitosis/keymaps/default/keymap.c
+++ b/keyboards/mitosis/keymaps/default/keymap.c
@@ -80,11 +80,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
static uint16_t key_timer;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
diff --git a/keyboards/mitosis/keymaps/mjt/keymap.c b/keyboards/mitosis/keymaps/mjt/keymap.c
index 260fa133f0..379738951a 100644
--- a/keyboards/mitosis/keymaps/mjt/keymap.c
+++ b/keyboards/mitosis/keymaps/mjt/keymap.c
@@ -119,9 +119,6 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
-const uint16_t PROGMEM fn_actions[] = {
-
-};
static uint16_t function_layer = _FUNCTIONMAC;
static uint16_t key_timer;
diff --git a/keyboards/mitosis/keymaps/mjt/rules.mk b/keyboards/mitosis/keymaps/mjt/rules.mk
index a4137ad00e..0259657677 100644
--- a/keyboards/mitosis/keymaps/mjt/rules.mk
+++ b/keyboards/mitosis/keymaps/mjt/rules.mk
@@ -12,6 +12,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
API_SYSEX_ENABLE = no
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/mitosis/readme.md b/keyboards/mitosis/readme.md
index e1b0711019..d3cf12af8d 100644
--- a/keyboards/mitosis/readme.md
+++ b/keyboards/mitosis/readme.md
@@ -12,7 +12,7 @@ Make example for this keyboard (after setting up your build environment):
make mitosis:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Notes
diff --git a/keyboards/miuni32/keymaps/adam-lee/rules.mk b/keyboards/miuni32/keymaps/adam-lee/rules.mk
index 3138ab57f7..3a741d20a7 100644
--- a/keyboards/miuni32/keymaps/adam-lee/rules.mk
+++ b/keyboards/miuni32/keymaps/adam-lee/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/miuni32/keymaps/default/rules.mk b/keyboards/miuni32/keymaps/default/rules.mk
index 3138ab57f7..3a741d20a7 100644
--- a/keyboards/miuni32/keymaps/default/rules.mk
+++ b/keyboards/miuni32/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/miuni32/keymaps/ht_156/rules.mk b/keyboards/miuni32/keymaps/ht_156/rules.mk
index 3138ab57f7..3a741d20a7 100644
--- a/keyboards/miuni32/keymaps/ht_156/rules.mk
+++ b/keyboards/miuni32/keymaps/ht_156/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/miuni32/keymaps/ki/rules.mk b/keyboards/miuni32/keymaps/ki/rules.mk
index 7639c2b3f1..15d3cfff2c 100644
--- a/keyboards/miuni32/keymaps/ki/rules.mk
+++ b/keyboards/miuni32/keymaps/ki/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/miuni32/readme.md b/keyboards/miuni32/readme.md
index 7fc72d601a..359424151d 100644
--- a/keyboards/miuni32/readme.md
+++ b/keyboards/miuni32/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make miuni32-default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/mxss/keymaps/default/keymap.c b/keyboards/mxss/keymaps/default/keymap.c
index 47983c90c6..7ac107f371 100644
--- a/keyboards/mxss/keymaps/default/keymap.c
+++ b/keyboards/mxss/keymaps/default/keymap.c
@@ -51,11 +51,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/mxss/readme.md b/keyboards/mxss/readme.md
index 54e07e27b0..181b6366a0 100644
--- a/keyboards/mxss/readme.md
+++ b/keyboards/mxss/readme.md
@@ -29,7 +29,7 @@ Make example for this keyboard (after setting up your build environment):
make mxss:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
# Front LED Operation
diff --git a/keyboards/niu_mini/keymaps/planck/rules.mk b/keyboards/niu_mini/keymaps/planck/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/niu_mini/keymaps/planck/rules.mk
+++ b/keyboards/niu_mini/keymaps/planck/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c
index 9bee87f38f..ea22ce9477 100644
--- a/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c
+++ b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c
@@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC,
CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT,
CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
- KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, CTLENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
),
/* Lower
@@ -103,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL,
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, RGB_M_P, KC_ENT,
_______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, RGB_TOG, RGB_MOD, RGB_HUI, CU_RGBV, _______,
- RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME
+ RESET, CU_ESCT, _______, _______, _______, KC_SPC, CTLENT, _______, _______, _______, _______, CU_GAME
)
};
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk b/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk
index 359f94f1e4..00946ff227 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk
+++ b/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk
@@ -1,8 +1,5 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
MOUSEKEY_ENABLE = yes
BACKLIGHT_ENABLE = no
AUDIO_ENABLE = no
CONSOLE_ENABLE = no # Console for debug(+400)
+
diff --git a/keyboards/niu_mini/readme.md b/keyboards/niu_mini/readme.md
index 91f0cd4b6c..af05d34fa5 100644
--- a/keyboards/niu_mini/readme.md
+++ b/keyboards/niu_mini/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make niu_mini:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/novelpad/readme.md b/keyboards/novelpad/README.md
index 70bd6b6be7..5c73644a28 100644
--- a/keyboards/novelpad/readme.md
+++ b/keyboards/novelpad/README.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make novelpad:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/novelpad/keymaps/0xdec/keymap.c b/keyboards/novelpad/keymaps/0xdec/keymap.c
new file mode 100755
index 0000000000..429e6c5b3f
--- /dev/null
+++ b/keyboards/novelpad/keymaps/0xdec/keymap.c
@@ -0,0 +1,59 @@
+/*
+Copyright 2018 Jordi Pakey-Rodriguez
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ LT(1, KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PEQL,
+ KC_P1, KC_P2, KC_P3, KC_TAB,
+ KC_PCMM, KC_P0, KC_PDOT, KC_PENT
+ ),
+
+ [1] = LAYOUT(
+ _______, RESET, BL_STEP, RGB_TOG,
+ RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD,
+ RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD,
+ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,
+ RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G
+ ),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ return MACRO_NONE;
+}
+
+void matrix_init_user(void) {}
+
+void matrix_scan_user(void) {}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {}
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ // Illuminate the LED under the Num Lock key
+ rgblight_sethsv_at(0, 0, 127, 1);
+ } else {
+ rgblight_sethsv_at(0, 0, 0, 1);
+ }
+}
diff --git a/keyboards/noxary/268/readme.md b/keyboards/noxary/268/readme.md
index 68308a4752..adc1add18d 100644
--- a/keyboards/noxary/268/readme.md
+++ b/keyboards/noxary/268/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make noxary/268:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/nyquist/keymaps/bramver/keymap.c b/keyboards/nyquist/keymaps/bramver/keymap.c
index c5eac853cc..f156254679 100644
--- a/keyboards/nyquist/keymaps/bramver/keymap.c
+++ b/keyboards/nyquist/keymaps/bramver/keymap.c
@@ -103,15 +103,6 @@ enum custom_keycodes {
CTRL_V
};
-// Enable these functions using FUNC(n) macro.
-// const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5
-// [0] = , //Hold for momentary LMouse layer, Tap for Space,
-// [1] = , //Hold for momentary RMouse layer, Tap for Space,
-// [2] = , //Hold for momentary Lower
-// [3] = , //Hold for momentary Raise
-// [4] = , //Hold for momentary Emoji
-// };
-
#define SP_LMS LT(_LMOUSE, KC_SPC)
#define SP_RMS LT(_RMOUSE, KC_SPC)
#define LOW TT(_LOWER)
diff --git a/keyboards/nyquist/keymaps/jojiichan/rules.mk b/keyboards/nyquist/keymaps/jojiichan/rules.mk
index 1e57612788..a81250cdf6 100644
--- a/keyboards/nyquist/keymaps/jojiichan/rules.mk
+++ b/keyboards/nyquist/keymaps/jojiichan/rules.mk
@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/nyquist/keymaps/kim-kim/rules.mk b/keyboards/nyquist/keymaps/kim-kim/rules.mk
index 1e57612788..a81250cdf6 100644
--- a/keyboards/nyquist/keymaps/kim-kim/rules.mk
+++ b/keyboards/nyquist/keymaps/kim-kim/rules.mk
@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/nyquist/keymaps/losinggeneration/rules.mk b/keyboards/nyquist/keymaps/losinggeneration/rules.mk
index ea2b7165d9..17ef684830 100644
--- a/keyboards/nyquist/keymaps/losinggeneration/rules.mk
+++ b/keyboards/nyquist/keymaps/losinggeneration/rules.mk
@@ -12,6 +12,3 @@ MIDI_ENABLE = no # MIDI controls
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/nyquist/keymaps/pitty/rules.mk b/keyboards/nyquist/keymaps/pitty/rules.mk
index 8ebc85a44b..53a426157e 100644
--- a/keyboards/nyquist/keymaps/pitty/rules.mk
+++ b/keyboards/nyquist/keymaps/pitty/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
NKRO_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/nyquist/keymaps/shovelpaw/config.h b/keyboards/nyquist/keymaps/shovelpaw/config.h
new file mode 100644
index 0000000000..d0adbfe0c8
--- /dev/null
+++ b/keyboards/nyquist/keymaps/shovelpaw/config.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+// Mouse specific settings
+#define MOUSEKEY_INTERVAL 16
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 6
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/nyquist/keymaps/shovelpaw/keymap.c b/keyboards/nyquist/keymaps/shovelpaw/keymap.c
new file mode 100644
index 0000000000..87e44ff043
--- /dev/null
+++ b/keyboards/nyquist/keymaps/shovelpaw/keymap.c
@@ -0,0 +1,156 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _MIDI 3
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ MIDI,
+ ADJUST
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------| |-------------------------------------------.
+ * | GEsc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+-------+------+------+------+-------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+------| |------+-------+------+------+------+-------|
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------| |------+-------+------+------+------+-------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / | Enter |
+ * |------+------+------+------+------+------| |------+-------+------+------+------+-------|
+ * | Ctrl |Adjust| GUI | Alt |Lower |Space | | Space |Raise | Left | Up | Down | Right |
+ * `-----------------------------------------| |-------------------------------------------|
+ */
+
+[_QWERTY] = LAYOUT( \
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
+ KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ KC_LCTL, MO(_ADJUST), KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------| |------------------------------------------.
+ * | ` | F1 | F2 | F3 | | | | - | = | ( | ) | | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+-------|
+ * | ~ | F4 | F5 | F6 | | | | & | * | { | } | | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+-------|
+ * | Del | F7 | F8 | F9 | | | | _ | + | [ | ] | | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+-------|
+ * | | F10 | F11 | F12 | | | | | | | F5 | Up | Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+-------|
+ * | | | | | | Home | | End | | | Left | Down | Right |
+ * `-----------------------------------------| |------------------------------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_GRV, KC_F1, KC_F2, KC_F3, _______, _______, KC_MINS, KC_EQL, _______, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_F4, KC_F5, KC_F6, _______, _______, KC_AMPR, KC_ASTR, _______, KC_LCBR, KC_RCBR, KC_DEL, \
+ KC_DEL, KC_F7, KC_F8, KC_F9, _______, _______, KC_UNDS, KC_PLUS, _______, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, KC_F5, KC_UP, _______, \
+ _______, _______, _______, _______, _______, KC_HOME, KC_END, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT \
+),
+
+/* Raise
+ * ,-----------------------------------------| |-----------------------------------------.
+ * | Back | m0 | m1 | m2 | | | | | 7 | 8 | 9 | - | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | For | sD | mU | sU | | | | | 4 | 5 | 6 | + | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | mL | mD | mR | | | | | 1 | 2 | 3 | * | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | 0 | mB1 | mB1 | mB2 | | | | 0 | . | = | / |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | MIDI | | | | | | | | | Mute | Vol- | Vol+ | Play |
+ * `-----------------------------------------| |-----------------------------------------'
+ */
+[_RAISE] = LAYOUT( \
+ LALT(KC_LEFT), KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, KC_7, KC_8, KC_9, KC_MINS, KC_BSPC, \
+ LALT(KC_RIGHT), KC_MS_WH_DOWN, KC_MS_UP, KC_MS_WH_UP, _______, _______, _______, KC_4, KC_5, KC_6, KC_PLUS, KC_DEL, \
+ KC_DEL, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______, _______, KC_1, KC_2, KC_3, KC_ASTR, KC_BSLS, \
+ _______, KC_P0, KC_MS_BTN1, KC_MS_BTN1, KC_MS_BTN2, _______, _______, KC_0, KC_DOT, KC_EQL, KC_SLSH, _______, \
+ MO(_MIDI), _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/*
+ * MIDI
+ */
+
+[_MIDI] = LAYOUT( \
+ QWERTY, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_C_2, MI_C_3, QWERTY, \
+ MI_A_3, MI_As_3, MI_B_3, MI_C_3, MI_Cs_3, MI_D_3, MI_Ds_3, MI_E_3, MI_F_3, MI_Fs_3, MI_G_3, MI_Gs_3, \
+ MI_A_2, MI_As_2, MI_B_2, MI_C_2, MI_Cs_2, MI_D_2, MI_Ds_2, MI_E_2, MI_F_2, MI_Fs_2, MI_G_2, MI_Gs_2, \
+ MI_A_1, MI_As_1, MI_B_1, MI_C_1, MI_Cs_1, MI_D_1, MI_Ds_1, MI_E_1, MI_F_1, MI_Fs_1, MI_G_1, MI_Gs_1, \
+ MI_A, MI_As, MI_B, MI_C, MI_Cs, MI_D, MI_Ds, MI_E, MI_F, MI_Fs, MI_G, MI_Gs \
+),
+
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------| |-----------------------------------------.
+ * |QWERTY| F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn| |Sat Up| 7 | 8 | 9 | | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm| |AGswap| 6 | 5 | 4 | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | [ | | ] | 1 | 2 | 3 | | |
+ * |------+------+------+------+------+------+ |------+------+------+------+------+------|
+ * | | | | | | { | | } | 0 | . | | | |
+ * `-----------------------------------------| |-----------------------------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ QWERTY, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, KC_7, KC_8, KC_9, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, KC_6, KC_5, KC_4, _______, _______, \
+ _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, _______, _______, \
+ _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_0, KC_DOT, _______, _______, _______ \
+)
+
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/nyquist/keymaps/shovelpaw/rules.mk b/keyboards/nyquist/keymaps/shovelpaw/rules.mk
new file mode 100644
index 0000000000..44ca075c34
--- /dev/null
+++ b/keyboards/nyquist/keymaps/shovelpaw/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+MIDI_ENABLE = yes # MIDI support (+2400 to 4200, depending on config)
+
diff --git a/keyboards/nyquist/keymaps/skug/config.h b/keyboards/nyquist/keymaps/skug/config.h
new file mode 100644
index 0000000000..c366863294
--- /dev/null
+++ b/keyboards/nyquist/keymaps/skug/config.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+// #define USE_SERIAL
+#define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+
+#undef LSPO_KEY
+#undef RSPC_KEY
+#define LSPO_KEY KC_8 // Nordic Left SpaceCadet
+#define RSPC_KEY KC_9 // Nordic Right SpaceCadet
+
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/nyquist/keymaps/skug/keymap.c b/keyboards/nyquist/keymaps/skug/keymap.c
new file mode 100644
index 0000000000..fe3229966f
--- /dev/null
+++ b/keyboards/nyquist/keymaps/skug/keymap.c
@@ -0,0 +1,170 @@
+/* Copyright 2019 Christoffer Holmberg
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "keymap_swedish.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define BASE 0
+#define SYMB 1
+#define MDIA 2
+#define ARRW 3
+#define _ADJUST 16
+
+#define CT_APOS CTL_T(NO_APOS)
+#define CT_TILD CTL_T(NO_TILD)
+#define MD_OSLH LT(MDIA, NO_OSLH)
+#define SM_AE LT(SYMB, NO_AE)
+#define NO_LT NO_LESS
+#define NO_GT LSFT(NO_LESS)
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE,
+ ADJUST,
+ DVORAK,
+ COLEMAK,
+ QWERTY
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Base layer
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | + |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Å |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ARRW | A | S | D | F | G | | H | J | K | L | Ö | Ä |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |Shift(| Z | X | C | V | B | | N | M | , | . | - |)Shift|
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * |'/Ctrl| ´ | Alt | Bsp |Space | Win | | Entr | Space| Bsb | AlGr | * |Ctrl/¨|
+ * `-----------------------------------------' '-----------------------------------------'
+ */
+[BASE] = LAYOUT( \
+ // LEFT HAND RIGHT HAND
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AA, \
+ MO(ARRW), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MD_OSLH, SM_AE, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, KC_RSPC, \
+ CT_APOS, NO_ACUT, KC_LALT, KC_BSPC, KC_SPC, KC_LGUI, KC_ENT, KC_SPC, KC_BSPC, KC_ALGR, NO_ASTR, CT_TILD \
+),
+
+/* Symbols layer
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | ! | @ | { | } | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | # | $ | ( | ) | ` | | Down | 4 | 5 | 6 | + | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | % | ^ | [ | ] | ~ | | & | 1 | 2 | 3 | - | |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | | | < | > | | | | | . | 0 | = | |
+ * `-----------------------------------------' '-----------------------------------------'
+ */
+[SYMB] = LAYOUT( \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, \
+ _______, KC_EXLM, NO_AT, NO_LCBR, NO_RCBR, NO_PIPE, KC_UP, KC_7, KC_8, KC_9, NO_ASTR, KC_F12, \
+ _______, KC_HASH, NO_DLR, NO_LPRN, NO_RPRN, NO_GRV, KC_DOWN, KC_4, KC_5, KC_6, NO_PLUS, _______, \
+ _______, KC_PERC, NO_CIRC, NO_LBRC, NO_RBRC, NO_TILD, NO_AMPR, KC_1, KC_2, KC_3, NO_MINS, _______, \
+ _______, _______, _______, NO_LT, NO_GT, _______, _______, _______, KC_DOT, KC_0, NO_EQL, _______ \
+),
+
+/* Media layer
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' '-----------------------------------------'
+ */
+[MDIA] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* Arrow layer
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | | | | | | | | | | | | | PgUp |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | | Up | | | | | | | | | | PgDn |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Left | Down | Right| | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | | | Del | | | | | | | | | |
+ * `-----------------------------------------' '-----------------------------------------'
+ */
+[ARRW] = LAYOUT( \
+ NO_HALF, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, KC_UP , _______ , _______, _______, _______, _______, _______, _______, _______, KC_PGDN, \
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, KC_DEL , _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* Adjust ()
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn| |Sat Up|Sat Dn|Val Up|Val Dn| | |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+ +------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' '-----------------------------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/nyquist/keymaps/skug/rules.mk b/keyboards/nyquist/keymaps/skug/rules.mk
new file mode 100644
index 0000000000..e0ed6f0c2d
--- /dev/null
+++ b/keyboards/nyquist/keymaps/skug/rules.mk
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/nyquist/readme.md b/keyboards/nyquist/readme.md
index 1b417a6588..e3d75b448f 100644
--- a/keyboards/nyquist/readme.md
+++ b/keyboards/nyquist/readme.md
@@ -15,6 +15,6 @@ Example of flashing this keyboard:
make nyquist/rev1:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Nyquist Build Guide](https://docs.keeb.io)
diff --git a/keyboards/nyquist/rev3/config.h b/keyboards/nyquist/rev3/config.h
index 8054ba79c2..0caf8c423c 100644
--- a/keyboards/nyquist/rev3/config.h
+++ b/keyboards/nyquist/rev3/config.h
@@ -33,6 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// wiring of each half
#define MATRIX_ROW_PINS { F0, F5, D7, F6, F7 }
#define MATRIX_COL_PINS { F1, F4, B7, D2, D3, D4 }
+#define SPLIT_HAND_PIN D5
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
@@ -58,11 +59,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN B4
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 12
/* Backlight LEDs */
-#define BACKLIGHT_PIN D5
+#define BACKLIGHT_PIN B5
#define BACKLIGHT_LEVELS 7
/*
diff --git a/keyboards/nyquist/rev3/rev3.h b/keyboards/nyquist/rev3/rev3.h
index 3a3141f6e0..274b83926b 100644
--- a/keyboards/nyquist/rev3/rev3.h
+++ b/keyboards/nyquist/rev3/rev3.h
@@ -11,33 +11,6 @@
#endif
#endif
-//void promicro_bootloader_jmp(bool program);
-
-#ifndef FLIP_HALF
-// Standard Keymap
-// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
-#define LAYOUT( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
- L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05 }, \
- { L10, L11, L12, L13, L14, L15 }, \
- { L20, L21, L22, L23, L24, L25 }, \
- { L30, L31, L32, L33, L34, L35 }, \
- { L40, L41, L42, L43, L44, L45 }, \
- { R05, R04, R03, R02, R01, R00 }, \
- { R15, R14, R13, R12, R11, R10 }, \
- { R25, R24, R23, R22, R21, R20 }, \
- { R35, R34, R33, R32, R31, R30 }, \
- { R45, R44, R43, R42, R41, R40 } \
- }
-#else
-// Keymap with right side flipped
-// (TRRS jack on both halves are to the right)
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
@@ -57,7 +30,5 @@
{ R30, R31, R32, R33, R34, R35 }, \
{ R40, R41, R42, R43, R44, R45 } \
}
-#endif
#define LAYOUT_ortho_5x12 LAYOUT
-
diff --git a/keyboards/nyquist/rev3/rules.mk b/keyboards/nyquist/rev3/rules.mk
index bd518d8f27..31077066a3 100644
--- a/keyboards/nyquist/rev3/rules.mk
+++ b/keyboards/nyquist/rev3/rules.mk
@@ -1 +1,2 @@
BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/ok60/readme.md b/keyboards/ok60/readme.md
index de67ab628f..014c304261 100644
--- a/keyboards/ok60/readme.md
+++ b/keyboards/ok60/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make ok60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/omnikey_blackheart/readme.md b/keyboards/omnikey_blackheart/readme.md
index e375d53f90..04bb49818c 100644
--- a/keyboards/omnikey_blackheart/readme.md
+++ b/keyboards/omnikey_blackheart/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make omnikey_blackheart:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/org60/keymaps/boardy/rules.mk b/keyboards/org60/keymaps/boardy/rules.mk
index 0755d50093..88ac79ecad 100644
--- a/keyboards/org60/keymaps/boardy/rules.mk
+++ b/keyboards/org60/keymaps/boardy/rules.mk
@@ -8,8 +8,3 @@ COMMAND_ENABLE = no # Commands for debug and configuration
TAP_DANCE_ENABLE = no # Tap Dance skills
UNICODE_ENABLE = no # Unicode
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-
diff --git a/keyboards/paladin64/keymaps/default/keymap.c b/keyboards/paladin64/keymaps/default/keymap.c
index 8a3f57c0bf..3f4608438c 100755
--- a/keyboards/paladin64/keymaps/default/keymap.c
+++ b/keyboards/paladin64/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-const uint16_t PROGMEM fn_actions[] = {};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY */
diff --git a/keyboards/paladin64/readme.md b/keyboards/paladin64/readme.md
index 41f66e2ac0..8d62bb6b71 100644
--- a/keyboards/paladin64/readme.md
+++ b/keyboards/paladin64/readme.md
@@ -16,4 +16,4 @@ Or to make and flash:
make paladin64:default:dfu
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/phantom/keymaps/default/rules.mk b/keyboards/phantom/keymaps/default/rules.mk
index 555ac79fa7..597d4046a1 100644
--- a/keyboards/phantom/keymaps/default/rules.mk
+++ b/keyboards/phantom/keymaps/default/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/phantom/keymaps/rgbmod/rules.mk b/keyboards/phantom/keymaps/rgbmod/rules.mk
index 38c23a1b89..2892bb424d 100644
--- a/keyboards/phantom/keymaps/rgbmod/rules.mk
+++ b/keyboards/phantom/keymaps/rgbmod/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c
index f47a7ad623..ac38e55243 100644
--- a/keyboards/phantom/keymaps/xyverz/keymap.c
+++ b/keyboards/phantom/keymaps/xyverz/keymap.c
@@ -68,11 +68,6 @@ enum function_id {
SHIFT_ESC,
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/phantom/readme.md b/keyboards/phantom/readme.md
index c0cb3bc20d..b25630958b 100644
--- a/keyboards/phantom/readme.md
+++ b/keyboards/phantom/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make phantom:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/pinky/3/3.c b/keyboards/pinky/3/3.c
new file mode 100644
index 0000000000..200510d0aa
--- /dev/null
+++ b/keyboards/pinky/3/3.c
@@ -0,0 +1 @@
+#include "pinky.h"
diff --git a/keyboards/pinky/3/3.h b/keyboards/pinky/3/3.h
new file mode 100644
index 0000000000..ca1109d262
--- /dev/null
+++ b/keyboards/pinky/3/3.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "../pinky.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, R30, R31, R32, R33 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25, L26 }, \
+ { KC_NO, KC_NO, KC_NO, L30, L31, L32, L33 }, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R16, R15, R14, R13, R12, R11, R10 }, \
+ { R26, R25, R24, R23, R22, R21, R20 }, \
+ { KC_NO, KC_NO, KC_NO, R33, R32, R31, R30 } \
+ }
+
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, R30, R31, R32, R33 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##R30, KC_##R31, KC_##R32, KC_##R33 \
+ )
diff --git a/keyboards/pinky/3/config.h b/keyboards/pinky/3/config.h
new file mode 100644
index 0000000000..1b120b9cb0
--- /dev/null
+++ b/keyboards/pinky/3/config.h
@@ -0,0 +1,246 @@
+/* Copyright 2018 'Masayuki Sunahara'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER tamanishi
+#define PRODUCT Pinky
+#define DESCRIPTION A split keyboard with 3 or 4 x7 vertically staggered keys and 4 thumb keys
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
+
+// wiring of each half
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
+
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+// #define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+// #define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/pinky/3/keymaps/default/config.h b/keyboards/pinky/3/keymaps/default/config.h
new file mode 100644
index 0000000000..db79776729
--- /dev/null
+++ b/keyboards/pinky/3/keymaps/default/config.h
@@ -0,0 +1,31 @@
+/* Copyright 2018 'Masayuki Sunahara'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 200
+#define RETRO_TAPPPING
diff --git a/keyboards/pinky/3/keymaps/default/keymap.c b/keyboards/pinky/3/keymaps/default/keymap.c
new file mode 100644
index 0000000000..94ed82b02e
--- /dev/null
+++ b/keyboards/pinky/3/keymaps/default/keymap.c
@@ -0,0 +1,134 @@
+/* Copyright 2018 'Masayuki Sunahara'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST
+};
+
+#define ________ KC_TRNS
+#define XXXXXXXX KC_NO
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+#define KC_ADJ ADJUST
+#define KC_CTLTB CTL_T(KC_TAB)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,---------------------------------------------------------------------. ,---------------------------------------------------------------------.
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LPRN, KC_RPRN, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ KC_CTLTB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ADJ, KC_ADJ, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ KC_LALT, KC_LOWER, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_RAISE, KC_RALT \
+ //`---------------------------------------' `---------------------------------------'
+ ),
+
+ [_LOWER] = LAYOUT( \
+ //,---------------------------------------------------------------------. ,---------------------------------------------------------------------.
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, ________, ________, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, KC_MINS, KC_EQL, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________ \
+ //`---------------------------------------' `---------------------------------------'
+ ),
+
+ [_RAISE] = LAYOUT( \
+ //,---------------------------------------------------------------------. ,---------------------------------------------------------------------.
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, ________, ________, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, KC_MINS, KC_EQL, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________ \
+ //`---------------------------------------' `---------------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT( \
+ //,---------------------------------------------------------------------. ,---------------------------------------------------------------------.
+ ________, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LCBR, KC_RCBR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, KC_F11, KC_F12, ________, ________, ________, KC_LCBR, KC_RCBR, KC_HOME, KC_PGDN, KC_PGUP, KC_END, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________ \
+ //`---------------------------------------' `---------------------------------------'
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ // set_timelog();
+ }
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
diff --git a/keyboards/pinky/3/keymaps/default/rules.mk b/keyboards/pinky/3/keymaps/default/rules.mk
new file mode 100644
index 0000000000..1768698093
--- /dev/null
+++ b/keyboards/pinky/3/keymaps/default/rules.mk
@@ -0,0 +1,18 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
diff --git a/keyboards/pinky/3/rules.mk b/keyboards/pinky/3/rules.mk
new file mode 100644
index 0000000000..1bb8bf6d7f
--- /dev/null
+++ b/keyboards/pinky/3/rules.mk
@@ -0,0 +1 @@
+# empty
diff --git a/keyboards/pinky/4/4.c b/keyboards/pinky/4/4.c
new file mode 100644
index 0000000000..200510d0aa
--- /dev/null
+++ b/keyboards/pinky/4/4.c
@@ -0,0 +1 @@
+#include "pinky.h"
diff --git a/keyboards/pinky/4/4.h b/keyboards/pinky/4/4.h
new file mode 100644
index 0000000000..ad105ce7fc
--- /dev/null
+++ b/keyboards/pinky/4/4.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "../pinky.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, R40, R41, R42, R43 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25, L26 }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { KC_NO, KC_NO, KC_NO, L40, L41, L42, L43 }, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R16, R15, R14, R13, R12, R11, R10 }, \
+ { R26, R25, R24, R23, R22, R21, R20 }, \
+ { R36, R35, R34, R33, R32, R31, R30 }, \
+ { KC_NO, KC_NO, KC_NO, R43, R42, R41, R40 } \
+ }
+
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, R40, R41, R42, R43 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, KC_##R36, \
+ KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##R40, KC_##R41, KC_##R42, KC_##R43 \
+ )
diff --git a/keyboards/pinky/4/config.h b/keyboards/pinky/4/config.h
new file mode 100644
index 0000000000..2348d40845
--- /dev/null
+++ b/keyboards/pinky/4/config.h
@@ -0,0 +1,246 @@
+/* Copyright 2018 'Masayuki Sunahara'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER tamanishi
+#define PRODUCT Pinky
+#define DESCRIPTION A split keyboard with 3 or 4 x7 vertically staggered keys and 4 thumb keys
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 7
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 }
+
+// wiring of each half
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
+
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+// #define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+// #define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/pinky/4/keymaps/default/config.h b/keyboards/pinky/4/keymaps/default/config.h
new file mode 100644
index 0000000000..db79776729
--- /dev/null
+++ b/keyboards/pinky/4/keymaps/default/config.h
@@ -0,0 +1,31 @@
+/* Copyright 2018 'Masayuki Sunahara'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 200
+#define RETRO_TAPPPING
diff --git a/keyboards/pinky/4/keymaps/default/keymap.c b/keyboards/pinky/4/keymaps/default/keymap.c
new file mode 100644
index 0000000000..ee43194dd8
--- /dev/null
+++ b/keyboards/pinky/4/keymaps/default/keymap.c
@@ -0,0 +1,154 @@
+/* Copyright 2018 'Masayuki Sunahara'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST
+};
+
+#define ________ KC_TRNS
+#define XXXXXXXX KC_NO
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+#define KC_ADJ ADJUST
+#define KC_CTLTB CTL_T(KC_TAB)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT( \
+ //,---------------------------------------------------------------------. ,---------------------------------------------------------------------.
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LPRN, KC_RPRN, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ KC_CTLTB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LCBR, KC_RCBR, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ADJ, KC_ADJ, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ KC_LALT, KC_LOWER, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_RAISE, KC_RALT \
+ //`---------------------------------------' `---------------------------------------'
+ ),
+
+ [_LOWER] = LAYOUT( \
+ //,---------------------------------------------------------------------. ,---------------------------------------------------------------------.
+ KC_GRV, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, KC_MINS, KC_EQL, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________ \
+ //`---------------------------------------' `---------------------------------------'
+ ),
+
+ [_RAISE] = LAYOUT( \
+ //,---------------------------------------------------------------------. ,---------------------------------------------------------------------.
+ KC_GRV, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, KC_MINS, KC_EQL, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________ \
+ //`---------------------------------------' `---------------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT( \
+ //,---------------------------------------------------------------------. ,---------------------------------------------------------------------.
+ ________, 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_HOME, KC_PGDN, KC_PGUP, KC_END, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________, ________,\
+ //|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
+ ________, ________, ________, ________, ________, ________, ________, ________ \
+ //`---------------------------------------' `---------------------------------------'
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ // set_timelog();
+ }
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/pinky/4/keymaps/default/rules.mk b/keyboards/pinky/4/keymaps/default/rules.mk
new file mode 100644
index 0000000000..1768698093
--- /dev/null
+++ b/keyboards/pinky/4/keymaps/default/rules.mk
@@ -0,0 +1,18 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
diff --git a/keyboards/pinky/4/rules.mk b/keyboards/pinky/4/rules.mk
new file mode 100644
index 0000000000..1bb8bf6d7f
--- /dev/null
+++ b/keyboards/pinky/4/rules.mk
@@ -0,0 +1 @@
+# empty
diff --git a/keyboards/pinky/config.h b/keyboards/pinky/config.h
new file mode 100644
index 0000000000..7f0c3c10ea
--- /dev/null
+++ b/keyboards/pinky/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2018 'Masayuki Sunahara'
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
diff --git a/keyboards/pinky/pinky.c b/keyboards/pinky/pinky.c
new file mode 100644
index 0000000000..9b98ea85d3
--- /dev/null
+++ b/keyboards/pinky/pinky.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 'Masayuki Sunahara'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "pinky.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/pinky/pinky.h b/keyboards/pinky/pinky.h
new file mode 100644
index 0000000000..9cc5d8d589
--- /dev/null
+++ b/keyboards/pinky/pinky.h
@@ -0,0 +1,29 @@
+/* Copyright 2018 'Masayuki Sunahara'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef PINKY_H
+#define PINKY_H
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_pinky_3
+ #include "3.h"
+#endif
+
+#ifdef KEYBOARD_pinky_4
+ #include "4.h"
+#endif
+
+#endif
diff --git a/keyboards/pinky/readme.md b/keyboards/pinky/readme.md
new file mode 100644
index 0000000000..f9eb6ee2b8
--- /dev/null
+++ b/keyboards/pinky/readme.md
@@ -0,0 +1,25 @@
+Pinky
+===
+
+A split keyboard with 3 or 4 x7 vertically staggered keys and 4 thumb keys.
+An idea is inspired from [crkbd](https://github.com/foostan/crkbd), [Lily58](https://github.com/kata0510/Lily58), [Ergo42](https://github.com/Biacco42/Ergo42) and [Helix](https://github.com/MakotoKurauchi/helix).
+
+Keyboard Maintainer: [Masayuki Sunahara](https://github.com/tamanishi/) [@tamanishi](https://twitter.com/tamanishi)
+Hardware Supported: Pinky3(3rows) or Pinky4(4rows) PCB, Pro Micro
+Hardware Availability: [Pinky3 PCB & Case Data](https://github.com/tamanishi/Pinky3), [Pinky4 PCB & Case Data](https://github.com/tamanishi/Pinky4)
+
+Make example for pinky(3rows) keyboard (after setting up your build environment):
+
+ make pinky:default
+ or
+ make pinky/3:default
+
+Make example for pinky(4rows) keyboard (after setting up your build environment):
+
+ make pinky/4:default
+
+Install example for pinky(3rows) keyboard:
+
+ make pinky:default:avrdude
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pinky/rules.mk b/keyboards/pinky/rules.mk
new file mode 100644
index 0000000000..1c0059d318
--- /dev/null
+++ b/keyboards/pinky/rules.mk
@@ -0,0 +1,85 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = pinky/3
diff --git a/keyboards/plain60/config.h b/keyboards/plain60/config.h
new file mode 100644
index 0000000000..9e838616bf
--- /dev/null
+++ b/keyboards/plain60/config.h
@@ -0,0 +1,75 @@
+/*
+Copyright 2019 Maarten Dekkers <maartenwut@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include QMK_KEYBOARD_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4705
+#define PRODUCT_ID 0x0160
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Maartenwut
+#define PRODUCT Plain60
+#define DESCRIPTION A plain 60% PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS {B4,D7,D6,D4,E6}
+#define MATRIX_COL_PINS {D2,D1,D0,D3,D5,B5,F0,B6,C6,C7,F1,F4,F5,F6,F7}
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define QMK_ESC_OUTPUT D2 // usually COL
+#define QMK_ESC_INPUT B4 // usually ROW
+
+//VIA
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*10*6*2)) = (35+480)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 635
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 389 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16 \ No newline at end of file
diff --git a/keyboards/plain60/info.json b/keyboards/plain60/info.json
new file mode 100644
index 0000000000..dca4b3cdc2
--- /dev/null
+++ b/keyboards/plain60/info.json
@@ -0,0 +1,79 @@
+{
+ "keyboard_name": "Plain60",
+ "url": "",
+ "maintainer": "maartenwut",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 65,
+ "layout": [
+ {"label":"k00", "x":0, "y":0},
+ {"label":"k01", "x":1, "y":0},
+ {"label":"k02", "x":2, "y":0},
+ {"label":"k03", "x":3, "y":0},
+ {"label":"k04", "x":4, "y":0},
+ {"label":"k05", "x":5, "y":0},
+ {"label":"k06", "x":6, "y":0},
+ {"label":"k07", "x":7, "y":0},
+ {"label":"k08", "x":8, "y":0},
+ {"label":"k09", "x":9, "y":0},
+ {"label":"k0a", "x":10, "y":0},
+ {"label":"k0b", "x":11, "y":0},
+ {"label":"k0c", "x":12, "y":0},
+ {"label":"k0d", "x":13, "y":0},
+ {"label":"k0e", "x":14, "y":0},
+ {"label":"k10", "x":0, "y":1, "w":1.5},
+ {"label":"k11", "x":1.5, "y":1},
+ {"label":"k12", "x":2.5, "y":1},
+ {"label":"k13", "x":3.5, "y":1},
+ {"label":"k14", "x":4.5, "y":1},
+ {"label":"k15", "x":5.5, "y":1},
+ {"label":"k16", "x":6.5, "y":1},
+ {"label":"k17", "x":7.5, "y":1},
+ {"label":"k18", "x":8.5, "y":1},
+ {"label":"k19", "x":9.5, "y":1},
+ {"label":"k1a", "x":10.5, "y":1},
+ {"label":"k1b", "x":11.5, "y":1},
+ {"label":"k1c", "x":12.5, "y":1},
+ {"label":"k1d", "x":13.5, "y":1, "w":1.5},
+ {"label":"k20", "x":0, "y":2, "w":1.75},
+ {"label":"k21", "x":1.75, "y":2},
+ {"label":"k22", "x":2.75, "y":2},
+ {"label":"k23", "x":3.75, "y":2},
+ {"label":"k24", "x":4.75, "y":2},
+ {"label":"k25", "x":5.75, "y":2},
+ {"label":"k26", "x":6.75, "y":2},
+ {"label":"k27", "x":7.75, "y":2},
+ {"label":"k28", "x":8.75, "y":2},
+ {"label":"k29", "x":9.75, "y":2},
+ {"label":"k2a", "x":10.75, "y":2},
+ {"label":"k2b", "x":11.75, "y":2},
+ {"label":"k2c", "x":12.75, "y":2},
+ {"label":"k2d", "x":13.75, "y":2, "w":1.25},
+ {"label":"k30", "x":0, "y":3, "w":1.25},
+ {"label":"k31", "x":1.25, "y":3},
+ {"label":"k32", "x":2.25, "y":3},
+ {"label":"k33", "x":3.25, "y":3},
+ {"label":"k34", "x":4.25, "y":3},
+ {"label":"k35", "x":5.25, "y":3},
+ {"label":"k36", "x":6.25, "y":3},
+ {"label":"k37", "x":7.25, "y":3},
+ {"label":"k38", "x":8.25, "y":3},
+ {"label":"k39", "x":9.25, "y":3},
+ {"label":"k3a", "x":10.25, "y":3},
+ {"label":"k3b", "x":11.25, "y":3},
+ {"label":"k3c", "x":12.25, "y":3, "w":1.75},
+ {"label":"k3d", "x":14, "y":3},
+ {"label":"k40", "x":0, "y":4, "w":1.25},
+ {"label":"k41", "x":1.25, "y":4, "w":1.25},
+ {"label":"k42", "x":2.5, "y":4, "w":1.25},
+ {"label":"k46", "x":3.75, "y":4, "w":6.25},
+ {"label":"k4a", "x":10, "y":4, "w":1.25},
+ {"label":"k4b", "x":11.25, "y":4, "w":1.25},
+ {"label":"k4c", "x":12.5, "y":4, "w":1.25},
+ {"label":"k4d", "x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/plain60/keymaps/default/keymap.c b/keyboards/plain60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..7e8cfff354
--- /dev/null
+++ b/keyboards/plain60/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _MA 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT(
+ 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_BSPC, \
+ 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, \
+ 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTRL)
+};
diff --git a/keyboards/plain60/plain60.c b/keyboards/plain60/plain60.c
new file mode 100644
index 0000000000..d816064104
--- /dev/null
+++ b/keyboards/plain60/plain60.c
@@ -0,0 +1 @@
+#include "plain60.h"
diff --git a/keyboards/plain60/plain60.h b/keyboards/plain60/plain60.h
new file mode 100644
index 0000000000..f7b497bab7
--- /dev/null
+++ b/keyboards/plain60/plain60.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+ k40, k41, k42, k46, k4a, k4b, k4c, k4d \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, XXX}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, XXX}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, XXX}, \
+ {k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, XXX} \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
diff --git a/keyboards/plain60/readme.md b/keyboards/plain60/readme.md
new file mode 100644
index 0000000000..5e8b17a965
--- /dev/null
+++ b/keyboards/plain60/readme.md
@@ -0,0 +1,14 @@
+Plain60-C and Plain60-B
+======
+
+A plain 60% PCB with USB-C.
+
+Keyboard Maintainer: Maartenwut
+Hardware Supported: Plain60-C and Plain60-B
+Hardware Availability: https://github.com/Maartenwut/plain60-c
+
+Make example for this keyboard (after setting up your build environment):
+
+ make plain60:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/plain60/rules.mk b/keyboards/plain60/rules.mk
new file mode 100644
index 0000000000..a1a0e9ca1c
--- /dev/null
+++ b/keyboards/plain60/rules.mk
@@ -0,0 +1,66 @@
+SRC += keyboards/wilba_tech/wt_main.c
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
diff --git a/keyboards/planck/keymaps/ab/rules.mk b/keyboards/planck/keymaps/ab/rules.mk
index 0b025a2313..c4dc26dc2b 100644
--- a/keyboards/planck/keymaps/ab/rules.mk
+++ b/keyboards/planck/keymaps/ab/rules.mk
@@ -58,6 +58,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/ajp10304/rules.mk b/keyboards/planck/keymaps/ajp10304/rules.mk
index dc6ab13e89..4dee01cd5b 100644
--- a/keyboards/planck/keymaps/ajp10304/rules.mk
+++ b/keyboards/planck/keymaps/ajp10304/rules.mk
@@ -1,6 +1,3 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
AUDIO_ENABLE = no
MOUSEKEY_ENABLE = yes
+
diff --git a/keyboards/planck/keymaps/alexey/keymap.c b/keyboards/planck/keymaps/alexey/keymap.c
index f3ddc8a8a7..90bdd2c37f 100644
--- a/keyboards/planck/keymaps/alexey/keymap.c
+++ b/keyboards/planck/keymaps/alexey/keymap.c
@@ -30,10 +30,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/planck/keymaps/alexey/rules.mk b/keyboards/planck/keymaps/alexey/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/alexey/rules.mk
+++ b/keyboards/planck/keymaps/alexey/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/altgr/rules.mk b/keyboards/planck/keymaps/altgr/rules.mk
index 40f153844c..a722766296 100644
--- a/keyboards/planck/keymaps/altgr/rules.mk
+++ b/keyboards/planck/keymaps/altgr/rules.mk
@@ -21,6 +21,3 @@ SLEEP_LED_ENABLE = no # breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # enable double tap completion of (),[],{}
-ifndef QUANTUM_DIR
-include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/angerthosenear/rules.mk b/keyboards/planck/keymaps/angerthosenear/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/angerthosenear/rules.mk
+++ b/keyboards/planck/keymaps/angerthosenear/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/austin/rules.mk b/keyboards/planck/keymaps/austin/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/austin/rules.mk
+++ b/keyboards/planck/keymaps/austin/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/basic/keymap.c b/keyboards/planck/keymaps/basic/keymap.c
index f34291323c..cc70aeea3b 100644
--- a/keyboards/planck/keymaps/basic/keymap.c
+++ b/keyboards/planck/keymaps/basic/keymap.c
@@ -69,10 +69,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
diff --git a/keyboards/planck/keymaps/basic/rules.mk b/keyboards/planck/keymaps/basic/rules.mk
index 6f88a28d50..a31025bc33 100644
--- a/keyboards/planck/keymaps/basic/rules.mk
+++ b/keyboards/planck/keymaps/basic/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c
index ce862ef9a8..e26aff07e7 100644
--- a/keyboards/planck/keymaps/bone2planck/keymap.c
+++ b/keyboards/planck/keymaps/bone2planck/keymap.c
@@ -142,11 +142,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/planck/keymaps/bone2planck/rules.mk b/keyboards/planck/keymaps/bone2planck/rules.mk
index 699726948d..fc0bbe9e74 100644
--- a/keyboards/planck/keymaps/bone2planck/rules.mk
+++ b/keyboards/planck/keymaps/bone2planck/rules.mk
@@ -18,6 +18,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/brandon/rules.mk b/keyboards/planck/keymaps/brandon/rules.mk
index 6df206578c..30275cf1f6 100644
--- a/keyboards/planck/keymaps/brandon/rules.mk
+++ b/keyboards/planck/keymaps/brandon/rules.mk
@@ -10,6 +10,3 @@ MOUSEKEY_ENABLE = yes
CONSOLE_ENABLE = no
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c
index 1cffe15d46..039e802482 100644
--- a/keyboards/planck/keymaps/callum/keymap.c
+++ b/keyboards/planck/keymaps/callum/keymap.c
@@ -4,9 +4,6 @@
extern keymap_config_t keymap_config;
-#define G(X) LGUI(X)
-#define A(X) LALT(X)
-#define C(X) LCTL(X)
#define AC(X) A(C(X))
#define SC(X) S(C(X))
#define _______ KC_TRNS
diff --git a/keyboards/planck/keymaps/callum/rules.mk b/keyboards/planck/keymaps/callum/rules.mk
index 67fe8d284d..25d398f080 100644
--- a/keyboards/planck/keymaps/callum/rules.mk
+++ b/keyboards/planck/keymaps/callum/rules.mk
@@ -18,6 +18,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c
index 8fdbcf1a7d..f5e9cdbcd8 100644
--- a/keyboards/planck/keymaps/cbbrowne/keymap.c
+++ b/keyboards/planck/keymaps/cbbrowne/keymap.c
@@ -153,11 +153,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-
-/* What is fn_actions actually used for??? */
-const uint16_t PROGMEM fn_actions[] = {
-};
-
/* This bit of logic seeds a wee linear congruential random number generator */
/* lots of prime numbers everywhere... */
static uint16_t random_value = 157;
diff --git a/keyboards/planck/keymaps/cbbrowne/rules.mk b/keyboards/planck/keymaps/cbbrowne/rules.mk
index c7cef55a9a..45d6837399 100644
--- a/keyboards/planck/keymaps/cbbrowne/rules.mk
+++ b/keyboards/planck/keymaps/cbbrowne/rules.mk
@@ -19,6 +19,3 @@ API_SYSEX_ENABLE = no # Enable SYSEX API (+5390)
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/chance/rules.mk b/keyboards/planck/keymaps/chance/rules.mk
index 5c9798a572..2febfd9699 100644
--- a/keyboards/planck/keymaps/chance/rules.mk
+++ b/keyboards/planck/keymaps/chance/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
AUDIO_ENABLE = no
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/charlie/rules.mk b/keyboards/planck/keymaps/charlie/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/charlie/rules.mk
+++ b/keyboards/planck/keymaps/charlie/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/circuit/rules.mk b/keyboards/planck/keymaps/circuit/rules.mk
index e9a02e31e2..b527d82971 100644
--- a/keyboards/planck/keymaps/circuit/rules.mk
+++ b/keyboards/planck/keymaps/circuit/rules.mk
@@ -20,6 +20,3 @@ TAP_DANCE_ENABLE = yes # Enables the double-tap functionality of keys
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/coloneljesus/rules.mk b/keyboards/planck/keymaps/coloneljesus/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/planck/keymaps/coloneljesus/rules.mk
+++ b/keyboards/planck/keymaps/coloneljesus/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/daniel/rules.mk b/keyboards/planck/keymaps/daniel/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/daniel/rules.mk
+++ b/keyboards/planck/keymaps/daniel/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/david/rules.mk b/keyboards/planck/keymaps/david/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/david/rules.mk
+++ b/keyboards/planck/keymaps/david/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/davidrambo/rules.mk b/keyboards/planck/keymaps/davidrambo/rules.mk
index ffa9b870af..5e5ab38458 100644
--- a/keyboards/planck/keymaps/davidrambo/rules.mk
+++ b/keyboards/planck/keymaps/davidrambo/rules.mk
@@ -1,6 +1,3 @@
TAP_DANCE_ENABLE = yes
MOUSEKEY_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/dc/rules.mk b/keyboards/planck/keymaps/dc/rules.mk
index ea4341b4fd..07da5f1944 100644
--- a/keyboards/planck/keymaps/dc/rules.mk
+++ b/keyboards/planck/keymaps/dc/rules.mk
@@ -1,7 +1,3 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
@@ -21,4 +17,5 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
TAP_DANCE_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
diff --git a/keyboards/planck/keymaps/dcompact/rules.mk b/keyboards/planck/keymaps/dcompact/rules.mk
index d7eff1adc6..12b4e44c2b 100644
--- a/keyboards/planck/keymaps/dcompact/rules.mk
+++ b/keyboards/planck/keymaps/dcompact/rules.mk
@@ -1,7 +1,3 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# https://beta.docs.qmk.fm/reference/config-options#feature-options
# Features Specifically Wanted
EXTRAKEY_ENABLE = yes
@@ -13,3 +9,4 @@ AUDIO_ENABLE = yes
MOUSEKEY_ENABLE = no
MIDI_ENABLE = no
CONSOLE_ENABLE = no
+
diff --git a/keyboards/planck/keymaps/dlaroe/rules.mk b/keyboards/planck/keymaps/dlaroe/rules.mk
index 0064f622b7..7ff90237a7 100644
--- a/keyboards/planck/keymaps/dlaroe/rules.mk
+++ b/keyboards/planck/keymaps/dlaroe/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/dr_notsokind/rules.mk b/keyboards/planck/keymaps/dr_notsokind/rules.mk
index eea90f8e6a..91156b6b46 100644
--- a/keyboards/planck/keymaps/dr_notsokind/rules.mk
+++ b/keyboards/planck/keymaps/dr_notsokind/rules.mk
@@ -20,6 +20,3 @@ TAP_DANCE_ENABLE = yes # Enables the double-tap functionality of keys
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/dshields/rules.mk b/keyboards/planck/keymaps/dshields/rules.mk
index a526c5a31a..a2bec43357 100644
--- a/keyboards/planck/keymaps/dshields/rules.mk
+++ b/keyboards/planck/keymaps/dshields/rules.mk
@@ -1,7 +1,3 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
COMMAND_ENABLE = no # Commands for debug and configuration
CONSOLE_ENABLE = no # Console for debug(+400)
diff --git a/keyboards/planck/keymaps/dudeofawesome/rules.mk b/keyboards/planck/keymaps/dudeofawesome/rules.mk
index edeab16439..eeee270d5e 100644
--- a/keyboards/planck/keymaps/dudeofawesome/rules.mk
+++ b/keyboards/planck/keymaps/dudeofawesome/rules.mk
@@ -1,10 +1,7 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
AUDIO_ENABLE = yes # Audio output on port C6
CONSOLE_ENABLE = no # Console for debug(+400)
MIDI_ENABLE = no # MIDI controls
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
diff --git a/keyboards/planck/keymaps/dzobert/rules.mk b/keyboards/planck/keymaps/dzobert/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/dzobert/rules.mk
+++ b/keyboards/planck/keymaps/dzobert/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/espynn/rules.mk b/keyboards/planck/keymaps/espynn/rules.mk
index 0b025a2313..c4dc26dc2b 100644
--- a/keyboards/planck/keymaps/espynn/rules.mk
+++ b/keyboards/planck/keymaps/espynn/rules.mk
@@ -58,6 +58,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/experimental/rules.mk b/keyboards/planck/keymaps/experimental/rules.mk
index 721e887b98..e5db055436 100644
--- a/keyboards/planck/keymaps/experimental/rules.mk
+++ b/keyboards/planck/keymaps/experimental/rules.mk
@@ -23,6 +23,3 @@ LEADER_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/gabriel/keymap.c b/keyboards/planck/keymaps/gabriel/keymap.c
index cbb44f68ae..96e4a17ee6 100644
--- a/keyboards/planck/keymaps/gabriel/keymap.c
+++ b/keyboards/planck/keymaps/gabriel/keymap.c
@@ -88,10 +88,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/planck/keymaps/gabriel/rules.mk b/keyboards/planck/keymaps/gabriel/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/gabriel/rules.mk
+++ b/keyboards/planck/keymaps/gabriel/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/grahampheath/rules.mk b/keyboards/planck/keymaps/grahampheath/rules.mk
index 2ff606255e..e84f6d5e6d 100644
--- a/keyboards/planck/keymaps/grahampheath/rules.mk
+++ b/keyboards/planck/keymaps/grahampheath/rules.mk
@@ -1,9 +1,7 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
NKRO_ENABLE = yes # N-Key rollover.
# MOUSEKEY_ENABLE = yes # Mouse mode.
TAP_DANCE_ENABLE = no # Tap dance enabled.
UNICODEMAP_ENABLE = no # Unicode keymap (sucks on osx).
AUDIO_ENABLE = yes # Audio output on port C6
+
diff --git a/keyboards/planck/keymaps/gunp/rules.mk b/keyboards/planck/keymaps/gunp/rules.mk
index 7d03482abc..ec69d6e78f 100644
--- a/keyboards/planck/keymaps/gunp/rules.mk
+++ b/keyboards/planck/keymaps/gunp/rules.mk
@@ -18,6 +18,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/handwired_binaryplease/rules.mk b/keyboards/planck/keymaps/handwired_binaryplease/rules.mk
index 248fe2bb74..efe0c7a5dd 100644
--- a/keyboards/planck/keymaps/handwired_binaryplease/rules.mk
+++ b/keyboards/planck/keymaps/handwired_binaryplease/rules.mk
@@ -1,9 +1,3 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-
-
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
@@ -72,3 +66,4 @@ API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
diff --git a/keyboards/planck/keymaps/hiea/rules.mk b/keyboards/planck/keymaps/hiea/rules.mk
index 40f153844c..a722766296 100644
--- a/keyboards/planck/keymaps/hiea/rules.mk
+++ b/keyboards/planck/keymaps/hiea/rules.mk
@@ -21,6 +21,3 @@ SLEEP_LED_ENABLE = no # breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # enable double tap completion of (),[],{}
-ifndef QUANTUM_DIR
-include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/hieax/rules.mk b/keyboards/planck/keymaps/hieax/rules.mk
index 40f153844c..a722766296 100644
--- a/keyboards/planck/keymaps/hieax/rules.mk
+++ b/keyboards/planck/keymaps/hieax/rules.mk
@@ -21,6 +21,3 @@ SLEEP_LED_ENABLE = no # breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # enable double tap completion of (),[],{}
-ifndef QUANTUM_DIR
-include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/ishtob/rule.mk b/keyboards/planck/keymaps/ishtob/rule.mk
index c0d38aaa14..0f71be62b7 100755
--- a/keyboards/planck/keymaps/ishtob/rule.mk
+++ b/keyboards/planck/keymaps/ishtob/rule.mk
@@ -18,6 +18,3 @@ ENCODER_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/jacob/keymap.c b/keyboards/planck/keymaps/jacob/keymap.c
index f44faff743..5d823157bb 100644
--- a/keyboards/planck/keymaps/jacob/keymap.c
+++ b/keyboards/planck/keymaps/jacob/keymap.c
@@ -34,10 +34,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/planck/keymaps/jacob/rules.mk b/keyboards/planck/keymaps/jacob/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/jacob/rules.mk
+++ b/keyboards/planck/keymaps/jacob/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/jirgn/rules.mk b/keyboards/planck/keymaps/jirgn/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/planck/keymaps/jirgn/rules.mk
+++ b/keyboards/planck/keymaps/jirgn/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/johannes/keymap.c b/keyboards/planck/keymaps/johannes/keymap.c
index 86748daf2e..2432a86735 100644
--- a/keyboards/planck/keymaps/johannes/keymap.c
+++ b/keyboards/planck/keymaps/johannes/keymap.c
@@ -90,10 +90,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
return MACRO_NONE;
diff --git a/keyboards/planck/keymaps/johannes/rules.mk b/keyboards/planck/keymaps/johannes/rules.mk
index 6f88a28d50..a31025bc33 100644
--- a/keyboards/planck/keymaps/johannes/rules.mk
+++ b/keyboards/planck/keymaps/johannes/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/khord/rules.mk b/keyboards/planck/keymaps/khord/rules.mk
index c248822b23..444fa38a93 100644
--- a/keyboards/planck/keymaps/khord/rules.mk
+++ b/keyboards/planck/keymaps/khord/rules.mk
@@ -1,6 +1,3 @@
BACKLIGHT_ENABLE = yes
TAP_DANCE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/kmontag42/rules.mk b/keyboards/planck/keymaps/kmontag42/rules.mk
index 0c100076be..5712a735d1 100644
--- a/keyboards/planck/keymaps/kmontag42/rules.mk
+++ b/keyboards/planck/keymaps/kmontag42/rules.mk
@@ -1,6 +1,3 @@
UNICODE_ENABLE = yes
LEADER_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/kyle/rules.mk b/keyboards/planck/keymaps/kyle/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/kyle/rules.mk
+++ b/keyboards/planck/keymaps/kyle/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/lae3/rules.mk b/keyboards/planck/keymaps/lae3/rules.mk
index 89b147f819..4d91a120c6 100644
--- a/keyboards/planck/keymaps/lae3/rules.mk
+++ b/keyboards/planck/keymaps/lae3/rules.mk
@@ -18,6 +18,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/lukas/keymap.c b/keyboards/planck/keymaps/lukas/keymap.c
index d7702ad09f..7adb6a3dd0 100644
--- a/keyboards/planck/keymaps/lukas/keymap.c
+++ b/keyboards/planck/keymaps/lukas/keymap.c
@@ -33,10 +33,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/planck/keymaps/lukas/rules.mk b/keyboards/planck/keymaps/lukas/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/lukas/rules.mk
+++ b/keyboards/planck/keymaps/lukas/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/luke/keymap.c b/keyboards/planck/keymaps/luke/keymap.c
index 5fc8958034..121e531485 100644
--- a/keyboards/planck/keymaps/luke/keymap.c
+++ b/keyboards/planck/keymaps/luke/keymap.c
@@ -274,10 +274,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-
void matrix_init_user(){
set_unicode_input_mode(UC_LNX);
}
diff --git a/keyboards/planck/keymaps/luke/rules.mk b/keyboards/planck/keymaps/luke/rules.mk
index 76ed281c11..e04815e2ca 100644
--- a/keyboards/planck/keymaps/luke/rules.mk
+++ b/keyboards/planck/keymaps/luke/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/max/rules.mk b/keyboards/planck/keymaps/max/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/max/rules.mk
+++ b/keyboards/planck/keymaps/max/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/mikethetiger/config.h b/keyboards/planck/keymaps/mikethetiger/config.h
new file mode 100644
index 0000000000..6fa31cc8a7
--- /dev/null
+++ b/keyboards/planck/keymaps/mikethetiger/config.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
+
diff --git a/keyboards/planck/keymaps/mikethetiger/keymap.c b/keyboards/planck/keymaps/mikethetiger/keymap.c
new file mode 100644
index 0000000000..bc36825e2e
--- /dev/null
+++ b/keyboards/planck/keymaps/mikethetiger/keymap.c
@@ -0,0 +1,346 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ BACKLIT,
+ EXT_PLV
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PLOVER] = LAYOUT_planck_grid(
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ #ifdef KEYBOARD_planck_rev5
+ PORTE &= ~(1<<6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ PORTE |= (1<<6);
+ #endif
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_song);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ #ifdef MOUSEKEY_ENABLE
+ register_code(KC_MS_WH_DOWN);
+ unregister_code(KC_MS_WH_DOWN);
+ #else
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ #endif
+ } else {
+ #ifdef MOUSEKEY_ENABLE
+ register_code(KC_MS_WH_UP);
+ unregister_code(KC_MS_WH_UP);
+ #else
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ #endif
+ }
+ }
+}
+
+void dip_update(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_song);
+ #endif
+ layer_on(_ADJUST);
+ } else {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ #endif
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+ #ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ }
+ #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/mikethetiger/readme.md b/keyboards/planck/keymaps/mikethetiger/readme.md
new file mode 100644
index 0000000000..ed03952965
--- /dev/null
+++ b/keyboards/planck/keymaps/mikethetiger/readme.md
@@ -0,0 +1,2 @@
+# mikethetiger Planck Layout
+
diff --git a/keyboards/planck/keymaps/mikethetiger/rules.mk b/keyboards/planck/keymaps/mikethetiger/rules.mk
new file mode 100644
index 0000000000..dcf16bef39
--- /dev/null
+++ b/keyboards/planck/keymaps/mikethetiger/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/mitch/rules.mk b/keyboards/planck/keymaps/mitch/rules.mk
index 7955003d47..32dc2acc67 100644
--- a/keyboards/planck/keymaps/mitch/rules.mk
+++ b/keyboards/planck/keymaps/mitch/rules.mk
@@ -1,5 +1,2 @@
SUBPROJECT = rev3
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/mjt/rules.mk b/keyboards/planck/keymaps/mjt/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/planck/keymaps/mjt/rules.mk
+++ b/keyboards/planck/keymaps/mjt/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/mjtnumsym/rules.mk b/keyboards/planck/keymaps/mjtnumsym/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/planck/keymaps/mjtnumsym/rules.mk
+++ b/keyboards/planck/keymaps/mjtnumsym/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/muzfuz/config.h b/keyboards/planck/keymaps/muzfuz/config.h
new file mode 100644
index 0000000000..fe44b5aa2b
--- /dev/null
+++ b/keyboards/planck/keymaps/muzfuz/config.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+#define STARTUP_SONG SONG(PLANCK_SOUND)
+// #define STARTUP_SONG SONG(NO_SOUND)
+
+#define DEFAULT_LAYER_SONGS \
+ { \
+ SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/keymaps/muzfuz/keymap.c b/keyboards/planck/keymaps/muzfuz/keymap.c
new file mode 100644
index 0000000000..16994a5762
--- /dev/null
+++ b/keyboards/planck/keymaps/muzfuz/keymap.c
@@ -0,0 +1,297 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers
+{
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum planck_keycodes
+{
+ QWERTY = SAFE_RANGE,
+ BACKLIT,
+ EXT_PLV,
+ HASHRKT,
+ CLNEQLS
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ESC_CTL CTL_T(KC_ESCAPE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Enter|Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ ESC_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_ENT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
+
+ /* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |ESCCTL| := | | { | } | ( | ) | - | = | \ | ~ | GUI |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | => | | [ | ] | | | _ | + | | | Home | End |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+ [_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ ESC_CTL, CLNEQLS, _______, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_MINS, KC_EQL, KC_BSLS, KC_TILD, KC_RGUI,
+ _______, HASHRKT, _______, KC_LBRC, KC_RBRC, _______, _______, KC_UNDS, KC_PLUS, KC_PIPE, KC_HOME, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY),
+
+ /* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | | | Up | | | | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |ESCCTL| | Left | Down | Right | | | 4 | 5 | 6 | | GUI |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | 1 | 2 | 3 | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, _______, _______, KC_UP, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ ESC_CTL, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_4, KC_5, KC_6, _______, KC_RGUI,
+ _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, _______, _______, QWERTY, _______, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+
+};
+
+#ifdef AUDIO_ENABLE
+float plover_song[][2] = SONG(PLOVER_SOUND);
+float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state)
+{
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ switch (keycode)
+ {
+ case HASHRKT:
+ if (record->event.pressed)
+ {
+ SEND_STRING("=>");
+ }
+ break;
+ case CLNEQLS:
+ if (record->event.pressed)
+ {
+ SEND_STRING(":=");
+ }
+ break;
+ case QWERTY:
+ if (record->event.pressed)
+ {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed)
+ {
+ register_code(KC_RSFT);
+#ifdef BACKLIGHT_ENABLE
+ backlight_step();
+#endif
+#ifdef KEYBOARD_planck_rev5
+ PORTE &= ~(1 << 6);
+#endif
+ }
+ else
+ {
+ unregister_code(KC_RSFT);
+#ifdef KEYBOARD_planck_rev5
+ PORTE |= (1 << 6);
+#endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise)
+{
+ if (muse_mode)
+ {
+ if (IS_LAYER_ON(_RAISE))
+ {
+ if (clockwise)
+ {
+ muse_offset++;
+ }
+ else
+ {
+ muse_offset--;
+ }
+ }
+ else
+ {
+ if (clockwise)
+ {
+ muse_tempo += 1;
+ }
+ else
+ {
+ muse_tempo -= 1;
+ }
+ }
+ }
+ else
+ {
+ if (clockwise)
+ {
+#ifdef MOUSEKEY_ENABLE
+ register_code(KC_MS_WH_DOWN);
+ unregister_code(KC_MS_WH_DOWN);
+#else
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+#endif
+ }
+ else
+ {
+#ifdef MOUSEKEY_ENABLE
+ register_code(KC_MS_WH_UP);
+ unregister_code(KC_MS_WH_UP);
+#else
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+#endif
+ }
+ }
+}
+
+void dip_update(uint8_t index, bool active)
+{
+ switch (index)
+ {
+ case 0:
+ if (active)
+ {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_song);
+#endif
+ layer_on(_ADJUST);
+ }
+ else
+ {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+#endif
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active)
+ {
+ muse_mode = true;
+ }
+ else
+ {
+ muse_mode = false;
+#ifdef AUDIO_ENABLE
+ stop_all_notes();
+#endif
+ }
+ }
+}
+
+void matrix_scan_user(void)
+{
+#ifdef AUDIO_ENABLE
+ if (muse_mode)
+ {
+ if (muse_counter == 0)
+ {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note)
+ {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ }
+#endif
+}
+
+bool music_mask_user(uint16_t keycode)
+{
+ switch (keycode)
+ {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/muzfuz/readme.md b/keyboards/planck/keymaps/muzfuz/readme.md
new file mode 100644
index 0000000000..78153fb324
--- /dev/null
+++ b/keyboards/planck/keymaps/muzfuz/readme.md
@@ -0,0 +1,8 @@
+# The muzfuz Planck Layout
+
+```shell
+docker run -e KEYMAP=muzfuz -e KEYBOARD=planck --rm -v $('pwd'):/qmk:rw qmk_firmware
+dfu-programmer atmega32u4 erase
+dfu-programmer atmega32u4 flash .build/planck_rev6_muzfuz.hex
+dfu-programmer atmega32u4 launch
+```
diff --git a/keyboards/planck/keymaps/muzfuz/rules.mk b/keyboards/planck/keymaps/muzfuz/rules.mk
new file mode 100644
index 0000000000..dcf16bef39
--- /dev/null
+++ b/keyboards/planck/keymaps/muzfuz/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/myoung34/rules.mk b/keyboards/planck/keymaps/myoung34/rules.mk
index b1aaafd3a4..0560de1dc4 100644
--- a/keyboards/planck/keymaps/myoung34/rules.mk
+++ b/keyboards/planck/keymaps/myoung34/rules.mk
@@ -1,7 +1,3 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
AUDIO_ENABLE = yes # Audio output on port C6
CONSOLE_ENABLE = no # Console for debug(+400)
MIDI_ENABLE = no # MIDI controls
@@ -9,3 +5,4 @@ MOUSEKEY_ENABLE = no # Mouse keys(+4700)
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BACKLIGHT_ENABLE = yes
+
diff --git a/keyboards/planck/keymaps/neo2planck/keymap.c b/keyboards/planck/keymaps/neo2planck/keymap.c
index 1ecc800595..a8c4f93066 100644
--- a/keyboards/planck/keymaps/neo2planck/keymap.c
+++ b/keyboards/planck/keymaps/neo2planck/keymap.c
@@ -97,10 +97,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
},
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/planck/keymaps/neo2planck/rules.mk b/keyboards/planck/keymaps/neo2planck/rules.mk
index cedf3095e6..6846e9c164 100644
--- a/keyboards/planck/keymaps/neo2planck/rules.mk
+++ b/keyboards/planck/keymaps/neo2planck/rules.mk
@@ -18,6 +18,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/not-quite-neo/rules.mk b/keyboards/planck/keymaps/not-quite-neo/rules.mk
index 90e6353f65..5ba0cefb41 100644
--- a/keyboards/planck/keymaps/not-quite-neo/rules.mk
+++ b/keyboards/planck/keymaps/not-quite-neo/rules.mk
@@ -24,6 +24,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/originerd/rules.mk b/keyboards/planck/keymaps/originerd/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/planck/keymaps/originerd/rules.mk
+++ b/keyboards/planck/keymaps/originerd/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/paget/rules.mk b/keyboards/planck/keymaps/paget/rules.mk
index 457a3d01d4..e69de29bb2 100755
--- a/keyboards/planck/keymaps/paget/rules.mk
+++ b/keyboards/planck/keymaps/paget/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/pete/keymap.c b/keyboards/planck/keymaps/pete/keymap.c
index de5c50cd1c..faf41302eb 100644
--- a/keyboards/planck/keymaps/pete/keymap.c
+++ b/keyboards/planck/keymaps/pete/keymap.c
@@ -117,9 +117,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
int currentOs = _MAC;
-const uint16_t PROGMEM fn_actions[] = {
-
-};
#ifdef AUDIO_ENABLE
diff --git a/keyboards/planck/keymaps/pete/rules.mk b/keyboards/planck/keymaps/pete/rules.mk
index 20bba3f491..8a328f6b6c 100644
--- a/keyboards/planck/keymaps/pete/rules.mk
+++ b/keyboards/planck/keymaps/pete/rules.mk
@@ -10,6 +10,3 @@ NKRO_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/phreed/readme.md b/keyboards/planck/keymaps/phreed/readme.md
index c8fd932438..963740058b 100644
--- a/keyboards/planck/keymaps/phreed/readme.md
+++ b/keyboards/planck/keymaps/phreed/readme.md
@@ -34,5 +34,5 @@ To flash the keyboard
make planck/rev3:phreed:dfu
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the
-[make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the
+[make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/planck/keymaps/phreed/rules.mk b/keyboards/planck/keymaps/phreed/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/planck/keymaps/phreed/rules.mk
+++ b/keyboards/planck/keymaps/phreed/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/piemod/rules.mk b/keyboards/planck/keymaps/piemod/rules.mk
index 84cb02bd76..0eabfdfc19 100644
--- a/keyboards/planck/keymaps/piemod/rules.mk
+++ b/keyboards/planck/keymaps/piemod/rules.mk
@@ -13,6 +13,3 @@ else
BLUETOOTH_ENABLE = yes
endif
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/priyadi/rules.mk b/keyboards/planck/keymaps/priyadi/rules.mk
index 282c047eec..a999eb00f6 100644
--- a/keyboards/planck/keymaps/priyadi/rules.mk
+++ b/keyboards/planck/keymaps/priyadi/rules.mk
@@ -21,6 +21,3 @@ FAUXCLICKY_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/rai-suta/keymap.c b/keyboards/planck/keymaps/rai-suta/keymap.c
index 59fe34b1e4..97da0e8068 100644
--- a/keyboards/planck/keymaps/rai-suta/keymap.c
+++ b/keyboards/planck/keymaps/rai-suta/keymap.c
@@ -9,7 +9,6 @@
// Keycode defines
#define _______ KC_TRNS
#define XXXXXXX KC_NO
-#define C(kc) LCTL(kc)
// JIS keyboard
#define JK_CIRC KC_EQL // ^
#define JK_AT KC_LBRC // @
diff --git a/keyboards/planck/keymaps/rai-suta/rules.mk b/keyboards/planck/keymaps/rai-suta/rules.mk
index ce13befd90..88915dcd3c 100644
--- a/keyboards/planck/keymaps/rai-suta/rules.mk
+++ b/keyboards/planck/keymaps/rai-suta/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/sdothum/rules.mk b/keyboards/planck/keymaps/sdothum/rules.mk
index 40f153844c..a722766296 100644
--- a/keyboards/planck/keymaps/sdothum/rules.mk
+++ b/keyboards/planck/keymaps/sdothum/rules.mk
@@ -21,6 +21,3 @@ SLEEP_LED_ENABLE = no # breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # enable double tap completion of (),[],{}
-ifndef QUANTUM_DIR
-include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/sebas/keymap.c b/keyboards/planck/keymaps/sebas/keymap.c
new file mode 100644
index 0000000000..1076531f13
--- /dev/null
+++ b/keyboards/planck/keymaps/sebas/keymap.c
@@ -0,0 +1,90 @@
+#include QMK_KEYBOARD_H
+enum planck_layers {
+ _DEFAULT,
+ _LOWER,
+ _RAISE,
+ _FN
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define FN MO(_FN)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Default
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | " | ; |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | Up |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI | FN | Lower| Space |Raise | / | Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DEFAULT] = LAYOUT_planck_grid(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_SCLN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT ,
+ KC_LCTL, KC_LALT, KC_LGUI, FN, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | _ | + | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | { | } | Vol+ | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | ? | | Vol- | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_QUES, _______, KC_VOLD, _______
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | - | = | | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | [ | ] | Vol- | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | Vol+ | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______
+),
+
+ /* FN
+ * ,-----------------------------------------------------------------------------------.
+ * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | F11 | F12 | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | TRNS | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FN] = LAYOUT_planck_grid(
+ 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, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+
+};
+
diff --git a/keyboards/planck/keymaps/sebas/readme.md b/keyboards/planck/keymaps/sebas/readme.md
new file mode 100644
index 0000000000..4a0ad84fb6
--- /dev/null
+++ b/keyboards/planck/keymaps/sebas/readme.md
@@ -0,0 +1,3 @@
+
+# Sebas Planck layout
+My personal layout
diff --git a/keyboards/planck/keymaps/smt/rules.mk b/keyboards/planck/keymaps/smt/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/planck/keymaps/smt/rules.mk
+++ b/keyboards/planck/keymaps/smt/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/spacebarracecar/keymap.c b/keyboards/planck/keymaps/spacebarracecar/keymap.c
index b1c0e3148a..14b96c8472 100644
--- a/keyboards/planck/keymaps/spacebarracecar/keymap.c
+++ b/keyboards/planck/keymaps/spacebarracecar/keymap.c
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC,
CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT,
CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
- KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, CTLENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
),
/* Lower
@@ -111,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL,
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT,
_______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, MU_ON, XXXXXXX, XXXXXXX, XXXXXXX, _______,
- RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME
+ RESET, CU_ESCT, _______, _______, _______, KC_SPC, CTLENT, _______, _______, _______, _______, CU_GAME
)
};
diff --git a/keyboards/planck/keymaps/steno/rules.mk b/keyboards/planck/keymaps/steno/rules.mk
index 634a1c8878..b2fd63a893 100644
--- a/keyboards/planck/keymaps/steno/rules.mk
+++ b/keyboards/planck/keymaps/steno/rules.mk
@@ -1,9 +1,6 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
EXTRAKEY_ENABLE = no
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
AUDIO_ENABLE = no # Audio output on port C6
MIDI_ENABLE = no # MIDI controls
+
diff --git a/keyboards/planck/keymaps/tak3over/keymap.c b/keyboards/planck/keymaps/tak3over/keymap.c
index f8fb0fb37d..8b26520bf9 100644
--- a/keyboards/planck/keymaps/tak3over/keymap.c
+++ b/keyboards/planck/keymaps/tak3over/keymap.c
@@ -106,10 +106,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/planck/keymaps/tehwalris/rules.mk b/keyboards/planck/keymaps/tehwalris/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/planck/keymaps/tehwalris/rules.mk
+++ b/keyboards/planck/keymaps/tehwalris/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/tong92/rules.mk b/keyboards/planck/keymaps/tong92/rules.mk
index df9e7918ca..88ad1e9828 100644
--- a/keyboards/planck/keymaps/tong92/rules.mk
+++ b/keyboards/planck/keymaps/tong92/rules.mk
@@ -57,6 +57,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/unicode/keymap.c b/keyboards/planck/keymaps/unicode/keymap.c
index d869eedd4f..749aaa8682 100644
--- a/keyboards/planck/keymaps/unicode/keymap.c
+++ b/keyboards/planck/keymaps/unicode/keymap.c
@@ -191,10 +191,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
#ifdef AUDIO_ENABLE
float tone_startup[][2] = SONG(STARTUP_SOUND);
diff --git a/keyboards/planck/keymaps/unicode/rules.mk b/keyboards/planck/keymaps/unicode/rules.mk
index 110af7501c..70866cb8bb 100644
--- a/keyboards/planck/keymaps/unicode/rules.mk
+++ b/keyboards/planck/keymaps/unicode/rules.mk
@@ -6,6 +6,3 @@
#
UNICODE_ENABLE = yes # Unicode
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/vifon/rules.mk b/keyboards/planck/keymaps/vifon/rules.mk
index 5caec1afa8..527e63d382 100644
--- a/keyboards/planck/keymaps/vifon/rules.mk
+++ b/keyboards/planck/keymaps/vifon/rules.mk
@@ -22,6 +22,3 @@ KEY_LOCK_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/yale/keymap.c b/keyboards/planck/keymaps/yale/keymap.c
index bbecc66fbc..89be16f5fd 100644
--- a/keyboards/planck/keymaps/yale/keymap.c
+++ b/keyboards/planck/keymaps/yale/keymap.c
@@ -84,10 +84,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/planck/keymaps/yale/rules.mk b/keyboards/planck/keymaps/yale/rules.mk
index caff043c58..5dda6ad67b 100644
--- a/keyboards/planck/keymaps/yale/rules.mk
+++ b/keyboards/planck/keymaps/yale/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/yang/keymap.c b/keyboards/planck/keymaps/yang/keymap.c
index e4a7a3312d..477eb50312 100644
--- a/keyboards/planck/keymaps/yang/keymap.c
+++ b/keyboards/planck/keymaps/yang/keymap.c
@@ -56,10 +56,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-/*enum function_id {
-
-};*/
-
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_TAP_KEY(_RGB, KC_SPC),
};
@@ -81,9 +77,3 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
return MACRO_NONE;
};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch (id) {
-
- }
-}
diff --git a/keyboards/planck/keymaps/yang/rules.mk b/keyboards/planck/keymaps/yang/rules.mk
index 173fe29893..05f0fb04aa 100644
--- a/keyboards/planck/keymaps/yang/rules.mk
+++ b/keyboards/planck/keymaps/yang/rules.mk
@@ -5,6 +5,3 @@
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
AUDIO_ENABLE = no
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/zach/rules.mk b/keyboards/planck/keymaps/zach/rules.mk
index ca24b47929..b3dfb88d74 100644
--- a/keyboards/planck/keymaps/zach/rules.mk
+++ b/keyboards/planck/keymaps/zach/rules.mk
@@ -24,6 +24,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/keymaps/zach/zach_common_functions.c b/keyboards/planck/keymaps/zach/zach_common_functions.c
index e6aeaa50a3..e9866883b4 100644
--- a/keyboards/planck/keymaps/zach/zach_common_functions.c
+++ b/keyboards/planck/keymaps/zach/zach_common_functions.c
@@ -8,6 +8,7 @@ extern keymap_config_t keymap_config;
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
+#undef C
#define C(n) RCTL(n)
#define CADKEY RCTL(RALT(KC_DEL))
diff --git a/keyboards/planck/keymaps/zrichard/rules.mk b/keyboards/planck/keymaps/zrichard/rules.mk
index 7b17f58ce1..0475875a3b 100755
--- a/keyboards/planck/keymaps/zrichard/rules.mk
+++ b/keyboards/planck/keymaps/zrichard/rules.mk
@@ -25,6 +25,3 @@ TAP_DANCE_ENABLE = no # Enable double or n tap macros
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/planck/rev1/config.h b/keyboards/planck/rev1/config.h
new file mode 100644
index 0000000000..397887a73f
--- /dev/null
+++ b/keyboards/planck/rev1/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define DEVICE_VER 0x0001
diff --git a/keyboards/planck/rev1/rules.mk b/keyboards/planck/rev1/rules.mk
new file mode 100644
index 0000000000..e51af55c66
--- /dev/null
+++ b/keyboards/planck/rev1/rules.mk
@@ -0,0 +1 @@
+AUDIO_ENABLE = no # Audio output on port C6
diff --git a/keyboards/planck/rev2/config.h b/keyboards/planck/rev2/config.h
new file mode 100644
index 0000000000..bed78bca3f
--- /dev/null
+++ b/keyboards/planck/rev2/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define DEVICE_VER 0x0002
diff --git a/keyboards/planck/rev2/rules.mk b/keyboards/planck/rev2/rules.mk
new file mode 100644
index 0000000000..e51af55c66
--- /dev/null
+++ b/keyboards/planck/rev2/rules.mk
@@ -0,0 +1 @@
+AUDIO_ENABLE = no # Audio output on port C6
diff --git a/keyboards/planck/rev3/config.h b/keyboards/planck/rev3/config.h
index 45e60962ba..fd6f0460e5 100644
--- a/keyboards/planck/rev3/config.h
+++ b/keyboards/planck/rev3/config.h
@@ -1,8 +1,3 @@
-#ifndef REV3_CONFIG_H
-#define REV3_CONFIG_H
-
-#include "config_common.h"
+#pragma once
#define DEVICE_VER 0x0003
-
-#endif
diff --git a/keyboards/planck/rev4/config.h b/keyboards/planck/rev4/config.h
index 4ff7649fb5..572852bbf0 100644
--- a/keyboards/planck/rev4/config.h
+++ b/keyboards/planck/rev4/config.h
@@ -1,8 +1,3 @@
-#ifndef REV4_CONFIG_H
-#define REV4_CONFIG_H
-
-#include "config_common.h"
+#pragma once
#define DEVICE_VER 0x0004
-
-#endif \ No newline at end of file
diff --git a/keyboards/planck/rev5/config.h b/keyboards/planck/rev5/config.h
index 696eda73bc..9369220780 100644
--- a/keyboards/planck/rev5/config.h
+++ b/keyboards/planck/rev5/config.h
@@ -1,8 +1,3 @@
-#ifndef REV5_CONFIG_H
-#define REV5_CONFIG_H
-
-#include "config_common.h"
+#pragma once
#define DEVICE_VER 0x0005
-
-#endif \ No newline at end of file
diff --git a/keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.c b/keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.c
deleted file mode 100644
index 4331155df4..0000000000
--- a/keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#include "hal.h"
-
-#if HAL_USE_PAL || defined(__DOXYGEN__)
-/**
- * @brief PAL setup.
- * @details Digital I/O ports static configuration as defined in @p board.h.
- * This variable is used by the HAL when initializing the PAL driver.
- */
-const PALConfig pal_default_config = {
-#if STM32_HAS_GPIOA
- {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
- VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
-#endif
-#if STM32_HAS_GPIOB
- {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
- VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
-#endif
-#if STM32_HAS_GPIOC
- {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
- VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
-#endif
-#if STM32_HAS_GPIOD
- {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
- VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
-#endif
-#if STM32_HAS_GPIOE
- {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
- VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
-#endif
-#if STM32_HAS_GPIOF
- {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
- VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
-#endif
-#if STM32_HAS_GPIOG
- {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
- VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
-#endif
-#if STM32_HAS_GPIOH
- {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
- VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
-#endif
-#if STM32_HAS_GPIOI
- {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
- VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
-#endif
-};
-#endif
-
-void enter_bootloader_mode_if_requested(void);
-
-/**
- * @brief Early initialization code.
- * @details This initialization must be performed just after stack setup
- * and before any other initialization.
- */
-void __early_init(void) {
- enter_bootloader_mode_if_requested();
- stm32_clock_init();
-}
-
-#if HAL_USE_SDC || defined(__DOXYGEN__)
-/**
- * @brief SDC card detection.
- */
-bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
-
- (void)sdcp;
- /* TODO: Fill the implementation.*/
- return true;
-}
-
-/**
- * @brief SDC card write protection detection.
- */
-bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
-
- (void)sdcp;
- /* TODO: Fill the implementation.*/
- return false;
-}
-#endif /* HAL_USE_SDC */
-
-#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
-/**
- * @brief MMC_SPI card detection.
- */
-bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
-
- (void)mmcp;
- /* TODO: Fill the implementation.*/
- return true;
-}
-
-/**
- * @brief MMC_SPI card write protection detection.
- */
-bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
-
- (void)mmcp;
- /* TODO: Fill the implementation.*/
- return false;
-}
-#endif
-
-/**
- * @brief Board-specific initialization code.
- * @todo Add your board-specific code, if any.
- */
-void boardInit(void) {
-}
diff --git a/keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.mk
deleted file mode 100644
index 43377629a3..0000000000
--- a/keyboards/planck/rev6/boards/GENERIC_STM32_F303XC/board.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# List of all the board related files.
-BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
-
-# Required include directories
-BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/planck/rev6/rules.mk b/keyboards/planck/rev6/rules.mk
index dce683a7ff..1f3d1dfe58 100644
--- a/keyboards/planck/rev6/rules.mk
+++ b/keyboards/planck/rev6/rules.mk
@@ -2,41 +2,8 @@
SRC = matrix.c
LAYOUTS += ortho_4x12
-## chip/board settings
-# - the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F3xx
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F303xC
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f3xx
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = GENERIC_STM32_F303XC
-
# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+MCU = STM32F303
# Build Options
# comment out to disable the options.
diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk
index e194dcd511..6097902384 100644
--- a/keyboards/planck/rules.mk
+++ b/keyboards/planck/rules.mk
@@ -1,39 +1,6 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
# different sizes, comment this out, and the correct address will be loaded
diff --git a/keyboards/playkbtw/ca66/readme.md b/keyboards/playkbtw/ca66/readme.md
index 9e1ff7397e..c415efd5f7 100644
--- a/keyboards/playkbtw/ca66/readme.md
+++ b/keyboards/playkbtw/ca66/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make playkbtw/ca66:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/preonic/keymaps/0xdec/rules.mk b/keyboards/preonic/keymaps/0xdec/rules.mk
index 6600e36893..0c8a6dc411 100644
--- a/keyboards/preonic/keymaps/0xdec/rules.mk
+++ b/keyboards/preonic/keymaps/0xdec/rules.mk
@@ -16,6 +16,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c
index 590a8dc8a7..ba703a2080 100644
--- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c
+++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c
@@ -201,10 +201,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
#ifdef AUDIO_ENABLE
float start_up[][2] = {
MUSICAL_NOTE(_B5, 20),
diff --git a/keyboards/preonic/keymaps/bucktooth/rules.mk b/keyboards/preonic/keymaps/bucktooth/rules.mk
index 9dbdfcbd3b..8f226afd90 100644
--- a/keyboards/preonic/keymaps/bucktooth/rules.mk
+++ b/keyboards/preonic/keymaps/bucktooth/rules.mk
@@ -15,6 +15,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/preonic/keymaps/dlaroe/rules.mk b/keyboards/preonic/keymaps/dlaroe/rules.mk
index eea3168497..68f78de6e0 100644
--- a/keyboards/preonic/keymaps/dlaroe/rules.mk
+++ b/keyboards/preonic/keymaps/dlaroe/rules.mk
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/preonic/keymaps/jacwib/rules.mk b/keyboards/preonic/keymaps/jacwib/rules.mk
index 9dbdfcbd3b..8f226afd90 100644
--- a/keyboards/preonic/keymaps/jacwib/rules.mk
+++ b/keyboards/preonic/keymaps/jacwib/rules.mk
@@ -15,6 +15,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/preonic/keymaps/kinesis/rules.mk b/keyboards/preonic/keymaps/kinesis/rules.mk
index f37fe43389..94d02c8b77 100644
--- a/keyboards/preonic/keymaps/kinesis/rules.mk
+++ b/keyboards/preonic/keymaps/kinesis/rules.mk
@@ -22,6 +22,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/preonic/keymaps/nikchi/rules.mk b/keyboards/preonic/keymaps/nikchi/rules.mk
index 3d4659ceb9..e69de29bb2 100644
--- a/keyboards/preonic/keymaps/nikchi/rules.mk
+++ b/keyboards/preonic/keymaps/nikchi/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/smt/rules.mk b/keyboards/preonic/keymaps/smt/rules.mk
index 3d4659ceb9..e69de29bb2 100644
--- a/keyboards/preonic/keymaps/smt/rules.mk
+++ b/keyboards/preonic/keymaps/smt/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/that_canadian/Makefile b/keyboards/preonic/keymaps/that_canadian/Makefile
index 507bd77d2d..773e5c45da 100644
--- a/keyboards/preonic/keymaps/that_canadian/Makefile
+++ b/keyboards/preonic/keymaps/that_canadian/Makefile
@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/zach/rules.mk b/keyboards/preonic/keymaps/zach/rules.mk
index f00af43961..77efcf3832 100644
--- a/keyboards/preonic/keymaps/zach/rules.mk
+++ b/keyboards/preonic/keymaps/zach/rules.mk
@@ -24,6 +24,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/preonic/keymaps/zach/zach_common_functions.c b/keyboards/preonic/keymaps/zach/zach_common_functions.c
index e6aeaa50a3..e9866883b4 100644
--- a/keyboards/preonic/keymaps/zach/zach_common_functions.c
+++ b/keyboards/preonic/keymaps/zach/zach_common_functions.c
@@ -8,6 +8,7 @@ extern keymap_config_t keymap_config;
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
+#undef C
#define C(n) RCTL(n)
#define CADKEY RCTL(RALT(KC_DEL))
diff --git a/keyboards/preonic/readme.md b/keyboards/preonic/readme.md
index e116021fdd..5b3c0ec588 100644
--- a/keyboards/preonic/readme.md
+++ b/keyboards/preonic/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make preonic:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h
new file mode 100644
index 0000000000..4bcfa2ce5c
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define TAPPING_TERM 200
+
+// place overrides here
diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c
new file mode 100644
index 0000000000..2a320aecf2
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c
@@ -0,0 +1,186 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+#define L1BS LT(2, KC_BSPC)
+#define LSUP LSFT_T(KC_UP)
+#define CTLL LCTL_T(KC_LEFT)
+#define ECTL LCTL_T(KC_ESC)
+#define ALLM ALL_T(KC_MINS)
+#define SCLS LT(3, KC_SCLN)
+
+// Establishes tap dance keys
+enum {
+ TD_SPC_ENT = 0
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT)
+
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BASE
+ * ,---------------------------------------------------------------------------------------------------------------,
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | NMLK | / | * | - |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | 7 | 8 | 9 | + |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 | = |
+ * | Ctrl | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Z | X | C | V | B | N | M | , | . | / | Up | 1 | 2 | 3 | |
+ * | Shift| | | | | | | | | | | Shift| | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+ Enter|
+ * | - | | | | Backspace | Space | | | Left | Down | Right| 0 | . | |
+ * | ALL | Ctrl | Alt | GUI | Fn1 | | GUI | Alt | Ctrl | | | | | |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_7, KC_8, KC_9, KC_PPLS,
+ ECTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLS, KC_QUOT, KC_4, KC_5, KC_6, KC_PEQL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LSUP, KC_1, KC_2, KC_3, KC_ENT,
+ ALLM, KC_LCTL, KC_LALT, KC_LGUI, L1BS, L1BS, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, CTLL, KC_DOWN, KC_RIGHT, KC_0, KC_PDOT, KC_ENT
+ ),
+
+/* GAME
+ * ,---------------------------------------------------------------------------------------------------------------,
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | NMLK | / | * | - |
+ * | ` | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | ' | 7 | 8 | 9 | + |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Caps | A | S | D | F | G | H | J | K | L | ; | Rtrn | 4 | 5 | 6 | = |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Z | X | C | V | B | N | M | , | . | / | Up | 1 | 2 | 3 | |
+ * | Shift| | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+ Enter|
+ * | | | | | Space | Backspace | | | Left | Down | Right| 0 | . | |
+ * | Fn1 | Ctrl | Alt | Alt | | | GUI | DF(0)| | | | | | |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+
+ [1] = LAYOUT(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, KC_7, KC_8, KC_9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_4, KC_5, KC_6, KC_PEQL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_1, KC_2, KC_3, KC_ENT,
+ MO(2), KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_BSPC, KC_RGUI, DF(0), KC_LEFT, KC_DOWN, KC_RIGHT, KC_0, KC_PDOT, KC_ENT
+ ),
+
+/* SYMBOL
+ * ,---------------------------------------------------------------------------------------------------------------,
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | | | |
+ * | | | | | | | | | | | | | | | | |
+ * |------+-------------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | # | [ | < | > | ] | _ | | | | | | | | |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | ~ | ( | { | } | ) | @ | - | | | | | | |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+ |
+ * | | | | | | Enter | | | | | | | | |
+ * | | | | | | | | | | | | | | |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+
+ [2] = LAYOUT(
+ 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_HASH, KC_LBRC, KC_LT, KC_GT, KC_RBRC, KC_UNDS, KC_PIPE, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_TILD, KC_LPRN, KC_LCBR, KC_RCBR, KC_RPRN, KC_AT, KC_MINS, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/* SYSTEM
+ * ,---------------------------------------------------------------------------------------------------------------,
+ * | | | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | | | |
+ * |------+-------------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | PgUp | Home | Up | End | | | Vol- | Vol+ | Mute | | | | | | |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | PgDn | Left | Down |Right | | | Play | Prev | Next | | | | | | RESET|
+ * | | | | | | | | | | | | | | | | |
+ * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | | | |
+ * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+ BL |
+ * | | | | | | | | | | | | | BL | TGGL |
+ * | GAME | | | | | | | | | | | | STEP | |
+ * `---------------------------------------------------------------------------------------------------------------'
+ */
+
+ [3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, KC__VOLDOWN, KC__VOLUP, KC__MUTE, _______, _______, _______, _______, _______, _______,
+ _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_MPLY, KC_MRWD, KC_MFFD, _______, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG,
+ DF(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, BL_TOGG
+ ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md
new file mode 100644
index 0000000000..e14e989e32
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md
@@ -0,0 +1,5 @@
+![reasonsandreasons Layout Image](https://imgur.com/a/xIpn2U5)
+
+# reasonsandreasons's Prime_O Layout
+
+This is a relatively simple layout for the Prime_O, designed for mostly typing use and occasional gaming. I'm still testing it and there will likely be minor changes, but most of the bones of it will likely stay the same.
diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk
new file mode 100644
index 0000000000..b6c57629e9
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk
@@ -0,0 +1,20 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+TAP_DANCE_ENABLE=yes # Enable Tap Dance
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c b/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c
index 6e2011770f..87ae5d1242 100644
--- a/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c
+++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c
@@ -25,9 +25,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
|= |4 |5 |6 |Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Enter |1 |2 |3 |(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |
+|Backspace|1 |2 |3 |(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Backspace|. |0 |00 |RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |
+|Enter |. |0 |00 |RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -35,8 +35,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PMNS, KC_PAST, KC_PSLS, KC_NLCK, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS,
KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC,
CU_EQL, KC_P4, KC_P5, KC_P6, CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT,
- KC_PENT, KC_P1, KC_P2, KC_P3, CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
- KC_BSPC, KC_PDOT, KC_P0, KC_P00, KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ KC_BSPC, KC_P1, KC_P2, KC_P3, CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
+ KC_PENT, KC_PDOT, KC_P0, KC_P00, KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, CTLENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
),
/* Lower
@@ -47,9 +47,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
|= |4 |5 |6 | |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Enter |1 |2 |3 | |? | | | | | | | | | | |
+|Backspace|1 |2 |3 | |? | | | | | | | | | | |
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Backspace|. |0 |00 | | | | | | | | | | | | |
+|Enter |. |0 |00 | | | | | | | | | | | | |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -69,9 +69,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
|= |4 |5 |6 | |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Enter |1 |2 |3 | |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |
+|Backspace|1 |2 |3 | |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Backspace|. |0 |00 | | | | | | | | | | | | |
+|Enter |. |0 |00 | | | | | | | | | | | | |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -91,9 +91,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
|= |4 |5 |6 | |Ä |ß | | | | | | | | | |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Enter |1 |2 |3 | | | | | | | | | | | | |
+|Backspace|1 |2 |3 | | | | | | | | | | | | |
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Backspace|. |0 |00 | | | | | |" |" | | | | | |
+|Enter |. |0 |00 | | | | | |" |" | | | | | |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -113,9 +113,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
|= |4 |5 |6 | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Enter |1 |2 |3 | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |
+|Backspace|1 |2 |3 | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |
|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Backspace|. |0 |00 |RESET |ESCT | | | | | | | | | |Game |
+|Enter |. |0 |00 |RESET |ESCT | | | | | | | | | |Game |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -124,7 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL,
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT,
_______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
- _______, _______, _______, _______, RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME
+ _______, _______, _______, _______, RESET, CU_ESCT, _______, _______, _______, KC_SPC, CTLENT, _______, _______, _______, _______, CU_GAME
),
// Can be used to place macros on the numpad
@@ -146,9 +146,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
|Esc/Nav |A |S |D |F |G |4 |5 |6 |+ |H |J |K |L |; |' |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|(/LShift |Y |X |C |V |B |1 |2 |3 |Enter |N |M |, |. |/ |)/RShift |
+|(/LShift |Y |X |C |V |B |1 |2 |3 |Tab |N |M |, |. |/ |)/RShift |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|RCtrl | |Alt |Win |Lower |Space |00 |0 |. |Tab |Enter |Raise |Win |AltGr | |LCtrl |
+|RCtrl | |Alt |Win |Lower |Space |00 |0 |. |Enter |Enter |Raise |Win |AltGr | |LCtrl |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -156,8 +156,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS,
KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_P7, KC_P8, KC_P9, KC_PPLS, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC,
CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, KC_P4, KC_P5, KC_P6, CU_EQL, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT,
- CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, KC_P1, KC_P2, KC_P3, KC_PENT, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
- KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P00, KC_P0, KC_PDOT, KC_TAB, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, KC_P1, KC_P2, KC_P3, KC_TAB, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P00, KC_P0, KC_PDOT, KC_PENT, CTLENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
),
/* Lower
@@ -168,9 +168,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
| |@ |Strg+X |Strg+C |Strg+V | |4 |5 |6 |= | |_ |+ |{ |} || |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| |? | | | | |1 |2 |3 |Enter | | | | | | |
+| |? | | | | |1 |2 |3 |Tab | | | | | | |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| | | | | | |00 |0 |. |Tab | | | | | | |
+| | | | | | |00 |0 |. |Enter | | | | | | |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -190,9 +190,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
| |F1 |F2 |F3 |F4 |F5 |4 |5 |6 |= |F6 |- |= |[ |] |\ |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| |F7 |F8 |F9 |F10 |F11 |1 |2 |3 |Enter |F12 | | | | | |
+| |F7 |F8 |F9 |F10 |F11 |1 |2 |3 |Tab |F12 | | | | | |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| | | | | | |00 |0 |. |Tab | | | | | | |
+| | | | | | |00 |0 |. |Enter | | | | | | |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -212,9 +212,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
| |Ä |ß | | | |4 |5 |6 |= | | | | | | |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| | | | | | |1 |2 |3 |Enter | | | | | | |
+| | | | | | |1 |2 |3 |Tab | | | | | | |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| | | | | |" |00 |0 |. |Tab |" | | | | | |
+| | | | | |" |00 |0 |. |Enter |" | | | | | |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -234,9 +234,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
| |Left |Down |Right |End | |4 |5 |6 |= | |Win+Left |Win+Down |Win+Right| |Enter |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| |Prev |Pause |Next |LowerVol |RaiseVol |1 |2 |3 |Enter |Mute | | | | | |
+| |Prev |Pause |Next |LowerVol |RaiseVol |1 |2 |3 |Tab |Mute | | | | | |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|RESET |ESCT | | | | |00 |0 |. |Tab | | | | | |Game |
+|RESET |ESCT | | | | |00 |0 |. |Enter | | | | | |Game |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -245,7 +245,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, _______, _______, _______, _______, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL,
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, _______, _______, _______, _______, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT,
_______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, _______, _______, _______, _______, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
- RESET, CU_ESCT, _______, _______, _______, KC_SPC, _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, CU_GAME
+ RESET, CU_ESCT, _______, _______, _______, KC_SPC, _______, _______, _______, _______, CTLENT, _______, _______, _______, _______, CU_GAME
),
// Can be used to place macros on the numpad
@@ -267,9 +267,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |4 |5 |6 |+ |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |1 |2 |3 |Enter |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |00 |0 |. |Tab |
+|(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |1 |2 |3 |Tab |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
+|RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |00 |0 |. |Enter |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -277,8 +277,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS,
CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, KC_P4, KC_P5, KC_P6, CU_EQL,
- CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_P00, KC_P0, KC_PDOT, KC_TAB
+ CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, KC_P1, KC_P2, KC_P3, KC_TAB,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, CTLENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_P00, KC_P0, KC_PDOT, KC_PENT
),
/* Lower
@@ -289,9 +289,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |4 |5 |6 |= |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| |? | | | | | | | | | | |1 |2 |3 |Enter |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| | | | | | | | | | | | |00 |0 |. |Tab |
+| |? | | | | | | | | | | |1 |2 |3 |Tab |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
+| | | | | | | | | | | | |00 |0 |. |Enter |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -311,9 +311,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |4 |5 |6 |= |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |1 |2 |3 |Enter |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| | | | | | | | | | | | |00 |0 |. |Tab |
+| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |1 |2 |3 |Tab |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
+| | | | | | | | | | | | |00 |0 |. |Enter |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -333,9 +333,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
| |Ä |ß | | | | | | | | | |4 |5 |6 |= |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| | | | | | | | | | | | |1 |2 |3 |Enter |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| | | | | |" |" | | | | | |00 |0 |. |Tab |
+| | | | | | | | | | | | |1 |2 |3 |Tab |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
+| | | | | |" |" | | | | | |00 |0 |. |Enter |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -355,9 +355,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |4 |5 |6 |= |
|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |1 |2 |3 |Enter |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|RESET |ESCT | | | | | | | | | |Game |00 |0 |. |Tab |
+| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |1 |2 |3 |Tab |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
+|RESET |ESCT | | | | | | | | | |Game |00 |0 |. |Enter |
`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
*/
@@ -366,7 +366,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, _______, _______, _______, _______,
_______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______,
- RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME, _______, _______, _______, _______
+ RESET, CU_ESCT, _______, _______, _______, KC_SPC, CTLENT, _______, _______, _______, _______, CU_GAME, _______, _______, _______, _______
),
// Can be used to place macros on the numpad
diff --git a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.h b/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.h
deleted file mode 100644
index ec26557f3a..0000000000
--- a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.h
+++ /dev/null
@@ -1,1187 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _BOARD_H_
-#define _BOARD_H_
-
-/*
- * Setup for Clueboard 60% Keyboard
- */
-
-/*
- * Board identifier.
- */
-#define BOARD_GENERIC_STM32_F303XC
-#define BOARD_NAME "Planck PCB"
-
-/*
- * Board oscillators-related settings.
- * NOTE: LSE not fitted.
- */
-#if !defined(STM32_LSECLK)
-#define STM32_LSECLK 0U
-#endif
-
-#define STM32_LSEDRV (3U << 3U)
-
-#if !defined(STM32_HSECLK)
-#define STM32_HSECLK 8000000U
-#endif
-
-// #define STM32_HSE_BYPASS
-
-/*
- * MCU type as defined in the ST header.
- */
-#define STM32F303xC
-
-/*
- * IO pins assignments.
- */
-#define GPIOA_PIN0 0U
-#define GPIOA_PIN1 1U
-#define GPIOA_PIN2 2U
-#define GPIOA_PIN3 3U
-#define GPIOA_PIN4 4U
-#define GPIOA_PIN5 5U
-#define GPIOA_PIN6 6U
-#define GPIOA_PIN7 7U
-#define GPIOA_PIN8 8U
-#define GPIOA_PIN9 9U
-#define GPIOA_PIN10 10U
-#define GPIOA_USB_DM 11U
-#define GPIOA_USB_DP 12U
-#define GPIOA_SWDIO 13U
-#define GPIOA_SWCLK 14U
-#define GPIOA_PIN15 15U
-
-#define GPIOB_PIN0 0U
-#define GPIOB_PIN1 1U
-#define GPIOB_PIN2 2U
-#define GPIOB_PIN3 3U
-#define GPIOB_PIN4 4U
-#define GPIOB_PIN5 5U
-#define GPIOB_PIN6 6U
-#define GPIOB_PIN7 7U
-#define GPIOB_PIN8 8U
-#define GPIOB_PIN9 9U
-#define GPIOB_PIN10 10U
-#define GPIOB_PIN11 11U
-#define GPIOB_PIN12 12U
-#define GPIOB_PIN13 13U
-#define GPIOB_PIN14 14U
-#define GPIOB_PIN15 15U
-
-#define GPIOC_PIN0 0U
-#define GPIOC_PIN1 1U
-#define GPIOC_PIN2 2U
-#define GPIOC_PIN3 3U
-#define GPIOC_PIN4 4U
-#define GPIOC_PIN5 5U
-#define GPIOC_PIN6 6U
-#define GPIOC_PIN7 7U
-#define GPIOC_PIN8 8U
-#define GPIOC_PIN9 9U
-#define GPIOC_PIN10 10U
-#define GPIOC_PIN11 11U
-#define GPIOC_PIN12 12U
-#define GPIOC_PIN13 13U
-#define GPIOC_PIN14 14U
-#define GPIOC_PIN15 15U
-
-#define GPIOD_PIN0 0U
-#define GPIOD_PIN1 1U
-#define GPIOD_PIN2 2U
-#define GPIOD_PIN3 3U
-#define GPIOD_PIN4 4U
-#define GPIOD_PIN5 5U
-#define GPIOD_PIN6 6U
-#define GPIOD_PIN7 7U
-#define GPIOD_PIN8 8U
-#define GPIOD_PIN9 9U
-#define GPIOD_PIN10 10U
-#define GPIOD_PIN11 11U
-#define GPIOD_PIN12 12U
-#define GPIOD_PIN13 13U
-#define GPIOD_PIN14 14U
-#define GPIOD_PIN15 15U
-
-#define GPIOE_PIN0 0U
-#define GPIOE_PIN1 1U
-#define GPIOE_PIN2 2U
-#define GPIOE_PIN3 3U
-#define GPIOE_PIN4 4U
-#define GPIOE_PIN5 5U
-#define GPIOE_PIN6 6U
-#define GPIOE_PIN7 7U
-#define GPIOE_PIN8 8U
-#define GPIOE_PIN9 9U
-#define GPIOE_PIN10 10U
-#define GPIOE_PIN11 11U
-#define GPIOE_PIN12 12U
-#define GPIOE_PIN13 13U
-#define GPIOE_PIN14 14U
-#define GPIOE_PIN15 15U
-
-#define GPIOF_I2C2_SDA 0U
-#define GPIOF_I2C2_SCL 1U
-#define GPIOF_PIN2 2U
-#define GPIOF_PIN3 3U
-#define GPIOF_PIN4 4U
-#define GPIOF_PIN5 5U
-#define GPIOF_PIN6 6U
-#define GPIOF_PIN7 7U
-#define GPIOF_PIN8 8U
-#define GPIOF_PIN9 9U
-#define GPIOF_PIN10 10U
-#define GPIOF_PIN11 11U
-#define GPIOF_PIN12 12U
-#define GPIOF_PIN13 13U
-#define GPIOF_PIN14 14U
-#define GPIOF_PIN15 15U
-
-#define GPIOG_PIN0 0U
-#define GPIOG_PIN1 1U
-#define GPIOG_PIN2 2U
-#define GPIOG_PIN3 3U
-#define GPIOG_PIN4 4U
-#define GPIOG_PIN5 5U
-#define GPIOG_PIN6 6U
-#define GPIOG_PIN7 7U
-#define GPIOG_PIN8 8U
-#define GPIOG_PIN9 9U
-#define GPIOG_PIN10 10U
-#define GPIOG_PIN11 11U
-#define GPIOG_PIN12 12U
-#define GPIOG_PIN13 13U
-#define GPIOG_PIN14 14U
-#define GPIOG_PIN15 15U
-
-#define GPIOH_PIN0 0U
-#define GPIOH_PIN1 1U
-#define GPIOH_PIN2 2U
-#define GPIOH_PIN3 3U
-#define GPIOH_PIN4 4U
-#define GPIOH_PIN5 5U
-#define GPIOH_PIN6 6U
-#define GPIOH_PIN7 7U
-#define GPIOH_PIN8 8U
-#define GPIOH_PIN9 9U
-#define GPIOH_PIN10 10U
-#define GPIOH_PIN11 11U
-#define GPIOH_PIN12 12U
-#define GPIOH_PIN13 13U
-#define GPIOH_PIN14 14U
-#define GPIOH_PIN15 15U
-
-/*
- * IO lines assignments.
- */
-#define LINE_L3GD20_SDI PAL_LINE(GPIOA, 7U)
-#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
-#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
-#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
-#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
-
-#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
-#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
-
-#define LINE_CAPS_LOCK PAL_LINE(GPIOB, 7U)
-
-
-/*
- * I/O ports initial setup, this configuration is established soon after reset
- * in the initialization code.
- * Please refer to the STM32 Reference Manual for details.
- */
-#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
-#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
-#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
-#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
-#define PIN_ODR_LOW(n) (0U << (n))
-#define PIN_ODR_HIGH(n) (1U << (n))
-#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
-#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
-#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
-#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
-#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
-#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
-#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
-#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
-#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
-#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
-
-/*
- * GPIOA setup:
- *
- * PA0 - NC
- * PA1 - NC
- * PA2 - COL1
- * PA3 - COL2
- * PA4 - SPEAKER1
- * PA5 - SPEAKER2
- * PA6 - COL3
- * PA7 - COL8
- * PA8 - COL6
- * PA9 - COL7
- * PA10 - ROW5
- * PA11 - USB_DM (alternate 14).
- * PA12 - USB_DP (alternate 14).
- * PA13 - SWDIO (alternate 0).
- * PA14 - SWCLK (alternate 0).
- * PA15 - ROW4
- */
-#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
- PIN_MODE_ALTERNATE(GPIOA_PIN1) | \
- PIN_MODE_INPUT(GPIOA_PIN2) | \
- PIN_MODE_INPUT(GPIOA_PIN3) | \
- PIN_MODE_INPUT(GPIOA_PIN4) | \
- PIN_MODE_INPUT(GPIOA_PIN5) | \
- PIN_MODE_INPUT(GPIOA_PIN6) | \
- PIN_MODE_INPUT(GPIOA_PIN7) | \
- PIN_MODE_INPUT(GPIOA_PIN8) | \
- PIN_MODE_INPUT(GPIOA_PIN9) | \
- PIN_MODE_INPUT(GPIOA_PIN10) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
- PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
- PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
- PIN_MODE_INPUT(GPIOA_PIN15))
-#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
- PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
- PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
-#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
- PIN_OSPEED_HIGH(GPIOA_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
- PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
- PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
- PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
- PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN15))
-#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_PIN0) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
- PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
- PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN15))
-#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
- PIN_ODR_HIGH(GPIOA_PIN1) | \
- PIN_ODR_HIGH(GPIOA_PIN2) | \
- PIN_ODR_HIGH(GPIOA_PIN3) | \
- PIN_ODR_HIGH(GPIOA_PIN4) | \
- PIN_ODR_HIGH(GPIOA_PIN5) | \
- PIN_ODR_HIGH(GPIOA_PIN6) | \
- PIN_ODR_HIGH(GPIOA_PIN7) | \
- PIN_ODR_HIGH(GPIOA_PIN8) | \
- PIN_ODR_HIGH(GPIOA_PIN9) | \
- PIN_ODR_HIGH(GPIOA_PIN10) | \
- PIN_ODR_HIGH(GPIOA_USB_DM) | \
- PIN_ODR_HIGH(GPIOA_USB_DP) | \
- PIN_ODR_HIGH(GPIOA_SWDIO) | \
- PIN_ODR_HIGH(GPIOA_SWCLK) | \
- PIN_ODR_HIGH(GPIOA_PIN15))
-#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0) | \
- PIN_AFIO_AF(GPIOA_PIN1, 1) | \
- PIN_AFIO_AF(GPIOA_PIN2, 0) | \
- PIN_AFIO_AF(GPIOA_PIN3, 0) | \
- PIN_AFIO_AF(GPIOA_PIN4, 0) | \
- PIN_AFIO_AF(GPIOA_PIN5, 5) | \
- PIN_AFIO_AF(GPIOA_PIN6, 5) | \
- PIN_AFIO_AF(GPIOA_PIN7, 5))
-#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
- PIN_AFIO_AF(GPIOA_PIN9, 0) | \
- PIN_AFIO_AF(GPIOA_PIN10, 0) | \
- PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
- PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
- PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
- PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
- PIN_AFIO_AF(GPIOA_PIN15, 0))
-
-/*
- * GPIOB setup:
- *
- * PB0 - PIN0 (input pullup).
- * PB1 - PIN1 (input pullup).
- * PB2 - PIN2 (input pullup).
- * PB3 - PIN3 (alternate 0).
- * PB4 - PIN4 (input pullup).
- * PB5 - PIN5 (input pullup).
- * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
- * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
- * PB8 - PIN8 (input pullup).
- * PB9 - PIN9 (input pullup).
- * PB10 - PIN10 (input pullup).
- * PB11 - PIN11 (input pullup).
- * PB12 - PIN12 (input pullup).
- * PB13 - PIN13 (input pullup).
- * PB14 - PIN14 (input pullup).
- * PB15 - PIN15 (input pullup).
- */
-#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
- PIN_MODE_INPUT(GPIOB_PIN1) | \
- PIN_MODE_INPUT(GPIOB_PIN2) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
- PIN_MODE_INPUT(GPIOB_PIN4) | \
- PIN_MODE_INPUT(GPIOB_PIN5) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
- PIN_MODE_OUTPUT(GPIOB_PIN7) | \
- PIN_MODE_INPUT(GPIOB_PIN8) | \
- PIN_MODE_INPUT(GPIOB_PIN9) | \
- PIN_MODE_INPUT(GPIOB_PIN10) | \
- PIN_MODE_INPUT(GPIOB_PIN11) | \
- PIN_MODE_INPUT(GPIOB_PIN12) | \
- PIN_MODE_INPUT(GPIOB_PIN13) | \
- PIN_MODE_INPUT(GPIOB_PIN14) | \
- PIN_MODE_INPUT(GPIOB_PIN15))
-#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
- PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
-#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN2) | \
- PIN_OSPEED_HIGH(GPIOB_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
- PIN_OSPEED_HIGH(GPIOB_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN15))
-#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
- PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN15))
-#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
- PIN_ODR_HIGH(GPIOB_PIN1) | \
- PIN_ODR_HIGH(GPIOB_PIN2) | \
- PIN_ODR_HIGH(GPIOB_PIN3) | \
- PIN_ODR_HIGH(GPIOB_PIN4) | \
- PIN_ODR_HIGH(GPIOB_PIN5) | \
- PIN_ODR_HIGH(GPIOB_PIN6) | \
- PIN_ODR_LOW(GPIOB_PIN7) | \
- PIN_ODR_HIGH(GPIOB_PIN8) | \
- PIN_ODR_HIGH(GPIOB_PIN9) | \
- PIN_ODR_HIGH(GPIOB_PIN10) | \
- PIN_ODR_HIGH(GPIOB_PIN11) | \
- PIN_ODR_HIGH(GPIOB_PIN12) | \
- PIN_ODR_HIGH(GPIOB_PIN13) | \
- PIN_ODR_HIGH(GPIOB_PIN14) | \
- PIN_ODR_HIGH(GPIOB_PIN15))
-#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0) | \
- PIN_AFIO_AF(GPIOB_PIN1, 0) | \
- PIN_AFIO_AF(GPIOB_PIN2, 0) | \
- PIN_AFIO_AF(GPIOB_PIN3, 0) | \
- PIN_AFIO_AF(GPIOB_PIN4, 0) | \
- PIN_AFIO_AF(GPIOB_PIN5, 0) | \
- PIN_AFIO_AF(GPIOB_PIN6, 4) | \
- PIN_AFIO_AF(GPIOB_PIN7, 0))
-#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
- PIN_AFIO_AF(GPIOB_PIN9, 0) | \
- PIN_AFIO_AF(GPIOB_PIN10, 0) | \
- PIN_AFIO_AF(GPIOB_PIN11, 0) | \
- PIN_AFIO_AF(GPIOB_PIN12, 0) | \
- PIN_AFIO_AF(GPIOB_PIN13, 0) | \
- PIN_AFIO_AF(GPIOB_PIN14, 0) | \
- PIN_AFIO_AF(GPIOB_PIN15, 0))
-
-/*
- * GPIOC setup:
- *
- * PC0 - PIN0 (input pullup).
- * PC1 - PIN1 (input pullup).
- * PC2 - PIN2 (input pullup).
- * PC3 - PIN3 (input pullup).
- * PC4 - PIN4 (input pullup).
- * PC5 - PIN5 (input pullup).
- * PC6 - PIN6 (input pullup).
- * PC7 - PIN7 (input pullup).
- * PC8 - PIN8 (input pullup).
- * PC9 - PIN9 (input pullup).
- * PC10 - PIN10 (input pullup).
- * PC11 - PIN11 (input pullup).
- * PC12 - PIN12 (input pullup).
- * PC13 - PIN13 (input pullup).
- * PC14 - PIN14 (input floating).
- * PC15 - PIN15 (input floating).
- */
-#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
- PIN_MODE_INPUT(GPIOC_PIN1) | \
- PIN_MODE_INPUT(GPIOC_PIN2) | \
- PIN_MODE_INPUT(GPIOC_PIN3) | \
- PIN_MODE_INPUT(GPIOC_PIN4) | \
- PIN_MODE_INPUT(GPIOC_PIN5) | \
- PIN_MODE_INPUT(GPIOC_PIN6) | \
- PIN_MODE_INPUT(GPIOC_PIN7) | \
- PIN_MODE_INPUT(GPIOC_PIN8) | \
- PIN_MODE_INPUT(GPIOC_PIN9) | \
- PIN_MODE_INPUT(GPIOC_PIN10) | \
- PIN_MODE_INPUT(GPIOC_PIN11) | \
- PIN_MODE_INPUT(GPIOC_PIN12) | \
- PIN_MODE_INPUT(GPIOC_PIN13) | \
- PIN_MODE_INPUT(GPIOC_PIN14) | \
- PIN_MODE_INPUT(GPIOC_PIN15))
-#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
-#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
- PIN_OSPEED_HIGH(GPIOC_PIN14) | \
- PIN_OSPEED_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN15))
-#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
- PIN_ODR_HIGH(GPIOC_PIN1) | \
- PIN_ODR_HIGH(GPIOC_PIN2) | \
- PIN_ODR_HIGH(GPIOC_PIN3) | \
- PIN_ODR_HIGH(GPIOC_PIN4) | \
- PIN_ODR_HIGH(GPIOC_PIN5) | \
- PIN_ODR_HIGH(GPIOC_PIN6) | \
- PIN_ODR_HIGH(GPIOC_PIN7) | \
- PIN_ODR_HIGH(GPIOC_PIN8) | \
- PIN_ODR_HIGH(GPIOC_PIN9) | \
- PIN_ODR_HIGH(GPIOC_PIN10) | \
- PIN_ODR_HIGH(GPIOC_PIN11) | \
- PIN_ODR_HIGH(GPIOC_PIN12) | \
- PIN_ODR_HIGH(GPIOC_PIN13) | \
- PIN_ODR_HIGH(GPIOC_PIN14) | \
- PIN_ODR_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
- PIN_AFIO_AF(GPIOC_PIN1, 0) | \
- PIN_AFIO_AF(GPIOC_PIN2, 0) | \
- PIN_AFIO_AF(GPIOC_PIN3, 0) | \
- PIN_AFIO_AF(GPIOC_PIN4, 0) | \
- PIN_AFIO_AF(GPIOC_PIN5, 0) | \
- PIN_AFIO_AF(GPIOC_PIN6, 0) | \
- PIN_AFIO_AF(GPIOC_PIN7, 0))
-#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
- PIN_AFIO_AF(GPIOC_PIN9, 0) | \
- PIN_AFIO_AF(GPIOC_PIN10, 0) | \
- PIN_AFIO_AF(GPIOC_PIN11, 0) | \
- PIN_AFIO_AF(GPIOC_PIN12, 0) | \
- PIN_AFIO_AF(GPIOC_PIN13, 0) | \
- PIN_AFIO_AF(GPIOC_PIN14, 0) | \
- PIN_AFIO_AF(GPIOC_PIN15, 0))
-
-/*
- * GPIOD setup:
- *
- * PD0 - PIN0 (input pullup).
- * PD1 - PIN1 (input pullup).
- * PD2 - PIN2 (input pullup).
- * PD3 - PIN3 (input pullup).
- * PD4 - PIN4 (input pullup).
- * PD5 - PIN5 (input pullup).
- * PD6 - PIN6 (input pullup).
- * PD7 - PIN7 (input pullup).
- * PD8 - PIN8 (input pullup).
- * PD9 - PIN9 (input pullup).
- * PD11 - PIN10 (input pullup).
- * PD11 - PIN11 (input pullup).
- * PD12 - PIN12 (input pullup).
- * PD13 - PIN13 (input pullup).
- * PD14 - PIN14 (input pullup).
- * PD15 - PIN15 (input pullup).
- */
-#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
- PIN_MODE_INPUT(GPIOD_PIN1) | \
- PIN_MODE_INPUT(GPIOD_PIN2) | \
- PIN_MODE_INPUT(GPIOD_PIN3) | \
- PIN_MODE_INPUT(GPIOD_PIN4) | \
- PIN_MODE_INPUT(GPIOD_PIN5) | \
- PIN_MODE_INPUT(GPIOD_PIN6) | \
- PIN_MODE_INPUT(GPIOD_PIN7) | \
- PIN_MODE_INPUT(GPIOD_PIN8) | \
- PIN_MODE_INPUT(GPIOD_PIN9) | \
- PIN_MODE_INPUT(GPIOD_PIN10) | \
- PIN_MODE_INPUT(GPIOD_PIN11) | \
- PIN_MODE_INPUT(GPIOD_PIN12) | \
- PIN_MODE_INPUT(GPIOD_PIN13) | \
- PIN_MODE_INPUT(GPIOD_PIN14) | \
- PIN_MODE_INPUT(GPIOD_PIN15))
-#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
-#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN15))
-#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN15))
-#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
- PIN_ODR_HIGH(GPIOD_PIN1) | \
- PIN_ODR_HIGH(GPIOD_PIN2) | \
- PIN_ODR_HIGH(GPIOD_PIN3) | \
- PIN_ODR_HIGH(GPIOD_PIN4) | \
- PIN_ODR_HIGH(GPIOD_PIN5) | \
- PIN_ODR_HIGH(GPIOD_PIN6) | \
- PIN_ODR_HIGH(GPIOD_PIN7) | \
- PIN_ODR_HIGH(GPIOD_PIN8) | \
- PIN_ODR_HIGH(GPIOD_PIN9) | \
- PIN_ODR_HIGH(GPIOD_PIN10) | \
- PIN_ODR_HIGH(GPIOD_PIN11) | \
- PIN_ODR_HIGH(GPIOD_PIN12) | \
- PIN_ODR_HIGH(GPIOD_PIN13) | \
- PIN_ODR_HIGH(GPIOD_PIN14) | \
- PIN_ODR_HIGH(GPIOD_PIN15))
-#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
- PIN_AFIO_AF(GPIOD_PIN1, 0) | \
- PIN_AFIO_AF(GPIOD_PIN2, 0) | \
- PIN_AFIO_AF(GPIOD_PIN3, 0) | \
- PIN_AFIO_AF(GPIOD_PIN4, 0) | \
- PIN_AFIO_AF(GPIOD_PIN5, 0) | \
- PIN_AFIO_AF(GPIOD_PIN6, 0) | \
- PIN_AFIO_AF(GPIOD_PIN7, 0))
-#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
- PIN_AFIO_AF(GPIOD_PIN9, 0) | \
- PIN_AFIO_AF(GPIOD_PIN10, 0) | \
- PIN_AFIO_AF(GPIOD_PIN11, 0) | \
- PIN_AFIO_AF(GPIOD_PIN12, 0) | \
- PIN_AFIO_AF(GPIOD_PIN13, 0) | \
- PIN_AFIO_AF(GPIOD_PIN14, 0) | \
- PIN_AFIO_AF(GPIOD_PIN15, 0))
-
-/*
- * GPIOE setup:
- *
- * PE0 - PIN0 (input pullup).
- * PE1 - PIN1 (input pullup).
- * PE2 - PIN2 (input pullup).
- * PE3 - PIN3 L3GD20_CS (output pushpull maximum).
- * PE4 - PIN4 (input pullup).
- * PE5 - PIN5 (input pullup).
- * PE6 - PIN6 (input pullup).
- * PE7 - PIN7 (input pullup).
- * PE8 - PIN8 (output pushpull maximum).
- * PE9 - PIN9 (output pushpull maximum).
- * PE10 - PIN10 (output pushpull maximum).
- * PE11 - PIN11 (output pushpull maximum).
- * PE12 - PIN12 (output pushpull maximum).
- * PE13 - PIN13 (output pushpull maximum).
- * PE14 - PIN14 (output pushpull maximum).
- * PE15 - PIN15 (output pushpull maximum).
- */
-#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
- PIN_MODE_INPUT(GPIOE_PIN1) | \
- PIN_MODE_INPUT(GPIOE_PIN2) |\
- PIN_MODE_OUTPUT(GPIOE_PIN3) | \
- PIN_MODE_INPUT(GPIOE_PIN4) |\
- PIN_MODE_INPUT(GPIOE_PIN5) |\
- PIN_MODE_INPUT(GPIOE_PIN6) | \
- PIN_MODE_INPUT(GPIOE_PIN7) | \
- PIN_MODE_OUTPUT(GPIOE_PIN8) | \
- PIN_MODE_OUTPUT(GPIOE_PIN9) | \
- PIN_MODE_OUTPUT(GPIOE_PIN10) | \
- PIN_MODE_OUTPUT(GPIOE_PIN11) | \
- PIN_MODE_OUTPUT(GPIOE_PIN12) | \
- PIN_MODE_OUTPUT(GPIOE_PIN13) | \
- PIN_MODE_OUTPUT(GPIOE_PIN14) | \
- PIN_MODE_OUTPUT(GPIOE_PIN15))
-#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
-#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
- PIN_OSPEED_HIGH(GPIOE_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
- PIN_OSPEED_HIGH(GPIOE_PIN8) | \
- PIN_OSPEED_HIGH(GPIOE_PIN9) | \
- PIN_OSPEED_HIGH(GPIOE_PIN10) | \
- PIN_OSPEED_HIGH(GPIOE_PIN11) | \
- PIN_OSPEED_HIGH(GPIOE_PIN12) | \
- PIN_OSPEED_HIGH(GPIOE_PIN13) | \
- PIN_OSPEED_HIGH(GPIOE_PIN14) | \
- PIN_OSPEED_HIGH(GPIOE_PIN15))
-#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN2) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN15))
-#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
- PIN_ODR_HIGH(GPIOE_PIN1) | \
- PIN_ODR_HIGH(GPIOE_PIN2) | \
- PIN_ODR_HIGH(GPIOE_PIN3) | \
- PIN_ODR_HIGH(GPIOE_PIN4) | \
- PIN_ODR_HIGH(GPIOE_PIN5) | \
- PIN_ODR_HIGH(GPIOE_PIN6) | \
- PIN_ODR_HIGH(GPIOE_PIN7) | \
- PIN_ODR_LOW(GPIOE_PIN8) | \
- PIN_ODR_LOW(GPIOE_PIN9) | \
- PIN_ODR_LOW(GPIOE_PIN10) | \
- PIN_ODR_LOW(GPIOE_PIN11) | \
- PIN_ODR_LOW(GPIOE_PIN12) | \
- PIN_ODR_LOW(GPIOE_PIN13) | \
- PIN_ODR_LOW(GPIOE_PIN14) | \
- PIN_ODR_LOW(GPIOE_PIN15))
-#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
- PIN_AFIO_AF(GPIOE_PIN1, 0) | \
- PIN_AFIO_AF(GPIOE_PIN2, 0) |\
- PIN_AFIO_AF(GPIOE_PIN3, 0) | \
- PIN_AFIO_AF(GPIOE_PIN4, 0) |\
- PIN_AFIO_AF(GPIOE_PIN5, 0) |\
- PIN_AFIO_AF(GPIOE_PIN6, 0) | \
- PIN_AFIO_AF(GPIOE_PIN7, 0))
-#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
- PIN_AFIO_AF(GPIOE_PIN9, 0) | \
- PIN_AFIO_AF(GPIOE_PIN10, 0) | \
- PIN_AFIO_AF(GPIOE_PIN11, 0) | \
- PIN_AFIO_AF(GPIOE_PIN12, 0) | \
- PIN_AFIO_AF(GPIOE_PIN13, 0) | \
- PIN_AFIO_AF(GPIOE_PIN14, 0) | \
- PIN_AFIO_AF(GPIOE_PIN15, 0))
-
-/*
- * GPIOF setup:
- *
- * PF0 - I2C2_SDA (input floating).
- * PF1 - I2C2_SCL (input floating).
- * PF2 - PIN2 (input pullup).
- * PF3 - PIN3 (input pullup).
- * PF4 - PIN4 (input pullup).
- * PF5 - PIN5 (input pullup).
- * PF6 - PIN6 (input pullup).
- * PF7 - PIN7 (input pullup).
- * PF8 - PIN8 (input pullup).
- * PF9 - PIN9 (input pullup).
- * PF10 - PIN10 (input pullup).
- * PF11 - PIN11 (input pullup).
- * PF12 - PIN12 (input pullup).
- * PF13 - PIN13 (input pullup).
- * PF14 - PIN14 (input pullup).
- * PF15 - PIN15 (input pullup).
- */
-#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
- PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
- PIN_MODE_INPUT(GPIOF_PIN2) | \
- PIN_MODE_INPUT(GPIOF_PIN3) | \
- PIN_MODE_INPUT(GPIOF_PIN4) | \
- PIN_MODE_INPUT(GPIOF_PIN5) | \
- PIN_MODE_INPUT(GPIOF_PIN6) | \
- PIN_MODE_INPUT(GPIOF_PIN7) | \
- PIN_MODE_INPUT(GPIOF_PIN8) | \
- PIN_MODE_INPUT(GPIOF_PIN9) | \
- PIN_MODE_INPUT(GPIOF_PIN10) | \
- PIN_MODE_INPUT(GPIOF_PIN11) | \
- PIN_MODE_INPUT(GPIOF_PIN12) | \
- PIN_MODE_INPUT(GPIOF_PIN13) | \
- PIN_MODE_INPUT(GPIOF_PIN14) | \
- PIN_MODE_INPUT(GPIOF_PIN15))
-#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
- PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
-#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
- PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN15))
-#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
- PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN15))
-#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
- PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
- PIN_ODR_HIGH(GPIOF_PIN2) | \
- PIN_ODR_HIGH(GPIOF_PIN3) | \
- PIN_ODR_HIGH(GPIOF_PIN4) | \
- PIN_ODR_HIGH(GPIOF_PIN5) | \
- PIN_ODR_HIGH(GPIOF_PIN6) | \
- PIN_ODR_HIGH(GPIOF_PIN7) | \
- PIN_ODR_HIGH(GPIOF_PIN8) | \
- PIN_ODR_HIGH(GPIOF_PIN9) | \
- PIN_ODR_HIGH(GPIOF_PIN10) | \
- PIN_ODR_HIGH(GPIOF_PIN11) | \
- PIN_ODR_HIGH(GPIOF_PIN12) | \
- PIN_ODR_HIGH(GPIOF_PIN13) | \
- PIN_ODR_HIGH(GPIOF_PIN14) | \
- PIN_ODR_HIGH(GPIOF_PIN15))
-#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
- PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
- PIN_AFIO_AF(GPIOF_PIN2, 0) | \
- PIN_AFIO_AF(GPIOF_PIN3, 0) | \
- PIN_AFIO_AF(GPIOF_PIN4, 0) | \
- PIN_AFIO_AF(GPIOF_PIN5, 0) | \
- PIN_AFIO_AF(GPIOF_PIN6, 0) | \
- PIN_AFIO_AF(GPIOF_PIN7, 0))
-#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
- PIN_AFIO_AF(GPIOF_PIN9, 0) | \
- PIN_AFIO_AF(GPIOF_PIN10, 0) | \
- PIN_AFIO_AF(GPIOF_PIN11, 0) | \
- PIN_AFIO_AF(GPIOF_PIN12, 0) | \
- PIN_AFIO_AF(GPIOF_PIN13, 0) | \
- PIN_AFIO_AF(GPIOF_PIN14, 0) | \
- PIN_AFIO_AF(GPIOF_PIN15, 0))
-
-/*
- * GPIOG setup:
- *
- * PG0 - PIN0 (input pullup).
- * PG1 - PIN1 (input pullup).
- * PG2 - PIN2 (input pullup).
- * PG3 - PIN3 (input pullup).
- * PG4 - PIN4 (input pullup).
- * PG5 - PIN5 (input pullup).
- * PG6 - PIN6 (input pullup).
- * PG7 - PIN7 (input pullup).
- * PG8 - PIN8 (input pullup).
- * PG9 - PIN9 (input pullup).
- * PG10 - PIN10 (input pullup).
- * PG11 - PIN11 (input pullup).
- * PG12 - PIN12 (input pullup).
- * PG13 - PIN13 (input pullup).
- * PG14 - PIN14 (input pullup).
- * PG15 - PIN15 (input pullup).
- */
-#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \
- PIN_MODE_INPUT(GPIOG_PIN1) | \
- PIN_MODE_INPUT(GPIOG_PIN2) | \
- PIN_MODE_INPUT(GPIOG_PIN3) | \
- PIN_MODE_INPUT(GPIOG_PIN4) | \
- PIN_MODE_INPUT(GPIOG_PIN5) | \
- PIN_MODE_INPUT(GPIOG_PIN6) | \
- PIN_MODE_INPUT(GPIOG_PIN7) | \
- PIN_MODE_INPUT(GPIOG_PIN8) | \
- PIN_MODE_INPUT(GPIOG_PIN9) | \
- PIN_MODE_INPUT(GPIOG_PIN10) | \
- PIN_MODE_INPUT(GPIOG_PIN11) | \
- PIN_MODE_INPUT(GPIOG_PIN12) | \
- PIN_MODE_INPUT(GPIOG_PIN13) | \
- PIN_MODE_INPUT(GPIOG_PIN14) | \
- PIN_MODE_INPUT(GPIOG_PIN15))
-#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
-#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN15))
-#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLUP(GPIOG_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN15))
-#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \
- PIN_ODR_HIGH(GPIOG_PIN1) | \
- PIN_ODR_HIGH(GPIOG_PIN2) | \
- PIN_ODR_HIGH(GPIOG_PIN3) | \
- PIN_ODR_HIGH(GPIOG_PIN4) | \
- PIN_ODR_HIGH(GPIOG_PIN5) | \
- PIN_ODR_HIGH(GPIOG_PIN6) | \
- PIN_ODR_HIGH(GPIOG_PIN7) | \
- PIN_ODR_HIGH(GPIOG_PIN8) | \
- PIN_ODR_HIGH(GPIOG_PIN9) | \
- PIN_ODR_HIGH(GPIOG_PIN10) | \
- PIN_ODR_HIGH(GPIOG_PIN11) | \
- PIN_ODR_HIGH(GPIOG_PIN12) | \
- PIN_ODR_HIGH(GPIOG_PIN13) | \
- PIN_ODR_HIGH(GPIOG_PIN14) | \
- PIN_ODR_HIGH(GPIOG_PIN15))
-#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
- PIN_AFIO_AF(GPIOG_PIN1, 0) | \
- PIN_AFIO_AF(GPIOG_PIN2, 0) | \
- PIN_AFIO_AF(GPIOG_PIN3, 0) | \
- PIN_AFIO_AF(GPIOG_PIN4, 0) | \
- PIN_AFIO_AF(GPIOG_PIN5, 0) | \
- PIN_AFIO_AF(GPIOG_PIN6, 0) | \
- PIN_AFIO_AF(GPIOG_PIN7, 0))
-#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
- PIN_AFIO_AF(GPIOG_PIN9, 0) | \
- PIN_AFIO_AF(GPIOG_PIN10, 0) | \
- PIN_AFIO_AF(GPIOG_PIN11, 0) | \
- PIN_AFIO_AF(GPIOG_PIN12, 0) | \
- PIN_AFIO_AF(GPIOG_PIN13, 0) | \
- PIN_AFIO_AF(GPIOG_PIN14, 0) | \
- PIN_AFIO_AF(GPIOG_PIN15, 0))
-
-/*
- * GPIOH setup:
- *
- * PH0 - PIN0 (input pullup).
- * PH1 - PIN1 (input pullup).
- * PH2 - PIN2 (input pullup).
- * PH3 - PIN3 (input pullup).
- * PH4 - PIN4 (input pullup).
- * PH5 - PIN5 (input pullup).
- * PH6 - PIN6 (input pullup).
- * PH7 - PIN7 (input pullup).
- * PH8 - PIN8 (input pullup).
- * PH9 - PIN9 (input pullup).
- * PH10 - PIN10 (input pullup).
- * PH11 - PIN11 (input pullup).
- * PH12 - PIN12 (input pullup).
- * PH13 - PIN13 (input pullup).
- * PH14 - PIN14 (input pullup).
- * PH15 - PIN15 (input pullup).
- */
-#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
- PIN_MODE_INPUT(GPIOH_PIN1) | \
- PIN_MODE_INPUT(GPIOH_PIN2) | \
- PIN_MODE_INPUT(GPIOH_PIN3) | \
- PIN_MODE_INPUT(GPIOH_PIN4) | \
- PIN_MODE_INPUT(GPIOH_PIN5) | \
- PIN_MODE_INPUT(GPIOH_PIN6) | \
- PIN_MODE_INPUT(GPIOH_PIN7) | \
- PIN_MODE_INPUT(GPIOH_PIN8) | \
- PIN_MODE_INPUT(GPIOH_PIN9) | \
- PIN_MODE_INPUT(GPIOH_PIN10) | \
- PIN_MODE_INPUT(GPIOH_PIN11) | \
- PIN_MODE_INPUT(GPIOH_PIN12) | \
- PIN_MODE_INPUT(GPIOH_PIN13) | \
- PIN_MODE_INPUT(GPIOH_PIN14) | \
- PIN_MODE_INPUT(GPIOH_PIN15))
-#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
-#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN15))
-#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN15))
-#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
- PIN_ODR_HIGH(GPIOH_PIN1) | \
- PIN_ODR_HIGH(GPIOH_PIN2) | \
- PIN_ODR_HIGH(GPIOH_PIN3) | \
- PIN_ODR_HIGH(GPIOH_PIN4) | \
- PIN_ODR_HIGH(GPIOH_PIN5) | \
- PIN_ODR_HIGH(GPIOH_PIN6) | \
- PIN_ODR_HIGH(GPIOH_PIN7) | \
- PIN_ODR_HIGH(GPIOH_PIN8) | \
- PIN_ODR_HIGH(GPIOH_PIN9) | \
- PIN_ODR_HIGH(GPIOH_PIN10) | \
- PIN_ODR_HIGH(GPIOH_PIN11) | \
- PIN_ODR_HIGH(GPIOH_PIN12) | \
- PIN_ODR_HIGH(GPIOH_PIN13) | \
- PIN_ODR_HIGH(GPIOH_PIN14) | \
- PIN_ODR_HIGH(GPIOH_PIN15))
-#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
- PIN_AFIO_AF(GPIOH_PIN1, 0) | \
- PIN_AFIO_AF(GPIOH_PIN2, 0) | \
- PIN_AFIO_AF(GPIOH_PIN3, 0) | \
- PIN_AFIO_AF(GPIOH_PIN4, 0) | \
- PIN_AFIO_AF(GPIOH_PIN5, 0) | \
- PIN_AFIO_AF(GPIOH_PIN6, 0) | \
- PIN_AFIO_AF(GPIOH_PIN7, 0))
-#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
- PIN_AFIO_AF(GPIOH_PIN9, 0) | \
- PIN_AFIO_AF(GPIOH_PIN10, 0) | \
- PIN_AFIO_AF(GPIOH_PIN11, 0) | \
- PIN_AFIO_AF(GPIOH_PIN12, 0) | \
- PIN_AFIO_AF(GPIOH_PIN13, 0) | \
- PIN_AFIO_AF(GPIOH_PIN14, 0) | \
- PIN_AFIO_AF(GPIOH_PIN15, 0))
-
-
-/*
- * USB bus activation macro, required by the USB driver.
- */
-// #define usb_lld_connect_bus(usbp)
-#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
-// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
-/*
- * USB bus de-activation macro, required by the USB driver.
- */
-// #define usb_lld_disconnect_bus(usbp)
-#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL)); palClearPad(GPIOA, GPIOA_USB_DP)
-// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
-
-#if !defined(_FROM_ASM_)
-#ifdef __cplusplus
-extern "C" {
-#endif
- void boardInit(void);
-#ifdef __cplusplus
-}
-#endif
-#endif /* _FROM_ASM_ */
-
-#endif /* _BOARD_H_ */
diff --git a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.mk
deleted file mode 100644
index 43377629a3..0000000000
--- a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# List of all the board related files.
-BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
-
-# Required include directories
-BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/proton_c/bootloader_defs.h b/keyboards/proton_c/bootloader_defs.h
deleted file mode 100644
index 3b0e9d20a6..0000000000
--- a/keyboards/proton_c/bootloader_defs.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- * This also requires a patch to chibios:
- * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/keyboards/proton_c/config.h b/keyboards/proton_c/config.h
index 1a2346d415..13a608f9b1 100644
--- a/keyboards/proton_c/config.h
+++ b/keyboards/proton_c/config.h
@@ -33,7 +33,6 @@
#define MATRIX_ROW_PINS { B9 }
#define MATRIX_COL_PINS { B0 }
-
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 6
diff --git a/keyboards/proton_c/rules.mk b/keyboards/proton_c/rules.mk
index f682c1fd6b..4edc75929e 100644
--- a/keyboards/proton_c/rules.mk
+++ b/keyboards/proton_c/rules.mk
@@ -1,38 +1,4 @@
-## chip/board settings
-# - the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F3xx
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F303xC
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f3xx
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = GENERIC_STM32_F303XC
-
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+MCU = STM32F303
# Build Options
# comment out to disable the options.
diff --git a/keyboards/quefrency/readme.md b/keyboards/quefrency/readme.md
index 8fb1c6bc18..66d033b6b2 100644
--- a/keyboards/quefrency/readme.md
+++ b/keyboards/quefrency/readme.md
@@ -17,6 +17,6 @@ Example of flashing this keyboard:
Handedness detection is already hardwired onto the PCB, so no need to deal with `EE_HANDS` or flashing .eep files.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io)
diff --git a/keyboards/qwertyydox/readme.md b/keyboards/qwertyydox/readme.md
index 1fa984e031..2314aac47e 100644
--- a/keyboards/qwertyydox/readme.md
+++ b/keyboards/qwertyydox/readme.md
@@ -23,5 +23,5 @@ Example of flashing this keyboard:
make qwertyydox/rev1:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/rama/m10_b/readme.md b/keyboards/rama/m10_b/readme.md
index 6fb04c6042..9facb5cd34 100644
--- a/keyboards/rama/m10_b/readme.md
+++ b/keyboards/rama/m10_b/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make rama/m10_b:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/readme.md b/keyboards/readme.md
index 5ba98c6c45..8b0c10ab48 100644
--- a/keyboards/readme.md
+++ b/keyboards/readme.md
@@ -38,6 +38,7 @@ These keyboards are part of the QMK repository, but their manufacturers are not
* [Arrow Pad](/keyboards/arrow_pad) &mdash; A custom creation by IBNobody.
* [Atreus](/keyboards/atreus) &mdash; Made by Technomancy.
* [Bantam44](/keyboards/bantam44) &mdash; It is a 44-key 40% staggered keyboard.
+* [DataHand](/keyboards/handwired/datahand) &mdash; DataHand keyboard converted to use a Teensy board.
* [Ergodox Infinity](/keyboards/ergodox_infinity) - Ergonomic Split Keyboard by Input Club.
* [GH60](/keyboards/gh60) &mdash; A 60% Geekhack community-driven project.
* [GON NerD](/keyboards/gonnerd) &mdash; Korean custom 60% PCB
diff --git a/keyboards/redox/keymaps/default/rules.mk b/keyboards/redox/keymaps/default/rules.mk
index 1e57612788..a81250cdf6 100644
--- a/keyboards/redox/keymaps/default/rules.mk
+++ b/keyboards/redox/keymaps/default/rules.mk
@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/redox/keymaps/italian/rules.mk b/keyboards/redox/keymaps/italian/rules.mk
index 1e57612788..a81250cdf6 100644
--- a/keyboards/redox/keymaps/italian/rules.mk
+++ b/keyboards/redox/keymaps/italian/rules.mk
@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/rorschach/readme.md b/keyboards/rorschach/readme.md
index 537553720b..8858b72144 100644
--- a/keyboards/rorschach/readme.md
+++ b/keyboards/rorschach/readme.md
@@ -15,6 +15,6 @@ Example of flashing this keyboard:
make rorschach/rev1:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Iris Build Guide](https://docs.keeb.io/iris-build-guide.html)
diff --git a/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk b/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk
index cf50122526..1bcd7ea7f2 100644
--- a/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk
+++ b/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/s60_x/keymaps/custom/keymap.c b/keyboards/s60_x/keymaps/custom/keymap.c
index 942fadf4a8..c98d14349f 100644
--- a/keyboards/s60_x/keymaps/custom/keymap.c
+++ b/keyboards/s60_x/keymaps/custom/keymap.c
@@ -24,5 +24,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LSFT, HOME, Z, X, C, V, B, N, M, COMM, DOT, SLSH, END, RSFT, UP, \
LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL),
};
-const uint16_t PROGMEM fn_actions[] = {};
-
diff --git a/keyboards/s60_x/keymaps/plain/keymap.c b/keyboards/s60_x/keymaps/plain/keymap.c
index abf7ede2c4..3cdda75620 100644
--- a/keyboards/s60_x/keymaps/plain/keymap.c
+++ b/keyboards/s60_x/keymaps/plain/keymap.c
@@ -22,4 +22,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL),
};
-const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/s60_x/readme.md b/keyboards/s60_x/readme.md
index ddb0d4ba66..1e4b4cc316 100644
--- a/keyboards/s60_x/readme.md
+++ b/keyboards/s60_x/readme.md
@@ -16,4 +16,4 @@ Make example for rgb version of this keyboard:
make s60_x/rgb:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/s65_plus/info.json b/keyboards/s65_plus/info.json
index 14c5b08d91..1b17ddb53d 100644
--- a/keyboards/s65_plus/info.json
+++ b/keyboards/s65_plus/info.json
@@ -6,6 +6,7 @@
"height": 5,
"layouts": {
"LAYOUT_ansi": {
+ "key_count": 78,
"layout": [
{"label":"F1", "x":0, "y":0},
{"label":"F2", "x":1, "y":0},
@@ -86,7 +87,90 @@
{"label":"DOWN", "x":16, "y":4},
{"label":"RIGHT", "x":17, "y":4}
]
+ },
+ "LAYOUT_iso": {
+ "key_count": 79,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"F2", "x":1, "y":0},
+ {"label":"ESC", "x":2, "y":0},
+ {"label":"1", "x":3, "y":0},
+ {"label":"2", "x":4, "y":0},
+ {"label":"3", "x":5, "y":0},
+ {"label":"4", "x":6, "y":0},
+ {"label":"5", "x":7, "y":0},
+ {"label":"6", "x":8, "y":0},
+ {"label":"7", "x":9, "y":0},
+ {"label":"8", "x":10, "y":0},
+ {"label":"9", "x":11, "y":0},
+ {"label":"0", "x":12, "y":0},
+ {"label":"MINUS", "x":13, "y":0},
+ {"label":"EQUAL", "x":14, "y":0},
+ {"label":"BACKSPACE", "x":15, "y":0, "w":2},
+ {"label":"DELETE", "x":17, "y":0},
+ {"label":"F3", "x":0, "y":1},
+ {"label":"F4", "x":1, "y":1},
+ {"label":"TAB", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"LBRACKET", "x":13.5, "y":1},
+ {"label":"RBRACKET", "x":14.5, "y":1},
+ {"label":"PAGEUP", "x":17, "y":1},
+ {"label":"F5", "x":0, "y":2},
+ {"label":"F6", "x":1, "y":2},
+ {"label":"CAPSLOCK", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":"SEMICOLON", "x":12.75, "y":2},
+ {"label":"QUOTE", "x":13.75, "y":2},
+ {"label":"ISOHASH", "x":14.75, "y":2},
+ {"label":"ENTER", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"PAGEDOWN", "x":17, "y":2},
+ {"label":"F7", "x":0, "y":3},
+ {"label":"F8", "x":1, "y":3},
+ {"label":"LSHIFT", "x":2, "y":3, "w":1.25},
+ {"label":"ISOBACKSLASH", "x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"COMMA", "x":11.25, "y":3},
+ {"label":"PERIOD", "x":12.25, "y":3},
+ {"label":"SLASH", "x":13.25, "y":3},
+ {"label":"RSHIFT", "x":14.25, "y":3, "w":1.75},
+ {"label":"UP", "x":16, "y":3},
+ {"label":"END", "x":17, "y":3},
+ {"label":"F9", "x":0, "y":4},
+ {"label":"F10", "x":1, "y":4},
+ {"label":"LCTRL", "x":2, "y":4, "w":1.25},
+ {"label":"LGUI", "x":3.25, "y":4, "w":1.25},
+ {"label":"LALT", "x":4.5, "y":4, "w":1.25},
+ {"label":"SPACE", "x":5.75, "y":4, "w":6.25},
+ {"label":"RALT", "x":12, "y":4},
+ {"label":"FN", "x":13, "y":4},
+ {"label":"RCTRL", "x":14, "y":4},
+ {"label":"LEFT", "x":15, "y":4},
+ {"label":"DOWN", "x":16, "y":4},
+ {"label":"RIGHT", "x":17, "y":4}
+ ]
}
}
}
-
diff --git a/keyboards/s65_plus/keymaps/default/keymap.c b/keyboards/s65_plus/keymaps/default/keymap.c
index 04f6926de1..bbeea6a8fb 100644
--- a/keyboards/s65_plus/keymaps/default/keymap.c
+++ b/keyboards/s65_plus/keymaps/default/keymap.c
@@ -5,49 +5,52 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: Main layer
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │ F1 │ F2 │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│ DEL │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ F3 │ F4 │ TAB │▒▒▒▒▒│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PG_UP│
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ F5 │ F6 │CAPSL│▒▒▒▒▒│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│PG_DN│
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ F7 │ F8 │▒▒▒▒▒│LSHFT│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│ UP │ END │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ F9 │ F10 │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │RCTL │LEFT │DOWN │RIGHT│
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │F1 │F2 │Esc│1 !│2 "│3 £│4 $│5 %│6 ^│7 &│8 *│9 (│0 )│- _│= +│Bksp │Del│
+ * ├───┼───┼───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │F3 │F4 │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │[ {│] }│\ | │End│
+ * ├───┼───┼─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │F5 │F6 │CapsLk│ A │ S │ D │ F │ G │ H │ J │ K │ L │; :│' "│Enter │PUp│
+ * ├───┼───┼──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │F7 │F8 │Shift │ Z │ X │ C │ V │ B │ N │ M │, <│. >│/ ?│Shift │Up │PDn│
+ * ├───┼───┼────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │F9 │F10│Ctrl│GUI │Alt │Space │Alt│Fn │Ctl│Lft│Dwn│Rgt│
+ * └───┴───┴────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
/* 0: ANSI qwerty */
[_BL] = LAYOUT_ansi(
- KC_F1, KC_F2, 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_DEL, \
- KC_F3, KC_F4, 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_PGUP, \
- KC_F5, KC_F6, 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_PGDN, \
- KC_F7, KC_F8, 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_END, \
- KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_AL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ KC_F1, KC_F2, 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_DEL, \
+ KC_F3, KC_F4, 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_PGUP, \
+ KC_F5, KC_F6, 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_PGDN, \
+ KC_F7, KC_F8, 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_END, \
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_AL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
/* 1: LED layer
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │ │ │RESET│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│BLTOG│BLSTP│
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │▒▒▒▒▒│ │UGTOG│UGMOD│UGHUI│UGHUD│UGSAI│UGSAD│UGVAI│UGVAD│ │ │▒▒▒▒▒│ │VOLU │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │PREV │VOLD │NEXT │
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ │ │RST│ │ │ │ │ │ │ │ │ │ │ │ │BLTog │BSt│
+ * ├───┼───┼───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │ │RTg│RMd│RH+│RH-│RS+│RS-│RV+│RV-│ │ │ │VUp│ │
+ * ├───┼───┼────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │Prv│VDn│Nxt│
+ * └───┴───┴────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
[_AL] = LAYOUT_ansi(
- 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, KC_TRNS, KC_TRNS, BL_TOGG, BL_STEP, \
- 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, 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, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT)
+ _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_STEP, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT \
+ )
};
-const uint16_t PROGMEM fn_actions[] = {
-};
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
diff --git a/keyboards/s65_plus/keymaps/iso/keymap.c b/keyboards/s65_plus/keymaps/iso/keymap.c
new file mode 100644
index 0000000000..2218d051fd
--- /dev/null
+++ b/keyboards/s65_plus/keymaps/iso/keymap.c
@@ -0,0 +1,56 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _AL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: Main layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │F1 │F2 │Esc│1 !│2 "│3 £│4 $│5 %│6 ^│7 &│8 *│9 (│0 )│- _│= +│Bksp │Del│
+ * ├───┼───┼───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │F3 │F4 │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │[ {│] }│Enter│End│
+ * ├───┼───├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
+ * │F5 │F6 │CapsLk│ A │ S │ D │ F │ G │ H │ J │ K │ L │; :│' @│# ~│ │PUp│
+ * ├───┼───┼────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │F7 │F8 │Sft │\ |│ Z │ X │ C │ V │ B │ N │ M │, <│. >│/ ?│Shift │Up │PDn│
+ * ├───┼───┼────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │F9 │F10│Ctrl│GUI │Alt │Space │Alt│Fn │Ctl│Lft│Dwn│Rgt│
+ * └───┴───┴────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+
+ /* 0: ISO qwerty */
+ [_BL] = LAYOUT_iso(
+ KC_F1, KC_F2, 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_DEL, \
+ KC_F3, KC_F4, 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_PGUP, \
+ KC_F5, KC_F6, 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, KC_PGDN, \
+ KC_F7, KC_F8, 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_END, \
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_AL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+
+ /* 1: LED layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ │ │RST│ │ │ │ │ │ │ │ │ │ │ │ │BLTog │BSt│
+ * ├───┼───┼───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │ │ │ │ │RTg│RMd│RH+│RH-│RS+│RS-│RV+│RV-│ │ │ │VUp│ │
+ * ├───┼───┼────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │Prv│VDn│Nxt│
+ * └───┴───┴────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+
+ [_AL] = LAYOUT_iso(
+ _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_STEP, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT \
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
diff --git a/keyboards/s65_plus/keymaps/iso/readme.md b/keyboards/s65_plus/keymaps/iso/readme.md
new file mode 100644
index 0000000000..de1d9adf80
--- /dev/null
+++ b/keyboards/s65_plus/keymaps/iso/readme.md
@@ -0,0 +1,3 @@
+# iso
+
+An ISO layout version of the default keymap.
diff --git a/keyboards/s65_plus/readme.md b/keyboards/s65_plus/readme.md
index 426a6612d8..b1ee865bfc 100644
--- a/keyboards/s65_plus/readme.md
+++ b/keyboards/s65_plus/readme.md
@@ -5,10 +5,10 @@ DIY 65% keyboard from Sentraq.
Keyboard Maintainer: QMK Community
Hardware Supported: S65-PLUS PCB
-Hardware Availability: https://sentraq.com/collections/kits/products/s65-plus-diy-keyboard-kit
+Hardware Availability: [Sentraq](https://sentraq.com/collections/kits/products/s65-plus-diy-keyboard-kit)
Make example for this keyboard (after setting up your build environment):
make s65_plus:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/s65_plus/s65_plus.h b/keyboards/s65_plus/s65_plus.h
index 1075571085..95d06122e0 100644
--- a/keyboards/s65_plus/s65_plus.h
+++ b/keyboards/s65_plus/s65_plus.h
@@ -16,6 +16,19 @@
{ K400, K401, K402, K403, K404, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K412, K413, K414, K415, K416, K417 } \
}
+#define LAYOUT_iso( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K016, K017, \
+ K100, K101, K102, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K117, \
+ K200, K201, K202, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K116, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K315, K316, K317, \
+ K400, K401, K402, K403, K404, K408, K412, K413, K414, K415, K416, K417 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, KC_NO, K016, K017 }, \
+ { K100, K101, K102, KC_NO, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117 }, \
+ { K200, K201, K202, KC_NO, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, KC_NO, K217 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, KC_NO, K315, K316, K317 }, \
+ { K400, K401, K402, K403, K404, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K412, K413, K414, K415, K416, K417 } \
+}
+
void matrix_init_user(void);
void matrix_scan_user(void);
-
diff --git a/keyboards/s65_x/config.h b/keyboards/s65_x/config.h
index 367efc526c..aed55632ab 100644
--- a/keyboards/s65_x/config.h
+++ b/keyboards/s65_x/config.h
@@ -13,11 +13,11 @@
/* key matrix size */
#define MATRIX_ROWS 5
-#define MATRIX_COLS 18
+#define MATRIX_COLS 16
/* key matrix pins */
#define MATRIX_ROW_PINS { C7, C6, B6, B5, B4 }
-#define MATRIX_COL_PINS { F6, F5, F4, F1, F0, E6, B0, B1, D5, B2, B3, D0, D1, D2, D4, D6, D7, F7 }
+#define MATRIX_COL_PINS { F4, F1, F0, E6, B0, B1, D5, B2, B3, D0, D1, D2, D4, D6, D7, F7 }
#define UNUSED_PINS
/* number of backlight levels */
diff --git a/keyboards/s65_x/info.json b/keyboards/s65_x/info.json
index 74c805e245..9aeb7eb7de 100644
--- a/keyboards/s65_x/info.json
+++ b/keyboards/s65_x/info.json
@@ -2,24 +2,155 @@
"keyboard_name": "S65-X PCB",
"url": "",
"maintainer": "qmk",
- "width": 18,
+ "width": 16,
"height": 5,
"layouts": {
- "LAYOUT_ansi": {
+ "LAYOUT_65_ansi": {
"key_count": 68,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Delete", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Delete", "x":15, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"Page Up", "x":15, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Page Down", "x":15, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Up", "x":14, "y":3},
+ {"label":"End", "x":15, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4},
+ {"label":"Fn", "x":11, "y":4},
+ {"label":"Ctrl", "x":12, "y":4},
+ {"label":"Left", "x":13, "y":4},
+ {"label":"Down", "x":14, "y":4},
+ {"label":"Right", "x":15, "y":4}
+ ]
},
- "LAYOUT_iso": {
+ "LAYOUT_65_iso": {
"key_count": 69,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Delete", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"PgUp", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"PgDn", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
- },
- "LAYOUT_plus_ansi": {
- "key_count": 78,
- "layout": [{"label":"F1", "x":0, "y":0}, {"label":"F2", "x":1, "y":0}, {"label":"Esc", "x":2, "y":0}, {"label":"!", "x":3, "y":0}, {"label":"@", "x":4, "y":0}, {"label":"#", "x":5, "y":0}, {"label":"$", "x":6, "y":0}, {"label":"%", "x":7, "y":0}, {"label":"^", "x":8, "y":0}, {"label":"&", "x":9, "y":0}, {"label":"*", "x":10, "y":0}, {"label":"(", "x":11, "y":0}, {"label":")", "x":12, "y":0}, {"label":"_", "x":13, "y":0}, {"label":"+", "x":14, "y":0}, {"label":"Backspace", "x":15, "y":0, "w":2}, {"label":"Delete", "x":17, "y":0}, {"label":"F3", "x":0, "y":1}, {"label":"F4", "x":1, "y":1}, {"label":"Tab", "x":2, "y":1, "w":1.5}, {"label":"Q", "x":3.5, "y":1}, {"label":"W", "x":4.5, "y":1}, {"label":"E", "x":5.5, "y":1}, {"label":"R", "x":6.5, "y":1}, {"label":"T", "x":7.5, "y":1}, {"label":"Y", "x":8.5, "y":1}, {"label":"U", "x":9.5, "y":1}, {"label":"I", "x":10.5, "y":1}, {"label":"O", "x":11.5, "y":1}, {"label":"P", "x":12.5, "y":1}, {"label":"{", "x":13.5, "y":1}, {"label":"}", "x":14.5, "y":1}, {"label":"|", "x":15.5, "y":1, "w":1.5}, {"label":"PgUp", "x":17, "y":1}, {"label":"F5", "x":0, "y":2}, {"label":"F6", "x":1, "y":2}, {"label":"Caps Lock", "x":2, "y":2, "w":1.75}, {"label":"A", "x":3.75, "y":2}, {"label":"S", "x":4.75, "y":2}, {"label":"D", "x":5.75, "y":2}, {"label":"F", "x":6.75, "y":2}, {"label":"G", "x":7.75, "y":2}, {"label":"H", "x":8.75, "y":2}, {"label":"J", "x":9.75, "y":2}, {"label":"K", "x":10.75, "y":2}, {"label":"L", "x":11.75, "y":2}, {"label":":", "x":12.75, "y":2}, {"label":"\"", "x":13.75, "y":2}, {"label":"Enter", "x":14.75, "y":2, "w":2.25}, {"label":"PgDn", "x":17, "y":2}, {"label":"F7", "x":0, "y":3}, {"label":"F8", "x":1, "y":3}, {"label":"Shift", "x":2, "y":3, "w":2.25}, {"label":"Z", "x":4.25, "y":3}, {"label":"X", "x":5.25, "y":3}, {"label":"C", "x":6.25, "y":3}, {"label":"V", "x":7.25, "y":3}, {"label":"B", "x":8.25, "y":3}, {"label":"N", "x":9.25, "y":3}, {"label":"M", "x":10.25, "y":3}, {"label":"<", "x":11.25, "y":3}, {"label":">", "x":12.25, "y":3}, {"label":"?", "x":13.25, "y":3}, {"label":"Shift", "x":14.25, "y":3, "w":1.75}, {"label":"\u2191", "x":16, "y":3}, {"label":"End", "x":17, "y":3}, {"label":"F9", "x":0, "y":4}, {"label":"F10", "x":1, "y":4}, {"label":"Ctrl", "x":2, "y":4, "w":1.25}, {"label":"Win", "x":3.25, "y":4, "w":1.25}, {"label":"Alt", "x":4.5, "y":4, "w":1.25}, {"x":5.75, "y":4, "w":6.25}, {"label":"Alt", "x":12, "y":4}, {"label":"Fn", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}, {"label":"\u2190", "x":15, "y":4}, {"label":"\u2193", "x":16, "y":4}, {"label":"\u2192", "x":17, "y":4}]
- },
- "LAYOUT_plus_iso": {
- "key_count": 79,
- "layout": [{"label":"F1", "x":0, "y":0}, {"label":"F2", "x":1, "y":0}, {"label":"Esc", "x":2, "y":0}, {"label":"!", "x":3, "y":0}, {"label":"\"", "x":4, "y":0}, {"label":"\u00a3", "x":5, "y":0}, {"label":"$", "x":6, "y":0}, {"label":"%", "x":7, "y":0}, {"label":"^", "x":8, "y":0}, {"label":"&", "x":9, "y":0}, {"label":"*", "x":10, "y":0}, {"label":"(", "x":11, "y":0}, {"label":")", "x":12, "y":0}, {"label":"_", "x":13, "y":0}, {"label":"+", "x":14, "y":0}, {"label":"Backspace", "x":15, "y":0, "w":2}, {"label":"Delete", "x":17, "y":0}, {"label":"F3", "x":0, "y":1}, {"label":"F4", "x":1, "y":1}, {"label":"Tab", "x":2, "y":1, "w":1.5}, {"label":"Q", "x":3.5, "y":1}, {"label":"W", "x":4.5, "y":1}, {"label":"E", "x":5.5, "y":1}, {"label":"R", "x":6.5, "y":1}, {"label":"T", "x":7.5, "y":1}, {"label":"Y", "x":8.5, "y":1}, {"label":"U", "x":9.5, "y":1}, {"label":"I", "x":10.5, "y":1}, {"label":"O", "x":11.5, "y":1}, {"label":"P", "x":12.5, "y":1}, {"label":"{", "x":13.5, "y":1}, {"label":"}", "x":14.5, "y":1}, {"label":"PgUp", "x":17, "y":1}, {"label":"F5", "x":0, "y":2}, {"label":"F6", "x":1, "y":2}, {"label":"Caps Lock", "x":2, "y":2, "w":1.75}, {"label":"A", "x":3.75, "y":2}, {"label":"S", "x":4.75, "y":2}, {"label":"D", "x":5.75, "y":2}, {"label":"F", "x":6.75, "y":2}, {"label":"G", "x":7.75, "y":2}, {"label":"H", "x":8.75, "y":2}, {"label":"J", "x":9.75, "y":2}, {"label":"K", "x":10.75, "y":2}, {"label":"L", "x":11.75, "y":2}, {"label":":", "x":12.75, "y":2}, {"label":"@", "x":13.75, "y":2}, {"label":"~", "x":14.75, "y":2}, {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2}, {"label":"PgDn", "x":17, "y":2}, {"label":"F7", "x":0, "y":3}, {"label":"F8", "x":1, "y":3}, {"label":"Shift", "x":2, "y":3, "w":1.25}, {"label":"|", "x":3.25, "y":3}, {"label":"Z", "x":4.25, "y":3}, {"label":"X", "x":5.25, "y":3}, {"label":"C", "x":6.25, "y":3}, {"label":"V", "x":7.25, "y":3}, {"label":"B", "x":8.25, "y":3}, {"label":"N", "x":9.25, "y":3}, {"label":"M", "x":10.25, "y":3}, {"label":"<", "x":11.25, "y":3}, {"label":">", "x":12.25, "y":3}, {"label":"?", "x":13.25, "y":3}, {"label":"Shift", "x":14.25, "y":3, "w":1.75}, {"label":"\u2191", "x":16, "y":3}, {"label":"End", "x":17, "y":3}, {"label":"F9", "x":0, "y":4}, {"label":"F10", "x":1, "y":4}, {"label":"Ctrl", "x":2, "y":4, "w":1.25}, {"label":"Win", "x":3.25, "y":4, "w":1.25}, {"label":"Alt", "x":4.5, "y":4, "w":1.25}, {"x":5.75, "y":4, "w":6.25}, {"label":"AltGr", "x":12, "y":4}, {"label":"Fn", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}, {"label":"\u2190", "x":15, "y":4}, {"label":"\u2193", "x":16, "y":4}, {"label":"\u2192", "x":17, "y":4}]
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Delete", "x":15, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"Page Up", "x":15, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"#", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"label":"Page Down", "x":15, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Up", "x":14, "y":3},
+ {"label":"End", "x":15, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"AltGr", "x":10, "y":4},
+ {"label":"Fn", "x":11, "y":4},
+ {"label":"Ctrl", "x":12, "y":4},
+ {"label":"Left", "x":13, "y":4},
+ {"label":"Down", "x":14, "y":4},
+ {"label":"Right", "x":15, "y":4}
+ ]
}
}
}
diff --git a/keyboards/s65_x/keymaps/default/keymap.c b/keyboards/s65_x/keymaps/default/keymap.c
index 3d0b9d72d7..a2fd12ed60 100644
--- a/keyboards/s65_x/keymaps/default/keymap.c
+++ b/keyboards/s65_x/keymaps/default/keymap.c
@@ -1,103 +1,102 @@
-#include "s65_x.h"
+#include QMK_KEYBOARD_H
#define _BL 0
#define _AL 1
#define _FL 2
#define _UL 3
+#define FL_CAPS LT(_FL, KC_CAPS) // Tap to toggle caps lock and hold to activate function layer
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: Main layer, swapped alt and GUI for Mac
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│DEL │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│END │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│PG_UP│
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│ UP │PG_DN│
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │LCTRL│L_ALT│L_GUI│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │LEFT │DOWN │RIGHT│
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │GE │1 !│2 @│3 #│4 $│5 %│6 ^│7 &│8 *│9 (│0 )│- _│= +│Bksp │Del│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │[ {│] }│\ | │End│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │; :│' "│Enter │PUp│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │Shift │ Z │ X │ C │ V │ B │ N │ M │, <│. >│/ ?│Shift │Up │PDn│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│Alt │GUI │Space │Alt│Fn │Ctl│Lft│Dwn│Rgt│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
/* 0: ANSI qwerty */
- [_BL] = LAYOUT_ansi(
- KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
- 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_END, \
- F(2), 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, \
- 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, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ [_BL] = LAYOUT_65_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ 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_END, \
+ FL_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, \
+ 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, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
/* 1: Locking arrow keys to WASD for when you need dedicated arrow keys
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ Up │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │ │ │
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │Up │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │Lft│Dwn│Rgt│ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
- [_AL] = LAYOUT_ansi(
- 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, KC_TRNS, KC_UP, 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_LEFT, KC_DOWN, KC_RIGHT, 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, 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, KC_TRNS, KC_TRNS),
+ [_AL] = LAYOUT_65_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
/* 2: Fn layer
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ _AL │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │Left │Down │Right│ │ │Left │Down │ Up │Right│ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │▒▒▒▒▒│_UL │ │ │ │ │ │ │ │Home │End │▒▒▒▒▒│ │Vol+ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │Mute │Vol- │Play │
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │` ~│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │_AL│Up │ │ │ │ │ │PUp│PDn│PSc│SLk│Pau│ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │Lft│Dwn│Rgt│ │ │Lft│Dwn│Up │Rgt│ │ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │_UL│ │ │ │ │ │ │Hm │End│ │ │VUp│ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │Mut│VDn│Ply│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
- [_FL] = LAYOUT_ansi(
- KC_GRAVE, 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_TRNS, \
- KC_TRNS, F(1), KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_MPLY),
+ [_FL] = LAYOUT_65_ansi(
+ 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, _______, _______, \
+ _______, TG(_AL), KC_UP, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, \
+ _______, TG(_UL), _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_MPLY \
+ ),
+
/* 3: Locking layer for controlling the underglow
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │BL On│BL St│ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ On │Mode │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │▒▒▒▒▒│ │Hue+ │Hue- │Sat+ │Sat- │Val+ │Val- │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │ │ │
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │BTg│BSt│ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │RTg│RMd│ │ │ │ │ │ │ │ │ │ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │RH+│RH-│RS+│RS-│RV+│RV-│ │ │ │ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
- [_UL] = LAYOUT_ansi(
- 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, BL_TOGG, BL_STEP, 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_MOD, 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_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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),
+ [_UL] = LAYOUT_65_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, BL_TOGG, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
};
-
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(_FL), // Momentary Fn overlay
- [1] = ACTION_LAYER_TOGGLE(_AL), // Toggle Arrow Layer overlay
- [2] = ACTION_LAYER_TAP_KEY(_FL, KC_CAPS),// Tap to toggle caps lock and hold to activate function layer
- [3] = ACTION_LAYER_TOGGLE(_UL), // Toggle Underglow Layer overlay
-};
-
diff --git a/keyboards/s65_x/keymaps/iso/keymap.c b/keyboards/s65_x/keymaps/iso/keymap.c
index 9e888d9a87..f5a0a86306 100644
--- a/keyboards/s65_x/keymaps/iso/keymap.c
+++ b/keyboards/s65_x/keymaps/iso/keymap.c
@@ -1,103 +1,102 @@
-#include "s65_x.h"
+#include QMK_KEYBOARD_H
#define _BL 0
#define _AL 1
#define _FL 2
#define _UL 3
+#define FL_CAPS LT(_FL, KC_CAPS) // Tap to toggle caps lock and hold to activate function layer
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: Main layer, swapped alt and GUI for Mac
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│DEL │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │▒▒▒▒▒│▒▒▒▒▒│END │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ~ │▒▒▒▒▒│ENTER│PG_UP│
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │LSHFT│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│ UP │PG_DN│
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │LEFT │DOWN │RIGHT│
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │GE │1 !│2 "│3 £│4 $│5 %│6 ^│7 &│8 *│9 (│0 )│- _│= +│Bksp │Del│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │[ {│] }│Enter│End│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
+ * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │; :│' @│# ~│ │PUp│
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Sft │\ |│ Z │ X │ C │ V │ B │ N │ M │, <│. >│/ ?│Shift │Up │PDn│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │Space │Alt│Fn │Ctl│Lft│Dwn│Rgt│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
/* 0: ISO qwerty */
- [_BL] = LAYOUT_iso(
- KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
- 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_END, \
- F(2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRAVE, KC_ENT, KC_PGUP, \
- KC_LSFT, KC_BSLS, 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, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ [_BL] = LAYOUT_65_iso(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ 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_END, \
+ FL_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, KC_PGUP, \
+ 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_PGDN, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
/* 1: Locking arrow keys to WASD for when you need dedicated arrow keys
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ Up │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │Left │Down │Right│ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │ │ │
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │Up │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
+ * │ │Lft│Dwn│Rgt│ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
- [_AL] = LAYOUT_iso(
- 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, KC_TRNS, KC_UP, 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_LEFT, KC_DOWN, KC_RIGHT, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS),
+ [_AL] = LAYOUT_65_iso(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
/* 2: Fn layer
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ _AL │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │Left │Down │Right│ │ │Left │Down │ Up │Right│ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │_UL │ │ │ │ │ │ │ │ Home│ End │▒▒▒▒▒│ │Vol+ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │Mute │Vol- │Play │
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │` ~│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │_AL│Up │ │ │ │ │ │PUp│PDn│PSc│SLk│Pau│ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
+ * │ │Lft│Dwn│Rgt│ │ │Lft│Dwn│Up │Rgt│ │ │ │ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │ │ │_UL│ │ │ │ │ │ │Hm │End│ │ │VUp│ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │Mut│VDn│Ply│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
- [_FL] = LAYOUT_iso(
- KC_GRAVE, 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_TRNS, \
- KC_TRNS, F(1), KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_MPLY),
+ [_FL] = LAYOUT_65_iso(
+ 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, _______, _______, \
+ _______, TG(_AL), KC_UP, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, \
+ _______, _______, TG(_UL), _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_MPLY \
+ ),
+
/* 3: Locking layer for controlling the underglow
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │BL On│BL St│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ On │Mode │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│▒▒▒▒▒│ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │Hue+ │Hue- │Sat+ │Sat- │Val+ │Val- │ │ │ │▒▒▒▒▒│ │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │ │ │
- * └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │BTg│BSt│ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │RTg│RMd│ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │ │RH+│RH-│RS+│RS-│RV+│RV-│ │ │ │ │ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
*/
- [_UL] = LAYOUT_iso(
- 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, BL_TOGG, BL_STEP, 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_MOD, 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_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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),
+ [_UL] = LAYOUT_65_iso(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, BL_TOGG, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
};
-
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(_FL), // Momentary Fn overlay
- [1] = ACTION_LAYER_TOGGLE(_AL), // Toggle Arrow Layer overlay
- [2] = ACTION_LAYER_TAP_KEY(_FL, KC_CAPS),// Tap to toggle caps lock and hold to activate function layer
- [3] = ACTION_LAYER_TOGGLE(_UL), // Toggle Underglow Layer overlay
-};
-
diff --git a/keyboards/s65_x/keymaps/kelorean/keymap.c b/keyboards/s65_x/keymaps/kelorean/keymap.c
index 696b664e0c..7a0de8559d 100644
--- a/keyboards/s65_x/keymaps/kelorean/keymap.c
+++ b/keyboards/s65_x/keymaps/kelorean/keymap.c
@@ -1,4 +1,4 @@
-#include "s65_x.h"
+#include QMK_KEYBOARD_H
#define _BL 0
#define _CM 1
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 0: ANSI qwerty */
- [_BL] = LAYOUT_ansi(
+ [_BL] = LAYOUT_65_ansi(
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
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_END, \
F(4), 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, \
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 1: Colemak layer */
- [_CM] = LAYOUT_ansi(
+ [_CM] = LAYOUT_65_ansi(
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
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_END, \
F(4), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGUP, \
@@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 2: Dvorak layer */
- [_DV] = LAYOUT_ansi(
+ [_DV] = LAYOUT_65_ansi(
KC_GESC, 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, KC_DEL, \
KC_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, KC_END, \
F(4), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_PGUP, \
@@ -89,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
*/
/* 3: Locking arrow keys to WASD*/
- [_AL] = LAYOUT_ansi(
+ [_AL] = LAYOUT_65_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -110,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
*/
- [_FL] = LAYOUT_ansi(
+ [_FL] = LAYOUT_65_ansi(
KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, \
_______, F(3), KC_UP, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, \
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______, _______, \
@@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
*/
- [_UL] = LAYOUT_ansi(
+ [_UL] = LAYOUT_65_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, BL_TOGG, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
diff --git a/keyboards/s65_x/keymaps/nall/keymap.c b/keyboards/s65_x/keymaps/nall/keymap.c
index 9361d78ba7..a5daed006a 100644
--- a/keyboards/s65_x/keymaps/nall/keymap.c
+++ b/keyboards/s65_x/keymaps/nall/keymap.c
@@ -1,4 +1,4 @@
-#include "s65_x.h"
+#include QMK_KEYBOARD_H
#define _BL 0
#define _AL 1
@@ -21,7 +21,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 0: ANSI qwerty */
- [_BL] = LAYOUT_ansi(
+ [_BL] = LAYOUT_65_ansi(
KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
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_END, \
F(2), 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, \
@@ -43,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
*/
- [_AL] = LAYOUT_ansi(
+ [_AL] = LAYOUT_65_ansi(
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, KC_TRNS, KC_UP, 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_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
@@ -64,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
*/
- [_FL] = LAYOUT_ansi(
+ [_FL] = LAYOUT_65_ansi(
KC_GRAVE, 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_TRNS, \
KC_TRNS, F(1), KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
@@ -85,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
*/
- [_UL] = LAYOUT_ansi(
+ [_UL] = LAYOUT_65_ansi(
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, BL_TOGG, BL_STEP, 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_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
diff --git a/keyboards/s65_x/keymaps/s65plus/keymap.c b/keyboards/s65_x/keymaps/s65plus/keymap.c
deleted file mode 100644
index 1f3ffa3abd..0000000000
--- a/keyboards/s65_x/keymaps/s65plus/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _BL 0
-#define _FL 1
-
-// readability
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: ANSI qwerty */
- [_BL] = LAYOUT_plus_ansi( \
- KC_F1, KC_F2, 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_DEL, \
- KC_F3, KC_F4, 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_END, \
- KC_F5, KC_F6, 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, \
- KC_F7, KC_F8, 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, \
- KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
- ),
-
-
- [_FL] = LAYOUT_plus_ansi( \
- KC_F1, KC_F2, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_STEP, \
- KC_F3, KC_F4, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- KC_F5, KC_F6, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- KC_F7, KC_F8, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, KC_VOLU, _______, \
- KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT \
- ),
-
-};
diff --git a/keyboards/s65_x/keymaps/s65plus/readme.md b/keyboards/s65_x/keymaps/s65plus/readme.md
deleted file mode 100644
index f083fb8fd3..0000000000
--- a/keyboards/s65_x/keymaps/s65plus/readme.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# S65-Plus default keymap
-
-This is the default keymap for the Sentraq S65-Plus.
-
-[S65-Plus default keymap](http://www.keyboard-layout-editor.com/##@@_a:6&f:9&w:9&d:true;&=S65-Plus%20default%20keymap&_w:9&d:true;&=%0A%0ABase%20layer;&@_a:4&f:3;&=F1&=F2&=Esc&=!%0A1&=/@%0A2&=#%0A3&=$%0A4&=%25%0A5&=%5E%0A6&=/&%0A7&=*%0A8&=(%0A9&=)%0A0&=/_%0A-&=+%0A/=&_w:2;&=Backspace&=Delete;&@=F3&=F4&_w:1.5;&=Tab&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&=%7B%0A%5B&=%7D%0A%5D&_w:1.5;&=%7C%0A%5C&=PgUp;&@=F5&=F6&_w:1.75;&=Caps%20Lock&=A&=S&=D&=F&=G&=H&=J&=K&=L&=/:%0A/;&=%22%0A%27&_w:2.25;&=Enter&=PgDn;&@=F7&=F8&_w:2.25;&=Shift&=Z&=X&=C&=V&=B&=N&=M&=%3C%0A,&=%3E%0A.&=?%0A//&_w:1.75;&=Shift&=%E2%86%91&=End;&@=F9&=F10&_w:1.25;&=Ctrl&_w:1.25;&=Win&_w:1.25;&=Alt&_a:7&w:6.25;&=&_a:4;&=Alt&=Fn&=Ctrl&=%E2%86%90&=%E2%86%93&=%E2%86%92;&@_x:9&a:6&f:9&w:9&d:true;&=%0A%0AFunction%20layer;&@_a:7&f:3;&=&=&_a:4;&=Reset&_a:7;&=&=&=&=&=&=&=&=&=&=&=&=&_a:4&w:2;&=Backlight%20Toggle&=Back-light%20Step;&@_a:7;&=&=&_w:1.5;&=&=&=&=&=&=&=&=&=&=&=&=&=&_w:1.5;&=&=;&@=&=&_w:1.75;&=&=&=&=&=&=&=&=&=&=&=&=&_w:2.25;&=&=;&@=&=&_w:2.25;&=&_a:4;&=RGB%20Tog-gle&=RGB%20Mode&=RGB%20Hue%20Inc&=RGB%20Hue%20Dec&=RGB%20Sat%20Inc&=RGB%20Sat%20Dec&=RGB%20Value%20Inc&=RGB%20Value%20Dec&_a:7;&=&=&_w:1.75;&=&_a:4;&=Vol%20Up&_a:7;&=;&@=&=&_w:1.25;&=&_w:1.25;&=&_w:1.25;&=&_w:6.25;&=&=&=&=&_a:4;&=Prev.%20Track%20(Win)&=Vol%20Down&=Next%20Track%20(Win))
diff --git a/keyboards/s65_x/keymaps/smt/keymap.c b/keyboards/s65_x/keymaps/smt/keymap.c
index ce21859acd..8c3984c21f 100644
--- a/keyboards/s65_x/keymaps/smt/keymap.c
+++ b/keyboards/s65_x/keymaps/smt/keymap.c
@@ -1,4 +1,4 @@
-#include "s65_x.h"
+#include QMK_KEYBOARD_H
#define _QWERTY 0
#define _COLEMAK 1
@@ -12,10 +12,6 @@ enum planck_keycodes {
DVORAK
};
-// Helpful defines
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
// Custom macros
#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt)
@@ -37,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 0: ANSI qwerty */
- [_QWERTY] = LAYOUT_ansi(
+ [_QWERTY] = LAYOUT_65_ansi(
KC_GESC, 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_GRV, \
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, KC_DEL, \
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, KC_PGUP, \
@@ -59,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 1: ANSI colemak */
- [_COLEMAK] = LAYOUT_ansi(
+ [_COLEMAK] = LAYOUT_65_ansi(
KC_GESC, 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_GRV, \
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, KC_DEL, \
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, KC_PGUP, \
@@ -81,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 2: ANSI dvorak */
- [_DVORAK] = LAYOUT_ansi(
+ [_DVORAK] = LAYOUT_65_ansi(
KC_GESC, 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, KC_GRV, \
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, KC_DEL, \
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, KC_PGUP, \
@@ -103,7 +99,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 3: ANSI Fn layer */
- [_FL] = LAYOUT_ansi(
+ [_FL] = LAYOUT_65_ansi(
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_F13, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
_______, _______, MO(_CL), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -125,7 +121,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
/* 4: ANSI control layer */
- [_CL] = LAYOUT_ansi(
+ [_CL] = LAYOUT_65_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, \
_______, _______, _______, _______, RESET, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, RGB_VAI, \
_______, _______, MO(_CL), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, \
diff --git a/keyboards/s65_x/readme.md b/keyboards/s65_x/readme.md
index 5cb08c9c8f..d1dbdb10b6 100644
--- a/keyboards/s65_x/readme.md
+++ b/keyboards/s65_x/readme.md
@@ -5,10 +5,10 @@ DIY 65% keyboard from Sentraq.
Keyboard Maintainer: QMK Community
Hardware Supported: S65-X PCB
-Hardware Availability: https://sentraq.com/collections/group-buys/products/gb-s65-x-rgb-diy-kit?variant=39246723914
+Hardware Availability: [Sentraq](https://sentraq.com/products/s65-x-rgb-diy-keyboard-kit)
Make example for this keyboard (after setting up your build environment):
make s65_x:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/s65_x/rules.mk b/keyboards/s65_x/rules.mk
index 26a0a44b65..c97f7323e2 100644
--- a/keyboards/s65_x/rules.mk
+++ b/keyboards/s65_x/rules.mk
@@ -65,3 +65,5 @@ AUDIO_ENABLE = no # Audio output on port C6
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable RGB light
+
+LAYOUTS = 65_ansi 65_iso
diff --git a/keyboards/s65_x/s65_x.h b/keyboards/s65_x/s65_x.h
index f6ee9d5a66..aef9205754 100644
--- a/keyboards/s65_x/s65_x.h
+++ b/keyboards/s65_x/s65_x.h
@@ -1,69 +1,63 @@
-#ifndef S65X_H
-#define S65X_H
+#pragma once
#include "quantum.h"
-// There's an extra 2 x 5 column on the left. Not sure what that's all about
-// ANSI has more standard width shift, delete, and enter keys, doesn't use all of the 1U keys
-#define LAYOUT_ansi( \
+/* LAYOUT_65_ansi
+ * ANSI has more standard width shift, delete, and enter keys, doesn't use all of the 1U keys
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │000│001│002│003│004│005│006│007│008│009│010│011│012│014 │015│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │100 │102│103│104│105│106│107│108│109│110│111│112│113│114 │115│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │200 │202│203│204│205│206│207│208│209│210│211│212│214 │215│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │301 │302│303│304│305│306│307│308│309│310│311│313 │314│315│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │400 │401 │402 │408 │410│411│412│413│414│415│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+#define LAYOUT_65_ansi( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, \
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, K315, \
+ K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, K315, \
K400, K401, K402, K408, K410, K411, K412, K413, K414, K415 \
) { \
- { KC_NO, KC_NO, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
- { KC_NO, KC_NO, K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
- { KC_NO, KC_NO, K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214, K215 }, \
- { KC_NO, KC_NO, KC_NO, K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314, K315 }, \
- { KC_NO, KC_NO, K400, K401, K402, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414, K415 } \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214, K215 }, \
+ { KC_NO, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314, K315 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414, K415 } \
}
-#define LAYOUT_iso( \
+/* LAYOUT_65_iso
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │000│001│002│003│004│005│006│007│008│009│010│011│012│014 │015│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │100 │102│103│104│105│106│107│108│109│110│111│112│113│ │115│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐114 ├───┤
+ * │200 │202│203│204│205│206│207│208│209│210│211│212│213│ │215│
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │300 │301│302│303│304│305│306│307│308│309│310│311│313 │314│315│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │400 │401 │402 │408 │410│411│412│413│414│415│
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+#define LAYOUT_65_iso( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, \
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K114, K215, \
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, K315, \
K400, K401, K402, K408, K410, K411, K412, K413, K414, K415 \
) { \
- { KC_NO, KC_NO, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
- { KC_NO, KC_NO, K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K214, K115 }, \
- { KC_NO, KC_NO, K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215 }, \
- { KC_NO, KC_NO, K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314, K315 }, \
- { KC_NO, KC_NO, K400, K401, K402, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414, K415 } \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314, K315 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414, K415 } \
}
-#define LAYOUT_plus_ansi( \
- M000, M001, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, \
- M100, M101, K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
- M200, M201, K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, \
- M300, M301, K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, K315, \
- M400, M401, K400, K401, K402, K408, K410, K411, K412, K413, K414, K415 \
-) { \
- { M000, M001, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
- { M100, M101, K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
- { M200, M201, K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214, K215 }, \
- { M300, M301, KC_NO, K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314, K315 }, \
- { M400, M401, K400, K401, K402, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414, K415 } \
-}
-
-
-#define LAYOUT_plus_iso( \
- M000, M001, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, \
- M100, M101, K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
- M200, M201, K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \
- M300, M301, K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, K315, \
- M400, M401, K400, K401, K402, K408, K410, K411, K412, K413, K414, K415 \
-) { \
- { M000, M001, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
- { M100, M101, K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K214, K115 }, \
- { M200, M201, K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215 }, \
- { M300, M301, K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314, K315 }, \
- { M400, M401, K400, K401, K402, KC_NO, KC_NO, KC_NO, K408, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414, K415 } \
-}
void matrix_init_user(void);
void matrix_scan_user(void);
-
-#endif
diff --git a/keyboards/satan/keymaps/admiralStrokers/keymap.c b/keyboards/satan/keymaps/admiralStrokers/keymap.c
index a728f5a539..a3626dff87 100644
--- a/keyboards/satan/keymaps/admiralStrokers/keymap.c
+++ b/keyboards/satan/keymaps/admiralStrokers/keymap.c
@@ -187,10 +187,3 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
if (record->event.pressed) { } else { }; break;
} return MACRO_NONE;
};
-/*
- Later use:
- void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { }
- enum function_id { };
- const uint16_t PROGMEM fn_actions[] = { };
-
-*/
diff --git a/keyboards/satan/keymaps/admiralStrokers/rules.mk b/keyboards/satan/keymaps/admiralStrokers/rules.mk
index 22908296ce..7c3f5bd90b 100644
--- a/keyboards/satan/keymaps/admiralStrokers/rules.mk
+++ b/keyboards/satan/keymaps/admiralStrokers/rules.mk
@@ -19,6 +19,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no# Breathing sleep LED during USB suspend
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+
diff --git a/keyboards/satan/keymaps/ben_iso/rules.mk b/keyboards/satan/keymaps/ben_iso/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/satan/keymaps/ben_iso/rules.mk
+++ b/keyboards/satan/keymaps/ben_iso/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/bri/keymap.c b/keyboards/satan/keymaps/bri/keymap.c
index 96775488e5..7f38ba6f5f 100644
--- a/keyboards/satan/keymaps/bri/keymap.c
+++ b/keyboards/satan/keymaps/bri/keymap.c
@@ -66,38 +66,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______, _______, _______,_______,_______,_______),
};
-/*
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
-*/
diff --git a/keyboards/satan/keymaps/chaser/rules.mk b/keyboards/satan/keymaps/chaser/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/satan/keymaps/chaser/rules.mk
+++ b/keyboards/satan/keymaps/chaser/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/colemak/rules.mk b/keyboards/satan/keymaps/colemak/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/satan/keymaps/colemak/rules.mk
+++ b/keyboards/satan/keymaps/colemak/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/default/rules.mk b/keyboards/satan/keymaps/default/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/satan/keymaps/default/rules.mk
+++ b/keyboards/satan/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/dende_iso/rules.mk b/keyboards/satan/keymaps/dende_iso/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/satan/keymaps/dende_iso/rules.mk
+++ b/keyboards/satan/keymaps/dende_iso/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/denolfe/rules.mk b/keyboards/satan/keymaps/denolfe/rules.mk
index 04d2743065..5a8745b689 100644
--- a/keyboards/satan/keymaps/denolfe/rules.mk
+++ b/keyboards/satan/keymaps/denolfe/rules.mk
@@ -15,6 +15,3 @@ AUDIO_ENABLE = no
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/dkrieger/rules.mk b/keyboards/satan/keymaps/dkrieger/rules.mk
index f2434d30e5..d91b0edbf3 100644
--- a/keyboards/satan/keymaps/dkrieger/rules.mk
+++ b/keyboards/satan/keymaps/dkrieger/rules.mk
@@ -17,6 +17,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/fakb/rules.mk b/keyboards/satan/keymaps/fakb/rules.mk
index c2b5df6cdd..a0d2447994 100644
--- a/keyboards/satan/keymaps/fakb/rules.mk
+++ b/keyboards/satan/keymaps/fakb/rules.mk
@@ -11,6 +11,3 @@ AUDIO_ENABLE = no
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/isoHHKB/rules.mk b/keyboards/satan/keymaps/isoHHKB/rules.mk
index 80ce560588..08e77f9ebc 100644
--- a/keyboards/satan/keymaps/isoHHKB/rules.mk
+++ b/keyboards/satan/keymaps/isoHHKB/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/iso_split_rshift/rules.mk b/keyboards/satan/keymaps/iso_split_rshift/rules.mk
index d1e07da3fc..15cabfcd85 100644
--- a/keyboards/satan/keymaps/iso_split_rshift/rules.mk
+++ b/keyboards/satan/keymaps/iso_split_rshift/rules.mk
@@ -11,6 +11,3 @@ AUDIO_ENABLE = no
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/lepa/rules.mk b/keyboards/satan/keymaps/lepa/rules.mk
index 72ca006465..74a42b647c 100644
--- a/keyboards/satan/keymaps/lepa/rules.mk
+++ b/keyboards/satan/keymaps/lepa/rules.mk
@@ -17,6 +17,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/midi/rules.mk b/keyboards/satan/keymaps/midi/rules.mk
index d144314de7..87025ed6fe 100644
--- a/keyboards/satan/keymaps/midi/rules.mk
+++ b/keyboards/satan/keymaps/midi/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/sethbc/rules.mk b/keyboards/satan/keymaps/sethbc/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/satan/keymaps/sethbc/rules.mk
+++ b/keyboards/satan/keymaps/sethbc/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/smt/rules.mk b/keyboards/satan/keymaps/smt/rules.mk
index 806c2cb84b..3fe140adcc 100644
--- a/keyboards/satan/keymaps/smt/rules.mk
+++ b/keyboards/satan/keymaps/smt/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/keymaps/unxmaal/rules.mk b/keyboards/satan/keymaps/unxmaal/rules.mk
index 470d621b10..e724782513 100644
--- a/keyboards/satan/keymaps/unxmaal/rules.mk
+++ b/keyboards/satan/keymaps/unxmaal/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/satan/readme.md b/keyboards/satan/readme.md
index fddadcd478..a2552edf8d 100644
--- a/keyboards/satan/readme.md
+++ b/keyboards/satan/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make satan:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/scrabblepad/keymaps/default/keymap.c b/keyboards/scrabblepad/keymaps/default/keymap.c
index bfbab6e885..8d110dbd5b 100644
--- a/keyboards/scrabblepad/keymaps/default/keymap.c
+++ b/keyboards/scrabblepad/keymaps/default/keymap.c
@@ -35,10 +35,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/scrabblepad/readme.md b/keyboards/scrabblepad/readme.md
index e434eef950..0227b988fa 100644
--- a/keyboards/scrabblepad/readme.md
+++ b/keyboards/scrabblepad/readme.md
@@ -14,4 +14,4 @@ Make example for this keyboard (after setting up your build environment):
make scrabblepad:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/singa/readme.md b/keyboards/singa/readme.md
index 7a374db25c..bdde361a8e 100644
--- a/keyboards/singa/readme.md
+++ b/keyboards/singa/readme.md
@@ -46,4 +46,4 @@ macOS:
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/sixkeyboard/keymaps/default/keymap.c b/keyboards/sixkeyboard/keymaps/default/keymap.c
index 78b55478b6..393974b5d0 100644
--- a/keyboards/sixkeyboard/keymaps/default/keymap.c
+++ b/keyboards/sixkeyboard/keymaps/default/keymap.c
@@ -9,10 +9,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
return MACRO_NONE;
@@ -24,4 +20,4 @@ void matrix_scan_user(void) {
clear_keyboard();
bootloader_jump();
}
-}; \ No newline at end of file
+};
diff --git a/keyboards/sixkeyboard/readme.md b/keyboards/sixkeyboard/readme.md
index 512b9a6af2..6979e1d48c 100644
--- a/keyboards/sixkeyboard/readme.md
+++ b/keyboards/sixkeyboard/readme.md
@@ -9,7 +9,7 @@ Make example for this keyboard (after setting up your build environment):
make sixkeyboard:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Hardware Info
diff --git a/keyboards/sixshooter/readme.md b/keyboards/sixshooter/readme.md
index 18229bdbf6..1fcf26a510 100644
--- a/keyboards/sixshooter/readme.md
+++ b/keyboards/sixshooter/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make sixshooter:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/snagpad/config.h b/keyboards/snagpad/config.h
index a14ead67fb..03906f33f5 100644
--- a/keyboards/snagpad/config.h
+++ b/keyboards/snagpad/config.h
@@ -3,8 +3,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x4443 // "DC" = Don Chiou
+#define PRODUCT_ID 0x5350 // "SP" = Snagpad
#define DEVICE_VER 0x0001
#define MANUFACTURER Flehrad
#define PRODUCT Snagpad
@@ -54,3 +54,25 @@
#define RGBLIGHT_VAL_STEP 8
#endif
+// Does not use WT_MONO_BACKLIGHT
+// #define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*5*4*2)) = (35+160)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 195
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 829
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16 \ No newline at end of file
diff --git a/keyboards/snagpad/info.json b/keyboards/snagpad/info.json
index ffaa5c0a74..f6b19ee81e 100644
--- a/keyboards/snagpad/info.json
+++ b/keyboards/snagpad/info.json
@@ -6,11 +6,12 @@
"width": 4,
"height": 5,
"layouts": {
- "LAYOUT_ortho_5x4": {
+
+ "LAYOUT_ortho_5x4": {
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}]
- },
+ },
"LAYOUT_numpad_5x4": {
- "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":1, "h":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":0, "y":4, "w":2}, {"x":2, "y":4}, {"x":3, "y":3, "h":2}]
- }
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1, "h":2}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3, "h":2}, {"x":0, "y":4, "w":2}, {"x":2, "y":4}]
+ }
}
}
diff --git a/keyboards/snagpad/keymaps/via/keymap.c b/keyboards/snagpad/keymaps/via/keymap.c
new file mode 100644
index 0000000000..7fa226de77
--- /dev/null
+++ b/keyboards/snagpad/keymaps/via/keymap.c
@@ -0,0 +1,76 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ortho_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_P0, KC_P0, KC_PDOT, KC_PENT),
+
+ LAYOUT_ortho_5x4(
+ 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,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ LAYOUT_ortho_5x4(
+ 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,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ LAYOUT_ortho_5x4(
+ 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,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/snagpad/keymaps/via/rules.mk b/keyboards/snagpad/keymaps/via/rules.mk
new file mode 100644
index 0000000000..032d68c5e9
--- /dev/null
+++ b/keyboards/snagpad/keymaps/via/rules.mk
@@ -0,0 +1,76 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+# Boot Section Size in *bytes*
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+# This is the VIA magic
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+SRC += keyboards/wilba_tech/wt_main.c
+
+LAYOUTS = ortho_5x4 numpad_5x4
diff --git a/keyboards/speedo/keymaps/default/keymap.c b/keyboards/speedo/keymaps/default/keymap.c
index cd8c14e26b..7c9685d3d3 100644
--- a/keyboards/speedo/keymaps/default/keymap.c
+++ b/keyboards/speedo/keymaps/default/keymap.c
@@ -56,10 +56,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/speedo/readme.md b/keyboards/speedo/readme.md
index ee94623acd..882c16583d 100644
--- a/keyboards/speedo/readme.md
+++ b/keyboards/speedo/readme.md
@@ -10,7 +10,7 @@ Make example for this keyboard (after setting up your build environment):
make speedo:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Flashing the Firmware
See the QMK docs for handwiring a keyboard; there is a section with instructions on how to flash the *.hex* file to the Teensy 2.0 controller.
diff --git a/keyboards/staryu/readme.md b/keyboards/staryu/readme.md
index bca7482bc2..1b2f9e8f53 100644
--- a/keyboards/staryu/readme.md
+++ b/keyboards/staryu/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make staryu:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/sx60/readme.md b/keyboards/sx60/readme.md
index 4b7f9e74a4..e65363c5af 100644
--- a/keyboards/sx60/readme.md
+++ b/keyboards/sx60/readme.md
@@ -17,4 +17,4 @@ Or to make and flash:
make SX60:default:dfu
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/tada68/keymaps/ardakilic/rules.mk b/keyboards/tada68/keymaps/ardakilic/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/tada68/keymaps/ardakilic/rules.mk
+++ b/keyboards/tada68/keymaps/ardakilic/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/default/rules.mk b/keyboards/tada68/keymaps/default/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/tada68/keymaps/default/rules.mk
+++ b/keyboards/tada68/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/fakb/rules.mk b/keyboards/tada68/keymaps/fakb/rules.mk
index 642e16de59..47fd29663b 100644
--- a/keyboards/tada68/keymaps/fakb/rules.mk
+++ b/keyboards/tada68/keymaps/fakb/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/fezzant/rules.mk b/keyboards/tada68/keymaps/fezzant/rules.mk
index 8df84ae954..7b32f0a664 100644
--- a/keyboards/tada68/keymaps/fezzant/rules.mk
+++ b/keyboards/tada68/keymaps/fezzant/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/iso-nor/rules.mk b/keyboards/tada68/keymaps/iso-nor/rules.mk
index baaca071cf..53644093d6 100644
--- a/keyboards/tada68/keymaps/iso-nor/rules.mk
+++ b/keyboards/tada68/keymaps/iso-nor/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tada68/keymaps/iso-uk/rules.mk b/keyboards/tada68/keymaps/iso-uk/rules.mk
index baaca071cf..53644093d6 100644
--- a/keyboards/tada68/keymaps/iso-uk/rules.mk
+++ b/keyboards/tada68/keymaps/iso-uk/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tada68/keymaps/isoish/rules.mk b/keyboards/tada68/keymaps/isoish/rules.mk
index baaca071cf..53644093d6 100644
--- a/keyboards/tada68/keymaps/isoish/rules.mk
+++ b/keyboards/tada68/keymaps/isoish/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tada68/keymaps/mattdicarlo/rules.mk b/keyboards/tada68/keymaps/mattdicarlo/rules.mk
index ac92f99f48..739b739971 100644
--- a/keyboards/tada68/keymaps/mattdicarlo/rules.mk
+++ b/keyboards/tada68/keymaps/mattdicarlo/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/mlechner/rules.mk b/keyboards/tada68/keymaps/mlechner/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/tada68/keymaps/mlechner/rules.mk
+++ b/keyboards/tada68/keymaps/mlechner/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/mtdjr/rules.mk b/keyboards/tada68/keymaps/mtdjr/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/tada68/keymaps/mtdjr/rules.mk
+++ b/keyboards/tada68/keymaps/mtdjr/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/pascamel/rules.mk b/keyboards/tada68/keymaps/pascamel/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/tada68/keymaps/pascamel/rules.mk
+++ b/keyboards/tada68/keymaps/pascamel/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/raylas/rules.mk b/keyboards/tada68/keymaps/raylas/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/tada68/keymaps/raylas/rules.mk
+++ b/keyboards/tada68/keymaps/raylas/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/rgb/rules.mk b/keyboards/tada68/keymaps/rgb/rules.mk
index 470d621b10..e724782513 100644
--- a/keyboards/tada68/keymaps/rgb/rules.mk
+++ b/keyboards/tada68/keymaps/rgb/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/rys/keymap.c b/keyboards/tada68/keymaps/rys/keymap.c
index 6f32b092d4..a729e4be89 100644
--- a/keyboards/tada68/keymaps/rys/keymap.c
+++ b/keyboards/tada68/keymaps/rys/keymap.c
@@ -5,6 +5,21 @@
#define _______ KC_TRNS
+enum rys_keycodes {
+ PSTOKEN = SAFE_RANGE,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case PSTOKEN:
+ if (record->event.pressed) {
+ SEND_STRING(RYS_PSTOKEN);
+ }
+ break;
+ }
+ return true;
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* ,----------------------------------------------------------------.
@@ -16,35 +31,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |----------------------------------------------------------------|
* |Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|PgDn|
* |----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * |Ctrl|Alt |LGUI| Space |Alt| FN|Ctrl|Lef|Dow|Rig |
* `----------------------------------------------------------------'
*/
[_BL] = LAYOUT_iso(
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_GRV, \
- 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_NUHS, KC_DEL, \
- 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, \
+ 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_DEL, \
+ 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, KC_PGUP, \
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_PGDN, \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/* Keymap _FL1: Function Layer 1
* ,----------------------------------------------------------------.
- * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Delete| Ins|
+ * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| | :D |
* |----------------------------------------------------------------|
- * | | | ↑ | | | | | | | | | | | |Home|
+ * | |LMB| Up|RMB| | | | | | | | | | | |
* |------------------------------------------------------- -----|
- * | | ← | ↓ | → | | | | | | | | | | | End|
+ * | |Lef|Dow|Rig| | | | | | | | | | |Home|
* |----------------------------------------------------------------|
- * | | | | | L+|LED| L-| | V+| V-|Mut| | MsBtn|Up|MsBn|
+ * | | | | | L+|LED| L-| | V+| V-|Mut| | MsBtn|↑ | End|
* |----------------------------------------------------------------|
- * | | | | | | | | Lt| Dn| Rt |
+ * | | | | Reset | | | | ← | ↓ | → |
* `----------------------------------------------------------------'
*/
[_FL] = LAYOUT_iso(
- _______, 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, PSTOKEN, \
_______, KC_BTN1, KC_UP, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______, KC_MS_U, KC_END, \
- _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
+ _______, _______, _______, RESET, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
),
};
diff --git a/keyboards/tada68/keymaps/rys/readme.md b/keyboards/tada68/keymaps/rys/readme.md
index a9425bf067..bf6a643d33 100644
--- a/keyboards/tada68/keymaps/rys/readme.md
+++ b/keyboards/tada68/keymaps/rys/readme.md
@@ -11,5 +11,5 @@ Please see the [Tada68 readme](../../readme.md). Make the firmware wih the
following command:
```
-make tada68:rys:bin
+make tada68:rys:flashbin
```
diff --git a/keyboards/tada68/keymaps/rys/rules.mk b/keyboards/tada68/keymaps/rys/rules.mk
index b2789a78a7..db6efeb8f1 100644
--- a/keyboards/tada68/keymaps/rys/rules.mk
+++ b/keyboards/tada68/keymaps/rys/rules.mk
@@ -15,3 +15,6 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+RYS_PSTOKEN = $(shell security find-generic-password -a qmk -s tada68 -w)
+CFLAGS += -DRYS_PSTOKEN=\"$(RYS_PSTOKEN)\"
diff --git a/keyboards/tada68/keymaps/stephengrier/rules.mk b/keyboards/tada68/keymaps/stephengrier/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/tada68/keymaps/stephengrier/rules.mk
+++ b/keyboards/tada68/keymaps/stephengrier/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/trashcat/rules.mk b/keyboards/tada68/keymaps/trashcat/rules.mk
index 6fb4969193..488111732c 100644
--- a/keyboards/tada68/keymaps/trashcat/rules.mk
+++ b/keyboards/tada68/keymaps/trashcat/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # Tappa Dance Bitch
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/tshack/rules.mk b/keyboards/tada68/keymaps/tshack/rules.mk
index 86d22dd3fd..1a3bda4603 100644
--- a/keyboards/tada68/keymaps/tshack/rules.mk
+++ b/keyboards/tada68/keymaps/tshack/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/unix/rules.mk b/keyboards/tada68/keymaps/unix/rules.mk
index aade51459b..316106c034 100644
--- a/keyboards/tada68/keymaps/unix/rules.mk
+++ b/keyboards/tada68/keymaps/unix/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tada68/keymaps/wamsm_tada/rules.mk b/keyboards/tada68/keymaps/wamsm_tada/rules.mk
index bb535beb34..53644093d6 100644
--- a/keyboards/tada68/keymaps/wamsm_tada/rules.mk
+++ b/keyboards/tada68/keymaps/wamsm_tada/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tanuki/readme.md b/keyboards/tanuki/readme.md
index 331df5b2ea..129e2a9511 100644
--- a/keyboards/tanuki/readme.md
+++ b/keyboards/tanuki/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make tanuki:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/tanuki/rules.mk b/keyboards/tanuki/rules.mk
index cc3734152f..fd3c058304 100644
--- a/keyboards/tanuki/rules.mk
+++ b/keyboards/tanuki/rules.mk
@@ -65,6 +65,3 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
TAP_DANCE_ENABLE = no
-ifndef QUANTUM_DIR
- include ../../Makefile
-endif
diff --git a/keyboards/telophase/readme.md b/keyboards/telophase/readme.md
index 86b29d01d6..97bce57bb8 100644
--- a/keyboards/telophase/readme.md
+++ b/keyboards/telophase/readme.md
@@ -9,7 +9,7 @@ Make example for this keyboard (after setting up your build environment):
make telophase:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
## Mitosis Notes
diff --git a/keyboards/tetris/readme.md b/keyboards/tetris/readme.md
index b74740854a..b2741caf1c 100644
--- a/keyboards/tetris/readme.md
+++ b/keyboards/tetris/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make tetris:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/the_ruler/keymaps/default/rules.mk b/keyboards/the_ruler/keymaps/default/rules.mk
index b491f5b3f3..2791cc1054 100644
--- a/keyboards/the_ruler/keymaps/default/rules.mk
+++ b/keyboards/the_ruler/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/the_ruler/readme.md b/keyboards/the_ruler/readme.md
index 3573514b68..63a6ffeee3 100644
--- a/keyboards/the_ruler/readme.md
+++ b/keyboards/the_ruler/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make the_ruler:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/0010/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/0010/keymap.c
index 617812149c..2744c91000 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/0010/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/0010/keymap.c
@@ -67,7 +67,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
______, ______, ______, ______, RESET, ______, ______, ______, ______, ______, KC_PGDN \
),
};
-
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk
index 159fd7dc6c..9da4bf91a5 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk
@@ -32,6 +32,3 @@
# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c
index 275bfe32a1..8a35f896f0 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c
@@ -62,10 +62,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void matrix_init_user(void) {
}
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk
index 159fd7dc6c..9da4bf91a5 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk
@@ -32,6 +32,3 @@
# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/default/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/default/keymap.c
index dcef38bca1..156e164a25 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/default/keymap.c
@@ -20,6 +20,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk
index 159fd7dc6c..9da4bf91a5 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk
@@ -32,6 +32,3 @@
# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/hhkbanana/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/hhkbanana/keymap.c
index f2f829f93e..e2c062dc56 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/hhkbanana/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/hhkbanana/keymap.c
@@ -20,6 +20,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c
index 89e275daf7..828c82673e 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c
@@ -87,6 +87,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_MNXT
)
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c
index 859944991b..107a6eed52 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c
@@ -86,9 +86,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
/*
Capslock's led cannot be controlled separately on bananasplit and you can only turn on/off all
leds at once. If you only install led for capslock, it will look like capslock has toggable
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/kamon/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/keymap.c
index 34306e1830..c0bc1b2686 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/kamon/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/keymap.c
@@ -60,10 +60,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {
case 0:
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk
index 159fd7dc6c..9da4bf91a5 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk
@@ -32,6 +32,3 @@
# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/nic/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/nic/keymap.c
index 5ed1c65e99..39cfc0d8fe 100644
--- a/keyboards/thevankeyboards/bananasplit/keymaps/nic/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/nic/keymap.c
@@ -40,6 +40,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c
index 19051574a5..cc4f239792 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c
+++ b/keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c
@@ -73,8 +73,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {};
-
// Tap dance functions
void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data) {
switch (state->count) {
diff --git a/keyboards/thevankeyboards/minivan/keymaps/belak/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/belak/rules.mk
index 6112411240..f9d8b0eb09 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/belak/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/belak/rules.mk
@@ -7,6 +7,3 @@ MOUSEKEY_ENABLE = no # Mouse keys(+4700)
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
TAP_DANCE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/thevankeyboards/minivan/keymaps/core/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/core/keymap.c
index cf1e0d3f51..6a069713fa 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/core/keymap.c
+++ b/keyboards/thevankeyboards/minivan/keymaps/core/keymap.c
@@ -27,6 +27,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______
),
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/thevankeyboards/minivan/keymaps/core/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/core/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/core/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/core/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
index 90b188b55f..13ef62406b 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
@@ -67,10 +67,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk
index 3ff1477251..7a331cd530 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk
index 3ff1477251..7a331cd530 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c
index 02ba684216..4c045ac0a5 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c
+++ b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c
@@ -34,6 +34,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPACE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk
index b2c421c4dc..8e22f3051d 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk
index 3ff1477251..7a331cd530 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk
index 1e006e9472..f5556c8fcb 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk
index 3ff1477251..7a331cd530 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
index 4ec0f6cfdc..ecd25be48f 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
@@ -26,10 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk
index 3ff1477251..7a331cd530 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk
+++ b/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/flipphone/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/keymap.c
index fed9d02706..d541b1a579 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/flipphone/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/keymap.c
@@ -77,10 +77,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistant_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk
index 3ff1477251..7a331cd530 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk
+++ b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk
index ba4b4fec0c..676e9a6e0a 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk
+++ b/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk
@@ -17,6 +17,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no # Enable Tap Dance functionality
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/mjt/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/mjt/keymap.c
index a1af5b1f28..e7f6485e23 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/mjt/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/mjt/keymap.c
@@ -76,10 +76,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
#ifdef AUDIO_ENABLE
float tone_startup[][2] = SONG(STARTUP_SOUND);
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk
index 3ff1477251..7a331cd530 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk
+++ b/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/singles/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/singles/keymap.c
index 4c246f5136..fd5d99503d 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/singles/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singles/keymap.c
@@ -34,10 +34,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk
index 3ff1477251..7a331cd530 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/keymap.c
index b4da80e284..853bb783a5 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/keymap.c
@@ -206,10 +206,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk
index 030d27f2a6..38fa7790bd 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk
@@ -17,6 +17,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # Enable Tap Dance functionality
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tkc1800/README.md b/keyboards/tkc1800/README.md
index 7a0528ce35..e154770d72 100644
--- a/keyboards/tkc1800/README.md
+++ b/keyboards/tkc1800/README.md
@@ -1,18 +1,17 @@
The Key Company TKC1800
-===
-![TKC1800](https://imgur.com/a/Xlttp)
+[TKC1800 Image Gallery](https://imgur.com/a/Xlttp)
The Key Company TKC1800 is a Cherry 1800 form factor replacement PCB utilizing the AT90USB1286 microcontroller.
Keyboard Maintainer: [Terry Mathews](https://github.com/TerryMathews/)
-Hardware Supported: AT90USB1286
-Hardware Availability: Via GB
+Hardware Supported: TKC1800 PCB
+Hardware Availability: [TheKey.Company](https://thekey.company/collections/tkc-1800)
Make example for this keyboard (after setting up your build environment):
- make tkc1800
+ make tkc1800:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/tkc1800/config.h b/keyboards/tkc1800/config.h
index b13620de3b..92a5f1b38b 100644
--- a/keyboards/tkc1800/config.h
+++ b/keyboards/tkc1800/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -182,5 +181,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
-
-#endif
diff --git a/keyboards/tkc1800/info.json b/keyboards/tkc1800/info.json
index f06a16c157..3e3ab1484d 100644
--- a/keyboards/tkc1800/info.json
+++ b/keyboards/tkc1800/info.json
@@ -3,550 +3,118 @@
"url": "",
"maintainer": "qmk",
"width": 19.5,
- "height": 7,
+ "height": 7.25,
"layouts": {
"LAYOUT": {
"key_count": 107,
"layout": [
- {
- "label": "Esc",
- "x": 0,
- "y": 0
- },
- {
- "label": "F1",
- "x": 1.25,
- "y": 0
- },
- {
- "label": "F2",
- "x": 2.25,
- "y": 0
- },
- {
- "label": "F3",
- "x": 3.25,
- "y": 0
- },
- {
- "label": "F4",
- "x": 4.25,
- "y": 0
- },
- {
- "label": "F5",
- "x": 5.5,
- "y": 0
- },
- {
- "label": "F6",
- "x": 6.5,
- "y": 0
- },
- {
- "label": "F7",
- "x": 7.5,
- "y": 0
- },
- {
- "label": "F8",
- "x": 8.5,
- "y": 0
- },
- {
- "label": "F9",
- "x": 9.75,
- "y": 0
- },
- {
- "label": "F10",
- "x": 10.75,
- "y": 0
- },
- {
- "label": "F11",
- "x": 11.75,
- "y": 0
- },
- {
- "label": "F12",
- "x": 12.75,
- "y": 0
- },
- {
- "label": "Insert",
- "x": 15.5,
- "y": 0
- },
- {
- "label": "Home",
- "x": 16.5,
- "y": 0
- },
- {
- "label": "Pg Up",
- "x": 17.5,
- "y": 0
- },
- {
- "label": "Prt Sc",
- "x": 18.5,
- "y": 0
- },
- {
- "label": "Delete",
- "x": 15.5,
- "y": 1
- },
- {
- "label": "End",
- "x": 16.5,
- "y": 1
- },
- {
- "label": "Pg Dn",
- "x": 17.5,
- "y": 1
- },
- {
- "label": "Scroll Lock",
- "x": 18.5,
- "y": 1
- },
- {
- "label": "~",
- "x": 0,
- "y": 2
- },
- {
- "label": "!",
- "x": 1,
- "y": 2
- },
- {
- "label": "@",
- "x": 2,
- "y": 2
- },
- {
- "label": "#",
- "x": 3,
- "y": 2
- },
- {
- "label": "$",
- "x": 4,
- "y": 2
- },
- {
- "label": "%",
- "x": 5,
- "y": 2
- },
- {
- "label": "^",
- "x": 6,
- "y": 2
- },
- {
- "label": "&",
- "x": 7,
- "y": 2
- },
- {
- "label": "*",
- "x": 8,
- "y": 2
- },
- {
- "label": "(",
- "x": 9,
- "y": 2
- },
- {
- "label": ")",
- "x": 10,
- "y": 2
- },
- {
- "label": "_",
- "x": 11,
- "y": 2
- },
- {
- "label": "+",
- "x": 12,
- "y": 2
- },
- {
- "label": "Backspace",
- "x": 13,
- "y": 2
- },
- {
- "x": 14,
- "y": 2
- },
- {
- "label": "Num Lock",
- "x": 15.5,
- "y": 2
- },
- {
- "label": "/",
- "x": 16.5,
- "y": 2
- },
- {
- "label": "*",
- "x": 17.5,
- "y": 2
- },
- {
- "label": "-",
- "x": 18.5,
- "y": 2
- },
- {
- "label": "Tab",
- "x": 0,
- "y": 3,
- "w": 1.5
- },
- {
- "label": "Q",
- "x": 1.5,
- "y": 3
- },
- {
- "label": "W",
- "x": 2.5,
- "y": 3
- },
- {
- "label": "E",
- "x": 3.5,
- "y": 3
- },
- {
- "label": "R",
- "x": 4.5,
- "y": 3
- },
- {
- "label": "T",
- "x": 5.5,
- "y": 3
- },
- {
- "label": "Y",
- "x": 6.5,
- "y": 3
- },
- {
- "label": "U",
- "x": 7.5,
- "y": 3
- },
- {
- "label": "I",
- "x": 8.5,
- "y": 3
- },
- {
- "label": "O",
- "x": 9.5,
- "y": 3
- },
- {
- "label": "P",
- "x": 10.5,
- "y": 3
- },
- {
- "label": "{",
- "x": 11.5,
- "y": 3
- },
- {
- "label": "}",
- "x": 12.5,
- "y": 3
- },
- {
- "label": "|",
- "x": 13.5,
- "y": 3,
- "w": 1.5
- },
- {
- "label": "7",
- "x": 15.5,
- "y": 3
- },
- {
- "label": "8",
- "x": 16.5,
- "y": 3
- },
- {
- "label": "9",
- "x": 17.5,
- "y": 3
- },
- {
- "label": "+",
- "x": 18.5,
- "y": 3
- },
- {
- "label": "Caps Lock",
- "x": 0,
- "y": 4,
- "w": 1.75
- },
- {
- "label": "A",
- "x": 1.75,
- "y": 4
- },
- {
- "label": "S",
- "x": 2.75,
- "y": 4
- },
- {
- "label": "D",
- "x": 3.75,
- "y": 4
- },
- {
- "label": "F",
- "x": 4.75,
- "y": 4
- },
- {
- "label": "G",
- "x": 5.75,
- "y": 4
- },
- {
- "label": "H",
- "x": 6.75,
- "y": 4
- },
- {
- "label": "J",
- "x": 7.75,
- "y": 4
- },
- {
- "label": "K",
- "x": 8.75,
- "y": 4
- },
- {
- "label": "L",
- "x": 9.75,
- "y": 4
- },
- {
- "label": ":",
- "x": 10.75,
- "y": 4
- },
- {
- "label": "\"",
- "x": 11.75,
- "y": 4
- },
- {
- "x": 12.75,
- "y": 4
- },
- {
- "label": "Enter",
- "x": 13.75,
- "y": 4,
- "w": 1.25
- },
- {
- "label": "4",
- "x": 15.5,
- "y": 4
- },
- {
- "label": "5",
- "x": 16.5,
- "y": 4
- },
- {
- "label": "6",
- "x": 17.5,
- "y": 4
- },
- {
- "x": 18.5,
- "y": 4
- },
- {
- "x": 0,
- "y": 5
- },
- {
- "label": "Shift",
- "x": 1,
- "y": 5,
- "w": 1.25
- },
- {
- "label": "Z",
- "x": 2.25,
- "y": 5
- },
- {
- "label": "X",
- "x": 3.25,
- "y": 5
- },
- {
- "label": "C",
- "x": 4.25,
- "y": 5
- },
- {
- "label": "V",
- "x": 5.25,
- "y": 5
- },
- {
- "label": "B",
- "x": 6.25,
- "y": 5
- },
- {
- "label": "N",
- "x": 7.25,
- "y": 5
- },
- {
- "label": "M",
- "x": 8.25,
- "y": 5
- },
- {
- "label": "<",
- "x": 9.25,
- "y": 5
- },
- {
- "label": ">",
- "x": 10.25,
- "y": 5
- },
- {
- "label": "?",
- "x": 11.25,
- "y": 5
- },
- {
- "label": "Shift",
- "x": 12.25,
- "y": 5,
- "w": 1.75
- },
- {
- "label": "\\u2191",
- "x": 14.25,
- "y": 5
- },
- {
- "label": "1",
- "x": 15.5,
- "y": 5
- },
- {
- "label": "2",
- "x": 16.5,
- "y": 5
- },
- {
- "label": "3",
- "x": 17.5,
- "y": 5
- },
- {
- "label": "Enter",
- "x": 18.5,
- "y": 5
- },
- {
- "label": "Ctrl",
- "x": 0,
- "y": 6,
- "w": 1.25
- },
- {
- "label": "Win",
- "x": 1.25,
- "y": 6,
- "w": 1.25
- },
- {
- "label": "Alt",
- "x": 2.5,
- "y": 6,
- "w": 1.25
- },
- {
- "x": 3.75,
- "y": 6,
- "w": 6.25
- },
- {
- "label": "Alt",
- "x": 10,
- "y": 6
- },
- {
- "label": "Win",
- "x": 11,
- "y": 6
- },
- {
- "label": "Fn",
- "x": 12,
- "y": 6
- },
- {
- "label": "\\u2190",
- "x": 13.25,
- "y": 6
- },
- {
- "label": "\\u2193",
- "x": 14.25,
- "y": 6
- },
- {
- "label": "\\u2192",
- "x": 15.25,
- "y": 6
- },
- {
- "label": "0",
- "x": 16.5,
- "y": 6
- },
- {
- "label": ".",
- "x": 17.5,
- "y": 6
- },
- {
- "x": 18.5,
- "y": 6
- }
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 1.25, "y": 0 },
+ { "label": "F2", "x": 2.25, "y": 0 },
+ { "label": "F3", "x": 3.25, "y": 0 },
+ { "label": "F4", "x": 4.25, "y": 0 },
+ { "label": "F5", "x": 5.5, "y": 0 },
+ { "label": "F6", "x": 6.5, "y": 0 },
+ { "label": "F7", "x": 7.5, "y": 0 },
+ { "label": "F8", "x": 8.5, "y": 0 },
+ { "label": "F9", "x": 9.75, "y": 0 },
+ { "label": "F10", "x": 10.75, "y": 0 },
+ { "label": "F11", "x": 11.75, "y": 0 },
+ { "label": "F12", "x": 12.75, "y": 0 },
+ { "label": "Insert", "x": 15.5, "y": 0 },
+ { "label": "Home", "x": 16.5, "y": 0 },
+ { "label": "Page Up", "x": 17.5, "y": 0 },
+ { "label": "Print Screen", "x": 18.5, "y": 0 },
+ { "label": "Delete", "x": 15.5, "y": 1 },
+ { "label": "End", "x": 16.5, "y": 1 },
+ { "label": "Page Down", "x": 17.5, "y": 1 },
+ { "label": "Scroll Lock", "x": 18.5, "y": 1 },
+ { "label": "`", "x": 0, "y": 2 },
+ { "label": "1", "x": 1, "y": 2 },
+ { "label": "2", "x": 2, "y": 2 },
+ { "label": "3", "x": 3, "y": 2 },
+ { "label": "4", "x": 4, "y": 2 },
+ { "label": "5", "x": 5, "y": 2 },
+ { "label": "6", "x": 6, "y": 2 },
+ { "label": "7", "x": 7, "y": 2 },
+ { "label": "8", "x": 8, "y": 2 },
+ { "label": "9", "x": 9, "y": 2 },
+ { "label": "0", "x": 10, "y": 2 },
+ { "label": "-", "x": 11, "y": 2 },
+ { "label": "=", "x": 12, "y": 2 },
+ { "label": "Backspace", "x": 13, "y": 2 },
+ { "label": "Backspace_Right", "x": 14, "y": 2 },
+ { "label": "Num Lock", "x": 15.5, "y": 2 },
+ { "label": "/", "x": 16.5, "y": 2 },
+ { "label": "*", "x": 17.5, "y": 2 },
+ { "label": "Pause", "x": 18.5, "y": 2 },
+ { "label": "Tab", "x": 0, "y": 3, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 3 },
+ { "label": "W", "x": 2.5, "y": 3 },
+ { "label": "E", "x": 3.5, "y": 3 },
+ { "label": "R", "x": 4.5, "y": 3 },
+ { "label": "T", "x": 5.5, "y": 3 },
+ { "label": "Y", "x": 6.5, "y": 3 },
+ { "label": "U", "x": 7.5, "y": 3 },
+ { "label": "I", "x": 8.5, "y": 3 },
+ { "label": "O", "x": 9.5, "y": 3 },
+ { "label": "P", "x": 10.5, "y": 3 },
+ { "label": "[", "x": 11.5, "y": 3 },
+ { "label": "]", "x": 12.5, "y": 3 },
+ { "label": "\\", "x": 13.5, "y": 3, "w": 1.5 },
+ { "label": "7", "x": 15.5, "y": 3 },
+ { "label": "8", "x": 16.5, "y": 3 },
+ { "label": "9", "x": 17.5, "y": 3 },
+ { "label": "-", "x": 18.5, "y": 3 },
+ { "label": "Caps Lock", "x": 0, "y": 4, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 4 },
+ { "label": "S", "x": 2.75, "y": 4 },
+ { "label": "D", "x": 3.75, "y": 4 },
+ { "label": "F", "x": 4.75, "y": 4 },
+ { "label": "G", "x": 5.75, "y": 4 },
+ { "label": "H", "x": 6.75, "y": 4 },
+ { "label": "J", "x": 7.75, "y": 4 },
+ { "label": "K", "x": 8.75, "y": 4 },
+ { "label": "L", "x": 9.75, "y": 4 },
+ { "label": ";", "x": 10.75, "y": 4 },
+ { "label": "'", "x": 11.75, "y": 4 },
+ { "label": "ISO Hash", "x": 12.75, "y": 4 },
+ { "label": "Enter", "x": 13.75, "y": 4, "w": 1.25 },
+ { "label": "4", "x": 15.5, "y": 4 },
+ { "label": "5", "x": 16.5, "y": 4 },
+ { "label": "6", "x": 17.5, "y": 4 },
+ { "label": "+", "x": 18.5, "y": 4 },
+ { "label": "Shift", "x": 0, "y": 5, "w": 1.25 },
+ { "label": "ISO Backslash", "x": 1.25, "y": 5 },
+ { "label": "Z", "x": 2.25, "y": 5 },
+ { "label": "X", "x": 3.25, "y": 5 },
+ { "label": "C", "x": 4.25, "y": 5 },
+ { "label": "V", "x": 5.25, "y": 5 },
+ { "label": "B", "x": 6.25, "y": 5 },
+ { "label": "N", "x": 7.25, "y": 5 },
+ { "label": "M", "x": 8.25, "y": 5 },
+ { "label": ",", "x": 9.25, "y": 5 },
+ { "label": ".", "x": 10.25, "y": 5 },
+ { "label": "/", "x": 11.25, "y": 5 },
+ { "label": "Shift", "x": 12.25, "y": 5, "w": 1.75 },
+ { "label": "Up", "x": 14.25, "y": 5.25 },
+ { "label": "1", "x": 15.5, "y": 5 },
+ { "label": "2", "x": 16.5, "y": 5 },
+ { "label": "3", "x": 17.5, "y": 5 },
+ { "label": "Enter_Top", "x": 18.5, "y": 5 },
+ { "label": "Ctrl", "x": 0, "y": 6, "w": 1.25 },
+ { "label": "GUI", "x": 1.25, "y": 6, "w": 1.25 },
+ { "label": "Alt", "x": 2.5, "y": 6, "w": 1.25 },
+ { "label": "Space", "x": 3.75, "y": 6, "w": 6.25 },
+ { "label": "Alt", "x": 10, "y": 6 },
+ { "label": "Fn", "x": 11, "y": 6 },
+ { "label": "Ctrl", "x": 12, "y": 6 },
+ { "label": "Left", "x": 13.25, "y": 6.25 },
+ { "label": "Down", "x": 14.25, "y": 6.25 },
+ { "label": "Right", "x": 15.25, "y": 6.25 },
+ { "label": "0", "x": 16.5, "y": 6 },
+ { "label": ".", "x": 17.5, "y": 6 },
+ { "label": "Enter", "x": 18.5, "y": 6 }
]
}
}
diff --git a/keyboards/tkc1800/keymaps/default/config.h b/keyboards/tkc1800/keymaps/default/config.h
index 30973348ae..ee142927f3 100644
--- a/keyboards/tkc1800/keymaps/default/config.h
+++ b/keyboards/tkc1800/keymaps/default/config.h
@@ -14,10 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
#define USE_I2C
#define SSD1306OLED
@@ -25,5 +22,3 @@
#define SSD1306_ADDRESS 0x3C
// place overrides here
-
-#endif
diff --git a/keyboards/tkc1800/keymaps/default/keymap.c b/keyboards/tkc1800/keymaps/default/keymap.c
index cc19de3bda..5455934a30 100644
--- a/keyboards/tkc1800/keymaps/default/keymap.c
+++ b/keyboards/tkc1800/keymaps/default/keymap.c
@@ -13,25 +13,17 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "tkc1800.h"
+#include QMK_KEYBOARD_H
#include "LUFA/Drivers/Peripheral/TWI.h"
#include "i2c.h"
#include "ssd1306.h"
-#define MODS_SHFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-
-
-// Helpful defines
-#define ______ KC_TRNS
-#define XXXXXX KC_NO
-
//Layers
enum {
- BASE = 0,
- FUNCTION,
+ BASE = 0,
+ FUNCTION,
};
bool screenWorks = 0;
@@ -56,61 +48,77 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------' |-------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up | 1 | 2 | 3 | Ent|
* |--------------------------------------------------------'----`--------------| |
- * |Ctrl|Gui |Alt | Space |Alt |Gui|Ctr|Left |Down|Rght| 0 | . | |
+ * |Ctrl|Gui |Alt | Space |Alt |Fn |Ctr|Left |Down|Rght| 0 | . | |
* `---------------------------------------------------------------------------------'
*/
- [BASE] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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, XXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_P7, KC_P8, KC_P9, KC_PMNS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, 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, XXXXXX, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
- [FUNCTION] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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, RESET, XXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_P7, KC_P8, KC_P9, KC_PMNS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, BL_STEP,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXX, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, ______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
+ [BASE] = LAYOUT(
+ 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
+ KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
+ 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, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
+ 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_P7, KC_P8, KC_P9, KC_PMNS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, XXXXXXX, 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, XXXXXXX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ ),
+ /* Keymap FUNCTION: (Function Layer)
+ * ,-------------------------------------------------------. ,-------------------.
+ * | | | | | | | | | | | | | | | | | | | | |
+ * `-------------------------------------------------------' |-------------------|
+ * | | | | |
+ * ,-----------------------------------------------------------. |-------------------|
+ * | | | | | | | | | | | | | | RESET | | | | | |
+ * |-----------------------------------------------------------| |-------------------|
+ * | | | | | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------| |-------------------|
+ * | | | | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------' |-------------------|
+ * | |Tog|Mod|Hu+|Hu-|Sa+|Sa-|Va+|Va-|Stp| | | | | | | |
+ * |--------------------------------------------------------'----`--------------| |
+ * | | | | | | | | | | | | . | |
+ * `---------------------------------------------------------------------------------'
+ */
+ [FUNCTION] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, XXXXXXX, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, \
+ _______, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_STEP, _______, _______, _______, _______, _______, _______, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
+ return true;
}
void led_set_user(uint8_t usb_led) {
}
+
void matrix_init_user(void) {
#ifdef USE_I2C
i2c_master_init();
- #ifdef SSD1306OLED
- // calls code for the SSD1306 OLED
- _delay_ms(400);
- TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- if(iota_gfx_init()){ // turns on the display
- screenWorks = 1;
- }
+ #ifdef SSD1306OLED
+ // calls code for the SSD1306 OLED
+ _delay_ms(400);
+ TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
+ if ( iota_gfx_init() ) { // turns on the display
+ screenWorks = 1;
+ }
+ #endif
#endif
+ #ifdef AUDIO_ENABLE
+ startup_user();
#endif
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
}
void matrix_scan_user(void) {
- #ifdef SSD1306OLED
- if(screenWorks){
- iota_gfx_task(); // this is what updates the display continuously
- };
- #endif
+ #ifdef SSD1306OLED
+ if ( screenWorks ) {
+ iota_gfx_task(); // this is what updates the display continuously
+ };
+ #endif
}
void matrix_update(struct CharacterMatrix *dest,
@@ -122,17 +130,17 @@ void matrix_update(struct CharacterMatrix *dest,
}
void iota_gfx_task_user(void) {
-#if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
-#endif
+ #if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+ #endif
struct CharacterMatrix matrix;
matrix_clear(&matrix);
matrix_write_P(&matrix, PSTR("TKC1800"));
-
+
uint8_t layer = biton32(layer_state);
char buf[40];
@@ -148,4 +156,4 @@ void iota_gfx_task_user(void) {
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
matrix_write(&matrix, led);
matrix_update(&display, &matrix);
-} \ No newline at end of file
+}
diff --git a/keyboards/tkc1800/keymaps/smt/config.h b/keyboards/tkc1800/keymaps/smt/config.h
index 30973348ae..ee142927f3 100644
--- a/keyboards/tkc1800/keymaps/smt/config.h
+++ b/keyboards/tkc1800/keymaps/smt/config.h
@@ -14,10 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
#define USE_I2C
#define SSD1306OLED
@@ -25,5 +22,3 @@
#define SSD1306_ADDRESS 0x3C
// place overrides here
-
-#endif
diff --git a/keyboards/tkc1800/keymaps/smt/keymap.c b/keyboards/tkc1800/keymaps/smt/keymap.c
index 6683416e36..9f506b443b 100644
--- a/keyboards/tkc1800/keymaps/smt/keymap.c
+++ b/keyboards/tkc1800/keymaps/smt/keymap.c
@@ -13,30 +13,23 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "tkc1800.h"
+#include QMK_KEYBOARD_H
#include "LUFA/Drivers/Peripheral/TWI.h"
#include "i2c.h"
#include "ssd1306.h"
-#define MODS_SHFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-
// Custom macros
#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt)
#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
-// Helpful defines
-#define ______ KC_TRNS
-#define XXXXXX KC_NO
-
//Layers
enum {
- QWERTY = 0,
- COLEMAK,
- DVORAK,
- FUNCTION,
+ QWERTY = 0,
+ COLEMAK,
+ DVORAK,
+ FUNCTION,
};
//13 characters max without re-writing the "Layer: " format in iota_gfx_task_user()
@@ -62,15 +55,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Gui |Alt | Space |Alt |Gui|Ctr|Left |Down|Rght| 0 | . | |
* `---------------------------------------------------------------------------------'
*/
- [QWERTY] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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_BSLS, KC_GRV, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, \
- CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,KC_SLSH, SFT_ENT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXX, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
+ [QWERTY] = LAYOUT(
+ 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
+ KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
+ 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_BSLS, KC_GRV, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
+ 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_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, \
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ ),
/* Keymap COLEMAK: (Colemak Layer) Default Layer
* ,-------------------------------------------------------. ,-------------------.
* |Esc| F1| F2| F3| F4| | F5| F6| F7| F8| | F9|F10|F11|F12| |Ins |Home|PgUp|PrSc|
@@ -88,15 +81,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Gui |Alt | Space |Alt |Gui|Ctr|Left |Down|Rght| 0 | . | |
* `---------------------------------------------------------------------------------'
*/
- [COLEMAK] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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_BSLS, KC_GRV, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, \
- CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT,KC_SLSH, SFT_ENT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXX, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
+ [COLEMAK] = LAYOUT(
+ 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
+ KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
+ 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_BSLS, KC_GRV, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
+ 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_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, \
+ CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ ),
/* Keymap DVORAK: (Dvorak Layer) Default Layer
* ,-------------------------------------------------------. ,-------------------.
* |Esc| F1| F2| F3| F4| | F5| F6| F7| F8| | F9|F10|F11|F12| |Ins |Home|PgUp|PrSc|
@@ -114,50 +107,43 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Gui |Alt | Space |Alt |Gui|Ctr|Left |Down|Rght| 0 | . | |
* `---------------------------------------------------------------------------------'
*/
- [DVORAK] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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_BSLS, KC_GRV, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, \
- CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXX, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
- [FUNCTION] = LAYOUT(
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, RESET, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- ______, ______, ______, ______, ______, ______, ______, QWERTY, COLEMAK,DVORAK, ______, ______, ______, ______, KC_P7, KC_P8, KC_P9, KC_PMNS, \
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, XXXXXX, ______, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- ______, XXXXXX, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, BL_STEP,______, ______, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXX, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, ______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
+ [DVORAK] = LAYOUT(
+ 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
+ KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
+ 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_BSLS, KC_GRV, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
+ 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_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, \
+ CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, XXXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ ),
+ [FUNCTION] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, KC_PSCR, \
+ KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
+ _______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ _______, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_STEP, _______, _______, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, _______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ ),
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
- persistent_default_layer_set(1UL<<QWERTY);
+ set_single_persistent_default_layer(QWERTY);
}
return false;
break;
case COLEMAK:
if (record->event.pressed) {
- persistent_default_layer_set(1UL<<COLEMAK);
+ set_single_persistent_default_layer(COLEMAK);
}
return false;
break;
case DVORAK:
if (record->event.pressed) {
- persistent_default_layer_set(1UL<<DVORAK);
+ set_single_persistent_default_layer(DVORAK);
}
return false;
break;
@@ -168,25 +154,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
void led_set_user(uint8_t usb_led) {
}
+
void matrix_init_user(void) {
#ifdef USE_I2C
i2c_master_init();
- #ifdef SSD1306OLED
- // calls code for the SSD1306 OLED
- _delay_ms(400);
- TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- iota_gfx_init(); // turns on the display
+ #ifdef SSD1306OLED
+ // calls code for the SSD1306 OLED
+ _delay_ms(400);
+ TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
+ iota_gfx_init(); // turns on the display
+ #endif
#endif
+ #ifdef AUDIO_ENABLE
+ startup_user();
#endif
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
}
void matrix_scan_user(void) {
- #ifdef SSD1306OLED
- iota_gfx_task(); // this is what updates the display continuously
- #endif
+ #ifdef SSD1306OLED
+ iota_gfx_task(); // this is what updates the display continuously
+ #endif
}
void matrix_update(struct CharacterMatrix *dest,
@@ -198,11 +185,11 @@ void matrix_update(struct CharacterMatrix *dest,
}
void iota_gfx_task_user(void) {
-#if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
-#endif
+ #if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+ #endif
struct CharacterMatrix matrix;
diff --git a/keyboards/tkc1800/keymaps/wkl/config.h b/keyboards/tkc1800/keymaps/wkl/config.h
index 30973348ae..ee142927f3 100644
--- a/keyboards/tkc1800/keymaps/wkl/config.h
+++ b/keyboards/tkc1800/keymaps/wkl/config.h
@@ -14,10 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
#define USE_I2C
#define SSD1306OLED
@@ -25,5 +22,3 @@
#define SSD1306_ADDRESS 0x3C
// place overrides here
-
-#endif
diff --git a/keyboards/tkc1800/keymaps/wkl/keymap.c b/keyboards/tkc1800/keymaps/wkl/keymap.c
index e04c4d5c17..6f331c61cc 100644
--- a/keyboards/tkc1800/keymaps/wkl/keymap.c
+++ b/keyboards/tkc1800/keymaps/wkl/keymap.c
@@ -13,25 +13,17 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "tkc1800.h"
+#include QMK_KEYBOARD_H
#include "LUFA/Drivers/Peripheral/TWI.h"
#include "i2c.h"
#include "ssd1306.h"
-#define MODS_SHFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-
-
-// Helpful defines
-#define ______ KC_TRNS
-#define XXXXXX KC_NO
-
//Layers
enum {
- BASE = 0,
- FUNCTION,
+ BASE = 0,
+ FUNCTION,
};
bool screenWorks = 0;
@@ -56,61 +48,60 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------' |-------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up | 1 | 2 | 3 | Ent|
* |--------------------------------------------------------'----`--------------| |
- * |Ctrl|Gui |Alt | Space |Alt |Gui|Ctr|Left |Down|Rght| 0 | . | |
+ * |Ctrl | Alt | Space | Fn |Ctrl |Left |Down|Rght| 0 | . | |
* `---------------------------------------------------------------------------------'
*/
- [BASE] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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, XXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_P7, KC_P8, KC_P9, KC_PMNS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, 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, XXXXXX, \
- KC_LCTL, KC_LALT, XXXXXX, KC_SPC, XXXXXX, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
- [FUNCTION] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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, RESET, XXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_P7, KC_P8, KC_P9, KC_PMNS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, BL_STEP,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXX, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, XXXXXX, ______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
+ [BASE] = LAYOUT(
+ 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
+ KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
+ 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, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
+ 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_P7, KC_P8, KC_P9, KC_PMNS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, XXXXXXX, 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, XXXXXXX, \
+ KC_LCTL, KC_LALT, XXXXXXX, KC_SPC, XXXXXXX, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ ),
+ [FUNCTION] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, XXXXXXX, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, \
+ _______, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_STEP, _______, _______, _______, _______, _______, _______, XXXXXXX, \
+ _______, _______, XXXXXXX, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
+ return true;
}
void led_set_user(uint8_t usb_led) {
}
+
void matrix_init_user(void) {
#ifdef USE_I2C
i2c_master_init();
- #ifdef SSD1306OLED
- // calls code for the SSD1306 OLED
- _delay_ms(400);
- TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- if(iota_gfx_init()){ // turns on the display
- screenWorks = 1;
- }
+ #ifdef SSD1306OLED
+ // calls code for the SSD1306 OLED
+ _delay_ms(400);
+ TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
+ if ( iota_gfx_init() ) { // turns on the display
+ screenWorks = 1;
+ }
+ #endif
#endif
+ #ifdef AUDIO_ENABLE
+ startup_user();
#endif
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
}
void matrix_scan_user(void) {
- #ifdef SSD1306OLED
- if(screenWorks){
- iota_gfx_task(); // this is what updates the display continuously
- };
- #endif
+ #ifdef SSD1306OLED
+ if ( screenWorks ) {
+ iota_gfx_task(); // this is what updates the display continuously
+ };
+ #endif
}
void matrix_update(struct CharacterMatrix *dest,
@@ -122,17 +113,17 @@ void matrix_update(struct CharacterMatrix *dest,
}
void iota_gfx_task_user(void) {
-#if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
-#endif
+ #if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+ #endif
struct CharacterMatrix matrix;
matrix_clear(&matrix);
matrix_write_P(&matrix, PSTR("TKC1800"));
-
+
uint8_t layer = biton32(layer_state);
char buf[40];
@@ -148,4 +139,4 @@ void iota_gfx_task_user(void) {
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
matrix_write(&matrix, led);
matrix_update(&display, &matrix);
-} \ No newline at end of file
+}
diff --git a/keyboards/tkc1800/keymaps/yanfali/config.h b/keyboards/tkc1800/keymaps/yanfali/config.h
index e5de001a50..f1390cb03f 100644
--- a/keyboards/tkc1800/keymaps/yanfali/config.h
+++ b/keyboards/tkc1800/keymaps/yanfali/config.h
@@ -14,10 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
//#define USE_I2C
//#define SSD1306OLED
@@ -25,5 +22,3 @@
#define SSD1306_ADDRESS 0x3C
// place overrides here
-
-#endif
diff --git a/keyboards/tkc1800/keymaps/yanfali/keymap.c b/keyboards/tkc1800/keymaps/yanfali/keymap.c
index 292bdb0bba..8dad3446de 100644
--- a/keyboards/tkc1800/keymaps/yanfali/keymap.c
+++ b/keyboards/tkc1800/keymaps/yanfali/keymap.c
@@ -13,20 +13,12 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "tkc1800.h"
+#include QMK_KEYBOARD_H
#include "LUFA/Drivers/Peripheral/TWI.h"
#include "i2c.h"
#include "ssd1306.h"
-#define MODS_SHFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-
-
-// Helpful defines
-#define ______ KC_TRNS
-#define XXXXXX KC_NO
-
//Layers
enum {
@@ -58,53 +50,52 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `---------------------------------------------------------------------------------'
*/
[BASE] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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, XXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_P7, KC_P8, KC_P9, KC_PMNS, \
- LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, 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, XXXXXX, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
+ KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
+ 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, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
+ 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_P7, KC_P8, KC_P9, KC_PMNS, \
+ LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, XXXXXXX, 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, XXXXXXX, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(FUNCTION), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
),
[FUNCTION] = LAYOUT(
- 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_INS, KC_HOME, KC_PGUP, KC_PSCR, \
- KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- 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, RESET, XXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
- 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_P7, KC_P8, KC_P9, KC_PMNS, \
- LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_LSFT, XXXXXX, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXX, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, ______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, XXXXXXX, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, \
+ _______, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
+ return true;
}
void led_set_user(uint8_t usb_led) {
}
+
void matrix_init_user(void) {
#ifdef USE_I2C
i2c_master_init();
- #ifdef SSD1306OLED
- // calls code for the SSD1306 OLED
- _delay_ms(400);
- TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- iota_gfx_init(); // turns on the display
+ #ifdef SSD1306OLED
+ // calls code for the SSD1306 OLED
+ _delay_ms(400);
+ TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
+ iota_gfx_init(); // turns on the display
+ #endif
#endif
+ #ifdef AUDIO_ENABLE
+ startup_user();
#endif
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
}
void matrix_scan_user(void) {
- #ifdef SSD1306OLED
- iota_gfx_task(); // this is what updates the display continuously
- #endif
+ #ifdef SSD1306OLED
+ iota_gfx_task(); // this is what updates the display continuously
+ #endif
}
void matrix_update(struct CharacterMatrix *dest,
@@ -116,11 +107,11 @@ void matrix_update(struct CharacterMatrix *dest,
}
void iota_gfx_task_user(void) {
-#if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
-#endif
+ #if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+ #endif
struct CharacterMatrix matrix;
diff --git a/keyboards/tkc1800/rules.mk b/keyboards/tkc1800/rules.mk
index 56c2d4b747..35da90d076 100644
--- a/keyboards/tkc1800/rules.mk
+++ b/keyboards/tkc1800/rules.mk
@@ -51,21 +51,21 @@ OPT_DEFS += -DBOOTLOADER_SIZE=8192
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= yes # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality on B7 by default
-RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-MIDI_ENABLE ?= no # MIDI controls
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no # Audio output on port C6
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
SRC = i2c.c \
ssd1306.c
diff --git a/keyboards/tkc1800/tkc1800.h b/keyboards/tkc1800/tkc1800.h
index 0a872ef883..4d1686cf16 100644
--- a/keyboards/tkc1800/tkc1800.h
+++ b/keyboards/tkc1800/tkc1800.h
@@ -13,8 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef TKC1800_H
-#define TKC1800_H
+#pragma once
#include "quantum.h"
@@ -24,16 +23,14 @@
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, K3G, K3H, K3I, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4F, K4G, K4H, K4I, \
- K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5F, K5G, K5H, K5I, \
- K60, K61, K62, K65, K69, K6A, K6B, K6C, K6D, K6E, K6G, K6H, K6I \
+ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5F, K5G, K5H, K5I, \
+ K60, K61, K62, K65, K69, K6A, K6B, K6C, K6D, K6E, K6G, K6H, K6I \
) { \
- { K00, KC_NO, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO, K0F, K0G, K0H, K0I }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1F, K1G, K1H, K1I }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F, K3G, K3H, K3I }, \
- { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, KC_NO, K4F, K4G, K4H, K4I }, \
- { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, KC_NO, K5F, K5G, K5H, K5I }, \
- { K60, K61, K62, KC_NO, KC_NO, K65, KC_NO, KC_NO, KC_NO, K69, K6A, K6B, K6C, K6D, K6E, KC_NO, K6G, K6H, K6I } \
+ { K00, KC_NO, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO, K0F, K0G, K0H, K0I }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1F, K1G, K1H, K1I }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F, K3G, K3H, K3I }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, KC_NO, K4F, K4G, K4H, K4I }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, KC_NO, K5F, K5G, K5H, K5I }, \
+ { K60, K61, K62, KC_NO, KC_NO, K65, KC_NO, KC_NO, KC_NO, K69, K6A, K6B, K6C, K6D, K6E, KC_NO, K6G, K6H, K6I } \
}
-
-#endif
diff --git a/keyboards/tmo50/config.h b/keyboards/tmo50/config.h
new file mode 100644
index 0000000000..cf6a3fbf37
--- /dev/null
+++ b/keyboards/tmo50/config.h
@@ -0,0 +1,208 @@
+/*
+Copyright 2019 funderburker
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER funderburker
+#define PRODUCT TMO50
+#define DESCRIPTION 50% mechanical keyboard with macro column
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D5, D3, D2, D0 }
+#define MATRIX_COL_PINS { D1, D4, F0, F1, F4, F5, F6, F7, D6, D7, B4, B5, B6, C6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN C7
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 10
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+ #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+ #define RGBLIGHT_ANIMATIONS
+/*== or choose animations ==*/
+ // #define RGBLIGHT_EFFECT_BREATHING
+ // #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ // #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ // #define RGBLIGHT_EFFECT_SNAKE
+ // #define RGBLIGHT_EFFECT_KNIGHT
+ // #define RGBLIGHT_EFFECT_CHRISTMAS
+ // #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ // #define RGBLIGHT_EFFECT_RGB_TEST
+ // #define RGBLIGHT_EFFECT_ALTERNATING
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
diff --git a/keyboards/tmo50/info.json b/keyboards/tmo50/info.json
new file mode 100644
index 0000000000..e96fa4ceac
--- /dev/null
+++ b/keyboards/tmo50/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "TMO50",
+ "url": "",
+ "maintainer": "funderburker",
+ "bootloader": "atmel-dfu",
+ "width": 15.25,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"", "x":0, "y":0}, {"label":"", "x":1.25, "y":0}, {"label":"", "x":2.25, "y":0}, {"label":"", "x":3.25, "y":0}, {"label":"", "x":4.25, "y":0}, {"label":"", "x":5.25, "y":0}, {"label":"", "x":6.25, "y":0}, {"label":"", "x":7.25, "y":0}, {"label":"", "x":8.25, "y":0}, {"label":"", "x":9.25, "y":0}, {"label":"", "x":10.25, "y":0}, {"label":"", "x":11.25, "y":0}, {"label":"", "x":12.25, "y":0}, {"label":"", "x":13.25, "y":0}, {"label":"", "x":14.25, "y":0}, {"x":0, "y":1}, {"label":"Ctrl", "x":1.25, "y":1, "w":1.25}, {"label":"", "x":2.5, "y":1}, {"label":"", "x":3.5, "y":1}, {"label":"", "x":4.5, "y":1}, {"label":"", "x":5.5, "y":1}, {"label":"", "x":6.5, "y":1}, {"label":"", "x":7.5, "y":1}, {"label":"", "x":8.5, "y":1}, {"label":"", "x":9.5, "y":1}, {"label":"", "x":10.5, "y":1}, {"label":"", "x":11.5, "y":1}, {"label":"", "x":12.5, "y":1}, {"label":"Enter", "x":13.5, "y":1, "w":1.75}, {"x":0, "y":2}, {"label":"Shift", "x":1.25, "y":2, "w":1.75}, {"label":"", "x":3, "y":2}, {"label":"", "x":4, "y":2}, {"label":"", "x":5, "y":2}, {"label":"", "x":6, "y":2}, {"label":"b", "x":7, "y":2}, {"label":"", "x":8, "y":2}, {"label":"m", "x":9, "y":2}, {"label":"", "x":10, "y":2}, {"label":"", "x":11, "y":2}, {"label":"", "x":12, "y":2}, {"label":"Shift", "x":13, "y":2, "w":1.25}, {"label":"", "x":14.25, "y":2}, {"x":0, "y":3}, {"label":"Alt", "x":2.75, "y":3}, {"label":"Win", "x":3.75, "y":3, "w":1.5}, {"label":"", "x":5.25, "y":3, "w":2.25}, {"label":"", "x":7.5, "y":3, "w":2.75}, {"label":"AltGr", "x":10.25, "y":3, "w":1.5}, {"label":"L3", "x":11.75, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/tmo50/keymaps/default/keymap.c b/keyboards/tmo50/keymaps/default/keymap.c
new file mode 100644
index 0000000000..419893f1a6
--- /dev/null
+++ b/keyboards/tmo50/keymaps/default/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 funderburker
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Default layer
+ [0] = LAYOUT(
+ KC_TRNS, 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,
+ KC_TRNS, 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,
+ KC_TRNS, 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(2),
+ KC_TRNS, KC_TAB, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(1, KC_SPC), KC_RALT, MO(3)
+ ),
+
+ // Fn1 layer
+ [1] = LAYOUT(
+ KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ // Fn2 layer
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_UP, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ // Fn3 layer
+ [3] = LAYOUT(
+ 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_TRNS,
+ KC_TRNS, KC_CAPS, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, BL_STEP, BL_DEC, 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
+ ),
+};
+
diff --git a/keyboards/tmo50/readme.md b/keyboards/tmo50/readme.md
new file mode 100644
index 0000000000..2af282d150
--- /dev/null
+++ b/keyboards/tmo50/readme.md
@@ -0,0 +1,15 @@
+# tmo50
+
+![tmo50](https://imgur.com/BhRYzl6.jpg)
+
+TMO50 is a 50% mechanical keyboard with macro column on the left side. Sub60% board without compromises.
+
+Keyboard Maintainer: [funderburker](https://github.com/emiilsd)
+Hardware Supported: TMO50 mechanical keyboard
+Hardware Availability: Group buys
+
+Make example for this keyboard (after setting up your build environment):
+
+ make tmo50:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/tmo50/rules.mk b/keyboards/tmo50/rules.mk
new file mode 100644
index 0000000000..b773031d54
--- /dev/null
+++ b/keyboards/tmo50/rules.mk
@@ -0,0 +1,63 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/tmo50/tmo50.c b/keyboards/tmo50/tmo50.c
new file mode 100644
index 0000000000..a42ab4720a
--- /dev/null
+++ b/keyboards/tmo50/tmo50.c
@@ -0,0 +1,43 @@
+/* Copyright 2019 funderburker
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "tmo50.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/tmo50/tmo50.h b/keyboards/tmo50/tmo50.h
new file mode 100644
index 0000000000..5723b00aea
--- /dev/null
+++ b/keyboards/tmo50/tmo50.h
@@ -0,0 +1,40 @@
+/* Copyright 2019 funderburker
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K301, K302, K303, K305, K307, K309, K310 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, K301, K302, K303, KC_NO, K305, KC_NO, K307, KC_NO, K309, K310, KC_NO, KC_NO, KC_NO } \
+}
+
diff --git a/keyboards/tokyo60/readme.md b/keyboards/tokyo60/readme.md
index 3f6b3b76b3..d0bc6e6ce8 100644
--- a/keyboards/tokyo60/readme.md
+++ b/keyboards/tokyo60/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make tokyo60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/clueboard/66/config.h b/keyboards/touchpad/config.h
index dff5c96d0f..8d34daae12 100644
--- a/keyboards/clueboard/66/config.h
+++ b/keyboards/touchpad/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2018 Jack Humbert <jack.humb@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,19 +15,28 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CLUEBOARD_66_CONFIG_H
-#define CLUEBOARD_66_CONFIG_H
+#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xC1ED
-#define MANUFACTURER Clueboard
-#define PRODUCT Clueboard
-#define DESCRIPTION QMK keyboard firmware for Clueboard
+#define VENDOR_ID 0x16D0
+#define PRODUCT_ID 0x0DB8
+#define DEVICE_VER 0x0001
+#define MANUFACTURER JacoBurge
+#define PRODUCT TouchPad
+#define DESCRIPTION A capacitive touchpad
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 6
+
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
@@ -59,5 +68,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/touchpad/keymaps/default/keymap.c b/keyboards/touchpad/keymaps/default/keymap.c
new file mode 100644
index 0000000000..92f772aaa8
--- /dev/null
+++ b/keyboards/touchpad/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+/* Copyright 2018 Jack Humbert <jack.humb@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = {
+ { KC_A, KC_B, KC_C, KC_D, KC_E, KC_F },
+ { KC_A, KC_B, KC_C, KC_D, KC_E, KC_F },
+ { KC_A, KC_B, KC_C, KC_D, KC_E, KC_F },
+ { KC_A, KC_B, KC_C, KC_D, KC_E, KC_F },
+ { KC_A, KC_B, KC_C, KC_D, KC_E, KC_F },
+ { KC_A, KC_B, KC_C, KC_D, KC_E, KC_F }
+}
+
+};
diff --git a/keyboards/touchpad/matrix.c b/keyboards/touchpad/matrix.c
new file mode 100644
index 0000000000..3af4c5c3c7
--- /dev/null
+++ b/keyboards/touchpad/matrix.c
@@ -0,0 +1,291 @@
+/*
+MIT License
+Copyright (c) 2018, JacoBurge
+Adapted for QMK by Jack Humbert in 2018
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include "matrix.h"
+#include "i2c_master.h"
+#include "quantum.h"
+
+#define VIBRATE_LENGTH 50 //Defines number of interrupts motor will vibrate for, must be bigger than 8 for correct operation
+volatile uint8_t vibrate = 0; //Trigger vibration in interrupt
+
+static matrix_row_t matrix[MATRIX_ROWS];
+
+const uint8_t SENr[6] = {1, 2, 3, 5, 6, 7};//Maps capacitive pads to pins
+const uint8_t SENc[6] = {0, 4, 8, 9, 10, 11};
+
+volatile uint8_t LEDs[6][6] = {{0}};//Stores current LED values
+
+//Read data from the cap touch IC
+uint8_t readDataFromTS(uint8_t reg) {
+ uint8_t rx[1] = { 0 };
+ if (i2c_readReg(0x1C << 1, reg, rx, 1, 100) == 0) {
+ return rx[0];
+ }
+ return 0;
+}
+
+//Write data to cap touch IC
+uint8_t writeDataToTS(uint8_t reg, uint8_t data) {
+ uint8_t tx[2] = { reg, data };
+ if (i2c_transmit(0x1C << 1, tx, 2, 100) == 0) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+
+uint8_t checkTSPres(void) {
+ return (readDataFromTS(0x00) == 0x3E);
+}
+
+uint8_t capSetup(void) {
+
+ uint8_t temp_return = checkTSPres();
+
+ if (temp_return == 1) {
+ // Perform measurements every 16ms
+ writeDataToTS(0x08, 1);
+
+ // Increase detection integrator value
+ writeDataToTS(0x0B, 1);
+
+ // Oversample to gain two bits for columns
+ writeDataToTS(0x28, 0x42);
+ writeDataToTS(0x29, 0x00);
+ writeDataToTS(0x2A, 0x00);
+ writeDataToTS(0x2B, 0x00);
+ writeDataToTS(0x2C, 0x42);
+ writeDataToTS(0x2D, 0x00);
+ writeDataToTS(0x2E, 0x00);
+ writeDataToTS(0x2F, 0x00);
+ writeDataToTS(0x30, 0x42);
+ writeDataToTS(0x31, 0x42);
+ writeDataToTS(0x32, 0x42);
+ writeDataToTS(0x33, 0x42);
+
+ // Recalibration if touch detected for more than 8 seconds n*0.16s
+ writeDataToTS(0x0C, 50);
+
+ // Enable keys and set key groups
+ writeDataToTS(0x1C, 0x00 | 0x04);
+ writeDataToTS(0x1D, 0x00 | 0x08);
+ writeDataToTS(0x1E, 0x00 | 0x08);
+ writeDataToTS(0x1F, 0x00 | 0x08);
+ writeDataToTS(0x20, 0x00 | 0x04);
+ writeDataToTS(0x21, 0x00 | 0x08);
+ writeDataToTS(0x22, 0x00 | 0x08);
+ writeDataToTS(0x23, 0x00 | 0x08);
+ writeDataToTS(0x24, 0x00 | 0x04);
+ writeDataToTS(0x25, 0x00 | 0x04);
+ writeDataToTS(0x26, 0x00 | 0x04);
+ writeDataToTS(0x27, 0x00 | 0x04);
+
+ }
+ return temp_return;
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+void matrix_init(void) {
+
+ i2c_init();
+
+ //Motor enable
+ setPinOutput(E6);
+ //Motor PWM
+ setPinOutput(D7);
+
+ //Power LED
+ setPinOutput(B7);
+ writePinHigh(B7);
+
+ //LEDs Columns
+ setPinOutput(F7);
+ setPinOutput(F6);
+ setPinOutput(F5);
+ setPinOutput(F4);
+ setPinOutput(F1);
+ setPinOutput(F0);
+
+ //LEDs Rows
+ setPinOutput(D6);
+ setPinOutput(B4);
+ setPinOutput(B5);
+ setPinOutput(B6);
+ setPinOutput(C6);
+ setPinOutput(C7);
+
+ //Capacitive Interrupt
+ setPinInput(D2);
+
+ capSetup();
+ writeDataToTS(0x06, 0x12); //Calibrate capacitive touch IC
+
+ memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+
+ matrix_init_quantum();
+}
+
+
+uint16_t touchDetectionRoutine(void) {
+ uint16_t data;
+ uint8_t temp1, temp2;
+
+ temp1 = readDataFromTS(0x04);
+ temp2 = readDataFromTS(0x03);
+ data = temp1;
+ data = (data << 8) | temp2;
+ return data;
+
+}
+
+//Process raw capacitive data, map pins to rows and columns
+void decodeArray(uint16_t dataIn, uint8_t *column, uint8_t *row) {
+ uint8_t i1 = 20, i2 = 20;
+ for (uint8_t i = 0; i < 12; i++) {
+ if ((dataIn & 0b1) == 1) {
+ if (i1 == 20) {
+ i1 = i;
+ } else if (i2 == 20) {
+ i2 = i;
+ }
+ }
+ dataIn = dataIn >> 1;
+ }
+
+ for (uint8_t j = 0; j < 6; j++) {
+ if (SENr[j] == i1 || SENr[j] == i2) {
+ *row = j;
+ }
+ if (SENc[j] == i1 || SENc[j] == i2) {
+ *column = j;
+ }
+ }
+}
+
+void touchClearCurrentDetections(void) {
+ readDataFromTS(0x05);
+ readDataFromTS(0x02);
+ readDataFromTS(0x03);
+ readDataFromTS(0x04);
+}
+
+//Check interrupt pin
+uint8_t isTouchChangeDetected(void) {
+ return !readPin(D2);
+}
+
+uint8_t matrix_scan(void) {
+ if (isTouchChangeDetected()) {
+ uint16_t dataIn = touchDetectionRoutine();
+ if ((dataIn & 0b111100010001) > 0 && (dataIn & 0b000011101110) > 0) {
+ uint8_t column = 10, row = 10;
+ decodeArray(dataIn, &column, &row);
+ if (column != 10 && row != 10) {
+ vibrate = VIBRATE_LENGTH; //Trigger vibration
+ matrix[row] = _BV(column);
+ } else {
+ memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+ }
+ } else {
+ memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+ }
+ touchClearCurrentDetections();
+ }
+
+ for (uint8_t c = 0; c < 6; c++) {
+ for (uint8_t r = 0; r < 6; r++) {
+ switch (r) {
+ case 0: writePin(D6, matrix_is_on(r, c)); break;
+ case 1: writePin(B4, matrix_is_on(r, c)); break;
+ case 2: writePin(B5, matrix_is_on(r, c)); break;
+ case 3: writePin(B6, matrix_is_on(r, c)); break;
+ case 4: writePin(C6, matrix_is_on(r, c)); break;
+ case 5: writePin(C7, matrix_is_on(r, c)); break;
+ }
+
+ switch (c) {
+ case 0: writePin(F5, !matrix_is_on(r, c)); break;
+ case 1: writePin(F4, !matrix_is_on(r, c)); break;
+ case 2: writePin(F1, !matrix_is_on(r, c)); break;
+ case 3: writePin(F0, !matrix_is_on(r, c)); break;
+ case 4: writePin(F6, !matrix_is_on(r, c)); break;
+ case 5: writePin(F7, !matrix_is_on(r, c)); break;
+ }
+ }
+ }
+
+ if (vibrate == VIBRATE_LENGTH) {
+ writePinHigh(E6);
+ writePinHigh(D7);
+ vibrate--;
+ } else if (vibrate > 0) {
+ vibrate--;
+ } else if (vibrate == 0) {
+ writePinLow(D7);
+ writePinLow(E6);
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+
+}
+
+bool matrix_is_on(uint8_t row, uint8_t col) {
+ return (matrix[row] & (1<<col));
+}
+
+matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+ printf("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ printf("%X0: ", row);
+ matrix_row_t data = matrix_get_row(row);
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ if (data & (1<<col))
+ printf("1");
+ else
+ printf("0");
+ }
+ printf("\n");
+ }
+}
diff --git a/keyboards/touchpad/readme.md b/keyboards/touchpad/readme.md
new file mode 100644
index 0000000000..f80bfa87b6
--- /dev/null
+++ b/keyboards/touchpad/readme.md
@@ -0,0 +1,15 @@
+# Touchpad
+
+![TouchPad](https://static1.squarespace.com/static/561b7180e4b05a82a1747f0b/59d8985903596eb5953e1803/5a43f205e4966b67c55878a2/1521104083905/IMG_2183.jpg?format=2500w)
+
+A small capacitive 6x6 touchpad for launching programs. [More info](https://jacoburge.co.uk/touch-pad/)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: TouchPad PCB
+Hardware Availability: [JaboBurge's Shop](https://jacoburge.co.uk/shop)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make touchpad:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/touchpad/rules.mk b/keyboards/touchpad/rules.mk
new file mode 100644
index 0000000000..e4fa2ac133
--- /dev/null
+++ b/keyboards/touchpad/rules.mk
@@ -0,0 +1,67 @@
+# MCU name
+MCU = atmega32u4
+
+SRC = matrix.c i2c_master.c
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = no
+CUSTOM_MATRIX = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/touchpad/touchpad.c b/keyboards/touchpad/touchpad.c
new file mode 100644
index 0000000000..fe96d56b68
--- /dev/null
+++ b/keyboards/touchpad/touchpad.c
@@ -0,0 +1 @@
+#include "touchpad.h"
diff --git a/keyboards/touchpad/touchpad.h b/keyboards/touchpad/touchpad.h
new file mode 100644
index 0000000000..010d4b1383
--- /dev/null
+++ b/keyboards/touchpad/touchpad.h
@@ -0,0 +1,2 @@
+#pragma once
+#include "quantum.h"
diff --git a/keyboards/tragicforce68/README.md b/keyboards/tragicforce68/README.md
index c7a6cc77da..7cca1b5055 100644
--- a/keyboards/tragicforce68/README.md
+++ b/keyboards/tragicforce68/README.md
@@ -15,4 +15,4 @@ Example of flashing this keyboard:
make tragicforce68:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/uk78/readme.md b/keyboards/uk78/readme.md
index 8a1ba5e8a3..6592e38ec9 100644
--- a/keyboards/uk78/readme.md
+++ b/keyboards/uk78/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make uk78:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/v60_type_r/keymaps/default/keymap.c b/keyboards/v60_type_r/keymaps/default/keymap.c
index 4f9b7f9b21..77546c0a65 100644
--- a/keyboards/v60_type_r/keymaps/default/keymap.c
+++ b/keyboards/v60_type_r/keymaps/default/keymap.c
@@ -63,13 +63,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/v60_type_r/keymaps/vimouse/keymap.c b/keyboards/v60_type_r/keymaps/vimouse/keymap.c
index fba7111480..2586683127 100644
--- a/keyboards/v60_type_r/keymaps/vimouse/keymap.c
+++ b/keyboards/v60_type_r/keymaps/vimouse/keymap.c
@@ -97,9 +97,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____, _____, _____, _____, _____, _____, _____, _____),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/v60_type_r/readme.md b/keyboards/v60_type_r/readme.md
index c7039c2e70..06ff749b86 100644
--- a/keyboards/v60_type_r/readme.md
+++ b/keyboards/v60_type_r/readme.md
@@ -40,7 +40,7 @@ or
make v60_type_r:vimouse
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/v60_type_r/rules.mk b/keyboards/v60_type_r/rules.mk
index 30038d5624..7a1340a1ac 100644
--- a/keyboards/v60_type_r/rules.mk
+++ b/keyboards/v60_type_r/rules.mk
@@ -39,13 +39,14 @@ F_USB = $(F_CPU)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
# Build Options
diff --git a/keyboards/vinta/readme.md b/keyboards/vinta/readme.md
index 193f361216..278c5e2c4b 100644
--- a/keyboards/vinta/readme.md
+++ b/keyboards/vinta/readme.md
@@ -14,7 +14,7 @@ Make example for this keyboard (after setting up your build environment):
make vinta:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
#### Developer's Note
diff --git a/keyboards/vision_division/keymaps/default/rules.mk b/keyboards/vision_division/keymaps/default/rules.mk
index 342f37453c..69a3b2cd29 100644
--- a/keyboards/vision_division/keymaps/default/rules.mk
+++ b/keyboards/vision_division/keymaps/default/rules.mk
@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/vision_division/readme.md b/keyboards/vision_division/readme.md
index 350ced3340..72fdb95424 100644
--- a/keyboards/vision_division/readme.md
+++ b/keyboards/vision_division/readme.md
@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make vision_division:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/viterbi/readme.md b/keyboards/viterbi/readme.md
index 13f3e60566..9aad7896b7 100644
--- a/keyboards/viterbi/readme.md
+++ b/keyboards/viterbi/readme.md
@@ -16,6 +16,6 @@ Example of flashing this keyboard:
make viterbi/rev1:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Viterbi Build Guide](https://docs.keeb.io)
diff --git a/keyboards/wavelet/readme.md b/keyboards/wavelet/readme.md
index bacd57037d..90c5ac8089 100644
--- a/keyboards/wavelet/readme.md
+++ b/keyboards/wavelet/readme.md
@@ -15,6 +15,6 @@ Example of flashing this keyboard:
make wavelet:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A build guide for this keyboard can be found here: [Levinson Build Guide](https://docs.keeb.io)
diff --git a/keyboards/wheatfield/blocked65/blocked65.c b/keyboards/wheatfield/blocked65/blocked65.c
new file mode 100755
index 0000000000..81da8005b0
--- /dev/null
+++ b/keyboards/wheatfield/blocked65/blocked65.c
@@ -0,0 +1 @@
+#include "blocked65.h"
diff --git a/keyboards/wheatfield/blocked65/blocked65.h b/keyboards/wheatfield/blocked65/blocked65.h
new file mode 100755
index 0000000000..54b4485b7e
--- /dev/null
+++ b/keyboards/wheatfield/blocked65/blocked65.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "quantum.h"
+
+#define _x_ KC_NO
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E \
+){ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, _x_, K2D, K2E }, \
+ { K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, _x_, K4A, K4B, K4C, K4D, K4E }, \
+}
+
diff --git a/keyboards/wheatfield/blocked65/config.h b/keyboards/wheatfield/blocked65/config.h
new file mode 100755
index 0000000000..36ec18f147
--- /dev/null
+++ b/keyboards/wheatfield/blocked65/config.h
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Dou
+#define PRODUCT Blocked65
+#define DESCRIPTION 65% keyboard with arrow cluster blocker
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B7 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, F7, F6, F5, F4, F1, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* number of backlight levels */
+
+#define BACKLIGHT_PIN B6
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 6
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN E2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 2
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
diff --git a/keyboards/wheatfield/blocked65/info.json b/keyboards/wheatfield/blocked65/info.json
new file mode 100644
index 0000000000..e3f9c360bf
--- /dev/null
+++ b/keyboards/wheatfield/blocked65/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Wheat Field blocked 65% keyboard",
+ "url": "",
+ "maintainer": "qmk",
+ "bootloader": "",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"PrScr", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Del", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgUp", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"PgDn", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4, "w":1.25}, {"label":"Alt", "x":11.25, "y":4, "w":1.25}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/wheatfield/blocked65/keymaps/default/keymap.c b/keyboards/wheatfield/blocked65/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9891d2f63c
--- /dev/null
+++ b/keyboards/wheatfield/blocked65/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+#include QMK_KEYBOARD_H
+
+#define RAISE MO(_RAISE)
+
+enum layers {
+ _QWERTY,
+ _RAISE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_GESC, 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_INSERT, \
+ 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_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, \
+ 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, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, RAISE, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [_RAISE] = LAYOUT(
+ 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_PSCR, \
+ KC_TRNS, KC_NO, KC_UP, KC_NO, RGB_TOG,RGB_VAI,RGB_HUI,RGB_SAI,KC_INS, RESET, KC_PSCR, KC_SLCK, KC_PAUS, KC_BSLS, KC_SLCK, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,RGB_MOD,RGB_VAD,RGB_HUD,RGB_SAD,KC_NO, KC_NO, KC_F14, KC_F15, KC_INS, KC_HOME, \
+ KC_LSFT, KC_MPRV, KC_MPLY, KC_MNXT,KC_NO, BL_TOGG,KC_NO, KC_MUTE,KC_VOLD, KC_VOLU, KC_NO, KC_RSFT, RGB_MOD, KC_END, \
+ KC_LCTL, KC_LGUI, KC_LALT, RESET, KC_RALT, KC_TRNS, KC_HOME, BL_STEP, KC_END)
+};
diff --git a/keyboards/wheatfield/blocked65/keymaps/walker/config.h b/keyboards/wheatfield/blocked65/keymaps/walker/config.h
new file mode 100644
index 0000000000..e7c26d1d0b
--- /dev/null
+++ b/keyboards/wheatfield/blocked65/keymaps/walker/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#define RGB_DI_PIN E2
+#define RGBLIGHT_ANIMATIONS
+#undef RGBLED_NUM
+#define RGBLED_NUM 72
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/wheatfield/blocked65/keymaps/walker/keymap.c b/keyboards/wheatfield/blocked65/keymaps/walker/keymap.c
new file mode 100644
index 0000000000..3dc7a7dbd3
--- /dev/null
+++ b/keyboards/wheatfield/blocked65/keymaps/walker/keymap.c
@@ -0,0 +1,27 @@
+#include QMK_KEYBOARD_H
+
+#define RAISE MO(_RAISE)
+
+enum layers {
+ _QWERTY,
+ _RAISE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_GESC, 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_INSERT, \
+ 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_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, \
+ 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, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, RAISE, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [_RAISE] = LAYOUT(
+ 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_PSCR, \
+ KC_TRNS, KC_NO, KC_UP, KC_NO, RGB_TOG,RGB_VAI,RGB_HUI,RGB_SAI,KC_INS, RESET, KC_PSCR, KC_SLCK, KC_PAUS, KC_BSLS, KC_SLCK, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,RGB_MOD,RGB_VAD,RGB_HUD,RGB_SAD,KC_NO, KC_NO, KC_F14, KC_F15, KC_INS, KC_HOME, \
+ KC_LSFT, KC_MPRV, KC_MPLY, KC_MNXT,KC_NO, BL_TOGG,KC_NO, KC_MUTE,KC_VOLD, KC_VOLU, KC_NO, KC_RSFT, RGB_MOD, KC_END, \
+ KC_LCTL, KC_LGUI, KC_LALT, RESET, KC_RALT, KC_TRNS, KC_HOME, BL_STEP, KC_END)
+
+};
+
diff --git a/keyboards/wheatfield/blocked65/rules.mk b/keyboards/wheatfield/blocked65/rules.mk
new file mode 100755
index 0000000000..86525031a0
--- /dev/null
+++ b/keyboards/wheatfield/blocked65/rules.mk
@@ -0,0 +1,59 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = atmel-dfu
+
+# Boot Section Size in *bytes*
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
diff --git a/keyboards/whitefox/keymaps/dudeofawesome/keymap.c b/keyboards/whitefox/keymaps/dudeofawesome/keymap.c
index 8c94df2c14..2388201b7e 100644
--- a/keyboards/whitefox/keymaps/dudeofawesome/keymap.c
+++ b/keyboards/whitefox/keymaps/dudeofawesome/keymap.c
@@ -119,10 +119,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-// const uint16_t fn_actions[] = {
-// [0] = ACTION_LAYER_MOMENTARY(1),
-// };
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
diff --git a/keyboards/whitefox/keymaps/jetpacktuxedo/rules.mk b/keyboards/whitefox/keymaps/jetpacktuxedo/rules.mk
index 8eb483103c..c9c8cbea51 100644
--- a/keyboards/whitefox/keymaps/jetpacktuxedo/rules.mk
+++ b/keyboards/whitefox/keymaps/jetpacktuxedo/rules.mk
@@ -1,5 +1,2 @@
-ifndef QUANTUM_DIR
- include ../../../Makefile
-endif
-
BACKLIGHT_ENABLE = yes
+
diff --git a/keyboards/whitefox/keymaps/kim-kim/keymap.c b/keyboards/whitefox/keymaps/kim-kim/keymap.c
index 200098603c..459ec64371 100644
--- a/keyboards/whitefox/keymaps/kim-kim/keymap.c
+++ b/keyboards/whitefox/keymaps/kim-kim/keymap.c
@@ -70,24 +70,3 @@ const uint16_t fn_actions[] = {
[7] = ACTION_USAGE_CONSUMER(0x1A0),
};
-
-/* custom action function */
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- /*
- (void)opt;
- switch(id) {
- case ACTION_LEDS_ALL:
- if(record->event.pressed) {
- // signal the LED controller thread
- chMBPost(&led_mailbox, LED_MSG_GAME_TOGGLE, TIME_IMMEDIATE);
- }
- break;
- case ACTION_LEDS_GAME:
- if(record->event.pressed) {
- // signal the LED controller thread
- chMBPost(&led_mailbox, LED_MSG_ALL_TOGGLE, TIME_IMMEDIATE);
- }
- break;
- }
- */
-}
diff --git a/keyboards/whitefox/keymaps/konstantin/config.h b/keyboards/whitefox/keymaps/konstantin/config.h
index ab920a50ba..d7a072b06f 100644
--- a/keyboards/whitefox/keymaps/konstantin/config.h
+++ b/keyboards/whitefox/keymaps/konstantin/config.h
@@ -1,27 +1,7 @@
#pragma once
-#define FORCE_NKRO
+#define LAYER_FN
+#define LAYER_NUMPAD
#undef IS_COMMAND
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL)))
-
-#define MAGIC_KEY_LAYER0_ALT1 BSLS
-#define MAGIC_KEY_BOOTLOADER ESC
-
-#define MOUSEKEY_DELAY 50
-#define MOUSEKEY_INTERVAL 15
-#define MOUSEKEY_MAX_SPEED 4
-#define MOUSEKEY_TIME_TO_MAX 50
-#define MOUSEKEY_WHEEL_MAX_SPEED 1
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
-
-#define NO_ACTION_FUNCTION
-#define NO_ACTION_MACRO
-
-#define PERMISSIVE_HOLD
-#define TAPPING_TERM 200
-#define TAPPING_TOGGLE 2
-
-#define UNICODE_CYCLE_PERSIST false
-#define UNICODE_SELECTED_MODES UC_WINC, UC_LNX
-#define UNICODE_WINC_KEY KC_RGUI
diff --git a/keyboards/whitefox/keymaps/konstantin/keymap.c b/keyboards/whitefox/keymaps/konstantin/keymap.c
index 54777cfe08..e37097361a 100644
--- a/keyboards/whitefox/keymaps/konstantin/keymap.c
+++ b/keyboards/whitefox/keymaps/konstantin/keymap.c
@@ -1,136 +1,5 @@
#include QMK_KEYBOARD_H
-
-#define TOP LCTL(KC_HOME)
-#define BOTTOM LCTL(KC_END)
-#define DSKTP_L LCTL(LGUI(KC_LEFT))
-#define DSKTP_R LCTL(LGUI(KC_RGHT))
-
-#define FN MO(L_FN)
-#define FN_CAPS LT(L_FN, KC_CAPS)
-#define FN_FNLK TT(L_FN)
-
-#define DESKTOP TD(TD_DESKTOP)
-#define FN_RCTL TD(TD_FN_RCTL)
-#define RAL_LAL TD(TD_RAL_LAL)
-#define RAL_RGU TD(TD_RAL_RGU)
-#define RCT_RSF TD(TD_RCT_RSF)
-
-#define COMMA UC(0x002C)
-#define L_PAREN UC(0x0028)
-#define R_PAREN UC(0x0029)
-#define EQUALS UC(0x003D)
-#define TIMES UC(0x00D7)
-#define DIVIDE UC(0x00F7)
-#define MINUS UC(0x2212)
-
-enum layers {
- L_BASE,
- L_FN,
- L_NUMPAD,
-};
-
-enum custom_keycodes {
- CLEAR = SAFE_RANGE,
- NUMPAD,
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case CLEAR:
- if (record->event.pressed) {
- SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
- }
- return false;
-
- case NUMPAD:
- if (record->event.pressed) {
- layer_invert(L_NUMPAD);
- bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
- if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
- tap_code(KC_NLCK); // Toggle Num Lock to match layer state.
- }
- }
- return false;
-
- default:
- return true;
- }
-}
-
-struct {
- bool fn_on; // Layer state when tap dance started
- bool started;
-} td_fn_rctrl_data;
-
-void td_fn_rctrl_each(qk_tap_dance_state_t *state, void *user_data) {
- if (!td_fn_rctrl_data.started) {
- td_fn_rctrl_data.fn_on = IS_LAYER_ON(L_FN);
- td_fn_rctrl_data.started = true;
- }
- // Single tap → Fn, double tap → RCtrl, triple tap etc. → Fn+RCtrl
- if (state->count == 1 || state->count == 3) {
- layer_on(L_FN);
- } else if (state->count == 2) {
- if (!td_fn_rctrl_data.fn_on) {
- layer_off(L_FN);
- }
- register_code(KC_RCTL);
- }
-}
-
-void td_fn_rctrl_reset(qk_tap_dance_state_t *state, void *user_data) {
- if ((state->count == 1 || state->count > 2) && !td_fn_rctrl_data.fn_on) {
- layer_off(L_FN);
- }
- if (state->count >= 2) {
- unregister_code(KC_RCTL);
- }
- td_fn_rctrl_data.started = false;
-}
-
-#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \
- .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \
- .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \
- }
-
-void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) {
- qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
- // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2
- if (state->count == 1 || state->count == 3) {
- register_code(mods->kc1);
- } else if (state->count == 2) {
- unregister_code(mods->kc1);
- register_code(mods->kc2);
- }
- // Prevent tap dance from sending kc1 and kc2 as weak mods
- state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2));
-}
-
-void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) {
- qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
- if (state->count == 1 || state->count > 2) {
- unregister_code(mods->kc1);
- }
- if (state->count >= 2) {
- unregister_code(mods->kc2);
- }
-}
-
-enum tap_dance {
- TD_DESKTOP,
- TD_FN_RCTL,
- TD_RAL_LAL,
- TD_RAL_RGU,
- TD_RCT_RSF,
-};
-
-qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop
- [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(td_fn_rctrl_each, NULL, td_fn_rctrl_reset),
- [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_LALT),
- [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_RGUI),
- [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RCTL, KC_RSFT),
-};
+#include "konstantin.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base layer
@@ -141,9 +10,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
* │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
- * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │CtlSft│ ↑ │PgD│
+ * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RCtRSf│ ↑ │PgD│
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
- * │LCtl│LGui│LAlt│ Space │AlGu│FnLk│ │ ← │ ↓ │ → │
+ * │LCtl│LGui│LAlt│ Space │RAlG│FnLk│ │ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
*/
[L_BASE] = LAYOUT_truefox( \
@@ -177,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Numpad layer
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
- * │Num│ │ │ │ │ │ │P7 │P8 │P9 │P- │ − │ = │Num│ │ │
+ * │ │ │ │ │ │ │ │P7 │P8 │P9 │P- │ − │ = │Num│ │ │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
* │ │ │ │ │ │ │ │P4 │P5 │P6 │P+ │ ( │ ) │ │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
@@ -189,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
*/
[L_NUMPAD] = LAYOUT_truefox( \
- NUMPAD, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, NUMPAD, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, NUMPAD, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, L_PAREN, R_PAREN, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PAST, TIMES, KC_PENT, _______, \
_______, _______, _______, _______, _______, _______, KC_P0, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______, _______, \
diff --git a/keyboards/whitefox/keymaps/konstantin/rules.mk b/keyboards/whitefox/keymaps/konstantin/rules.mk
index 96722d1d5b..1302f14ca8 100644
--- a/keyboards/whitefox/keymaps/konstantin/rules.mk
+++ b/keyboards/whitefox/keymaps/konstantin/rules.mk
@@ -1,13 +1,2 @@
BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = no
-COMMAND_ENABLE = yes
-CONSOLE_ENABLE = yes
-EXTRAKEY_ENABLE = yes
-MOUSEKEY_ENABLE = yes
-NKRO_ENABLE = yes
-SLEEP_LED_ENABLE = no
-TAP_DANCE_ENABLE = yes
-UNICODE_ENABLE = yes
VISUALIZER_ENABLE = no
-
-EXTRAFLAGS += -flto
diff --git a/keyboards/whitefox/keymaps/matt3o/keymap.c b/keyboards/whitefox/keymaps/matt3o/keymap.c
index 136ae65fab..76fb72f8e3 100644
--- a/keyboards/whitefox/keymaps/matt3o/keymap.c
+++ b/keyboards/whitefox/keymaps/matt3o/keymap.c
@@ -69,24 +69,3 @@ const uint16_t fn_actions[] = {
[7] = ACTION_USAGE_CONSUMER(0x1A0),
};
-
-/* custom action function */
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- /*
- (void)opt;
- switch(id) {
- case ACTION_LEDS_ALL:
- if(record->event.pressed) {
- // signal the LED controller thread
- chMBPost(&led_mailbox, LED_MSG_GAME_TOGGLE, TIME_IMMEDIATE);
- }
- break;
- case ACTION_LEDS_GAME:
- if(record->event.pressed) {
- // signal the LED controller thread
- chMBPost(&led_mailbox, LED_MSG_ALL_TOGGLE, TIME_IMMEDIATE);
- }
- break;
- }
- */
-}
diff --git a/keyboards/whitefox/readme.md b/keyboards/whitefox/readme.md
index 2de1d4c7d8..9b848a69d5 100644
--- a/keyboards/whitefox/readme.md
+++ b/keyboards/whitefox/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make whitefox:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/xd60/readme.md b/keyboards/xd60/readme.md
index 19c22dac64..24f07c47bc 100644
--- a/keyboards/xd60/readme.md
+++ b/keyboards/xd60/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make xd60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/xd75/keymaps/adi/keymap.c b/keyboards/xd75/keymaps/adi/keymap.c
index d96a215073..24b450c8d4 100644
--- a/keyboards/xd75/keymaps/adi/keymap.c
+++ b/keyboards/xd75/keymaps/adi/keymap.c
@@ -106,10 +106,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
},
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/adi/rules.mk b/keyboards/xd75/keymaps/adi/rules.mk
index d4e08cfb26..52a8f38d45 100644
--- a/keyboards/xd75/keymaps/adi/rules.mk
+++ b/keyboards/xd75/keymaps/adi/rules.mk
@@ -13,6 +13,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/atomic_style/keymap.c b/keyboards/xd75/keymaps/atomic_style/keymap.c
index 9867322993..c40d89bc79 100644
--- a/keyboards/xd75/keymaps/atomic_style/keymap.c
+++ b/keyboards/xd75/keymaps/atomic_style/keymap.c
@@ -163,10 +163,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
},
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/atomic_style/rules.mk b/keyboards/xd75/keymaps/atomic_style/rules.mk
index d4e08cfb26..52a8f38d45 100644
--- a/keyboards/xd75/keymaps/atomic_style/rules.mk
+++ b/keyboards/xd75/keymaps/atomic_style/rules.mk
@@ -13,6 +13,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/bbaserdem/rules.mk b/keyboards/xd75/keymaps/bbaserdem/rules.mk
index 4839c644f8..3e501cd00e 100644
--- a/keyboards/xd75/keymaps/bbaserdem/rules.mk
+++ b/keyboards/xd75/keymaps/bbaserdem/rules.mk
@@ -5,6 +5,3 @@ RGBLIGHT_ENABLE = no # LED strips
TAP_DANCE_ENABLE = no # Use multi-tap features
AUDIO_ENABLE = no # Audio stuff
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/boy_314/keymap.c b/keyboards/xd75/keymaps/boy_314/keymap.c
index d807d1d861..1de733f0f6 100644
--- a/keyboards/xd75/keymaps/boy_314/keymap.c
+++ b/keyboards/xd75/keymaps/boy_314/keymap.c
@@ -125,12 +125,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/bramver/keymap.c b/keyboards/xd75/keymaps/bramver/keymap.c
index 831278d001..142d8efd2b 100644
--- a/keyboards/xd75/keymaps/bramver/keymap.c
+++ b/keyboards/xd75/keymaps/bramver/keymap.c
@@ -96,8 +96,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {};
-
void matrix_init_user(void) {
_delay_ms(20); // Gets rid of tick
set_unicode_input_mode(UC_LNX);
diff --git a/keyboards/xd75/keymaps/c4software_bepo/keymap.c b/keyboards/xd75/keymaps/c4software_bepo/keymap.c
index e0a71d7c4f..2c70f28760 100644
--- a/keyboards/xd75/keymaps/c4software_bepo/keymap.c
+++ b/keyboards/xd75/keymaps/c4software_bepo/keymap.c
@@ -67,10 +67,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/cbbrowne/keymap.c b/keyboards/xd75/keymaps/cbbrowne/keymap.c
index ec98b6d5a6..322fffdadb 100644
--- a/keyboards/xd75/keymaps/cbbrowne/keymap.c
+++ b/keyboards/xd75/keymaps/cbbrowne/keymap.c
@@ -197,10 +197,6 @@ Missing still...
},
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
/* This bit of logic seeds a wee linear congruential random number generator */
/* lots of prime numbers everywhere... */
static uint16_t random_value = 157;
diff --git a/keyboards/xd75/keymaps/default/keymap.c b/keyboards/xd75/keymaps/default/keymap.c
index 028fc270de..03f6053853 100644
--- a/keyboards/xd75/keymaps/default/keymap.c
+++ b/keyboards/xd75/keymaps/default/keymap.c
@@ -66,10 +66,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/default/rules.mk b/keyboards/xd75/keymaps/default/rules.mk
index d4e08cfb26..52a8f38d45 100644
--- a/keyboards/xd75/keymaps/default/rules.mk
+++ b/keyboards/xd75/keymaps/default/rules.mk
@@ -13,6 +13,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/dyn_macro_tap_dance/keymap.c b/keyboards/xd75/keymaps/dyn_macro_tap_dance/keymap.c
index 52cae7f715..594e5c41cf 100644
--- a/keyboards/xd75/keymaps/dyn_macro_tap_dance/keymap.c
+++ b/keyboards/xd75/keymaps/dyn_macro_tap_dance/keymap.c
@@ -114,10 +114,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/dyn_macro_tap_dance/rules.mk b/keyboards/xd75/keymaps/dyn_macro_tap_dance/rules.mk
index 64484d3eee..7708eba6a1 100644
--- a/keyboards/xd75/keymaps/dyn_macro_tap_dance/rules.mk
+++ b/keyboards/xd75/keymaps/dyn_macro_tap_dance/rules.mk
@@ -13,8 +13,5 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
TAP_DANCE_ENABLE = yes
+
diff --git a/keyboards/xd75/keymaps/emilyh/keymap.c b/keyboards/xd75/keymaps/emilyh/keymap.c
index 034bb55ac8..04c239636d 100644
--- a/keyboards/xd75/keymaps/emilyh/keymap.c
+++ b/keyboards/xd75/keymaps/emilyh/keymap.c
@@ -164,10 +164,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
},
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/emilyh/rules.mk b/keyboards/xd75/keymaps/emilyh/rules.mk
index d4e08cfb26..52a8f38d45 100644
--- a/keyboards/xd75/keymaps/emilyh/rules.mk
+++ b/keyboards/xd75/keymaps/emilyh/rules.mk
@@ -13,6 +13,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/fabian/rules.mk b/keyboards/xd75/keymaps/fabian/rules.mk
index f1ae8d44a1..8831f2d625 100644
--- a/keyboards/xd75/keymaps/fabian/rules.mk
+++ b/keyboards/xd75/keymaps/fabian/rules.mk
@@ -32,6 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/french/keymap.c b/keyboards/xd75/keymaps/french/keymap.c
index a5d14674a9..1ffec2202e 100644
--- a/keyboards/xd75/keymaps/french/keymap.c
+++ b/keyboards/xd75/keymaps/french/keymap.c
@@ -54,7 +54,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{ RESET, FR_EMPT, FR_EMPT, FR_TRANS, FR_EMPT, FR_EMPT, FR_EMPT, FR_EMPT, FR_EMPT, FR_EMPT, FR_0, FR_DOT, FR_ENTK, FR_EMPT, BL_STEP },
},
};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
diff --git a/keyboards/xd75/keymaps/french/rules.mk b/keyboards/xd75/keymaps/french/rules.mk
index dfd79792fa..324d9ebd05 100644
--- a/keyboards/xd75/keymaps/french/rules.mk
+++ b/keyboards/xd75/keymaps/french/rules.mk
@@ -15,6 +15,3 @@
RGBLIGHT_ENABLE = no
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/germanized/rules.mk b/keyboards/xd75/keymaps/germanized/rules.mk
index f57fb8c54e..ab81a53609 100644
--- a/keyboards/xd75/keymaps/germanized/rules.mk
+++ b/keyboards/xd75/keymaps/germanized/rules.mk
@@ -33,6 +33,3 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # Enable Tap Dancing
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/kim-kim-xd73/keymap.c b/keyboards/xd75/keymaps/kim-kim-xd73/keymap.c
index 19f13ed322..8820b4ef50 100644
--- a/keyboards/xd75/keymaps/kim-kim-xd73/keymap.c
+++ b/keyboards/xd75/keymaps/kim-kim-xd73/keymap.c
@@ -118,10 +118,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/kim-kim-xd73/rules.mk b/keyboards/xd75/keymaps/kim-kim-xd73/rules.mk
index 7e4ed0837b..4c894d7973 100644
--- a/keyboards/xd75/keymaps/kim-kim-xd73/rules.mk
+++ b/keyboards/xd75/keymaps/kim-kim-xd73/rules.mk
@@ -20,6 +20,3 @@
#
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/kim-kim/keymap.c b/keyboards/xd75/keymaps/kim-kim/keymap.c
index 0ec506e179..c67ce22871 100644
--- a/keyboards/xd75/keymaps/kim-kim/keymap.c
+++ b/keyboards/xd75/keymaps/kim-kim/keymap.c
@@ -118,10 +118,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/xd75/keymaps/kim-kim/rules.mk b/keyboards/xd75/keymaps/kim-kim/rules.mk
index 7e4ed0837b..4c894d7973 100644
--- a/keyboards/xd75/keymaps/kim-kim/rules.mk
+++ b/keyboards/xd75/keymaps/kim-kim/rules.mk
@@ -20,6 +20,3 @@
#
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/kloki/keymap.c b/keyboards/xd75/keymaps/kloki/keymap.c
index 62023cf70d..340d9a8dc6 100644
--- a/keyboards/xd75/keymaps/kloki/keymap.c
+++ b/keyboards/xd75/keymaps/kloki/keymap.c
@@ -64,9 +64,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{ _______, _______, _______, _______, _______,_______,_______, _______, _______, _______,_______,_______, _______, _______, _______ },
}
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
diff --git a/keyboards/xd75/keymaps/kloki/rules.mk b/keyboards/xd75/keymaps/kloki/rules.mk
index d4e08cfb26..52a8f38d45 100644
--- a/keyboards/xd75/keymaps/kloki/rules.mk
+++ b/keyboards/xd75/keymaps/kloki/rules.mk
@@ -13,6 +13,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/markus/rules.mk b/keyboards/xd75/keymaps/markus/rules.mk
index febb446f89..d0ed9a73ae 100644
--- a/keyboards/xd75/keymaps/markus/rules.mk
+++ b/keyboards/xd75/keymaps/markus/rules.mk
@@ -21,6 +21,3 @@ API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/mtdjr/rules.mk b/keyboards/xd75/keymaps/mtdjr/rules.mk
index 28462ff160..6b7d69d4f2 100644
--- a/keyboards/xd75/keymaps/mtdjr/rules.mk
+++ b/keyboards/xd75/keymaps/mtdjr/rules.mk
@@ -13,10 +13,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
BACKLIGHT_ENABLE = yes
TAP_DANCE_ENABLE = yes
RGBLIGHT_ENABLE = yes
+
diff --git a/keyboards/xd75/keymaps/skewwhiffy/keymap.c b/keyboards/xd75/keymaps/skewwhiffy/keymap.c
index 33f3868084..ab0213862c 100644
--- a/keyboards/xd75/keymaps/skewwhiffy/keymap.c
+++ b/keyboards/xd75/keymaps/skewwhiffy/keymap.c
@@ -76,18 +76,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | A | R | S | T | D | | | | | | H | N | E | I | O |
* |--------------------------------------------------------------------------------------------------------------------------------------|
- * | Z | X | C | V | B | | | | | | K | M | , | . | / |
+ * | Z | X | C | V | B | | | UP | | | K | M | , | . | / |
* | SHIFT | NUMBER | SYMBOL | NAV | | | | | | | | NAV | SYMBOL | FUNC | SHIFT |
* |--------------------------------------------------------------------------------------------------------------------------------------|
- * | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | | | | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT |
+ * | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | LEFT | DOWN | RIGHT | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT |
* .--------------------------------------------------------------------------------------------------------------------------------------.
*/
[cm] = LAYOUT_ortho_5x15( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, _______, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN, \
UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, _______, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O , \
- _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, _______, _______, _______, UK_K, _M_NAR, _COM_SY, _DOT_NB, _SLSH , \
- UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, _______, _______, _______, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT \
+ _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, UK_UP, _______, _______, UK_K, _M_NAR, _COM_SY, _DOT_NB, _SLSH , \
+ UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, UK_LEFT, UK_DOWN, UK_RGHT, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT \
),
/* Dvorak
diff --git a/keyboards/xd75/keymaps/skewwhiffy/rules.mk b/keyboards/xd75/keymaps/skewwhiffy/rules.mk
index d4e08cfb26..52a8f38d45 100644
--- a/keyboards/xd75/keymaps/skewwhiffy/rules.mk
+++ b/keyboards/xd75/keymaps/skewwhiffy/rules.mk
@@ -13,6 +13,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/xd75/keymaps/tdl-jturner/rules.mk b/keyboards/xd75/keymaps/tdl-jturner/rules.mk
index 186b452fc6..996d77045e 100644
--- a/keyboards/xd75/keymaps/tdl-jturner/rules.mk
+++ b/keyboards/xd75/keymaps/tdl-jturner/rules.mk
@@ -13,11 +13,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
TAP_DANCE_ENABLE = yes
MOUSEKEY_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
+
diff --git a/keyboards/ymd75/README.md b/keyboards/ymd75/README.md
index 6b1bce6a5b..eed6ce13ee 100644
--- a/keyboards/ymd75/README.md
+++ b/keyboards/ymd75/README.md
@@ -25,7 +25,7 @@ $ make ymd75:default:program
It should detect the keyboard and set it to bootloader mode automatically, prior to flashing firmware.
I've found that I need to remove the previous build/file before making a new one as it doesn't overwrite it; but this might just be my personal experience.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Note that this is a complete replacement for the firmware, so you won't be
using Bootmapper Client to change any keyboard settings, since not all the
diff --git a/keyboards/ymd75/rules.mk b/keyboards/ymd75/rules.mk
index c9baf13167..9697a76f1e 100644
--- a/keyboards/ymd75/rules.mk
+++ b/keyboards/ymd75/rules.mk
@@ -57,10 +57,6 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
CUSTOM_MATRIX = yes
SRC = matrix.c i2c.c backlight.c
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# programming options
PROGRAM_CMD = ./keyboards/ps2avrGB/program $(TARGET).hex
diff --git a/keyboards/ymd96/keymaps/epx/keymap.c b/keyboards/ymd96/keymaps/epx/keymap.c
new file mode 100644
index 0000000000..b9d3f6df22
--- /dev/null
+++ b/keyboards/ymd96/keymaps/epx/keymap.c
@@ -0,0 +1,87 @@
+/*
+Base Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+ Copyright 2017 Andrew Novak <ndrw.nvk@gmail.com>
+Modified Copyright 2018 Elvis Pfutzenreuter <elvis.pfutzenreuter@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public LicensezZZ
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+#define _x_ KC_TRNS
+#define _DEFLT 0
+#define _AR 1
+#define _RAISE 2
+
+#define KEYMAP KEYMAP_DEFAULT
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0, default layer
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | || > | << | >> | vol+ | vol- | Bkspc |
+ * | ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BkSpc |NumLck| / | * | - |
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | { | } | \ | 7 | 8 | 9 | |
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Return | 4 | 5 | 6 | + |
+ * | LShft | Z | X | C | V | B | N | M | , | . | / | RShft | 1 | 2 | 3 | |
+ * | Ctrl | Alt | Win | Space | Win | Fn | Alt | Ctrl | 0 | . | Enter |
+ *
+ * Layout is inspired on Model F.
+ * Extra keys on top right, as well as some seldom-used keys, are media keys in default layer.
+ * Num Lock toogles layer, so the numeric block works as a Model F navigation block in a Mac.
+ * (Fn-Num Lock operates as conventional Num Lock in case the keyboard needs to be used with Windows or Linux.)
+ * Caps Lock operates normally but it takes FN to work, the key is Ctrl by default, like in Model F.
+ */
+ [_DEFLT] = KEYMAP(
+ 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_MPLY, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_BSPC, \
+ 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, TO(_AR), KC_PSLS, KC_PAST, KC_PMNS, \
+ 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_P7, KC_P8, KC_P9, KC_PPLS, \
+ 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, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ 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_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI, KC_NO, MO(_RAISE), KC_RALT, KC_RCTL, KC_P0, KC_P0, KC_PDOT \
+ ),
+
+ /* Layer 1, Num Lock activated
+ * ...
+ * ...
+ * ... | Home | Up | Pg Up | |
+ * ... | Left | (no) | Right | + |
+ * ... | End | Down | Pg Dn | |
+ * ... | Ins | Del | Enter |
+ */
+ [_AR] = KEYMAP(
+ _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, \
+ _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, TO(_DEFLT), _x_, _x_, _x_, \
+ _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, KC_HOME, KC_UP, KC_PGUP, _x_, \
+ _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, KC_LEFT, KC_NO, KC_RGHT, _x_, \
+ _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, KC_END, KC_DOWN, KC_PGDN, _x_, \
+ _x_, _x_,_x_, _x_, _x_, _x_, _x_, _x_, _x_, KC_INS, KC_INS, KC_DEL \
+ ),
+
+ /* Layer 2, raise layer
+ * | | | | | | | | | | | | | | PrtSc |Pause|ScrLck| stop | mute | Del |
+ * | | RGB Toggle | RGB Hue - | RGB Hue + | | | | | | | | | | Del |NumLck| | | |
+ * | | RGB Mode + | RGB Satu- | RGB Satu+ | | | | | | | | | | | | | | |
+ * | Caps Lck | RGB Mode - | RGB Brgt- | RGB Brgt+ | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | | | |
+ * | | | | | Win Menu | | | | | | |
+ */
+ [_RAISE] = KEYMAP(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_PAUS, KC_SLCK, KC_MUTE, KC_MSTP, KC_DEL, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_NLCK, _______, _______, _______, \
+ _______, RGB_TOG, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_CAPS, RGB_MOD, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, RGB_RMOD,RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______,_______, _______, KC_APP, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/zeal60/rgb_backlight.c b/keyboards/zeal60/rgb_backlight.c
index 64b95059e1..a965a13bbd 100644
--- a/keyboards/zeal60/rgb_backlight.c
+++ b/keyboards/zeal60/rgb_backlight.c
@@ -15,27 +15,44 @@
*/
#if RGB_BACKLIGHT_ENABLED
-#if defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_ZEAL65) || defined (RGB_BACKLIGHT_M60_A) || defined(RGB_BACKLIGHT_M6_B) || defined(RGB_BACKLIGHT_KOYU)
+#if defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_ZEAL65) || defined (RGB_BACKLIGHT_M60_A) || defined(RGB_BACKLIGHT_M6_B) || defined(RGB_BACKLIGHT_KOYU) || defined(RGB_BACKLIGHT_HS60)
#else
#error None of the following was defined: RGB_BACKLIGHT_ZEAL60, RGB_BACKLIGHT_ZEAL65, RGB_BACKLIGHT_M60_A, RGB_BACKLIGHT_M6_B, RGB_BACKLIGHT_KOYU
#endif
+#ifndef MAX
+ #define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
+#endif
+
+#ifndef MIN
+ #define MIN(a,b) ((a) < (b)? (a): (b))
+#endif
+
#include "quantum.h"
#include "rgb_backlight.h"
#include "rgb_backlight_api.h"
#include "rgb_backlight_keycodes.h"
+#if !defined(RGB_BACKLIGHT_HS60)
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
+#include "drivers/avr/i2c_master.h"
+#else
+#include "ch.h"
+#include "hal.h"
+#include "drivers/arm/i2c_master.h"
+#include "tmk_core/common/eeprom.h"
+#endif
#include "progmem.h"
-
#include "quantum/color.h"
-#include "drivers/avr/i2c_master.h"
#if defined (RGB_BACKLIGHT_M6_B)
#include "drivers/issi/is31fl3218.h"
#define BACKLIGHT_LED_COUNT 6
+#elif defined (RGB_BACKLIGHT_HS60)
+#include "drivers/issi/is31fl3733.h"
+#define BACKLIGHT_LED_COUNT 64
#else
#include "drivers/issi/is31fl3731.h"
#define BACKLIGHT_LED_COUNT 72
@@ -84,7 +101,88 @@ uint8_t g_key_hit[BACKLIGHT_LED_COUNT];
// Ticks since any key was last hit.
uint32_t g_any_key_hit = 0;
-#if !defined(RGB_BACKLIGHT_M6_B)
+#if defined(RGB_BACKLIGHT_HS60)
+
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// ADDR_2 is not needed. it is here as a dummy
+#define ISSI_ADDR_1 0x50
+#define ISSI_ADDR_2 0x50
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, B_1, A_1, C_1}, //LA1
+ {0, E_1, D_1, F_1}, //LA2
+ {0, H_1, G_1, I_1}, //LA3
+ {0, K_1, J_1, L_1}, //LA4
+ {0, B_2, A_2, C_2}, //LA5
+ {0, E_2, D_2, F_2}, //LA6
+ {0, H_2, G_2, I_2}, //LA7
+ {0, K_2, J_2, L_2}, //LA8
+ {0, B_3, A_3, C_3}, //LA9
+ {0, E_3, D_3, F_3}, //LA10
+ {0, H_3, G_3, I_3}, //LA11
+ {0, K_3, J_3, L_3}, //LA12
+ {0, B_4, A_4, C_4}, //LA13
+ {0, E_4, D_4, F_4}, //LA14
+ {0, H_4, G_4, I_4}, //LA15
+ {0, K_4, J_4, L_4}, //LA16
+ {0, B_5, A_5, C_5}, //LA17
+ {0, E_5, D_5, F_5}, //LA18
+ {0, H_5, G_5, I_5}, //LA19
+ {0, K_5, J_5, L_5}, //LA20
+ {0, B_6, A_6, C_6}, //LA21
+ {0, E_6, D_6, F_6}, //LA22
+ {0, H_6, G_6, I_6}, //LA23
+ {0, K_6, J_6, L_6}, //LA24
+ {0, B_7, A_7, C_7}, //LA25
+ {0, E_7, D_7, F_7}, //LA26
+ {0, H_7, G_7, I_7}, //LA27
+ {0, K_7, J_7, L_7}, //LA28
+ {0, B_8, A_8, C_8}, //LA29
+ {0, E_8, D_8, F_8}, //LA30
+ {0, H_8, G_8, I_8}, //LA31
+ {0, K_8, J_8, L_8}, //LA32
+ {0, B_9, A_9, C_9}, //LA33
+ {0, E_9, D_9, F_9}, //LA34
+ {0, H_9, G_9, I_9}, //LA35
+ {0, K_9, J_9, L_9}, //LA36
+ {0, B_10, A_10, C_10}, //LA37
+ {0, E_10, D_10, F_10}, //LA38
+ {0, H_10, G_10, I_10}, //LA39
+ {0, K_10, J_10, L_10}, //LA40
+ {0, B_11, A_11, C_11}, //LA41
+ {0, E_11, D_11, F_11}, //LA42
+ {0, H_11, G_11, I_11}, //LA43
+ {0, K_11, J_11, L_11}, //LA44
+ {0, B_12, A_12, C_12}, //LA45
+ {0, E_12, D_12, F_12}, //LA46
+ {0, H_12, G_12, I_12}, //LA47
+ {0, K_12, J_12, L_12}, //LA48
+ {0, B_13, A_13, C_13}, //LA49
+ {0, E_13, D_13, F_13}, //LA50
+ {0, H_13, G_13, I_13}, //LA51
+ {0, K_13, J_13, L_13}, //LA52
+ {0, B_14, A_14, C_14}, //LA53
+ {0, E_14, D_14, F_14}, //LA54
+ {0, H_14, G_14, I_14}, //LA55
+ {0, K_14, J_14, L_14}, //LA56
+ {0, B_15, A_15, C_15}, //LA57
+ {0, E_15, D_15, F_15}, //LA58
+ {0, H_15, G_15, I_15}, //LA59
+ {0, K_15, J_15, L_15}, //LA60
+ {0, B_16, A_16, C_16}, //LA61
+ {0, E_16, D_16, F_16}, //LA62
+ {0, H_16, G_16, I_16}, //LA63
+ {0, K_16, J_16, L_16}, //LA64
+};
+
+#elif !defined(RGB_BACKLIGHT_M6_B)
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
#define ISSI_ADDR_1 0x74
@@ -272,6 +370,85 @@ const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
{0,27}, {0,64}, {0,101}, {0,137}, {0,174}, {255,233}, {228,201}, {235,255}, {237,255},
{195,128}, {206,136}, {215,152}, {222,175}, {205,234}, {209,255}, {214,255}, {219,255}, {223,255}
};
+#elif defined (RGB_BACKLIGHT_HS60) && defined (HS60_ANSI)
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA1..LA47
+ {0,0}, {4,16}, {6,32}, {10,48}, {16,0}, {24,16}, {28,32}, {36,48}, {32,0}, {40,16}, {44,32}, {52,48},
+ {48,0}, {56,16}, {60,32}, {68,48}, {64,0}, {72,16}, {76,32}, {84,48}, {80,0}, {88,16}, {92,32}, {100,48},
+ {96,0}, {104,16}, {108,32}, {116,48}, {112,0}, {120,16}, {124,32}, {132,48}, {128,0}, {136,16}, {140,32},
+ {148,48}, {144,0}, {152,16}, {156,32}, {164,48}, {160,0}, {168,16}, {172,32}, {180,48}, {176,0}, {184, 16}, {188,32},
+ {255,255},// LA48 does not exist, dummy
+ // LA49..LA50
+ {192,0}, {200,16},
+ {255,255},// LA51 does not exit, dummy
+ // LA52..LA60
+ {210,48}, {216,0}, {220,16}, {214,32}, {222,64}, {2,64}, {22,64}, {42,64}, {102,64},
+ {255,255},// LA61 does not exit, dummy
+ {162,64}, {182,64}, {202,64}
+};
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA1..LA47
+ {96,255}, {109,255}, {128,242}, {148,255}, {93,255}, {105,238}, {128,192}, {154,216}, {89,255}, {101,208}, {128,155}, {159,188},
+ {85,255}, {96,181}, {128,119}, {165,163}, {81,255}, {89,157}, {128,82}, {173,143}, {75,255}, {81,139}, {128,46}, {183,131},
+ {70,255}, {70,129}, {129,9}, {195,128}, {64,255}, {58,129}, {255,27}, {206,136}, {58,255}, {47,139}, {255,64}, {215,152},
+ {53,255}, {39,157}, {255,101}, {222,175}, {47,255}, {32,181}, {255,137}, {228,201}, {43,255}, {27,208}, {255, 174},
+ {255,255},// LA48 does not exist, dummy
+ // LA49..LA50
+ {39,255}, {23,238},
+ {255,255},// LA51 does not exit, dummy
+ // LA52..LA60
+ {235,255}, {33,255}, {19,255}, {255,233}, {224,255}, {160,255}, {164,255}, {169,255}, {188,255},
+ {255,255},// LA61 does not exit, dummy
+ {209,255}, {215,255}, {220,255}
+};
+#elif defined (RGB_BACKLIGHT_HS60) && defined (HS60_HHKB)
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA1..LA60
+ {0,0}, {4,16}, {6,32}, {10,48}, {16,0}, {24,16}, {28,32}, {36,48}, {32,0}, {40,16}, {44,32}, {52,48},
+ {48,0}, {56,16}, {60,32}, {68,48}, {64,0}, {72,16}, {76,32}, {84,48}, {80,0}, {88,16}, {92,32}, {100,48},
+ {96,0}, {104,16}, {108,32}, {116,48}, {112,0}, {120,16}, {124,32}, {132,48}, {128,0}, {136,16}, {140,32},
+ {148,48}, {144,0}, {152,16}, {156,32}, {164,48}, {160,0}, {168,16}, {172,32}, {180,48}, {176,0}, {184, 16}, {188,32},
+ {224,0}, {192,0}, {200,16}, {202,48}, {224,48}, {208,0}, {220,16}, {214,32}, {220,64}, {4,64}, {24,64}, {44,64}, {112,64},
+ {255,255}, {255,255}, // LA61..LA62 does not exit, dummy
+ // LA63..LA64
+ {180,64}, {200,64}
+};
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA1..LA60
+ {96,255}, {109,255}, {128,242}, {148,255}, {93,255}, {105,238}, {128,192}, {154,216}, {89,255}, {101,208}, {128,155}, {159,188},
+ {85,255}, {96,181}, {128,119}, {165,163}, {81,255}, {89,157}, {128,82}, {173,143}, {75,255}, {81,139}, {128,46}, {183,131},
+ {70,255}, {70,129}, {129,9}, {195,128}, {64,255}, {58,129}, {255,27}, {206,136}, {58,255}, {47,139}, {255,64}, {215,152},
+ {53,255}, {39,157}, {255,101}, {222,175}, {47,255}, {32,181}, {255,137}, {228,201}, {43,255}, {27,208}, {255, 174}, {32,255},
+ {39,255}, {23,238}, {233,242}, {237,255}, {35,255}, {19,255}, {255,233}, {223,255}, {161,255}, {165,255}, {170,255}, {192,255},
+ {255,255}, {255,255}, // LA61..LA62 does not exit, dummy
+ // LA63..LA64
+ {214,255}, {219,255}
+};
+#elif defined (RGB_BACKLIGHT_HS60) //HS60_ISO
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA1..LA50
+ {0,0}, {4,16}, {6,32}, {2,48}, {16,0}, {24,16}, {28,32}, {36,48}, {32,0}, {40,16}, {44,32}, {52,48}, {48,0},
+ {56,16}, {60,32}, {68,48}, {64,0}, {72,16}, {76,32}, {84,48}, {80,0}, {88,16}, {92,32}, {100,48}, {96,0}, {104,16},
+ {108,32}, {116,48}, {112,0}, {120,16}, {124,32}, {132,48}, {128,0}, {136,16}, {140,32}, {148,48}, {144,0}, {152,16},
+ {156,32}, {164,48}, {160,0}, {168,16}, {172,32}, {180,48}, {176,0}, {184, 16}, {188,32}, {20,48}, {192,0}, {200,16},
+ {255,255},// LA51 does not exit, dummy
+ // LA52..LA60
+ {210,48}, {216,0}, {220,16}, {222,24}, {222,64}, {2,64}, {22,64}, {42,64}, {102,64},
+ {255,255},// LA61 does not exit, dummy
+ {162,64}, {182,64}, {202,64}
+};
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA1..LA50
+ {96,255}, {109,255}, {128,242}, {147,255}, {93,255}, {105,238}, {128,192}, {154,216}, {89,255}, {101,208}, {128,155}, {159,188}, {85,255},
+ {96,181}, {128,119}, {165,163}, {81,255}, {89,157}, {128,82}, {173,143}, {75,255}, {81,139}, {128,46}, {183,131}, {70,255}, {70,129},
+ {129,9}, {195,128}, {64,255}, {58,129}, {255,27}, {206,136}, {58,255}, {47,139}, {255,64}, {215,152}, {53,255}, {39,157}, {255,101},
+ {222,175}, {47,255}, {32,181}, {255,137}, {228,201}, {43,255}, {27,208}, {255, 174}, {150,246}, {39,255}, {23,238},
+ {255,255},// LA51 does not exit, dummy
+ // LA52..LA60
+ {235,255}, {33,255}, {19,255}, {10,255}, {224,255}, {160,255}, {164,255}, {169,255}, {188,255},
+ {255,255},// LA61 does not exit, dummy
+ {209,255}, {215,255}, {220,255}
+};
#elif defined (RGB_BACKLIGHT_M6_B)
// M6-B is really simple:
// 0 3 5
@@ -397,6 +574,48 @@ const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
{ 36+16, 36+15, 36+5, 36+4, 36+3, 36+2, 36+1, 54+9, 54+10, 54+11, 54+12, 54+6, 54+7, 54+8 },
{ 36+17, 36+8, 36+7, 36+6, 255, 255, 255, 36+0, 255, 54+13, 54+14, 54+15, 54+16, 54+17 }
};
+#elif defined (RGB_BACKLIGHT_HS60) && defined (HS60_ANSI)
+//
+// LA1, LA5, LA9, LA13, LA17, LA21, LA25, LA29, LA33, LA37, LA41, LA45, LA49, LA53,
+// LA2, LA6, LA10, LA14, LA18, LA22, LA26, LA30, LA34, LA38, LA42, LA46, LA50, ---,
+// LA3, LA7, LA11, LA15, LA19, LA23, LA27, LA31, LA35, LA39, LA43, LA47, LA54, LA55,
+// LA4, ---, LA8, LA12, LA16, LA20, LA24, LA28, LA32, LA36, LA40, LA44, ---, LA52,
+// LA57, LA58, LA59, ---, ---, ---, LA60, ---, ---, ---, LA62, LA63, LA64, LA56
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+ { 1-1, 5-1, 9-1, 13-1, 17-1, 21-1, 25-1, 29-1, 33-1, 37-1, 41-1, 45-1, 49-1, 53-1 },
+ { 2-1, 6-1, 10-1, 14-1, 18-1, 22-1, 26-1, 30-1, 34-1, 38-1, 42-1, 46-1, 50-1, 255 },
+ { 3-1, 7-1, 11-1, 15-1, 19-1, 23-1, 27-1, 31-1, 35-1, 39-1, 43-1, 47-1, 54-1, 55-1 },
+ { 4-1, 255, 8-1, 12-1, 16-1, 20-1, 24-1, 28-1, 32-1, 36-1, 40-1, 44-1, 255, 52-1 },
+ { 57-1, 58-1, 59-1, 255, 255, 255, 60-1, 255, 255, 255, 62-1, 63-1, 64-1, 56-1 }
+};
+#elif defined (RGB_BACKLIGHT_HS60) && defined (HS60_HHKB)
+//
+// LA1, LA5, LA9, LA13, LA17, LA21, LA25, LA29, LA33, LA37, LA41, LA45, LA49, LA53,
+// LA2, LA6, LA10, LA14, LA18, LA22, LA26, LA30, LA34, LA38, LA42, LA46, LA50, LA48,
+// LA3, LA7, LA11, LA15, LA19, LA23, LA27, LA31, LA35, LA39, LA43, LA47, LA54, LA55,
+// LA4, ---, LA8, LA12, LA16, LA20, LA24, LA28, LA32, LA36, LA40, LA44, LA51, LA52,
+// LA57, LA58, LA59, ---, ---, ---, LA60, ---, ---, ---, ---, LA63, LA64, LA56
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+ { 1-1, 5-1, 9-1, 13-1, 17-1, 21-1, 25-1, 29-1, 33-1, 37-1, 41-1, 45-1, 49-1, 53-1 },
+ { 2-1, 6-1, 10-1, 14-1, 18-1, 22-1, 26-1, 30-1, 34-1, 38-1, 42-1, 46-1, 50-1, 48-1 },
+ { 3-1, 7-1, 11-1, 15-1, 19-1, 23-1, 27-1, 31-1, 35-1, 39-1, 43-1, 47-1, 54-1, 55-1 },
+ { 4-1, 255, 8-1, 12-1, 16-1, 20-1, 24-1, 28-1, 32-1, 36-1, 40-1, 44-1, 51-1, 52-1 },
+ { 57-1, 58-1, 59-1, 255, 255, 255, 60-1, 255, 255, 255, 255, 63-1, 64-1, 56-1 }
+};
+#elif defined (RGB_BACKLIGHT_HS60) //HS60_ISO
+//
+// LA1, LA5, LA9, LA13, LA17, LA21, LA25, LA29, LA33, LA37, LA41, LA45, LA49, LA53,
+// LA2, LA6, LA10, LA14, LA18, LA22, LA26, LA30, LA34, LA38, LA42, LA46, LA50, ---,
+// LA3, LA7, LA11, LA15, LA19, LA23, LA27, LA31, LA35, LA39, LA43, LA47, LA54, LA55,
+// LA4, LA48, LA8, LA12, LA16, LA20, LA24, LA28, LA32, LA36, LA40, LA44, ---, LA52,
+// LA57, LA58, LA59, ---, ---, ---, LA60, ---, ---, ---, LA62, LA63, LA64, LA56
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+ { 1-1, 5-1, 9-1, 13-1, 17-1, 21-1, 25-1, 29-1, 33-1, 37-1, 41-1, 45-1, 49-1, 53-1 },
+ { 2-1, 6-1, 10-1, 14-1, 18-1, 22-1, 26-1, 30-1, 34-1, 38-1, 42-1, 46-1, 50-1, 255 },
+ { 3-1, 7-1, 11-1, 15-1, 19-1, 23-1, 27-1, 31-1, 35-1, 39-1, 43-1, 47-1, 54-1, 55-1 },
+ { 4-1, 48-1, 8-1, 12-1, 16-1, 20-1, 24-1, 28-1, 32-1, 36-1, 40-1, 44-1, 255, 52-1 },
+ { 57-1, 58-1, 59-1, 255, 255, 255, 60-1, 255, 255, 255, 62-1, 63-1, 64-1, 56-1 }
+};
#elif defined (RGB_BACKLIGHT_M6_B)
// M6-B is really simple:
// 0 3 5
@@ -419,6 +638,9 @@ void backlight_update_pwm_buffers(void)
{
#if defined (RGB_BACKLIGHT_M6_B)
IS31FL3218_update_pwm_buffers();
+#elif defined (RGB_BACKLIGHT_HS60)
+ IS31FL3733_update_pwm_buffers( ISSI_ADDR_1, ISSI_ADDR_2 );
+ IS31FL3733_update_led_control_registers( ISSI_ADDR_1, ISSI_ADDR_2 );
#else
IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, ISSI_ADDR_2 );
IS31FL3731_update_led_control_registers( ISSI_ADDR_1, ISSI_ADDR_2 );
@@ -429,6 +651,8 @@ void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
{
#if defined (RGB_BACKLIGHT_M6_B)
IS31FL3218_set_color( index, red, green, blue );
+#elif defined (RGB_BACKLIGHT_HS60)
+ IS31FL3733_set_color( index, red, green, blue );
#else
IS31FL3731_set_color( index, red, green, blue );
#endif
@@ -438,6 +662,8 @@ void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
{
#if defined (RGB_BACKLIGHT_M6_B)
IS31FL3218_set_color_all( red, green, blue );
+#elif defined (RGB_BACKLIGHT_HS60)
+ IS31FL3733_set_color_all( red, green, blue );
#else
IS31FL3731_set_color_all( red, green, blue );
#endif
@@ -452,6 +678,7 @@ void backlight_set_key_hit(uint8_t row, uint8_t column)
g_any_key_hit = 0;
}
+#if !defined(RGB_BACKLIGHT_HS60)
// This is (F_CPU/1024) / 20 Hz
// = 15625 Hz / 20 Hz
// = 781
@@ -487,6 +714,29 @@ void backlight_timer_disable(void)
{
TIMSK3 &= ~_BV(OCIE3A);
}
+#else //STM32, use GPT with TIM4. Enable in halconf.h
+static void gpt_backlight_timer_task(GPTDriver *gptp);
+// Timer setup at 200Khz, callback at 10k ticks = 20Hz
+static GPTConfig gpt4cfg1 = {
+ .frequency = 200000U,
+ .callback = gpt_backlight_timer_task
+};
+
+void backlight_timer_init(void)
+{
+ gptStart(&GPTD4, &gpt4cfg1);
+}
+
+void backlight_timer_enable(void)
+{
+ gptStartContinuous(&GPTD4, 10000);
+}
+
+void backlight_timer_disable(void)
+{
+ gptStopTimer(&GPTD4);
+}
+#endif //!defined(RGB_BACKLIGHT_HS60)
void backlight_set_suspend_state(bool state)
{
@@ -921,7 +1171,11 @@ void backlight_effect_indicators(void)
}
}
+#if !defined(RGB_BACKLIGHT_HS60)
ISR(TIMER3_COMPA_vect)
+#else //STM32 interrupt
+static void gpt_backlight_timer_task(GPTDriver *gptp)
+#endif
{
// delay 1 second before driving LEDs or doing anything else
static uint8_t startup_tick = 0;
@@ -1378,6 +1632,27 @@ void backlight_init_drivers(void)
#if defined(RGB_BACKLIGHT_M6_B)
IS31FL3218_init();
+#elif defined(RGB_BACKLIGHT_HS60)
+ IS31FL3733_init( ISSI_ADDR_1 );
+
+ for ( int index = 0; index < BACKLIGHT_LED_COUNT; index++ )
+ {
+#if defined (HS60_ANSI)
+ bool enabled = !( ( index == 48-1 ) || //LA48
+ ( index == 51-1 ) || //LA51
+ ( index == 61-1 ) ); //LA61
+#elif defined (HS60_HHKB)
+ bool enabled = !( ( index == 61-1 ) || //LA61
+ ( index == 62-1 ) ); //LA62
+#else //HS60_ISO
+ bool enabled = !( ( index == 51-1 ) || //LA51
+ ( index == 61-1 ) ); //LA61
+#endif
+ // This only caches it for later
+ IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
+ }
+ // This actually updates the LED drivers
+ IS31FL3733_update_led_control_registers( ISSI_ADDR_1, ISSI_ADDR_2 );
#else
IS31FL3731_init( ISSI_ADDR_1 );
IS31FL3731_init( ISSI_ADDR_2 );
@@ -1668,7 +1943,6 @@ void backlight_test_led( uint8_t index, bool red, bool green, bool blue )
}
}
}
-#endif // defined(RGB_DEBUGGING_ONLY)
void backlight_debug_led( bool state )
{
@@ -1685,5 +1959,6 @@ void backlight_debug_led( bool state )
PORTE &= ~(1<<6);
}
}
+#endif // defined(RGB_DEBUGGING_ONLY)
#endif // BACKLIGHT_ENABLED
diff --git a/keyboards/zen/keymaps/default/rules.mk b/keyboards/zen/keymaps/default/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/zen/keymaps/default/rules.mk
+++ b/keyboards/zen/keymaps/default/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/zen/keymaps/jwlawrence/rules.mk b/keyboards/zen/keymaps/jwlawrence/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/zen/keymaps/jwlawrence/rules.mk
+++ b/keyboards/zen/keymaps/jwlawrence/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/zen/keymaps/xyverz/rules.mk b/keyboards/zen/keymaps/xyverz/rules.mk
index 22b6ec4766..73142a1680 100644
--- a/keyboards/zen/keymaps/xyverz/rules.mk
+++ b/keyboards/zen/keymaps/xyverz/rules.mk
@@ -1,6 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/zen/readme.md b/keyboards/zen/readme.md
index beb5e13ac1..0fb0ffb3b6 100644
--- a/keyboards/zen/readme.md
+++ b/keyboards/zen/readme.md
@@ -17,4 +17,4 @@ Make example for this keyboard (after setting up your build environment):
make zen/rev1:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/zinc/keymaps/monks/rules.mk b/keyboards/zinc/keymaps/monks/rules.mk
index a5335def87..eeabc004c3 100644
--- a/keyboards/zinc/keymaps/monks/rules.mk
+++ b/keyboards/zinc/keymaps/monks/rules.mk
@@ -90,11 +90,8 @@ endif
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
# Uncomment these for debugging
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
# $(info -- OPT_DEFS=$(OPT_DEFS))
# $(info )
+
diff --git a/keyboards/zlant/readme.md b/keyboards/zlant/readme.md
index 8f50e6d4c7..eaec140745 100644
--- a/keyboards/zlant/readme.md
+++ b/keyboards/zlant/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make zlant:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/layouts/community/ergodox/ab/keymap.c b/layouts/community/ergodox/ab/keymap.c
index 7bda0cd223..d8d7accdcb 100644
--- a/layouts/community/ergodox/ab/keymap.c
+++ b/layouts/community/ergodox/ab/keymap.c
@@ -105,9 +105,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/layouts/community/ergodox/alphadox/keymap.c b/layouts/community/ergodox/alphadox/keymap.c
index 8acd86b7ae..75784f7a91 100644
--- a/layouts/community/ergodox/alphadox/keymap.c
+++ b/layouts/community/ergodox/alphadox/keymap.c
@@ -73,9 +73,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {
case TEENSY:
diff --git a/layouts/community/ergodox/bepo_csa/keymap.c b/layouts/community/ergodox/bepo_csa/keymap.c
index 125301d443..8dfb95a337 100644
--- a/layouts/community/ergodox/bepo_csa/keymap.c
+++ b/layouts/community/ergodox/bepo_csa/keymap.c
@@ -362,9 +362,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
void hold_shift(void) {
register_code(KC_LSHIFT);
}
diff --git a/layouts/community/ergodox/berfarah/rules.mk b/layouts/community/ergodox/berfarah/rules.mk
index a873250372..abd95b5008 100644
--- a/layouts/community/ergodox/berfarah/rules.mk
+++ b/layouts/community/ergodox/berfarah/rules.mk
@@ -14,6 +14,3 @@ ifeq (${FORCE_NKRO},yes)
OPT_DEFS += -DFORCE_NKRO
endif
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/layouts/community/ergodox/colemak_code_friendly/keymap.c b/layouts/community/ergodox/colemak_code_friendly/keymap.c
new file mode 100644
index 0000000000..936ddbc2a5
--- /dev/null
+++ b/layouts/community/ergodox/colemak_code_friendly/keymap.c
@@ -0,0 +1,335 @@
+/* -*- Mode:C; c-basic-offset:2; tab-width:2; indent-tabs-mode:nil; evil-indent-convert-tabs:t; -*- */
+
+#include QMK_KEYBOARD_H
+
+//#define DYNAMIC_MACRO_SIZE 128
+
+#define LAYER_BASE 0 /* default layer */
+#define LAYER_NUM 1 /* numbers and symbols */
+#define LAYER_LNUM 2 /* Left side -> LAYER_NUM, Right side -> Shift + LAYER_BASE */
+#define LAYER_RNUM 3 /* Left side -> Shift + LAYER_BASE, Right side -> LAYER_NUM */
+
+enum custom_keycodes5 {
+ PLACEHOLDER = SAFE_RANGE, /* can always be here */
+
+ M_POINER, /* -> */
+ M_LAMBDA, /* => */
+ M_IN_CBR, /* {} */
+ M_IN_PRN, /* () */
+ M_IN_BRC, /* [] */
+ M_IN_ANG, /* <> */
+ M_NOT_EQL, /* != */
+ M_COL_EQL, /* := */
+ M_PLUS_EQL,/* += */
+
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ * .--------------------------------------------------. .--------------------------------------------------.
+ * | Grave | ! | @ | # | $ | % | ^ | | TG(1)| & | * | ( | ) | - | Bspc |
+ * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | F | P | G | = | | _ | J | L | U | Y | ; | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
+ * |--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
+ * | LShift |Z/LCtl|X/Supe| C | V |B/RAlt| | | |K/RAlt| M | , |./Supe|/ RCtl| RShift |
+ * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ * | LCtl |Super | Alt | [ | ] | | Left | Down | Up |Right | Del |
+ * '----------------------------------' '----------------------------------'
+ * .-------------. .-------------.
+ * | Home | End | | Ins |ScrLck|
+ * .------+------+------| |------+------+------.
+ * | | |PrnScr| | PgUp | | |
+ * | LNUM | Enter|------| |------| Space| RNUM |
+ * | | | Super| | PgDn | | |
+ * '--------------------' '--------------------'
+ */
+
+[LAYER_BASE] = LAYOUT_ergodox( /* layer 0 : default */
+ /* left hand */
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_EQL,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D,
+ KC_LSFT, LCTL_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, RALT_T(KC_B), KC_LCBR,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LBRC, KC_RBRC,
+
+ KC_HOME, KC_END,
+ KC_PSCR,
+ MO(LAYER_LNUM), KC_ENT, KC_LGUI,
+ /* right hand */
+ TG(1), KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS, KC_BSPC,
+ KC_UNDS, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
+ KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_RCBR, RALT_T(KC_K), KC_M, KC_COMM, LGUI_T(KC_DOT), RCTL_T(KC_SLSH), KC_RSFT,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL,
+ KC_INS, KC_SLCK,
+ KC_PGUP,
+ KC_PGDN, KC_SPC, MO(LAYER_RNUM)
+),
+/* Keymap 1: Numbers, Macro Record
+ *
+ * .--------------------------------------------------. .--------------------------------------------------.
+ * | | | | | | <> | | | | | * | ( | ) | - | |
+ * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | F12 | F11 | F10 | F9 | {} | | | = | => | 7 | 8 | 9 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | F8 | F7 | F6 | F5 | () |------| |------| -> | 4 | 5 | 6 | 0 | |
+ * |--------+------+------+------+------+------| | | Enter|------+------+------+------+------+--------|
+ * | | F4 | F3 | F2 | F1 | [] | | | | != | 1 | 2 | 3 | | |
+ * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ * | MUTE | VOLD | VOLU | | | | 0 | , | . | | |
+ * '----------------------------------' '----------------------------------'
+ * .-------------. .-------------.
+ * | | | | | Stop |
+ * .------+------+------| |------+------+------.
+ * | | |Start1| |Start2| | |
+ * | | |------| |------| | |
+ * | | |Play1 | |Play2 | | |
+ * '--------------------' '--------------------'
+ */
+[LAYER_NUM] = LAYOUT_ergodox(
+ /* left hand */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_IN_ANG, KC_TRNS,
+ KC_TRNS, KC_F12, KC_F11, KC_F10, KC_F9, M_IN_CBR, KC_TRNS,
+ KC_TRNS, KC_F8, KC_F7, KC_F6, KC_F5, M_IN_PRN,
+ KC_TRNS, KC_F4, KC_F3, KC_F2, KC_F1, M_IN_BRC, KC_TRNS,
+ KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ DYN_REC_START1,
+ KC_TRNS, KC_TRNS, DYN_MACRO_PLAY1,
+ /* right hand */
+ KC_TRNS, KC_TRNS, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS, KC_TRNS,
+ KC_EQL, M_LAMBDA, KC_7, KC_8, KC_9, KC_PLUS, KC_TRNS,
+ M_POINER, KC_4, KC_5, KC_6, KC_0, KC_TRNS,
+ KC_ENT, M_NOT_EQL, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS,
+ KC_0, KC_COMM, KC_DOT, KC_TRNS, KC_TRNS,
+ KC_TRNS, DYN_REC_STOP,
+ DYN_REC_START2,
+ DYN_MACRO_PLAY2, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Left side -> LAYER_NUM, Right side -> Shift + LAYER_BASE
+ *
+ * .--------------------------------------------------. .--------------------------------------------------.
+ * | | | | | | <> | | | TG(1)| & | * | ( | ) | - | Bspc |
+ * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | F12 | F11 | F10 | F9 | {} | | | _ | J | L | U | Y | ; | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | F8 | F7 | F6 | F5 | () |------| |------| H | N | E | I | O | ' |
+ * |--------+------+------+------+------+------| | | } |------+------+------+------+------+--------|
+ * | | F4 | F3 | F2 | F1 | [] | | | |K/RAlt| M | , |./Supe|/ RCtl| RShift |
+ * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ * | MUTE | VOLD | VOLU | | | | Left | Down | Up |Right | Del |
+ * '----------------------------------' '----------------------------------'
+ * .-------------. .-------------.
+ * | | | | Ins |ScrLck|
+ * .------+------+------| |------+------+------.
+ * | | |Start1| | PgUp | | |
+ * | | |------| |------| Space|CapsLk|
+ * | | |Play1 | | PgDn | | |
+ * '--------------------' '--------------------'
+ */
+[LAYER_LNUM] = LAYOUT_ergodox(
+ /* left hand */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_IN_ANG, KC_TRNS,
+ KC_TRNS, KC_F12, KC_F11, KC_F10, KC_F9, M_IN_CBR, KC_TRNS,
+ KC_TRNS, KC_F8, KC_F7, KC_F6, KC_F5, M_IN_PRN,
+ KC_TRNS, KC_F4, KC_F3, KC_F2, KC_F1, M_IN_BRC, KC_TRNS,
+ KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ DYN_REC_START1,
+ KC_TRNS, KC_TRNS, DYN_MACRO_PLAY1,
+ /* right hand */
+ TG(1), KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, S(KC_MINS), S(KC_BSPC),
+ KC_UNDS, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), S(KC_SCLN), S(KC_BSLS),
+ S(KC_H), S(KC_N), S(KC_E), S(KC_I), S(KC_O), S(KC_QUOT),
+ KC_RCBR, S(KC_K), S(KC_M), S(KC_COMM), S(KC_DOT), S(KC_SLSH), KC_RSFT,
+ S(KC_LEFT), S(KC_DOWN), S(KC_UP), S(KC_RGHT), S(KC_DEL),
+ S(KC_INS), S(KC_SLCK),
+ S(KC_PGUP),
+ S(KC_PGDN), S(KC_SPC), KC_CAPS
+),
+/* Keymap 3: Left side -> Shift + LAYER_BASE, Right side -> LAYER_NUM
+ *
+ * .--------------------------------------------------. .--------------------------------------------------.
+ * | Grave | ! | @ | # | $ | % | ^ | | | | * | ( | ) | - | |
+ * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | F | P | G | = | | = | => | 7 | 8 | 9 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Esc | A | R | S | T | D |------| |------| -> | 4 | 5 | 6 | 0 | |
+ * |--------+------+------+------+------+------| { | | Enter|------+------+------+------+------+--------|
+ * | LShift |Z/LCtl|X/Supe| C | V |B/RAlt| | | | != | 1 | 2 | 3 | | |
+ * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ * | LCtl |Super | Alt | [ | ] | | 0 | , | . | | |
+ * '----------------------------------' '----------------------------------'
+ * .-------------. .-------------.
+ * | Home | End | | | Stop |
+ * .------+------+------| |------+------+------.
+ * | | |PrnScr| |Start2| | |
+ * |CapsLk| Enter|------| |------| | |
+ * | | | Super| |Play2 | | |
+ * '--------------------' '--------------------'
+ */
+[LAYER_RNUM] = LAYOUT_ergodox(
+ /* left hand */
+ S(KC_GRV), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC,
+ S(KC_TAB), S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_G), S(KC_EQL),
+ S(KC_ESC), S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_D),
+ KC_LSFT, S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), KC_LCBR,
+ S(KC_LCTL), S(KC_LGUI), S(KC_LALT), S(KC_LBRC), S(KC_RBRC),
+
+ S(KC_HOME), S(KC_END),
+ S(KC_PSCR),
+ KC_CAPS, S(KC_ENT), S(KC_LGUI),
+ /* right hand */
+ KC_TRNS, KC_TRNS, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS, KC_TRNS,
+ KC_EQL, M_LAMBDA, KC_7, KC_8, KC_9, KC_PLUS, KC_TRNS,
+ M_POINER, KC_4, KC_5, KC_6, KC_0, KC_TRNS,
+ KC_ENT, M_NOT_EQL, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS,
+ KC_0, KC_COMM, KC_DOT, KC_TRNS, KC_TRNS,
+ KC_TRNS, DYN_REC_STOP,
+ DYN_REC_START2,
+ DYN_MACRO_PLAY2, KC_TRNS, KC_TRNS
+),
+};
+
+static bool recording_dynamic_macro;
+
+static bool process_record_dynamic_macro_wrapper(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ /* detect dynamic macro recording state */
+ case DYN_REC_START1:
+ case DYN_REC_START2:
+ if (record->event.pressed) {
+ recording_dynamic_macro = true;
+ }
+ break;
+ case DYN_REC_STOP:
+ if (record->event.pressed) {
+ recording_dynamic_macro = false;
+ }
+ break;
+ }
+
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+
+ return true;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ /* the purpose of the ..._wrapper is to detect START/ST0P keys to
+ light the blue led during recording */
+ if (!process_record_dynamic_macro_wrapper(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ /* static macro keys */
+ case M_IN_CBR:
+ if (record->event.pressed) {
+ SEND_STRING("{}" SS_TAP(X_LEFT));
+ return false;
+ }
+ break;
+ case M_IN_PRN:
+ if (record->event.pressed) {
+ SEND_STRING("()" SS_TAP(X_LEFT));
+ return false;
+ }
+ break;
+ case M_IN_BRC:
+ if (record->event.pressed) {
+ SEND_STRING("[]" SS_TAP(X_LEFT));
+ return false;
+ }
+ break;
+ case M_IN_ANG:
+ if (record->event.pressed) {
+ SEND_STRING("<>" SS_TAP(X_LEFT));
+ return false;
+ }
+ break;
+ case M_POINER:
+ if (record->event.pressed) {
+ SEND_STRING("->");
+ return false;
+ }
+ break;
+ case M_LAMBDA:
+ if (record->event.pressed) {
+ SEND_STRING("=>");
+ return false;
+ }
+ break;
+ case M_NOT_EQL:
+ if (record->event.pressed) {
+ SEND_STRING("!=");
+ return false;
+ }
+ break;
+ case M_COL_EQL:
+ if (record->event.pressed) {
+ SEND_STRING(":=");
+ return false;
+ }
+ break;
+ case M_PLUS_EQL:
+ if (record->event.pressed) {
+ SEND_STRING("+=");
+ return false;
+ }
+ break;
+ }
+
+ return true;
+}
+
+/* Runs just one time when the keyboard initializes. */
+void matrix_init_user(void) {
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ ergodox_right_led_1_set(5);
+ ergodox_right_led_2_set(5);
+ ergodox_right_led_3_set(5);
+};
+
+/* Runs constantly in the background, in a loop. */
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ //led 1, RED, Caps-Lock ON
+ //if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ergodox_right_led_1_on();
+
+ //led 2, GREEN
+ if (layer == LAYER_NUM)
+ ergodox_right_led_2_on();
+ else
+ ergodox_right_led_2_off();
+
+ //led 3, BLUE
+ if (recording_dynamic_macro)
+ ergodox_right_led_3_on();
+ else
+ ergodox_right_led_3_off();
+};
+
+// Runs constantly in the background, in a loop.
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK))
+ ergodox_right_led_1_on();
+ else
+ ergodox_right_led_1_off();
+}
diff --git a/layouts/community/ergodox/colemak_code_friendly/readme.md b/layouts/community/ergodox/colemak_code_friendly/readme.md
new file mode 100644
index 0000000000..1135d153a4
--- /dev/null
+++ b/layouts/community/ergodox/colemak_code_friendly/readme.md
@@ -0,0 +1,106 @@
+# ErgoDox EZ Code Friendly Colemak Layout
+
+ _This layout was inspired by qwerty_code_friendly layout._
+
+ Having all the symbols accessible without modifiers is a good improvement for coding.
+
+ There are only two layouts which is easy to memorize.
+
+ There are two _"Super shifts"_, LNUM and RNUM, placed on the most convenient physical keys. Each of them act as shift for the opposite side of the keyboard, and as a modifier key for the current side (usage similar to AltGr in many national layouts). This is achieved by duplicating the corresponding parts of Layer 0 and 1 into Layer 3 and 4. As a bonus, pressing both keys toggles Caps-Lock.
+
+ The numerical keypad is composed from regular number keys, works even in macOS.
+
+## Keymap 0: Basic layer
+
+```
+.--------------------------------------------------. .--------------------------------------------------.
+| Grave | ! | @ | # | $ | % | ^ | | TG(1)| & | * | ( | ) | - | Bspc |
+|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+| Tab | Q | W | F | P | G | = | | _ | J | L | U | Y | ; | \ |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
+|--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
+| LShift |Z/LCtl|X/Supe| C | V |B/RAlt| | | |K/RAlt| M | , |./Supe|/ RCtl| RShift |
+'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ | LCtl |Super | Alt | [ | ] | | Left | Down | Up |Right | Del |
+ '----------------------------------' '----------------------------------'
+ .-------------. .-------------.
+ | Home | End | | Ins |ScrLck|
+ .------+------+------| |------+------+------.
+ | | |PrnScr| | PgUp | | |
+ | LNUM | Enter|------| |------| Space| RNUM |
+ | | | Super| | PgDn | | |
+ '--------------------' '--------------------'
+```
+
+## Keymap 1: Numbers, Macro Record
+
+
+```
+.--------------------------------------------------. .--------------------------------------------------.
+| | | | | | <> | | | | | * | ( | ) | - | |
+|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+| | F12 | F11 | F10 | F9 | {} | | | = | => | 7 | 8 | 9 | + | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | F8 | F7 | F6 | F5 | () |------| |------| -> | 4 | 5 | 6 | 0 | |
+|--------+------+------+------+------+------| | | Enter|------+------+------+------+------+--------|
+| | F4 | F3 | F2 | F1 | [] | | | | != | 1 | 2 | 3 | | |
+'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ | MUTE | VOLD | VOLU | | | | 0 | , | . | | |
+ '----------------------------------' '----------------------------------'
+ .-------------. .-------------.
+ | | | | | Stop |
+ .------+------+------| |------+------+------.
+ | | |Start1| |Start2| | |
+ | | |------| |------| | |
+ | | |Play1 | |Play2 | | |
+ '--------------------' '--------------------'
+```
+
+## Keymap 2: Left side -> LAYER_NUM, Right side -> Shift + LAYER_BASE
+
+
+```
+.--------------------------------------------------. .--------------------------------------------------.
+| | | | | | <> | | | TG(1)| & | * | ( | ) | - | Bspc |
+|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+| | F12 | F11 | F10 | F9 | {} | | | _ | J | L | U | Y | ; | \ |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | F8 | F7 | F6 | F5 | () |------| |------| H | N | E | I | O | ' |
+|--------+------+------+------+------+------| | | } |------+------+------+------+------+--------|
+| | F4 | F3 | F2 | F1 | [] | | | |K/RAlt| M | , |./Supe|/ RCtl| RShift |
+'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ | MUTE | VOLD | VOLU | | | | Left | Down | Up |Right | Del |
+ '----------------------------------' '----------------------------------'
+ .-------------. .-------------.
+ | | | | Ins |ScrLck|
+ .------+------+------| |------+------+------.
+ | | |Start1| | PgUp | | |
+ | | |------| |------| Space|CapsLk|
+ | | |Play1 | | PgDn | | |
+ '--------------------' '--------------------'
+```
+
+## Keymap 3: Left side -> Shift + LAYER_BASE, Right side -> LAYER_NUM
+
+
+```
+.--------------------------------------------------. .--------------------------------------------------.
+| Grave | ! | @ | # | $ | % | ^ | | | | * | ( | ) | - | |
+|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+| Tab | Q | W | F | P | G | = | | = | => | 7 | 8 | 9 | + | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| Esc | A | R | S | T | D |------| |------| -> | 4 | 5 | 6 | 0 | |
+|--------+------+------+------+------+------| { | | Enter|------+------+------+------+------+--------|
+| LShift |Z/LCtl|X/Supe| C | V |B/RAlt| | | | != | 1 | 2 | 3 | | |
+'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ | LCtl |Super | Alt | [ | ] | | 0 | , | . | | |
+ '----------------------------------' '----------------------------------'
+ .-------------. .-------------.
+ | Home | End | | | Stop |
+ .------+------+------| |------+------+------.
+ | | |PrnScr| |Start2| | |
+ |CapsLk| Enter|------| |------| | |
+ | | | Super| |Play2 | | |
+ '--------------------' '--------------------'
+```
diff --git a/layouts/community/ergodox/colemak_code_friendly/rules.mk b/layouts/community/ergodox/colemak_code_friendly/rules.mk
new file mode 100644
index 0000000000..2bff0c5cf2
--- /dev/null
+++ b/layouts/community/ergodox/colemak_code_friendly/rules.mk
@@ -0,0 +1,7 @@
+COMMAND_ENABLE = no
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = no
+CONSOLE_ENABLE = no
+RGBLIGHT_ENABLE = no
+LEADER_ENABLE = no
+MIDI_ENABLE = no
diff --git a/layouts/community/ergodox/dave/keymap.c b/layouts/community/ergodox/dave/keymap.c
index f50be71fab..4287496479 100644
--- a/layouts/community/ergodox/dave/keymap.c
+++ b/layouts/community/ergodox/dave/keymap.c
@@ -137,11 +137,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
- //[1] = ACTION_LAYER_TAP_TOGGLE(PROG), // FN1 - Momentary Layer 1 (Symbols)
- //[2] = ACTION_LAYER_TAP_TOGGLE(NAVI) // FN2 - Momentary Layer 2 (Navigation)
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/layouts/community/ergodox/erez_experimental/keymap.c b/layouts/community/ergodox/erez_experimental/keymap.c
index 481f984d5d..1270188f97 100644
--- a/layouts/community/ergodox/erez_experimental/keymap.c
+++ b/layouts/community/ergodox/erez_experimental/keymap.c
@@ -142,12 +142,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
- [2] = ACTION_MACRO_TAP(0), // Eric Tang's Famous Macro!
- [3] = ACTION_MACRO_TAP(1) // Eric Tang's Famous Macro!
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
return MACRO_NONE;
diff --git a/layouts/community/ergodox/german-manuneo/compile_keymap.py b/layouts/community/ergodox/german-manuneo/compile_keymap.py
index 44f31b1c6e..9ad5c88ecc 100644
--- a/layouts/community/ergodox/german-manuneo/compile_keymap.py
+++ b/layouts/community/ergodox/german-manuneo/compile_keymap.py
@@ -668,9 +668,6 @@ def iter_keymap_parts(config, keymaps):
yield "};\n\n"
- # no idea what this is for
- yield "const uint16_t PROGMEM fn_actions[] = {};\n"
-
# macros
yield MACROCODE.format(
macro_cases="",
diff --git a/layouts/community/ergodox/german-manuneo/keymap.c b/layouts/community/ergodox/german-manuneo/keymap.c
index 71988b7dda..9198bf6e30 100644
--- a/layouts/community/ergodox/german-manuneo/keymap.c
+++ b/layouts/community/ergodox/german-manuneo/keymap.c
@@ -376,8 +376,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {};
-
#define UC_MODE_WIN 0
#define UC_MODE_LINUX 1
#define UC_MODE_OSX 2
diff --git a/layouts/community/ergodox/neo2_on_qwertz_hardware/keymap.c b/layouts/community/ergodox/neo2_on_qwertz_hardware/keymap.c
index 3991350337..f93f03e92e 100644
--- a/layouts/community/ergodox/neo2_on_qwertz_hardware/keymap.c
+++ b/layouts/community/ergodox/neo2_on_qwertz_hardware/keymap.c
@@ -282,8 +282,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {};
-
#define UC_MODE_WIN 0
#define UC_MODE_LINUX 1
#define UC_MODE_OSX 2
diff --git a/layouts/community/ergodox/osx_de/keymap.c b/layouts/community/ergodox/osx_de/keymap.c
index a9a27a8d43..cd9a35e212 100644
--- a/layouts/community/ergodox/osx_de/keymap.c
+++ b/layouts/community/ergodox/osx_de/keymap.c
@@ -145,10 +145,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
static uint16_t start;
diff --git a/layouts/community/ergodox/osx_de_adnw_koy/keymap.c b/layouts/community/ergodox/osx_de_adnw_koy/keymap.c
index 9d2e117bc1..8fc0f1fd94 100644
--- a/layouts/community/ergodox/osx_de_adnw_koy/keymap.c
+++ b/layouts/community/ergodox/osx_de_adnw_koy/keymap.c
@@ -122,10 +122,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
diff --git a/layouts/community/ergodox/osx_de_experimental/keymap.c b/layouts/community/ergodox/osx_de_experimental/keymap.c
index 15c700a783..cedecd45cb 100644
--- a/layouts/community/ergodox/osx_de_experimental/keymap.c
+++ b/layouts/community/ergodox/osx_de_experimental/keymap.c
@@ -378,10 +378,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
static uint16_t start;
diff --git a/layouts/community/ergodox/reset_eeprom/keymap.c b/layouts/community/ergodox/reset_eeprom/keymap.c
index c960af9cb9..9033205b98 100644
--- a/layouts/community/ergodox/reset_eeprom/keymap.c
+++ b/layouts/community/ergodox/reset_eeprom/keymap.c
@@ -60,10 +60,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/layouts/community/ergodox/robot_test_layout/keymap.c b/layouts/community/ergodox/robot_test_layout/keymap.c
index 5d672deeb9..07b294a985 100644
--- a/layouts/community/ergodox/robot_test_layout/keymap.c
+++ b/layouts/community/ergodox/robot_test_layout/keymap.c
@@ -43,12 +43,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-
-
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TAP_TOGGLE(1)
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
diff --git a/layouts/community/ergodox/romanzolotarev-norman-osx/keymap.c b/layouts/community/ergodox/romanzolotarev-norman-osx/keymap.c
index e024d5fb95..caead7e160 100644
--- a/layouts/community/ergodox/romanzolotarev-norman-osx/keymap.c
+++ b/layouts/community/ergodox/romanzolotarev-norman-osx/keymap.c
@@ -26,9 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
return MACRO_NONE;
};
diff --git a/layouts/community/ergodox/romanzolotarev-norman-qwerty-osx/keymap.c b/layouts/community/ergodox/romanzolotarev-norman-qwerty-osx/keymap.c
index d0b7520c31..ffa106f705 100644
--- a/layouts/community/ergodox/romanzolotarev-norman-qwerty-osx/keymap.c
+++ b/layouts/community/ergodox/romanzolotarev-norman-qwerty-osx/keymap.c
@@ -46,9 +46,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
return MACRO_NONE;
};
diff --git a/layouts/community/ergodox/sethbc/keymap.c b/layouts/community/ergodox/sethbc/keymap.c
index 7f142a9760..26d3106ec4 100644
--- a/layouts/community/ergodox/sethbc/keymap.c
+++ b/layouts/community/ergodox/sethbc/keymap.c
@@ -69,9 +69,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/layouts/community/ergodox/software_neo2/keymap.c b/layouts/community/ergodox/software_neo2/keymap.c
index 925caa0161..7ec4f7b838 100644
--- a/layouts/community/ergodox/software_neo2/keymap.c
+++ b/layouts/community/ergodox/software_neo2/keymap.c
@@ -95,10 +95,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
- /* [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) */
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/layouts/community/ergodox/supercoder/keymap.c b/layouts/community/ergodox/supercoder/keymap.c
index a42937bd6b..3aa34a8e42 100644
--- a/layouts/community/ergodox/supercoder/keymap.c
+++ b/layouts/community/ergodox/supercoder/keymap.c
@@ -58,9 +58,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
return MACRO_NONE;
diff --git a/layouts/community/ergodox/tm2030/keymap.c b/layouts/community/ergodox/tm2030/keymap.c
index fa919b5d88..1259a18ff2 100644
--- a/layouts/community/ergodox/tm2030/keymap.c
+++ b/layouts/community/ergodox/tm2030/keymap.c
@@ -194,9 +194,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/layouts/community/ergodox/xyverz/keymap.c b/layouts/community/ergodox/xyverz/keymap.c
index 2e4b1e797e..fe9080c2d6 100644
--- a/layouts/community/ergodox/xyverz/keymap.c
+++ b/layouts/community/ergodox/xyverz/keymap.c
@@ -250,10 +250,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
diff --git a/layouts/community/ergodox/yoruian/keymap.c b/layouts/community/ergodox/yoruian/keymap.c
index 367fe3c097..b304fa0704 100644
--- a/layouts/community/ergodox/yoruian/keymap.c
+++ b/layouts/community/ergodox/yoruian/keymap.c
@@ -37,9 +37,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
TR, TR, TR, TR, TR, TR),
};
-const uint16_t PROGMEM fn_actions[] = {
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
return MACRO_NONE;
};
diff --git a/layouts/community/ortho_4x12/bakingpy/config.h b/layouts/community/ortho_4x12/bakingpy/config.h
index a90f38001a..b6b2ac5779 100644
--- a/layouts/community/ortho_4x12/bakingpy/config.h
+++ b/layouts/community/ortho_4x12/bakingpy/config.h
@@ -1,20 +1,15 @@
#pragma once
-/* Use I2C or Serial, not both */
-
-#define USE_SERIAL
-// #define USE_I2C
+#define USE_I2C
/* Select hand configuration */
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
+//#define MASTER_RIGHT
#define TAPPING_TERM 150
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 8
+#define RGBLED_NUM 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
diff --git a/layouts/community/ortho_4x12/bakingpy/keymap.c b/layouts/community/ortho_4x12/bakingpy/keymap.c
index e71e5d5d2c..06e4a589c5 100644
--- a/layouts/community/ortho_4x12/bakingpy/keymap.c
+++ b/layouts/community/ortho_4x12/bakingpy/keymap.c
@@ -2,18 +2,18 @@
extern keymap_config_t keymap_config;
-#define _QWERTY 0
-#define _COLEMAK 1
-#define _DVORAK 2
+#define _MAC 0
+#define _WINDOWS 1
+#define _TESTMODE 2
#define _LOWER 3
#define _RAISE 4
#define _FKEYS 5
#define _ADJUST 16
enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
+ MAC = SAFE_RANGE,
+ WINDOWS,
+ TESTMODE,
LOWER,
RAISE,
ADJUST,
@@ -34,11 +34,11 @@ enum custom_keycodes {
#define KC_ENTS MT(MOD_LSFT, KC_ENT)
#define KC_BL_S BL_STEP
#define KC_BL_T BL_TOGG
-#define KC_ALLS PLAY_ALLSTAR
+#define KC_RMOD RGB_MOD
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_kc_ortho_4x12(
+ [_MAC] = LAYOUT_kc_ortho_4x12(
//┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
@@ -50,33 +50,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
),
- [_COLEMAK] = LAYOUT_kc_ortho_4x12(
+ [_WINDOWS] = LAYOUT_kc_ortho_4x12(
//┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
- TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS,
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
- ESCC, A , R , S , T , D , H , N , E , I , O ,QUOT,
+ ESCC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
- LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH,ENTS,
+ LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,ENTS,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
- GRVF,LCTL,LALT,LGUI,LOWR,SPC , BSPC,RASE,LEFT,DOWN, UP ,RGHT
+ GRVF,LALT,LGUI,LCTL,LOWR,SPC , BSPC,RASE,LEFT,DOWN, UP ,RGHT
//└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
),
- [_DVORAK] = LAYOUT_kc_ortho_4x12(
+ [_TESTMODE] = LAYOUT_kc_ortho_4x12(
//┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
- TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS,
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
- ESCC, A , O , E , U , I , D , H , T , N , S ,SLSH,
+ RMOD,BL_S, S , D , F , G , RMOD,BL_S, K , L ,SCLN,QUOT,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
- LSFT,SCLN, Q , J , K , X , B , M , W , V , Z ,ENTS,
+ LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,ENTS,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
- GRVF,LCTL,LALT,LGUI,LOWR,SPC , BSPC,RASE,LEFT,DOWN, UP ,RGHT
+ GRVF,LALT,LGUI,LCTL,LOWR,SPC , BSPC,RASE,LEFT,DOWN, UP ,RGHT
//└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
),
[_LOWER] = LAYOUT_kc_ortho_4x12(
//┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
- ALLS, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
+ , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
DEL ,CAPP,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE,
//├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
@@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_ADJUST] = LAYOUT_ortho_4x12( \
_______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
- _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, MAC, WINDOWS, TESTMODE,_______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
)
@@ -131,13 +131,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-#ifdef AUDIO_ENABLE
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dvorak[][2] = SONG(DVORAK_SOUND);
-float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-float all_star_song[][2] = SONG(ALL_STAR);
-#endif
-
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
@@ -145,30 +138,21 @@ void persistent_default_layer_set(uint16_t default_layer) {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
- case QWERTY:
+ case MAC:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- persistent_default_layer_set(1UL<<_QWERTY);
+ persistent_default_layer_set(1UL<<_MAC);
}
return false;
break;
- case COLEMAK:
+ case WINDOWS:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
- persistent_default_layer_set(1UL<<_COLEMAK);
+ persistent_default_layer_set(1UL<<_WINDOWS);
}
return false;
break;
- case DVORAK:
+ case TESTMODE:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_dvorak);
- #endif
- persistent_default_layer_set(1UL<<_DVORAK);
+ persistent_default_layer_set(1UL<<_TESTMODE);
}
return false;
break;
@@ -200,15 +184,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
- case PLAY_ALLSTAR:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(all_star_song);
- SEND_STRING("Hey now, you're an all-star, get your game on, go play. Hey now, you're a rock star, get the show on, get paid. All that glitters is gold. Only shooting stars break the mold.");
- #endif
- }
- return false;
- break;
}
return true;
}
diff --git a/layouts/community/ortho_4x12/grahampheath/rules.mk b/layouts/community/ortho_4x12/grahampheath/rules.mk
index 457a3d01d4..e69de29bb2 100644
--- a/layouts/community/ortho_4x12/grahampheath/rules.mk
+++ b/layouts/community/ortho_4x12/grahampheath/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/layouts/community/ortho_4x12/xyverz/rules.mk b/layouts/community/ortho_4x12/xyverz/rules.mk
index c181e11072..f52fe17540 100644
--- a/layouts/community/ortho_4x12/xyverz/rules.mk
+++ b/layouts/community/ortho_4x12/xyverz/rules.mk
@@ -9,6 +9,3 @@ else
RGBLIGHT_ENABLE = yes
endif
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/layouts/community/ortho_5x12/rs/config.h b/layouts/community/ortho_5x12/rs/config.h
new file mode 100644
index 0000000000..02076e8728
--- /dev/null
+++ b/layouts/community/ortho_5x12/rs/config.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+//#define STARTUP_SONG SONG(PREONIC_SOUND)
+#define STARTUP_SONG SONG(NO_SOUND)
+
+#define DEFAULT_LAYER_SONGS \
+ { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND) }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/layouts/community/ortho_5x12/rs/karabiner.json b/layouts/community/ortho_5x12/rs/karabiner.json
new file mode 100644
index 0000000000..f5214650ad
--- /dev/null
+++ b/layouts/community/ortho_5x12/rs/karabiner.json
@@ -0,0 +1,154 @@
+{
+ "title": "RS",
+ "rules": [{
+ "description": "CapsLock to Escape / Control Mod-Tap",
+ "manipulators": [{
+ "type": "basic",
+ "from": {
+ "key_code": "caps_lock",
+ "modifiers": {
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "left_control"}],
+ "to_if_alone": [{"key_code": "escape"}]
+ }]
+ },
+ {
+ "description": "Right-Shift / Enter Mod-Tap",
+ "manipulators": [{
+ "type": "basic",
+ "from": {
+ "key_code": "right_shift",
+ "modifiers": {
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "right_shift"}],
+ "to_if_alone": [{"key_code": "return_or_enter"}]
+ }]
+ },
+ {
+ "description": "Right-Command / Backspace Mod-Tap",
+ "manipulators": [{
+ "type": "basic",
+ "from": {
+ "key_code": "right_command",
+ "modifiers": {
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "right_command"}],
+ "to_if_alone": [{"key_code": "delete_or_backspace"}]
+ }]
+ },
+ {
+ "description": "Right-Command Accents",
+ "manipulators": [
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "a",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["left_shift", "right_shift"]
+ }
+ },
+ "to": [
+ {"key_code": "grave_accent_and_tilde", "modifiers": ["left_option"]},
+ {"key_code": "a"}
+ ]
+ }]
+ },
+ {
+ "description": "Right Command Navigation",
+ "manipulators": [{
+ "type": "basic",
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "left_arrow"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "down_arrow"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "i",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "up_arrow"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "right_arrow"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "e",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "page_up"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "d",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "page_down"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "s",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "home"}]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "f",
+ "modifiers": {
+ "mandatory": ["right_command"],
+ "optional": ["any"]
+ }
+ },
+ "to": [{"key_code": "end"}]
+ }]
+ }]
+}
diff --git a/layouts/community/ortho_5x12/rs/keymap.c b/layouts/community/ortho_5x12/rs/keymap.c
new file mode 100644
index 0000000000..f33dcc2536
--- /dev/null
+++ b/layouts/community/ortho_5x12/rs/keymap.c
@@ -0,0 +1,63 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _HYPER,
+};
+
+#define KC_ KC_TRNS
+
+#define KC_ESCC MT(MOD_LCTL, KC_ESC)
+#define KC_RST RESET
+#define KC_BSPH LT(_HYPER, KC_BSPC)
+#define KC_ENTS MT(MOD_LSFT, KC_ENT)
+// Brightness
+#define KC_BRUP KC_PAUS
+#define KC_BRDN KC_SLCK
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+ ) \
+ LAYOUT_ortho_5x12( \
+ 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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
+ 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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b, \
+ KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_##k46, KC_##k47, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b \
+ )
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc( \
+ // ,-----------------------------------------------------------------------------------.
+ GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , MINS ,
+ // |------+------+------+------+------+------+------+------+------+------+------+------|
+ TAB , Q , W , E , R , T , Y , U , I , O , P , EQL ,
+ // |------+------+------+------+------+------+------+------+------+------+------+------|
+ ESCC , A , S , D , F , G , H , J , K , L , SCLN , QUOT ,
+ // |------+------+------+------+------+------+------+------+------+------+------+------|
+ LSFT , Z , X , C , V , B , N , M , COMM , DOT , SLSH , ENTS ,
+ // |------+------+------+------+------+------+------+------+------+------+------+------|
+ , LCTL , LALT , LGUI , SPC , SPC , BSPC , BSPH , LEFT , DOWN , UP , RGHT
+ // `---------------------------------------------------+-------------------------------'
+ ), // |
+ // |
+ [_HYPER] = LAYOUT_kc( /* V */ \
+ // ,-----------------------------------------------------------------------------------.
+ RST , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , LBRC , RBRC , ,
+ // |------+------+------+------+------+------+------+------+------+------+------+------|
+ , , , PGUP , , , , , UP , LCBR , RCBR , BSLS ,
+ // |------+------+------+------+------+------+------+------+------+------+------+------|
+ , , HOME , PGDN , END , , MINS , LEFT , DOWN , RGHT , , PIPE ,
+ // |------+------+------+------+------+------+------+------+------+------+------+------|
+ , , , , , , , , , BRDN , BRUP , ,
+ // |------+------+------+------+------+------+------+------+------+------+------+------|
+ , , , , , , , , MUTE , VOLD , VOLU , MPLY
+ // `-----------------------------------------------------------------------------------'
+ ),
+};
diff --git a/layouts/community/ortho_5x12/rs/readme.md b/layouts/community/ortho_5x12/rs/readme.md
new file mode 100644
index 0000000000..d75eefd5b9
--- /dev/null
+++ b/layouts/community/ortho_5x12/rs/readme.md
@@ -0,0 +1,17 @@
+# Code friendly 60% keymap
+
+I developped this keymap to make a better use of 60% ortho keyboards I use like the preonic of the iris. Instead of trying to mimic the Planck layout like the default preonic keymap, this keymap removes the raise and lower layers and offers a simpler hyper layer concept for a few missing sign keys and cursors / media keys.
+
+The important part for coders is that most important signs needed to code are available at their usual position on a full keyboard, without complex layer gymnastic. Access to [] and {} are available on the hyper layer at their usual emplacement.
+
+The right thumb is used for both backspace and hyper layer switching. On the hyper layer, in addition to some coding signs, you get the cursor keys arranged in cross, just under your right fingers, so you don't have to move your hand when navigating in code or command line. Other hand gets the home/end page up/down in a similar layout.
+
+Because you sometime have to use your internal keyboard when you use a macbook, a karabiner configuration is also provided to get most of the features of this keyboard, including the hyper layer / backspace on right command key etc.
+
+This keymap has been tested with those keyboards:
+- [Preonic](../../../../keyboards/preonic/)
+- [My preonic clone](../../../rs60/)
+
+Checkout an adaptation of this keymap for other keyboards:
+- [Iris/rs](../../../../keyboards/iris/keymaps/rs/keymap.c)
+- [ErgoTravel/rs](../../../../keyboards/ergotravel/keymaps/rs/keymap.c) \ No newline at end of file
diff --git a/layouts/default/65_iso/default_65_iso/keymap.c b/layouts/default/65_iso/default_65_iso/keymap.c
new file mode 100644
index 0000000000..085304a87f
--- /dev/null
+++ b/layouts/default/65_iso/default_65_iso/keymap.c
@@ -0,0 +1,12 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* layer 0: qwerty */
+ [0] = LAYOUT_65_iso(\
+ 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_HOME, \
+ 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_PGUP, \
+ 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, KC_PGDN, \
+ 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_END, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ )
+};
diff --git a/layouts/default/65_iso/layout.json b/layouts/default/65_iso/layout.json
new file mode 100644
index 0000000000..6496e93634
--- /dev/null
+++ b/layouts/default/65_iso/layout.json
@@ -0,0 +1,5 @@
+["","","","","","","","","","","","","",{w:2},"",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",""],
+[{w:1.75},"","","","","","","","","","","","","",{x:1.25},""],
+[{w:1.25},"","","","","","","","","","","","",{w:1.75},"","",""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"","","","","","",""]
diff --git a/layouts/default/65_iso/readme.md b/layouts/default/65_iso/readme.md
new file mode 100644
index 0000000000..d23c157d0f
--- /dev/null
+++ b/layouts/default/65_iso/readme.md
@@ -0,0 +1,5 @@
+# 65_iso
+
+ LAYOUT_65_iso
+
+This is the 65% layout made popular by boards such as the [Input Club Whitefox](https://github.com/qmk/qmk_firmware/tree/master/keyboards/whitefox) and [RAMA M65-A](https://github.com/qmk/qmk_firmware/tree/master/keyboards/jc65), in ISO.
diff --git a/layouts/default/66_iso/default_60_iso/keymap.c b/layouts/default/66_iso/default_60_iso/keymap.c
deleted file mode 100644
index ea0c10a9ce..0000000000
--- a/layouts/default/66_iso/default_60_iso/keymap.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_66_iso(
- 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_PGUP,
- 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_PGDN,
- 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,
- 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_LCTRL, KC_LALT, KC_LGUI, KC_SPACE, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT,
- )
-};
diff --git a/layouts/default/66_iso/default_66_iso/keymap.c b/layouts/default/66_iso/default_66_iso/keymap.c
new file mode 100644
index 0000000000..4f97acf41f
--- /dev/null
+++ b/layouts/default/66_iso/default_66_iso/keymap.c
@@ -0,0 +1,11 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_66_iso(
+ 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_PGUP,
+ 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_PGDN,
+ 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,
+ 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_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/quantum/audio/musical_notes.h b/quantum/audio/musical_notes.h
index 065608ccce..ce8d47d1c1 100644
--- a/quantum/audio/musical_notes.h
+++ b/quantum/audio/musical_notes.h
@@ -61,7 +61,11 @@
// Notes - # = Octave
+#ifdef __arm__
+#define NOTE_REST 1.00f
+#else
#define NOTE_REST 0.00f
+#endif
/* These notes are currently bugged
#define NOTE_C0 16.35f
diff --git a/quantum/config_common.h b/quantum/config_common.h
index cbff372eaf..0b2e408a43 100644
--- a/quantum/config_common.h
+++ b/quantum/config_common.h
@@ -21,6 +21,9 @@
#define ROW2COL 1
#define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */
+// useful for direct pin mapping
+#define NO_PIN (~0)
+
#ifdef __AVR__
#ifndef __ASSEMBLER__
#include <avr/io.h>
@@ -125,6 +128,45 @@
#endif
#elif defined(PROTOCOL_CHIBIOS)
+ // Defines mapping for Proton C replacement
+ #ifdef CONVERT_TO_PROTON_C
+ // Left side (front)
+ #define D3 PAL_LINE(GPIOA, 9)
+ #define D2 PAL_LINE(GPIOA, 10)
+ // GND
+ // GND
+ #define D1 PAL_LINE(GPIOB, 7)
+ #define D0 PAL_LINE(GPIOB, 6)
+ #define D4 PAL_LINE(GPIOB, 5)
+ #define C6 PAL_LINE(GPIOB, 4)
+ #define D7 PAL_LINE(GPIOB, 3)
+ #define E6 PAL_LINE(GPIOB, 2)
+ #define B4 PAL_LINE(GPIOB, 1)
+ #define B5 PAL_LINE(GPIOB, 0)
+
+ // Right side (front)
+ // RAW
+ // GND
+ // RESET
+ // VCC
+ #define F4 PAL_LINE(GPIOA, 2)
+ #define F5 PAL_LINE(GPIOA, 1)
+ #define F6 PAL_LINE(GPIOA, 0)
+ #define F7 PAL_LINE(GPIOB, 8)
+ #define B1 PAL_LINE(GPIOB, 13)
+ #define B3 PAL_LINE(GPIOB, 14)
+ #define B2 PAL_LINE(GPIOB, 15)
+ #define B6 PAL_LINE(GPIOB, 9)
+
+ // LEDs (only D5/C13 uses an actual LED)
+ #ifdef CONVERT_TO_PROTON_C_RXLED
+ #define D5 PAL_LINE(GPIOC, 13)
+ #define B0 PAL_LINE(GPIOC, 13)
+ #else
+ #define D5 PAL_LINE(GPIOC, 13)
+ #define B0 PAL_LINE(GPIOC, 14)
+ #endif
+ #else
#define A0 PAL_LINE(GPIOA, 0)
#define A1 PAL_LINE(GPIOA, 1)
#define A2 PAL_LINE(GPIOA, 2)
@@ -221,6 +263,7 @@
#define F13 PAL_LINE(GPIOF, 13)
#define F14 PAL_LINE(GPIOF, 14)
#define F15 PAL_LINE(GPIOF, 15)
+ #endif
#endif
/* USART configuration */
diff --git a/quantum/debounce.c b/quantum/debounce.c
new file mode 100644
index 0000000000..929023ab2d
--- /dev/null
+++ b/quantum/debounce.c
@@ -0,0 +1,52 @@
+
+#include "matrix.h"
+#include "timer.h"
+#include "quantum.h"
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+void debounce_init(uint8_t num_rows) {
+}
+
+#if DEBOUNCING_DELAY > 0
+
+static bool debouncing = false;
+
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) {
+ static uint16_t debouncing_time;
+
+ if (changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+
+ if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
+ for (uint8_t i = 0; i < num_rows; i++) {
+ cooked[i] = raw[i];
+ }
+ debouncing = false;
+ }
+}
+
+bool debounce_active(void) {
+ return debouncing;
+}
+
+#else
+
+// no debounce
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) {
+ if (changed)
+ {
+ for (uint8_t i = 0; i < num_rows; i++) {
+ cooked[i] = raw[i];
+ }
+ }
+}
+
+bool debounce_active(void) {
+ return false;
+}
+#endif
diff --git a/quantum/debounce.h b/quantum/debounce.h
new file mode 100644
index 0000000000..360af77e78
--- /dev/null
+++ b/quantum/debounce.h
@@ -0,0 +1,11 @@
+#pragma once
+
+// raw is the current key state
+// on entry cooked is the previous debounced state
+// on exit cooked is the current debounced state
+// changed is true if raw has changed since the last call
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed);
+
+bool debounce_active(void);
+
+void debounce_init(uint8_t num_rows); \ No newline at end of file
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index f6c8b70d28..1a6af9e08f 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -120,7 +120,7 @@ action_t action_for_key(uint8_t layer, keypos_t key)
break;
case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX: ;
// OSM(mod) - One-shot mod
- mod = keycode & 0xFF;
+ mod = mod_config(keycode & 0xFF);
action.code = ACTION_MODS_ONESHOT(mod);
break;
case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX:
diff --git a/quantum/matrix.c b/quantum/matrix.c
index 9b5ce33d23..49a1845696 100644
--- a/quantum/matrix.c
+++ b/quantum/matrix.c
@@ -21,21 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "util.h"
#include "matrix.h"
-#include "timer.h"
+#include "debounce.h"
#include "quantum.h"
-
-/* Set 0 if debouncing isn't needed */
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
#if (MATRIX_COLS <= 8)
# define print_matrix_header() print("\nr/c 01234567\n")
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
@@ -63,9 +51,9 @@ static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
#endif
/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t raw_matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+static matrix_row_t matrix[MATRIX_ROWS];
#if (DIODE_DIRECTION == COL2ROW)
@@ -157,70 +145,39 @@ void matrix_init(void) {
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ raw_matrix[i] = 0;
matrix[i] = 0;
- matrix_debouncing[i] = 0;
}
+ debounce_init(MATRIX_ROWS);
matrix_init_quantum();
}
uint8_t matrix_scan(void)
{
+ bool changed = false;
#if (DIODE_DIRECTION == COL2ROW)
-
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix, current_row);
-# endif
-
- }
-
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
#elif (DIODE_DIRECTION == ROW2COL)
-
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix, current_col);
-# endif
-
- }
-
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(raw_matrix, current_col);
+ }
#endif
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- debouncing = false;
- }
-# endif
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
- matrix_scan_quantum();
- return 1;
+ matrix_scan_quantum();
+ return 1;
}
bool matrix_is_modified(void)
{
-#if (DEBOUNCING_DELAY > 0)
- if (debouncing) return false;
-#endif
+ if (debounce_active()) return false;
return true;
}
diff --git a/quantum/mcu_selection.mk b/quantum/mcu_selection.mk
new file mode 100644
index 0000000000..209b578ea5
--- /dev/null
+++ b/quantum/mcu_selection.mk
@@ -0,0 +1,70 @@
+
+ifneq ($(findstring STM32F303, $(MCU)),)
+ ## chip/board settings
+ # - the next two should match the directories in
+ # <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+ MCU_FAMILY ?= STM32
+ MCU_SERIES ?= STM32F3xx
+
+ # Linker script to use
+ # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+ # or <this_dir>/ld/
+ MCU_LDSCRIPT ?= STM32F303xC
+
+ # Startup code to use
+ # - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+ MCU_STARTUP ?= stm32f3xx
+
+ # Board: it should exist either in <chibios>/os/hal/boards/
+ # or <this_dir>/boards
+ BOARD ?= GENERIC_STM32_F303XC
+
+ # Cortex version
+ MCU = cortex-m4
+
+ # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ ARMV ?= 7
+
+ USE_FPU = yes
+
+ # Vector table for application
+ # 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+ # The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+ # OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
+endif
+
+ifneq (,$(filter $(MCU),atmega32u4 at90usb1286))
+ # Processor frequency.
+ # This will define a symbol, F_CPU, in all source code files equal to the
+ # processor frequency in Hz. You can then use this symbol in your source code to
+ # calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+ # automatically to create a 32-bit value in your source code.
+ #
+ # This will be an integer division of F_USB below, as it is sourced by
+ # F_USB after it has run through any CPU prescalers. Note that this value
+ # does not *change* the processor frequency - it should merely be updated to
+ # reflect the processor speed set externally so that the code can use accurate
+ # software delays.
+ F_CPU ?= 16000000
+
+ # LUFA specific
+ #
+ # Target architecture (see library "Board Types" documentation).
+ ARCH ?= AVR8
+
+ # Input clock frequency.
+ # This will define a symbol, F_USB, in all source code files equal to the
+ # input clock frequency (before any prescaling is performed) in Hz. This value may
+ # differ from F_CPU if prescaling is used on the latter, and is required as the
+ # raw input clock is fed directly to the PLL sections of the AVR for high speed
+ # clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+ # at the end, this will be done automatically to create a 32-bit value in your
+ # source code.
+ #
+ # If no clock division is performed on the input clock inside the AVR (via the
+ # CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+ F_USB ?= $(F_CPU)
+endif
diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c
index 6e9c28e4fc..13f8bbb331 100644
--- a/quantum/process_keycode/process_combo.c
+++ b/quantum/process_keycode/process_combo.c
@@ -18,9 +18,6 @@
#include "print.h"
-#define COMBO_TIMER_ELAPSED -1
-
-
__attribute__ ((weak))
combo_t key_combos[COMBO_COUNT] = {
@@ -65,7 +62,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
if (-1 == (int8_t)index) return false;
/* The combos timer is used to signal whether the combo is active */
- bool is_combo_active = COMBO_TIMER_ELAPSED == combo->timer ? false : true;
+ bool is_combo_active = combo->is_active;
if (record->event.pressed) {
KEY_STATE_DOWN(index);
@@ -73,9 +70,10 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
if (is_combo_active) {
if (ALL_COMBO_KEYS_ARE_DOWN) { /* Combo was pressed */
send_combo(combo->keycode, true);
- combo->timer = COMBO_TIMER_ELAPSED;
+ combo->is_active = false;
} else { /* Combo key was pressed */
combo->timer = timer_read();
+ combo->is_active = true;
#ifdef COMBO_ALLOW_ACTION_KEYS
combo->prev_record = *record;
#else
@@ -99,6 +97,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
send_keyboard_report();
unregister_code16(keycode);
#endif
+ combo->is_active = false;
combo->timer = 0;
}
@@ -106,6 +105,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
}
if (NO_COMBO_KEYS_ARE_DOWN) {
+ combo->is_active = true;
combo->timer = 0;
}
@@ -132,14 +132,14 @@ void matrix_scan_combo(void)
#pragma GCC diagnostic ignored "-Warray-bounds"
combo_t *combo = &key_combos[i];
#pragma GCC diagnostic pop
- if (combo->timer &&
- combo->timer != COMBO_TIMER_ELAPSED &&
+ if (combo->is_active &&
+ combo->timer &&
timer_elapsed(combo->timer) > COMBO_TERM) {
-
+
/* This disables the combo, meaning key events for this
* combo will be handled by the next processors in the chain
*/
- combo->timer = COMBO_TIMER_ELAPSED;
+ combo->is_active = false;
#ifdef COMBO_ALLOW_ACTION_KEYS
process_action(&combo->prev_record,
diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h
index a5dbd788a4..a5787c9ed3 100644
--- a/quantum/process_keycode/process_combo.h
+++ b/quantum/process_keycode/process_combo.h
@@ -33,6 +33,7 @@ typedef struct
uint8_t state;
#endif
uint16_t timer;
+ bool is_active;
#ifdef COMBO_ALLOW_ACTION_KEYS
keyrecord_t prev_record;
#else
diff --git a/quantum/process_keycode/process_terminal.c b/quantum/process_keycode/process_terminal.c
index 6998639f20..e791deffc1 100644
--- a/quantum/process_keycode/process_terminal.c
+++ b/quantum/process_keycode/process_terminal.c
@@ -273,11 +273,17 @@ bool process_terminal(uint16_t keycode, keyrecord_t *record) {
disable_terminal();
return false;
}
+
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
+ keycode = keycode & 0xFF;
+ }
+
if (keycode < 256) {
uint8_t str_len;
char char_to_add;
switch (keycode) {
case KC_ENTER:
+ case KC_KP_ENTER:
push_to_cmd_buffer();
current_cmd_buffer_pos = 0;
process_terminal_command();
diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c
index 3286f45b5d..b64feb7003 100644
--- a/quantum/process_keycode/process_unicode_common.c
+++ b/quantum/process_keycode/process_unicode_common.c
@@ -216,7 +216,7 @@ bool process_unicode_common(uint16_t keycode, keyrecord_t *record) {
#if defined(UNICODE_ENABLE)
return process_unicode(keycode, record);
#elif defined(UNICODEMAP_ENABLE)
- return process_unicode_map(keycode, record);
+ return process_unicodemap(keycode, record);
#elif defined(UCIS_ENABLE)
return process_ucis(keycode, record);
#else
diff --git a/quantum/process_keycode/process_unicodemap.c b/quantum/process_keycode/process_unicodemap.c
index 75f35112b1..cee9acb5fc 100644
--- a/quantum/process_keycode/process_unicodemap.c
+++ b/quantum/process_keycode/process_unicodemap.c
@@ -18,8 +18,7 @@
#include "process_unicode_common.h"
__attribute__((weak))
-const uint32_t PROGMEM unicode_map[] = {
-};
+const uint32_t PROGMEM unicode_map[] = {};
void register_hex32(uint32_t hex) {
bool onzerostart = true;
@@ -42,26 +41,26 @@ void register_hex32(uint32_t hex) {
}
__attribute__((weak))
-void unicode_map_input_error() {}
+void unicodemap_input_error() {}
-bool process_unicode_map(uint16_t keycode, keyrecord_t *record) {
- uint8_t input_mode = get_unicode_input_mode();
- if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) {
- const uint32_t* map = unicode_map;
- uint16_t index = keycode - QK_UNICODE_MAP;
- uint32_t code = pgm_read_dword(&map[index]);
- if (code > 0xFFFF && code <= 0x10ffff && input_mode == UC_OSX) {
+bool process_unicodemap(uint16_t keycode, keyrecord_t *record) {
+ if ((keycode & QK_UNICODEMAP) == QK_UNICODEMAP && record->event.pressed) {
+ uint16_t index = keycode - QK_UNICODEMAP;
+ uint32_t code = pgm_read_dword(unicode_map + index);
+ uint8_t input_mode = get_unicode_input_mode();
+
+ if (code > 0xFFFF && code <= 0x10FFFF && input_mode == UC_OSX) {
// Convert to UTF-16 surrogate pair
code -= 0x10000;
- uint32_t lo = code & 0x3ff;
- uint32_t hi = (code & 0xffc00) >> 10;
+ uint32_t lo = code & 0x3FF, hi = (code & 0xFFC00) >> 10;
+
unicode_input_start();
- register_hex32(hi + 0xd800);
- register_hex32(lo + 0xdc00);
+ register_hex32(hi + 0xD800);
+ register_hex32(lo + 0xDC00);
unicode_input_finish();
- } else if ((code > 0x10ffff && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) {
- // when character is out of range supported by the OS
- unicode_map_input_error();
+ } else if ((code > 0x10FFFF && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) {
+ // Character is out of range supported by the OS
+ unicodemap_input_error();
} else {
unicode_input_start();
register_hex32(code);
diff --git a/quantum/process_keycode/process_unicodemap.h b/quantum/process_keycode/process_unicodemap.h
index f6d64bb86b..5764697f84 100644
--- a/quantum/process_keycode/process_unicodemap.h
+++ b/quantum/process_keycode/process_unicodemap.h
@@ -19,5 +19,5 @@
#include "quantum.h"
#include "process_unicode_common.h"
-void unicode_map_input_error(void);
-bool process_unicode_map(uint16_t keycode, keyrecord_t *record);
+void unicodemap_input_error(void);
+bool process_unicodemap(uint16_t keycode, keyrecord_t *record);
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 85db100ab4..5d8ffe34eb 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -15,6 +15,11 @@
*/
#include "quantum.h"
+
+#if !defined(RGBLIGHT_ENABLE) && !defined(RGB_MATRIX_ENABLE)
+ #include "rgb.h"
+#endif
+
#ifdef PROTOCOL_LUFA
#include "outputselect.h"
#endif
diff --git a/quantum/quantum.h b/quantum/quantum.h
index f78915fdfb..56a6a1a991 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -30,9 +30,6 @@
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
-#if !defined(RGBLIGHT_ENABLE) && !defined(RGB_MATRIX_ENABLE)
- #include "rgb.h"
-#endif
#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
#else
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index 2b309f4d52..0462291c2b 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -86,8 +86,8 @@ enum quantum_keycodes {
QK_UNICODE_MAX = 0xFFFF,
#endif
#ifdef UNICODEMAP_ENABLE
- QK_UNICODE_MAP = 0x8000,
- QK_UNICODE_MAP_MAX = 0x83FF,
+ QK_UNICODEMAP = 0x8000,
+ QK_UNICODEMAP_MAX = 0x83FF,
#endif
// Loose keycodes - to be used directly
@@ -489,9 +489,8 @@ enum quantum_keycodes {
#define SWIN(kc) SGUI(kc)
#define LCA(kc) (QK_LCTL | QK_LALT | (kc))
-#define MOD_HYPR 0xf
-#define MOD_MEH 0x7
-
+#define MOD_HYPR 0xF
+#define MOD_MEH 0x7
// Aliases for shifted symbols
// Each key has a 4-letter code, and some have longer aliases too.
@@ -568,9 +567,12 @@ enum quantum_keycodes {
#define FUNC(kc) (QK_FUNCTION | (kc))
// Aliases
+#define C(kc) LCTL(kc)
#define S(kc) LSFT(kc)
-#define F(kc) FUNC(kc)
+#define A(kc) LALT(kc)
+#define G(kc) LGUI(kc)
+#define F(kc) FUNC(kc)
#define M(kc) (QK_MACRO | (kc))
#define MACROTAP(kc) (QK_MACRO | (FUNC_TAP << 8) | (kc))
@@ -601,7 +603,7 @@ enum quantum_keycodes {
#define RGB_M_T RGB_MODE_RGBTEST
// L-ayer, T-ap - 256 keycode max, 16 layer max
-#define LT(layer, kc) (QK_LAYER_TAP | ((layer & 0xF) << 8) | ((kc) & 0xFF))
+#define LT(layer, kc) (QK_LAYER_TAP | (((layer) & 0xF) << 8) | ((kc) & 0xFF))
#define AG_SWAP MAGIC_SWAP_ALT_GUI
#define AG_NORM MAGIC_UNSWAP_ALT_GUI
@@ -615,79 +617,77 @@ enum quantum_keycodes {
// In fact, we changed it to assume ON_PRESS for sanity/simplicity. If needed, you can add your own
// keycode modeled after the old version, kept below for this.
/* #define TO(layer, when) (QK_TO | (when << 0x4) | (layer & 0xFF)) */
-#define TO(layer) (QK_TO | (ON_PRESS << 0x4) | (layer & 0xFF))
+#define TO(layer) (QK_TO | (ON_PRESS << 0x4) | ((layer) & 0xFF))
// Momentary switch layer - 256 layer max
-#define MO(layer) (QK_MOMENTARY | (layer & 0xFF))
+#define MO(layer) (QK_MOMENTARY | ((layer) & 0xFF))
// Set default layer - 256 layer max
-#define DF(layer) (QK_DEF_LAYER | (layer & 0xFF))
+#define DF(layer) (QK_DEF_LAYER | ((layer) & 0xFF))
// Toggle to layer - 256 layer max
-#define TG(layer) (QK_TOGGLE_LAYER | (layer & 0xFF))
+#define TG(layer) (QK_TOGGLE_LAYER | ((layer) & 0xFF))
// One-shot layer - 256 layer max
-#define OSL(layer) (QK_ONE_SHOT_LAYER | (layer & 0xFF))
+#define OSL(layer) (QK_ONE_SHOT_LAYER | ((layer) & 0xFF))
// L-ayer M-od: Momentary switch layer with modifiers active - 16 layer max, left mods only
-#define LM(layer, mod) (QK_LAYER_MOD | ((layer & 0xF) << 4) | ((mod) & 0xF))
+#define LM(layer, mod) (QK_LAYER_MOD | (((layer) & 0xF) << 4) | ((mod) & 0xF))
// One-shot mod
#define OSM(mod) (QK_ONE_SHOT_MOD | ((mod) & 0xFF))
// Layer tap-toggle
-#define TT(layer) (QK_LAYER_TAP_TOGGLE | (layer & 0xFF))
+#define TT(layer) (QK_LAYER_TAP_TOGGLE | ((layer) & 0xFF))
// M-od, T-ap - 256 keycode max
#define MT(mod, kc) (QK_MOD_TAP | (((mod) & 0x1F) << 8) | ((kc) & 0xFF))
-#define CTL_T(kc) MT(MOD_LCTL, kc)
#define LCTL_T(kc) MT(MOD_LCTL, kc)
#define RCTL_T(kc) MT(MOD_RCTL, kc)
+#define CTL_T(kc) LCTL_T(kc)
-#define SFT_T(kc) MT(MOD_LSFT, kc)
#define LSFT_T(kc) MT(MOD_LSFT, kc)
#define RSFT_T(kc) MT(MOD_RSFT, kc)
+#define SFT_T(kc) LSFT_T(kc)
-#define ALT_T(kc) MT(MOD_LALT, kc)
#define LALT_T(kc) MT(MOD_LALT, kc)
#define RALT_T(kc) MT(MOD_RALT, kc)
+#define ALT_T(kc) LALT_T(kc)
#define ALGR_T(kc) RALT_T(kc)
-#define GUI_T(kc) MT(MOD_LGUI, kc)
-#define CMD_T(kc) GUI_T(kc)
-#define WIN_T(kc) GUI_T(kc)
#define LGUI_T(kc) MT(MOD_LGUI, kc)
+#define RGUI_T(kc) MT(MOD_RGUI, kc)
#define LCMD_T(kc) LGUI_T(kc)
#define LWIN_T(kc) LGUI_T(kc)
-#define RGUI_T(kc) MT(MOD_RGUI, kc)
#define RCMD_T(kc) RGUI_T(kc)
#define RWIN_T(kc) RGUI_T(kc)
-
-#define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Control + Shift e.g. for gnome-terminal
-#define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl
-#define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left control alt and gui
-#define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right control alt and gui
-#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/
-#define SGUI_T(kc) MT(MOD_LGUI | MOD_LSFT, kc)
+#define GUI_T(kc) LGUI_T(kc)
+#define CMD_T(kc) LCMD_T(kc)
+#define WIN_T(kc) LWIN_T(kc)
+
+#define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Left Control + Shift e.g. for gnome-terminal
+#define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include GUI, so just Left Control + Shift + Alt
+#define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left Control + Alt + GUI
+#define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right Control + Alt + GUI
+#define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
+#define SGUI_T(kc) MT(MOD_LGUI | MOD_LSFT, kc) // Left Shift + GUI
#define SCMD_T(kc) SGUI_T(kc)
#define SWIN_T(kc) SGUI_T(kc)
-#define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc) // Left control and left alt
+#define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc) // Left Control + Alt
+#define ALL_T(kc) HYPR_T(kc)
// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
#define KC_HYPR HYPR(KC_NO)
#define KC_MEH MEH(KC_NO)
#ifdef UNICODE_ENABLE
- // For sending unicode codes.
- // You may not send codes over 7FFF -- this supports most of UTF8.
- // To have a key that sends out Œ, go UC(0x0152)
- #define UNICODE(n) (QK_UNICODE | (n))
- #define UC(n) UNICODE(n)
+ // Allows Unicode input up to 0x7FFF
+ #define UC(c) (QK_UNICODE | (c))
#endif
-
#ifdef UNICODEMAP_ENABLE
- #define X(n) (QK_UNICODE_MAP | (n))
+ // Allows Unicode input up to 0x10FFFF, requires unicode_map
+ #define X(i) (QK_UNICODEMAP | (i))
#endif
#define UC_MOD UNICODE_MODE_FORWARD
diff --git a/quantum/split_common/i2c.h b/quantum/split_common/i2c.h
index b3cbe8c826..91e8e96f47 100644
--- a/quantum/split_common/i2c.h
+++ b/quantum/split_common/i2c.h
@@ -1,5 +1,4 @@
-#ifndef I2C_H
-#define I2C_H
+#pragma once
#include <stdint.h>
@@ -58,5 +57,3 @@ extern unsigned char i2c_readNak(void);
extern unsigned char i2c_read(unsigned char ack);
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c
index 2c37053f88..c3d2857ed5 100644
--- a/quantum/split_common/matrix.c
+++ b/quantum/split_common/matrix.c
@@ -25,529 +25,304 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "matrix.h"
#include "split_util.h"
#include "config.h"
-#include "timer.h"
#include "split_flags.h"
#include "quantum.h"
-
-#ifdef BACKLIGHT_ENABLE
-# include "backlight.h"
- extern backlight_config_t backlight_config;
-#endif
-
-#if defined(USE_I2C) || defined(EH)
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if defined(USE_I2C) || defined(EH)
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-
-#else // USE_SERIAL
+#include "debounce.h"
+#include "transport.h"
#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
#elif (MATRIX_COLS <= 16)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop16(matrix[i])
-# define ROW_SHIFTER ((uint16_t)1)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
#elif (MATRIX_COLS <= 32)
-# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
-# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop32(matrix[i])
-# define ROW_SHIFTER ((uint32_t)1)
-#endif
-
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
#define ERROR_DISCONNECT_COUNT 5
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 0;
+#define ROWS_PER_HAND (MATRIX_ROWS / 2)
+#ifdef DIRECT_PINS
+static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
+#else
static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+#endif
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#endif
+static matrix_row_t raw_matrix[ROWS_PER_HAND];
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
+// row offsets for each hand
+uint8_t thisHand, thatHand;
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
+// user-defined overridable functions
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
+__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
-__attribute__ ((weak))
-void matrix_slave_scan_user(void) {
-}
+__attribute__((weak)) void matrix_init_user(void) {}
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
+__attribute__((weak)) void matrix_scan_user(void) {}
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
+__attribute__((weak)) void matrix_slave_scan_user(void) {}
-void matrix_init(void)
-{
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
+// helper functions
- // Set pinout for right half if pinout for that half is defined
- if (!isLeftHand) {
-#ifdef MATRIX_ROW_PINS_RIGHT
- const uint8_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++)
- row_pins[i] = row_pins_right[i];
-#endif
-#ifdef MATRIX_COL_PINS_RIGHT
- const uint8_t col_pins_right[MATRIX_COLS] = MATRIX_COL_PINS_RIGHT;
- for (uint8_t i = 0; i < MATRIX_COLS; i++)
- col_pins[i] = col_pins_right[i];
-#endif
- }
+inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
- // initialize row and col
-#if (DIODE_DIRECTION == COL2ROW)
- unselect_rows();
- init_cols();
-#elif (DIODE_DIRECTION == ROW2COL)
- unselect_cols();
- init_rows();
-#endif
+inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
+bool matrix_is_modified(void) {
+ if (debounce_active()) return false;
+ return true;
}
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
+inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
+inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
- }
-#endif
+void matrix_print(void) {
+ print_matrix_header();
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row);
+ print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
- return 1;
+uint8_t matrix_key_count(void) {
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
}
-#if defined(USE_I2C) || defined(EH)
-
-// Get rows from other half over i2c
-int i2c_transaction(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
- int err = 0;
-
- // write backlight info
- #ifdef BACKLIGHT_ENABLE
- if (BACKLIT_DIRTY) {
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) goto i2c_error;
-
- // Backlight location
- err = i2c_master_write(I2C_BACKLIT_START);
- if (err) goto i2c_error;
-
- // Write backlight
- i2c_master_write(get_backlight_level());
-
- BACKLIT_DIRTY = false;
- }
- #endif
+// matrix code
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) goto i2c_error;
+#ifdef DIRECT_PINS
- // start of matrix stored at I2C_KEYMAP_START
- err = i2c_master_write(I2C_KEYMAP_START);
- if (err) goto i2c_error;
+static void init_pins(void) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ pin_t pin = direct_pins[row][col];
+ if (pin != NO_PIN) {
+ setPinInputHigh(pin);
+ }
+ }
+ }
+}
- // Start read
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
- if (err) goto i2c_error;
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ matrix_row_t last_row_value = current_matrix[current_row];
+ current_matrix[current_row] = 0;
- if (!err) {
- int i;
- for (i = 0; i < ROWS_PER_HAND-1; ++i) {
- matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
- }
- matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
- i2c_master_stop();
- } else {
-i2c_error: // the cable is disconnceted, or something else went wrong
- i2c_reset_state();
- return err;
+ for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ pin_t pin = direct_pins[current_row][col_index];
+ if (pin != NO_PIN) {
+ current_matrix[current_row] |= readPin(pin) ? 0 : (ROW_SHIFTER << col_index);
}
-
- #ifdef RGBLIGHT_ENABLE
- if (RGB_DIRTY) {
- err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
- if (err) goto i2c_error;
-
- // RGB Location
- err = i2c_master_write(I2C_RGB_START);
- if (err) goto i2c_error;
-
- uint32_t dword = eeconfig_read_rgblight();
-
- // Write RGB
- err = i2c_master_write_data(&dword, 4);
- if (err) goto i2c_error;
-
- RGB_DIRTY = false;
- i2c_master_stop();
- }
- #endif
+ }
- return 0;
+ return (last_row_value != current_matrix[current_row]);
}
-#else // USE_SERIAL
-
+#elif (DIODE_DIRECTION == COL2ROW)
-typedef struct _Serial_s2m_buffer_t {
- // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
- matrix_row_t smatrix[ROWS_PER_HAND];
-} Serial_s2m_buffer_t;
+static void select_row(uint8_t row) {
+ writePinLow(row_pins[row]);
+ setPinOutput(row_pins[row]);
+}
-volatile Serial_s2m_buffer_t serial_s2m_buffer = {};
-volatile Serial_m2s_buffer_t serial_m2s_buffer = {};
-uint8_t volatile status0 = 0;
+static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); }
-SSTD_t transactions[] = {
- { (uint8_t *)&status0,
- sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer,
- sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer
+static void unselect_rows(void) {
+ for (uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+ setPinInputHigh(row_pins[x]);
}
-};
+}
-void serial_master_init(void)
-{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
+static void init_pins(void) {
+ unselect_rows();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+}
-void serial_slave_init(void)
-{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
-int serial_transaction(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
- if (soft_serial_transaction()) {
- return 1;
- }
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
- // TODO: if MATRIX_COLS > 8 change to unpack()
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_s2m_buffer.smatrix[i];
- }
-
- #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
- // Code to send RGB over serial goes here (not implemented yet)
- #endif
-
- #ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
- #endif
-
- return 0;
-}
-#endif
+ // For each col...
+ for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= readPin(col_pins[col_index]) ? 0 : (ROW_SHIFTER << col_index);
+ }
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
+ // Unselect row
+ unselect_row(current_row);
-#if defined(USE_I2C) || defined(EH)
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#endif
+ return (last_row_value != current_matrix[current_row]);
+}
- error_count++;
+#elif (DIODE_DIRECTION == ROW2COL)
- if (error_count > ERROR_DISCONNECT_COUNT) {
- // reset other half if disconnected
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = 0;
- }
- }
- } else {
- error_count = 0;
- }
- matrix_scan_quantum();
- return ret;
+static void select_col(uint8_t col) {
+ writePinLow(col_pins[col]);
+ setPinOutput(col_pins[col]);
}
-void matrix_slave_scan(void) {
- _matrix_scan();
-
- int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+static void unselect_col(uint8_t col) { setPinInputHigh(col_pins[col]); }
-#if defined(USE_I2C) || defined(EH)
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[I2C_KEYMAP_START+i] = matrix[offset+i];
- }
-#else // USE_SERIAL
- // TODO: if MATRIX_COLS > 8 change to pack()
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_s2m_buffer.smatrix[i] = matrix[offset+i];
- }
-#endif
- matrix_slave_scan_user();
+static void unselect_cols(void) {
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
}
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
+static void init_pins(void) {
+ unselect_cols();
+ for (uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
}
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+ bool matrix_changed = false;
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for (uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) {
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[row_index];
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- pbin_reverse16(matrix_get_row(row));
- print("\n");
+ // Check row pin state
+ if (readPin(row_pins[row_index])) {
+ // Pin HI, clear col bit
+ current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ } else {
+ // Pin LO, set col bit
+ current_matrix[row_index] |= (ROW_SHIFTER << current_col);
}
-}
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) {
+ matrix_changed = true;
}
- return count;
-}
+ }
-#if (DIODE_DIRECTION == COL2ROW)
+ // Unselect col
+ unselect_col(current_col);
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
+ return matrix_changed;
}
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
+#endif
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
+void matrix_init(void) {
+ debug_enable = true;
+ debug_matrix = true;
+ debug_mouse = true;
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= readPin(col_pins[col_index]) ? 0 : (ROW_SHIFTER << col_index);
+ // Set pinout for right half if pinout for that half is defined
+ if (!isLeftHand) {
+#ifdef MATRIX_ROW_PINS_RIGHT
+ const uint8_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ row_pins[i] = row_pins_right[i];
}
+#endif
+#ifdef MATRIX_COL_PINS_RIGHT
+ const uint8_t col_pins_right[MATRIX_COLS] = MATRIX_COL_PINS_RIGHT;
+ for (uint8_t i = 0; i < MATRIX_COLS; i++) {
+ col_pins[i] = col_pins_right[i];
+ }
+#endif
+ }
- // Unselect row
- unselect_row(current_row);
+ thisHand = isLeftHand ? 0 : (ROWS_PER_HAND);
+ thatHand = ROWS_PER_HAND - thisHand;
- return (last_row_value != current_matrix[current_row]);
-}
+ // initialize key pins
+ init_pins();
-static void select_row(uint8_t row)
-{
- writePinLow(row_pins[row]);
- setPinOutput(row_pins[row]);
-}
+ // initialize matrix state: all keys off
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ }
-static void unselect_row(uint8_t row)
-{
- setPinInputHigh(row_pins[row]);
-}
+ debounce_init(ROWS_PER_HAND);
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- setPinInputHigh(row_pins[x]);
- }
+ matrix_init_quantum();
}
+uint8_t _matrix_scan(void) {
+ bool changed = false;
+
+#if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW)
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
#elif (DIODE_DIRECTION == ROW2COL)
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(raw_matrix, current_col);
+ }
+#endif
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- setPinInputHigh(row_pins[x]);
- }
-}
+ debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed);
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
+ return 1;
+}
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
+uint8_t matrix_scan(void) {
+ uint8_t ret = _matrix_scan();
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
+ if (is_keyboard_master()) {
+ static uint8_t error_count;
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
+ if (!transport_master(matrix + thatHand)) {
+ error_count++;
- // Check row pin state
- if (readPin(row_pins[row_index]))
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
+ if (error_count > ERROR_DISCONNECT_COUNT) {
+ // reset other half if disconnected
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[thatHand + i] = 0;
}
+ }
+ } else {
+ error_count = 0;
}
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- writePinLow(col_pins[col]);
- setPinOutput(col_pins[col]);
-}
-
-static void unselect_col(uint8_t col)
-{
- setPinInputHigh(col_pins[col]);
-}
+ matrix_scan_quantum();
+ } else {
+ transport_slave(matrix + thisHand);
+ matrix_slave_scan_user();
+ }
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
+ return ret;
}
-
-#endif
diff --git a/quantum/split_common/matrix.h b/quantum/split_common/matrix.h
index b5cb45baed..c2bdd3098c 100644
--- a/quantum/split_common/matrix.h
+++ b/quantum/split_common/matrix.h
@@ -1,31 +1,3 @@
-#ifndef SPLIT_COMMON_MATRIX_H
-#define SPLIT_COMMON_MATRIX_H
+#pragma once
#include <common/matrix.h>
-
-#ifdef RGBLIGHT_ENABLE
-# include "rgblight.h"
-#endif
-
-typedef struct _Serial_m2s_buffer_t {
-#ifdef BACKLIGHT_ENABLE
- uint8_t backlight_level;
-#endif
-#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
- rgblight_config_t rgblight_config; //not yet use
- //
- // When MCUs on both sides drive their respective RGB LED chains,
- // it is necessary to synchronize, so it is necessary to communicate RGB information.
- // In that case, define the RGBLIGHT_SPLIT macro.
- //
- // Otherwise, if the master side MCU drives both sides RGB LED chains,
- // there is no need to communicate.
-#endif
-} Serial_m2s_buffer_t;
-
-extern volatile Serial_m2s_buffer_t serial_m2s_buffer;
-
-void serial_master_init(void);
-void serial_slave_init(void);
-
-#endif
diff --git a/quantum/split_common/serial.h b/quantum/split_common/serial.h
index b6638b3bde..1c1e640069 100644
--- a/quantum/split_common/serial.h
+++ b/quantum/split_common/serial.h
@@ -1,5 +1,4 @@
-#ifndef SOFT_SERIAL_H
-#define SOFT_SERIAL_H
+#pragma once
#include <stdbool.h>
@@ -61,5 +60,3 @@ int soft_serial_transaction(int sstd_index);
#ifdef SERIAL_USE_MULTI_TRANSACTION
int soft_serial_get_and_clean_status(int sstd_index);
#endif
-
-#endif /* SOFT_SERIAL_H */
diff --git a/quantum/split_common/split_flags.h b/quantum/split_common/split_flags.h
index f101fff5b5..aaac474a7d 100644
--- a/quantum/split_common/split_flags.h
+++ b/quantum/split_common/split_flags.h
@@ -1,10 +1,9 @@
-#ifndef SPLIT_FLAGS_H
-#define SPLIT_FLAGS_H
+#pragma once
#include <stdbool.h>
#include <stdint.h>
-/**
+/**
* Global Flags
**/
@@ -14,7 +13,3 @@ extern volatile bool RGB_DIRTY;
//Backlight Stuff
extern volatile bool BACKLIT_DIRTY;
-
-
-
-#endif \ No newline at end of file
diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c
index e41b6f6386..5095cb8fdc 100644
--- a/quantum/split_common/split_util.c
+++ b/quantum/split_common/split_util.c
@@ -4,142 +4,84 @@
#include "config.h"
#include "timer.h"
#include "split_flags.h"
+#include "transport.h"
#include "quantum.h"
#ifdef EE_HANDS
# include "tmk_core/common/eeprom.h"
-#endif
-
-#ifdef BACKLIGHT_ENABLE
-# include "backlight.h"
-#endif
-
-#if defined(USE_I2C) || defined(EH)
-# include "i2c.h"
+# include "eeconfig.h"
#endif
volatile bool isLeftHand = true;
-volatile uint8_t setTries = 0;
-
-static void setup_handedness(void) {
+__attribute__((weak))
+bool is_keyboard_left(void) {
#ifdef SPLIT_HAND_PIN
// Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
setPinInput(SPLIT_HAND_PIN);
- isLeftHand = readPin(SPLIT_HAND_PIN);
+ return readPin(SPLIT_HAND_PIN);
#else
#ifdef EE_HANDS
- isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
+ return eeprom_read_byte(EECONFIG_HANDEDNESS);
#else
#ifdef MASTER_RIGHT
- isLeftHand = !has_usb();
+ return !is_keyboard_master();
#else
- isLeftHand = has_usb();
+ return is_keyboard_master();
#endif
#endif
#endif
}
-static void keyboard_master_setup(void) {
-#if defined(USE_I2C) || defined(EH)
- i2c_master_init();
- #ifdef SSD1306OLED
- matrix_master_OLED_init ();
- #endif
-#else
- serial_master_init();
-#endif
+bool is_keyboard_master(void)
+{
+#ifdef __AVR__
+ static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN;
- // For master the Backlight info needs to be sent on startup
- // Otherwise the salve won't start with the proper info until an update
- BACKLIT_DIRTY = true;
-}
+ // only check once, as this is called often
+ if (usbstate == UNKNOWN)
+ {
+ USBCON |= (1 << OTGPADE); // enables VBUS pad
+ wait_us(5);
-static void keyboard_slave_setup(void) {
- timer_init();
-#if defined(USE_I2C) || defined(EH)
- i2c_slave_init(SLAVE_I2C_ADDRESS);
+ usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE; // checks state of VBUS
+ }
+
+ return (usbstate == MASTER);
#else
- serial_slave_init();
+ return true;
#endif
}
-bool has_usb(void) {
- USBCON |= (1 << OTGPADE); //enables VBUS pad
- _delay_us(5);
- return (USBSTA & (1<<VBUS)); //checks state of VBUS
-}
-
-void split_keyboard_setup(void) {
- setup_handedness();
+static void keyboard_master_setup(void) {
+#if defined(USE_I2C) || defined(EH)
+ #ifdef SSD1306OLED
+ matrix_master_OLED_init ();
+ #endif
+#endif
+ transport_master_init();
- if (has_usb()) {
- keyboard_master_setup();
- } else {
- keyboard_slave_setup();
- }
- sei();
+ // For master the Backlight info needs to be sent on startup
+ // Otherwise the salve won't start with the proper info until an update
+ BACKLIT_DIRTY = true;
}
-void keyboard_slave_loop(void) {
- matrix_init();
-
- //Init RGB
- #ifdef RGBLIGHT_ENABLE
- rgblight_init();
- #endif
-
- while (1) {
- // Matrix Slave Scan
- matrix_slave_scan();
-
- // Read Backlight Info
- #ifdef BACKLIGHT_ENABLE
- #ifdef USE_I2C
- if (BACKLIT_DIRTY) {
- backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]);
- BACKLIT_DIRTY = false;
- }
- #else // USE_SERIAL
- backlight_set(serial_m2s_buffer.backlight_level);
- #endif
- #endif
- // Read RGB Info
- #ifdef RGBLIGHT_ENABLE
- #ifdef USE_I2C
- if (RGB_DIRTY) {
- // Disable interupts (RGB data is big)
- cli();
- // Create new DWORD for RGB data
- uint32_t dword;
-
- // Fill the new DWORD with the data that was sent over
- uint8_t *dword_dat = (uint8_t *)(&dword);
- for (int i = 0; i < 4; i++) {
- dword_dat[i] = i2c_slave_buffer[I2C_RGB_START+i];
- }
-
- // Update the RGB now with the new data and set RGB_DIRTY to false
- rgblight_update_dword(dword);
- RGB_DIRTY = false;
- // Re-enable interupts now that RGB is set
- sei();
- }
- #else // USE_SERIAL
- #ifdef RGBLIGHT_SPLIT
- // Add serial implementation for RGB here
- #endif
- #endif
- #endif
- }
+static void keyboard_slave_setup(void)
+{
+ transport_slave_init();
}
// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- //rgblight_init();
- keyboard_slave_loop();
- }
+void matrix_setup(void)
+{
+ isLeftHand = is_keyboard_left();
+
+ if (is_keyboard_master())
+ {
+ keyboard_master_setup();
+ }
+ else
+ {
+ keyboard_slave_setup();
+ }
}
diff --git a/quantum/split_common/split_util.h b/quantum/split_common/split_util.h
index d6cf3e72a9..20f7535bf4 100644
--- a/quantum/split_common/split_util.h
+++ b/quantum/split_common/split_util.h
@@ -1,23 +1,10 @@
-#ifndef SPLIT_KEYBOARD_UTIL_H
-#define SPLIT_KEYBOARD_UTIL_H
+#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
extern volatile bool isLeftHand;
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-void keyboard_slave_loop(void);
-
void matrix_master_OLED_init (void);
-
-#endif
diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c
new file mode 100644
index 0000000000..95738530ec
--- /dev/null
+++ b/quantum/split_common/transport.c
@@ -0,0 +1,224 @@
+
+#include "config.h"
+#include "matrix.h"
+#include "quantum.h"
+
+#define ROWS_PER_HAND (MATRIX_ROWS/2)
+
+#ifdef RGBLIGHT_ENABLE
+# include "rgblight.h"
+#endif
+
+#ifdef BACKLIGHT_ENABLE
+# include "backlight.h"
+ extern backlight_config_t backlight_config;
+#endif
+
+#if defined(USE_I2C) || defined(EH)
+
+#include "i2c.h"
+
+#ifndef SLAVE_I2C_ADDRESS
+# define SLAVE_I2C_ADDRESS 0x32
+#endif
+
+#if (MATRIX_COLS > 8)
+# error "Currently only supports 8 COLS"
+#endif
+
+// Get rows from other half over i2c
+bool transport_master(matrix_row_t matrix[]) {
+ int err = 0;
+
+ // write backlight info
+#ifdef BACKLIGHT_ENABLE
+ if (BACKLIT_DIRTY) {
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) { goto i2c_error; }
+
+ // Backlight location
+ err = i2c_master_write(I2C_BACKLIT_START);
+ if (err) { goto i2c_error; }
+
+ // Write backlight
+ i2c_master_write(get_backlight_level());
+
+ BACKLIT_DIRTY = false;
+ }
+#endif
+
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) { goto i2c_error; }
+
+ // start of matrix stored at I2C_KEYMAP_START
+ err = i2c_master_write(I2C_KEYMAP_START);
+ if (err) { goto i2c_error; }
+
+ // Start read
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
+ if (err) { goto i2c_error; }
+
+ if (!err) {
+ int i;
+ for (i = 0; i < ROWS_PER_HAND-1; ++i) {
+ matrix[i] = i2c_master_read(I2C_ACK);
+ }
+ matrix[i] = i2c_master_read(I2C_NACK);
+ i2c_master_stop();
+ } else {
+i2c_error: // the cable is disconnceted, or something else went wrong
+ i2c_reset_state();
+ return false;
+ }
+
+#ifdef RGBLIGHT_ENABLE
+ if (RGB_DIRTY) {
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) { goto i2c_error; }
+
+ // RGB Location
+ err = i2c_master_write(I2C_RGB_START);
+ if (err) { goto i2c_error; }
+
+ uint32_t dword = eeconfig_read_rgblight();
+
+ // Write RGB
+ err = i2c_master_write_data(&dword, 4);
+ if (err) { goto i2c_error; }
+
+ RGB_DIRTY = false;
+ i2c_master_stop();
+ }
+#endif
+
+ return true;
+}
+
+void transport_slave(matrix_row_t matrix[]) {
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i)
+ {
+ i2c_slave_buffer[I2C_KEYMAP_START + i] = matrix[i];
+ }
+ // Read Backlight Info
+ #ifdef BACKLIGHT_ENABLE
+ if (BACKLIT_DIRTY)
+ {
+ backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]);
+ BACKLIT_DIRTY = false;
+ }
+ #endif
+ #ifdef RGBLIGHT_ENABLE
+ if (RGB_DIRTY)
+ {
+ // Disable interupts (RGB data is big)
+ cli();
+ // Create new DWORD for RGB data
+ uint32_t dword;
+
+ // Fill the new DWORD with the data that was sent over
+ uint8_t * dword_dat = (uint8_t *)(&dword);
+ for (int i = 0; i < 4; i++)
+ {
+ dword_dat[i] = i2c_slave_buffer[I2C_RGB_START + i];
+ }
+
+ // Update the RGB now with the new data and set RGB_DIRTY to false
+ rgblight_update_dword(dword);
+ RGB_DIRTY = false;
+ // Re-enable interupts now that RGB is set
+ sei();
+ }
+ #endif
+}
+
+void transport_master_init(void) {
+ i2c_master_init();
+}
+
+void transport_slave_init(void) {
+ i2c_slave_init(SLAVE_I2C_ADDRESS);
+}
+
+#else // USE_SERIAL
+
+#include "serial.h"
+
+typedef struct _Serial_s2m_buffer_t {
+ // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
+ matrix_row_t smatrix[ROWS_PER_HAND];
+} Serial_s2m_buffer_t;
+
+typedef struct _Serial_m2s_buffer_t {
+#ifdef BACKLIGHT_ENABLE
+ uint8_t backlight_level;
+#endif
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+ rgblight_config_t rgblight_config; //not yet use
+ //
+ // When MCUs on both sides drive their respective RGB LED chains,
+ // it is necessary to synchronize, so it is necessary to communicate RGB information.
+ // In that case, define the RGBLIGHT_SPLIT macro.
+ //
+ // Otherwise, if the master side MCU drives both sides RGB LED chains,
+ // there is no need to communicate.
+#endif
+} Serial_m2s_buffer_t;
+
+volatile Serial_s2m_buffer_t serial_s2m_buffer = {};
+volatile Serial_m2s_buffer_t serial_m2s_buffer = {};
+uint8_t volatile status0 = 0;
+
+SSTD_t transactions[] = {
+ { (uint8_t *)&status0,
+ sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer,
+ sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer
+ }
+};
+
+void transport_master_init(void)
+{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
+
+void transport_slave_init(void)
+{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
+
+bool transport_master(matrix_row_t matrix[]) {
+
+ if (soft_serial_transaction()) {
+ return false;
+ }
+
+ // TODO: if MATRIX_COLS > 8 change to unpack()
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[i] = serial_s2m_buffer.smatrix[i];
+ }
+
+ #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+ // Code to send RGB over serial goes here (not implemented yet)
+ #endif
+
+ #ifdef BACKLIGHT_ENABLE
+ // Write backlight level for slave to read
+ serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
+ #endif
+
+ return true;
+}
+
+void transport_slave(matrix_row_t matrix[]) {
+
+ // TODO: if MATRIX_COLS > 8 change to pack()
+ for (int i = 0; i < ROWS_PER_HAND; ++i)
+ {
+ serial_s2m_buffer.smatrix[i] = matrix[i];
+ }
+ #ifdef BACKLIGHT_ENABLE
+ backlight_set(serial_m2s_buffer.backlight_level);
+ #endif
+ #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+ // Add serial implementation for RGB here
+ #endif
+
+}
+
+#endif
diff --git a/quantum/split_common/transport.h b/quantum/split_common/transport.h
new file mode 100644
index 0000000000..ccce57e444
--- /dev/null
+++ b/quantum/split_common/transport.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include <common/matrix.h>
+
+void transport_master_init(void);
+void transport_slave_init(void);
+
+// returns false if valid data not received from slave
+bool transport_master(matrix_row_t matrix[]);
+void transport_slave(matrix_row_t matrix[]);
diff --git a/keyboards/proton_c/chconf.h b/quantum/stm32/chconf.h
index 1d9f12ff1f..1d9f12ff1f 100644
--- a/keyboards/proton_c/chconf.h
+++ b/quantum/stm32/chconf.h
diff --git a/keyboards/planck/rev6/halconf.h b/quantum/stm32/halconf.h
index 8fe8e0c6f5..8fe8e0c6f5 100644
--- a/keyboards/planck/rev6/halconf.h
+++ b/quantum/stm32/halconf.h
diff --git a/keyboards/planck/rev6/mcuconf.h b/quantum/stm32/mcuconf.h
index 7c3c6e570c..7c3c6e570c 100644
--- a/keyboards/planck/rev6/mcuconf.h
+++ b/quantum/stm32/mcuconf.h
diff --git a/quantum/stm32/proton_c.mk b/quantum/stm32/proton_c.mk
new file mode 100644
index 0000000000..a0fa013736
--- /dev/null
+++ b/quantum/stm32/proton_c.mk
@@ -0,0 +1,44 @@
+# Proton C MCU settings for converting AVR projects
+
+# These are defaults based on what has been implemented for ARM boards
+AUDIO_ENABLE = yes
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
+
+# The rest of these settings shouldn't change
+
+## chip/board settings
+# - the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F3xx
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h
index eed50e5c04..d05b2cb98d 100644
--- a/quantum/template/avr/config.h
+++ b/quantum/template/avr/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2018 REPLACE_WITH_YOUR_NAME
+Copyright 2019 REPLACE_WITH_YOUR_NAME
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/avr/template.c b/quantum/template/avr/template.c
index b6366fd9a3..3deeae88ba 100644
--- a/quantum/template/avr/template.c
+++ b/quantum/template/avr/template.c
@@ -1,4 +1,4 @@
-/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 REPLACE_WITH_YOUR_NAME
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/base/keymaps/default/config.h b/quantum/template/base/keymaps/default/config.h
index 4496c59100..c8e4334124 100644
--- a/quantum/template/base/keymaps/default/config.h
+++ b/quantum/template/base/keymaps/default/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 REPLACE_WITH_YOUR_NAME
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/base/keymaps/default/keymap.c b/quantum/template/base/keymaps/default/keymap.c
index 5f0730c8a9..11cd134a06 100644
--- a/quantum/template/base/keymaps/default/keymap.c
+++ b/quantum/template/base/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 REPLACE_WITH_YOUR_NAME
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/ps2avrgb/template.h b/quantum/template/base/template.h
index b4d6f46624..caf2abb4c6 100644
--- a/quantum/template/ps2avrgb/template.h
+++ b/quantum/template/base/template.h
@@ -1,4 +1,4 @@
-/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 REPLACE_WITH_YOUR_NAME
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,8 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef %KEYBOARD_UPPERCASE%_H
-#define %KEYBOARD_UPPERCASE%_H
+#pragma once
#include "quantum.h"
@@ -34,5 +33,3 @@
{ k00, k01, k02 }, \
{ k10, KC_NO, k11 }, \
}
-
-#endif
diff --git a/quantum/template/ps2avrgb/rules.mk b/quantum/template/ps2avrgb/rules.mk
index 85603f955c..bcd7dff999 100644
--- a/quantum/template/ps2avrgb/rules.mk
+++ b/quantum/template/ps2avrgb/rules.mk
@@ -1,4 +1,4 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+# Copyright 2019 Luiz Ribeiro <luizribeiro@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/ps2avrgb/template.c b/quantum/template/ps2avrgb/template.c
index 8bbf9ebda5..4e35a2c129 100644
--- a/quantum/template/ps2avrgb/template.c
+++ b/quantum/template/ps2avrgb/template.c
@@ -1,4 +1,4 @@
-/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 REPLACE_WITH_YOUR_NAME
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/tests/basic/keymap.c b/tests/basic/keymap.c
index 3f97c0a0ee..5dd9aaeb6e 100644
--- a/tests/basic/keymap.c
+++ b/tests/basic/keymap.c
@@ -41,6 +41,3 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
}
return MACRO_NONE;
};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
-} \ No newline at end of file
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index b99c2acaa7..ec8d6ed7b9 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -653,7 +653,7 @@ void process_action(keyrecord_t *record, action_t action)
#ifndef NO_ACTION_TAPPING
#ifdef RETRO_TAPPING
- if (!is_tap_key(record->event.key)) {
+ if (!is_tap_action(action)) {
retro_tapping_counter = 0;
} else {
if (event.pressed) {
@@ -929,7 +929,15 @@ void clear_keyboard_but_mods_and_keys()
bool is_tap_key(keypos_t key)
{
action_t action = layer_switch_get_action(key);
+ return is_tap_action(action);
+}
+/** \brief Utilities for actions. (FIXME: Needs better description)
+ *
+ * FIXME: Needs documentation.
+ */
+bool is_tap_action(action_t action)
+{
switch (action.kind.id) {
case ACT_LMODS_TAP:
case ACT_RMODS_TAP:
diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h
index 8e47e5339e..799e3bb0ef 100644
--- a/tmk_core/common/action.h
+++ b/tmk_core/common/action.h
@@ -97,6 +97,7 @@ void clear_keyboard_but_mods(void);
void clear_keyboard_but_mods_and_keys(void);
void layer_switch(uint8_t new_layer);
bool is_tap_key(keypos_t key);
+bool is_tap_action(action_t action);
#ifndef NO_ACTION_TAPPING
void process_record_tap_hint(keyrecord_t *record);
diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c
index 120ce3f51b..6ff8c5549b 100644
--- a/tmk_core/common/action_layer.c
+++ b/tmk_core/common/action_layer.c
@@ -17,82 +17,76 @@ uint32_t default_layer_state = 0;
/** \brief Default Layer State Set At user Level
*
- * FIXME: Needs docs
+ * Run user code on default layer state change
*/
__attribute__((weak))
uint32_t default_layer_state_set_user(uint32_t state) {
- return state;
+ return state;
}
/** \brief Default Layer State Set At Keyboard Level
*
- * FIXME: Needs docs
+ * Run keyboard code on default layer state change
*/
__attribute__((weak))
uint32_t default_layer_state_set_kb(uint32_t state) {
- return default_layer_state_set_user(state);
+ return default_layer_state_set_user(state);
}
/** \brief Default Layer State Set
*
- * FIXME: Needs docs
+ * Static function to set the default layer state, prints debug info and clears keys
*/
-static void default_layer_state_set(uint32_t state)
-{
- state = default_layer_state_set_kb(state);
- debug("default_layer_state: ");
- default_layer_debug(); debug(" to ");
- default_layer_state = state;
- default_layer_debug(); debug("\n");
+static void default_layer_state_set(uint32_t state) {
+ state = default_layer_state_set_kb(state);
+ debug("default_layer_state: ");
+ default_layer_debug(); debug(" to ");
+ default_layer_state = state;
+ default_layer_debug(); debug("\n");
#ifdef STRICT_LAYER_RELEASE
- clear_keyboard_but_mods(); // To avoid stuck keys
+ clear_keyboard_but_mods(); // To avoid stuck keys
#else
- clear_keyboard_but_mods_and_keys(); // Don't reset held keys
+ clear_keyboard_but_mods_and_keys(); // Don't reset held keys
#endif
}
/** \brief Default Layer Print
*
- * FIXME: Needs docs
+ * Print out the hex value of the 32-bit default layer state, as well as the value of the highest bit.
*/
-void default_layer_debug(void)
-{
- dprintf("%08lX(%u)", default_layer_state, biton32(default_layer_state));
+void default_layer_debug(void) {
+ dprintf("%08lX(%u)", default_layer_state, biton32(default_layer_state));
}
/** \brief Default Layer Set
*
- * FIXME: Needs docs
+ * Sets the default layer state.
*/
-void default_layer_set(uint32_t state)
-{
- default_layer_state_set(state);
+void default_layer_set(uint32_t state) {
+ default_layer_state_set(state);
}
#ifndef NO_ACTION_LAYER
/** \brief Default Layer Or
*
- * FIXME: Needs docs
+ * Turns on the default layer based on matching bits between specifed layer and existing layer state
*/
-void default_layer_or(uint32_t state)
-{
- default_layer_state_set(default_layer_state | state);
+void default_layer_or(uint32_t state) {
+ default_layer_state_set(default_layer_state | state);
}
/** \brief Default Layer And
*
- * FIXME: Needs docs
+ * Turns on default layer based on matching enabled bits between specifed layer and existing layer state
*/
-void default_layer_and(uint32_t state)
-{
- default_layer_state_set(default_layer_state & state);
+void default_layer_and(uint32_t state) {
+ default_layer_state_set(default_layer_state & state);
}
/** \brief Default Layer Xor
*
- * FIXME: Needs docs
+ * Turns on default layer based on non-matching bits between specifed layer and existing layer state
*/
-void default_layer_xor(uint32_t state)
-{
- default_layer_state_set(default_layer_state ^ state);
+void default_layer_xor(uint32_t state) {
+ default_layer_state_set(default_layer_state ^ state);
}
#endif
@@ -104,170 +98,168 @@ uint32_t layer_state = 0;
/** \brief Layer state set user
*
- * FIXME: Needs docs
+ * Runs user code on layer state change
*/
__attribute__((weak))
uint32_t layer_state_set_user(uint32_t state) {
- return state;
+ return state;
}
/** \brief Layer state set keyboard
*
- * FIXME: Needs docs
+ * Runs keyboard code on layer state change
*/
__attribute__((weak))
uint32_t layer_state_set_kb(uint32_t state) {
- return layer_state_set_user(state);
+ return layer_state_set_user(state);
}
/** \brief Layer state set
*
- * FIXME: Needs docs
+ * Sets the layer to match the specifed state (a bitmask)
*/
-void layer_state_set(uint32_t state)
-{
- state = layer_state_set_kb(state);
- dprint("layer_state: ");
- layer_debug(); dprint(" to ");
- layer_state = state;
- layer_debug(); dprintln();
+void layer_state_set(uint32_t state) {
+ state = layer_state_set_kb(state);
+ dprint("layer_state: ");
+ layer_debug(); dprint(" to ");
+ layer_state = state;
+ layer_debug(); dprintln();
#ifdef STRICT_LAYER_RELEASE
- clear_keyboard_but_mods(); // To avoid stuck keys
+ clear_keyboard_but_mods(); // To avoid stuck keys
#else
- clear_keyboard_but_mods_and_keys(); // Don't reset held keys
+ clear_keyboard_but_mods_and_keys(); // Don't reset held keys
#endif
}
/** \brief Layer clear
*
- * FIXME: Needs docs
+ * Turn off all layers
*/
-void layer_clear(void)
-{
- layer_state_set(0);
+void layer_clear(void) {
+ layer_state_set(0);
}
/** \brief Layer state is
*
- * FIXME: Needs docs
+ * Return whether the given state is on (it might still be shadowed by a higher state, though)
*/
-bool layer_state_is(uint8_t layer)
-{
- return layer_state_cmp(layer_state, layer);
+bool layer_state_is(uint8_t layer) {
+ return layer_state_cmp(layer_state, layer);
}
/** \brief Layer state compare
*
- * FIXME: Needs docs
+ * Used for comparing layers {mostly used for unit testing}
*/
bool layer_state_cmp(uint32_t cmp_layer_state, uint8_t layer) {
- if (!cmp_layer_state) { return layer == 0; }
- return (cmp_layer_state & (1UL<<layer)) != 0;
+ if (!cmp_layer_state) { return layer == 0; }
+ return (cmp_layer_state & (1UL<<layer)) != 0;
}
/** \brief Layer move
*
- * FIXME: Needs docs
+ * Turns on the given layer and turn off all other layers
*/
-void layer_move(uint8_t layer)
-{
- layer_state_set(1UL<<layer);
+void layer_move(uint8_t layer) {
+ layer_state_set(1UL<<layer);
}
/** \brief Layer on
*
- * FIXME: Needs docs
+ * Turns on given layer
*/
-void layer_on(uint8_t layer)
-{
- layer_state_set(layer_state | (1UL<<layer));
+void layer_on(uint8_t layer) {
+ layer_state_set(layer_state | (1UL<<layer));
}
/** \brief Layer off
*
- * FIXME: Needs docs
+ * Turns off given layer
*/
-void layer_off(uint8_t layer)
-{
- layer_state_set(layer_state & ~(1UL<<layer));
+void layer_off(uint8_t layer) {
+ layer_state_set(layer_state & ~(1UL<<layer));
}
/** \brief Layer invert
*
- * FIXME: Needs docs
+ * Toggle the given layer (set it if it's unset, or unset it if it's set)
*/
-void layer_invert(uint8_t layer)
-{
- layer_state_set(layer_state ^ (1UL<<layer));
+void layer_invert(uint8_t layer) {
+ layer_state_set(layer_state ^ (1UL<<layer));
}
/** \brief Layer or
*
- * FIXME: Needs docs
+ * Turns on layers based on matching bits between specifed layer and existing layer state
*/
-void layer_or(uint32_t state)
-{
- layer_state_set(layer_state | state);
+void layer_or(uint32_t state) {
+ layer_state_set(layer_state | state);
}
/** \brief Layer and
*
- * FIXME: Needs docs
+ * Turns on layers based on matching enabled bits between specifed layer and existing layer state
*/
-void layer_and(uint32_t state)
-{
- layer_state_set(layer_state & state);
+void layer_and(uint32_t state) {
+ layer_state_set(layer_state & state);
}
/** \brief Layer xor
*
- * FIXME: Needs docs
+ * Turns on layers based on non-matching bits between specifed layer and existing layer state
*/
-void layer_xor(uint32_t state)
-{
- layer_state_set(layer_state ^ state);
+void layer_xor(uint32_t state) {
+ layer_state_set(layer_state ^ state);
}
/** \brief Layer debug printing
*
- * FIXME: Needs docs
+ * Print out the hex value of the 32-bit layer state, as well as the value of the highest bit.
*/
-void layer_debug(void)
-{
- dprintf("%08lX(%u)", layer_state, biton32(layer_state));
+void layer_debug(void) {
+ dprintf("%08lX(%u)", layer_state, biton32(layer_state));
}
#endif
#if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE)
+/** \brief source layer cache
+ */
+
uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {{0}};
-void update_source_layers_cache(keypos_t key, uint8_t layer)
-{
- const uint8_t key_number = key.col + (key.row * MATRIX_COLS);
- const uint8_t storage_row = key_number / 8;
- const uint8_t storage_bit = key_number % 8;
-
- for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) {
- source_layers_cache[storage_row][bit_number] ^=
- (-((layer & (1U << bit_number)) != 0)
- ^ source_layers_cache[storage_row][bit_number])
- & (1U << storage_bit);
- }
+/** \brief update source layers cache
+ *
+ * Updates the cached keys when changing layers
+ */
+void update_source_layers_cache(keypos_t key, uint8_t layer) {
+ const uint8_t key_number = key.col + (key.row * MATRIX_COLS);
+ const uint8_t storage_row = key_number / 8;
+ const uint8_t storage_bit = key_number % 8;
+
+ for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) {
+ source_layers_cache[storage_row][bit_number] ^=
+ (-((layer & (1U << bit_number)) != 0)
+ ^ source_layers_cache[storage_row][bit_number])
+ & (1U << storage_bit);
+ }
}
-uint8_t read_source_layers_cache(keypos_t key)
-{
- const uint8_t key_number = key.col + (key.row * MATRIX_COLS);
- const uint8_t storage_row = key_number / 8;
- const uint8_t storage_bit = key_number % 8;
- uint8_t layer = 0;
-
- for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) {
- layer |=
- ((source_layers_cache[storage_row][bit_number]
- & (1U << storage_bit)) != 0)
- << bit_number;
- }
-
- return layer;
+/** \brief read source layers cache
+ *
+ * reads the cached keys stored when the layer was changed
+ */
+uint8_t read_source_layers_cache(keypos_t key) {
+ const uint8_t key_number = key.col + (key.row * MATRIX_COLS);
+ const uint8_t storage_row = key_number / 8;
+ const uint8_t storage_bit = key_number % 8;
+ uint8_t layer = 0;
+
+ for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) {
+ layer |=
+ ((source_layers_cache[storage_row][bit_number]
+ & (1U << storage_bit)) != 0)
+ << bit_number;
+ }
+
+ return layer;
}
#endif
@@ -278,61 +270,58 @@ uint8_t read_source_layers_cache(keypos_t key)
* when the layer is switched after the down event but before the up
* event as they may get stuck otherwise.
*/
-action_t store_or_get_action(bool pressed, keypos_t key)
-{
+action_t store_or_get_action(bool pressed, keypos_t key) {
#if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE)
- if (disable_action_cache) {
- return layer_switch_get_action(key);
- }
-
- uint8_t layer;
-
- if (pressed) {
- layer = layer_switch_get_layer(key);
- update_source_layers_cache(key, layer);
- }
- else {
- layer = read_source_layers_cache(key);
- }
- return action_for_key(layer, key);
-#else
+ if (disable_action_cache) {
return layer_switch_get_action(key);
+ }
+
+ uint8_t layer;
+
+ if (pressed) {
+ layer = layer_switch_get_layer(key);
+ update_source_layers_cache(key, layer);
+ }
+ else {
+ layer = read_source_layers_cache(key);
+ }
+ return action_for_key(layer, key);
+#else
+ return layer_switch_get_action(key);
#endif
}
/** \brief Layer switch get layer
*
- * FIXME: Needs docs
+ * Gets the layer based on key info
*/
-int8_t layer_switch_get_layer(keypos_t key)
-{
+int8_t layer_switch_get_layer(keypos_t key) {
#ifndef NO_ACTION_LAYER
- action_t action;
- action.code = ACTION_TRANSPARENT;
-
- uint32_t layers = layer_state | default_layer_state;
- /* check top layer first */
- for (int8_t i = 31; i >= 0; i--) {
- if (layers & (1UL<<i)) {
- action = action_for_key(i, key);
- if (action.code != ACTION_TRANSPARENT) {
- return i;
- }
- }
+ action_t action;
+ action.code = ACTION_TRANSPARENT;
+
+ uint32_t layers = layer_state | default_layer_state;
+ /* check top layer first */
+ for (int8_t i = 31; i >= 0; i--) {
+ if (layers & (1UL<<i)) {
+ action = action_for_key(i, key);
+ if (action.code != ACTION_TRANSPARENT) {
+ return i;
+ }
}
- /* fall back to layer 0 */
- return 0;
+ }
+ /* fall back to layer 0 */
+ return 0;
#else
- return biton32(default_layer_state);
+ return biton32(default_layer_state);
#endif
}
/** \brief Layer switch get layer
*
- * FIXME: Needs docs
+ * Gets action code based on key position
*/
-action_t layer_switch_get_action(keypos_t key)
-{
- return action_for_key(layer_switch_get_layer(key), key);
+action_t layer_switch_get_action(keypos_t key) {
+ return action_for_key(layer_switch_get_layer(key), key);
}
diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c
index afd4ae8b25..58401ace55 100644
--- a/tmk_core/common/action_util.c
+++ b/tmk_core/common/action_util.c
@@ -54,7 +54,7 @@ int8_t get_oneshot_locked_mods(void) { return oneshot_locked_mods; }
void set_oneshot_locked_mods(int8_t mods) { oneshot_locked_mods = mods; }
void clear_oneshot_locked_mods(void) { oneshot_locked_mods = 0; }
#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
-static int16_t oneshot_time = 0;
+static uint16_t oneshot_time = 0;
bool has_oneshot_mods_timed_out(void) {
return TIMER_DIFF_16(timer_read(), oneshot_time) >= ONESHOT_TIMEOUT;
}
@@ -79,7 +79,7 @@ inline uint8_t get_oneshot_layer(void) { return oneshot_layer_data >> 3; }
inline uint8_t get_oneshot_layer_state(void) { return oneshot_layer_data & 0b111; }
#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
-static int16_t oneshot_layer_time = 0;
+static uint16_t oneshot_layer_time = 0;
inline bool has_oneshot_layer_timed_out() {
return TIMER_DIFF_16(timer_read(), oneshot_layer_time) >= ONESHOT_TIMEOUT &&
!(get_oneshot_layer_state() & ONESHOT_TOGGLED);
diff --git a/tmk_core/common/arm_atsam/timer.c b/tmk_core/common/arm_atsam/timer.c
index bcfe5002c3..6c3905e308 100644
--- a/tmk_core/common/arm_atsam/timer.c
+++ b/tmk_core/common/arm_atsam/timer.c
@@ -9,7 +9,7 @@ void set_time(uint64_t tset)
void timer_init(void)
{
- ms_clk = 0;
+ timer_clear();
}
uint16_t timer_read(void)
@@ -37,23 +37,7 @@ uint32_t timer_elapsed32(uint32_t tlast)
return TIMER_DIFF_32(timer_read32(), tlast);
}
-uint32_t timer_elapsed64(uint32_t tlast)
-{
- uint64_t tnow = timer_read64();
- return (tnow >= tlast ? tnow - tlast : UINT64_MAX - tlast + tnow);
-}
-
void timer_clear(void)
{
- ms_clk = 0;
-}
-
-void wait_ms(uint64_t msec)
-{
- CLK_delay_ms(msec);
-}
-
-void wait_us(uint16_t usec)
-{
- CLK_delay_us(usec);
+ set_time(0);
}
diff --git a/tmk_core/common/chibios/eeprom_stm32.c b/tmk_core/common/chibios/eeprom_stm32.c
index a869985501..a15430d676 100755
--- a/tmk_core/common/chibios/eeprom_stm32.c
+++ b/tmk_core/common/chibios/eeprom_stm32.c
@@ -10,664 +10,206 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
- * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and
- * https://github.com/leaflabs/libmaple
+ * This files are free to use from http://engsta.com/stm32-flash-memory-eeprom-emulator/ by
+ * Artur F.
*
* Modifications for QMK and STM32F303 by Yiancar
*/
+#include <stdio.h>
+#include <string.h>
#include "eeprom_stm32.h"
+/*****************************************************************************
+ * Allows to use the internal flash to store non volatile data. To initialize
+ * the functionality use the EEPROM_Init() function. Be sure that by reprogramming
+ * of the controller just affected pages will be deleted. In other case the non
+ * volatile data will be lost.
+******************************************************************************/
+
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Functions -----------------------------------------------------------------*/
+
+uint8_t DataBuf[FEE_PAGE_SIZE];
+/*****************************************************************************
+* Delete Flash Space used for user Data, deletes the whole space between
+* RW_PAGE_BASE_ADDRESS and the last uC Flash Page
+******************************************************************************/
+uint16_t EEPROM_Init(void) {
+ // unlock flash
+ FLASH_Unlock();
- FLASH_Status EE_ErasePage(uint32_t);
-
- uint16_t EE_CheckPage(uint32_t, uint16_t);
- uint16_t EE_CheckErasePage(uint32_t, uint16_t);
- uint16_t EE_Format(void);
- uint32_t EE_FindValidPage(void);
- uint16_t EE_GetVariablesCount(uint32_t, uint16_t);
- uint16_t EE_PageTransfer(uint32_t, uint32_t, uint16_t);
- uint16_t EE_VerifyPageFullWriteVariable(uint16_t, uint16_t);
-
- uint32_t PageBase0 = EEPROM_PAGE0_BASE;
- uint32_t PageBase1 = EEPROM_PAGE1_BASE;
- uint32_t PageSize = EEPROM_PAGE_SIZE;
- uint16_t Status = EEPROM_NOT_INIT;
-
-// See http://www.st.com/web/en/resource/technical/document/application_note/CD00165693.pdf
-
-/**
- * @brief Check page for blank
- * @param page base address
- * @retval Success or error
- * EEPROM_BAD_FLASH: page not empty after erase
- * EEPROM_OK: page blank
- */
-uint16_t EE_CheckPage(uint32_t pageBase, uint16_t status)
-{
- uint32_t pageEnd = pageBase + (uint32_t)PageSize;
-
- // Page Status not EEPROM_ERASED and not a "state"
- if ((*(__IO uint16_t*)pageBase) != EEPROM_ERASED && (*(__IO uint16_t*)pageBase) != status)
- return EEPROM_BAD_FLASH;
- for(pageBase += 4; pageBase < pageEnd; pageBase += 4)
- if ((*(__IO uint32_t*)pageBase) != 0xFFFFFFFF) // Verify if slot is empty
- return EEPROM_BAD_FLASH;
- return EEPROM_OK;
-}
-
-/**
- * @brief Erase page with increment erase counter (page + 2)
- * @param page base address
- * @retval Success or error
- * FLASH_COMPLETE: success erase
- * - Flash error code: on write Flash error
- */
-FLASH_Status EE_ErasePage(uint32_t pageBase)
-{
- FLASH_Status FlashStatus;
- uint16_t data = (*(__IO uint16_t*)(pageBase));
- if ((data == EEPROM_ERASED) || (data == EEPROM_VALID_PAGE) || (data == EEPROM_RECEIVE_DATA))
- data = (*(__IO uint16_t*)(pageBase + 2)) + 1;
- else
- data = 0;
-
- FlashStatus = FLASH_ErasePage(pageBase);
- if (FlashStatus == FLASH_COMPLETE)
- FlashStatus = FLASH_ProgramHalfWord(pageBase + 2, data);
-
- return FlashStatus;
-}
+ // Clear Flags
+ //FLASH_ClearFlag(FLASH_SR_EOP|FLASH_SR_PGERR|FLASH_SR_WRPERR);
-/**
- * @brief Check page for blank and erase it
- * @param page base address
- * @retval Success or error
- * - Flash error code: on write Flash error
- * - EEPROM_BAD_FLASH: page not empty after erase
- * - EEPROM_OK: page blank
- */
-uint16_t EE_CheckErasePage(uint32_t pageBase, uint16_t status)
-{
- uint16_t FlashStatus;
- if (EE_CheckPage(pageBase, status) != EEPROM_OK)
- {
- FlashStatus = EE_ErasePage(pageBase);
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
- return EE_CheckPage(pageBase, status);
- }
- return EEPROM_OK;
+ return FEE_DENSITY_BYTES;
}
+/*****************************************************************************
+* Erase the whole reserved Flash Space used for user Data
+******************************************************************************/
+void EEPROM_Erase (void) {
-/**
- * @brief Find valid Page for write or read operation
- * @param Page0: Page0 base address
- * Page1: Page1 base address
- * @retval Valid page address (PAGE0 or PAGE1) or NULL in case of no valid page was found
- */
-uint32_t EE_FindValidPage(void)
-{
- uint16_t status0 = (*(__IO uint16_t*)PageBase0); // Get Page0 actual status
- uint16_t status1 = (*(__IO uint16_t*)PageBase1); // Get Page1 actual status
-
- if (status0 == EEPROM_VALID_PAGE && status1 == EEPROM_ERASED)
- return PageBase0;
- if (status1 == EEPROM_VALID_PAGE && status0 == EEPROM_ERASED)
- return PageBase1;
-
- return 0;
-}
+ int page_num = 0;
-/**
- * @brief Calculate unique variables in EEPROM
- * @param start: address of first slot to check (page + 4)
- * @param end: page end address
- * @param address: 16 bit virtual address of the variable to excluse (or 0XFFFF)
- * @retval count of variables
- */
-uint16_t EE_GetVariablesCount(uint32_t pageBase, uint16_t skipAddress)
-{
- uint16_t varAddress, nextAddress;
- uint32_t idx;
- uint32_t pageEnd = pageBase + (uint32_t)PageSize;
- uint16_t count = 0;
-
- for (pageBase += 6; pageBase < pageEnd; pageBase += 4)
- {
- varAddress = (*(__IO uint16_t*)pageBase);
- if (varAddress == 0xFFFF || varAddress == skipAddress)
- continue;
-
- count++;
- for(idx = pageBase + 4; idx < pageEnd; idx += 4)
- {
- nextAddress = (*(__IO uint16_t*)idx);
- if (nextAddress == varAddress)
- {
- count--;
- break;
- }
- }
- }
- return count;
+ // delete all pages from specified start page to the last page
+ do {
+ FLASH_ErasePage(FEE_PAGE_BASE_ADDRESS + (page_num * FEE_PAGE_SIZE));
+ page_num++;
+ } while (page_num < FEE_DENSITY_PAGES);
}
+/*****************************************************************************
+* Writes once data byte to flash on specified address. If a byte is already
+* written, the whole page must be copied to a buffer, the byte changed and
+* the manipulated buffer written after PageErase.
+*******************************************************************************/
+uint16_t EEPROM_WriteDataByte (uint16_t Address, uint8_t DataByte) {
-/**
- * @brief Transfers last updated variables data from the full Page to an empty one.
- * @param newPage: new page base address
- * @param oldPage: old page base address
- * @param SkipAddress: 16 bit virtual address of the variable (or 0xFFFF)
- * @retval Success or error status:
- * - FLASH_COMPLETE: on success
- * - EEPROM_OUT_SIZE: if valid new page is full
- * - Flash error code: on write Flash error
- */
-uint16_t EE_PageTransfer(uint32_t newPage, uint32_t oldPage, uint16_t SkipAddress)
-{
- uint32_t oldEnd, newEnd;
- uint32_t oldIdx, newIdx, idx;
- uint16_t address, data, found;
- FLASH_Status FlashStatus;
-
- // Transfer process: transfer variables from old to the new active page
- newEnd = newPage + ((uint32_t)PageSize);
-
- // Find first free element in new page
- for (newIdx = newPage + 4; newIdx < newEnd; newIdx += 4)
- if ((*(__IO uint32_t*)newIdx) == 0xFFFFFFFF) // Verify if element
- break; // contents are 0xFFFFFFFF
- if (newIdx >= newEnd)
- return EEPROM_OUT_SIZE;
-
- oldEnd = oldPage + 4;
- oldIdx = oldPage + (uint32_t)(PageSize - 2);
-
- for (; oldIdx > oldEnd; oldIdx -= 4)
- {
- address = *(__IO uint16_t*)oldIdx;
- if (address == 0xFFFF || address == SkipAddress)
- continue; // it's means that power off after write data
-
- found = 0;
- for (idx = newPage + 6; idx < newIdx; idx += 4)
- if ((*(__IO uint16_t*)(idx)) == address)
- {
- found = 1;
- break;
- }
-
- if (found)
- continue;
-
- if (newIdx < newEnd)
- {
- data = (*(__IO uint16_t*)(oldIdx - 2));
-
- FlashStatus = FLASH_ProgramHalfWord(newIdx, data);
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
+ FLASH_Status FlashStatus = FLASH_COMPLETE;
- FlashStatus = FLASH_ProgramHalfWord(newIdx + 2, address);
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
+ uint32_t page;
+ int i;
- newIdx += 4;
- }
- else
- return EEPROM_OUT_SIZE;
+ // exit if desired address is above the limit (e.G. under 2048 Bytes for 4 pages)
+ if (Address > FEE_DENSITY_BYTES) {
+ return 0;
}
- // Erase the old Page: Set old Page status to EEPROM_EEPROM_ERASED status
- data = EE_CheckErasePage(oldPage, EEPROM_ERASED);
- if (data != EEPROM_OK)
- return data;
+ // calculate which page is affected (Pagenum1/Pagenum2...PagenumN)
+ page = (FEE_PAGE_BASE_ADDRESS + FEE_ADDR_OFFSET(Address)) & 0x00000FFF;
- // Set new Page status
- FlashStatus = FLASH_ProgramHalfWord(newPage, EEPROM_VALID_PAGE);
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
+ if (page % FEE_PAGE_SIZE) page = page + FEE_PAGE_SIZE;
+ page = (page / FEE_PAGE_SIZE) - 1;
- return EEPROM_OK;
-}
+ // if current data is 0xFF, the byte is empty, just overwrite with the new one
+ if ((*(__IO uint16_t*)(FEE_PAGE_BASE_ADDRESS + FEE_ADDR_OFFSET(Address))) == FEE_EMPTY_WORD) {
-/**
- * @brief Verify if active page is full and Writes variable in EEPROM.
- * @param Address: 16 bit virtual address of the variable
- * @param Data: 16 bit data to be written as variable value
- * @retval Success or error status:
- * - FLASH_COMPLETE: on success
- * - EEPROM_PAGE_FULL: if valid page is full (need page transfer)
- * - EEPROM_NO_VALID_PAGE: if no valid page was found
- * - EEPROM_OUT_SIZE: if EEPROM size exceeded
- * - Flash error code: on write Flash error
- */
-uint16_t EE_VerifyPageFullWriteVariable(uint16_t Address, uint16_t Data)
-{
- FLASH_Status FlashStatus;
- uint32_t idx, pageBase, pageEnd, newPage;
- uint16_t count;
-
- // Get valid Page for write operation
- pageBase = EE_FindValidPage();
- if (pageBase == 0)
- return EEPROM_NO_VALID_PAGE;
-
- // Get the valid Page end Address
- pageEnd = pageBase + PageSize; // Set end of page
-
- for (idx = pageEnd - 2; idx > pageBase; idx -= 4)
- {
- if ((*(__IO uint16_t*)idx) == Address) // Find last value for address
- {
- count = (*(__IO uint16_t*)(idx - 2)); // Read last data
- if (count == Data)
- return EEPROM_OK;
- if (count == 0xFFFF)
- {
- FlashStatus = FLASH_ProgramHalfWord(idx - 2, Data); // Set variable data
- if (FlashStatus == FLASH_COMPLETE)
- return EEPROM_OK;
- }
- break;
- }
+ FlashStatus = FLASH_ProgramHalfWord(FEE_PAGE_BASE_ADDRESS + FEE_ADDR_OFFSET(Address), (uint16_t)(0x00FF & DataByte));
}
+ else {
- // Check each active page address starting from begining
- for (idx = pageBase + 4; idx < pageEnd; idx += 4)
- if ((*(__IO uint32_t*)idx) == 0xFFFFFFFF) // Verify if element
- { // contents are 0xFFFFFFFF
- FlashStatus = FLASH_ProgramHalfWord(idx, Data); // Set variable data
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
- FlashStatus = FLASH_ProgramHalfWord(idx + 2, Address); // Set variable virtual address
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
- return EEPROM_OK;
- }
-
- // Empty slot not found, need page transfer
- // Calculate unique variables in page
- count = EE_GetVariablesCount(pageBase, Address) + 1;
- if (count >= (PageSize / 4 - 1))
- return EEPROM_OUT_SIZE;
-
- if (pageBase == PageBase1)
- newPage = PageBase0; // New page address where variable will be moved to
- else
- newPage = PageBase1;
-
- // Set the new Page status to RECEIVE_DATA status
- FlashStatus = FLASH_ProgramHalfWord(newPage, EEPROM_RECEIVE_DATA);
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
-
- // Write the variable passed as parameter in the new active page
- FlashStatus = FLASH_ProgramHalfWord(newPage + 4, Data);
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
-
- FlashStatus = FLASH_ProgramHalfWord(newPage + 6, Address);
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
-
- return EE_PageTransfer(newPage, pageBase, Address);
-}
-
-/*EEPROMClass::EEPROMClass(void)
-{
- PageBase0 = EEPROM_PAGE0_BASE;
- PageBase1 = EEPROM_PAGE1_BASE;
- PageSize = EEPROM_PAGE_SIZE;
- Status = EEPROM_NOT_INIT;
-}*/
-/*
-uint16_t EEPROM_init(uint32_t pageBase0, uint32_t pageBase1, uint32_t pageSize)
-{
- PageBase0 = pageBase0;
- PageBase1 = pageBase1;
- PageSize = pageSize;
- return EEPROM_init();
-}*/
+ // Copy Page to a buffer
+ memcpy(DataBuf, (uint8_t*)FEE_PAGE_BASE_ADDRESS + (page * FEE_PAGE_SIZE), FEE_PAGE_SIZE); // !!! Calculate base address for the desired page
-uint16_t EEPROM_init(void)
-{
- uint16_t status0 = 6, status1 = 6;
- FLASH_Status FlashStatus;
+ // check if new data is differ to current data, return if not, proceed if yes
+ if (DataByte == *(__IO uint8_t*)(FEE_PAGE_BASE_ADDRESS + FEE_ADDR_OFFSET(Address))) {
+ return 0;
+ }
- FLASH_Unlock();
- Status = EEPROM_NO_VALID_PAGE;
+ // manipulate desired data byte in temp data array if new byte is differ to the current
+ DataBuf[FEE_ADDR_OFFSET(Address)] = DataByte;
- status0 = (*(__IO uint16_t *)PageBase0);
- status1 = (*(__IO uint16_t *)PageBase1);
+ //Erase Page
+ FlashStatus = FLASH_ErasePage(FEE_PAGE_BASE_ADDRESS + page);
- switch (status0)
- {
-/*
- Page0 Page1
- ----- -----
- EEPROM_ERASED EEPROM_VALID_PAGE Page1 valid, Page0 erased
- EEPROM_RECEIVE_DATA Page1 need set to valid, Page0 erased
- EEPROM_ERASED make EE_Format
- any Error: EEPROM_NO_VALID_PAGE
-*/
- case EEPROM_ERASED:
- if (status1 == EEPROM_VALID_PAGE) // Page0 erased, Page1 valid
- Status = EE_CheckErasePage(PageBase0, EEPROM_ERASED);
- else if (status1 == EEPROM_RECEIVE_DATA) // Page0 erased, Page1 receive
- {
- FlashStatus = FLASH_ProgramHalfWord(PageBase1, EEPROM_VALID_PAGE);
- if (FlashStatus != FLASH_COMPLETE)
- Status = FlashStatus;
- else
- Status = EE_CheckErasePage(PageBase0, EEPROM_ERASED);
- }
- else if (status1 == EEPROM_ERASED) // Both in erased state so format EEPROM
- Status = EEPROM_format();
- break;
-/*
- Page0 Page1
- ----- -----
- EEPROM_RECEIVE_DATA EEPROM_VALID_PAGE Transfer Page1 to Page0
- EEPROM_ERASED Page0 need set to valid, Page1 erased
- any EEPROM_NO_VALID_PAGE
-*/
- case EEPROM_RECEIVE_DATA:
- if (status1 == EEPROM_VALID_PAGE) // Page0 receive, Page1 valid
- Status = EE_PageTransfer(PageBase0, PageBase1, 0xFFFF);
- else if (status1 == EEPROM_ERASED) // Page0 receive, Page1 erased
- {
- Status = EE_CheckErasePage(PageBase1, EEPROM_ERASED);
- if (Status == EEPROM_OK)
- {
- FlashStatus = FLASH_ProgramHalfWord(PageBase0, EEPROM_VALID_PAGE);
- if (FlashStatus != FLASH_COMPLETE)
- Status = FlashStatus;
- else
- Status = EEPROM_OK;
+ // Write new data (whole page) to flash if data has beed changed
+ for(i = 0; i < (FEE_PAGE_SIZE / 2); i++) {
+ if ((__IO uint16_t)(0xFF00 | DataBuf[FEE_ADDR_OFFSET(i)]) != 0xFFFF) {
+ FlashStatus = FLASH_ProgramHalfWord((FEE_PAGE_BASE_ADDRESS + (page * FEE_PAGE_SIZE)) + (i * 2), (uint16_t)(0xFF00 | DataBuf[FEE_ADDR_OFFSET(i)]));
}
}
- break;
-/*
- Page0 Page1
- ----- -----
- EEPROM_VALID_PAGE EEPROM_VALID_PAGE Error: EEPROM_NO_VALID_PAGE
- EEPROM_RECEIVE_DATA Transfer Page0 to Page1
- any Page0 valid, Page1 erased
-*/
- case EEPROM_VALID_PAGE:
- if (status1 == EEPROM_VALID_PAGE) // Both pages valid
- Status = EEPROM_NO_VALID_PAGE;
- else if (status1 == EEPROM_RECEIVE_DATA)
- Status = EE_PageTransfer(PageBase1, PageBase0, 0xFFFF);
- else
- Status = EE_CheckErasePage(PageBase1, EEPROM_ERASED);
- break;
-/*
- Page0 Page1
- ----- -----
- any EEPROM_VALID_PAGE Page1 valid, Page0 erased
- EEPROM_RECEIVE_DATA Page1 valid, Page0 erased
- any EEPROM_NO_VALID_PAGE
-*/
- default:
- if (status1 == EEPROM_VALID_PAGE)
- Status = EE_CheckErasePage(PageBase0, EEPROM_ERASED); // Check/Erase Page0
- else if (status1 == EEPROM_RECEIVE_DATA)
- {
- FlashStatus = FLASH_ProgramHalfWord(PageBase1, EEPROM_VALID_PAGE);
- if (FlashStatus != FLASH_COMPLETE)
- Status = FlashStatus;
- else
- Status = EE_CheckErasePage(PageBase0, EEPROM_ERASED);
- }
- break;
- }
- return Status;
-}
-
-/**
- * @brief Erases PAGE0 and PAGE1 and writes EEPROM_VALID_PAGE / 0 header to PAGE0
- * @param PAGE0 and PAGE1 base addresses
- * @retval Status of the last operation (Flash write or erase) done during EEPROM formating
- */
-uint16_t EEPROM_format(void)
-{
- uint16_t status;
- FLASH_Status FlashStatus;
- FLASH_Unlock();
-
- // Erase Page0
- status = EE_CheckErasePage(PageBase0, EEPROM_VALID_PAGE);
- if (status != EEPROM_OK)
- return status;
- if ((*(__IO uint16_t*)PageBase0) == EEPROM_ERASED)
- {
- // Set Page0 as valid page: Write VALID_PAGE at Page0 base address
- FlashStatus = FLASH_ProgramHalfWord(PageBase0, EEPROM_VALID_PAGE);
- if (FlashStatus != FLASH_COMPLETE)
- return FlashStatus;
}
- // Erase Page1
- return EE_CheckErasePage(PageBase1, EEPROM_ERASED);
-}
-
-/**
- * @brief Returns the erase counter for current page
- * @param Data: Global variable contains the read variable value
- * @retval Success or error status:
- * - EEPROM_OK: if erases counter return.
- * - EEPROM_NO_VALID_PAGE: if no valid page was found.
- */
-uint16_t EEPROM_erases(uint16_t *Erases)
-{
- uint32_t pageBase;
- if (Status != EEPROM_OK)
- if (EEPROM_init() != EEPROM_OK)
- return Status;
-
- // Get active Page for read operation
- pageBase = EE_FindValidPage();
- if (pageBase == 0)
- return EEPROM_NO_VALID_PAGE;
-
- *Erases = (*(__IO uint16_t*)pageBase+2);
- return EEPROM_OK;
-}
-
-/**
- * @brief Returns the last stored variable data, if found,
- * which correspond to the passed virtual address
- * @param Address: Variable virtual address
- * @retval Data for variable or EEPROM_DEFAULT_DATA, if any errors
- */
-/*
-uint16_t EEPROM_read (uint16_t Address)
-{
- uint16_t data;
- EEPROM_read(Address, &data);
- return data;
-}*/
-
-/**
- * @brief Returns the last stored variable data, if found,
- * which correspond to the passed virtual address
- * @param Address: Variable virtual address
- * @param Data: Pointer to data variable
- * @retval Success or error status:
- * - EEPROM_OK: if variable was found
- * - EEPROM_BAD_ADDRESS: if the variable was not found
- * - EEPROM_NO_VALID_PAGE: if no valid page was found.
- */
-uint16_t EEPROM_read(uint16_t Address, uint16_t *Data)
-{
- uint32_t pageBase, pageEnd;
-
- // Set default data (empty EEPROM)
- *Data = EEPROM_DEFAULT_DATA;
-
- if (Status == EEPROM_NOT_INIT)
- if (EEPROM_init() != EEPROM_OK)
- return Status;
-
- // Get active Page for read operation
- pageBase = EE_FindValidPage();
- if (pageBase == 0)
- return EEPROM_NO_VALID_PAGE;
-
- // Get the valid Page end Address
- pageEnd = pageBase + ((uint32_t)(PageSize - 2));
-
- // Check each active page address starting from end
- for (pageBase += 6; pageEnd >= pageBase; pageEnd -= 4)
- if ((*(__IO uint16_t*)pageEnd) == Address) // Compare the read address with the virtual address
- {
- *Data = (*(__IO uint16_t*)(pageEnd - 2)); // Get content of Address-2 which is variable value
- return EEPROM_OK;
- }
-
- // Return ReadStatus value: (0: variable exist, 1: variable doesn't exist)
- return EEPROM_BAD_ADDRESS;
-}
-
-/**
- * @brief Writes/upadtes variable data in EEPROM.
- * @param VirtAddress: Variable virtual address
- * @param Data: 16 bit data to be written
- * @retval Success or error status:
- * - FLASH_COMPLETE: on success
- * - EEPROM_BAD_ADDRESS: if address = 0xFFFF
- * - EEPROM_PAGE_FULL: if valid page is full
- * - EEPROM_NO_VALID_PAGE: if no valid page was found
- * - EEPROM_OUT_SIZE: if no empty EEPROM variables
- * - Flash error code: on write Flash error
- */
-uint16_t EEPROM_write(uint16_t Address, uint16_t Data)
-{
- if (Status == EEPROM_NOT_INIT)
- if (EEPROM_init() != EEPROM_OK)
- return Status;
-
- if (Address == 0xFFFF)
- return EEPROM_BAD_ADDRESS;
-
- // Write the variable virtual address and value in the EEPROM
- uint16_t status = EE_VerifyPageFullWriteVariable(Address, Data);
- return status;
-}
-
-/**
- * @brief Writes/upadtes variable data in EEPROM.
- The value is written only if differs from the one already saved at the same address.
- * @param VirtAddress: Variable virtual address
- * @param Data: 16 bit data to be written
- * @retval Success or error status:
- * - EEPROM_SAME_VALUE: If new Data matches existing EEPROM Data
- * - FLASH_COMPLETE: on success
- * - EEPROM_BAD_ADDRESS: if address = 0xFFFF
- * - EEPROM_PAGE_FULL: if valid page is full
- * - EEPROM_NO_VALID_PAGE: if no valid page was found
- * - EEPROM_OUT_SIZE: if no empty EEPROM variables
- * - Flash error code: on write Flash error
- */
-uint16_t EEPROM_update(uint16_t Address, uint16_t Data)
-{
- uint16_t temp;
- EEPROM_read(Address, &temp);
- if (temp == Data)
- return EEPROM_SAME_VALUE;
- else
- return EEPROM_write(Address, Data);
+ return FlashStatus;
}
+/*****************************************************************************
+* Read once data byte from a specified address.
+*******************************************************************************/
+uint8_t EEPROM_ReadDataByte (uint16_t Address) {
-/**
- * @brief Return number of variable
- * @retval Number of variables
- */
-uint16_t EEPROM_count(uint16_t *Count)
-{
- if (Status == EEPROM_NOT_INIT)
- if (EEPROM_init() != EEPROM_OK)
- return Status;
-
- // Get valid Page for write operation
- uint32_t pageBase = EE_FindValidPage();
- if (pageBase == 0)
- return EEPROM_NO_VALID_PAGE; // No valid page, return max. numbers
+ uint8_t DataByte = 0xFF;
- *Count = EE_GetVariablesCount(pageBase, 0xFFFF);
- return EEPROM_OK;
-}
+ // Get Byte from specified address
+ DataByte = (*(__IO uint8_t*)(FEE_PAGE_BASE_ADDRESS + FEE_ADDR_OFFSET(Address)));
-uint16_t EEPROM_maxcount(void)
-{
- return ((PageSize / 4)-1);
+ return DataByte;
}
-
+/*****************************************************************************
+* Wrap library in AVR style functions.
+*******************************************************************************/
uint8_t eeprom_read_byte (const uint8_t *Address)
{
const uint16_t p = (const uint32_t) Address;
- uint16_t temp;
- EEPROM_read(p, &temp);
- return (uint8_t) temp;
+ return EEPROM_ReadDataByte(p);
}
void eeprom_write_byte (uint8_t *Address, uint8_t Value)
{
uint16_t p = (uint32_t) Address;
- EEPROM_write(p, (uint16_t) Value);
+ EEPROM_WriteDataByte(p, Value);
}
void eeprom_update_byte (uint8_t *Address, uint8_t Value)
{
uint16_t p = (uint32_t) Address;
- EEPROM_update(p, (uint16_t) Value);
+ EEPROM_WriteDataByte(p, Value);
}
uint16_t eeprom_read_word (const uint16_t *Address)
{
const uint16_t p = (const uint32_t) Address;
- uint16_t temp;
- EEPROM_read(p, &temp);
- return temp;
+ return EEPROM_ReadDataByte(p) | (EEPROM_ReadDataByte(p+1) << 8);
}
void eeprom_write_word (uint16_t *Address, uint16_t Value)
{
uint16_t p = (uint32_t) Address;
- EEPROM_write(p, Value);
+ EEPROM_WriteDataByte(p, (uint8_t) Value);
+ EEPROM_WriteDataByte(p + 1, (uint8_t) (Value >> 8));
}
void eeprom_update_word (uint16_t *Address, uint16_t Value)
{
uint16_t p = (uint32_t) Address;
- EEPROM_update(p, Value);
+ EEPROM_WriteDataByte(p, (uint8_t) Value);
+ EEPROM_WriteDataByte(p + 1, (uint8_t) (Value >> 8));
}
uint32_t eeprom_read_dword (const uint32_t *Address)
{
const uint16_t p = (const uint32_t) Address;
- uint16_t temp1, temp2;
- EEPROM_read(p, &temp1);
- EEPROM_read(p + 1, &temp2);
- return temp1 | (temp2 << 16);
+ return EEPROM_ReadDataByte(p) | (EEPROM_ReadDataByte(p+1) << 8)
+ | (EEPROM_ReadDataByte(p+2) << 16) | (EEPROM_ReadDataByte(p+3) << 24);
}
void eeprom_write_dword (uint32_t *Address, uint32_t Value)
{
- uint16_t temp = (uint16_t) Value;
- uint16_t p = (uint32_t) Address;
- EEPROM_write(p, temp);
- temp = (uint16_t) (Value >> 16);
- EEPROM_write(p + 1, temp);
+ uint16_t p = (const uint32_t) Address;
+ EEPROM_WriteDataByte(p, (uint8_t) Value);
+ EEPROM_WriteDataByte(p+1, (uint8_t) (Value >> 8));
+ EEPROM_WriteDataByte(p+2, (uint8_t) (Value >> 16));
+ EEPROM_WriteDataByte(p+3, (uint8_t) (Value >> 24));
}
void eeprom_update_dword (uint32_t *Address, uint32_t Value)
{
- uint16_t temp = (uint16_t) Value;
- uint16_t p = (uint32_t) Address;
- EEPROM_update(p, temp);
- temp = (uint16_t) (Value >> 16);
- EEPROM_update(p + 1, temp);
+ uint16_t p = (const uint32_t) Address;
+ EEPROM_WriteDataByte(p, (uint8_t) Value);
+ EEPROM_WriteDataByte(p+1, (uint8_t) (Value >> 8));
+ EEPROM_WriteDataByte(p+2, (uint8_t) (Value >> 16));
+ EEPROM_WriteDataByte(p+3, (uint8_t) (Value >> 24));
+}
+
+void eeprom_read_block(void *buf, const void *addr, uint32_t len) {
+ const uint8_t *p = (const uint8_t *)addr;
+ uint8_t *dest = (uint8_t *)buf;
+ while (len--) {
+ *dest++ = eeprom_read_byte(p++);
+ }
+}
+
+void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
+ uint8_t *p = (uint8_t *)addr;
+ const uint8_t *src = (const uint8_t *)buf;
+ while (len--) {
+ eeprom_write_byte(p++, *src++);
+ }
+}
+
+void eeprom_update_block(const void *buf, void *addr, uint32_t len) {
+ uint8_t *p = (uint8_t *)addr;
+ const uint8_t *src = (const uint8_t *)buf;
+ while (len--) {
+ eeprom_write_byte(p++, *src++);
+ }
}
diff --git a/tmk_core/common/chibios/eeprom_stm32.h b/tmk_core/common/chibios/eeprom_stm32.h
index 09229530ca..892e417b7e 100755
--- a/tmk_core/common/chibios/eeprom_stm32.h
+++ b/tmk_core/common/chibios/eeprom_stm32.h
@@ -10,15 +10,17 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
- * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and
- * https://github.com/leaflabs/libmaple
+ * This files are free to use from http://engsta.com/stm32-flash-memory-eeprom-emulator/ by
+ * Artur F.
*
* Modifications for QMK and STM32F303 by Yiancar
+ *
+ * This library assumes 8-bit data locations. To add a new MCU, please provide the flash
+ * page size and the total flash size in Kb. The number of available pages must be a multiple
+ * of 2. Only half of the pages account for the total EEPROM size.
+ * This library also assumes that the pages are not used by the firmware.
*/
-// This file must be modified if the MCU is not defined below.
-// This library also assumes that the pages are not used by the firmware.
-
#ifndef __EEPROM_H
#define __EEPROM_H
@@ -38,9 +40,11 @@
#ifndef EEPROM_PAGE_SIZE
#if defined (MCU_STM32F103RB)
- #define EEPROM_PAGE_SIZE (uint16_t)0x400 /* Page size = 1KByte */
+ #define FEE_PAGE_SIZE (uint16_t)0x400 // Page size = 1KByte
+ #define FEE_DENSITY_PAGES 2 // How many pages are used
#elif defined (MCU_STM32F103ZE) || defined (MCU_STM32F103RE) || defined (MCU_STM32F103RD) || defined (MCU_STM32F303CC)
- #define EEPROM_PAGE_SIZE (uint16_t)0x800 /* Page size = 2KByte */
+ #define FEE_PAGE_SIZE (uint16_t)0x800 // Page size = 2KByte
+ #define FEE_DENSITY_PAGES 4 // How many pages are used
#else
#error "No MCU type specified. Add something like -DMCU_STM32F103RB to your compiler arguments (probably in a Makefile)."
#endif
@@ -48,48 +52,30 @@
#ifndef EEPROM_START_ADDRESS
#if defined (MCU_STM32F103RB)
- #define EEPROM_START_ADDRESS ((uint32_t)(0x8000000 + 128 * 1024 - 2 * EEPROM_PAGE_SIZE))
+ #define FEE_MCU_FLASH_SIZE 128 // Size in Kb
#elif defined (MCU_STM32F103ZE) || defined (MCU_STM32F103RE)
- #define EEPROM_START_ADDRESS ((uint32_t)(0x8000000 + 512 * 1024 - 2 * EEPROM_PAGE_SIZE))
+ #define FEE_MCU_FLASH_SIZE 512 // Size in Kb
#elif defined (MCU_STM32F103RD)
- #define EEPROM_START_ADDRESS ((uint32_t)(0x8000000 + 384 * 1024 - 2 * EEPROM_PAGE_SIZE))
+ #define FEE_MCU_FLASH_SIZE 384 // Size in Kb
#elif defined (MCU_STM32F303CC)
- #define EEPROM_START_ADDRESS ((uint32_t)(0x8000000 + 256 * 1024 - 2 * EEPROM_PAGE_SIZE))
+ #define FEE_MCU_FLASH_SIZE 256 // Size in Kb
#else
#error "No MCU type specified. Add something like -DMCU_STM32F103RB to your compiler arguments (probably in a Makefile)."
#endif
#endif
-/* Pages 0 and 1 base and end addresses */
-#define EEPROM_PAGE0_BASE ((uint32_t)(EEPROM_START_ADDRESS + 0x000))
-#define EEPROM_PAGE1_BASE ((uint32_t)(EEPROM_START_ADDRESS + EEPROM_PAGE_SIZE))
-
-/* Page status definitions */
-#define EEPROM_ERASED ((uint16_t)0xFFFF) /* PAGE is empty */
-#define EEPROM_RECEIVE_DATA ((uint16_t)0xEEEE) /* PAGE is marked to receive data */
-#define EEPROM_VALID_PAGE ((uint16_t)0x0000) /* PAGE containing valid data */
-
-/* Page full define */
-enum uint16_t
- {
- EEPROM_OK = ((uint16_t)0x0000),
- EEPROM_OUT_SIZE = ((uint16_t)0x0081),
- EEPROM_BAD_ADDRESS = ((uint16_t)0x0082),
- EEPROM_BAD_FLASH = ((uint16_t)0x0083),
- EEPROM_NOT_INIT = ((uint16_t)0x0084),
- EEPROM_SAME_VALUE = ((uint16_t)0x0085),
- EEPROM_NO_VALID_PAGE = ((uint16_t)0x00AB)
- };
-
-#define EEPROM_DEFAULT_DATA 0xFFFF
+// DONT CHANGE
+// Choose location for the first EEPROM Page address on the top of flash
+#define FEE_PAGE_BASE_ADDRESS ((uint32_t)(0x8000000 + FEE_MCU_FLASH_SIZE * 1024 - FEE_DENSITY_PAGES * FEE_PAGE_SIZE))
+#define FEE_DENSITY_BYTES ((FEE_PAGE_SIZE / 2) * FEE_DENSITY_PAGES - 1)
+#define FEE_LAST_PAGE_ADDRESS (FEE_PAGE_BASE_ADDRESS + (FEE_PAGE_SIZE * FEE_DENSITY_PAGES))
+#define FEE_EMPTY_WORD ((uint16_t)0xFFFF)
+#define FEE_ADDR_OFFSET(Address)(Address * 2) // 1Byte per Word will be saved to preserve Flash
- uint16_t EEPROM_init(void);
- uint16_t EEPROM_format(void);
- uint16_t EEPROM_erases(uint16_t *);
- uint16_t EEPROM_read (uint16_t address, uint16_t *data);
- uint16_t EEPROM_write(uint16_t address, uint16_t data);
- uint16_t EEPROM_update(uint16_t address, uint16_t data);
- uint16_t EEPROM_count(uint16_t *);
- uint16_t EEPROM_maxcount(void);
+// Use this function to initialize the functionality
+uint16_t EEPROM_Init(void);
+void EEPROM_Erase (void);
+uint16_t EEPROM_WriteDataByte (uint16_t Address, uint8_t DataByte);
+uint8_t EEPROM_ReadDataByte (uint16_t Address);
#endif /* __EEPROM_H */
diff --git a/tmk_core/common/chibios/flash_stm32.c b/tmk_core/common/chibios/flash_stm32.c
index 2735934844..164654a15e 100755
--- a/tmk_core/common/chibios/flash_stm32.c
+++ b/tmk_core/common/chibios/flash_stm32.c
@@ -186,3 +186,18 @@ void FLASH_Lock(void)
/* Set the Lock Bit to lock the FPEC and the FCR */
FLASH->CR |= FLASH_CR_LOCK;
}
+
+/**
+ * @brief Clears the FLASH's pending flags.
+ * @param FLASH_FLAG: specifies the FLASH flags to clear.
+ * This parameter can be any combination of the following values:
+ * @arg FLASH_FLAG_PGERR: FLASH Programming error flag flag
+ * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag
+ * @arg FLASH_FLAG_EOP: FLASH End of Programming flag
+ * @retval None
+ */
+void FLASH_ClearFlag(uint32_t FLASH_FLAG)
+{
+ /* Clear the flags */
+ FLASH->SR = FLASH_FLAG;
+}
diff --git a/tmk_core/common/chibios/flash_stm32.h b/tmk_core/common/chibios/flash_stm32.h
index cc065cbca2..3c99cc566a 100755
--- a/tmk_core/common/chibios/flash_stm32.h
+++ b/tmk_core/common/chibios/flash_stm32.h
@@ -45,6 +45,7 @@ FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
void FLASH_Unlock(void);
void FLASH_Lock(void);
+void FLASH_ClearFlag(uint32_t FLASH_FLAG);
#ifdef __cplusplus
}
diff --git a/tmk_core/common/eeconfig.c b/tmk_core/common/eeconfig.c
index d8bab7d2e5..59b2bffbc7 100644
--- a/tmk_core/common/eeconfig.c
+++ b/tmk_core/common/eeconfig.c
@@ -33,7 +33,7 @@ void eeconfig_init_kb(void) {
*/
void eeconfig_init_quantum(void) {
#ifdef STM32_EEPROM_ENABLE
- EEPROM_format();
+ EEPROM_Erase();
#endif
eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
eeprom_update_byte(EECONFIG_DEBUG, 0);
@@ -74,7 +74,7 @@ void eeconfig_enable(void)
void eeconfig_disable(void)
{
#ifdef STM32_EEPROM_ENABLE
- EEPROM_format();
+ EEPROM_Erase();
#endif
eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF);
}
diff --git a/tmk_core/common/eeconfig.h b/tmk_core/common/eeconfig.h
index 8d4e1d4d00..eedd67602c 100644
--- a/tmk_core/common/eeconfig.h
+++ b/tmk_core/common/eeconfig.h
@@ -25,8 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEED
#define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF
-/* eeprom parameteter address */
-#if !defined(STM32_EEPROM_ENABLE)
+/* EEPROM parameter address */
#define EECONFIG_MAGIC (uint16_t *)0
#define EECONFIG_DEBUG (uint8_t *)2
#define EECONFIG_DEFAULT_LAYER (uint8_t *)3
@@ -42,24 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define EECONFIG_KEYBOARD (uint32_t *)15
#define EECONFIG_USER (uint32_t *)19
-#else
-/* STM32F3 uses 16byte block. Reconfigure memory map */
-#define EECONFIG_MAGIC (uint16_t *)0
-#define EECONFIG_DEBUG (uint8_t *)1
-#define EECONFIG_DEFAULT_LAYER (uint8_t *)2
-#define EECONFIG_KEYMAP (uint8_t *)3
-#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)4
-#define EECONFIG_BACKLIGHT (uint8_t *)5
-#define EECONFIG_AUDIO (uint8_t *)6
-#define EECONFIG_RGBLIGHT (uint32_t *)7
-#define EECONFIG_UNICODEMODE (uint8_t *)9
-#define EECONFIG_STENOMODE (uint8_t *)10
-// EEHANDS for two handed boards
-#define EECONFIG_HANDEDNESS (uint8_t *)11
-#define EECONFIG_KEYBOARD (uint32_t *)12
-#define EECONFIG_USER (uint32_t *)14
-#endif
-
/* debug bit */
#define EECONFIG_DEBUG_ENABLE (1<<0)
#define EECONFIG_DEBUG_MATRIX (1<<1)
diff --git a/tmk_core/common/eeprom.h b/tmk_core/common/eeprom.h
index 3696d0df3f..5ae0f6eebd 100644
--- a/tmk_core/common/eeprom.h
+++ b/tmk_core/common/eeprom.h
@@ -20,5 +20,4 @@ void eeprom_update_dword (uint32_t *__p, uint32_t __value);
void eeprom_update_block (const void *__src, void *__dst, uint32_t __n);
#endif
-
#endif /* TMK_CORE_COMMON_EEPROM_H_ */
diff --git a/tmk_core/common/host.h b/tmk_core/common/host.h
index aeabba7107..3d172eed66 100644
--- a/tmk_core/common/host.h
+++ b/tmk_core/common/host.h
@@ -15,14 +15,18 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef HOST_H
-#define HOST_H
+#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "report.h"
#include "host_driver.h"
+#define IS_LED_ON(leds, led_name) ( (leds) & (1 << (led_name)))
+#define IS_LED_OFF(leds, led_name) (~(leds) & (1 << (led_name)))
+
+#define IS_HOST_LED_ON(led_name) IS_LED_ON(host_keyboard_leds(), led_name)
+#define IS_HOST_LED_OFF(led_name) IS_LED_OFF(host_keyboard_leds(), led_name)
#ifdef __cplusplus
extern "C" {
@@ -31,7 +35,6 @@ extern "C" {
extern uint8_t keyboard_idle;
extern uint8_t keyboard_protocol;
-
/* host driver */
void host_set_driver(host_driver_t *driver);
host_driver_t *host_get_driver(void);
@@ -49,5 +52,3 @@ uint16_t host_last_consumer_report(void);
#ifdef __cplusplus
}
#endif
-
-#endif
diff --git a/tmk_core/common/keyboard.h b/tmk_core/common/keyboard.h
index 71e594a890..ea2f336e9d 100644
--- a/tmk_core/common/keyboard.h
+++ b/tmk_core/common/keyboard.h
@@ -67,6 +67,8 @@ void keyboard_init(void);
void keyboard_task(void);
/* it runs when host LED status is updated */
void keyboard_set_leds(uint8_t leds);
+/* it runs whenever code has to behave differently on a slave */
+bool is_keyboard_master(void);
#ifdef __cplusplus
}
diff --git a/tmk_core/common/keycode.h b/tmk_core/common/keycode.h
index ac3edbd215..d5904276ee 100644
--- a/tmk_core/common/keycode.h
+++ b/tmk_core/common/keycode.h
@@ -46,6 +46,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MOD_BIT(code) (1 << MOD_INDEX(code))
#define MOD_INDEX(code) ((code) & 0x07)
+#define MOD_MASK_CTRL (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL))
+#define MOD_MASK_SHIFT (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))
+#define MOD_MASK_ALT (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT))
+#define MOD_MASK_GUI (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI))
+#define MOD_MASK_CS (MOD_MASK_CTRL | MOD_MASK_SHIFT)
+#define MOD_MASK_CA (MOD_MASK_CTRL | MOD_MASK_ALT)
+#define MOD_MASK_CG (MOD_MASK_CTRL | MOD_MASK_GUI)
+#define MOD_MASK_SA (MOD_MASK_SHIFT | MOD_MASK_ALT)
+#define MOD_MASK_SG (MOD_MASK_SHIFT | MOD_MASK_GUI)
+#define MOD_MASK_AG (MOD_MASK_ALT | MOD_MASK_GUI)
+#define MOD_MASK_CSA (MOD_MASK_CTRL | MOD_MASK_SHIFT | MOD_MASK_ALT)
+#define MOD_MASK_CSG (MOD_MASK_CTRL | MOD_MASK_SHIFT | MOD_MASK_GUI)
+#define MOD_MASK_CAG (MOD_MASK_CTRL | MOD_MASK_ALT | MOD_MASK_GUI)
+#define MOD_MASK_SAG (MOD_MASK_SHIFT | MOD_MASK_ALT | MOD_MASK_GUI)
+#define MOD_MASK_CSAG (MOD_MASK_CTRL | MOD_MASK_SHIFT | MOD_MASK_ALT | MOD_MASK_GUI)
+
#define FN_BIT(code) (1 << FN_INDEX(code))
#define FN_INDEX(code) ((code) - KC_FN0)
#define FN_MIN KC_FN0
@@ -174,6 +190,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define KC_BRIU KC_BRIGHTNESS_UP
#define KC_BRID KC_BRIGHTNESS_DOWN
+/* System Specific */
+#define KC_BRMU KC_PAUSE
+#define KC_BRMD KC_SCROLLLOCK
+
/* Mouse Keys */
#define KC_MS_U KC_MS_UP
#define KC_MS_D KC_MS_DOWN
diff --git a/tmk_core/common/progmem.h b/tmk_core/common/progmem.h
index dcc9efb3ce..de93138397 100644
--- a/tmk_core/common/progmem.h
+++ b/tmk_core/common/progmem.h
@@ -5,9 +5,9 @@
# include <avr/pgmspace.h>
#else
# define PROGMEM
-# define pgm_read_byte(p) *((unsigned char*)p)
-# define pgm_read_word(p) *((uint16_t*)p)
-# define pgm_read_dword(p) *((uint32_t*)p)
+# define pgm_read_byte(p) *((unsigned char*)(p))
+# define pgm_read_word(p) *((uint16_t*)(p))
+# define pgm_read_dword(p) *((uint32_t*)(p))
#endif
#endif
diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h
index eb9afb727e..e7c31bd376 100644
--- a/tmk_core/common/report.h
+++ b/tmk_core/common/report.h
@@ -48,8 +48,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TRANSPORT_STOP 0x00B7
#define TRANSPORT_STOP_EJECT 0x00CC
#define TRANSPORT_PLAY_PAUSE 0x00CD
-#define BRIGHTNESSUP 0x006F
-#define BRIGHTNESSDOWN 0x0070
+#define BRIGHTNESS_UP 0x006F
+#define BRIGHTNESS_DOWN 0x0070
/* application launch */
#define AL_CC_CONFIG 0x0183
#define AL_EMAIL 0x018A
@@ -192,8 +192,8 @@ typedef struct {
(key == KC_WWW_FORWARD ? AC_FORWARD : \
(key == KC_WWW_STOP ? AC_STOP : \
(key == KC_WWW_REFRESH ? AC_REFRESH : \
- (key == KC_BRIGHTNESS_UP ? BRIGHTNESSUP : \
- (key == KC_BRIGHTNESS_DOWN ? BRIGHTNESSDOWN : \
+ (key == KC_BRIGHTNESS_UP ? BRIGHTNESS_UP : \
+ (key == KC_BRIGHTNESS_DOWN ? BRIGHTNESS_DOWN : \
(key == KC_WWW_FAVORITES ? AC_BOOKMARKS : 0)))))))))))))))))))))))
uint8_t has_anykey(report_keyboard_t* keyboard_report);
diff --git a/tmk_core/common/wait.h b/tmk_core/common/wait.h
index a7cded9420..a77840bcef 100644
--- a/tmk_core/common/wait.h
+++ b/tmk_core/common/wait.h
@@ -15,6 +15,10 @@ extern "C" {
# include "ch.h"
# define wait_ms(ms) chThdSleepMilliseconds(ms)
# define wait_us(us) chThdSleepMicroseconds(us)
+#elif defined PROTOCOL_ARM_ATSAM
+# include "clks.h"
+# define wait_ms(ms) CLK_delay_ms(ms)
+# define wait_us(us) CLK_delay_us(us)
#elif defined(__arm__)
# include "wait_api.h"
#else // Unit tests
diff --git a/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h b/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h
index 2ba0991749..928af8c7e1 100644
--- a/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h
+++ b/tmk_core/protocol/arm_atsam/arm_atsam_protocol.h
@@ -21,8 +21,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "samd51j18a.h"
#include "md_bootloader.h"
+#include "timer.h"
#include "d51_util.h"
#include "clks.h"
+#include "wait.h"
#include "adc.h"
#include "i2c_master.h"
#include "spi.h"
diff --git a/tmk_core/protocol/arm_atsam/clks.c b/tmk_core/protocol/arm_atsam/clks.c
index 8768d0a99e..1ff318e59b 100644
--- a/tmk_core/protocol/arm_atsam/clks.c
+++ b/tmk_core/protocol/arm_atsam/clks.c
@@ -21,8 +21,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
volatile clk_t system_clks;
volatile uint64_t ms_clk;
-
-volatile uint8_t us_delay_done;
+uint32_t usec_delay_mult;
+#define USEC_DELAY_LOOP_CYCLES 3 //Sum of instruction cycles in us delay loop
const uint32_t sercom_apbbase[] = {(uint32_t)SERCOM0,(uint32_t)SERCOM1,(uint32_t)SERCOM2,(uint32_t)SERCOM3,(uint32_t)SERCOM4,(uint32_t)SERCOM5};
const uint8_t sercom_pchan[] = {7, 8, 23, 24, 34, 35};
@@ -73,6 +73,9 @@ void CLK_oscctrl_init(void)
system_clks.freq_gclk[0] = system_clks.freq_dpll[0];
+ usec_delay_mult = system_clks.freq_gclk[0] / (USEC_DELAY_LOOP_CYCLES * 1000000);
+ if (usec_delay_mult < 1) usec_delay_mult = 1; //Never allow a multiplier of zero
+
DBGC(DC_CLK_OSC_INIT_COMPLETE);
}
@@ -158,23 +161,11 @@ void TC4_Handler()
}
}
-void TC5_Handler()
-{
- if (TC5->COUNT16.INTFLAG.bit.MC0)
- {
- TC5->COUNT16.INTFLAG.reg = TC_INTENCLR_MC0;
- us_delay_done = 1;
- TC5->COUNT16.CTRLA.bit.ENABLE = 0;
- while (TC5->COUNT16.SYNCBUSY.bit.ENABLE) {}
- }
-}
-
uint32_t CLK_enable_timebase(void)
{
Gclk *pgclk = GCLK;
Mclk *pmclk = MCLK;
Tc *ptc4 = TC4;
- Tc *ptc5 = TC5;
Tc *ptc0 = TC0;
Evsys *pevsys = EVSYS;
@@ -189,11 +180,6 @@ uint32_t CLK_enable_timebase(void)
pgclk->PCHCTRL[TC4_GCLK_ID].bit.GEN = GEN_TC45;
pgclk->PCHCTRL[TC4_GCLK_ID].bit.CHEN = 1;
- //unmask TC5 sourcegclk2 to TC5
- pmclk->APBCMASK.bit.TC5_ = 1;
- pgclk->PCHCTRL[TC5_GCLK_ID].bit.GEN = GEN_TC45;
- pgclk->PCHCTRL[TC5_GCLK_ID].bit.CHEN = 1;
-
//configure TC4
DBGC(DC_CLK_ENABLE_TIMEBASE_TC4_BEGIN);
ptc4->COUNT16.CTRLA.bit.ENABLE = 0;
@@ -220,30 +206,6 @@ uint32_t CLK_enable_timebase(void)
DBGC(DC_CLK_ENABLE_TIMEBASE_TC4_COMPLETE);
- //configure TC5
- DBGC(DC_CLK_ENABLE_TIMEBASE_TC5_BEGIN);
- ptc5->COUNT16.CTRLA.bit.ENABLE = 0;
- while (ptc5->COUNT16.SYNCBUSY.bit.ENABLE) { DBGC(DC_CLK_ENABLE_TIMEBASE_TC5_SYNC_DISABLE); }
- ptc5->COUNT16.CTRLA.bit.SWRST = 1;
- while (ptc5->COUNT16.SYNCBUSY.bit.SWRST) { DBGC(DC_CLK_ENABLE_TIMEBASE_TC5_SYNC_SWRST_1); }
- while (ptc5->COUNT16.CTRLA.bit.SWRST) { DBGC(DC_CLK_ENABLE_TIMEBASE_TC5_SYNC_SWRST_2); }
-
- //CTRLA defaults
- //CTRLB as default, counting up
- ptc5->COUNT16.CTRLBCLR.reg = 5;
- while (ptc5->COUNT16.SYNCBUSY.bit.CTRLB) { DBGC(DC_CLK_ENABLE_TIMEBASE_TC5_SYNC_CLTRB); }
- //ptc5->COUNT16.DBGCTRL.bit.DBGRUN = 1;
-
- //wave mode
- ptc5->COUNT16.WAVE.bit.WAVEGEN = 1; //MFRQ match frequency mode, toggle each CC match
- //generate event for next stage
- ptc5->COUNT16.EVCTRL.bit.MCEO0 = 1;
-
- NVIC_EnableIRQ(TC5_IRQn);
- ptc5->COUNT16.INTENSET.bit.MC0 = 1;
-
- DBGC(DC_CLK_ENABLE_TIMEBASE_TC5_COMPLETE);
-
//unmask TC0,1, sourcegclk2 to TC0,1
pmclk->APBAMASK.bit.TC0_ = 1;
pgclk->PCHCTRL[TC0_GCLK_ID].bit.GEN = GEN_TC45;
@@ -289,37 +251,27 @@ uint32_t CLK_enable_timebase(void)
return 0;
}
-uint32_t CLK_get_ms(void)
+void CLK_delay_us(uint32_t usec)
{
- return ms_clk;
-}
-
-void CLK_delay_us(uint16_t usec)
-{
- us_delay_done = 0;
-
- if (TC5->COUNT16.CTRLA.bit.ENABLE)
- {
- TC5->COUNT16.CTRLA.bit.ENABLE = 0;
- while (TC5->COUNT16.SYNCBUSY.bit.ENABLE) {}
- }
-
- if (usec < 10) usec = 0;
- else usec -= 10;
-
- TC5->COUNT16.CC[0].reg = usec;
- while (TC5->COUNT16.SYNCBUSY.bit.CC0) {}
-
- TC5->COUNT16.CTRLA.bit.ENABLE = 1;
- while (TC5->COUNT16.SYNCBUSY.bit.ENABLE) {}
-
- while (!us_delay_done) {}
+ asm (
+ "CBZ R0, return\n\t" //If usec == 0, branch to return label
+ );
+ asm (
+ "MULS R0, %0\n\t" //Multiply R0(usec) by usec_delay_mult and store in R0
+ ".balign 16\n\t" //Ensure loop is aligned for fastest performance
+ "loop: SUBS R0, #1\n\t" //Subtract 1 from R0 and update flags (1 cycle)
+ "BNE loop\n\t" //Branch if non-zero to loop label (2 cycles) NOTE: USEC_DELAY_LOOP_CYCLES is the sum of loop cycles
+ "return:\n\t" //Return label
+ : //No output registers
+ : "r" (usec_delay_mult) //For %0
+ );
+ //Note: BX LR generated
}
void CLK_delay_ms(uint64_t msec)
{
- msec += CLK_get_ms();
- while (msec > CLK_get_ms()) {}
+ msec += timer_read64();
+ while (msec > timer_read64()) {}
}
void clk_enable_sercom_apbmask(int sercomn)
diff --git a/tmk_core/protocol/arm_atsam/clks.h b/tmk_core/protocol/arm_atsam/clks.h
index 96819bfdd0..1b01a1764e 100644
--- a/tmk_core/protocol/arm_atsam/clks.h
+++ b/tmk_core/protocol/arm_atsam/clks.h
@@ -77,9 +77,8 @@ void CLK_oscctrl_init(void);
void CLK_reset_time(void);
uint32_t CLK_set_gclk_freq(uint8_t gclkn, uint32_t freq);
uint32_t CLK_enable_timebase(void);
-uint32_t CLK_get_ms(void);
-uint64_t CLK_get_us(void);
-void CLK_delay_us(uint16_t usec);
+uint64_t timer_read64(void);
+void CLK_delay_us(uint32_t usec);
void CLK_delay_ms(uint64_t msec);
uint32_t CLK_set_spi_freq(uint8_t sercomn, uint32_t freq);
diff --git a/tmk_core/protocol/arm_atsam/i2c_master.c b/tmk_core/protocol/arm_atsam/i2c_master.c
index f608a79cc9..d91a851f37 100644
--- a/tmk_core/protocol/arm_atsam/i2c_master.c
+++ b/tmk_core/protocol/arm_atsam/i2c_master.c
@@ -265,12 +265,12 @@ uint8_t I2C3733_Init_Control(void)
//USB state machine will enable driver when communication is ready
I2C3733_Control_Set(0);
- CLK_delay_ms(1);
+ wait_ms(1);
sr_exp_data.bit.IRST = 0;
SR_EXP_WriteData();
- CLK_delay_ms(1);
+ wait_ms(1);
DBGC(DC_I2C3733_INIT_CONTROL_COMPLETE);
diff --git a/tmk_core/protocol/arm_atsam/led_matrix.c b/tmk_core/protocol/arm_atsam/led_matrix.c
index e914fc80ea..04d05af6db 100644
--- a/tmk_core/protocol/arm_atsam/led_matrix.c
+++ b/tmk_core/protocol/arm_atsam/led_matrix.c
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "arm_atsam_protocol.h"
#include "tmk_core/common/led.h"
#include <string.h>
+#include <math.h>
void SERCOM1_0_Handler( void )
{
@@ -217,6 +218,7 @@ void disp_calc_extents(void)
disp.width = disp.right - disp.left;
disp.height = disp.top - disp.bottom;
+ disp.max_distance = sqrtf(powf(disp.width, 2) + powf(disp.height, 2));
}
void disp_pixel_setup(void)
@@ -249,6 +251,7 @@ uint8_t led_animation_breathing;
uint8_t led_animation_breathe_cur;
uint8_t breathe_step;
uint8_t breathe_dir;
+uint8_t led_animation_circular;
uint64_t led_next_run;
uint8_t led_animation_id;
@@ -265,6 +268,7 @@ void led_matrix_run(void)
float go;
float bo;
float po;
+
uint8_t led_this_run = 0;
led_setup_t *f = (led_setup_t*)led_setups[led_animation_id];
@@ -327,13 +331,18 @@ void led_matrix_run(void)
for (fcur = 0; fcur < fmax; fcur++)
{
- if (led_animation_orientation)
- {
- po = led_cur->py;
+ if (led_animation_circular) {
+ po = sqrtf((powf(fabsf((disp.width / 2) - (led_cur->x - disp.left)), 2) + powf(fabsf((disp.height / 2) - (led_cur->y - disp.bottom)), 2))) / disp.max_distance * 100;
}
- else
- {
- po = led_cur->px;
+ else {
+ if (led_animation_orientation)
+ {
+ po = led_cur->py;
+ }
+ else
+ {
+ po = led_cur->px;
+ }
}
float pomod;
@@ -466,6 +475,7 @@ uint8_t led_matrix_init(void)
led_animation_breathe_cur = BREATHE_MIN_STEP;
breathe_step = 1;
breathe_dir = 1;
+ led_animation_circular = 0;
gcr_min_counter = 0;
v_5v_cat_hit = 0;
@@ -494,11 +504,11 @@ void led_matrix_task(void)
if (led_enabled)
{
//If an update may run and frame processing has completed
- if (CLK_get_ms() >= led_next_run && led_cur == lede)
+ if (timer_read64() >= led_next_run && led_cur == lede)
{
uint8_t drvid;
- led_next_run = CLK_get_ms() + LED_UPDATE_RATE; //Set next frame update time
+ led_next_run = timer_read64() + LED_UPDATE_RATE; //Set next frame update time
//NOTE: GCR does not need to be timed with LED processing, but there is really no harm
if (gcr_actual != gcr_actual_last)
diff --git a/tmk_core/protocol/arm_atsam/led_matrix.h b/tmk_core/protocol/arm_atsam/led_matrix.h
index cedea8a856..4513234e7f 100644
--- a/tmk_core/protocol/arm_atsam/led_matrix.h
+++ b/tmk_core/protocol/arm_atsam/led_matrix.h
@@ -83,6 +83,7 @@ typedef struct led_disp_s {
float bottom;
float width;
float height;
+ float max_distance;
} led_disp_t;
uint8_t led_matrix_init(void);
@@ -129,6 +130,7 @@ extern uint8_t led_animation_orientation;
extern uint8_t led_animation_breathing;
extern uint8_t led_animation_breathe_cur;
extern uint8_t breathe_dir;
+extern uint8_t led_animation_circular;
extern const uint8_t led_setups_count;
extern void *led_setups[];
diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c
index 2bda7d7c7b..eaad66e9fc 100644
--- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c
+++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c
@@ -159,7 +159,7 @@ void send_consumer(uint16_t data)
void main_subtask_usb_state(void)
{
- static uint32_t fsmstate_on_delay = 0; //Delay timer to be sure USB is actually operating before bringing up hardware
+ static uint64_t fsmstate_on_delay = 0; //Delay timer to be sure USB is actually operating before bringing up hardware
uint8_t fsmstate_now = USB->DEVICE.FSMSTATUS.reg; //Current state from hardware register
if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_SUSPEND_Val) //If USB SUSPENDED
@@ -188,9 +188,9 @@ void main_subtask_usb_state(void)
{
if (fsmstate_on_delay == 0) //If ON delay timer is cleared
{
- fsmstate_on_delay = CLK_get_ms() + 250; //Set ON delay timer
+ fsmstate_on_delay = timer_read64() + 250; //Set ON delay timer
}
- else if (CLK_get_ms() > fsmstate_on_delay) //Else if ON delay timer is active and timed out
+ else if (timer_read64() > fsmstate_on_delay) //Else if ON delay timer is active and timed out
{
suspend_wakeup_init(); //Run wakeup routine
g_usb_state = fsmstate_now; //Save current USB state
@@ -214,9 +214,9 @@ void main_subtask_power_check(void)
{
static uint64_t next_5v_checkup = 0;
- if (CLK_get_ms() > next_5v_checkup)
+ if (timer_read64() > next_5v_checkup)
{
- next_5v_checkup = CLK_get_ms() + 5;
+ next_5v_checkup = timer_read64() + 5;
v_5v = adc_get(ADC_5V);
v_5v_avg = 0.9 * v_5v_avg + 0.1 * v_5v;
@@ -229,9 +229,9 @@ void main_subtask_usb_extra_device(void)
{
static uint64_t next_usb_checkup = 0;
- if (CLK_get_ms() > next_usb_checkup)
+ if (timer_read64() > next_usb_checkup)
{
- next_usb_checkup = CLK_get_ms() + 10;
+ next_usb_checkup = timer_read64() + 10;
USB_HandleExtraDevice();
}
@@ -325,9 +325,9 @@ int main(void)
keyboard_task();
#ifdef CONSOLE_ENABLE
- if (CLK_get_ms() > next_print)
+ if (timer_read64() > next_print)
{
- next_print = CLK_get_ms() + 250;
+ next_print = timer_read64() + 250;
//Add any debug information here that you want to see very often
//dprintf("5v=%u 5vu=%u dlow=%u dhi=%u gca=%u gcd=%u\r\n", v_5v, v_5v_avg, v_5v_avg - V5_LOW, v_5v_avg - V5_HIGH, gcr_actual, gcr_desired);
}
diff --git a/tmk_core/protocol/arm_atsam/usb/compiler.h b/tmk_core/protocol/arm_atsam/usb/compiler.h
index 7d8350896b..b2ccfd73ed 100644
--- a/tmk_core/protocol/arm_atsam/usb/compiler.h
+++ b/tmk_core/protocol/arm_atsam/usb/compiler.h
@@ -134,13 +134,15 @@
* heuristics and inline the function no matter how big it thinks it
* becomes.
*/
+#if !defined(__always_inline)
#if defined(__CC_ARM)
# define __always_inline __forceinline
-#elif (defined __GNUC__ && __GNUC__ <= 6)
+#elif (defined __GNUC__)
# define __always_inline __attribute__((__always_inline__))
#elif (defined __ICCARM__)
# define __always_inline _Pragma("inline=forced")
#endif
+#endif
/**
* \def __no_inline
diff --git a/tmk_core/protocol/arm_atsam/usb/udi_cdc.c b/tmk_core/protocol/arm_atsam/usb/udi_cdc.c
index 5f3c289e81..ffe3526db5 100644
--- a/tmk_core/protocol/arm_atsam/usb/udi_cdc.c
+++ b/tmk_core/protocol/arm_atsam/usb/udi_cdc.c
@@ -1227,9 +1227,9 @@ uint32_t cdc_tx_send_time_next;
void CDC_send(void)
{
- while (CLK_get_ms() < cdc_tx_send_time_next);
+ while (timer_read64() < cdc_tx_send_time_next);
udi_cdc_tx_send(0);
- cdc_tx_send_time_next = CLK_get_ms() + CDC_SEND_INTERVAL;
+ cdc_tx_send_time_next = timer_read64() + CDC_SEND_INTERVAL;
}
uint32_t CDC_print(char *printbuf)
@@ -1238,7 +1238,7 @@ uint32_t CDC_print(char *printbuf)
char *buf = printbuf;
char c;
- if (CLK_get_ms() < 5000) return 0;
+ if (timer_read64() < 5000) return 0;
while ((c = *buf++) != 0 && !(count >= MAX_PRINT))
{
@@ -1339,7 +1339,7 @@ void CDC_init(void)
inbuf.count = 0;
inbuf.lastcount = 0;
printbuf[0] = 0;
- cdc_tx_send_time_next = CLK_get_ms() + CDC_SEND_INTERVAL;
+ cdc_tx_send_time_next = timer_read64() + CDC_SEND_INTERVAL;
}
#else //CDC line 62
diff --git a/tmk_core/protocol/arm_atsam/usb/usb2422.c b/tmk_core/protocol/arm_atsam/usb/usb2422.c
index ac19bf4ea0..d6e1922429 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb2422.c
+++ b/tmk_core/protocol/arm_atsam/usb/usb2422.c
@@ -64,7 +64,7 @@ void USB_write2422_block(void)
i2c0_transmit(USB2422_ADDR, dest, 34, 50000);
SERCOM0->I2CM.CTRLB.bit.CMD = 0x03;
while (SERCOM0->I2CM.SYNCBUSY.bit.SYSOP) { DBGC(DC_USB_WRITE2422_BLOCK_SYNC_SYSOP); }
- CLK_delay_us(100);
+ wait_us(100);
}
DBGC(DC_USB_WRITE2422_BLOCK_COMPLETE);
@@ -135,7 +135,7 @@ void USB2422_init(void)
sr_exp_data.bit.HUB_RESET_N = 1; //reset high
SR_EXP_WriteData();
- CLK_delay_us(100);
+ wait_us(100);
#ifndef MD_BOOTLOADER
@@ -154,10 +154,9 @@ void USB_reset(void)
//pulse reset for at least 1 usec
sr_exp_data.bit.HUB_RESET_N = 0; //reset low
SR_EXP_WriteData();
- CLK_delay_us(1);
+ wait_us(2);
sr_exp_data.bit.HUB_RESET_N = 1; //reset high to run
SR_EXP_WriteData();
- CLK_delay_us(1);
DBGC(DC_USB_RESET_COMPLETE);
}
@@ -247,7 +246,7 @@ void USB_set_host_by_voltage(void)
SR_EXP_WriteData();
- CLK_delay_ms(250);
+ wait_ms(250);
while ((v_5v = adc_get(ADC_5V)) < ADC_5V_START_LEVEL) { DBGC(DC_USB_SET_HOST_5V_LOW_WAITING); }
@@ -313,11 +312,11 @@ uint8_t USB2422_Port_Detect_Init(void)
USB_set_host_by_voltage();
- port_detect_retry_ms = CLK_get_ms() + PORT_DETECT_RETRY_INTERVAL;
+ port_detect_retry_ms = timer_read64() + PORT_DETECT_RETRY_INTERVAL;
while (!USB_active())
{
- tmod = CLK_get_ms() % PORT_DETECT_RETRY_INTERVAL;
+ tmod = timer_read64() % PORT_DETECT_RETRY_INTERVAL;
if (v_con_1 > v_con_2) //Values updated from USB_set_host_by_voltage();
{
@@ -333,7 +332,7 @@ uint8_t USB2422_Port_Detect_Init(void)
else { DBG_LED_OFF; }
}
- if (CLK_get_ms() > port_detect_retry_ms)
+ if (timer_read64() > port_detect_retry_ms)
{
DBGC(DC_PORT_DETECT_INIT_FAILED);
return 0;
diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c
index ee9571c950..5436d49090 100644
--- a/tmk_core/protocol/chibios/main.c
+++ b/tmk_core/protocol/chibios/main.c
@@ -113,7 +113,7 @@ int main(void) {
chSysInit();
#ifdef STM32_EEPROM_ENABLE
- EEPROM_init();
+ EEPROM_Init();
#endif
// TESTING
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index 27cf51b161..f2ecf24651 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -517,17 +517,16 @@ void EVENT_USB_Device_ControlRequest(void)
if (USB_DeviceState == DEVICE_STATE_Unattached)
return;
}
-#ifdef KEYBOARD_SHARED_EP
- uint8_t report_id = REPORT_ID_KEYBOARD;
- if (keyboard_protocol) {
- report_id = Endpoint_Read_8();
- }
- if (report_id == REPORT_ID_KEYBOARD || report_id == REPORT_ID_NKRO) {
+
+ if (Endpoint_BytesInEndpoint() == 2) {
+ uint8_t report_id = Endpoint_Read_8();
+
+ if (report_id == REPORT_ID_KEYBOARD || report_id == REPORT_ID_NKRO) {
keyboard_led_stats = Endpoint_Read_8();
+ }
+ } else {
+ keyboard_led_stats = Endpoint_Read_8();
}
-#else
- keyboard_led_stats = Endpoint_Read_8();
-#endif
Endpoint_ClearOUT();
Endpoint_ClearStatusStage();
diff --git a/users/konstantin/config.h b/users/konstantin/config.h
new file mode 100644
index 0000000000..d03333f05d
--- /dev/null
+++ b/users/konstantin/config.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#define MAGIC_KEY_LAYER0_ALT1 BSLS
+#define MAGIC_KEY_BOOTLOADER ESC
+
+#define MOUSEKEY_DELAY 50
+#define MOUSEKEY_INTERVAL 15
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 50
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
+
+#define NO_ACTION_FUNCTION
+#define NO_ACTION_MACRO
+
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
+
+#define UNICODE_CYCLE_PERSIST false
+#define UNICODE_SELECTED_MODES UC_WINC, UC_WIN, UC_LNX
+#define UNICODE_WINC_KEY KC_RGUI
diff --git a/users/konstantin/konstantin.c b/users/konstantin/konstantin.c
new file mode 100644
index 0000000000..977111c1f9
--- /dev/null
+++ b/users/konstantin/konstantin.c
@@ -0,0 +1,77 @@
+#include "konstantin.h"
+
+#ifdef LAYER_NUMPAD
+static void toggle_numpad(void) {
+ layer_invert(L_NUMPAD);
+ bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
+ if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
+ tap_code(KC_NLCK); // Toggle Num Lock to match layer state
+ }
+}
+#endif
+
+__attribute__((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keymap(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case CLEAR:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
+ }
+ return false;
+
+#ifdef LAYER_FN
+ static bool fn_lock;
+
+ case FN_FNLK:
+ if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
+ fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
+ }
+ return true;
+#endif
+
+#ifdef LAYER_NUMPAD
+ case NUMPAD:
+ if (record->event.pressed) {
+ toggle_numpad();
+ }
+ return false;
+#endif
+
+ case KC_ESC:
+ if (record->event.pressed) {
+#ifdef LAYER_NUMPAD
+ if (IS_LAYER_ON(L_NUMPAD)) {
+ toggle_numpad();
+ return false;
+ }
+#endif
+#ifdef LAYER_FN
+ if (IS_LAYER_ON(L_FN) && fn_lock) {
+ layer_off(L_FN);
+ return fn_lock = false;
+ }
+#endif
+ }
+ return true;
+
+ default:
+ return true;
+ }
+}
+
+__attribute__((weak))
+uint32_t layer_state_set_keymap(uint32_t state) {
+ return state;
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return layer_state_set_keymap(state);
+}
diff --git a/users/konstantin/konstantin.h b/users/konstantin/konstantin.h
new file mode 100644
index 0000000000..06081496b6
--- /dev/null
+++ b/users/konstantin/konstantin.h
@@ -0,0 +1,50 @@
+#pragma once
+
+#include "quantum.h"
+#ifdef TAP_DANCE_ENABLE
+ #include "tap_dance.h"
+#endif
+#ifdef UNICODE_ENABLE
+ #include "unicode.h"
+#endif
+
+#ifdef LAYER_FN
+ #define FN MO(L_FN)
+ #define FN_CAPS LT(L_FN, KC_CAPS)
+ #define FN_FNLK TT(L_FN)
+#endif
+
+#define MV_UP LCTL(KC_UP)
+#define MV_DOWN LCTL(KC_DOWN)
+#define MV_LEFT LCTL(KC_LEFT)
+#define MV_RGHT LCTL(KC_RGHT)
+#define TOP LCTL(KC_HOME)
+#define BOTTOM LCTL(KC_END)
+#define PRV_TAB LCTL(KC_PGUP)
+#define NXT_TAB LCTL(KC_PGDN)
+
+#define LCT_CPS LCTL_T(KC_CAPS)
+
+enum keycodes_user {
+ CLEAR = SAFE_RANGE,
+#ifdef LAYER_NUMPAD
+ NUMPAD,
+#endif
+
+ RANGE_KEYMAP,
+};
+
+enum layers_user {
+ L_BASE,
+#ifdef LAYER_FN
+ L_FN,
+#endif
+#ifdef LAYER_NUMPAD
+ L_NUMPAD,
+#endif
+
+ L_RANGE_KEYMAP,
+};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
+uint32_t layer_state_set_keymap(uint32_t state);
diff --git a/users/konstantin/rules.mk b/users/konstantin/rules.mk
new file mode 100644
index 0000000000..7f25a8107a
--- /dev/null
+++ b/users/konstantin/rules.mk
@@ -0,0 +1,16 @@
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+KEYBOARD_SHARED_EP = yes # TODO: Disable once Command is fixed
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+UNICODE_ENABLE = yes
+
+SRC += konstantin.c
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += tap_dance.c
+endif
+
+EXTRAFLAGS += -flto
diff --git a/users/konstantin/tap_dance.c b/users/konstantin/tap_dance.c
new file mode 100644
index 0000000000..b13f33c024
--- /dev/null
+++ b/users/konstantin/tap_dance.c
@@ -0,0 +1,93 @@
+#include "tap_dance.h"
+#include "konstantin.h"
+
+#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \
+ .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \
+ .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \
+ }
+
+void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+ // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2
+ if (state->count == 1 || state->count == 3) {
+ register_code(mods->kc1);
+ } else if (state->count == 2) {
+ unregister_code(mods->kc1);
+ register_code(mods->kc2);
+ }
+ // Prevent tap dance from sending kc1 and kc2 as weak mods
+ state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2));
+}
+
+void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+ if (state->count == 1 || state->count >= 3) {
+ unregister_code(mods->kc1);
+ }
+ if (state->count >= 2) {
+ unregister_code(mods->kc2);
+ }
+}
+
+struct {
+ bool fn_on; // Layer state when tap dance started
+ bool started;
+} td_fn_rctrl_data;
+
+void td_fn_rctrl_each(qk_tap_dance_state_t *state, void *user_data) {
+ if (!td_fn_rctrl_data.started) {
+ td_fn_rctrl_data.fn_on = IS_LAYER_ON(L_FN);
+ td_fn_rctrl_data.started = true;
+ }
+ // Single tap → Fn, double tap → RCtrl, triple tap etc. → Fn+RCtrl
+ if (state->count == 1 || state->count == 3) {
+ layer_on(L_FN);
+ } else if (state->count == 2) {
+ if (!td_fn_rctrl_data.fn_on) {
+ layer_off(L_FN);
+ }
+ register_code(KC_RCTL);
+ }
+}
+
+void td_fn_rctrl_reset(qk_tap_dance_state_t *state, void *user_data) {
+ if ((state->count == 1 || state->count >= 3) && !td_fn_rctrl_data.fn_on) {
+ layer_off(L_FN);
+ }
+ if (state->count >= 2) {
+ unregister_code(KC_RCTL);
+ }
+ td_fn_rctrl_data.started = false;
+}
+
+void td_lsft_fn_each(qk_tap_dance_state_t *state, void *user_data) {
+ // Single tap → LShift, double tap → Fn, triple tap etc. → Fn+LShift
+ if (state->count == 1 || state->count == 3) {
+ register_code(KC_LSFT);
+ } else if (state->count == 2) {
+ unregister_code(KC_LSFT);
+ // Prevent tap dance from sending LShift as a weak mod
+ state->weak_mods &= ~MOD_BIT(KC_LSFT);
+ layer_on(L_FN);
+ }
+}
+
+void td_lsft_fn_reset(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1 || state->count >= 3) {
+ unregister_code(KC_LSFT);
+ }
+ if (state->count >= 2) {
+ layer_off(L_FN);
+ }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop
+
+ [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_LALT),
+ [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_RGUI),
+ [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RCTL, KC_RSFT),
+
+ [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(td_fn_rctrl_each, NULL, td_fn_rctrl_reset),
+ [TD_LSFT_FN] = ACTION_TAP_DANCE_FN_ADVANCED(td_lsft_fn_each, NULL, td_lsft_fn_reset),
+};
diff --git a/users/konstantin/tap_dance.h b/users/konstantin/tap_dance.h
new file mode 100644
index 0000000000..922a635141
--- /dev/null
+++ b/users/konstantin/tap_dance.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "quantum.h"
+
+#define DESKTOP TD(TD_DESKTOP)
+#define DSKTP_L LCTL(LGUI(KC_LEFT))
+#define DSKTP_R LCTL(LGUI(KC_RGHT))
+
+#define RAL_LAL TD(TD_RAL_LAL)
+#define RAL_RGU TD(TD_RAL_RGU)
+#define RCT_RSF TD(TD_RCT_RSF)
+
+#define FN_RCTL TD(TD_FN_RCTL)
+#define LSFT_FN TD(TD_LSFT_FN)
+
+enum tap_dance {
+ TD_DESKTOP,
+
+ TD_RAL_LAL,
+ TD_RAL_RGU,
+ TD_RCT_RSF,
+
+ TD_FN_RCTL,
+ TD_LSFT_FN,
+};
diff --git a/users/konstantin/unicode.h b/users/konstantin/unicode.h
new file mode 100644
index 0000000000..09af7e1c7f
--- /dev/null
+++ b/users/konstantin/unicode.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "quantum.h"
+
+#define COMMA UC(0x002C)
+#define L_PAREN UC(0x0028)
+#define R_PAREN UC(0x0029)
+#define EQUALS UC(0x003D)
+#define TIMES UC(0x00D7)
+#define DIVIDE UC(0x00F7)
+#define MINUS UC(0x2212)
diff --git a/users/losinggeneration/rules.mk b/users/losinggeneration/rules.mk
index 75277116b2..295367fbca 100644
--- a/users/losinggeneration/rules.mk
+++ b/users/losinggeneration/rules.mk
@@ -11,6 +11,3 @@ MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
TAP_DANCE_ENABLE = yes # Enable tap dancing
#UNICODE_ENABLE = no # Unicode
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/users/spacebarracecar/config.h b/users/spacebarracecar/config.h
index e69de29bb2..748c047155 100644
--- a/users/spacebarracecar/config.h
+++ b/users/spacebarracecar/config.h
@@ -0,0 +1,2 @@
+#pragma once
+#define TAPPING_TERM 200
diff --git a/users/spacebarracecar/spacebarracecar.c b/users/spacebarracecar/spacebarracecar.c
index 130d7dc2d4..2ab10d9459 100644
--- a/users/spacebarracecar/spacebarracecar.c
+++ b/users/spacebarracecar/spacebarracecar.c
@@ -96,7 +96,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
navesc_timer = timer_read();
layer_on(_NAV);
} else {
- if (timer_elapsed(navesc_timer) < 200 && navesc) {
+ if (timer_elapsed(navesc_timer) < TAPPING_TERM && navesc) {
register_code(KC_ESC);
unregister_code(KC_ESC);
}
@@ -134,7 +134,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
register_code(KC_LSFT);
lshift = true;
} else {
- if (timer_elapsed(lshift_timer) < 200 && lshiftp && !game) {
+ if (timer_elapsed(lshift_timer) < TAPPING_TERM && lshiftp && !game) {
register_code(KC_LSFT);
register_code(KC_8);
unregister_code(KC_8);
@@ -154,7 +154,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
register_code(KC_LSFT);
rshift = true;
} else {
- if (timer_elapsed(rshift_timer) < 200 && rshiftp && !game) {
+ if (timer_elapsed(rshift_timer) < TAPPING_TERM && rshiftp && !game) {
register_code(KC_LSFT);
register_code(KC_9);
unregister_code(KC_9);
diff --git a/users/spacebarracecar/spacebarracecar.h b/users/spacebarracecar/spacebarracecar.h
index d0259b73cc..b57cbed824 100644
--- a/users/spacebarracecar/spacebarracecar.h
+++ b/users/spacebarracecar/spacebarracecar.h
@@ -88,6 +88,8 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
#define GUIL LGUI(KC_LEFT)
#define GUIR RGUI(KC_RIGHT)
+#define CTLENT CTL_T(KC_ENT)
+
/*
Templates for Keys, with custom shifted and non shifted Characters
*/